From fae73101aaa70ac5b51ea577a9389809a91fdafe Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 8 Nov 2023 14:16:00 -0500 Subject: [PATCH] v2.3.0: improved foresight buffs on level load and at high movespeed --- .../actors/hero/Hero.java | 13 ++++++ .../items/artifacts/TalismanOfForesight.java | 46 ++++++++++--------- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index a816e6da3..835ffeb86 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -776,6 +776,15 @@ public class Hero extends Char { } else { ready(); } + + //if we just loaded into a level and have a search buff, make sure to process them + if(Actor.now() == 0){ + if (buff(Foresight.class) != null){ + search(false); + } else if (buff(TalismanOfForesight.Foresight.class) != null){ + buff(TalismanOfForesight.Foresight.class).checkAwareness(); + } + } actResult = false; @@ -2344,6 +2353,10 @@ public class Hero extends Char { if (foresight){ GameScene.updateFog(pos, Foresight.DISTANCE+1); } + + if (talisman != null){ + talisman.checkAwareness(); + } return smthFound; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TalismanOfForesight.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TalismanOfForesight.java index 2f503d9ad..c4580cfc7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TalismanOfForesight.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TalismanOfForesight.java @@ -264,6 +264,31 @@ public class TalismanOfForesight extends Artifact { public boolean act() { spend( TICK ); + checkAwareness(); + + if (charge < chargeCap + && !cursed + && target.buff(MagicImmune.class) == null + && Regeneration.regenOn()) { + //fully charges in 2000 turns at +0, scaling to 1000 turns at +10. + float chargeGain = (0.05f+(level()*0.005f)); + chargeGain *= RingOfEnergy.artifactChargeMultiplier(target); + partialCharge += chargeGain; + + if (partialCharge > 1 && charge < chargeCap) { + partialCharge--; + charge++; + updateQuickslot(); + } else if (charge >= chargeCap) { + partialCharge = 0; + GLog.p( Messages.get(TalismanOfForesight.class, "full_charge") ); + } + } + + return true; + } + + public void checkAwareness(){ boolean smthFound = false; int distance = 3; @@ -313,27 +338,6 @@ public class TalismanOfForesight extends Artifact { } else { warn = false; } - - if (charge < chargeCap - && !cursed - && target.buff(MagicImmune.class) == null - && Regeneration.regenOn()) { - //fully charges in 2000 turns at +0, scaling to 1000 turns at +10. - float chargeGain = (0.05f+(level()*0.005f)); - chargeGain *= RingOfEnergy.artifactChargeMultiplier(target); - partialCharge += chargeGain; - - if (partialCharge > 1 && charge < chargeCap) { - partialCharge--; - charge++; - updateQuickslot(); - } else if (charge >= chargeCap) { - partialCharge = 0; - GLog.p( Messages.get(TalismanOfForesight.class, "full_charge") ); - } - } - - return true; } public void charge(int boost){