Files
NS_unknown_game/game/docs/planning/development_plan.md
T

842 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 横板 2D ACT 清版游戏开发计划
本文档用于规划基于 Frostbite2D-Engine 制作一款横板 2D ACT 清版游戏的开发路线。当前题材未确定,因此计划先围绕核心玩法、技术验证和内容管线推进,题材、美术风格和世界观在玩法原型稳定后再定。
## 1. 项目目标
### 1.1 游戏定位
- 类型:横板 2D ACT / 清版动作
- 视角:侧视角
- 核心体验:移动、跳跃、闪避、近战连段、技能释放、清理成组敌人、阶段推进
- 目标平台:Windows PC 优先,Nintendo Switch 可运行验证
- 引擎基础:项目内 Frostbite2D-Engine
### 1.2 第一阶段目标
先做一个可玩的垂直切片,而不是直接扩展完整游戏。
垂直切片应包含:
- 一个可控制角色
- 基础移动、跳跃、冲刺、攻击
- 至少 2 种敌人
- 一个小关卡
- 基础血量、受击、死亡、胜利条件
- 简单 UI
- PC 可运行 exe
- Switch 可运行 nro
### 1.3 长期目标
在垂直切片验证后,逐步扩展为完整清版 ACT:
- 多关卡流程
- 多种敌人和精英敌人
- Boss 战
- 角色成长或技能解锁
- 存档
- 音效、音乐、打击反馈
- PC / Switch 双平台发布构建
## 2. 开发原则
### 2.1 先玩法,后题材
题材未定时,不提前锁死美术和剧情。先用占位图和简单音效验证:
- 操作是否顺手
- 攻击距离是否舒服
- 敌人压力是否合理
- 受击、硬直、闪避是否清晰
- 清版节奏是否有爽感
### 2.2 小步快跑
每个阶段都要产出可运行版本。避免长期只写底层系统但没有可玩内容。
### 2.3 PC 优先,Switch 持续验证
PC 端开发效率高,主循环先在 PC 上跑通。Switch 每完成一个重要阶段就编译并运行一次,避免最后集中处理平台问题。
### 2.4 数据驱动
角色、敌人、攻击、关卡尽量用配置数据驱动,减少硬编码。
优先数据化:
- 角色基础参数
- 攻击判定框
- 敌人参数
- 掉落物
- 关卡对象
- 音效绑定
## 3. 技术基础阶段
### 3.1 编译链路确认
当前已经验证:
- Windows 静态库:`build/windows/x64/release/Frostbite2D.lib`
- Windows 测试 exe`build/windows/x64/release/Frostbite2DWindowsSmoke.exe`
- Switch 静态库:`build/switch/aarch64/release/libFrostbite2D.a`
- Switch 测试 nro`build/switch/aarch64/release/switch_smoke/Frostbite2D_smoke_meta.nro`
后续需要维护:
- `BUILD.md` 中的 PC / Switch 编译命令
- Windows DLL 复制流程
- Switch NACP / icon 打包流程
### 3.2 项目结构整理
建议后续把游戏项目和引擎分层:
```text
Frostbite2D-Engine/
├── Frostbite2D/ # 引擎源码
├── examples/ # smoke test
├── game/ # 游戏源码,后续新增
│ ├── src/
│ ├── include/
│ ├── assets/
│ └── docs/
├── BUILD.md
├── engine.lua
└── xmake.lua
```
第一版游戏可以先放在:
```text
game/src
game/assets
```
等项目变大后再拆分模块。
### 3.3 引擎能力检查
需要确认和补齐这些能力:
- 窗口和渲染初始化
- Sprite 渲染
- 动画播放
- 批量渲染
- 输入系统
- 场景管理
- 音频播放
- 资源读取
- 存档系统
- 碰撞检测
- 简单 UI
- PC / Switch 条件编译
其中碰撞、ACT 战斗、关卡对象系统可能需要在游戏层实现,必要时再下沉到引擎。
## 4. 玩法原型阶段
### 4.1 角色控制
目标:做出一个手感可调的主角。
功能:
- 左右移动
- 地面加速和减速
- 空中移动
- 跳跃
- 可变跳高
- 下落重力
- 落地检测
- 冲刺或闪避
- 面向方向切换
需要可调参数:
- 最大移动速度
- 地面加速度
- 地面摩擦
- 空中加速度
- 跳跃初速度
- 重力
- 最大下落速度
- 冲刺速度
- 冲刺时间
- 冲刺冷却
验收标准:
- 角色能在测试地形上稳定移动
- 跳跃不会穿地
- 手柄和键盘都能控制
- 参数可以快速修改
### 4.2 基础物理和碰撞
横板 ACT 不需要复杂真实物理,优先做稳定的盒体碰撞。
功能:
- AABB 碰撞盒
- 地面碰撞
- 墙体碰撞
- 单向平台,视需求后置
- 角色 hurtbox
- 攻击 hitbox
- 敌人 hurtbox
- 触发器区域
验收标准:
- 角色不会穿墙穿地
- 攻击命中能稳定检测
- 敌人和角色的受击框可以调试显示
### 4.3 基础攻击
目标:实现 ACT 清版的最小战斗闭环。
功能:
- 普通攻击 3 连段
- 攻击前摇、 active、后摇
- 攻击命中敌人
- 敌人扣血
- 命中停顿
- 简单击退
- 攻击期间限制移动
- 攻击取消规则,先简单实现
可调参数:
- 每段攻击伤害
- 每段攻击持续时间
- 攻击判定框位置
- 攻击判定框大小
- 击退距离
- 命中停顿帧数
- 连段输入缓冲时间
验收标准:
- 玩家能完成三段普通攻击
- 攻击判定可视化
- 敌人被击中有明显反馈
### 4.4 受击和生命
功能:
- 角色生命值
- 敌人生命值
- 受击硬直
- 无敌时间
- 死亡状态
- 击飞或击退
- 受击闪白
验收标准:
- 敌人能被打死
- 玩家能被敌人打死
- 受击反馈清晰
- 不会重复多次扣血,除非设计允许
## 5. 敌人系统阶段
### 5.1 敌人基础框架
敌人需要状态机:
- Idle
- Patrol
- Chase
- Attack
- Hitstun
- Knockback
- Dead
基础字段:
- 血量
- 移动速度
- 攻击力
- 视野范围
- 攻击范围
- 碰撞盒
- 受击盒
- 掉落表
### 5.2 第一种敌人:近战杂兵
行为:
- 玩家进入范围后接近
- 到达攻击范围后攻击
- 被攻击时硬直
- 死亡后消失
验收标准:
- 能追踪玩家
- 能攻击玩家
- 能被连段压制
### 5.3 第二种敌人:远程或盾兵
建议二选一:
- 远程兵:保持距离,发射投射物
- 盾兵:正面减伤,需要绕后或破防
目的:
- 让清版战斗不只是站桩连打
- 验证玩家移动、闪避、攻击选择
### 5.4 敌人生成器
功能:
- 关卡中放置敌人生成点
- 进入触发区域后生成一波敌人
- 当前波次清完后打开出口
- 支持多波次
验收标准:
- 一个房间能刷出 2 到 3 波敌人
- 清完敌人后进入下一段
## 6. 关卡系统阶段
### 6.1 测试关卡
先做一个灰盒关卡:
- 起点
- 平台
- 墙体
- 2 到 3 个战斗房间
- 终点
使用简单矩形和占位贴图即可。
### 6.2 摄像机
功能:
- 跟随玩家
- 平滑移动
- 限制在关卡边界内
- 战斗房间锁定,视需求实现
验收标准:
- 玩家移动时镜头稳定
- 不露出关卡外区域
- 战斗中镜头不乱晃
### 6.3 关卡数据格式
当前项目已经改为 `.map` 文本数据,由 `StageMapLoader` 读取:
```text
map stage_01
world 2105 720
camera 0 0 2105 720
player_spawn 1030 346
collision <x> <y> <w> <h>
layer <id> <role> <parallax>
rect_sprite_src <x> <y> <w> <h> <r> <g> <b> <a> <texture> <sx> <sy> <sw> <sh>
battle_zone <id> <trigger_x> <trigger_y> <trigger_w> <trigger_h> <camera_x> <camera_y> <camera_w> <camera_h>
```
当前已经有自定义网页地图编辑器,后续优先继续完善 `.map` 编辑和部署流程。
## 7. 动画和美术阶段
### 7.1 占位动画
先用简单色块或临时素材完成:
- Idle
- Run
- Jump
- Fall
- Dash
- Attack1
- Attack2
- Attack3
- Hit
- Death
敌人至少需要:
- Idle
- Move
- Attack
- Hit
- Death
### 7.2 动画事件
ACT 游戏需要动画事件:
- 第几帧开启攻击判定
- 第几帧关闭攻击判定
- 第几帧播放音效
- 第几帧允许连段输入
- 第几帧允许取消
建议设计一个简单事件表:
```json
{
"attack_1": {
"events": [
{ "frame": 3, "type": "hitbox_on", "id": "slash_1" },
{ "frame": 6, "type": "hitbox_off", "id": "slash_1" },
{ "frame": 8, "type": "combo_window_on" }
]
}
}
```
## 8. 战斗体验阶段
### 8.1 打击反馈
优先级很高。
需要实现:
- 命中停顿
- 角色/敌人闪白
- 屏幕轻微震动
- 击退
- 命中特效
- 命中音效
- 飘字,视风格决定
### 8.2 连段和技能
第一版:
- 轻攻击 3 连
- 重攻击 1 个
- 闪避
- 跳跃攻击
第二版:
- 上挑
- 空中追击
- 破防
- 特殊技能
- 能量条
### 8.3 战斗规则
需要明确:
- 玩家是否有精力条
- 闪避是否有无敌帧
- 敌人攻击是否可打断
- 是否有浮空
- 是否有倒地
- 是否有处决或终结技
- 是否有防御或格挡
建议垂直切片先不做太复杂:
- 闪避有短暂无敌
- 普通敌人可被打断
- 精英敌人部分攻击霸体
- Boss 攻击不可轻易打断
## 9. UI 和流程阶段
### 9.1 游戏内 UI
第一版:
- 玩家血条
- 敌人血条,精英和 Boss 显示
- 当前关卡目标
- 暂停菜单
第二版:
- 技能冷却
- 能量条
- 道具栏
- 伤害数字
### 9.2 菜单流程
最小流程:
- 启动
- 主菜单
- 开始游戏
- 暂停
- 继续
- 退出
- 游戏结束
## 10. 音频阶段
### 10.1 音效
优先实现:
- 普通攻击挥砍
- 命中
- 受击
- 跳跃
- 落地
- 闪避
- 敌人死亡
- UI 确认/取消
### 10.2 音乐
垂直切片:
- 一个关卡 BGM
- 一个战斗 BGM,视需求
- Boss BGM,后置
## 11. 存档和配置阶段
### 11.1 配置保存
需要保存:
- 分辨率
- 全屏
- 音量
- 键位
- 语言
### 11.2 游戏存档
垂直切片可先只保存:
- 当前关卡
- 玩家生命上限
- 已解锁技能
完整版本再扩展:
- 收集品
- 关卡进度
- 难度
- 游玩时间
## 12. 平台适配阶段
### 12.1 Windows
需要持续验证:
- Debug / Release 构建
- EXE 启动
- DLL 打包
- 窗口和全屏切换
- Xbox 手柄输入
- 中文路径兼容
### 12.2 Switch
需要持续验证:
- `.a` 静态库构建
- `.nro` 生成
- NACP / icon 元数据
- Ryujinx 启动
- 真机启动,后续条件允许再测
- 手柄输入
- 性能和内存
## 13. 工具和调试
### 13.1 调试显示
必须尽早做:
- 碰撞盒显示
- 攻击判定显示
- 敌人状态显示
- FPS 显示
- 当前场景名
- 玩家坐标
### 13.2 参数热重载
中期目标:
- 角色参数 JSON 热重载
- 敌人参数 JSON 热重载
- 攻击判定 JSON 热重载
这样能大幅提高调手感效率。
### 13.3 简单关卡编辑流程
初期可手写 JSON。
中期可选择:
- 接入 Tiled
- 写一个简单内部编辑器
- 使用 CSV / JSON + 调试可视化
## 14. 题材方向备选
题材暂不确定,但可以先保留几个方向:
### 14.1 现代都市异能
优点:
- 动作设计自由
- 敌人类型丰富
- 场景容易做成街道、地铁、工厂
风险:
- 美术需要统一风格
### 14.2 东方奇幻
优点:
- 武器、技能、怪物设计空间大
- 适合夸张打击效果
风险:
- 素材工作量较大
### 14.3 科幻废土
优点:
- 机械敌人、枪械、近战都能兼容
- 关卡可做工厂、飞船、遗迹
风险:
- 需要较强美术设定
### 14.4 暗黑童话
优点:
- 视觉记忆点强
- Boss 和敌人设计有特色
风险:
- 氛围和动作爽感需要平衡
题材决策建议放在第一版战斗原型完成之后。
## 15. 阶段里程碑
### Milestone 0:构建基线
状态:已基本完成。
内容:
- Windows 引擎库可编译
- Windows smoke exe 可运行
- Switch 引擎库可编译
- Switch smoke nro 可运行
- 编译文档完成
### Milestone 1:角色可控
目标:
- 游戏项目入口
- 主角可移动、跳跃、冲刺
- 测试地图
- 摄像机跟随
- PC 可运行
完成标准:
- 能在测试关卡里稳定跑跳
- 操作参数可调
### Milestone 2:战斗闭环
目标:
- 普通攻击 3 连
- 攻击判定
- 敌人受击
- 敌人死亡
- 玩家受击
完成标准:
- 可以打死敌人
- 敌人可以打死玩家
- 打击反馈初步成立
### Milestone 3:清版房间
目标:
- 关卡触发器
- 敌人波次
- 房间封锁和解锁
- 简单胜利条件
完成标准:
- 玩家进入房间后刷敌
- 清完敌人后进入下一段
### Milestone 4:垂直切片
目标:
- 一个完整小关卡
- 两种敌人
- 一个小 Boss 或精英敌人
- UI
- 音效
- PC exe
- Switch nro
完成标准:
- 从开始到结束可完整游玩
- 没有阻断流程的崩溃
- PC 和 Ryujinx 都能启动
### Milestone 5:题材确定
目标:
- 选定世界观
- 确定主角设定
- 确定敌人阵营
- 确定美术风格
- 确定第一章关卡主题
完成标准:
- 有一页核心设定文档
- 有主角和敌人参考图或风格板
- 不再使用完全抽象占位方向
### Milestone 6:内容扩展
目标:
- 3 到 5 个普通敌人
- 1 到 2 个 Boss
- 3 个以上关卡
- 技能成长
- 存档
完成标准:
- 游戏可玩 20 到 30 分钟
- 形成基本内容节奏
## 16. 近期任务清单
### 第 1 周
- 新增 `game` 目录和游戏 target
- 做 Windows 游戏入口
- 做 Switch 游戏入口
- 显示一个空场景
- 加载一张占位贴图
- 显示 FPS / 调试信息
### 第 2 周
- 实现玩家移动
- 实现跳跃
- 实现地面碰撞
- 实现摄像机跟随
- 搭建灰盒测试关卡
### 第 3 周
- 实现普通攻击
- 实现 hitbox / hurtbox
- 实现敌人基础类
- 实现第一种近战敌人
- 加入调试碰撞框显示
### 第 4 周
- 实现受击硬直
- 实现击退
- 实现生命和死亡
- 加入命中停顿
- 加入基础音效
- 做第一版战斗房间
## 17. 风险和注意事项
### 17.1 引擎仍在早期
当前引擎已经能编译 PC / Switch,但完整游戏开发中可能会继续暴露:
- 渲染接口平台差异
- 资源路径问题
- 音频格式兼容问题
- 输入差异
- 存档路径差异
需要每个里程碑都做 PC 和 Switch smoke 验证。
### 17.2 清版 ACT 对手感要求高
如果移动和攻击手感不好,后续内容越多越难改。前期要优先调:
- 移动速度
- 攻击前后摇
- 命中停顿
- 击退
- 敌人硬直
- 闪避无敌
### 17.3 美术工作量不可低估
横板 ACT 需要大量动画。题材确定前不要过早制作大量正式动画,先用占位素材验证。
### 17.4 Switch 性能要早测
清版游戏可能有大量敌人、特效和贴图。Switch 上要关注:
- 批量渲染是否稳定
- 贴图大小
- 同屏敌人数
- 粒子数量
- 音频内存
## 18. 下一步
最合理的下一步是创建真正的游戏 target:
- `Frostbite2DGame` Windows exe
- `Frostbite2DGame` Switch elf/nro
- `game/src/main.cpp`
- `game/assets/`
然后进入 Milestone 1:主角移动和测试地图。