Cataclysm-DDA 魔法平衡指南:Magiclysm 法术层级、合法性分级与施法专精体系深度解析
【免费下载链接】Cataclysm-DDACataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.项目地址: https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA
导读
本文以 Cataclysm-DDA 官方魔法扩展模组 Magiclysm 的平衡设计文档 magic_balance.md 为主体,系统讲解该模组的法术强度评估体系、四大法术层级(Tier 0~3)的判定逻辑、法术书合法性分级,以及八大施法专精(Spellcasting Proficiencies)的划分原则与实现方式。读完本文,你将掌握如何依据 JSON 字段推断任意法术的实战强度、如何按层级设计新法术的属性预算,以及如何在 proficiencies.json 与法术定义中正确接入专精系统。文中所引法术实例均可在仓库data/mods/Magiclysm/Spells/下找到对应 JSON 定义,可直接对照学习。
一、概述:法术的"隐形层级"
Magiclysm 中的法术(Spell)拥有极强的可塑性,其强度完全由 JSON 中赋予的各项数值决定。文档明确指出,法术的 tier(层级)并不会在游戏内直接标注,而是可以通过若干关键维度反推出来。设计师在设计新法术时,应当先根据预期强度选定层级,再让各项数值符合该层级的预算。
tier 的判定并非单一维度,而是由以下因素综合决定:
| 判定维度 | 核心影响 | 平衡要点 |
|---|---|---|
| Difficulty(施法难度) | 决定法术失败率 | 难度越低越好施放,间接越强;多数时候应与层级成正比 |
| Max Level(最高等级) | 决定成长空间 | 低于 10 会拖累层级;高于 30 则训练成本陡增 |
| Attack Stats(攻击数值) | 伤害/AOE/射程/持续 | 数值越高层级越高 |
| Effect / effect_str | 法术核心效果 | 附带控制类效果会让强度飙升 |
| Energy Source(能量来源) | 法力/体力/电池/HP | 越易回复的能量,相应法术越强 |
| Casting Time(施法时间) | 战斗中的可用性 | 越快越强;非战斗法术可放宽 |
| Energy Cost(能量消耗) | 续航能力 | 以约 2000 法力池为基准设计 |
| Fields(场地效果) | 区域控制 | 多数会提升层级,纯装饰性字段除外 |
| Damage Type(伤害类型) | 护甲穿透性 | 力场伤害无视护甲,价值最高 |
| Valid Targets(有效目标) | 施放灵活性 | 能无视友军/隔墙释放则自动更强 |
下文逐一展开。
二、逐项解析 tier 判定维度
2.1 Difficulty(施法难度)
难度是最直观的层级指标,但逻辑上与直觉相反:难度越低,法术越好施放,间接使其更强。难度直接参与法术失败率的计算,是"失败惩罚"的主要来源。文档强调:大多数情况下难度应当与法术层级同步缩放,否则该维度就失去了参考意义——例如一个伤害极高的法术若只给 1 点难度,它的真实强度就远超同级法术。
从源码看,难度同样作用于专精系统中的技能惩罚计算:proficiencies.json中每个施法专精都带有"default_skill_penalty"(默认 0.2),配合法术难度共同影响施放成功率。
2.2 Max Level(最高等级)
max_level决定两件事:
- 难度能否随等级继续降低:高等级时难度下降依赖等级成长,
max_level过小则法术在后期无法享受难度减免; - 能否持续享受数值成长:
min_damage/max_damage等字段通常通过math表达式随法术等级线性或非线性增长(见下文实例)。
文档给出的经验边界是:
max_level低于 10:成长空间不足,会负面影响法术层级;max_level高于 30:需要大量训练才能练满,且训练成本随等级呈指数增长,设计时应谨慎预期玩家实际能达到的法术等级。
2.3 Attack Stats(攻击数值)
伤害、AOE、持续时间和射程,都是"数值越高、层级越高"的维度。文档给出的经验准则是:绝大多数 tier 0 和 tier 1 的法术,即使在满级时也不应超过 150 点伤害,除非附带严重的代价(高昂消耗、缓慢施法等)。
在 Magiclysm 的实际实现中,这些数值普遍使用math表达式随等级缩放。例如 magic_missile 的定义:
"min_damage": { "math": [ "(u_spell_level('magic_missile') * 0.75) + 0" ] }, "max_damage": { "math": [ "(u_spell_level('magic_missile') * 1) + 3" ] }, "min_range": 8, "range_increment": 0.8, "max_range": 20,即每升一级,最小伤害 +0.75、最大伤害 +1、射程 +0.8 格。这种"等级驱动数值"的写法是 Magiclysm 法术 JSON 的通用模式,也是文档最后"专精使用建议"第 2 条要求所有extra_effects子法术都正确使用math函数的原因——否则子法术无法随主法术等级正确缩放。
2.4 Effect 与 effect_str
effect是法术的主体,平衡时必须以它为核心。effect_str则直接作用于效果:例如攻击法术若附加了"dazed"(眩晕)等控制效果,其强度会"火箭式上升",层级必须相应提高。仅造成伤害而没有effect_str的法术,则不受此加成。
源码层面,effect是一个字符串枚举,Magiclysm 中常见的取值包括attack(攻击)、short_range_teleport(短距传送)、translocate(传送到定位门)、spawn_item(生成物品)、effect_on_condition(触发 EOC)等,分别对应 src/magic.cpp 中 spell_effect 的分派逻辑。
2.5 Energy Source(能量来源)
能量来源通常与法术所属的"法术职业(spell_class)"强相关:
- Stamina(体力):由于体力极易恢复,使用体力施法的法术层级会显著上调;
- Bionic power(生化电池):主要归 Technomancer(技师法师)使用;
- HP(生命值):是 Animist(万物有灵师)的职业特色;任何非 Animist 职业使用 HP 施法,层级都会自动高于同样消耗法力(Mana)的法术。
法力(Mana)是法术的默认能量来源。这一规则在源码的spell_flag中也有呼应——PSIONIC等标志会影响法术数据展示(见 src/magic.cpp)。
2.6 Casting Time(施法时间)
文档将施法时间划分为三档:
| 区间 | 定位 | 平衡含义 |
|---|---|---|
| 0 ~ 300 moves | 快速战斗法术 | 可在高压战斗场景中随时使用 |
| 300 ~ 1000 moves | 慢速战斗法术 | 需要一定预判或拉开距离 |
| > 1000 moves | 非战斗法术 | 基本无法在战斗中使用,层级可相应放宽 |
法术的层级高度依赖"能否在高压环境下快速出手",因此施法时间越长,对层级的约束就越宽松。文档特别警告:施法时间为 0 的法术会处于极高的层级,除非附加强烈的限制条件,否则不要这样设计。
2.7 Energy Cost(能量消耗)
法力池大小因人而异,但文档建议以施法者拥有约 2000 法力为平衡基准。Magiclysm 的设计哲学是"法术应当是你其他战斗手段的补充":
- 低等级、低层级时,法师应当花费全部或接近全部法力去解决低威胁目标(如 2~3 只僵尸或一只肥僵尸);
- 因此法术层级可以作为"法师在特定法术等级下能征服何种威胁"的粗略标尺。
这也是为什么 fireball 这种高伤害 AOE 法术要设置"base_energy_cost": 350——它在同层级中属于消耗较高的"主力清场技",而不是可以随意连发的常规手段。
2.8 Fields(场地效果)
场地效果(field)目前灵活性有限:持续时间固定,且除非专门编码否则不会漂移。大多数 field 会提升法术层级,具体取决于字段类型、生成概率与强度。但也存在例外:纯装饰性的字段(血液、血腥碎块、轻微热量等)不会提升层级,因为它们对战斗结果几乎没有影响。
2.9 Damage Type(伤害类型)
伤害类型是攻击法术的关键因素:
- 力场伤害(force):无视所有护甲,价值最高;
- 钝击/切割/穿刺(bashing/cutting/piercing):会被对应护甲阻挡;
- 其他类型:被各自的伤害抗性所阻挡。
文档还补充了几条当时的特殊规则(并注明"直到重写伤害函数为止"):
- heat(热)伤害还会点燃目标;
- cold(冷)伤害会被火焰抗性阻挡;
- bio(生化)伤害会被
NOBREATHE(无需呼吸)标志阻挡。
注意,在 Magiclysm 中许多法术的damage_type并非原版的基础类型,而是模组自定义类型(如nether、necrotic),详见模组的 damage_types.json。
2.10 Valid Targets(有效目标)
若攻击法术可以忽略自身与友军(即valid_targets中不包含self、ally,只包含hostile),则它自动优于会误伤己方的法术。此外:
- 带 AOE 的攻击法术若可以指定地面为目标(
"ground"),就意味着可以对视线之外的目标施放——这同样是实质性的强度提升。
对比实例如下:tier 0 的 magic_missile 只允许"valid_targets": [ "hostile" ],而 tier 2 的 fireball 则允许"valid_targets": [ "self", "ally", "hostile", "ground" ]——后者的地面施放能力正是其高层级的重要构成部分。
三、层级示例:从 Tier 0 到 Tier 3
3.1 Tier 0:新手学徒的入门法术
Tier 0 是新手法师学习魔法时最早接触的法术,特点是低数值、低消耗、低难度,或者带有明显的功能性局限。
Magic Missile(魔法飞弹)—— Spells/magus.json
- 伤害低,满级上限约 20 出头;
- 但属于
nether类型伤害,可无视护甲; - 是
target_attack(可穿透墙壁直接锁定目标)类型,配"NO_PROJECTILE"标志; - 拥有体面的射程(8~20 格)和快速施法时间(100 moves)。
Finger Firelighter(手指点火器)—— items/ethereal_items.json
- 实用型功能法术:能在法术持续期间点燃火焰;
- 点亮所在格子,但持续时间较短,不足以用来读书照明;
- 属于典型的"功能性而非战斗性"的 tier 0 定位。
Necrotic Gaze(死灵凝视)—— Spells/animist.json
- 造成 necrotic 伤害,但僵尸对此免疫;
- 射程较短(3~5 格);
- 高等级时伤害可观:
min_damage = 等级×2 + 4,max_damage = 等级×5 + 8; - 以 HP 施法(Animist 职业特色),且相当便宜(base_energy_cost 相对低);
- 带有
SPLIT_DAMAGE、CONSUMES_RUNES等限制性标志,需要在 Spells/animist.json 中查看完整的 flag 组合。
3.2 Tier 1:开始独当一面的进阶法术
Tier 1 的法师开始掌握更复杂的法术。
Point Flare(点状爆焰)—— Spells/kelvinist.json
- 对攻击法术而言施法偏慢(300 moves);
- 以高单体伤害(满级约
等级×3.3 + 8)和可穿透墙壁施放(NO_PROJECTILE+ hostile-only)弥补; - 施法成本相对伤害而言很低(75 法力);
- 难度 4,并带
LOUD、CONCENTRATE标志。
Phase Door(相位门)—— Spells/magus.json
- 效果为
short_range_teleport,能让你脱离眼前的危险; - 但会随机传送,可能适得其反;
- 难度较高(2,配合 10 级上限),低等级时失败率不低;
- 施法快速(100 moves),可在危急时刻使用,但传送距离有限(3~4 格)。
Lightning Bolt(闪电箭)—— Spells/stormshaper.json
- 对一条直线上的所有目标造成可观伤害;
- 作为远程法术射程偏短;
- 对伤害法术而言非常便宜;
- 拥有稀有特性:施法时间随法术等级提升而缩短(
base_casting_time+ 每级增量机制); - 缺点是难度 6 且带
LOUD标志——虽然满级伤害很高,但达到那个等级所需的训练量同样很高。
3.3 Tier 2:职业内也颇为专业的法术
Tier 2 法术即便在各自职业内也属于相当专业化的存在。
Cat's Grace(猫之优雅)
- 与 Magus 职业其他属性增益法术类似,提升 4 点敏捷属性,持续可观时长;
- 代价是施法缓慢,几乎没有准备无法在战斗中施放;
- 需要专注(
CONCENTRATE),且难度 5——专注与难度共同决定失败率; - 只能对自己施放(
valid_targets: ["self"]),但持续时间上限很高。
Animated Blade(活化之刃)—— Spells/technomancer.json
- 召唤类法术;召唤法术通常比直接攻击法术更强,因为召唤物既能输出伤害又能吸收怪物的伤害;
- 召唤活化之刃怪物,高等级可召唤多把;
- 对于能召唤这类怪物的法术而言,消耗与施法时间都非常低,因此难度与层级被大幅调高,持续时间则被压缩——这正是文档"用难度和续航换强度"平衡手法的典型示范。
Fireball(火球术)—— Spells/kelvinist.json
- 经典奇幻法术,凭借大范围 AOE(3~5 格)与优秀的伤害输出稳居 tier 2;
- 施法时间(200 moves)恰好处于"战斗中可轻松施放"的临界点;
- 能量消耗(350)相对其"伤害 + AOE"组合而言偏低;
- 射程很远(6~20 格),是 kelvinist 法师的招牌法术;
- 难度只有 4,带
IGNITE_FLAMMABLE、SPLIT_DAMAGE标志,伤害类型为 heat。
3.4 Tier 3:更为奇幻或高度专业化的法术
Translocate Self(自我传送)—— Spells/classless.json
- 效果极其特殊但强大:
translocate可让你传送到任意已创建的定位门(gate); - 施法时间 6000 moves,完全无法在战斗中使用,是纯粹的战略性工具法术;
- 关键加分项:无职业归属(
"spell_class": "NONE"),任何法师流派都能学习,通用性、实用性与威力兼备; - 难度高达 15,消耗 675 法力。
Mana Blast(法力爆破)
- 类似火球术,但伤害更高;
- 且造成力场伤害(force),无视一切护甲;
- 仅凭"高伤害 + 无视护甲"两点就足以让它单独跻身 tier 3。
注:
mana_blast在仓库中表现为由mana_doping等机制触发的衍生效果(见 Spells/item_only.json),其"高伤害 + 无视护甲"的定位与原文档描述一致。
3.5 Legality(法术书合法性分级)
除层级外,法术还按合法性分为三类,决定其书籍能否在文明社会中流通:
| 级别 | 定义 | 典型例子 |
|---|---|---|
| Unrestricted(不受限制) | 主要为个人、无害效果:报时、清洁衣物、防护伤害、加热食物等"良民"行为 | 功能性日常生活法术 |
| Restricted(受限) | 可能被用于不法用途、政府需要跟踪掌握:隐身、传送、召唤、单体或非致命战斗法术 | 隐身术、传送术、召唤术 |
| Illegal(非法) | 任何平民都没有理由知晓:大规模战斗法术、纯粹以造成痛苦为目的的法术 | 群体攻击、折磨类法术 |
法术书的合法性由其中包含的最受管控的法术决定(取最高管控级别)。文档给出的实践建议是:如果可能,可以将同一本书制作成两个不同版本(一个经过审查删减)并赋予不同的合法性级别——例如公开售卖"洁本"、黑市流通"全本"。
四、施法专精(Spellcasting Proficiencies)体系
施法专精允许法师跨越魔法职业,根据法术的功能类别进行专业化发展。当前共有八个专精类别。每个类别在 proficiencies.json 中都有完整的三阶成长链:beginner(新手,8 小时学习)→apprentice(学徒,16 小时)→master(大师,32 小时),全部归属prof_magic_casting(Spellcraft)专精大类,并设置了default_time_multiplier: 1.5与default_skill_penalty: 0.2的通用参数。
4.1 Evocation(塑能系)
- 覆盖范围:强大、施法快速的爆发型法术,快速聚集能量并释放。涵盖大多数攻击法术——Magic Missile、Fireball、Necrotic Gaze 等。
- 边界:也可覆盖非攻击法术,只要它们要求施法者"快速汇聚法力并释放",且其效果不属于其他专精类别。
- 专精收益:更高效地使用法力,提升法术的伤害或效果威力。
4.2 Channeling(导能系)
- 覆盖范围:需要长时间专注、缓慢汇聚或引导法力的法术。包括大多数仪式法术:Wash the Wounds Clean、Crystallize Mana,以及各类符文创造法术。
- 实例:Crystallize Mana 施法时间长达 600000 moves,消耗 1000 法力,是典型的导能系仪式法术。
- 专精收益:降低法力消耗与施法时间。
- 与 Conjuration 的区分:永久性创造(如炼成物品)更偏向 Channeling;临时召唤则归 Conjuration。
4.3 Conjuration(召唤系)
- 覆盖范围:召唤某物或某人,通常持续固定时间。大部分 Golemancy(魔像术)、Animist 的 Summon Undead、Ignus Fattus、德鲁伊的 Nature's Bow 均属此类。
- 实例:Summon Undead 是 Animist 职业的招牌召唤术。
- 专精收益:降低法力消耗,并提升召唤物/物体的持续时间。
4.4 Enhancement(强化系)
- 覆盖范围:以某种方式提升目标的法术——心智、肉体或情绪层面。如 Cat's Grace、Ogre's Strength、Eagle's Sight、Feral Form。
- 边界:纯治疗法术不在此列(治疗是修复受损,强化是整体增益);但既治疗又增益的法术应归入本类;纯削弱/阻碍类法术也不在此列(见 Enervation)。
- 专精收益:降低施法时间,并延长强化效果的持续时间。
4.5 Enervation(衰弱系)
- 覆盖范围:Enhancement 的反面——降低目标某方面能力的法术,如 Slow、A Shadow in the Crowd、Faerie Fire。也包括夺取目标心智/行动控制权的法术(Domination、Beguiling the Savage Beast)。
- 边界:以伤害为主要效果、仅附带些许削弱能力的法术不属此类。
- 专精收益:延长法术持续时间,并扩大 AOE 范围。
4.6 Conveyance(传送系)
- 覆盖范围:涉及传送、瞬移或移动施法者/目标的法术:Phase Door、Magus's Mark、Shocking Dash、Translocate Self。
- 实例:Phase Door 与 Translocate Self 均带
CONVEYANCE_SPELL标志。 - 专精收益:延长法术射程,并降低法力消耗。
4.7 Restoration(恢复系)
- 覆盖范围:将目标在肉体、精神、情感或魔法层面的能力恢复到理想状态。Cure Light Wounds、Sacrificial Regrowth、Mind over Pain、Stone's Endurance 均属此类。
- 黑暗面:吸取目标能力以恢复施法者的法术同样属于恢复系——这与"恢复类法术"的一般认知形成对照。
- 专精收益:降低施法时间,并提升治疗量。
4.8 Transformation(变化系)
- 覆盖范围:将一物变为另一物,如将一把树叶变成黄金、将冲锋的敌人变成家猫;也包括目标的局部变化。Harvest of the Hunter、Vicious Tentacle、Convert 都是变化系法术。
- 专精收益:延长持续时间,并降低施法时间。
4.9 专精在法术中的接入方式(核心实操)
原文档给出了两条关键实践建议,二者均能通过仓库源码得到印证:
建议 1:打标志 + 挂 EOC 子法术
为法术添加对应的专精标志(flag),并通过extra_effects调用相应的"setup"法术来发放专精经验。若法术使用了多个子法术,必须为所有子法术都加上对应标志。
仓库中所有专精法术都遵循这一模式,例如 magic_missile:
"flags": [ "EVOCATION_SPELL", "RANDOM_DAMAGE", "VERBAL", "SOMATIC", "NO_LEGS", "SILENT", "NO_PROJECTILE" ], "extra_effects": [ { "id": "eoc_evocation_setup", "hit_self": true } ],八个专精标志在引擎中均有正式定义(src/magic.h),并由 src/magic.cpp 映射为字符串;同时引擎会在法术信息面板中渲染这些标志(src/magic.cpp),玩家可直接看到"is an evocation spell"等描述。对应地,每个专精类别都有专属的 setup 子法术:eoc_evocation_setup、eoc_channeling_setup、eoc_conjuration_setup、eoc_enhancement_setup、eoc_enervation_setup、eoc_conveyance_setup、eoc_restoration_setup、eoc_transformation_setup——它们遍布于 Spells/animist.json、Spells/classless.json 及各 attunement 法术文件中。
建议 2:多效果法术必须统一使用 math 函数
当法术包含多个效果(如extra_effects条目)时,必须让所有子法术都使用正确的math函数进行数值缩放,否则法术整体无法随等级正确成长。这正是 magic_missile 中min_damage/max_damage使用u_spell_level('magic_missile')表达式的原因,也是 fireball 等所有攻击法术的通用写法。
三阶专精链与引擎联动
每个类别的三阶专精通过required_proficiencies串联(如prof_magic_evocation_beginner→apprentice→master),法师施放对应法术即可积累经验(见 proficiencies.json)。default_skill_penalty: 0.2意味着未掌握专精时施放该类法术会有 20% 的技能惩罚,而default_time_multiplier: 1.5表示学习该类专精需要 1.5 倍的基础时间——这些参数共同构成了"专精既是成长路线、也是即时收益"的双层机制。
五、总结:设计一张平衡的法术"体检表"
综合原文档与仓库实现,设计或评估一个 Magiclysm 法术时可按下表逐项自检:
- 定层级:先确定预期 tier,再分配数值预算;
- 对数值:满级伤害(tier 0/1 上限约 150)、AOE、射程、持续时间是否符合该层级;
- 算账本:以 2000 法力池为基准,
base_energy_cost是否让低等级施法者"倾尽全力解决一个中等威胁"; - 卡节奏:施法时间落在三档中的哪一档,是否符合战斗/非战斗定位;
- 审类型:伤害类型是否绕过护甲(force 最高),是否附带点燃/眩晕等隐性增益;
- 查目标:
valid_targets是否包含ground(隔墙施放)或排除了友军; - 挂专精:按效果类别选择八个专精标志之一,并为每个子法术补齐标志与
eoc_*_setup子法术,同时用math函数统一缩放; - 定合法性:按书籍内最高管控法术设定 unrestricted / restricted / illegal,必要时制作双版本法术书。
遵循这套流程,无论是新法术的设计者还是 Mod 平衡性的审阅者,都能在 magic_balance.md 给出的框架内,产出强度可预期、成长曲线合理、且与 Magiclysm 专精生态无缝衔接的法术内容。
【免费下载链接】Cataclysm-DDACataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.项目地址: https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考