mcpField
G
godot-genre-action-rpg

godot-genre-action-rpg

github.com/thedivergentai开发907349 次安装2 周前更新
代码仓库

关于 godot-genre-action-rpg

面向 Godot 动作 RPG 开发的技能指南,覆盖战斗判定、角色成长、战利品和敌人 AI。它通过资源化数据、信号解耦和性能组件,指导实现可组合的 ARPG 系统。

主要功能

  1. 01命中框与伤害判定组件
  2. 02资源化角色属性与成长曲线
  3. 03护甲递减收益计算
  4. 04稀有度战利品生成
  5. 05分层状态机与攻击预警
  6. 06对象池及线程化库存解析

适用场景

  1. 01实现近战或投射物命中
  2. 02配置角色属性、经验与等级成长
  3. 03生成带稀有度的战利品
  4. 04构建具有预警和阶段的 Boss AI

安装

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

$npx skills add https://github.com/thedivergentai/game-dev-agentic-skills --skill godot-genre-action-rpg

安装后在 Claude Code 中输入/godot-genre-action-rpg确认已加载。

包含的文件

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

references/
arpg-subsystems-deep.md
migration-notes.md
scripts/
animation_condition_sync.gd
aoe_group_broadcaster.gd
aoe_physics_query.gd
base_stat_resource.gd
character_stats_resource.gd
combat_damage_calculator.gd
combat_event_bus.gd
combat_log_connector.gd
cooldown_coroutine.gd
damage_label_manager.gd
deep_stat_duplicator.gd
duck_typed_hitbox.gd
enemy_area_scaler.gd
entity_stat_duplicator.gd
health_component.gd
hierarchical_state_base.gd
high_speed_aggro_broadcaster.gd
hitbox_component.gd
leveling_table.gd
loot_generator.gd
signal_combat_decoupler.gd
stat_reduction_solver.gd
telegraphed_enemy.gd
threaded_inventory_loader.gd
typed_inventory_storage.gd

详细介绍

绝对不要做的事(专家级反模式)

战斗与成长
  • 绝不要在线性伤害缩放的基础上推进成长;必须使用指数曲线(例如 base * pow(1.15, level)),以维持力量幻想。
  • 绝不要让防御属性线性叠加至 100%;必须使用递减收益公式(例如 armor / (armor + 100.0)),以防止无敌。
  • 绝不要跳过受击恢复(硬直);必须在受到重击时加入短暂的硬直状态(0.2s - 0.5s),以避免战斗显得“飘忽”。
  • 绝不要向玩家隐藏关键属性;必须提供详细的角色面板,便于理论构筑(暴击率、抗性等)。
  • 绝不要让不同稀有度的战利品在视觉上毫无区别;必须用颜色编码的光束(紫色/金色)和不同的音效提示来区分。
  • 绝不要在 _process() 中计算命中判定框、击退或战斗移动;必须使用 _physics_process() 来获得确定性结果。
  • 绝不要对战斗阈值进行精确浮点数相等比较(==);必须使用 is_equal_approx()。
  • 绝不要在 AnimationTree Advance Condition 表达式中使用 !(NOT)运算符;必须使用明确的布尔值比较(is_walking == false)。
技术与架构
  • 绝不要将角色属性或大型库存存储为 Node;必须使用基于Resource 的数据容器,以降低内存开销。
  • 绝不要忘记对共享的 Resources 调用 duplicate();修改一只地精的属性绝不能影响其他所有实例。
  • 绝不要将战斗检测与特定类紧密耦合;必须使用鸭子类型(例如 if body.has_method(&"take_damage"))进行交互。
  • 绝不要依赖 UI SceneTree 作为库存的事实来源;必须将数据逻辑与可视化分开。
  • 绝不要每帧都重新计算属性;必须仅在装备变化或升级时触发重新计算。
  • 绝不要同步解析大型 RPG 存档文件;必须将繁重的解析工作交给 WorkerThreadPool。
  • 绝不要通过网络同步复杂的 Resource 类型;必须将变更序列化为基本类型的 Dictionaries 或 PackedByteArrays。
  • 绝不要通过让子节点耦合于父节点是否存在来管理角色状态;必须使用信号实现松散耦合(“信号向上传递,调用向下传递”)。
  • 绝不要在高频 AI 状态标识符中使用标准 Strings;必须使用 StringName 进行优化的哈希比较。
性能与 AI
  • 绝不要每秒实例化/销毁数百个对象(弹体、伤害文本);必须使用对象池。
  • 绝不要通过 free() 删除正在参与战斗的实体;必须使用 queue_free() 安全地延迟释放。
  • 绝不要在主线程中计算复杂的战利品掉落,或解析大型后期游戏库存;必须将繁重的随机数生成计算和数组遍历交给 WorkerThreadPool。
  • 绝不要用嵌套的 if/elif 代码块编写复杂的 Boss AI;必须使用模块化的 StateMachine 或模式匹配。
  • 绝不要遍历 SceneTree 来进行全局状态变更;必须使用信号组(call_group())。
  • 绝不要移动附加在动态角色上的 OccluderInstance3D 节点;这会导致 CPU BVH 重建卡顿。

专家组件(scripts/)

必须遵守:在决定是否要在此处编写 CombatController/RPGStats 教程之前,先阅读对应脚本。 不要加载同类型的其他游戏技能(平台游戏、赛车游戏等),也不要深入讲解完整的库存/能力系统,除非 Skill Chain 表格要求这样做——请专注于 ARPG 战斗、战利品与成长路径。

战斗与命中结算
属性与成长
AI / 动画 / 背包性能

核心循环

战斗 → 战利品 → 升级 → 提升战力 → 挑战更高难度的内容 → 重复

技能链

godot-project-foundations → godot-characterbody-2d → godot-combat-system → godot-rpg-stats → godot-inventory-system → godot-ability-system → godot-quest-system → godot-economy-system → godot-save-load-systems → godot-monte-carlo-balancer

决策树(不贴整段类代码)

问题决策脚本 / 关联项
近战 / 投射物接触在 _physics_process 中逐帧处理 Area 碰撞箱hitbox_component + duck_typed_hitbox
护甲叠加效果异常使用递减收益,而非线性百分比stat_reduction_solver
伤害数字导致卡顿池化标签damage_label_manager
共享的哥布林 HP 变动影响所有实例实例化时深度复制 Resourcesdeep/entity_stat_duplicator
Boss 中嵌套 if/elif 过多分层 FSM + 预警hierarchical_state_base + telegraphed_enemy
AoE 成本过高PhysicsServer 查询 / 分组aoe_physics_query / aoe_group_broadcaster
后期背包解析卡顿WorkerThreadPoolthreaded_inventory_loader
AnimationTree 状态来回切换显式布尔 Advance Conditionsanimation_condition_sync
完整战利品词缀 / 背包 UI此处不要重复讲解godot-inventory-system
快捷栏技能 / 法力此处不要重复讲解godot-ability-system
修正值叠加 / 曲线此处不要重复讲解godot-rpg-stats
架构概览(组合)

优先使用 Health/Hitbox 子组件(godot-composition),而不是继承 BaseEnemy。UI 通过信号观察;库存的 Resource 才是真实数据来源,绝不能以 HUD 树为准。

常见问题(简述)
  • 战斗手感轻飘 → 添加受击恢复/硬直。
  • 掉落物千篇一律 → 添加稀有度光束和音效(可以使用 RenderingServer 的实例参数)。
  • 战斗受帧率影响 → 仅在 _physics_process 中处理命中判定。

超出决策树范围,深入探讨战斗/掉落物/装备/区域缩放时,必须参阅:arpg-subsystems-deep.md。首次接入命中框和属性时,不要加载此文档——请使用上面的脚本。

高级 ARPG 元系统

1. 巅峰等级 / 无限成长资源

将等级上限后的力量存储在一个复制的 Resource 中;等级变更时发出 emit_changed();绝不修改缓存模板。

2. 基于着色器的掉落物光束

通过 RenderingServer.instance_geometry_set_shader_parameter 在共享着色器上设置稀有度颜色——避免大量 duplicate() 材质。

3. 基于属性快照的战斗日志

缓冲 Dictionary 快照;定期写入 user://(绝不写入 res://)。

参考

渐进式阅读: 仅在实现相应 API 时浏览官方文档(Resources、Area/物理查询、信号/组、AnimationTree、WorkerThreadPool、存档)。接入战斗、属性、库存、技能或平衡时,再打开相关技能文档——不要预先加载整个知识体系。

官方文档
  • 资源 — ARPG 属性、战利品词缀、升级表和装备模板应放在 Resource 资源中,这样设计师无需重写战斗代码,就能编辑 .tres 数据。
  • Resource — 生成实例时,始终对共享的属性/战利品模板执行 duplicate(true),避免一个哥布林的 HP 或物品栏变更改写所有实例的 .tres。
  • GDScript 导出变量 — @export / 类型化 Dictionary 可通过检查器调整伤害、抗性、经验曲线和装备槽位的数值,无需重新编译脚本即可平衡游戏。
  • 使用 Area2D — Hitbox/hurtbox 重叠信号是引擎中实时近战和投射物接触检测的基础。
  • 射线投射 — 直接的空间状态形状/射线查询可用于高实体数量场景下的范围伤害和直线检测,无需为每次爆炸生成一个 Node。
  • 空闲与物理处理 — 在 _physics_process 中处理 hitbox、击退、攻击预警和追击逻辑,以确保战斗在固定时间步长下具有确定性。
  • 使用信号 — 战斗日志、经验值授予、Boss 阶段和 HUD 伤害飘字应通过订阅信号实现,而不是直接引用战斗角色。
  • 群组 — 阵营仇恨和范围伤害应使用 call_group / call_group_flags,而不是每帧遍历 SceneTree。
  • 场景组织 — 遵循“信号向上传递,调用向下发起”:父节点/UI 观察战斗;管理器调用 hitbox 和状态节点——绝不要把 HUD 当作物品栏数据的权威来源。
  • 使用 AnimationTree — 使用显式布尔值同步攻击/移动 Advance Conditions(表达式中不要使用 !),确保连招和硬直状态可靠。
  • WorkerThreadPool — 在主线程之外解析大型后期游戏物品栏、战利品结果和存档数据,确保战斗保持 60 FPS。
  • 保存游戏 — 将等级、装备、技能等级和冷却结束时间戳与其他进度数据一同持久化——绝不要将运行时日志写入 res://。
相关技能
前置条件
  • godot-project-foundations — 在为 ARPG 添加战斗、物品栏和存档系统之前,必须先打好自动加载项、文件夹布局和输入/项目设置的基础。
  • godot-characterbody-2d — 玩家/敌人的移动和 move_and_slide 是受击恢复、追击和攻击前摇所依赖的移动基础。
  • godot-resource-data-patterns — 属性、词缀和升级曲线应优先使用 Resource;在设计由大量 Node 组成的角色面板之前,请先阅读此项。
  • godot-signal-architecture — 战斗总线、health_changed 和战利品拾取事件需要明确的信号归属,确保 UI/日志永远不掌握战斗数据的权威信息。
补充技能
  • godot-combat-system — 伤害流程、受击反应和目标选择会使用命中框/受伤框事件;本类型技能会将这些事件接入构建与战利品系统。
  • godot-rpg-stats — 指数伤害曲线、递减护甲和修正器叠加需要专门的属性/修正器层。
  • godot-inventory-system — 装备栏位、稀有度阶级和词缀随机结果位于独立于 SceneTree HUD 的库存数据中。
  • godot-ability-system — 冷却时间、法力消耗和技能树授予的技能可与战斗命中判定组合,用于热键栏 ARPG。
  • godot-composition — 对模块化 RPG 单位,优先使用 HealthComponent / HitboxComponent 子节点,而不是深层的 BaseEnemy 继承。
  • godot-state-machine-advanced — Boss 预警、硬直和施法/引导状态应归入分层 FSM,而非嵌套的 if/elif AI。
下游/使用方
  • godot-monte-carlo-balancer — 伤害曲线、战利品稀有度和技能消耗可调后,可通过蒙特卡洛配装模拟,在发布前验证 DPS/TTK 区间。
  • godot-quest-system — 击杀/收集/Boss 阶段目标会使用此类型循环所产生的相同战斗和库存事件。
  • godot-economy-system — 掉落稳定后,商贩定价以及资源消耗/产出循环会建立在战利品稀有度和制作系统之上。
  • godot-save-load-systems — 为支持长时间 ARPG 游戏流程,角色构筑、装备和技能等级必须能够通过持久化存档架构完整往返。
主技能
  • godot-master — 技能库路由器和镜像模块入口;用于查找同级技能,或在编辑 Domain Skill 后同步共享脚本镜像。

评论

支持 Markdown