v3.0.0: added metamorph fx for T1 cleric talents
This commit is contained in:
@@ -662,6 +662,7 @@ actors.hero.spells.guidinglight$guidinglightpriestcooldown.desc=The Priest will
|
||||
actors.hero.spells.guidinglight$illuminated.name=Illuminated
|
||||
actors.hero.spells.guidinglight$illuminated.desc=This character is glowing as a result of being struck by guiding light. While the glow isn't strong enough to brighten the surrounding area, the magical effect will make landing blows on them much easier for the Cleric.
|
||||
actors.hero.spells.guidinglight$illuminated.desc_priest=The Priest can additionally consume illuminated with a wand zap, strike from an ally, or effects from some artifacts. Using illuminated in this way will deal bonus damage.
|
||||
actors.hero.spells.guidinglight$illuminated.desc_generic=Other heroes can still use illuminated to benefit from the searing light talent, but will not gain any accuracy.
|
||||
|
||||
actors.hero.spells.hallowedground.name=hallowed ground
|
||||
actors.hero.spells.hallowedground.prompt=Choose a location
|
||||
@@ -884,6 +885,8 @@ actors.hero.talent$deadlyfollowuptracker.desc=The Duelist has recently attacked
|
||||
actors.hero.talent$combinedlethalityabilitytracker.executed=executed
|
||||
actors.hero.talent$satiatedspellstracker.name=Shielding Spell
|
||||
actors.hero.talent$satiatedspellstracker.desc=The next spell the Cleric casts will grant them a small amount of shielding.
|
||||
actors.hero.talent$searinglightcooldown.name=Searing Light
|
||||
actors.hero.talent$searinglightcooldown.desc=You have recently used this talent, and must wait before using it again.\n\nTurns remaining: %s.
|
||||
|
||||
#warrior
|
||||
actors.hero.talent.hearty_meal.title=hearty meal
|
||||
@@ -1206,12 +1209,16 @@ actors.hero.talent.counter_ability.desc=_+1:_ If the Duelist uses a weapon abili
|
||||
#cleric
|
||||
actors.hero.talent.satiated_spells.title=Satiated Spells
|
||||
actors.hero.talent.satiated_spells.desc=_+1:_ Eating food causes the Cleric to gain _3 shielding_ the next time they cast a spell.\n\n_+2:_ Eating food causes the Cleric to gain _5 shielding_ the next time they cast a spell.
|
||||
actors.hero.talent.satiated_spells.meta_desc=_If this talent is gained by a different hero_ it will instead grant shielding immediately, which will start to decay normally after 10 turns.
|
||||
actors.hero.talent.holy_intuition.title=holy intuition
|
||||
actors.hero.talent.holy_intuition.desc=_+1:_ The Cleric can cast _Holy Intuition,_ a spell that reveals whether an item is cursed at the cost of _3 charges._\n\n_+2:_ The Cleric can cast _Holy Intuition,_ a spell that reveals whether an item is cursed at the cost of _2 charges._
|
||||
actors.hero.talent.holy_intuition.meta_desc=_If this talent is gained by a different hero_ it will instead let the hero identify the curse status on a cursed item just before equipping it, 15% of the time at +1 or 25% of the time at +2.
|
||||
actors.hero.talent.searing_light.title=searing light
|
||||
actors.hero.talent.searing_light.desc=_+1:_ The Cleric's physical attacks on enemies illuminated by _Guiding Light_ deal _+4 damage._\n\n_+2:_ The Cleric's physical attacks on enemies illuminated by _Guiding Light_ deal _+6 damage._
|
||||
actors.hero.talent.searing_light.meta_desc=_If this talent is gained by a different hero_ it will instead grant its bonus damage after a wand or artifact is used on an enemy, with a 20 turn cooldown.
|
||||
actors.hero.talent.shield_of_light.title=shield of light
|
||||
actors.hero.talent.shield_of_light.desc=_+1:_ The Cleric can cast _Shield of Light,_ a spell that is cast instantly and grants them _2-4 armor_ against a target for 4 turns at the cost of 1 charge.\n\n_+2:_ The Cleric can cast _Shield of Light,_ a spell that is cast instantly and grants them _3-6 armor_ against a target for 4 turns at the cost of 1 charge.
|
||||
actors.hero.talent.shield_of_light.meta_desc=_If this talent is gained by a different hero_ it will instead reduce physical damage taken from your targeted enemy by 1, 33% of the time at +1 or 50% of the time at +2.
|
||||
|
||||
actors.hero.talent.enlightening_meal.title=Enlightening Meal
|
||||
actors.hero.talent.enlightening_meal.desc=_+1:_ Eating food takes the Cleric 1 turn and grants them _1 charge_ on their holy tome.\n\n_+2:_ Eating food takes the Cleric 1 turn and grants them _1.5 charges_ on their holy tome.
|
||||
|
||||
@@ -2195,6 +2195,7 @@ items.dewdrop.name=dewdrop
|
||||
items.dewdrop.already_full=You already have full health.
|
||||
items.dewdrop.desc=A crystal clear dewdrop.\n\nDue to the magic of this place, pure water has minor restorative properties.
|
||||
|
||||
items.equipableitem.curse_detected=You sense that the item is cursed just before you equip it!
|
||||
items.equipableitem.unequip_cursed=You can't remove a cursed item!
|
||||
items.equipableitem.ac_equip=EQUIP
|
||||
items.equipableitem.ac_unequip=UNEQUIP
|
||||
|
||||
@@ -75,6 +75,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vulnerable;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Weakness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.cleric.PowerOfMany;
|
||||
@@ -144,6 +145,7 @@ import com.shatteredpixel.shatteredpixeldungeon.plants.Swiftthistle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.MobSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.TargetHealthIndicator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.BArray;
|
||||
@@ -694,6 +696,14 @@ public abstract class Char extends Actor {
|
||||
int min = 1 + Dungeon.hero.pointsInTalent(Talent.SHIELD_OF_LIGHT);
|
||||
damage -= Random.NormalIntRange(min, 2*min);
|
||||
damage = Math.max(damage, 0);
|
||||
} else if (this == Dungeon.hero
|
||||
&& Dungeon.hero.heroClass != HeroClass.CLERIC
|
||||
&& Dungeon.hero.hasTalent(Talent.SHIELD_OF_LIGHT)
|
||||
&& TargetHealthIndicator.instance.target() == enemy){
|
||||
//33/50%
|
||||
if (Random.Int(6) < 1+Dungeon.hero.pointsInTalent(Talent.SHIELD_OF_LIGHT)){
|
||||
damage -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
// hero and pris images skip this as they already benefit from hero's armor glyph proc
|
||||
|
||||
@@ -401,13 +401,22 @@ public enum Talent {
|
||||
wepAbilUsed = bundle.getBoolean(WEP_ABIL_USED);
|
||||
}
|
||||
}
|
||||
public static class CounterAbilityTacker extends FlavourBuff{};
|
||||
public static class CounterAbilityTacker extends FlavourBuff{}
|
||||
public static class SatiatedSpellsTracker extends Buff{
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.SPELL_FOOD;
|
||||
}
|
||||
};
|
||||
}
|
||||
//used for metamorphed searing light
|
||||
public static class SearingLightCooldown extends FlavourBuff{
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.TIME;
|
||||
}
|
||||
public void tintIcon(Image icon) { icon.hardlight(0f, 0f, 1f); }
|
||||
public float iconFadePercent() { return Math.max(0, visualcooldown() / 20); }
|
||||
}
|
||||
|
||||
int icon;
|
||||
int maxPoints;
|
||||
@@ -615,7 +624,17 @@ public enum Talent {
|
||||
}
|
||||
}
|
||||
if (hero.hasTalent(SATIATED_SPELLS)){
|
||||
Buff.affect( hero, SatiatedSpellsTracker.class );
|
||||
if (hero.heroClass == HeroClass.CLERIC) {
|
||||
Buff.affect(hero, SatiatedSpellsTracker.class);
|
||||
} else {
|
||||
//3/5 shielding, delayed up to 10 turns
|
||||
int amount = 1 + 2*hero.pointsInTalent(SATIATED_SPELLS);
|
||||
Barrier b = Buff.affect(hero, Barrier.class);
|
||||
if (b.shielding() <= amount){
|
||||
b.setShield(amount);
|
||||
b.delay(Math.max(10-b.cooldown(), 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hero.hasTalent(ENLIGHTENING_MEAL)){
|
||||
HolyTome tome = hero.belongings.getItem(HolyTome.class);
|
||||
|
||||
@@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HolyTome;
|
||||
@@ -161,6 +162,8 @@ public class GuidingLight extends TargetedClericSpell {
|
||||
|
||||
if (Dungeon.hero.subClass == HeroSubClass.PRIEST){
|
||||
desc += "\n\n" + Messages.get(this, "desc_priest");
|
||||
} else if (Dungeon.hero.heroClass != HeroClass.CLERIC){
|
||||
desc += "\n\n" + Messages.get(this, "desc_generic");
|
||||
}
|
||||
|
||||
return desc;
|
||||
|
||||
@@ -675,8 +675,8 @@ public abstract class Mob extends Char {
|
||||
|
||||
@Override
|
||||
public int defenseSkill( Char enemy ) {
|
||||
if (buff(GuidingLight.Illuminated.class) != null){
|
||||
//if the attacker is the hero, they must be using a weapon they have the str for
|
||||
if (buff(GuidingLight.Illuminated.class) != null && Dungeon.hero.heroClass == HeroClass.CLERIC){
|
||||
//if the attacker is the cleric, they must be using a weapon they have the str for
|
||||
if (enemy instanceof Hero){
|
||||
Hero h = (Hero) enemy;
|
||||
if (!(h.belongings.attackingWeapon() instanceof Weapon)
|
||||
|
||||
@@ -28,6 +28,7 @@ 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.HeroClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
@@ -112,6 +113,15 @@ abstract public class KindOfWeapon extends EquipableItem {
|
||||
}
|
||||
}
|
||||
|
||||
// 15/25% chance
|
||||
if (hero.heroClass != HeroClass.CLERIC && hero.hasTalent(Talent.HOLY_INTUITION)
|
||||
&& cursed && !cursedKnown
|
||||
&& Random.Int(20) < 1 + 2*hero.pointsInTalent(Talent.HOLY_INTUITION)){
|
||||
cursedKnown = true;
|
||||
GLog.p(Messages.get(this, "curse_detected"));
|
||||
return false;
|
||||
}
|
||||
|
||||
detachAll( hero.belongings.backpack );
|
||||
|
||||
if (hero.belongings.weapon == null || hero.belongings.weapon.doUnequip( hero, true )) {
|
||||
|
||||
@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||
@@ -31,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
|
||||
public abstract class KindofMisc extends EquipableItem {
|
||||
@@ -132,6 +134,15 @@ public abstract class KindofMisc extends EquipableItem {
|
||||
|
||||
} else {
|
||||
|
||||
// 15/25% chance
|
||||
if (hero.heroClass != HeroClass.CLERIC && hero.hasTalent(Talent.HOLY_INTUITION)
|
||||
&& cursed && !cursedKnown
|
||||
&& Random.Int(20) < 1 + 2*hero.pointsInTalent(Talent.HOLY_INTUITION)){
|
||||
cursedKnown = true;
|
||||
GLog.p(Messages.get(this, "curse_detected"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this instanceof Artifact){
|
||||
if (hero.belongings.artifact == null) hero.belongings.artifact = (Artifact) this;
|
||||
else hero.belongings.misc = (Artifact) this;
|
||||
|
||||
@@ -242,6 +242,15 @@ public class Armor extends EquipableItem {
|
||||
|
||||
detach(hero.belongings.backpack);
|
||||
|
||||
// 15/25% chance
|
||||
if (hero.heroClass != HeroClass.CLERIC && hero.hasTalent(Talent.HOLY_INTUITION)
|
||||
&& cursed && !cursedKnown
|
||||
&& Random.Int(20) < 1 + 2*hero.pointsInTalent(Talent.HOLY_INTUITION)){
|
||||
cursedKnown = true;
|
||||
GLog.p(Messages.get(this, "curse_detected"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hero.belongings.armor == null || hero.belongings.armor.doUnequip( hero, true, false )) {
|
||||
|
||||
hero.belongings.armor = this;
|
||||
|
||||
@@ -26,7 +26,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.MagicImmune;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.spells.GuidingLight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.KindofMisc;
|
||||
@@ -149,6 +151,13 @@ public class Artifact extends KindofMisc {
|
||||
target.buff(GuidingLight.Illuminated.class).detach();
|
||||
target.damage(Dungeon.hero.lvl, GuidingLight.INSTANCE);
|
||||
}
|
||||
|
||||
if (Dungeon.hero.heroClass != HeroClass.CLERIC
|
||||
&& Dungeon.hero.hasTalent(Talent.SEARING_LIGHT)
|
||||
&& Dungeon.hero.buff(Talent.SearingLightCooldown.class) == null){
|
||||
Buff.affect(target, GuidingLight.Illuminated.class);
|
||||
Buff.affect(Dungeon.hero, Talent.SearingLightCooldown.class, 20f);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -211,8 +211,9 @@ public class ScrollOfMetamorphosis extends ExoticScroll {
|
||||
Set<Talent> curTalentsAtTier = Dungeon.hero.talents.get(tier-1).keySet();
|
||||
|
||||
for (HeroClass cls : HeroClass.values()){
|
||||
if (cls == HeroClass.CLERIC && Dungeon.hero.heroClass != HeroClass.CLERIC){
|
||||
continue; //TODO CLERIC for now no metamorphing cleric talents
|
||||
//TODO CLERIC only T1 talents have metamorph effects atm
|
||||
if (tier != 1 && cls == HeroClass.CLERIC && Dungeon.hero.heroClass != HeroClass.CLERIC){
|
||||
continue;
|
||||
}
|
||||
|
||||
ArrayList<LinkedHashMap<Talent, Integer>> clsTalents = new ArrayList<>();
|
||||
|
||||
@@ -220,6 +220,13 @@ public abstract class Wand extends Item {
|
||||
target.buff(GuidingLight.Illuminated.class).detach();
|
||||
target.damage(Dungeon.hero.lvl, GuidingLight.INSTANCE);
|
||||
}
|
||||
|
||||
if (Dungeon.hero.heroClass != HeroClass.CLERIC
|
||||
&& Dungeon.hero.hasTalent(Talent.SEARING_LIGHT)
|
||||
&& Dungeon.hero.buff(Talent.SearingLightCooldown.class) == null){
|
||||
Buff.affect(target, GuidingLight.Illuminated.class);
|
||||
Buff.affect(Dungeon.hero, Talent.SearingLightCooldown.class, 20f);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user