From 740e4f64aebe5a1343980fed5aef6852cbe3999f Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 9 May 2020 19:31:00 -0400 Subject: [PATCH] v0.8.1: Design improvements to DM-300: - The fight now starts when a player approaches a pylon, not when they leave the entrance - Increased the speed/intensity of the environment spark particle effects - Made several changes to DM-300's dialogue, and swapped the current hint for a new one The goal of these changes is to make the goals of the fight more intuitive --- .../assets/messages/actors/actors.properties | 10 ++-- .../actors/mobs/NewDM300.java | 7 ++- .../levels/NewCavesBossLevel.java | 52 +++++++++++++------ 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 9bffdb528..1be9f4541 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -511,11 +511,11 @@ actors.mobs.newdm300.notice=UNAUTHORIZED PERSONNEL DETECTED! actors.mobs.newdm300.shield=DM-300 pulls power from the exposed wires and shields itself! actors.mobs.newdm300.vent=DM-300 fires a jet of toxic exhaust! actors.mobs.newdm300.rocks=DM-300 slams the ground, loosening rocks from the ceiling! -actors.mobs.newdm300.charging=SUSTAINING DAMAGE! CHARGING FROM POWER PYLON... -actors.mobs.newdm300.charging_hint=Sparks erupt all around you! They seem to be gravitating somewhere... -actors.mobs.newdm300.supercharged=SUPERCHARGE COMPLETE, OPERATING AT 200% POWER! -actors.mobs.newdm300.charge_lost=POWER GRID DAMAGED, REVERTING TO LOCAL POWER! -actors.mobs.newdm300.pylons_destroyed=ALERT, INSTABILITY DETECTED IN POWER GRID! +actors.mobs.newdm300.charging=SUSTAINING DAMAGE! ACTIVATING POWER PYLON! +actors.mobs.newdm300.charging_hint=DM-300 is invulnerable while it is being energized by a pylon! +actors.mobs.newdm300.supercharged=DESTROY! DESTROY! DESTROY! +actors.mobs.newdm300.charge_lost=PYLON DESTROYED! REVERTING TO LOCAL POWER! +actors.mobs.newdm300.pylons_destroyed=ALERT! INSTABILITY DETECTED IN POWER GRID! actors.mobs.newdm300.rankings_desc=Crushed by the DM-300 actors.mobs.newdm300.def_verb=blocked actors.mobs.newdm300.defeated=CRITICAL DAMAGE! ATTEMPTING SHUTDO- diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/NewDM300.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/NewDM300.java index 98c6c73f7..74dc30875 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/NewDM300.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/NewDM300.java @@ -422,6 +422,8 @@ public class NewDM300 extends Mob { } + private boolean invulnWarned = false; + @Override public void damage(int dmg, Object src) { super.damage(dmg, src); @@ -443,6 +445,10 @@ public class NewDM300 extends Mob { @Override public boolean isInvulnerable(Class effect) { + if (supercharged && !invulnWarned){ + invulnWarned = true; + GLog.w(Messages.get(this, "charging_hint")); + } return supercharged; } @@ -457,7 +463,6 @@ public class NewDM300 extends Mob { ((DM300Sprite)sprite).charge(); chargeAnnounced = false; - GLog.h(Messages.get(this, "charging_hint")); } public boolean isSupercharged(){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewCavesBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewCavesBossLevel.java index 37d90aa36..33c423a58 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewCavesBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewCavesBossLevel.java @@ -159,10 +159,30 @@ public class NewCavesBossLevel extends Level { customArenaVisuals = (ArenaVisuals) c; } } + + //pre-0.8.1 saves that may not have had pylons added + int gatePos = pointToCell(new Point(gate.left, gate.top)); + if (!locked && solid[gatePos]){ + + for (int i : pylonPositions) { + if (findMob(i) == null) { + Pylon pylon = new Pylon(); + pylon.pos = i; + mobs.add(pylon); + } + } + + } } @Override - protected void createMobs() { } + protected void createMobs() { + for (int i : pylonPositions) { + Pylon pylon = new Pylon(); + pylon.pos = i; + mobs.add(pylon); + } + } @Override public Actor respawner() { @@ -211,13 +231,15 @@ public class NewCavesBossLevel extends Level { public void occupyCell(Char ch) { super.occupyCell(ch); - //seal the level when the hero moves off the entrance, the level isn't already sealed, and the gate hasn't been destroyed + //seal the level when the hero moves near to a pylon, the level isn't already sealed, and the gate hasn't been destroyed int gatePos = pointToCell(new Point(gate.left, gate.top)); - if (ch == Dungeon.hero && (Dungeon.level.distance(ch.pos, entrance) > 1) - && !locked && solid[gatePos]){ - - seal(); - + if (ch == Dungeon.hero && !locked && solid[gatePos]){ + for (int pos : pylonPositions){ + if (Dungeon.level.distance(ch.pos, pos) <= 3){ + seal(); + break; + } + } } } @@ -240,12 +262,6 @@ public class NewCavesBossLevel extends Level { } while (!openSpace[boss.pos] || map[boss.pos] == Terrain.EMPTY_SP); GameScene.add( boss ); - for (int i : pylonPositions) { - Pylon pylon = new Pylon(); - pylon.pos = i; - GameScene.add(pylon); - } - } @Override @@ -780,8 +796,11 @@ public class NewCavesBossLevel extends Level { s.resetStatic(x, y); s.speed.set((energySourceSprite.x + energySourceSprite.width/2f) - x, (energySourceSprite.y + energySourceSprite.height/2f) - y); - s.speed.normalize().scale(DungeonTilemap.SIZE); - s.acc.set(s.speed); + s.speed.normalize().scale(DungeonTilemap.SIZE*2f); + + //offset the particles slightly so they don't go too far outside of the cell + s.x -= s.speed.x/8f; + s.y -= s.speed.y/8f; } @Override @@ -799,8 +818,7 @@ public class NewCavesBossLevel extends Level { public void use( BlobEmitter emitter ) { super.use( emitter ); energySourceSprite = null; - //emitter.bound.set( 4/16f, 4/16f, 12/16f, 12/16f); - emitter.pour(DIRECTED_SPARKS, 0.2f); + emitter.pour(DIRECTED_SPARKS, 0.125f); } }