v0.9.2: implemented the seer shot talent

This commit is contained in:
Evan Debenham 2021-02-13 21:14:36 -05:00
parent 20f41e369b
commit d567c7a283
5 changed files with 41 additions and 3 deletions

View File

@ -441,6 +441,8 @@ actors.hero.talent.durable_projectiles.title=durable projectiles
actors.hero.talent.durable_projectiles.desc=_+1:_ Thrown weapons have _+50% durability_ when used by the Huntress.\n\n_+2:_ Thrown weapons have _+75% durability_ when used by the Huntress.
actors.hero.talent.point_blank.title=point blank
actors.hero.talent.point_blank.desc=_+1:_ When the Huntress uses a thrown weapon at melee range it has _-30% accuracy,_ instead of -50%.\n\n_+2:_ When the Huntress uses a thrown weapon at melee range it has _-10% accuracy,_ instead of -50%.\n\n_+3:_ When the Huntress uses a thrown weapon at melee range it has _+10% accuracy,_ instead of -50%.\n\nNote that thrown weapons always have +50% accuracy when used at a distance.
actors.hero.talent.seer_shot.title=seer shot
actors.hero.talent.seer_shot.desc=_+1:_ When the huntress fires an arrow at the ground, it grants vision in a 3*3 area around it for _5 turns_. This has a 20 turn cooldown.\n\n_+2:_ When the huntress fires an arrow at the ground, it grants vision in a 3*3 area around it for _10 turns_. This has a 20 turn cooldown.\n\n_+3:_ When the huntress fires an arrow at the ground, it grants vision in a 3*3 area around it for _15 turns_. This has a 20 turn cooldown.
actors.hero.talent.farsight.title=farsight
actors.hero.talent.farsight.desc=_+1:_ The Sniper's vision range is _increased by 25%_\n\n_+2:_ The Sniper's vision range is _increased by 50%_\n\n_+3:_ The Sniper's vision range is _increased by 75%_
actors.hero.talent.shared_enchantment.title=shared enchantment

View File

@ -697,7 +697,6 @@ public class Dungeon {
Rankings.INSTANCE.submit( true, cause );
}
//TODO hero max vision is now separate from shadowcaster max vision. Might want to adjust.
public static void observe(){
int dist = Dungeon.hero.viewDistance;
dist *= 1f + 0.25f*Dungeon.hero.pointsInTalent(Talent.FARSIGHT);
@ -770,6 +769,14 @@ public class Dungeon {
GameScene.updateFog(h.pos, 2);
}
Talent.SeerShotTracker seerShot = hero.buff(Talent.SeerShotTracker.class);
if (seerShot != null && seerShot.depth == Dungeon.depth){
BArray.or( level.visited, level.heroFOV, seerShot.pos - 1 - level.width(), 3, level.visited );
BArray.or( level.visited, level.heroFOV, seerShot.pos - 1, 3, level.visited );
BArray.or( level.visited, level.heroFOV, seerShot.pos - 1 + level.width(), 3, level.visited );
GameScene.updateFog(seerShot.pos, 2);
}
GameScene.afterObserve();
}

View File

@ -104,7 +104,7 @@ public enum Talent {
//Huntress T2
INVIGORATING_MEAL(100), RESTORED_NATURE(101), REJUVENATING_STEPS(102), HEIGHTENED_SENSES(103), DURABLE_PROJECTILES(104),
//Huntress T3
POINT_BLANK(105, 3), HUNTRESS_T3_2(106, 3),
POINT_BLANK(105, 3), SEER_SHOT(106, 3),
//Sniper T3
FARSIGHT(107, 3), SHARED_ENCHANTMENT(108, 3), SHARED_UPGRADES(109, 3),
//Warden T3
@ -137,6 +137,16 @@ public enum Talent {
public static class EnhancedRingsTracker extends FlavourBuff{};
public static class BountyHunterTracker extends FlavourBuff{};
public static class RejuvenatingStepsCooldown extends FlavourBuff{};
public static class SeerShotTracker extends FlavourBuff{
public int depth, pos; //TODO bundle
@Override
public void detach() {
GameScene.updateFog(pos, 2);
super.detach();
}
}
public static class SeerShotCooldown extends FlavourBuff{};
int icon;
int maxPoints;
@ -457,7 +467,7 @@ public enum Talent {
Collections.addAll(tierTalents, ENHANCED_RINGS, LIGHT_CLOAK);
break;
case HUNTRESS:
Collections.addAll(tierTalents, POINT_BLANK, HUNTRESS_T3_2);
Collections.addAll(tierTalents, POINT_BLANK, SEER_SHOT);
break;
}
for (Talent talent : tierTalents){

View File

@ -25,7 +25,9 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfFuror;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfSharpshooting;
@ -337,6 +339,16 @@ public class SpiritBow extends Weapon {
});
} else {
if (Actor.findChar(dst) == null
&& user.hasTalent(Talent.SEER_SHOT)
&& user.buff(Talent.SeerShotCooldown.class) == null){
Talent.SeerShotTracker seerShot = Buff.affect(user, Talent.SeerShotTracker.class, 5*user.pointsInTalent(Talent.SEER_SHOT));
seerShot.depth = Dungeon.depth;
seerShot.pos = dst;
Buff.affect(user, Talent.SeerShotCooldown.class, 20f);
}
super.cast(user, dst);
}
}

View File

@ -1190,6 +1190,13 @@ public abstract class Level implements Bundlable {
BArray.or(fieldOfView, m.fieldOfView, fieldOfView);
}
}
Talent.SeerShotTracker seerShot = c.buff(Talent.SeerShotTracker.class);
if (seerShot != null && seerShot.depth == Dungeon.depth){
for (int i : PathFinder.NEIGHBOURS9)
fieldOfView[seerShot.pos+i] = true;
}
}
if (c == Dungeon.hero) {