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
This commit is contained in:
parent
b369cf28ea
commit
740e4f64ae
|
@ -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-
|
||||
|
|
|
@ -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(){
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user