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.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.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.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=SUSTAINING DAMAGE! ACTIVATING POWER PYLON!
|
||||||
actors.mobs.newdm300.charging_hint=Sparks erupt all around you! They seem to be gravitating somewhere...
|
actors.mobs.newdm300.charging_hint=DM-300 is invulnerable while it is being energized by a pylon!
|
||||||
actors.mobs.newdm300.supercharged=SUPERCHARGE COMPLETE, OPERATING AT 200% POWER!
|
actors.mobs.newdm300.supercharged=DESTROY! DESTROY! DESTROY!
|
||||||
actors.mobs.newdm300.charge_lost=POWER GRID DAMAGED, REVERTING TO LOCAL POWER!
|
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.pylons_destroyed=ALERT! INSTABILITY DETECTED IN POWER GRID!
|
||||||
actors.mobs.newdm300.rankings_desc=Crushed by the DM-300
|
actors.mobs.newdm300.rankings_desc=Crushed by the DM-300
|
||||||
actors.mobs.newdm300.def_verb=blocked
|
actors.mobs.newdm300.def_verb=blocked
|
||||||
actors.mobs.newdm300.defeated=CRITICAL DAMAGE! ATTEMPTING SHUTDO-
|
actors.mobs.newdm300.defeated=CRITICAL DAMAGE! ATTEMPTING SHUTDO-
|
||||||
|
|
|
@ -422,6 +422,8 @@ public class NewDM300 extends Mob {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean invulnWarned = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void damage(int dmg, Object src) {
|
public void damage(int dmg, Object src) {
|
||||||
super.damage(dmg, src);
|
super.damage(dmg, src);
|
||||||
|
@ -443,6 +445,10 @@ public class NewDM300 extends Mob {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isInvulnerable(Class effect) {
|
public boolean isInvulnerable(Class effect) {
|
||||||
|
if (supercharged && !invulnWarned){
|
||||||
|
invulnWarned = true;
|
||||||
|
GLog.w(Messages.get(this, "charging_hint"));
|
||||||
|
}
|
||||||
return supercharged;
|
return supercharged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,7 +463,6 @@ public class NewDM300 extends Mob {
|
||||||
((DM300Sprite)sprite).charge();
|
((DM300Sprite)sprite).charge();
|
||||||
chargeAnnounced = false;
|
chargeAnnounced = false;
|
||||||
|
|
||||||
GLog.h(Messages.get(this, "charging_hint"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSupercharged(){
|
public boolean isSupercharged(){
|
||||||
|
|
|
@ -159,10 +159,30 @@ public class NewCavesBossLevel extends Level {
|
||||||
customArenaVisuals = (ArenaVisuals) c;
|
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
|
@Override
|
||||||
protected void createMobs() { }
|
protected void createMobs() {
|
||||||
|
for (int i : pylonPositions) {
|
||||||
|
Pylon pylon = new Pylon();
|
||||||
|
pylon.pos = i;
|
||||||
|
mobs.add(pylon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Actor respawner() {
|
public Actor respawner() {
|
||||||
|
@ -211,13 +231,15 @@ public class NewCavesBossLevel extends Level {
|
||||||
public void occupyCell(Char ch) {
|
public void occupyCell(Char ch) {
|
||||||
super.occupyCell(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));
|
int gatePos = pointToCell(new Point(gate.left, gate.top));
|
||||||
if (ch == Dungeon.hero && (Dungeon.level.distance(ch.pos, entrance) > 1)
|
if (ch == Dungeon.hero && !locked && solid[gatePos]){
|
||||||
&& !locked && solid[gatePos]){
|
for (int pos : pylonPositions){
|
||||||
|
if (Dungeon.level.distance(ch.pos, pos) <= 3){
|
||||||
seal();
|
seal();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,12 +262,6 @@ public class NewCavesBossLevel extends Level {
|
||||||
} while (!openSpace[boss.pos] || map[boss.pos] == Terrain.EMPTY_SP);
|
} while (!openSpace[boss.pos] || map[boss.pos] == Terrain.EMPTY_SP);
|
||||||
GameScene.add( boss );
|
GameScene.add( boss );
|
||||||
|
|
||||||
for (int i : pylonPositions) {
|
|
||||||
Pylon pylon = new Pylon();
|
|
||||||
pylon.pos = i;
|
|
||||||
GameScene.add(pylon);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -780,8 +796,11 @@ public class NewCavesBossLevel extends Level {
|
||||||
s.resetStatic(x, y);
|
s.resetStatic(x, y);
|
||||||
s.speed.set((energySourceSprite.x + energySourceSprite.width/2f) - x,
|
s.speed.set((energySourceSprite.x + energySourceSprite.width/2f) - x,
|
||||||
(energySourceSprite.y + energySourceSprite.height/2f) - y);
|
(energySourceSprite.y + energySourceSprite.height/2f) - y);
|
||||||
s.speed.normalize().scale(DungeonTilemap.SIZE);
|
s.speed.normalize().scale(DungeonTilemap.SIZE*2f);
|
||||||
s.acc.set(s.speed);
|
|
||||||
|
//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
|
@Override
|
||||||
|
@ -799,8 +818,7 @@ public class NewCavesBossLevel extends Level {
|
||||||
public void use( BlobEmitter emitter ) {
|
public void use( BlobEmitter emitter ) {
|
||||||
super.use( emitter );
|
super.use( emitter );
|
||||||
energySourceSprite = null;
|
energySourceSprite = null;
|
||||||
//emitter.bound.set( 4/16f, 4/16f, 12/16f, 12/16f);
|
emitter.pour(DIRECTED_SPARKS, 0.125f);
|
||||||
emitter.pour(DIRECTED_SPARKS, 0.2f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user