关于 msw-planning
msw-planning 可将 MSW 游戏构想整理为 GDD、路线图和分阶段构建计划。规划以 MSW 支持的游戏类型、地图类型和机制为依据,并跟踪里程碑进度与计划修订。
主要功能
- 01引导式游戏设计问答
- 02基于 MSW 目录制定计划
- 03创建 GDD 与里程碑路线图
- 04分阶段规划与进度跟踪
- 05计划修订与实施交接
适用场景
- 01将游戏构想转为首个可玩版本范围
- 02规划 MSW 游戏的里程碑阶段
- 03继续或修订已保存的游戏计划
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ msw-git/ msw-ai-coding-plugins-official --skill msw-planning安装后在 Claude Code 中输入/msw-planning确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/build-status-data.cjsmsw-decision-sheet.htmlreferences/build-management.mddecision-sheet.mdgdd-template.mdgenre-catalog.mdmsw-mapping.md详细介绍
MSW 新游戏规划模式(msw-planning)
用途
当用户处于“我想做一款这样的游戏”的阶段时,将想法转化为要构建什么 + 如何在 MSW 中构建:通过引导式会话产出一份GDD/路线图,然后此技能会引导分阶段构建——制定详细的阶段计划、跟踪进度并修订计划——直至每个里程碑的构建准备好进入完整实现阶段。不了解游戏设计的用户只需跟着问题回答;有经验的用户则可以借此快速记录决策。
核心原则(这样设计的原因)
- 以目录为依据:MSW 是 2D、使用 mLua(一种 Lua 扩展脚本语言)且支持跨平台,因此“可以构建什么”的范围是有限的。将模糊的想法对应到
references/genre-catalog.md中真实存在的游戏类型、地图类型和机制,以制定可行的计划。仅凭通用游戏知识进行规划,可能会设计出 MSW 无法实现的内容。 - 合理确定构建规模:目录为每种游戏类型提供了构建工作量提示(低 / 中 / 高)——这只是参考信号,不是最终结论(基准为 1–5 张地图、10–20 个单位/物品、基础到中级 mLua;塔防是最适合单人舒适开发的类型中工作量最高的)。用它设定预期,而不是拒绝某种游戏类型。首次构建的规模应根据**构建工作量 + 范围(地图/内容)**确定,绝不能依据日历或开发时间估算——此技能无法了解用户的技能水平或可投入时间,因此不会承诺“需要 N 天/周”。当用户的目标较大时(高工作量类型、系统/地图众多,或用户表示“我什么都想要”),不要一次性规划全部内容——将首次构建的范围缩小为一个小型可玩核心(MVP),其余内容留到后续阶段。这适用于任何游戏类型。
- 一次完成(避免反复拉扯)+ 一次方向确认:将用户需要参与的环节限制在步骤 1(批量提问)和步骤 3(方向确认)——中间不要反复追问。但编写 GDD 前绝不能跳过步骤 3(方向确认):不要只展示依据目录得出的结果就直接开始写 GDD。方向确认后,立即产出交付物。
- 标准化交付物:按照固定的 GDD 结构(
references/gdd-template.md)以 Markdown 形式记录结果,让实现技能能够接手并将其推进至 MVP。 - “以后再做”的唯一归属:GDD 只涵盖其自身里程碑。任何超出范围的内容——删减的功能、后续里程碑的想法,或讨论中途提出的“以后再做”请求——都要在出现时立即记录到现有的里程碑路线图(
Docs/<game>-Roadmap.md:时间已定时放入未来里程碑栏,时间未知时放入 Backlog),绝不放进 GDD。各有归属,互不重复:路线图负责当前里程碑以外的一切;GDD 负责当前里程碑范围内的一切。 - 推动项目继续前进:每份交付物完成后,先提出下一步建议(例如:“接下来要我编写 Phase 1 的详细计划吗?”)。用户愿意就继续,用户要求停止就停下——这是建议,不是催促。(这不同于在文档编写过程中无休止地反复确认;它负责衔接不同交付物之间的流程。)
- 决策关卡 = 可选选项,而非自由文本:在每个用户决策关卡——步骤 3 的方向确认、阶段交接(立即实现还是编写下一阶段计划)以及软性阶段关卡——都应在可用时通过 Agent 的多选 UI(例如 Claude Code 的
AskUserQuestion)提供结构化可选项,让用户点击选项,而不是输入自由文本。标明推荐选项,但不要强迫用户选择;如果 Agent 没有此类 UI,则改用清晰编号的文字选项。会影响设计的决策关卡还要打开网页决策页(步骤 5 Web 视图),让用户在选择前了解各个选项实际会构建什么。
启动时 — 检查是否存在 GDD(恢复 / 新建 / 受阻)
一次构建会跨越多个会话和里程碑 — 每个里程碑对应一个 GDD。文件位置(均在项目根目录下、RootDesk 之外,以便在 refresh_workspace 后保留):
- 当前 GDD + 阶段计划 →
Docs/。 Docs/<game>-Roadmap.md→ 游戏的常设里程碑路线图(愿景 · 发布标准 · 每个里程碑一个位置 · 待办事项):确定跨里程碑的方向,与 M1 GDD 一同创建,永久保留(从不归档)。它不是 GDD — 当前里程碑的约定仍保留在其-M<n>-GDD.md中。- 已完成的 GDD →
Archive/(里程碑完成时)。 Archive/As-built.md→ 世界的持续实现记录:由技能维护的精简当前状态图,作为 AI / 交接参考,而非面向用户的规划文档(通过references/build-management.md中的清理流程维护;通过下文的 既有项目 流程初始化)。
运行以下流程前,先检测计划文件 — 检查 Docs/ 和 Archive/ 两者中是否存在 <game>-M<n>-GDD.md:
- 列出这些目录的完整内容(首字母大写的
Docs//Archive/)— 获取目录级列表,返回其中的所有内容(例如,使用 Agent 的文件列表工具 /Glob和Docs/*)— 然后根据该列表自行匹配以-GDD.md/-Phase<N>.md结尾的名称。不要通过缩小范围的模式或内容搜索来检测(*-GDD.mdglob 或 grep 会区分大小写且范围脆弱:*.md只匹配顶层文件,docs/≠Docs/— 漏检会被悄悄当作“没有 GDD”),也不要凭记忆判断。 - 只有在
Docs/+Archive/的列表确实为空时,才能得出**“任何地方都没有 GDD”**的结论。 - 如果存在
Archive/As-built.md,先读取它以了解当前状态图;如果存在Docs/<game>-Roadmap.md,则一并读取以了解跨里程碑方向(切勿将其误认为当前 GDD)。 - 通常最多只有一个当前 GDD;如果存在多个,先询问用户当前讨论的是哪个游戏,然后再应用以下规则。
门控规则 — 只有 Docs/ 或 Archive/ 中存在计划时,“继续” / “下一个任务” / 恢复请求才生效(<game>-M<n>-GDD.md / <game>-M<n>-Phase<k>.md,或先前的里程碑 + Archive/As-built.md)。如果两处都不存在任何内容,不得将请求视为恢复,也不得自动启动 STEP 1 问卷 — 而应:如果请求表达了继续 / “接下来做什么”的意图,或者用户表示他们要在自己已有的工作基础上继续(而不是从全新模板开始),则转到下文的 既有项目 流程;否则(新游戏或意图不明确),告知用户没有保存的计划,并询问是否要开始一个新游戏(然后进入 STEP 1)。不要根据工作区文件推断这是既有项目 — 模板自带示例,因此工作区非空并不能证明之前已有工作。
如果存在 GDD,应根据 GDD / 阶段文档中的任务状态(⬜/🟡/✅)判断实际完成进度 — 不要根据工作区文件判断(模板自带 .mlua/.model/.ui 文件,因此文件存在与否并不能可靠反映进度)。然后选择相应分支:
- 用户明确要求继续/恢复 → 恢复(执行以下步骤),不受当前状态影响。
- 所有路线图和阶段项都是
⬜(计划尚无进展),且这是游戏的第一个里程碑——Archive/中没有同一<game>的 GDD,并且 GDD 的编号为M1。(在提出选项前检查这一点:存在已归档的先前里程碑,或当前 GDD 的编号为M2+,单凭这一点就能证明这个世界里已经有已构建的内容——零进展计划只是叠加在这些内容之上 → 属于下面的🟡/✅情况,不是这种情况。)→ 提供一个可选择的选项(参见核心原则):① 继续此计划([game]) / ② 放弃该计划并规划一款新游戏。如果用户选择放弃,先准确说明将删除哪些文件——Docs/<game>-M<n>-GDD.md、该游戏的Docs/<game>-M<n>-Phase<k>.md,以及该游戏的Docs/<game>-Roadmap.md(它与 M1 GDD 一同创建,因此会随之放弃——若将其留存,它会把已放弃游戏的方向带入下一次规划会话)——仅限这些文件——删除它们,然后从第 1 步重新开始。 - 任何项为
🟡或✅——或者 GDD 中所有项都是⬜,但该游戏存在先前里程碑(Archive/中有同一<game>的 GDD,或编号为M2+)——也就是说,这个世界中已经有正在进行或已构建的实现 → 不要在此处放弃计划,也不要规划新游戏。告知用户这个世界中已经有一个正在制作的原型;真正的新游戏必须在新世界中构建——此技能无法创建世界,因此用户需创建一个世界并在其中运行此技能——然后停止。(如果用户实际想继续当前游戏,则恢复即可。在Archive/As-built.md的基础上修改一个零进展的下一里程碑计划,属于计划修订——仍然是这款游戏,绝不是新游戏。) - 状态不明确时(缺少阶段文档、阶段文档不一致、进度含糊)→ 按
🟡/✅情况处理(不要放弃计划,也不要在其基础上构建)。 恢复现有计划:
- 先阅读现有文档——
Docs/<game>-M<n>-GDD.md(以及所有现存的Docs/<game>-M<n>-Phase<k>.md;由于较早的阶段可能在等待用户测试,因此可以同时存在多个阶段文档,而且它们的检查清单可能包含 §6 中尚未记录的状态;以及用于了解跨里程碑背景的Docs/<game>-Roadmap.md)。不要重新执行 STEP 1–4;计划已经存在。 - 重建状态:GDD 中的
Stage行,以及路线图中的⬜/🟡/✅;任何🟡 Implemented (untested)项目(将其标记为需要重新测试/用户确认);以及近期的§9 Plan changes。 - 如果恢复的工作会涉及实现或任何检查清单状态,现在就完整阅读
references/build-management.md(参见 STEP 6 下的硬性要求)——恢复工作是阅读链中最薄弱的一环,因为这些文档是之前的会话编写的。阅读文档时,也要更新过时的 AI 说明:如果Docs/中 GDD/Phase 文档的标题 AI 说明早于当前模板(例如,缺少references/gdd-template.md现在内置的构建管理指引),请在协调文档时将该说明行更新为当前模板文本;不要让旧文档继续引导未来会话走过时的阅读链。 - 简要重述当前进度——已完成事项/当前 Phase/仍待测试的事项/下一步,然后继续。
- 如果
Docs/中没有 GDD,但Archive/中有已完成的 GDD(以及Archive/As-built.md),则上一个里程碑已完成。请确认是否开始下一个里程碑——在Docs/中新建 GDD(<game>-M<n+1>-GDD.md,编号按 STEP 5 递增),以里程碑路线图中的下一个槽位(及其 Backlog)和Archive/As-built.md为基础进行规划——而不要擅自假定这是一个全新游戏。(编写前,先根据工作区核对记录——参见下文的开始下一个里程碑前先核对。编写新 GDD 会提升该路线图槽位:其中的一行主题会扩展为 GDD;路线图中仍只保留这一行。) - Phase 文档的生命周期:只有当某个 Phase 的所有条目都为
✅时,才删除该 Phase 文档(这是该阶段的清理工作);此后由 GDD 路线图记录该阶段。因此,Docs/中仍存在的文档包括当前 Phase,以及任何处于**⏳ user-test boundary**(条目仍为🟡,正在等待用户测试)的较早 Phase;多个文档同时存在是正常的。如果某个遗留文档的所有条目都已是✅,这是唯一表明遗漏了清理工作的情况。 Docs/文件是跨会话的事实来源:上一个会话的聊天上下文不会延续,因此任何未写入 GDD/Phase 文档的内容都会丢失(因此决策和状态都要记录在其中)。
Docs/ 和 Archive/ 中都没有 GDD → 在做任何其他事情之前,先对工作区分类,再作决定——这是强制要求,包括用户明确要求“新游戏”时:务必先检查这里已经构建了什么,绝不能直接跳到 STEP 1。(既有项目 = 继续用户自己已经构建的世界;这由用户驱动,绝不能仅凭文件存在就推断——但分类本身不是可选项。)如果确实已有成果,要明确指出;之后是否以及多大程度上提供既有项目选项,则根据用户的意图(见下文)决定,而不是根据工作区决定。
非空工作区并不代表这是棕地项目——新建模板本身就包含脚手架。将已知的初始项目视为零进展(已知集合,并不完整——模板版本会变化,其他模板也有所不同;这里列出的是“已知的脚手架内容”,并非完整清单):瓦片数据集 RectTileData_Henesys;@Logic 下的 UIPopup、UIToast;@Component 下的 Monster、MonsterAttack、PlayerAttack、PlayerHit;模板中的怪物 AI 状态机示例——StateComponent 脚本 StateChaseMonster / StateMoveMonster / StateTypeChase / StateTypeWander,条件脚本 ConditionHasTarget / ConditionIsAlive / ConditionIsDead / ConditionNoTarget,.stateset 文件 StateSetChaseMonsterAI / StateSetMoveMonsterAI,以及 Global/ 中的怪物模型 ChaseMonster / MoveMonster(它们都由模板提供,位于 RootDesk/MyDesk/ + Global/,并接入 *Template 地图——它们的存在不代表用户已构建怪物 AI);以及始终存在的 Global/ 默认内容——DefaultPlayer、WorldConfig、初始地图。
- 工作区 ≈ 只有初始项目内容(或更少) → 新建项目 → 继续执行 STEP 1,不询问是否为棕地项目。
- 工作内容明显超出初始项目(自定义命名的系统 / 地图 / 数据集 / 脚本表明已有实际实现)→ 可能正在开发一款游戏。是否突出提供棕地选项,由用户的意图决定,而不是工作区内容:
- 继续 /“接下来做什么”意图(“我接下来该做什么?”、“继续”、“我们做到哪了?”)→ 自然应理解为继续现有工作 → 将棕地作为推荐选项提供(同时提供:开始一款独立的新游戏;或仅重新检查 / 改进某个特定系统)。
- 明确的新游戏意图(“我想做一款新游戏”)→ 尊重这一意图:将新游戏设为默认 / 推荐选项。 仅将棕地作为最后一个、非推荐选项提供(“……或者你其实是想继续开发已经构建好的世界?”)——这是一个兜底选项,绝不推荐,也绝不能作为强制选项来取代用户的要求。
- 明确提出“在我现有的工作基础上继续构建” → 直接进入调查。 只有用户实际选择棕地项目时,才运行棕地流程。
选择棕地项目后,不要脱离实际情况进行规划——先做一次轻量结构调查(map/ + RootDesk/MyDesk/ ——系统 · 模型 · 数据集 · UI;只检查结构,不逐行阅读代码;深入检查由 msw-general 负责),然后展示*“这是我看到的已构建内容——对吗?”*,并要求⚠️confirm,接着填充 Archive/As-built.md,并在现有世界的基础上规划第一个里程碑(照常在该里程碑的 GDD 中创建里程碑路线图——STEP 5)。
规划下一个里程碑前先核对——在基于 Archive/ 记录规划新里程碑时(无论是启动时读取,还是刚完成一个里程碑后):Archive/As-built.md(或旧版交接说明)是起始参考,而非事实依据——其他会话中或手动编辑时可能已经有进展,却没有更新记录。编写新 GDD 前,执行与上文棕地流程相同的轻量结构调查,但目的是核实记录(而非从头发现):检查新里程碑涉及的区域,并快速扫描是否存在明显未记录的重要系统,对照记录中的描述。如果记录已经过时,先向用户说明并核对,更新 Archive/As-built.md 以符合实际情况,然后再基于现状规划。这样可避免基于过时前提编写整份 GDD,却直到实施中途才发现偏差。
流程
步骤 1 — 引导式提问(分批)
不要重复询问用户已经提供的信息;只针对尚缺的信息分批提问:
- 类型 / 参考作品 — 想要什么感觉?有没有类似的游戏?(如果不确定,可以先问“想要哪种乐趣?”)
- 核心乐趣 / 核心循环 — 一次游戏过程中会反复做什么?玩家的主要操作是什么(移动、攻击、收集、建造……)?(例如,击败敌人 → 成长 → 遭遇更强的敌人)
- 目标平台 · 游玩方式 — PC / 移动端?单人 / 多人?
- 范围(首个版本) — 快速原型还是更大型的项目?大致需要多少张地图 / 多少内容?
- 必备项 / 可删减项
将问题控制在约 5 个以内——询问计划实际需要的信息,但别把问题批次拉得太长(这是用户唯一一次集中参与的机会)。有两点需要注意:“必备项 / 可删减项”通常更适合作为 inputs 自由文本字段(例如“必须有 / 可以舍弃”输入框),而不是 multiSelect 问题——它是一份愿望清单,而非二选一;如果这一批的问题超过聊天选择器单次调用可处理的数量(通常是 4 个),请在用户回答第一批问题后,立即通过后续调用询问剩余问题——表单上的每个问题都必须实际问到(步骤 5 Web 视图)。如果用户说“你来决定”,就采用合理的默认设置,但要说明这些假设。也要在 Web 决策表中提出这些问题(步骤 5 Web 视图)——用户对此最不了解,因此“选择这个实际上会构建什么,又会推迟什么”最为重要;表单必须与这一批问题完全一致(聊天选择器之后可以一次引导用户回答一个问题——表单会为此提供每个问题对应的副本)。
步骤 2 — 基于目录核实方向 + 可行性检查
阅读 references/genre-catalog.md,并:
- 找出与用户想法最接近的类型。
- 提取该类型的推荐地图类型和核心机制标签。
- 提取该类型的
MVP:切片提示(最小可玩切片——作为缩小范围后的首个版本和步骤 4 阶段 1 的起点),以及Growth:发展方向(成熟核心通常会接下来加入什么——为后续阶段和未来里程碑提供参考)。根据用户的想法调整这些提示;它们只是参考,并非固定规格。 - 查看
build-effort工作量提示(Low / Medium / High),并评估用户的目标。如果工作量为 High,或用户一次提出了很多要求,请直言说明,并提议缩小首个版本的范围(一张地图 · 仅包含核心循环——从该类型的MVP:提示开始),保留相同的乐趣,其余内容安排到后续阶段或里程碑路线图中——不论游戏类型如何。 - 如有需要,挑选并组合机制标签,概括为一行创意描述。
步骤 3 —— 确认方向(用户确认关卡)⚑ 不要跳过
编写 GDD 前,务必先让用户确认方向。 简要展示依据分析结果,不要直接开始编写 GDD——类型和地图类型会决定整个方案;如果方向选错后写完了整份 GDD,就得全部重做。
简要介绍并询问用户:
- 推荐方向:匹配的 子类型(1–2 个候选)+ 推荐地图类型 ↔ Body(例如,RectTile +
KinematicbodyComponent)+ 构建工作量提示(低/中/高)+ 一句话概念。 - 如果工作量较高或用户的范围定得过大,同时提供一个缩小范围的首个构建版本(MVP)选项——保留相同的乐趣,但缩小首个阶段的内容,其余部分安排到后续阶段/里程碑路线图中。
- 然后询问,并将选项作为可选项列出(参见核心原则):"要我按这个方向编写 GDD 吗?还是你有其他候选方案/想做哪些调整?"
- 只有在用户确认(或选择)后才能进入步骤 4。(如果用户明确表示“由你决定”,就确定采用推荐方案,并用一句话说明你的选择。)
- 在此确定地图类型 ↔ Body(
references/msw-mapping.md)。选错会导致实现时出现“无法移动”/[LEA-3004]静默故障。设置时,应在已有此类型地图的情况下,基于该地图进行构建(例如,按类型提供的模板);否则由用户在 Maker 中设置。AI 绝不会自行更改地图类型(参见步骤 5)。
步骤 4 — 编写 GDD/路线图
按照用户在步骤 3 中确认的方向,按 references/gdd-template.md 的结构编写 Markdown:
一句话概念 / 关键决策表 / 核心循环 / 核心系统 / 系统↔MSW 映射 / Phase 路线图检查清单 / 按里程碑划分的决策。
- 对于系统↔MSW 映射,请使用
references/msw-mapping.md,将每个系统关联到@Logic/@Component/.model/.ui/数据集(UserDataSet)。 - 将路线图拆分为多个阶段,从最小可玩版本(Phase 1)开始,例如“移动、攻击,并摧毁目标”。匹配类型的
MVP:提示(步骤 2)是自然的 Phase 1 起点;其Growth:方向则可作为后续 Phase 的参考。每个路线图项目均使用三种状态进行跟踪——⬜ Not started/🟡 Implemented (untested)/✅ Tested(初始状态均为 ⬜;状态规则 →references/build-management.md)。 - 路线图检查清单只包含交接给完整实现团队所需的原型必备项目——并且所有项目都必须达到
✅。 润色 / 可有可无 / 后续工作应在规划时放入里程碑路线图(Docs/<game>-Roadmap.md— 未来里程碑条目或 Backlog),绝不能作为检查清单项目,也绝不能放在 GDD 的任何位置(参见 “后续工作”的唯一归属位置)。判断标准:移除它会让完整实现团队拿到的基础版本更不完整吗? → 必需(检查清单);制作过程中本来就会完善它吗? → 里程碑路线图。 - 对于数据量大的游戏,请在路线图中注明“数据驱动(UserDataSet/CSV 是事实来源)”。早期 Phase 可为提高速度而硬编码数值;但数值集增长或稳定后,应按时间范围规划从硬编码迁移到数据集(UserDataSet/CSV):在本里程碑内完成 → 作为 GDD §6 中后续 Phase 的任务;超出本里程碑 → 作为里程碑路线图条目(条目或 Backlog;§7 仅保留指针——只写在 GDD 正文中的意图会在 GDD 归档时被埋没),这样调整平衡/内容时就不再需要修改代码。仅在确有必要时纳入此项(有许多可调数值 · 预计需要反复调整平衡 · 内容规模会扩大),少量常量无需如此。数据集本身通过
msw-general编写(参见其references/dataset.md)。 - 保存 GDD 前进行覆盖检查:§6 的各个 Phase 合起来必须实现 §1 中的一句话概念(对于 M2+,还要实现已纳入计划的路线图条目);将这些内容声称具备的每项能力追溯到负责实现它的检查清单项目。没有对应项目的承诺就是规划漏洞,后续规则无法发现(未规划的任务不会留下
⬜)。验证限制不能缩小范围:AI 无法独自验证的流程(真实多人对局、设备上的操作手感、商业化)仍须规划为任务——它们最终只会标记为🟡 needs-user-test——绝不能因为无法自动验证就悄悄省略。如果用户同意排除某项已承诺的能力,则应改写 §1 / 路线图条目,让文档不再承诺该能力。 - 如果项目包含占位/示例实体:请加入一项任务,在原型移交给完整实现团队之前将它们移除,以免进入正式构建。范围 = 整个项目,而不只是选定的构建地图——项目中的任何地图都可能带有自己的示例(基于模板创建的地图通常如此;有些则没有),因此任务的完成标准是“检查并清理每一张地图”:先列出所有地图(完整的
map/目录列表),再逐一检查;扫描一张地图后确认无示例,不能作为其他地图也无示例的依据。不要假定名称固定——通过检查识别每张地图中的示例(通常是以*Template命名的待机/移动/追逐怪物示例,但名称因模板而异)。这些示例在早期可用作 AI 模式参考;实际删除应在实现期间由 MapBuilder 从.map中移除。未使用的模板地图也属于交接残留:移交时,询问用户是否删除或保留游戏未使用的每张模板地图(未经确认绝不删除)——并且应在清理示例之前做出决定(不要清理即将删除的地图);“每张地图都已清理”的要求仅适用于最终保留的地图。
步骤 5 — 保存 + 下一步
- 将生成的 Markdown 保存到项目根目录下的
Docs/,文件名为Docs/<game>-M<n>-GDD.md——<game>是简短的 ASCII(英文/罗马字)名称(绝不能使用原始非英文标题;CJK/非 ASCII 文件名会导致 glob 匹配和跨平台路径出错,例如MapleIdle-M1-GDD.md,而不是原始 CJK 标题),<n>是里程碑编号。里程碑编号:第一个里程碑是 M1;后续里程碑的编号为Docs/+Archive/中现有-M<n>-GDD.md的最高数值 + 1——解析数字,不要按字典序排序(因此 M9 → M10,而不是 M2)。文档内容保持用户使用的语言;只有文件名使用 ASCII。阶段文档沿用相同的<game>-M<n>-前缀(步骤 6)。将所有规划交付物(GDD · 阶段详细计划)收集到这里。若文件夹不存在,则创建它。将其保留为文件后,实现技能便可读取并推进到 MVP。 - ⚠️ 不要保存在
RootDesk/下。 Maker 的refresh_workspace会清理(删除)RootDesk/下非 MSW 文件(如 .md),因此在实现/游戏测试期间运行刷新时,这些文件会消失。始终将它们保存在 RootDesk 之外(项目根目录下的Docs/)。 - 创建 M1 GDD 时,同时创建里程碑路线图——
Docs/<game>-Roadmap.md(名称中不含M<n>;每个游戏一份;永久保留,绝不归档)。遵循references/gdd-template.md中的**“里程碑路线图模板”:一行愿景** + 发布标准(要满足什么条件才能称游戏可发布——写标准,而不是罗列功能)、每个里程碑占一栏(M1 = 指向当前 GDD;未来的 M = 一行主题 + 已分配的功能),以及一个用于收录想做但尚未分配项目的待办事项。将步骤 2–3 从首个版本中删去的所有内容(成长维度 · 精简掉的功能 · 用户提出的“以后再做”需求)整理到未来里程碑或待办事项中。根据游戏规模调整:只有一个里程碑的游戏,路线图只需几行(M1 = 发布)。后续里程碑(M2+)不要重新创建路线图——更新现有路线图(将对应栏位升级)。 - 网页视图——决策表单:该技能附带固定的 HTML 表单(
assets/msw-decision-sheet.html)以及打包脚本(assets/build-status-data.cjs),用于部署该表单并在本地提供服务。所有网页产物都放在Docs/web/下——绝不放在项目根目录或RootDesk/中。- 何时打开——会影响游戏方向的决策关口:步骤 1 的批量提问 · 步骤 3 的方向确认 · 核心决策分支(地图类型/模式/范围)· 里程碑待办事项审查。简单确认则不需要(例如轻量的阶段关口、“接下来要写阶段 1 吗?”)。
- ⚠️ 在编写
Docs/web/decision-data.json或运行打包脚本之前,请完整阅读references/decision-sheet.md——其中包含数据架构、如何在你的 Agent 中打开视图(应用内窗格或 OS 浏览器,按 shell 区分)、避免表单与聊天内容脱节的规则、预期的粘贴格式,以及故障状态。凭记忆创建决策关口,会导致两者脱节。 - 即使尚未阅读该文件,也必须遵守以下不变规则:HTML 表单和打包脚本都是固定资源——绝不编辑;
decision-data.json由你编写(每个决策关口都要重新生成,之后不得手动编辑,且绝不能将其读回作为规划输入——Markdown 始终是唯一事实来源);表单只负责说明和收集,因此答案始终在聊天中给出;如果浏览器无法打开,流程也绝不能因此受阻。 - 回答后关闭决策关口——收到并落实答案后,删除
Docs/web/decision-data.json,否则再次打开的表单可能会让用户对已决定的问题再次作答。
- 基础 GDD 完成后,先自然地提出建议:“接下来要写 阶段 1 详细计划吗?”→ 如果用户同意,直接进入步骤 6。
- 还可以提供其他分支:如果内容涉及大量数字/数据,则转向数据集设计;如果涉及大量屏幕,则使用
msw-ui-system编写 UI;如果要立即构建,则使用msw-general·msw-scripting开始实现。默认推荐流程是“细化阶段 1 → 实现”。 - 应用地图类型——如果存在匹配地图,则在该地图中构建,否则由用户设置:原型必须在
TileMapMode已与确定类型相同的地图中构建。设置时,使用MapBuilder.read().getTileMapMode()检查现有地图,然后:- 如果已有匹配的地图——例如项目为每种地图类型都保留模板地图(各有一个 TileMap / RectTile / SideView)——就在该地图中构建原型,无需切换(避免执行具有破坏性的切换)。仅当存在此类匹配地图/模板时,才适用此捷径。
- 如果没有匹配的地图——不存在每种类型对应的模板,或从零开始——则采用标准策略:由用户在 Maker 中切换地图类型(msw-general
tile.md;之后由 AI 使用getTileMapMode()验证)。 - 无论哪种情况,AI 都绝不自行切换地图的
TileMapMode。(如果在模板中构建,之后会按照清理规则移除其中的示例*Template实体。) - 如果构建地图是模板地图,则尽早重命名:若原型将放在名称中含
*Template的地图中,则规划一个阶段 1 任务,在正式开始构建前将其重命名为适合游戏的 ASCII 名称——随着各阶段推进,地图引用(区域注册 · 传送门 ·GetEntityByPath路径 · 当前地图)会逐渐增多,因此在阶段 1 重命名几乎不费力,交接时再改则代价很高;而让游戏保留在名称含*Template的地图中,也会干扰本技能自身所依赖的模板与游戏分类。完成标准:文件已重命名 + 所有引用均已更新 + 已刷新 + 已验证条目。具体操作属于实现技能的职责;如果某个引用位于只读配置(Global/)中,则该部分须由用户在 Maker 中操作——与切换TileMapMode的策略相同。 - 开始构建前,将当前地图切换到目标地图(无论上述哪种情况,都必须先确定目标地图):使用
maker_move_map将 Maker 的当前(已打开)地图切换到目标地图(AI 可执行),这样实体/图块编辑和截图才会落在正确的地图中。(这不是被禁止的TileMapMode切换。)不要悄悄跳过这一步——否则工作会针对错误的地图进行。
第 6 步 —(可选)按阶段制定详细计划
基础输出(第 4 步)包含完整路线图和各阶段检查清单。如果用户想要某个特定阶段的详细计划(例如“编写第 1 阶段的详细计划”“拆解阶段 1”),则生成一份额外的详细计划 Markdown 文档,更深入地展开该阶段的检查清单项目。
- 对于每项任务,写明:目标 · 所需系统/组件(
references/msw-mapping.md)· 数据(UserDataSet)· UI · 完成(验证)标准 · 依赖项 · 要参考的技能(预测 — 技能及其参考文档,references/msw-mapping.md§4)。此外,在阶段文档靠前位置记录一份 **“要参考的技能(本阶段)”**摘要,供实施会话首先阅读。 - 在任务旁生成状态检查清单 — 每项初始状态均为 Not started,并在工作推进时经过以下三种状态:
⬜ Not started— 尚未实现。🟡 Implemented (untested)— 已完成实现,尚未验证。✅ Tested— 已完成实现和验证。
- 遵循
references/gdd-template.md中的 “各阶段详细计划模板”。 - 保存为:
Docs/<game>-M<n>-Phase<k>.md(使用与里程碑 GDD 相同的<game>-M<n>-前缀 — 参见第 5 步;<k>= 阶段编号;保存于项目根目录下的Docs/,位于 RootDesk 之外 — 避免刷新时被删除)。 - 此步骤也只到详细规划为止 — 编写实际代码(.mlua/.model 等)仍由实施技能(msw-general/msw-scripting 等)负责;这些技能会在实现和验证过程中更新检查清单状态。
构建管理(实施期间的规则)→ references/build-management.md
执行计划的完整规则 — 任务状态处理、阶段/里程碑完成流程,以及开发期间的计划修订 — 请参阅 references/build-management.md。在实施计划任务、更新任何检查清单状态、完成阶段或里程碑,或应用计划修订之前,必须完整阅读该文档(纯规划会话无需阅读)。**硬性要求:如果你即将编辑任何 ⬜/🟡/✅ 标记、执行阶段/里程碑完成流程,或归档/删除计划文档,而本会话中尚未完整阅读 references/build-management.md,则必须停止并先阅读。**已加载此 SKILL.md(或在此前的会话中读过该参考文档)不能替代本次阅读。**以下不可妥协的约束在此重申,因为违反会破坏记录:
- 状态仅限
⬜/🟡/✅,并且必须在阶段文档中逐项立即更新 — 绝不能等到最后批量更新,不能只在临时工具中更新,也不能使用自创标记。 - 阶段完成和里程碑完成各自都必须执行清理流程(已完成阶段 · 里程碑完成:将状态同步到 GDD §6 → As-built → 路线图 → 删除/归档)。未执行清理流程,绝不能删除阶段文档或归档 GDD。完成情况以里程碑声明的愿景为准,而不只是检查清单 — 里程碑完成流程从愿景覆盖检查开始;如果剩余项目全部等待用户测试,则状态为
⏳ user-test pending,绝不能标记为“完成”,也不能自创标签。 - 计划变更请求必须遵循其中的修订流程;超出当前里程碑范围的工作应直接进入里程碑路线图 — 而故意留作存根/阻塞的代码路径,必须在写下时立即添加为跟踪项目。
边界(此技能不负责的内容)
- 此技能不编写实际代码(.mlua/.model/.map/.ui)——这是实现技能的工作。此技能负责规划和管理游戏在各个里程碑中的构建工作(GDD · 里程碑路线图 · 详细阶段计划 · 进度跟踪 · 计划修订),并将代码工作交给 msw-general/msw-scripting 等技能。
- 已构建并发布的世界若要进行重大改进或扩展,不在此技能的范围内(此技能负责规划游戏的构建——一款新游戏及其后续里程碑——直至具备全面实现的条件)。
- 在计划中体现 MSW 平台规则(地图类型↔Body、1 单位 = 100px、SpriteRUID 等),但具体实现规则请遵循 msw-general 的平台参考资料。
参考资料
references/genre-catalog.md— 3 种地图类型 · 构建工作量基准 · 71 种类型(构建工作量提示 · 推荐地图类型 · 核心机制 · 每种类型的MVP:/Growth:提示行)· 约 180 个机制标签。这是制定计划的核心依据——务必在步骤 2 中阅读。references/decision-sheet.md— Web 决策表:数据架构 · 如何通过各 Agent/命令行打开视图 · 表格↔聊天匹配规则 · 三种粘贴形式 · 失败状态。编写关卡的decision-data.json前,务必完整阅读(不打开关卡时无需阅读)。references/gdd-template.md— GDD 输出结构 + 里程碑路线图模板(步骤 5)+ 各阶段详细计划模板(步骤 6)+ 已构建内容日志模板。references/build-management.md— 实现阶段规则:任务状态处理 · 阶段/里程碑完成后的清理工作 · 计划修订流程。实现任务或更改清单状态前,务必完整阅读(纯规划时无需阅读)。references/msw-mapping.md— 地图类型↔Body 对照表 + 游戏系统 → MSW 组件/技能映射速查表。