新闻详情

新闻详情

首页 / 资讯中心 / 详情

Cataclysm-DDA 近战武器平衡电子表格全解:从 0.E 再平衡项目到 DPS 评估公式的底层原理

发布时间:2026/9/15 13:18:59来源:尧图网络
Cataclysm-DDA 近战武器平衡电子表格全解:从 0.E 再平衡项目到 DPS 评估公式的底层原理
Cataclysm-DDA 近战武器平衡电子表格全解从 0.E 再平衡项目到 DPS 评估公式的底层原理【免费下载链接】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 仓库内 MELEE_BALANCE_SPREADSHEET.md 为线索完整还原推动 0.E 实验版近战武器再平衡项目Melee Weapon Evaluation 电子表格的 7 个数据选项卡及其数据流并结合 GAME_BALANCE.md 与src/melee.cpp、src/item_gun_tool_ammo.cpp源码讲透命中、暴击、破甲伤害与每秒伤害DPS的评估公式。读完你将掌握如何用武器类别 命中要素 伤害模型给任意近战武器打分、为什么 rapid strike 会快速弹刀、以及nodachi与zweihander这类同价值武器是如何被调平到同一档位的。一、背景一份驱动了全游戏近战武器改版的电子表格Cataclysm-DDA 的 0.E 实验版经历了一次大规模近战武器再平衡melee weapon rebalance项目。该项目的决策依据是维护者 mlangsdorf 构建的一份名为Melee Weapons Evaluation的复杂电子表格原文档自述。这份电子表格最初以 Google Docs 形式托管其静态副本被保留在仓库中即同目录下的 Melee Weapon Evaluation.ods便于在外部托管变动时随时回溯。需要特别说明的是原文档开头明确标注This document is quite out of date本文档已相当过时。它描述的是 0.E 时代约 2019 年 10 月基于 0.D 实验版的评估方法其中的具体数值与当前版本可能已有出入但评估框架、数据流与平衡思路至今仍是理解本游戏近战数值体系的钥匙并与现行 GAME_BALANCE.md 中的武器平衡准则一脉相承。二、电子表格总览7 个选项卡与数据流这份电子表格机关众多、环环相扣共有 7 个核心选项卡数据按以下路径流转Raw原始数据倾倒 │ ▼ Filter按武器类别过滤──► New Formula新公式评估 │ ▼ New Formula Sorted按类别排序比较 │ ▼ Proposed Values拟议数值调整 │ ▼ Proposed Values Sorted调整后再排序 │ ▼ Comparison汇总对比一句话概括先灌入全量武器数据Raw过滤出要分析的类别Filter用新公式逐列计算评估值New Formula排序找出异常值New Formula Sorted然后手工调整数值Proposed Values再次排序验证Proposed Values Sorted最后汇总新旧对比Comparison。三、Raw 选项卡初始数据与附加分类维度Raw 是初始数据倾倒数据取自2019 年 10 月某个 0.D 实验版且使用维护者 mlangsdorf 惯常加载的模组因此其中出现了大量 Blazemod 内容。在原始物品数据之外Raw 选项卡又手工附加了几个关键分类列这些列是后续所有评估的基础列含义说明Weapon Class武器类别简单数字评级0不是武器1爆炸装置2远程武器/枪械3可作为武器的工具如煮锅4头盔5可作为好武器的工具如大锤6临时/伪制武器7真正的专用武器Category武器归类便于同类比较近战类别包括Ax、Ax2、Club、Club2、Flail、Flail2、Knife、Polearm、Spear、Staff、Shortsword、Sword、Sword2。以 2 结尾的类别均为双手武器Acc重算命中值依据下方命中要素重新计算武器命中。因为人工复查发现大量武器的命中值并不符合 GAME_BALANCE.md 中规定的判定标准Grip握持见 GAME_BALANCE.md 中 To-Hit Value 一节Leng长度同上Surf打击面同上Bal平衡同上且在原版 Clumsy 之外额外扩展了更多档位由人工目测赋分这里的 Acc/Grip/Leng/Surf/Bal 五列直接对应 GAME_BALANCE.md 中描述的to_hit 值描述性体系。在正式武器 JSON 中武器不再直接写一个to_hit: X数字而是写成一组描述词由游戏运行时从基础值 -2 自动累加计算to_hit: { grip: (parameter), length: (parameter), surface: (parameter), balance: (parameter) }各参数档位如下均取自 GAME_BALANCE.mdGrip握持衡量你能多好地控制武器以应对情况变化-1 bad特别难握持的物品天生湿滑、圆润无棱边的篮球、木桶或带锋利边缘危险的碎金属、碎玻璃0 none不属于以下类别的任何物体2x4 木方、显示器、电线、毒刺、衣物等可抓但太粗/太细/太软的东西1 solid握持相当扎实的武器如管道、石块、吉他琴颈、台球杆2 weapon专为手形设计的握把剑、斧、刀、警棍或绑在身上/身体一部分的武器拳头在此得 2使其总分归零因为其他项都不适用Length长度更大的接触面与更安全的打击距离0 hand从握持处延伸不足 31 cm1 英尺1 short延伸 31 cm ~ 91 cm1~3 英尺2 long延伸超过 91 cm3 英尺Striking Surface打击面衡量武器对打击方式的要求-2 point单点武器镐、矛、注射器必须以特定方式命中才能造成可观伤害也包括攻击角度刁钻的武器如镰刀-1 line线状伤害武器剑、刀存在攻击角度有尖端但无需实打实命中也有威力的武器如钉板也归此类0 any任意角度攻击棍棒、管道、狼牙棒任何表面都是有效打击面1 every即使擦伤也能造成显著伤害的武器锯齿撕裂类、电击棒Balance平衡衡量物品是否适合挥舞/突刺-2 clumsy非常笨重或重心失衡光是稳住都费力煎锅、电锯、椅子、吸尘器-1 uneven重心不均匀但不妨碍挥舞斧头、大锤、步枪、镰刀、多数长柄武器0 neutral中性平衡重棍、岩石、台球杆、厨刀、羊角锤、金属管、撬棍、手枪1 good非常适合挥舞或突刺棒球棒、高尔夫球杆、剑、四分之一杖、刀这套描述词驱动体系正是 Raw 选项卡中 Acc 列能重算命中值的原因只要武器 JSON 里写的是 grip/length/surface/balance 四词组合电子表格就能按同一套基准重新求值从而揪出那些写了个漂亮 to_hit 数字、却不符合任何物理特征的武器。四、Filter 选项卡按武器类别切片Filter 从 Raw 取得初始数据并读取单元格 B1 中的 Weapon Class 值把所有武器类别低于该值的物品过滤掉从而缩小分析范围。这是整个数据流的第一道闸门——后续所有选项卡都只分析通过筛选的武器便于集中对比同一武器段位内的物品。五、New Formula 选项卡新武器评估公式逐列拆解这是整份电子表格的核心计算公式相当复杂。其布局与计算逻辑如下评估者设定所有武器都交由一名力量 10、敏捷 10、感知 10全部武器技能 4 级的幸存者来评估。基础命中base hit、属性暴击stat crit、技能暴击skill crit、钝击倍率bash mult、切割倍率cut mult、刺击倍率stab mult等基准值均取自 src/melee.cpp 的相关代码段。前 7 行是表头数据主体计算从第 8 行开始。各列含义列名称含义AAverage该武器的新评估值放在表格边缘便于引用B–J原始属性武器原始数据经 Filter 选项卡从 Raw 取来Kroll_hit评估者 base_hit 与武器 acc 之和LWpn Crit武器对暴击的贡献M–N3 Crit / 2 Crit基于技能、命中、属性的三连暴击与双连暴击发生概率O–QAverage Non-Crit3 类伤害各自在未暴击情况下的平均伤害破甲前接下来三个数据块是本表最复杂的部分列 S–Z、AB–AI、AK–AR 结构完全重复但分别采用三种不同怪物属性对应 GAME_BALANCE.md 中描述的三个参照怪物低闪避高装甲的 soldier zombie、中等闪避中等装甲的 survivor zombie、高闪避无装甲的 smoker zombie。每个数据块内S Hits每 1000 次攻击的期望命中次数按均值 5 × ( roll_hit − 怪物 Dodge )、标准差 25 的正态分布计算T Crit %s这些命中里暴击所占百分比U Dmg破甲后的平均期望伤害即对 3 种伤害类型分别计算max( 0, 伤害 − 护甲 )后求和V Crit破甲后的平均期望暴击伤害。3 种伤害类型的暴击倍率不同、暴击时削减的有效护甲量也不同因此公式远比普通伤害复杂W–Y重复伤害与暴击伤害计算但针对rapid strike快速打击其基础伤害按 2/3 折算Z Dmg/Turn每回合伤害有两种口径无 rapid strike 时100 × ( Dmg × ( Hits − crits ) Crit Dmg × crits ) / ( 1000 × Moves )——即每次普通命中伤害 × 普通命中数 每次暴击伤害 × 暴击命中数除以 1000 次攻击消耗的总行动点数再乘以每秒 100 行动点有 rapid strike 时100 × ( Dmg × ( Hits − crits ) / 2 Crit Dmg × crits / 2 rapid Dmg × ( Hits − crits ) / 2 rapid Crit Dmg × crits / 2 ) / ( 1000 − ( hits / 2 ) × Moves Hits × 0.33 × Moves )——即普通打击与快速打击各占一半次数、伤害与行动消耗均按比例分摊收尾两列AT Weapon重复武器名便于对照Au Value列 Z、AI、AR三种怪物的 Dmg/Turn的平均值Reach 2 武器再乘 1.5Reach 3 武器乘 1.75值得注意的历史差异GAME_BALANCE.md 现行版本中 reach 的权重是Reach 2 20%、Reach 3 35%而 0.E 时代这份电子表格采用了更激进的×1.5 / ×1.75即 50% / 75%。这说明 reach 的价值权重在项目演进中被下调过阅读旧文档时需留意。5.1 源码印证正态命中与查表命中电子表格中均值 5 × ( roll_hit − Dodge )、标准差 25 的正态分布并非凭空设计它与 src/melee.cpp 的实际实现精确对应Character::get_melee_hit_base()返回Character::get_hit_base() hit_weapon mabuff_tohit_bonus() 附魔修正其中hit_weapon即武器 acc 贡献src/melee.cppCharacter::hit_roll()综合敏捷、技能、武器与武术再叠加远视、倒地、蹲伏、乘车等修正最终调用melee::melee_hit_range( hit )src/melee.cppmelee::melee_hit_range的实现正是normal_roll( accuracy * 5, 25.0f )——均值 accuracy×5、标准差 25 的正态分布掷点与电子表格的 Hits 列公式完全同源src/melee.cpp而现行代码中item::effective_dps()src/item_gun_tool_ammo.cpp沿用了同一套评估思想但实现为查表而非正态分布逐次计算const float mon_dodge mon.get_dodge(); float base_hit guy.get_dex() / 4.0f guy.get_hit_weapon( *this ); base_hit * std::max( 0.25f, 1.0f - guy.avg_encumb_of_limb_type( bp_type::torso ) / 100.0f ); float mon_defense mon_dodge mon.size_melee_penalty() / 5.0f; constexpr double hit_trials 10000.0; const int rng_mean std::max( std::min( static_castint( base_hit - mon_defense ), 20 ), -20 ) 20; double num_all_hits hits_by_accuracy[ rng_mean ];其中rng_mean将基础命中 − 怪物防御钳制到 [−20, 20] 后作为hits_by_accuracy查表下标对应电子表格中每 1000 次攻击的期望命中数base_hit - 1.5 * mon_dodge则对应电子表格的 2 Crit 双暴击通道详见下节。effective_dps()还会对 10000 次试击统计总行动点与总伤害换算回每秒伤害与电子表格 Z 列的每回合伤害口径一致。5.2 源码印证暴击的双通道机制电子表格中 M–N 列区分了3 Crit三连暴击与2 Crit双连暴击这对应 GAME_BALANCE.md 描述的双暴击系统双连暴击double critical在第二次命中掷点对抗 1.5 × 怪物闪避时触发发生概率高于普通暴击每次攻击会分别计算两种暴击的出现概率。effective_dps()中的实现印证了这一分层const int rng_high_mean std::max( std::min( static_castint( base_hit - 1.5 * mon_dodge ), 20 ), -20 ) 20; double num_high_hits hits_by_accuracy[ rng_high_mean ] * num_all_hits / hit_trials; double double_crit_chance guy.crit_chance( 4, 0, *this ); // 双连暴击通道 double crit_chance guy.crit_chance( 0, 0, *this ); // 普通暴击通道即部分命中具备触发双连暴击的资格base_hit − 1.5 × dodge对应的命中区间其余命中走普通暴击通道两者用不同的 crit_chance 参数分别折算。顺带一提GAME_BALANCE.md 作者自己也吐槽这套暴击系统又蠢又复杂、会产生怪异的数值结果并提议改为原始命中掷点高于均值 1 个标准差即触发双暴击的更简方案——这段注释至今仍保留在文档中。六、New Formula Sorted揪出同类武器中的异常值New Formula Sorted 把旧武器评估值与新公式评估值并列并按武器类别Category内新评估值降序排序。这样做的目的是快速发现某类武器中鹤立鸡群或垫底的异类——原文档点名了broadsword阔剑这个在当时明显超模的例子。排序视图让再平衡工作有了明确靶子先看类别内分布是否均匀再对极端值动刀。七、Proposed Values拟议数值的调整规则这是整个再平衡项目的手术台。Proposed Values 选项卡复刻了 New Formula 的结构但将 C–J 列复制为静态数值paste as values然后手工微调把评估值凑成漂亮的数字。其调整规则有六条条条都值得细读命中值全面重算命中Accuracy改为完全依据 Raw 选项卡中的 grip、length、striking surface、balance 四要素取值。于是一批原本命中虚高的武器如bionic claws 生化爪被削弱而一批命中被低估的武器如katana 武士刀得到加强。同类别武器评估值大致拉平同一 Category 内的武器被调整到大致相同的评估值但数值分布仍各有差异。总体倾向是欧洲武器的伤害更多来自钝击bash、更少来自切割cut且通常更重更慢亚洲武器则相反。原文档承认这种设定有点随意、也不太写实但大家都这么期待。最典型的案例是两把双手剑日本nodachi野太刀攻击速度 164钝击 6切割 47欧洲zweihander双手剑攻击速度 169钝击 18切割 39两者评估值都约为26殊途同归。劣质inferior武器降档与真实武器相比劣质版获得1 档平衡惩罚同时一半的切割/刺击伤害转为钝击且切割/刺击伤害降至真实武器的1/4。示例一把劣质长枪inferior pike为钝击 30、刺击 11而正版长枪为钝击 8、刺击 44。伪制fake武器再降档伪制武器与劣质版一样糟糕的平衡但基本是钝器因此打击面striking surface通常升为 every——讽刺的是这让伪制武器反而比真品更准或一样准。其钝击伤害为劣质版的一半切割/刺击伤害再降到劣质版的 1/4即真实武器的 1/16。示例一把伪制长枪为钝击 15、刺击 3。大量武器获得伤害提升以拉高评估值原因是很多低伤害、带 rapid strike 的武器被严重高估——破甲伤害测试表明rapid strike 常常只是让你以两倍速度弹刀bounce off armor twice as fast低伤害打不穿护甲快速连击毫无意义。长矛与长柄武器特殊处理Spears矛曾有一套基于重量的刺击伤害粗略公式原作者已无法找回总体效果是矛与矛之间的差异比以前更小了。Polearms长柄武器在距离 2 时获得与 Ax2 相同的粗略伤害但在距离 1 时单独开一条平衡线原始伤害乘以 0.7。这使长柄武器在远距离非常强悍但贴身肉搏时比四分之一杖quarterstaff略逊一筹。八、Proposed Values Sorted 与 Comparison验证与汇总Proposed Values Sorted与 New Formula Sorted 同构的对比选项卡只不过数据源换成 Proposed Values 调整后的数值用于验证调整后类别内是否足够均匀。Comparison汇总选项卡列 A–P每个通过 Filter 的武器都列出其当前属性与拟议属性、原始评估值、新公式评估值、使用拟议数值的新公式评估值。对拟议数值而言提升的值标绿、变差的值标红——一眼就能看出改动方向方便对比变更、抓出错误。列 S–AH重复同样流程但单元格S1、T1、U1、V1 可手工填入类别名下方小计仅汇总匹配这些类别的武器子集从而简化同类比较。九、历史局限性与今天的平衡基准原文档的自述quite out of date应当被认真对待数据源是 2019 年 10 月的 0.D 实验版含个人模组覆盖面与当前主分支差异巨大reach 权重×1.5/×1.75、部分伤害模型与现行 GAME_BALANCE.md 已不一致现行文档对武器价值的评估已收敛为清晰的武器层级weapon tiers2非武器塑料瓶、石块、靴子→2–5工具与临时武器木板、尖棍、管道、锤子→6–11危险工具或粗糙专用武器高尔夫球杆、木矛、匕首矛、手斧、弹簧刀、tonfa、四分之一杖→12–15优秀专用武器木斧/消防斧、钢矛、电动切肉刀、库克锐刀、木剑、砍刀、铁丝钉棒→20–35为杀人而设计的战争武器胁差、武士刀、阔剑、双手剑、战斗刀、战斧、战锤、狼牙棒、晨星→35科幻武器钻石武士刀、单分子刃、光剑、链锯剑并给出具体锚点值战斗刀 20、短刃 22、长刃/短斧/短链枷 24、双手刃/长斧/多数矛 26、双手斧与长柄武器 28、战斗矛 30临时武器约为真品价值的 75%。这些锚点正是 0.E 电子表格方法论沉淀后的现行版本。十、结语一份可复现的武器评分流水线回顾整份电子表格它本质上是一条可复现的武器数值评审流水线Raw全量数据 分类标签→ Filter切片→ New Formula命中/暴击/破甲/DPT 全链路求值→ 排序找异常 → 按六条规则手工调整 → 汇总验证。其中命中 均值 5×(roll_hit−dodge)、标准差 25 的正态分布至今仍是 src/melee.cpp 中melee_hit_range的真实实现三参照怪物求平均 DPS的思想则演化为 src/item_gun_tool_ammo.cpp 的item::effective_dps()查表实现。如果你要为本游戏新增或平衡一件近战武器标准动作是先在 data/json 中写好to_hit四要素描述词确保符合 GAME_BALANCE.md 的握持/长度/打击面/平衡准则再对照现行武器层级锚点设定伤害与攻速最后用effective_dps的评估思路做一次心理验算——这就是 0.E 那次大改版留给今天的完整方法论遗产。【免费下载链接】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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

DanaBot银行木马深度剖析:架构、攻击链与防御实战 2026/9/15 20:02:33

DanaBot银行木马深度剖析:架构、攻击链与防御实战

前阵子在处理一批恶意邮件样本时,又看到DanaBot活跃的身影。这玩意儿第一次出现在大众视野是2018年,当时主要盯上大洋洲的银行客户,后来一路扩散到欧洲多国和拉美地区,到现在还在不断变种。作为一类典型的银行木马病毒&#xff0c…

阅读更多 →
Nixpkgs 的 teTeX / TeX Live 环境钩子:texmf-nix 树与 TEXINPUTS 注入机制解析 2026/9/15 20:02:33

Nixpkgs 的 teTeX / TeX Live 环境钩子:texmf-nix 树与 TEXINPUTS 注入机制解析

Nixpkgs 的 teTeX / TeX Live 环境钩子:texmf-nix 树与 TEXINPUTS 注入机制解析 【免费下载链接】nixpkgs Nix Packages collection & NixOS 项目地址: https://gitcode.com/GitHub_Trending/ni/nixpkgs 导读:本文围绕 Nixpkgs 中 tetex-tex-l…

阅读更多 →
使用 lm-evaluation-harness 评估西班牙语社会偏见:EsBBQ 任务组完整指南 2026/9/15 20:02:33

使用 lm-evaluation-harness 评估西班牙语社会偏见:EsBBQ 任务组完整指南

使用 lm-evaluation-harness 评估西班牙语社会偏见:EsBBQ 任务组完整指南 【免费下载链接】lm-evaluation-harness A framework for few-shot evaluation of language models. 项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness 导读…

阅读更多 →
AI Agent工程化落地:架构设计与性能优化实战 2026/9/15 20:02:33

AI Agent工程化落地:架构设计与性能优化实战

1. AI Agent工程化落地指南及技术详解AI Agent作为人工智能领域的重要分支,正在从实验室走向产业应用。不同于传统AI模型,AI Agent具备自主感知、决策和执行能力,能够独立完成复杂任务。但要将AI Agent真正落地到生产环境,需要解决…

阅读更多 →
jemalloc 内存监控实战:从 mallctl 到生产告警的 5 步路径 2026/9/15 20:02:33

jemalloc 内存监控实战:从 mallctl 到生产告警的 5 步路径

jemalloc 内存监控实战:从 mallctl 到生产告警的 5 步路径 【免费下载链接】jemalloc 项目地址: https://gitcode.com/GitHub_Trending/je/jemalloc 从一条凌晨告警说起 凌晨三点,告警群被"RSS 持续上涨"刷屏。服务链着 jemalloc&…

阅读更多 →
VeraCrypt 磁盘加密实战:3 步建出你的第一块加密硬盘 2026/9/15 19:59:33

VeraCrypt 磁盘加密实战:3 步建出你的第一块加密硬盘

VeraCrypt 磁盘加密实战:3 步建出你的第一块加密硬盘 【免费下载链接】VeraCrypt Disk encryption with strong security based on TrueCrypt 项目地址: https://gitcode.com/GitHub_Trending/ve/VeraCrypt U 盘落在出租车上,里面的资料却再也找不…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞