关于 rpg
面向 RPG、JRPG 和动作 RPG 开发者的系统设计手册,将属性成长、物品、任务、对话与存档组织成相互关联的成长与选择循环,并指向实现各系统的相关技能。
主要功能
- 01设计属性、等级与经验曲线
- 02规划背包、装备与属性修正
- 03组织战斗、任务和对话系统
- 04整合存档、经济与成长门槛
- 05组合相关技能实现各项系统
适用场景
- 01设计升级曲线与伤害公式
- 02规划装备模型和背包系统
- 03构建任务状态机与奖励流程
- 04让对话选择影响后续任务或世界状态
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gamedev-skills/ awesome-gamedev-agent-skills --skill rpg安装后在 Claude Code 中输入/rpg确认已加载。
附带文件references/stats-combat-quests.md
详细介绍
RPG
一份角色扮演游戏指南,涵盖属性与成长、物品栏/装备、任务、对话和战斗。这是一项组合式技能:它将数据驱动的内容、对话与存档结合起来。它不会重新讲解这些基础功能,而是定义让成长与选择变得有意义的系统,并指出实现各系统的技能。
适用场景
- 构建 RPG/JRPG/动作 RPG:玩家拥有会成长的属性、物品栏、任务、对话和持久化进度时使用。
- 设计升级曲线、伤害公式、物品栏/装备模型或任务状态机时使用。
**不适用场景:**没有持久化角色的永久死亡地下城挑战 → roguelike。纯对话/分支剧情 → visual-novel。开放世界需求/制作/基地建设 → survival-crafting。对话引擎本身请使用 dialogue-systems。
核心循环
探索 → 遭遇(战斗 / 交谈 / 解谜)→ 获得奖励(经验值、战利品、剧情)→ 成长(升级、强化装备、解锁内容)→ 挑战更难的内容。 核心幻想是变得更强,并塑造角色的个性;每个系统都应推动这个成长与选择的循环。
必备系统
- 属性 + 升级 — 基础属性、衍生战斗属性、经验值曲线、升级收益。
- 物品栏 + 装备 — 由数据定义的物品、堆叠、装备栏位、属性修正。
- 战斗 — 回合制或动作战斗;伤害公式、状态效果、胜负判定。
- 任务 — 目标、状态机(可接取→进行中→已完成→已交付)、奖励。
- 对话 — 分支台词、基于游戏状态的条件、会产生影响的选择。
- 存档/读档 — 持久化角色、物品栏、任务进度、世界标记,并支持版本管理。
- 经济 + 进度门槛 — 金币/商店;通过等级/任务/区域限制战力。
- UI — HUD、物品栏、任务日志、对话框、角色属性面板。
设计参数
| 参数 | 影响 | 备注 |
|---|---|---|
| 经验值曲线形状 | 战力成长节奏 | 前期快、后期慢(见参考资料)。 |
| 属性→衍生属性的缩放 | 构筑多样性 | 不应让单一属性占据主导。 |
| 伤害公式 | 战术体验 | 减法减伤与比例减伤(见参考资料)。 |
| 随机浮动 / 暴击 | 结果波动 | ±10% 浮动和约 1.5× 暴击是稳妥的默认值。 |
| 掉落率 / 经济 | 奖励节奏 | 避免战利品让商店变得毫无意义。 |
| 战力门槛 | 难度限制 | 等级/区域/任务锁。 |
| 可逆修正 | 增益/装备的正确性 | 叠加修正层;绝不修改基础属性。 |
| 选择的后果 | 角色扮演分量 | 任务/对话标记应能分支改变结果。 |
模式
1. 从基础属性计算衍生属性(重新计算,绝不将其作为事实存储)
# Pseudocode. Base attributes are the only "truth"; combat stats are derived each time.
def derive(base, mods):
s = apply_modifiers(base, mods) # base + flat adds + percent, then clamp
return {
"max_hp": 20 + s["VIT"] * 8,
"attack": s["STR"] * 2,
"defense": s["VIT"] + s["AGI"] * 0.5,
}
# Equipping pushes a modifier; unequipping pops it. HP/attack recompute automatically.
2. 经验值曲线 + 升级
# Pseudocode. Quadratic curve: fast early levels, long late ones.
def xp_to_next(level, base=100): return base * level * level
def gain_xp(actor, amount):
actor.xp += amount
while actor.xp >= xp_to_next(actor.level):
actor.xp -= xp_to_next(actor.level)
actor.level += 1
actor.base["STR"] += 2; actor.base["VIT"] += 2 # grant gains / skill points
on_level_up(actor) # heal, unlock, notify
3. 由游戏事件驱动的任务目标更新
# Pseudocode. Game events advance matching objectives; completion grants rewards.
def on_event(kind, data):
for q in active_quests:
for obj in q.objectives:
if obj.event == kind and matches(obj, data) and not obj.done:
obj.count += 1
if obj.count >= obj.needed: obj.done = True
if all(o.done for o in q.objectives):
q.state = "complete" # turn-in grants xp/gold/items
常见陷阱 / 失败模式
- 为增益/装备修改基础属性 → 数值会漂移,并在存档/读档时损坏。保留修正层;通过添加/移除修正来调整(模式 1)。
- 将衍生属性作为事实存储 → 属性变化后会不同步。应从基础属性重新计算。
- 经验值/伤害数值失控 → 使用没有上限的指数曲线,或在数值极大时使用减法公式。应有意选择曲线和公式类型(见参考资料)。
- 将内容写成代码 → 每件物品/每个任务都硬编码。应将物品、敌人和任务定义为数据(
godot-resources/unity-scriptableobjects)。 - 存档格式没有版本字段 → 更新后旧存档会失效。从第一天起就添加
version和迁移路径(参见save-systems)。 - 选择没有后果 → 立即重新汇合的对话分支会显得空洞。设置标记,实际改变后续任务/世界状态。
- 任务进度没有持久化 → 读档后会丢失任务中途的状态。保存任务状态,而不只是完成状态。
组合(使用这些技能构建)
- 对话:
dialogue-systems(Yarn Spinner / Ink)——分支对话、条件、变量。 - 持久化:
save-systems——角色、库存、任务标记、世界状态、版本控制。 - 内容数据:
godot-resources/unity-scriptableobjects——将物品、敌人、任务、技能作为资源。 - 战斗 AI: 使用
game-ai实现敌人行为;回合顺序可复用roguelike中的调度器思路。 - UI: 使用
game-ui-ux设计 HUD/菜单布局、分辨率缩放,以及手柄/键盘导航;使用godot-ui-control实现具体的库存、任务日志、角色面板和对话框。 - 世界: 使用
level-design,以及引擎对应的 tilemap/3D 技能(godot-tilemap、godot-3d-essentials)。
参考资料
- 有关属性/伤害公式、升级曲线、回合制与行动制战斗时间线、库存/装备数据结构,以及任务状态模型,请阅读
references/stats-combat-quests.md。
评论
支持 Markdown