Reme

变量与描述

这里介绍如何编写塔2的卡牌、遗物、药水、能力等的描述。

Godot原生

由于是RichTextLabel,Godot原生的bbcode都可以使用,参考 https://docs.godotengine.org/zh-cn/4.x/tutorials/ui/bbcode_in_richtextlabel.html

速览:

BBCode 说明 示例
[b]...[/b] 粗体 [b]bold[/b]
[i]...[/i] 斜体 [i]italic[/i]
[u]...[/u] 下划线 [u]underline[/u]
[color=...]...[/color] 文字颜色 [color=red]red text[/color]
[font=...]...[/font] 字体 [font=Arial]Arial text[/font]
[size=...]...[/size] 字号 [size=24]large text[/size]

游戏自定义tag

标签名 作用
[ancient_banner]...[/ancient_banner] 古代横幅风格
[aqua]...[/aqua] 水绿色文字
[blue]...[/blue] 蓝色文字
[fade_in]...[/fade_in] 渐显动画效果
[fly_in]...[/fly_in] 飞入动画效果
[gold]...[/gold] 金色文字
[green]...[/green] 绿色文字
[jitter]...[/jitter] 抖动动画效果
[orange]...[/orange] 橙色文字
[pink]...[/pink] 粉色文字
[purple]...[/purple] 紫色文字
[red]...[/red] 红色文字
[sine]...[/sine] 正弦波动动画效果
[thinky_dots]...[/thinky_dots] 思考点点动画效果

占位变量

会被model中的dynamicvars中的对应数值替换。

名称 对应类 说明 示例
{Damage} DamageVar 伤害 造成{Damage:diff()}点伤害。
{Block} BlockVar 格挡 获得{Block:diff()}点格挡。
{Cards} CardsVar 卡牌数量 抽{Cards:diff()}张牌。
{Energy} EnergyVar 能量(动态值) 获得{Energy:energyIcons()}。
{energyPrefix} - 能量(固定数值) 获得{energyPrefix:energyIcons(1)}。
{Repeat} RepeatVar 重复次数 造成{Damage:diff()}点伤害{Repeat:diff()}次。
{Heal} HealVar 治疗 回复{Heal:diff()}点生命。
{HpLoss} HpLossVar 失去生命 失去{HpLoss:diff()}点生命。
{MaxHp} MaxHpVar 最大生命 获得{MaxHp:diff()}点最大生命。
{Gold} GoldVar 金币 获得{Gold:diff()}金币。
{Summon} SummonVar 召唤 召唤{Summon:diff()}。
{Forge} ForgeVar 铸造 铸造{Forge:diff()}。
{Stars} StarsVar 辉星 获得{Stars:starIcons()}。
{StrengthPower} PowerVar<StrengthPower> 力量 获得{StrengthPower:diff()}点力量。
{DexterityPower} PowerVar<DexterityPower> 敏捷 获得{DexterityPower:diff()}点敏捷。
{WeakPower} PowerVar<WeakPower> 虚弱 给予{WeakPower:diff()}层虚弱。
{VulnerablePower} PowerVar<VulnerablePower> 易伤 给予{VulnerablePower:diff()}层易伤。
{PoisonPower} PowerVar<PoisonPower> 中毒 给予{PoisonPower:diff()}层中毒。
{DoomPower} PowerVar<DoomPower> 灾厄 给予{DoomPower:diff()}层灾厄。
{CalculatedDamage} CalculatedDamageVar 计算出的伤害量 (造成{CalculatedDamage:diff()}点伤害)
{CalculatedBlock} CalculatedBlockVar 计算出的格挡值 (获得{CalculatedBlock:diff()}点格挡)

formatter

用于格式化一个变量的表现形式,使用SmartFormat库。

例如{Energy:energyIcons()}表示展示n个能量图标,n为Energy的数值。具体逻辑查看对应的formatter类。

游戏自定义的formatter:

名称 说明 示例
diff() 高于基础变绿,低于基础变红。用于战斗或者升级预览 造成{Damage:diff()}点伤害。
inverseDiff() 高于基础变红,低于基础变绿 失去{HpLoss:inverseDiff()}点生命。
energyIcons() 把数值渲染成能量 获得{Energy:energyIcons()}。
starIcons() 把数值渲染为辉星 获得{Stars:starIcons()}。
IfUpgraded:show 根据升级情况显示不同文本 {IfUpgraded:show:升级文本|未升级文本}
abs 绝对值 {Damage:abs()}
percentMore() / percentLess() 百分比。
PercentMore把1.25变成25%。
PercentLess把0.75变成25%。
额外造成{Boost:percentMore()}%伤害。

SmartFormat的内置formatter:

https://github.com/axuno/SmartFormat/wiki

名称 说明 示例
cond 条件分支,例如{X:cond:>0?生效|不生效} {FanOfKnivesAmount:cond:>0? 对所有敌人|}造成{Damage:diff()}点伤害。
choose 按索引或值选择分支,例如{X:choose(1|2|3):one|two|three|other},X为1、2、3时分别为对应值,为其他值时为other 你打出的下{Skills:choose(1):一|{:diff()}}张技能牌会被额外打出一次。
plural 复数 英语环境下,Draw {Cards:diff()} {Cards:plural:card|cards}.
list 拼接 https://github.com/axuno/SmartFormat/wiki/v2-Lists

其他的参考wiki。

卡牌独有

卡牌有一些额外的上下文变量,例如:

名称 含义 典型写法
singleStarIcon 星星图标 每获得{singleStarIcon}时
InCombat 是否处于战斗 {InCombat:\n(命中{CalculatedHits:diff()}次)|}
IsTargeting 当前是否有目标 {IsTargeting:\n(造成{CalculatedDamage:diff()})|}
OnTable 牌是否在手牌或出牌区 {OnTable:cond:true?在场上|不在场上}
IfUpgraded 是否升级 [gold]升级[/gold]你[gold]手牌[/gold]中的{IfUpgraded:show:所有牌|一张牌}。

DynamicVar

TODO: 如何进行各种复杂的伤害计算

Author: Reme
Link:https://glitchedreme.github.io/SlayTheSpire2ModdingTutorials/docs/05-variable-and-description/
版权声明:本文采用 CC BY-NC-SA 4.0 CN 协议进行许可