v2.2.0: refactored code that triggers on level transition
This commit is contained in:
@@ -70,13 +70,11 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Monk;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Monk;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Snake;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Snake;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Blacksmith;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CheckedCell;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.CheckedCell;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Amulet;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Ankh;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Ankh;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem;
|
import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem;
|
||||||
@@ -146,24 +144,16 @@ import com.shatteredpixel.shatteredpixeldungeon.mechanics.ShadowCaster;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.SurfaceScene;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.BlacksmithSprite;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ui.AttackIndicator;
|
import com.shatteredpixel.shatteredpixeldungeon.ui.AttackIndicator;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
|
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlotButton;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ui.StatusPane;
|
import com.shatteredpixel.shatteredpixeldungeon.ui.StatusPane;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndHero;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndHero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndMessage;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndResurrect;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndResurrect;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTitledMessage;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTradeItem;
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTradeItem;
|
||||||
import com.watabou.noosa.Game;
|
import com.watabou.noosa.Game;
|
||||||
import com.watabou.noosa.audio.Sample;
|
import com.watabou.noosa.audio.Sample;
|
||||||
@@ -1264,155 +1254,12 @@ public class Hero extends Char {
|
|||||||
ready();
|
ready();
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//TODO, these checks are getting cumbersome, perhaps move them into Level?
|
|
||||||
} else if (!Dungeon.level.locked && transition != null && transition.inside(pos)) {
|
} else if (!Dungeon.level.locked && transition != null && transition.inside(pos)) {
|
||||||
|
|
||||||
if (transition.type == LevelTransition.Type.SURFACE){
|
if (Dungeon.level.activateTransition(this, transition)){
|
||||||
if (belongings.getItem( Amulet.class ) == null) {
|
|
||||||
Game.runOnRenderThread(new Callback() {
|
|
||||||
@Override
|
|
||||||
public void call() {
|
|
||||||
GameScene.show( new WndMessage( Messages.get(Hero.this, "leave") ) );
|
|
||||||
}
|
|
||||||
});
|
|
||||||
ready();
|
|
||||||
} else {
|
|
||||||
Statistics.ascended = true;
|
|
||||||
Badges.silentValidateHappyEnd();
|
|
||||||
Dungeon.win( Amulet.class );
|
|
||||||
Dungeon.deleteGame( GamesInProgress.curSlot, true );
|
|
||||||
Game.switchScene( SurfaceScene.class );
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (transition.type == LevelTransition.Type.REGULAR_ENTRANCE
|
|
||||||
&& Dungeon.depth == 25
|
|
||||||
//ascension challenge only works on runs started on v1.3+
|
|
||||||
&& Dungeon.initialVersion > ShatteredPixelDungeon.v1_2_3
|
|
||||||
&& belongings.getItem(Amulet.class) != null
|
|
||||||
&& buff(AscensionChallenge.class) == null) {
|
|
||||||
|
|
||||||
Game.runOnRenderThread(new Callback() {
|
|
||||||
@Override
|
|
||||||
public void call() {
|
|
||||||
GameScene.show( new WndOptions( new ItemSprite(ItemSpriteSheet.AMULET),
|
|
||||||
Messages.get(Amulet.class, "ascent_title"),
|
|
||||||
Messages.get(Amulet.class, "ascent_desc"),
|
|
||||||
Messages.get(Amulet.class, "ascent_yes"),
|
|
||||||
Messages.get(Amulet.class, "ascent_no")){
|
|
||||||
@Override
|
|
||||||
protected void onSelect(int index) {
|
|
||||||
if (index == 0){
|
|
||||||
Buff.affect(Hero.this, AscensionChallenge.class);
|
|
||||||
Statistics.highestAscent = 25;
|
|
||||||
actTransition(action);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
});
|
|
||||||
ready();
|
|
||||||
|
|
||||||
} else if (transition.type == LevelTransition.Type.BRANCH_EXIT
|
|
||||||
&& Dungeon.depth >= 11 && Dungeon.depth <= 14
|
|
||||||
&& (!Blacksmith.Quest.given() || Blacksmith.Quest.oldQuestMineBlocked() || Blacksmith.Quest.completed() || !Blacksmith.Quest.started())) {
|
|
||||||
|
|
||||||
if (Blacksmith.Quest.oldQuestMineBlocked()){
|
|
||||||
GLog.w(Messages.get(Blacksmith.class, "cant_enter_old"));
|
|
||||||
} else if (!Blacksmith.Quest.given() || Blacksmith.Quest.completed()) {
|
|
||||||
GLog.w(Messages.get(Blacksmith.class, "entrance_blocked"));
|
|
||||||
} else if (!Blacksmith.Quest.started() && Blacksmith.Quest.Type() != 0){
|
|
||||||
final Pickaxe pick = belongings.getItem(Pickaxe.class);
|
|
||||||
Game.runOnRenderThread(new Callback() {
|
|
||||||
@Override
|
|
||||||
public void call() {
|
|
||||||
if (pick == null){
|
|
||||||
GameScene.show( new WndTitledMessage(new BlacksmithSprite(),
|
|
||||||
Messages.titleCase(Messages.get(Blacksmith.class, "name")),
|
|
||||||
Messages.get(Blacksmith.class, "lost_pick"))
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
GameScene.show( new WndOptions( new BlacksmithSprite(),
|
|
||||||
Messages.titleCase(Messages.get(Blacksmith.class, "name")),
|
|
||||||
Messages.get(Blacksmith.class, "quest_start_prompt"),
|
|
||||||
Messages.get(Blacksmith.class, "enter_yes"),
|
|
||||||
Messages.get(Blacksmith.class, "enter_no")){
|
|
||||||
@Override
|
|
||||||
protected void onSelect(int index) {
|
|
||||||
if (index == 0){
|
|
||||||
Blacksmith.Quest.start();
|
|
||||||
actTransition(action);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
ready();
|
|
||||||
|
|
||||||
} else if (transition.type == LevelTransition.Type.BRANCH_ENTRANCE
|
|
||||||
&& Dungeon.depth >= 11 && Dungeon.depth <= 14
|
|
||||||
&& !Blacksmith.Quest.completed() && Blacksmith.Quest.Type() != 0) {
|
|
||||||
|
|
||||||
String warnText;
|
|
||||||
DarkGold gold = belongings.getItem(DarkGold.class);
|
|
||||||
int goldAmount = gold == null ? 0 : gold.quantity();
|
|
||||||
if (goldAmount < 10){
|
|
||||||
warnText = Messages.get(Blacksmith.class, "exit_warn_none");
|
|
||||||
} else if (goldAmount < 20){
|
|
||||||
warnText = Messages.get(Blacksmith.class, "exit_warn_low");
|
|
||||||
} else if (goldAmount < 30){
|
|
||||||
warnText = Messages.get(Blacksmith.class, "exit_warn_med");
|
|
||||||
} else if (goldAmount < 40){
|
|
||||||
warnText = Messages.get(Blacksmith.class, "exit_warn_high");
|
|
||||||
} else {
|
|
||||||
warnText = Messages.get(Blacksmith.class, "exit_warn_full");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Blacksmith.Quest.bossBeaten()){
|
|
||||||
switch (Blacksmith.Quest.Type()){
|
|
||||||
case 1: warnText += "\n\n" + Messages.get(Blacksmith.class, "exit_warn_crystal"); break;
|
|
||||||
case 2: warnText += "\n\n" + Messages.get(Blacksmith.class, "exit_warn_fungi"); break;
|
|
||||||
case 3: warnText += "\n\n" + Messages.get(Blacksmith.class, "exit_warn_gnoll"); break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String finalWarnText = warnText;
|
|
||||||
Game.runOnRenderThread(new Callback() {
|
|
||||||
@Override
|
|
||||||
public void call() {
|
|
||||||
GameScene.show( new WndOptions( new BlacksmithSprite(),
|
|
||||||
Messages.titleCase(Messages.get(Blacksmith.class, "name")),
|
|
||||||
finalWarnText,
|
|
||||||
Messages.get(Blacksmith.class, "exit_yes"),
|
|
||||||
Messages.get(Blacksmith.class, "exit_no")){
|
|
||||||
@Override
|
|
||||||
protected void onSelect(int index) {
|
|
||||||
if (index == 0){
|
|
||||||
Blacksmith.Quest.complete();
|
|
||||||
actTransition(action);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
});
|
|
||||||
ready();
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
curAction = null;
|
curAction = null;
|
||||||
|
} else {
|
||||||
Level.beforeTransition();
|
ready();
|
||||||
InterlevelScene.curTransition = transition;
|
|
||||||
if (transition.type == LevelTransition.Type.REGULAR_EXIT
|
|
||||||
|| transition.type == LevelTransition.Type.BRANCH_EXIT) {
|
|
||||||
InterlevelScene.mode = InterlevelScene.Mode.DESCEND;
|
|
||||||
} else {
|
|
||||||
InterlevelScene.mode = InterlevelScene.Mode.ASCEND;
|
|
||||||
}
|
|
||||||
Game.switchScene(InterlevelScene.class);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -23,7 +23,12 @@ package com.shatteredpixel.shatteredpixeldungeon.levels;
|
|||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Blacksmith;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Blacksmith;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.quest.Pickaxe;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.CavesPainter;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.CavesPainter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
||||||
@@ -42,12 +47,18 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.traps.StormTrap;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.SummoningTrap;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.SummoningTrap;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.WarpingTrap;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.WarpingTrap;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.BlacksmithSprite;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTileSheet;
|
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTileSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTitledMessage;
|
||||||
import com.watabou.noosa.Game;
|
import com.watabou.noosa.Game;
|
||||||
import com.watabou.noosa.Group;
|
import com.watabou.noosa.Group;
|
||||||
import com.watabou.noosa.audio.Music;
|
import com.watabou.noosa.audio.Music;
|
||||||
import com.watabou.noosa.particles.PixelParticle;
|
import com.watabou.noosa.particles.PixelParticle;
|
||||||
|
import com.watabou.utils.Callback;
|
||||||
import com.watabou.utils.PointF;
|
import com.watabou.utils.PointF;
|
||||||
import com.watabou.utils.Random;
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
@@ -95,6 +106,59 @@ public class CavesLevel extends RegularLevel {
|
|||||||
.setTraps(nTraps(), trapClasses(), trapChances());
|
.setTraps(nTraps(), trapClasses(), trapChances());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean activateTransition(Hero hero, LevelTransition transition) {
|
||||||
|
if (transition.type == LevelTransition.Type.BRANCH_EXIT
|
||||||
|
&& (!Blacksmith.Quest.given() || Blacksmith.Quest.oldQuestMineBlocked() || Blacksmith.Quest.completed() || !Blacksmith.Quest.started())) {
|
||||||
|
|
||||||
|
Blacksmith smith = null;
|
||||||
|
for (Char c : Actor.chars()){
|
||||||
|
if (c instanceof Blacksmith){
|
||||||
|
smith = (Blacksmith) c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Blacksmith.Quest.oldQuestMineBlocked()){
|
||||||
|
GLog.w(Messages.get(Blacksmith.class, "cant_enter_old"));
|
||||||
|
} else if (smith == null || !Blacksmith.Quest.given() || Blacksmith.Quest.completed()) {
|
||||||
|
GLog.w(Messages.get(Blacksmith.class, "entrance_blocked"));
|
||||||
|
} else if (!Blacksmith.Quest.started() && Blacksmith.Quest.Type() != 0){
|
||||||
|
final Pickaxe pick = hero.belongings.getItem(Pickaxe.class);
|
||||||
|
Game.runOnRenderThread(new Callback() {
|
||||||
|
@Override
|
||||||
|
public void call() {
|
||||||
|
if (pick == null){
|
||||||
|
GameScene.show( new WndTitledMessage(new BlacksmithSprite(),
|
||||||
|
Messages.titleCase(Messages.get(Blacksmith.class, "name")),
|
||||||
|
Messages.get(Blacksmith.class, "lost_pick"))
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
GameScene.show( new WndOptions( new BlacksmithSprite(),
|
||||||
|
Messages.titleCase(Messages.get(Blacksmith.class, "name")),
|
||||||
|
Messages.get(Blacksmith.class, "quest_start_prompt"),
|
||||||
|
Messages.get(Blacksmith.class, "enter_yes"),
|
||||||
|
Messages.get(Blacksmith.class, "enter_no")){
|
||||||
|
@Override
|
||||||
|
protected void onSelect(int index) {
|
||||||
|
if (index == 0){
|
||||||
|
Blacksmith.Quest.start();
|
||||||
|
CavesLevel.super.activateTransition(hero, transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return super.activateTransition(hero, transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String tilesTex() {
|
public String tilesTex() {
|
||||||
return Assets.Environment.TILES_CAVES;
|
return Assets.Environment.TILES_CAVES;
|
||||||
|
|||||||
@@ -24,22 +24,30 @@ package com.shatteredpixel.shatteredpixeldungeon.levels;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Bones;
|
import com.shatteredpixel.shatteredpixeldungeon.Bones;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.YogDzewa;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.YogDzewa;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.Amulet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
|
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
|
||||||
import com.watabou.noosa.Game;
|
import com.watabou.noosa.Game;
|
||||||
import com.watabou.noosa.Group;
|
import com.watabou.noosa.Group;
|
||||||
import com.watabou.noosa.Tilemap;
|
import com.watabou.noosa.Tilemap;
|
||||||
@@ -305,6 +313,40 @@ public class HallsBossLevel extends Level {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean activateTransition(Hero hero, LevelTransition transition) {
|
||||||
|
if (transition.type == LevelTransition.Type.REGULAR_ENTRANCE
|
||||||
|
//ascension challenge only works on runs started on v1.3+
|
||||||
|
&& Dungeon.initialVersion > ShatteredPixelDungeon.v1_2_3
|
||||||
|
&& hero.belongings.getItem(Amulet.class) != null
|
||||||
|
&& hero.buff(AscensionChallenge.class) == null) {
|
||||||
|
|
||||||
|
Game.runOnRenderThread(new Callback() {
|
||||||
|
@Override
|
||||||
|
public void call() {
|
||||||
|
GameScene.show( new WndOptions( new ItemSprite(ItemSpriteSheet.AMULET),
|
||||||
|
Messages.get(Amulet.class, "ascent_title"),
|
||||||
|
Messages.get(Amulet.class, "ascent_desc"),
|
||||||
|
Messages.get(Amulet.class, "ascent_yes"),
|
||||||
|
Messages.get(Amulet.class, "ascent_no")){
|
||||||
|
@Override
|
||||||
|
protected void onSelect(int index) {
|
||||||
|
if (index == 0){
|
||||||
|
Buff.affect(hero, AscensionChallenge.class);
|
||||||
|
Statistics.highestAscent = 25;
|
||||||
|
HallsBossLevel.super.activateTransition(hero, transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return super.activateTransition(hero, transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String tileName( int tile ) {
|
public String tileName( int tile ) {
|
||||||
switch (tile) {
|
switch (tile) {
|
||||||
|
|||||||
@@ -79,13 +79,14 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
|
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Swiftthistle;
|
import com.shatteredpixel.shatteredpixeldungeon.plants.Swiftthistle;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
|
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
|
||||||
import com.watabou.utils.BArray;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
import com.watabou.noosa.Game;
|
import com.watabou.noosa.Game;
|
||||||
import com.watabou.noosa.Group;
|
import com.watabou.noosa.Group;
|
||||||
import com.watabou.noosa.audio.Sample;
|
import com.watabou.noosa.audio.Sample;
|
||||||
|
import com.watabou.utils.BArray;
|
||||||
import com.watabou.utils.Bundlable;
|
import com.watabou.utils.Bundlable;
|
||||||
import com.watabou.utils.Bundle;
|
import com.watabou.utils.Bundle;
|
||||||
import com.watabou.utils.GameMath;
|
import com.watabou.utils.GameMath;
|
||||||
@@ -537,6 +538,24 @@ public abstract class Level implements Bundlable {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//returns true if we immediately transition, false otherwise
|
||||||
|
public boolean activateTransition(Hero hero, LevelTransition transition){
|
||||||
|
if (locked){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
beforeTransition();
|
||||||
|
InterlevelScene.curTransition = transition;
|
||||||
|
if (transition.type == LevelTransition.Type.REGULAR_EXIT
|
||||||
|
|| transition.type == LevelTransition.Type.BRANCH_EXIT) {
|
||||||
|
InterlevelScene.mode = InterlevelScene.Mode.DESCEND;
|
||||||
|
} else {
|
||||||
|
InterlevelScene.mode = InterlevelScene.Mode.ASCEND;
|
||||||
|
}
|
||||||
|
Game.switchScene(InterlevelScene.class);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//some buff effects have special logic or are cancelled from the hero before transitioning levels
|
//some buff effects have special logic or are cancelled from the hero before transitioning levels
|
||||||
public static void beforeTransition(){
|
public static void beforeTransition(){
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,15 @@ package com.shatteredpixel.shatteredpixeldungeon.levels;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Bones;
|
import com.shatteredpixel.shatteredpixeldungeon.Bones;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Blacksmith;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.quest.DarkGold;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.builders.Builder;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.builders.Builder;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.builders.FigureEightBuilder;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.builders.FigureEightBuilder;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.MiningLevelPainter;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.MiningLevelPainter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
||||||
@@ -39,10 +43,15 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.MineSecretRoo
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.MineSmallRoom;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.MineSmallRoom;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.BlacksmithSprite;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
|
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
|
||||||
|
import com.watabou.noosa.Game;
|
||||||
import com.watabou.noosa.Group;
|
import com.watabou.noosa.Group;
|
||||||
import com.watabou.noosa.Image;
|
import com.watabou.noosa.Image;
|
||||||
import com.watabou.noosa.Tilemap;
|
import com.watabou.noosa.Tilemap;
|
||||||
|
import com.watabou.utils.Callback;
|
||||||
import com.watabou.utils.Random;
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -150,6 +159,60 @@ public class MiningLevel extends CavesLevel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean activateTransition(Hero hero, LevelTransition transition) {
|
||||||
|
if (transition.type == LevelTransition.Type.BRANCH_ENTRANCE
|
||||||
|
&& !Blacksmith.Quest.completed() && Blacksmith.Quest.Type() != 0) {
|
||||||
|
|
||||||
|
String warnText;
|
||||||
|
DarkGold gold = hero.belongings.getItem(DarkGold.class);
|
||||||
|
int goldAmount = gold == null ? 0 : gold.quantity();
|
||||||
|
if (goldAmount < 10){
|
||||||
|
warnText = Messages.get(Blacksmith.class, "exit_warn_none");
|
||||||
|
} else if (goldAmount < 20){
|
||||||
|
warnText = Messages.get(Blacksmith.class, "exit_warn_low");
|
||||||
|
} else if (goldAmount < 30){
|
||||||
|
warnText = Messages.get(Blacksmith.class, "exit_warn_med");
|
||||||
|
} else if (goldAmount < 40){
|
||||||
|
warnText = Messages.get(Blacksmith.class, "exit_warn_high");
|
||||||
|
} else {
|
||||||
|
warnText = Messages.get(Blacksmith.class, "exit_warn_full");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Blacksmith.Quest.bossBeaten()){
|
||||||
|
switch (Blacksmith.Quest.Type()){
|
||||||
|
case 1: warnText += "\n\n" + Messages.get(Blacksmith.class, "exit_warn_crystal"); break;
|
||||||
|
case 2: warnText += "\n\n" + Messages.get(Blacksmith.class, "exit_warn_fungi"); break;
|
||||||
|
case 3: warnText += "\n\n" + Messages.get(Blacksmith.class, "exit_warn_gnoll"); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String finalWarnText = warnText;
|
||||||
|
Game.runOnRenderThread(new Callback() {
|
||||||
|
@Override
|
||||||
|
public void call() {
|
||||||
|
GameScene.show(new WndOptions( new BlacksmithSprite(),
|
||||||
|
Messages.titleCase(Messages.get(Blacksmith.class, "name")),
|
||||||
|
finalWarnText,
|
||||||
|
Messages.get(Blacksmith.class, "exit_yes"),
|
||||||
|
Messages.get(Blacksmith.class, "exit_no")){
|
||||||
|
@Override
|
||||||
|
protected void onSelect(int index) {
|
||||||
|
if (index == 0){
|
||||||
|
Blacksmith.Quest.complete();
|
||||||
|
MiningLevel.super.activateTransition(hero, transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return super.activateTransition(hero, transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String tileDesc( int tile ) {
|
public String tileDesc( int tile ) {
|
||||||
switch (tile) {
|
switch (tile) {
|
||||||
|
|||||||
@@ -22,9 +22,15 @@
|
|||||||
package com.shatteredpixel.shatteredpixeldungeon.levels;
|
package com.shatteredpixel.shatteredpixeldungeon.levels;
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Ripple;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Ripple;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.Amulet;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.levels.features.LevelTransition;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.SewerPainter;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.SewerPainter;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.AlarmTrap;
|
||||||
@@ -41,12 +47,15 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ToxicTrap;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.WornDartTrap;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.WornDartTrap;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.scenes.SurfaceScene;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.windows.WndMessage;
|
||||||
import com.watabou.noosa.Game;
|
import com.watabou.noosa.Game;
|
||||||
import com.watabou.noosa.Group;
|
import com.watabou.noosa.Group;
|
||||||
import com.watabou.noosa.audio.Music;
|
import com.watabou.noosa.audio.Music;
|
||||||
import com.watabou.noosa.particles.Emitter;
|
import com.watabou.noosa.particles.Emitter;
|
||||||
import com.watabou.noosa.particles.PixelParticle;
|
import com.watabou.noosa.particles.PixelParticle;
|
||||||
|
import com.watabou.utils.Callback;
|
||||||
import com.watabou.utils.ColorMath;
|
import com.watabou.utils.ColorMath;
|
||||||
import com.watabou.utils.PointF;
|
import com.watabou.utils.PointF;
|
||||||
import com.watabou.utils.Random;
|
import com.watabou.utils.Random;
|
||||||
@@ -123,6 +132,30 @@ public class SewerLevel extends RegularLevel {
|
|||||||
super.createMobs();
|
super.createMobs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean activateTransition(Hero hero, LevelTransition transition) {
|
||||||
|
if (transition.type == LevelTransition.Type.SURFACE){
|
||||||
|
if (hero.belongings.getItem( Amulet.class ) == null) {
|
||||||
|
Game.runOnRenderThread(new Callback() {
|
||||||
|
@Override
|
||||||
|
public void call() {
|
||||||
|
GameScene.show( new WndMessage( Messages.get(hero, "leave") ) );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
Statistics.ascended = true;
|
||||||
|
Badges.silentValidateHappyEnd();
|
||||||
|
Dungeon.win( Amulet.class );
|
||||||
|
Dungeon.deleteGame( GamesInProgress.curSlot, true );
|
||||||
|
Game.switchScene( SurfaceScene.class );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return super.activateTransition(hero, transition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Group addVisuals() {
|
public Group addVisuals() {
|
||||||
super.addVisuals();
|
super.addVisuals();
|
||||||
|
|||||||
Reference in New Issue
Block a user