v3.1.0: fixed sheep lifespan being reset on save/load

This commit is contained in:
Evan Debenham
2025-04-06 12:57:46 -04:00
parent d730f3b49f
commit 0cc6a7f223
5 changed files with 14 additions and 16 deletions
@@ -41,28 +41,25 @@ public class Sheep extends NPC {
spriteClass = SheepSprite.class; spriteClass = SheepSprite.class;
} }
public float lifespan; private float lifespan;
private boolean initialized = false;
@Override @Override
protected boolean act() { protected boolean act() {
if (Dungeon.level.heroFOV[pos]){ if (Dungeon.level.heroFOV[pos]){
Bestiary.setSeen(getClass()); Bestiary.setSeen(getClass());
} }
if (initialized) {
HP = 0; HP = 0;
destroy(); destroy();
sprite.die(); sprite.die();
} else {
initialized = true;
spend( lifespan + Random.Float(-2, 2) );
}
return true; return true;
} }
public void initialize(float lifespan){
this.lifespan = lifespan;
spend( lifespan + Random.Float(-2, 2) );
}
@Override @Override
public int defenseSkill(Char enemy) { public int defenseSkill(Char enemy) {
return INFINITE_EVASION; return INFINITE_EVASION;
@@ -80,6 +77,7 @@ public class Sheep extends NPC {
@Override @Override
public boolean interact(Char c) { public boolean interact(Char c) {
Bestiary.setSeen(getClass());
sprite.showStatus( CharSprite.NEUTRAL, Messages.get(this, Random.element( LINE_KEYS )) ); sprite.showStatus( CharSprite.NEUTRAL, Messages.get(this, Random.element( LINE_KEYS )) );
if (c == Dungeon.hero) { if (c == Dungeon.hero) {
Dungeon.hero.spendAndNext(1f); Dungeon.hero.spendAndNext(1f);
@@ -63,7 +63,7 @@ public class WoollyBomb extends Bomb {
&& Actor.findChar(i) == null && Actor.findChar(i) == null
&& !(Dungeon.level.pit[i])) { && !(Dungeon.level.pit[i])) {
Sheep sheep = new Sheep(); Sheep sheep = new Sheep();
sheep.lifespan = Dungeon.bossLevel() ? 20 : 200; sheep.initialize(Dungeon.bossLevel() ? 20 : 200);
sheep.pos = i; sheep.pos = i;
GameScene.add(sheep); GameScene.add(sheep);
Dungeon.level.occupyCell(sheep); Dungeon.level.occupyCell(sheep);
@@ -57,7 +57,7 @@ public class StoneOfFlock extends Runestone {
&& Actor.findChar(i) == null && Actor.findChar(i) == null
&& !(Dungeon.level.pit[i])) { && !(Dungeon.level.pit[i])) {
Sheep sheep = new Sheep(); Sheep sheep = new Sheep();
sheep.lifespan = 8; sheep.initialize(8);
sheep.pos = i; sheep.pos = i;
GameScene.add(sheep); GameScene.add(sheep);
Dungeon.level.occupyCell(sheep); Dungeon.level.occupyCell(sheep);
@@ -707,7 +707,7 @@ public class CursedWand {
if (valid(origin, user, bolt, positiveOnly)){ if (valid(origin, user, bolt, positiveOnly)){
Char ch = Actor.findChar( bolt.collisionPos ); Char ch = Actor.findChar( bolt.collisionPos );
Sheep sheep = new Sheep(); Sheep sheep = new Sheep();
sheep.lifespan = 10; sheep.initialize(10);
sheep.pos = ch.pos; sheep.pos = ch.pos;
ch.destroy(); ch.destroy();
ch.sprite.killAndErase(); ch.sprite.killAndErase();
@@ -59,7 +59,7 @@ public class FlockTrap extends Trap {
&& Actor.findChar(i) == null && Actor.findChar(i) == null
&& !(Dungeon.level.pit[i])) { && !(Dungeon.level.pit[i])) {
Sheep sheep = new Sheep(); Sheep sheep = new Sheep();
sheep.lifespan = 6; sheep.initialize(6);
sheep.pos = i; sheep.pos = i;
GameScene.add(sheep); GameScene.add(sheep);
CellEmitter.get(i).burst(Speck.factory(Speck.WOOL), 4); CellEmitter.get(i).burst(Speck.factory(Speck.WOOL), 4);