← 迷途之梦 · 官方数据 开发笔记 · 章节扩展

《迷途之梦》v0.1 熟悉笔记 · 为后续章节开发做准备

写于实际通关一轮 + 通读全部源码之后。目的:把「现在有什么、东西都在哪、下一章要动哪里」一次说清楚。 引擎:Godot 4.5 stable(Forward+),源码目录 lost-dream/,可执行版 E:\godotgame\迷途之梦-未成品\迷途之梦.exe。

一、这是什么游戏

标题 → 现实层序章(卧室/失眠/吃药)→ 入梦白幕 → 教学关「热身」→ 第一章「鹿人店的一天」(三波训练)→ 记忆碎片(解锁重击)→ Boss「假面」→ 结束卡 → 回标题。


二、我实际玩到的内容(验证记录)

用窗口注入按键 + 游戏内置 --shots 逐帧截图的方式完整跑了一遍(挑出来的截图在 play/run/keep/):

阶段 看到的东西 结论
标题月亮、屋脊剪影、逐字浮现的「迷途之梦」、狐狸立绘、版本号正常
序章房间/窗/床/床头桌;日期卡「十月22日」数字乱码滚动;「E 吃下药片」;时间倒流到 7/1;白天/黑夜切换;逐字台词正常,日期动画和关键词高亮(「美美」)都在
入梦对话13 句空镜头对话(画面无角色),说完才「恍惚」一下把美美浮现正常
教学关练习一~五;木桩会举刀、有红色弧线预警;短按跳=矮跳五步都能真的判定到(我跑到过「练习五」),但二段跳这一步容易卡住(见问题 4)
三波训练影卒(近战突刺)/ 浮瞳(悬空弹幕)/ 奔角(蓄力冲锋+红色预警线)正常,波次标题和提示会覆盖显示
记忆碎片紫白光柱+菱形,靠近即拾取,解锁「重击」并弹提示正常
Boss 假面登场大字、底部血条、半血进二阶段(红眼+「二阶段」标签)、横扫/跃击地震/三连突进/扇形弹幕正常
破梦白幕聚光、只有角色是彩色、红色「破!梦!」大字、慢动作正常,效果很成立
死亡水面浮起(扭曲+去饱和)→ 床头桌/倒药瓶/散落药片一闪 → 沉回;右下角「第 N 次」正常
击败 Boss慢动作 → 白圈收拢 → 全屏白 → 渐灰 → 渐黑 → 结束卡正常
结束卡「梦到这里就断了。」「——垂直切片 · 完 ——」正常

用 --bot 自动操作完整打通了一轮(含死亡、二阶段、破梦、尾声),说明战斗链路是通的。


三、系统与数值(改数值先看这里)

操作

A/D 移动、空格 跳跃(空中再按=二段跳,短按矮跳)、J 轻击三段、K 重击、Shift/L 翻滚(空中=冲刺)、E 拔剑/互动、Esc 暂停、U 历史对话、Q 暂停菜单回标题。 输入映射在 autoload/game_state.gd:80-95(_setup_input),手柄也接了一部分。

玩家(actors/player.gd)

项 值 位置
血量5game_state.gd:9
移速 / 加速度430 / 3600player.gd:17-18
跳跃初速 / 重力−930 / 2500player.gd:22,25
翻滚0.34s,无敌帧 0.05–0.26s,速度 660player.gd:27-29
三段轻击1 / 1 / 2 伤,后摇可取消player.gd:37-41
重击3 伤、245px 前向、眩晕 1splayer.gd:44
破梦5 伤、360×260、全程无敌player.gd:42
斩惑6 伤、绕身 400 宽、0.3s 硬后摇player.gd:47-49
完美闪避翻滚无敌帧内被命中 → 0.32 倍慢动作,2.5s 出手窗口player.gd:505-543
大招冷却破梦/斩惑共用 10splayer.gd:354,368

敌人(actors/)

敌人 HP 行为
影卒 shadow_soldier.gd3走近 96px → 举刀 0.42s → 突刺 470
浮瞳 eye_floater.gd2保持 330px,悬浮,蓄力 0.5s 后单发弹幕
奔角 charger.gd4520px 内蓄力 0.7s → 900 速冲锋,撞墙硬直
木桩 practice_dummy.gd9999只挥刀不掉血,教学用
假面 mask_boss.gd26二阶段:半血(13)追加扇形 5 连弹;横扫/跃击地震/2–3 连突进

波次(scenes/arena.gd:12-28)

1. 影卒×2 2. 影卒×3 + 浮瞳×1 3. 奔角×2 + 浮瞳×1 + 影卒×1 → 记忆碎片 → Boss

存档(autoload/game_state.gd:182-293)

4 个槽 save1.json~save4.json,写在 exe 同级目录;字段:version/hp/shards/deaths/heavy/wave/time/stamp/chapter/progress。 老 save.json 会迁移到第 1 格。读档只从暂停菜单进(标题页没有「继续游戏」)。

UI

全部 draw_* 手绘:HUD(ui/hud.gd)血/碎片/连击/波次大字/提示/Boss 血条/破梦斩惑冷却/死亡计数;暂停菜单 ui/pause_layer.gd;存档面板 ui/save_panel.gd;历史对话 autoload/history.gd。


四、代码架构地图

autoload/   GameState  全局状态 + 输入映射 + 字体 + 存档 + 日志
            History    U 键历史对话面板
            Sfx        全程序化音效(20 路播放池 + 3 个外部 mp3 切段)
            Feel       顿帧 / 屏震 trauma / 慢动作(真实时间计时)
            Router     全屏淡入淡出
actors/     player     玩家状态机(IDLE/RUN/JUMP/FALL/ROLL/ATTACK/HURT/DEAD)
            sprite_rig 位图主角(靠缩放/倾斜/旋转做动作;剑单独画)
            fox_rig    程序化狐狸(备用,当前未用)
            enemy      敌人基类(重力/受击/眩晕/死亡/镜头夹取)
            shadow_soldier / eye_floater / charger / mask_boss / practice_dummy / projectile
fx/         slash_arc(刀光) hit_spark(粒子) after_image(残影) flash_light(闪白)
            break_text(破/梦 艺术字) memory_shard(碎片) death_interlude(死亡床头桌) tex_fx
scenes/     main       总流程与场景切换(标题/序章/教学/关卡/结束卡)
            title      标题
            prologue   现实层脚本剧(date/line/eat/rewind/day/night/forward/end)
            arena      第一章关卡(波次、碎片、Boss、死亡重入、暂停、存档接线)
            arena_bg   鹿人店背景(有图用图,没图程序化夜景)
            tutorial_flow 教学五步状态机
            dialogue   过场对话打字机
            end_card   结束卡
            bot_driver 自动操作(--bot)
ui/         hud / pause_layer / save_panel
tools/      key_out(抠图) sfx_probe sfx_test(音效试听)

数据流:main.gd 用 TitleScreen/Prologue/Arena/EndCard 这些「用代码 new 出来的 Node2D」切换屏幕(main.tscn 只有一个节点)。 Arena 负责一切:建世界/玩家/后处理/HUD/暂停/存档面板,然后按 WAVES 推进。 关卡结束靠信号 finished 往上传;死亡在 Arena 内部循环,不经过 main。


五、下一章要动的地方(按改动量从小到大)

1) 加一段剧情 / 改台词(不用碰逻辑)

2) 加一波怪 / 换怪物组合

WAVES 里加一项;_spawn_enemy()(arena.gd:405)加一个 kind 分支即可。位置 x 直接用世界坐标(地面 y=780)。

3) 加一个新敌人

继承 Enemy,实现 _think(delta)、_draw_body()、accent_color()、必要时 _contact_hit_active(); 在 _spawn_enemy 注册;HP/radius/body_top 在 _ready 里设。 注意 Enemy._keep_in_view() 会把怪夹在镜头里,别让它跑到屏幕外。

4) 加一个新 Boss

照 mask_boss.gd 抄:extends Enemy,自己写 _think 状态机 + take_hit 覆盖(Boss 不吃击退)。 注意 HUD 的 Boss 名字是写死的(ui/hud.gd:130「假 面」),多 Boss 必须参数化。

5) 加一整章(重点)

章节系统已经落地了(2026-10-24):

{id, title, save_label, bg, intro, waves, fragment_after, boss}。 Arena.chapter 决定读哪一条;波次、入梦对话、背景图、碎片位置全从数据里取,arena.gd 里已经没有硬编码的 WAVES。

6) 场景/美术

背景只有一张 assets/bg/lurenshop.webp(474×296 放大到 1920,arena_bg.gd 按图片 86% 处对齐地面线 y=780)。 换章=换图;缺图会自动退回程序化夜景。前景草、地面纹理都是代码画的,可以直接复用。 Boss/小怪全是程序化绘制,没有贴图,加新怪不用美术资源。

7) 音频

三个外部采样 assets/sfx/{swing,draw,hit_enemy}.mp3,切段参数在 autoload/sfx.gd:9-18 的 SAMPLE_CUTS。 其余音效(跳/落/翻滚/受伤/心跳/低吼/冲击波/UI…)都是启动时数学合成的,加新音效在 _build_bank() 里加一条。


六、试玩中发现的问题(建议在写新章节前顺手修)

【高】Boss 战里死亡,会重打上一波而不是 Boss —— 已修复(见第九节)

【中】死亡时正在播的波次/Boss 协程没有被作废 —— 已修复(见第九节)

_redream() 不递增 _run_token(只有 _restart_level 会),而 _start_wave / _spawn_boss / _on_fragment_picked 里都有 await(1.0s / 1.6s / 3.4s)。在 await 窗口里死掉,旧协程醒来还会继续刷怪,可能和重开后的内容叠在一起。

【中】可走范围比镜头宽,角色会贴到屏幕边缘被切 —— 已修复(见第九节)

【低】教学关「二段跳」容易卡住 —— 已改善:提示里写明「长按跳得更高」

【低】完美闪避后立刻按 J 可能被吃掉

完美闪避判定的瞬间玩家还在翻滚(翻滚 0.34s),而攻击输入缓冲只有 0.16s(player.gd:147)。如果完美闪避发生在翻滚前段,玩家本能地马上按 J,缓冲会在翻滚结束前过期 → 看起来「按了没反应」,要再按一次才出破梦。

【低】其它


七、给下一章的建议路线

1. 先做工程改造(半天量级):章节数据化 + 存档记录 chapter + 标题页继续 + 修 Boss 死亡重开 + 死亡令牌。这些不碰剧情,但后面每章都会受益。 2. 再做一块「可玩的第二章」:新背景图 → 新 WAVES(建议 2 波小怪 + 1 个精英)→ 新 Boss(换个招式表即可,程序化绘制)→ 关卡入口接到 main。 3. 最后补叙事:把 剧本-v1-待填.txt 里的新场景按「新增场景申请表」填好,我按编号接进 Dialogue/Prologue 那套演出。 4. 分支/结局:GameState.flags 已经是现成的字典,可以用 flags["choice_xxx"] 记选择,结尾按 flags 走不同 EndCard。


八、需要你拍板的问题

1. 第二章的场景是哪里?(鹿人店之后:梼杌的洞府 / 天庭 / 回忆里的某个地方?)要不要新背景图,还是先用鹿人店那张改色? 2. 第二章的玩法想加什么?纯战斗推进 / 加平台跳跃段 / 加潜行或追逐 / 加回忆插叙(可操作演出)? 3. 剧情节点先写还是先搭关?按你 剧本-v1 的节奏,我可以先把「第二章 · 场景 S-1」的空壳搭出来给你试玩。 4. 是否允许我改 arena.gd 的结构(章节数据化)?这会动到现有第一章的代码,但会保留现有手感和文案。


九、这一轮修掉的 bug(2026-10-24)

改动文件:scenes/arena.gd、actors/player.gd、scenes/tutorial_flow.gd、autoload/game_state.gd(攻略文案)、README.md、操作说明.txt、剧本-v1-待填.txt、文案-待修改.txt。

1. Boss 战死亡 → 满血重开 Boss(问题 1)

2. 死亡重入的协程竞态(问题 2)

3. 角色被镜头切边(问题 3)

4. 教学关介绍「长按跳更高」(你的第 4 点)

2026-10-24 第二轮:章节系统 + 第一章完过场 + 历史对话

5. 章节概念

6. 第一章完 · 梦醒过场(scenes/chapter_end.gd,台词来自 加对话.txt)

7. U 键历史对话

8. 说话人名字颜色 + 标题卡死修复

重新打包的 迷途之梦.pck 放在 play/build/(和你的 exe 同一版本导出),替换 E:\godotgame\迷途之梦-未成品\迷途之梦.pck 即可,exe 不用动。

*附:可直接运行的调试参数* -- --state=title|prologue|tutorial|arena|arena2|fragment|boss、--bot、--god、--tutskip、--shot=<绝对路径> --delay=秒、--shots=<前缀> --count=N --interval=秒、--slow、--sfxtest、--spottest、--savetest[=load]、--pausetest。 源码运行:E:\godot\Godot_v4.5-stable_win64.exe --path <lost-dream 目录>。