v3.0.0: more filling out of ascended form functionality and text

This commit is contained in:
Evan Debenham
2024-12-15 14:01:59 -05:00
parent 5e0f45b579
commit 2ff4659b5d
7 changed files with 68 additions and 21 deletions

View File

@@ -525,7 +525,9 @@ actors.hero.abilities.duelist.feint.desc=The Duelist fakes an attack while dashi
actors.hero.abilities.cleric.ascendedform.name=ascended form
actors.hero.abilities.cleric.ascendedform.short_desc=The Cleric assumes an _Ascended Form_, gaining new spells, attack range, and shielding.
actors.hero.abilities.cleric.ascendedform.desc=The Cleric projects holy energy from themselves, assuming an extended radiant form for 10 turns. While in this form the Cleric can cast new spells, gains 2 attack range, 30 shielding, and any additional spells they cast will grant 10 shielding per holy tome charge used.\n\nThe shielding from ascended form does not decay normally, but will immediately fade once ascended form ends. The ability can be re-used to refresh ascended form's duration.
actors.hero.abilities.cleric.ascendedform.desc=The Cleric projects holy energy from themselves, assuming an extended radiant form for 10 turns. While in this form the Cleric can cast new spells, gains 2 attack range, 30 shielding, and any additional spells they cast will grant 10 shielding per holy tome charge used.\n\nThe shielding from ascended form and its spells does not decay normally, but will immediately fade once ascended form ends. The ability can be re-used to refresh ascended form's duration.
actors.hero.abilities.cleric.ascendedform$ascendbuff.name=ascended form
actors.hero.abilities.cleric.ascendedform$ascendbuff.desc=Radiant energy is emanating from the Cleric's body. While in this form the Cleric gains 2 attack range (from the holy energy projecting from them), and 10 shielding whenever they spend a holy tome charge. They are also able to cast the spells which are unlocked via ascended form's talents.\n\nThe shield granted by ascended form and its spells will not decay normally, but will instantly fade when ascended form ends.\n\nCurrent shielding: %1$d.\nTurns remaining: %2$d.
actors.hero.abilities.cleric.trinity.name=trinity
actors.hero.abilities.cleric.trinity.short_desc=_(UNFINISHED)_ The Cleric gains a _Trinity_ of new spells, which each cost tome charges and armor charge.
actors.hero.abilities.cleric.trinity.desc=_Trinity has not been implemented yet, and so is currently unselectable._
@@ -565,8 +567,8 @@ actors.hero.spells.divinesense$divinesensetracker.desc=The Cleric is temporarily
actors.hero.spells.flash.name=flash
actors.hero.spells.flash.prompt=Choose a location
actors.hero.spells.flash.short_desc=Blink to a nearby location.
actors.hero.spells.flash.desc=TODO
actors.hero.spells.flash.short_desc=Teleport to a nearby location.
actors.hero.spells.flash.desc=The Cleric channels their ascended form at a nearby location and teleports there. Flash can teleport the Cleric to any discovered location that is in range and unoccupied. This spell costs more tome charges every time it is used in the same ascended form.
actors.hero.spells.guidinglight.name=guiding light
actors.hero.spells.guidinglight.short_desc=Deals ranged magic damage and guarantees a hit.
@@ -612,7 +614,7 @@ actors.hero.spells.holyweapon$holywepbuff.desc=The Cleric has imbued their worn
actors.hero.spells.mnemonicprayer.name=mnemonic prayer
actors.hero.spells.mnemonicprayer.short_desc=Extends buffs/debuffs on an ally/enemy, & re-applies illuminated.
actors.hero.spells.mnemonicprayer.desc=The Priest utters a prayer that extends the duration of all buffs or debuffs on a specific target by %1$d turns. Positive effects will last longer on allies (including the Priest themselves), and harmful effects will last longer on enemies. This spell will also re-apply illuminated to an enemy that has been illuminated previously.\n\nMnemonic Prayer can only extend a specific instance of a buff or debuff once, it can't be used repeatedly to make a specific buff or debuff last forever. Each application of illuminated counts as a separate debuff.
actors.hero.spells.mnemonicprayer.desc=The Priest utters a prayer that extends the duration of all buffs or debuffs on a specific target by %1$d turns. Positive effects will last longer on allies (including the Priest themselves), and harmful effects will last longer on enemies. This spell will also re-apply illuminated to an enemy that has been illuminated previously.\n\nMnemonic Prayer can only extend a specific instance of a buff or debuff once, and cannot extend buffs granted from armor abilities.
actors.hero.spells.radiance.name=radiance
actors.hero.spells.radiance.short_desc=Illuminates and briefly stuns visible enemies.
@@ -1101,7 +1103,7 @@ actors.hero.talent.holy_lance.desc=_+1:_ The Priest can cast _Holy Lance,_ a dev
actors.hero.talent.hallowed_ground.title=Hallowed Ground
actors.hero.talent.hallowed_ground.desc=_+1:_ The Priest can cast _Hallowed Ground,_ a spell that hallows terrain in a _3x3 area_ for 20 turns, at the cost of 2 charges.\n\n_+2:_ The Priest can cast _Hallowed Ground,_ a spell that hallows terrain in a _5x5 area_ for 20 turns, at the cost of 2 charges.\n\n_+3:_ The Priest can cast _Hallowed Ground,_ a spell that hallows terrain in a _7x7 area_ for 20 turns, at the cost of 2 charges.\n\nWhen it is cast, Hallowed Ground heals allies for 10 HP, briefly roots enemies, and spreads short grass. Afterward, it slowly heals allies, cripples enemies, and causes tall grass to randomly grow. Hallowed ground grants shielding to the Priest instead of healing and is destroyed by fire.
actors.hero.talent.mnemonic_prayer.title=Mnemonic Prayer
actors.hero.talent.mnemonic_prayer.desc=_+1:_ The Priest can cast _Mnemonic Prayer,_ a spell that extends buffs/debuffs on an ally/enemy for _3 turns_ at 1 charge cost.\n\n_+1:_ The Priest can cast _Mnemonic Prayer,_ a spell that extends buffs/debuffs on an ally/enemy for _4 turns_ 1 charge cost.\n\n_+1:_ The Priest can cast _Mnemonic Prayer,_ a spell that extends buffs/debuffs on an ally/enemy for _5 turns_ 1 charge cost.\n\nMnemonic Prayer also re-illuminates the target if they were illuminated previously. Mnemonic Prayer can only extend a particular instance of a buff/debuff once.
actors.hero.talent.mnemonic_prayer.desc=_+1:_ The Priest can cast _Mnemonic Prayer,_ a spell that extends buffs/debuffs on an ally/enemy for _3 turns_ at 1 charge cost.\n\n_+1:_ The Priest can cast _Mnemonic Prayer,_ a spell that extends buffs/debuffs on an ally/enemy for _4 turns_ 1 charge cost.\n\n_+1:_ The Priest can cast _Mnemonic Prayer,_ a spell that extends buffs/debuffs on an ally/enemy for _5 turns_ 1 charge cost.\n\nMnemonic Prayer also re-illuminates the target if they were illuminated previously. Mnemonic Prayer can only extend a particular instance of a buff/debuff once, and cannot extend buffs from armor abilities.
actors.hero.talent.paladint3a.title=Unknown
actors.hero.talent.paladint3a.desc=This talent hasn't been implemented yet, it currently does nothing.
@@ -1111,11 +1113,11 @@ actors.hero.talent.paladint3c.title=Unknown
actors.hero.talent.paladint3c.desc=This talent hasn't been implemented yet, it currently does nothing.
actors.hero.talent.divine_intervention.title=divine intervention
actors.hero.talent.divine_intervention.desc=_+1:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _200 shielding._\n\n_+2:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _250 shielding._\n\n_+3:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _300 shielding._\n\n_+4:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _350 shielding._\n\nDivine Intervention costs a whopping 6 charges, and can only be cast once in the same ascended form.
actors.hero.talent.divine_intervention.desc=_+1:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _200 shielding._\n\n_+2:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _250 shielding._\n\n_+3:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _300 shielding._\n\n_+4:_ While in Ascended Form, the Cleric can cast _Divine Intervention,_ which boosts the Cleric and all allies up to _350 shielding._\n\nDivine Intervention costs a whopping 6 tome charges, and can only be cast once in the same ascended form.
actors.hero.talent.judgement.title=judgement
actors.hero.talent.judgement.desc=This talent hasn't been implemented yet, it currently does nothing.
actors.hero.talent.judgement.desc=_+1:_ While in Ascended Form, the Cleric can cast _Judgement,_ which deals _10-20 damage_ to all visible enemies.\n\n_+2:_ While in Ascended Form, the Cleric can cast _Judgement,_ which deals _15-30 damage_ to all visible enemies.\n\n_+3:_ While in Ascended Form, the Cleric can cast _Judgement,_ which deals _20-40 damage_ to all visible enemies.\n\n_+4:_ While in Ascended Form, the Cleric can cast _Judgement,_ which deals _25-50 damage_ to all visible enemies.\n\nJudgement costs 3 tome charges. Judgement deals an additional 5-10 damage for every spell the Cleric has cast since entering ascended form or since the last cast of judgement, whichever is most recent.
actors.hero.talent.flash.title=flash
actors.hero.talent.flash.desc=_+1:_ While in Ascended Form, the Cleric can cast _Flash_ to blink up to _3 tiles_ in any direction.\n\n_+2:_ While in Ascended Form, the Cleric can cast _Flash_ to blink up to _4 tiles_ in any direction.\n\n_+3:_ While in Ascended Form, the Cleric can cast _Flash_ to blink up to _5 tiles_ in any direction.\n\n_+4:_ While in Ascended Form, the Cleric can cast _Flash_ to blink up to _6 tiles_ in any direction.\n\nFlash costs 1 charge initially, and 1 more charge for each use in the same ascended form.
actors.hero.talent.flash.desc=_+1:_ While in Ascended Form, the Cleric can cast _Flash_ to teleport up to _3 tiles_ away.\n\n_+2:_ While in Ascended Form, the Cleric can cast _Flash_ to teleport up to _4 tiles_ away.\n\n_+3:_ While in Ascended Form, the Cleric can cast _Flash_ to teleport up to _5 tiles_ away..\n\n_+4:_ While in Ascended Form, the Cleric can cast _Flash_ to teleport up to _6 tiles_ away.\n\nFlash costs 1 tome charge initially, and 1 more charge for each use in the same ascended form.
actors.hero.talent.cleric_a2_1.title=Unknown
actors.hero.talent.cleric_a2_1.desc=This talent hasn't been implemented yet, it currently does nothing.

View File

@@ -31,10 +31,12 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.ArmorAbility;
import com.shatteredpixel.shatteredpixeldungeon.effects.Flare;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.shatteredpixel.shatteredpixeldungeon.ui.HeroIcon;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.Bundle;
public class AscendedForm extends ArmorAbility {
@@ -96,8 +98,9 @@ public class AscendedForm extends ArmorAbility {
else target.sprite.remove(CharSprite.State.GLOWING);
}
public int flashUses = 0;
public int left = 10;
public int spellCasts = 0;
public int flashCasts = 0;
public void reset(){
setShield(30);
@@ -116,6 +119,31 @@ public class AscendedForm extends ArmorAbility {
spend(TICK);
return true;
}
@Override
public String desc() {
return Messages.get(this, "desc", shielding(), left);
}
public static final String LEFT = "left";
public static final String SPELL_CASTS = "spell_casts";
public static final String FLASH_CASTS = "flash_casts";
@Override
public void storeInBundle(Bundle bundle) {
super.storeInBundle(bundle);
bundle.put(LEFT, left);
bundle.put(SPELL_CASTS, spellCasts);
bundle.put(FLASH_CASTS, flashCasts);
}
@Override
public void restoreFromBundle(Bundle bundle) {
super.restoreFromBundle(bundle);
left = bundle.getInt(LEFT);
spellCasts = bundle.getInt(SPELL_CASTS);
flashCasts = bundle.getInt(FLASH_CASTS);
}
}
}

View File

@@ -71,6 +71,7 @@ public abstract class ClericSpell {
}
tome.spendCharge(chargeUse(hero));
if (hero.buff(AscendedForm.AscendBuff.class) != null){
hero.buff(AscendedForm.AscendBuff.class).spellCasts++;
hero.buff(AscendedForm.AscendBuff.class).incShield((int)(10*chargeUse(hero)));
}
}

View File

@@ -43,7 +43,7 @@ public class Flash extends TargetedClericSpell {
@Override
public float chargeUse(Hero hero) {
if (hero.buff(AscendedForm.AscendBuff.class) != null){
return 1 + hero.buff(AscendedForm.AscendBuff.class).flashUses;
return 1 + hero.buff(AscendedForm.AscendBuff.class).flashCasts;
} else {
return 1;
}
@@ -61,7 +61,7 @@ public class Flash extends TargetedClericSpell {
return;
}
if (Dungeon.level.solid[target] || !Dungeon.level.heroFOV[target]
if (Dungeon.level.solid[target] || !Dungeon.level.mapped[target]
|| Dungeon.level.distance(hero.pos, target) > 2+hero.pointsInTalent(Talent.FLASH)){
GLog.w(Messages.get(this, "invalid_target"));
return;
@@ -70,7 +70,7 @@ public class Flash extends TargetedClericSpell {
if (ScrollOfTeleportation.teleportToLocation(hero, target)){
hero.spendAndNext( 1f );
onSpellCast(tome, hero);
hero.buff(AscendedForm.AscendBuff.class).flashUses++;
hero.buff(AscendedForm.AscendBuff.class).flashCasts++;
}
}

View File

@@ -309,6 +309,7 @@ public class GameScene extends PixelScene {
hero.place( Dungeon.hero.pos );
hero.updateArmor();
mobs.add( hero );
Dungeon.hero.updateSpriteState();
for (Mob mob : Dungeon.level.mobs) {
addMobSprite( mob );

View File

@@ -386,6 +386,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
paused = true;
break;
case FROZEN:
if (iceBlock != null) iceBlock.killAndErase();
iceBlock = IceBlock.freeze(this);
break;
case ILLUMINATED:
@@ -396,6 +397,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
chilled.pour(SnowParticle.FACTORY, 0.1f);
break;
case DARKENED:
if (darkBlock != null) darkBlock.killAndErase();
darkBlock = DarkBlock.darken(this);
break;
case MARKED:
@@ -407,9 +409,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
healing.pour(Speck.factory(Speck.HEALING), 0.5f);
break;
case SHIELDED:
if (shield != null) {
shield.killAndErase();
}
if (shield != null) shield.killAndErase();
GameScene.effect(shield = new ShieldHalo(this));
break;
case HEARTS:
@@ -417,6 +417,7 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
hearts.pour(Speck.factory(Speck.HEART), 0.5f);
break;
case GLOWING:
if (glowBlock != null) glowBlock.killAndErase();
glowBlock = GlowBlock.lighten(this);
break;
}
@@ -575,6 +576,9 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip
aura.visible = visible;
aura.point(center());
}
if (glowBlock != null){
glowBlock.visible =visible;
}
}
if (sleeping) {
showSleep();

View File

@@ -36,11 +36,14 @@ public class WndInfoTalent extends Window {
private static final float GAP = 2;
private static final int WIDTH = 120;
private static final int WIDTH_MIN = 120;
private static final int WIDTH_MAX = 220;
public WndInfoTalent(Talent talent, int points, TalentButtonCallback buttonCallback){
super();
int width = WIDTH_MIN;
IconTitle titlebar = new IconTitle();
titlebar.icon( new TalentIcon( talent ) );
@@ -49,17 +52,25 @@ public class WndInfoTalent extends Window {
title += " +" + points;
}
titlebar.label( title, Window.TITLE_COLOR );
titlebar.setRect( 0, 0, WIDTH, 0 );
titlebar.setRect( 0, 0, width, 0 );
add( titlebar );
boolean metaDesc = (buttonCallback != null && buttonCallback.metamorphDesc()) ||
(Dungeon.hero != null && Dungeon.hero.metamorphedTalents.containsValue(talent));
RenderedTextBlock txtInfo = PixelScene.renderTextBlock(talent.desc(metaDesc), 6);
txtInfo.maxWidth(WIDTH);
txtInfo.maxWidth(width);
txtInfo.setPos(titlebar.left(), titlebar.bottom() + 2*GAP);
add( txtInfo );
resize( WIDTH, (int)(txtInfo.bottom() + GAP) );
while (PixelScene.landscape()
&& txtInfo.height() > 100
&& width < WIDTH_MAX){
width += 20;
txtInfo.maxWidth(width);
}
titlebar.setRect( 0, 0, width, 0 );
resize( width, (int)(txtInfo.bottom() + GAP) );
if (buttonCallback != null) {
RedButton button = new RedButton( buttonCallback.prompt() ) {
@@ -71,9 +82,9 @@ public class WndInfoTalent extends Window {
}
};
button.icon(Icons.get(Icons.TALENT));
button.setRect(0, txtInfo.bottom() + 2*GAP, WIDTH, 18);
button.setRect(0, txtInfo.bottom() + 2*GAP, width, 18);
add(button);
resize( WIDTH, (int)button.bottom()+1 );
resize( width, (int)button.bottom()+1 );
}
}