aa69c0e 误将构建生成物纳入版本控制,其中编辑器 ~ 前缀临时交换 DLL 会被运行中的
Godot 锁定,导致切分支/合并时反复冲突(本次合并即因它中断)。改为:
- .gitignore 新增 gdextension/**/~* 与 gdextension/**/*.obj.import 规则;
- git rm --cached 三个生成物(保留本地文件):
bin/~libspellforge_native...dll、src/*.obj.import ×2。
保留已构建的 debug .dll(bin/libspellforge_native...dll)——按原 .gitignore 注释
「开箱即用」的既定意图,其内容稳定、不引发反复冲突。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Spellforge(万法熔炉)
"Noita 遇上 Brotato" —— 快节奏割草 × 深度法术编程的 Roguelite 弹幕射击游戏
Godot 4.6 (Mono) · GDScript 热路径 + C# · SoA / ECS-Lite 架构
被困异次元的"土豆工匠",捡到的不是武器,而是逻辑碎片与弹头。你要像程序员一样**"编写"你的子弹**——用核心(法杖)、修正器、触发器和逻辑门,组装出毁天灭地的魔法武器,抵御无穷波次的怪物潮。
📛 命名说明:
Spellforge / 万法熔炉为当前候选名(project.godot中工程名仍暂为Rogue)。定稿后同步更新此处与application/config/name。
✨ 核心玩法:法术管道 (The Spell Pipeline)
武器由一个 核心 (Core) 和若干 法术节点 (Spell Node) 组成,四类节点自由排列组合,实现近乎图灵完备的武器逻辑:
| 类型 | 作用 | 示例 |
|---|---|---|
| ACTION 动作 | 实际产生的飞行物 | 魔法弹、黑洞、治疗雾、召唤炮台 |
| MODIFIER 修正 | 改变下一个动作 | 伤害+、弹道折射、多重施法、正弦轨迹 |
| TRIGGER 触发 | 逻辑传递(子母弹) | 击中触发、定时触发 |
| LOGIC 逻辑门 | 自动化灵魂 | IF_HP_LOW、IF_ENEMY_CLOSE、LOOP |
深度构建维度:
- 拓扑构建 —— Core 不只是列表,还有
LINEAR/MATRIX(邻接加成)/CIRCUIT(电路分叉)三种插槽拓扑 - 逻辑寄存器 —— 史诗核心提供跨帧持久寄存器,可搭出"蓄力计数器""击杀连击"
- 炼金共鸣 —— 特定元素法术相邻时自动质变合成(如
水属性波+闪电链→等离子风暴)
性能怪兽:得益于 SoA + Spatial Grid,支持同屏 1000+ 敌人、2000+ 独立弹幕,实测 500 敌人 + 1500 子弹下模拟+渲染仅 ~0.6ms(16.67ms 预算的 3.6%)。
🚀 快速上手
前置:Godot 4.6 .NET/Mono 版(工程使用 C#,需 .NET SDK)。
# 1. 用 Godot 4.6 Mono 打开工程
# 直接打开项目根目录的 project.godot
# 2. 首次打开会自动构建 C# 程序集(Rogue.sln)
# 3. 运行工程(F5)
# 主场景:res://scenes/ui/splash.tscn
# 流程:Splash → 主菜单 → 战斗 → 商店 → 结算 → 排行榜
🧰 技术栈与架构
- 引擎:Godot 4.6 (Mono),渲染 D3D12,物理 Jolt
- 架构:ECS-Lite —— ~35 个 Autoload 单例分层协作,EventBus + 整数
EventID常量解耦 - 数据布局:SoA(Structure of Arrays),
BulletManagerSTRIDE=12、EnemyManagerSTRIDE=8,配合对象池零 GC - 渲染:
MultiMeshInstance2D单批次绘制全部子弹/敌人,程序化着色器发光(shaders/) - 法术虚拟机:两阶段架构 ——
compile_wand()(装备/换牌时编译为CompiledDeck)+execute_compiled()(每次施法执行线性化节点) - 热路径:当前跑 GDScript;
csharp/下 C# 管理器(BulletManagerCs/EnemyManagerCs/SpatialGridCs)为骨架,供后续迁移
📂 项目结构
daihaoRogue/
├── project.godot 工程配置(Autoload 注册、编辑器插件)
├── scenes/
│ ├── ui/ splash / main_menu(启动与菜单)
│ └── main/ combat_s2(主战斗场景,唯一可玩入口)
├── scripts/
│ ├── autoloads/ 全局单例(EventID/EnemyManager/WaveManager…)
│ ├── core/ 基础数据结构
│ └── domain/
│ ├── spell_system/ 法术虚拟机(spell_evaluator.gd 等)
│ └── combat/ 游戏循环状态机
├── csharp/ C# 热路径管理器(骨架,含 .cs)
├── data/ ⭐ 纯数据驱动内容(JSON)
│ ├── spells.json cores.json enemies.json waves.json
│ └── balance.json resonance.json status_effects.json
├── shaders/ 子弹/敌人/地面网格程序化着色器
├── translations/ zh_CN / zh_TW / en / ja(.po)
├── assets/ 精灵 / UI 主题(目前几何占位)
├── addons/ 编辑器插件(见下)
├── docs/ 产品文档:设计 / 技术 / 机制 / 手册
└── docs_dev/ 开发过程 / 归档文档:开发计划 · 认证清单 · 早期草案
🎮 编辑器工具(零代码配置内容)
工程为策划/美术提供了 @tool 编辑器插件,所有游戏内容纯数据驱动(data/*.json),改内容无需碰代码:
| 插件 | 位置 | 功能 |
|---|---|---|
| 🎮 游戏设计器 | addons/game_designer/ · 底部面板 |
一站式:法术 / 敌人 / 波次 / Core / 平衡 / 共鸣 / 状态 共 7 个表单页(法术为字段化表单) |
| Godot MCP | addons/godot_mcp/ |
AI 辅助开发(截图 / 输入 / 场景检查服务) |
修改后需 F5 重启生效(内容在
_ready()时加载)。用法见docs/handbook/07_game_designer.md。
📖 文档导航
完整文档索引见 docs/README.md;开发/策划手册见 docs/handbook/。
| 分类 | 关键文档 |
|---|---|
| 游戏设计 | game_design.md · numerical_design.md · core_wand_design.md |
| 技术架构 | architecture_design.md · implementation_plan.md |
| 机制细节 | docs/mechanics/ —— 溯源 / 连锁 / 状态 / 召唤 / 环境场 |
| 开发计划 | development_plan.md(S0–S6 垂直切片) · certification_checklist.md —— 位于 docs_dev/(开发过程/归档文档) |
docs/README.md末尾附有 关键规范速查表(P6-N / ADR-*)*,是跨切片实现约束的权威来源。
🏗️ 开发状态
采用"骨架垂直切片" S0–S6 推进。当前主体流程已可完整游玩:
- ✅ 完整游戏外壳:Splash → 菜单 → 战斗 → 商店 → 结算 → Endless 排行榜,含存档(A/B 局内槽)、暂停、首启难度选择(FTUE)
- ✅ 核心战斗:法术虚拟机(LINEAR/MATRIX/CIRCUIT 三拓扑 + LOGIC + 共鸣 + 召唤/地面场)、20 波内容 + W8/W20 多阶段 Boss、精英寻路
- ✅ 系统:难度/音量/语言设置、4 语言本地化、程序化音效、MultiMesh 渲染 + 发光着色器、纯数据驱动 + 可视化编辑器
- 🚧 待完善:C# 热路径迁移(当前 GDScript)、正式美术/音频资源(现为几何占位 + 蜂鸣)、法术/Core/状态名的多语言化、Steam/Switch 平台认证项
详细进度与计划/代码差异见
docs_dev/development_plan.md。
📄 许可
尚未指定许可证(暂为私有工程)。如需开源发布,请在根目录添加 LICENSE 并在此说明。