mcpField
G
godot-monte-carlo-balancer

godot-monte-carlo-balancer

github.com/thedivergentai测试与质量907198 次安装2 周前更新
代码仓库

关于 godot-monte-carlo-balancer

面向 Godot 游戏设计者的平衡测试技能,指导构建从游戏资源提取数据并运行模拟的命令行实验室。它覆盖难度、输入方式和经济系统,并通过置信区间与校准流程支持可重复验证。

主要功能

  1. 01从 Godot Resource 提取数据
  2. 02模拟玩家风格与输入方式
  3. 03分析置信区间和资源流
  4. 04搜索参数并生成关卡数据
  5. 05校准并生成 CI 快照

适用场景

  1. 01检查不同玩家风格下的关卡难度
  2. 02评估移动端触控输入平衡
  3. 03验证职业进度与商店可达性
  4. 04为平衡改动生成回归快照

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/thedivergentai/game-dev-agentic-skills --skill godot-monte-carlo-balancer

安装后在 Claude Code 中输入/godot-monte-carlo-balancer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
00-game-audit.md
01-source-extraction.md
02-simulation-engine.md
03-analysis-reporting.md
04-economy-retention.md
05-tuning-generation.md
06-genre-adaptation.md
07-godot-calibration.md
example-lane-defense.md
json-schema.md
migration-notes.md
scripts/
compare_balance_snapshots.py
scripts/balance-lab-template/
Cargo.toml
launcher.ps1
launcher.sh
scripts/balance-lab-template/src/
main.rs

详细介绍

技能链

godot-resource-data-patterns → godot-economy-system →
  (godot-combat-system | godot-rpg-stats | godot-game-loop-waves) →
  godot-monte-carlo-balancer → godot-testing-patterns → godot-builder

铁律:从源码提取,零配置

模拟器中不得手动复制数字。启动时解析资源/源码,确保下一次运行能反映设计师的修改。

抽象模型(阶段 0 必须执行)

抽象含义缺失时
局次有限次数的尝试—
威胁失败压力删除
防御/能动性玩家可采取的手段删除
故障注意力消耗删除
资源可消耗的流量删除
局内经济局次内支出删除
元经济商店/解锁/声望删除
评级星级/排名/时间/分数删除

编写 BALANCE_PLAN.md。只模拟已映射的行。

渐进式披露

必须:在实施该阶段之前,先阅读链接的参考文档。

不要加载:

  • example-lane-defense.md — 除非阶段 0 映射到车道防御/轮班 TD
  • 06-genre-adaptation.md — 除非类型 ≠ 默认 PvE 胜率区间局次
  • 07-godot-calibration.md — 仅在开始校准或阶段 0 未豁免物理/AI 时加载(豁免 = 完全公式化的纯数学游戏,并已记录在 BALANCE_PLAN.md 中)
阶段 0 — 审核 → references/00-game-audit.md

类型、胜利/失败、模式、目录、影响关系图、经济、风格 + 主要指标、提取计划。与设计师确认。

阶段 1 — 提取 → references/01-source-extraction.md

资源优先决策树;任何模拟前先执行 inspect。

阶段 2 — 模拟 → references/02-simulation-engine.md

行为型 PlayStyle × InputModel(鼠标/触屏/手柄),移动端使用 SessionModel,使用带种子的 SmallRng,通过 rayon 并行处理独立任务。

阶段 3 — 分析 → references/03-analysis-reporting.md

Wilson/bootstrap 置信区间判定;次要能动性检查;稳定的 JSON。

阶段 4 — 经济 → references/04-economy-retention.md

生涯、资源农场、利息曲线、奖励节奏检查点。

阶段 5 — 调优 → references/05-tuning-generation.md

按区间评分的暴力搜索;项目采用资源优先时,生成 .tres。

阶段 6 — 类型 → references/06-genre-adaptation.md

指标覆盖 + 领域技能链。

阶段 7 — 校准 → references/07-godot-calibration.md

全面矩阵签核前,将 3–5 个黄金单元与无头 Godot 进行比对(除非已豁免)。

捆绑资源

复制后的规范布局:

tools/
  balance_lab.ps1          # from launcher.ps1
  balance_lab.sh           # from launcher.sh
  balance_lab/
    Cargo.toml
    src/main.rs            # clap stubs — expand per Phase 0
scripts/balance-lab-template/

将 Cargo.toml + src/ 复制到 tools/balance_lab/。将启动器放在 tools/balance_lab.ps1 / tools/balance_lab.sh(与 crate 目录同级)。

scripts/compare_balance_snapshots.py

支持 CI 的快照差异比较工具。

references/json-schema.md

稳定的 --json 字段约定。

CLI 约定

balance-lab inspect
balance-lab simulate --level 3 --style average --runs 1000
balance-lab career --style casual --runs 200
balance-lab mode <key> --runs 500
balance-lab bruteforce --level 4 ...
balance-lab gen-level ...
balance-lab calibrate --cells golden.json
balance-lab --json <any command>
balance-lab --seed 42 <any command>

目标区间(默认;Phase 0 可覆盖)

区间按每个 style × input_model 单元格定义。默认输入模型为 mouse。

StyleInput胜率目标低于 →高于 →
afkmouse5% – 55%太难太简单
casualmouse55% – 90%太难太简单
averagemouse70% – 95%太难太简单
promouse90% – 100%太难—
afktouch5% – 55%太难太简单
casualtouch55% – 90%太难太简单
averagetouch65% – 92%太难太简单
protouch85% – 100%太难—

只有每个模拟的 style × input_model 单元格都落在其区间内,关卡才算 OK。难度必须来自关卡曲线,而不是单纯惩罚输入速度。

平台规则:如果游戏会在移动设备上发布,矩阵 MUST 包含 touch 输入模型。鼠标输入下 OK、但 touch 输入下太难的关卡,仍然算太难。

CI 判定规则(唯一事实来源)
模式每个单元格的运行次数OK 规则
搜索 / 开发中100–30095% 置信区间与区间有重叠;否则为太难 / 太简单 / 无法判定
签核 / DoD / 快照≥1000每个 style × 已发布输入模型的 95% 置信区间都完全包含于区间内

格斗 / 教育 / 放置类游戏通常会替换胜率指标——在 Phase 0 设置主要指标。

绝对不要做

数据与提取
  • 绝不要硬编码游戏数值或跳过现有的 Resources / .tres——手动复制会逐渐失效,导致结论错误;在 Resource 项目中使用正则表达式会与数据层冲突。优先使用 Resource;正则表达式仅用于内联公式系数。在首次 simulate 前,先在 inspect 中标记每个 (default!)。
  • 绝不要跳过嵌入式公式——提取系数;在 sim 中只重新实现一次。形状发生变化时,必须让正则表达式明确报错。
模拟保真度
  • 绝不要只模拟最优玩法——仅 pro 通过的方案会发布出无法游玩的底线体验;AFK / casual 失败才是玩家会切身感受到的问题。
  • 绝不要把人类建模为瞬时响应——零延迟 Agent 能通过真实玩家会错过的卡顿 / 故障窗口;难度会退化为纯粹的反应速度门槛。
  • 绝不要将桌面端的反应 / 点击参数用于移动端——touch 的每秒点击次数更低、漏触概率更高,还会受到遮挡;按鼠标数据平衡会导致移动端游戏无法游玩。
  • 绝不要假设移动端会话不会中断——模拟中断(通知、切换应用)和会话时长上限;需要连续专注 12 分钟的关卡不适合该平台。
  • 绝不要让依赖精确操作的机制未经 touch 测试——任何需要精准 / 快速指向的机制,都必须在签核前用 touch 精度模型进行模拟。
  • 绝不要跳过元游戏——省略商店 / 升级 / 模式 / 重玩,会导致“平衡”的会话背后存在失衡的成长体验。
  • 绝不要使用无种子或通过 HashMap 生成哈希的种子路径——默认哈希器会按进程随机化,导致不同机器 / rayon 调度产生错误的 CI 差异;使用 seed_for + 稳定哈希;对确定性进行单元测试。
  • 绝不要在 rayon 任务间共享 RunState/RNG——相互干扰会伪装成平衡噪声,并破坏可复现性。
  • 绝不要根据未经校准的物理 / AI 模型宣称数学上的平衡——必须通过 Phase 7 或记录豁免;抽象 DPS ≠ Godot 碰撞。
平衡性评判
  • 绝不要只看单一平均值——直方图、停机时间、按类型统计的失败情况、资源比例会掩盖五五开的运气局与技能断层。
  • 绝不要只根据点估计下结论——CI 法则(搜索阶段重叠/签核 ⊆);搜索阶段 ≥300,签核阶段 ≥1000。
  • 绝不要在未检查资源流的情况下宣称可通关——同时检查压力和收入与消耗的关系(经典的资源匮乏却“可打赢”问题)。
  • 绝不要将难度和平衡经济分开处理——通关时间会改变每分钟货币收益;调整难度后要重新运行职业生涯。
  • 绝不要在未重新检查商店可达性的情况下过度削弱刷资源方式——漏洞修补后经常会导致成长阶梯无法继续。
  • 绝不要只用从挂机玩家到职业玩家的 PvE 区间来平衡 PvP——要使用对局/MMR 指标。
调优与维护
  • 绝不要孤立地调优单次会话——更改后要运行完整矩阵和职业生涯。
  • 绝不要接受未经模拟验证的生成内容。
  • 绝不要在以 Resource 为主的项目中生成 .gd 工厂——应生成 .tres/Resource 形式。
  • 绝不要在游戏源代码更改后缓存 GameData。
  • 绝不要让设计师手动编译——使用可自我重建的启动器;过期二进制文件会导致结论过时。
  • 绝不要只向标准输出提供 Agent 信息——使用 --json 和 game_data_hash。

黄金路径(首次接入)

  1. 阶段 0 → BALANCE_PLAN.md,并由设计师锁定区间/指标。
  2. 阶段 1 提取 → inspect → 如果出现意外的 (default!),就停止并修复提取(参见 example-lane-defense.md 中的问题示例)。
  3. 阶段 2–3:在一个单元格上运行 300 次(搜索阶段重叠)→ 完整矩阵 → 在 1000 次时验证 SignOff ⊆。
  4. 阶段 4 职业生涯 → 刷资源/商店标记 → 阶段 7 校准(除非已豁免)→ JSON 快照。

完成定义

  1. 已验证 inspect;没有意外的 (default!)。
  2. 种子确定性测试通过。
  3. 阶段 7 通过(或记录阶段 0 的豁免)。
  4. 完整矩阵(所有关卡 × 所有风格 × 所有已发布的输入模型,每个单元格运行 ≥1000 次)——每个单元格都满足 CI ⊆ 区间(签核法则)。
  5. 模式 + 职业生涯:每分钟货币收益正常;没有占主导地位的刷资源方式;商店可达。
  6. 兴趣曲线 + 奖励节奏检查点通过。
  7. 已提交用于 CI 的回归 JSON 快照。

参考资料

渐进式披露:仅在研究特定 API 时打开官方文档链接; 将工作路由到相关领域时再加载相关技能——不要预先加载整套技能。

官方文档
  • Resources — 提取 GameData 的首选来源(使用 .tres,而非正则表达式批处理)。
  • JSON — 生成和解析快照/CI 平衡 JSON。
  • FileAccess — 读取导出的平衡数据转储和黄金单元格。
  • ResourceLoader — 为提取/校准加载设计师创建的 Resources。
  • 命令行教程 — 使用无头 Godot 运行阶段 7 校准。
  • 单元测试 — 针对种子和提取流程的确定性测试。
  • OS — 实验室启动器的进程/环境钩子。
  • ProjectSettings — CI 平衡任务的路径和功能标签。
  • RandomNumberGenerator — Rust 实验室使用的带种子 RNG 模式。
  • SceneTree — 用于黄金单元格校准的无头场景启动。
  • Engine — 无头模拟的时间缩放/帧数。
  • ConfigFile — 在代码之外可选地覆盖设计师设定的区间。
相关技能
前置条件
互补技能
下游/使用方
主技能
  • godot-master — 平衡实验室的库路由器和镜像模块入口。

评论

支持 Markdown