v2.4.0: replaced the two T1 on-id talents with damage boost talents
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.4 KiB |
@@ -591,6 +591,10 @@ actors.hero.herosubclass.monk_short_desc=The _Monk_ builds energy while fighting
|
|||||||
actors.hero.herosubclass.monk_desc=The Monk is a master of physical technique. As she defeats enemies, she gains energy which can be used on a variety of defensive and utility-focused abilities. This energy does not fade over time, but has a cap based on the Monk's level.
|
actors.hero.herosubclass.monk_desc=The Monk is a master of physical technique. As she defeats enemies, she gains energy which can be used on a variety of defensive and utility-focused abilities. This energy does not fade over time, but has a cap based on the Monk's level.
|
||||||
|
|
||||||
##talents
|
##talents
|
||||||
|
actors.hero.talent$provokedangertracker.name=provoked anger
|
||||||
|
actors.hero.talent$provokedangertracker.desc=The Warrior has recently lost his shielding, his next physical attack will deal bonus damage.\n\nTurns remaining: %s.
|
||||||
|
actors.hero.talent$lingeringmagictracker.name=lingering magic
|
||||||
|
actors.hero.talent$lingeringmagictracker.desc=The Mage has recently used a staff or wand, his next physical attack will deal bonus damage.\n\nTurns remaining: %s.
|
||||||
actors.hero.talent$followupstriketracker.name=followup strike
|
actors.hero.talent$followupstriketracker.name=followup strike
|
||||||
actors.hero.talent$followupstriketracker.desc=The Huntress has recently attacked an enemy with a thrown weapon, her next melee attack against the same target will have boosted damage.\n\nTurns remaining: %s.
|
actors.hero.talent$followupstriketracker.desc=The Huntress has recently attacked an enemy with a thrown weapon, her next melee attack against the same target will have boosted damage.\n\nTurns remaining: %s.
|
||||||
actors.hero.talent$patientstriketracker.name=patient strike
|
actors.hero.talent$patientstriketracker.name=patient strike
|
||||||
@@ -620,8 +624,8 @@ actors.hero.talent.hearty_meal.title=hearty meal
|
|||||||
actors.hero.talent.hearty_meal.desc=_+1:_ Eating food heals the Warrior for _3 HP_ when he is at or below 30% health.\n\n_+2:_ Eating food heals the Warrior for _5 HP_ when is at or below 30% health.
|
actors.hero.talent.hearty_meal.desc=_+1:_ Eating food heals the Warrior for _3 HP_ when he is at or below 30% health.\n\n_+2:_ Eating food heals the Warrior for _5 HP_ when is at or below 30% health.
|
||||||
actors.hero.talent.veterans_intuition.title=veteran's intuition
|
actors.hero.talent.veterans_intuition.title=veteran's intuition
|
||||||
actors.hero.talent.veterans_intuition.desc=_+1:_ The Warrior identifies weapons _1.75x faster_ and armor _2.5x faster_.\n\n_+2:_ The Warrior identifies weapons _2.5x faster_ and armor _when he equips it_.
|
actors.hero.talent.veterans_intuition.desc=_+1:_ The Warrior identifies weapons _1.75x faster_ and armor _2.5x faster_.\n\n_+2:_ The Warrior identifies weapons _2.5x faster_ and armor _when he equips it_.
|
||||||
actors.hero.talent.test_subject.title=test subject
|
actors.hero.talent.provoked_anger.title=provoked anger
|
||||||
actors.hero.talent.test_subject.desc=_+1:_ Whenever the Warrior identifies an item, he heals for _2 HP_.\n\n_+2:_ Whenever the Warrior identifies an item, he heals for _3 HP_.
|
actors.hero.talent.provoked_anger.desc=_+1:_ When the Warrior's shielding breaks, his next physical attack will deal _1-2 bonus damage_.\n\n_+2:_ When the Warrior's shielding breaks, his next physical attack will deal _2 bonus damage_.
|
||||||
actors.hero.talent.iron_will.title=iron will
|
actors.hero.talent.iron_will.title=iron will
|
||||||
actors.hero.talent.iron_will.desc=_+1:_ The max shield provided by the Warrior's seal is _increased by 1_.\n\n_+2:_ The max shield provided by the Warrior's seal is _increased by 2_.
|
actors.hero.talent.iron_will.desc=_+1:_ The max shield provided by the Warrior's seal is _increased by 1_.\n\n_+2:_ The max shield provided by the Warrior's seal is _increased by 2_.
|
||||||
actors.hero.talent.iron_will.meta_desc=_If this talent is gained by a different hero_ it will grant its shielding benefit without the broken seal.
|
actors.hero.talent.iron_will.meta_desc=_If this talent is gained by a different hero_ it will grant its shielding benefit without the broken seal.
|
||||||
@@ -684,8 +688,8 @@ actors.hero.talent.empowering_meal.title=empowering meal
|
|||||||
actors.hero.talent.empowering_meal.desc=_+1:_ Eating food grants the Mage _2 bonus damage_ on his next 3 wand zaps.\n\n_+2:_ Eating food grants the Mage _3 bonus damage_ on his next 3 wand zaps.
|
actors.hero.talent.empowering_meal.desc=_+1:_ Eating food grants the Mage _2 bonus damage_ on his next 3 wand zaps.\n\n_+2:_ Eating food grants the Mage _3 bonus damage_ on his next 3 wand zaps.
|
||||||
actors.hero.talent.scholars_intuition.title=scholar's intuition
|
actors.hero.talent.scholars_intuition.title=scholar's intuition
|
||||||
actors.hero.talent.scholars_intuition.desc=_+1:_ The Mage identifies wands _3x faster_.\n\n_+2:_ The Mage identifies wands _when he uses them_.
|
actors.hero.talent.scholars_intuition.desc=_+1:_ The Mage identifies wands _3x faster_.\n\n_+2:_ The Mage identifies wands _when he uses them_.
|
||||||
actors.hero.talent.tested_hypothesis.title=tested hypothesis
|
actors.hero.talent.lingering_magic.title=lingering magic
|
||||||
actors.hero.talent.tested_hypothesis.desc=_+1:_ Whenever the Mage identifies an item, he gains _2 turns of wand recharging_.\n\n_+2:_ Whenever the Mage identifies an item, he gains _3 turns of wand recharging_.
|
actors.hero.talent.lingering_magic.desc=_+1:_ When the Mage zaps with a wand or staff, his next physical attack deals _1-2 bonus damage_.\n\n_+2:_ When the Mage zaps with a wand or staff, his next physical attack deals _2 bonus damage_.
|
||||||
actors.hero.talent.backup_barrier.title=backup barrier
|
actors.hero.talent.backup_barrier.title=backup barrier
|
||||||
actors.hero.talent.backup_barrier.desc=_+1:_ The Mage gains _3 shielding_ whenever he spends the last charge in his staff.\n\n_+2:_ The Mage gains _5 shielding_ whenever he spends the last charge in his staff.
|
actors.hero.talent.backup_barrier.desc=_+1:_ The Mage gains _3 shielding_ whenever he spends the last charge in his staff.\n\n_+2:_ The Mage gains _5 shielding_ whenever he spends the last charge in his staff.
|
||||||
actors.hero.talent.backup_barrier.meta_desc=_If this talent is gained by a different hero_ it will instead trigger from the hero's highest level wand.
|
actors.hero.talent.backup_barrier.meta_desc=_If this talent is gained by a different hero_ it will instead trigger from the hero's highest level wand.
|
||||||
|
|||||||
@@ -773,6 +773,12 @@ public abstract class Char extends Actor {
|
|||||||
shielded -= dmg;
|
shielded -= dmg;
|
||||||
HP -= dmg;
|
HP -= dmg;
|
||||||
|
|
||||||
|
if (HP > 0 && shielded > 0 && shielding() == 0){
|
||||||
|
if (this instanceof Hero && ((Hero) this).hasTalent(Talent.PROVOKED_ANGER)){
|
||||||
|
Buff.affect(this, Talent.ProvokedAngerTracker.class, 5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (HP > 0 && buff(Grim.GrimTracker.class) != null){
|
if (HP > 0 && buff(Grim.GrimTracker.class) != null){
|
||||||
|
|
||||||
float finalChance = buff(Grim.GrimTracker.class).maxChance;
|
float finalChance = buff(Grim.GrimTracker.class).maxChance;
|
||||||
|
|||||||
+33
-16
@@ -85,7 +85,7 @@ import java.util.LinkedHashMap;
|
|||||||
public enum Talent {
|
public enum Talent {
|
||||||
|
|
||||||
//Warrior T1
|
//Warrior T1
|
||||||
HEARTY_MEAL(0), VETERANS_INTUITION(1), TEST_SUBJECT(2), IRON_WILL(3),
|
HEARTY_MEAL(0), VETERANS_INTUITION(1), PROVOKED_ANGER(2), IRON_WILL(3),
|
||||||
//Warrior T2
|
//Warrior T2
|
||||||
IRON_STOMACH(4), LIQUID_WILLPOWER(5), RUNIC_TRANSFERENCE(6), LETHAL_MOMENTUM(7), IMPROVISED_PROJECTILES(8),
|
IRON_STOMACH(4), LIQUID_WILLPOWER(5), RUNIC_TRANSFERENCE(6), LETHAL_MOMENTUM(7), IMPROVISED_PROJECTILES(8),
|
||||||
//Warrior T3
|
//Warrior T3
|
||||||
@@ -102,7 +102,7 @@ public enum Talent {
|
|||||||
SUSTAINED_RETRIBUTION(23, 4), SHRUG_IT_OFF(24, 4), EVEN_THE_ODDS(25, 4),
|
SUSTAINED_RETRIBUTION(23, 4), SHRUG_IT_OFF(24, 4), EVEN_THE_ODDS(25, 4),
|
||||||
|
|
||||||
//Mage T1
|
//Mage T1
|
||||||
EMPOWERING_MEAL(32), SCHOLARS_INTUITION(33), TESTED_HYPOTHESIS(34), BACKUP_BARRIER(35),
|
EMPOWERING_MEAL(32), SCHOLARS_INTUITION(33), LINGERING_MAGIC(34), BACKUP_BARRIER(35),
|
||||||
//Mage T2
|
//Mage T2
|
||||||
ENERGIZING_MEAL(36), INSCRIBED_POWER(37), WAND_PRESERVATION(38), ARCANE_VISION(39), SHIELD_BATTERY(40),
|
ENERGIZING_MEAL(36), INSCRIBED_POWER(37), WAND_PRESERVATION(38), ARCANE_VISION(39), SHIELD_BATTERY(40),
|
||||||
//Mage T3
|
//Mage T3
|
||||||
@@ -658,21 +658,23 @@ public enum Talent {
|
|||||||
|
|
||||||
//note that IDing can happen in alchemy scene, so be careful with VFX here
|
//note that IDing can happen in alchemy scene, so be careful with VFX here
|
||||||
public static void onItemIdentified( Hero hero, Item item ){
|
public static void onItemIdentified( Hero hero, Item item ){
|
||||||
if (hero.hasTalent(TEST_SUBJECT)){
|
//currently no talents that trigger here, it wasn't a very popular trigger =(
|
||||||
//heal for 2/3 HP
|
|
||||||
hero.HP = Math.min(hero.HP + 1 + hero.pointsInTalent(TEST_SUBJECT), hero.HT);
|
|
||||||
if (hero.sprite != null) {
|
|
||||||
hero.sprite.showStatusWithIcon(CharSprite.POSITIVE, Integer.toString(1 + hero.pointsInTalent(TEST_SUBJECT)), FloatingText.HEALING);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (hero.hasTalent(TESTED_HYPOTHESIS)){
|
|
||||||
//2/3 turns of wand recharging
|
|
||||||
Buff.affect(hero, Recharging.class, 1f + hero.pointsInTalent(TESTED_HYPOTHESIS));
|
|
||||||
ScrollOfRecharging.charge(hero);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int onAttackProc( Hero hero, Char enemy, int dmg ){
|
public static int onAttackProc( Hero hero, Char enemy, int dmg ){
|
||||||
|
|
||||||
|
if (hero.hasTalent(Talent.PROVOKED_ANGER)
|
||||||
|
&& hero.buff(ProvokedAngerTracker.class) != null){
|
||||||
|
dmg += Random.IntRange(hero.pointsInTalent(Talent.PROVOKED_ANGER) , 2);
|
||||||
|
hero.buff(ProvokedAngerTracker.class).detach();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hero.hasTalent(Talent.LINGERING_MAGIC)
|
||||||
|
&& hero.buff(LingeringMagicTracker.class) != null){
|
||||||
|
dmg += Random.IntRange(hero.pointsInTalent(Talent.LINGERING_MAGIC) , 2);
|
||||||
|
hero.buff(LingeringMagicTracker.class).detach();
|
||||||
|
}
|
||||||
|
|
||||||
if (hero.hasTalent(Talent.SUCKER_PUNCH)
|
if (hero.hasTalent(Talent.SUCKER_PUNCH)
|
||||||
&& enemy instanceof Mob && ((Mob) enemy).surprisedBy(hero)
|
&& enemy instanceof Mob && ((Mob) enemy).surprisedBy(hero)
|
||||||
&& enemy.buff(SuckerPunchTracker.class) == null){
|
&& enemy.buff(SuckerPunchTracker.class) == null){
|
||||||
@@ -719,6 +721,18 @@ public enum Talent {
|
|||||||
return dmg;
|
return dmg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ProvokedAngerTracker extends FlavourBuff{
|
||||||
|
{ type = Buff.buffType.POSITIVE; }
|
||||||
|
public int icon() { return BuffIndicator.WEAPON; }
|
||||||
|
public void tintIcon(Image icon) { icon.hardlight(1.43f, 1.43f, 1.43f); }
|
||||||
|
public float iconFadePercent() { return Math.max(0, 1f - (visualcooldown() / 5)); }
|
||||||
|
}
|
||||||
|
public static class LingeringMagicTracker extends FlavourBuff{
|
||||||
|
{ type = Buff.buffType.POSITIVE; }
|
||||||
|
public int icon() { return BuffIndicator.WEAPON; }
|
||||||
|
public void tintIcon(Image icon) { icon.hardlight(1.43f, 1.43f, 0f); }
|
||||||
|
public float iconFadePercent() { return Math.max(0, 1f - (visualcooldown() / 5)); }
|
||||||
|
}
|
||||||
public static class SuckerPunchTracker extends Buff{};
|
public static class SuckerPunchTracker extends Buff{};
|
||||||
public static class FollowupStrikeTracker extends FlavourBuff{
|
public static class FollowupStrikeTracker extends FlavourBuff{
|
||||||
public int object;
|
public int object;
|
||||||
@@ -759,10 +773,10 @@ public enum Talent {
|
|||||||
//tier 1
|
//tier 1
|
||||||
switch (cls){
|
switch (cls){
|
||||||
case WARRIOR: default:
|
case WARRIOR: default:
|
||||||
Collections.addAll(tierTalents, HEARTY_MEAL, VETERANS_INTUITION, TEST_SUBJECT, IRON_WILL);
|
Collections.addAll(tierTalents, HEARTY_MEAL, VETERANS_INTUITION, PROVOKED_ANGER, IRON_WILL);
|
||||||
break;
|
break;
|
||||||
case MAGE:
|
case MAGE:
|
||||||
Collections.addAll(tierTalents, EMPOWERING_MEAL, SCHOLARS_INTUITION, TESTED_HYPOTHESIS, BACKUP_BARRIER);
|
Collections.addAll(tierTalents, EMPOWERING_MEAL, SCHOLARS_INTUITION, LINGERING_MAGIC, BACKUP_BARRIER);
|
||||||
break;
|
break;
|
||||||
case ROGUE:
|
case ROGUE:
|
||||||
Collections.addAll(tierTalents, CACHED_RATIONS, THIEFS_INTUITION, SUCKER_PUNCH, PROTECTIVE_SHADOWS);
|
Collections.addAll(tierTalents, CACHED_RATIONS, THIEFS_INTUITION, SUCKER_PUNCH, PROTECTIVE_SHADOWS);
|
||||||
@@ -934,6 +948,9 @@ public enum Talent {
|
|||||||
|
|
||||||
private static final HashSet<String> removedTalents = new HashSet<>();
|
private static final HashSet<String> removedTalents = new HashSet<>();
|
||||||
static{
|
static{
|
||||||
|
//v2.4.0
|
||||||
|
removedTalents.add("TEST_SUBJECT");
|
||||||
|
removedTalents.add("TESTED_HYPOTHESIS");
|
||||||
//v2.2.0
|
//v2.2.0
|
||||||
removedTalents.add("EMPOWERING_SCROLLS");
|
removedTalents.add("EMPOWERING_SCROLLS");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -445,8 +445,14 @@ public abstract class Wand extends Item {
|
|||||||
&& !Dungeon.hero.belongings.contains(this)){
|
&& !Dungeon.hero.belongings.contains(this)){
|
||||||
|
|
||||||
Buff.prolong(Dungeon.hero, Talent.EmpoweredStrikeTracker.class, 10f);
|
Buff.prolong(Dungeon.hero, Talent.EmpoweredStrikeTracker.class, 10f);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Dungeon.hero.hasTalent(Talent.LINGERING_MAGIC)
|
||||||
|
&& charger != null && charger.target == Dungeon.hero){
|
||||||
|
|
||||||
|
Buff.affect(Dungeon.hero, Talent.LingeringMagicTracker.class, 5f);
|
||||||
|
}
|
||||||
|
|
||||||
Invisibility.dispel();
|
Invisibility.dispel();
|
||||||
updateQuickslot();
|
updateQuickslot();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user