This commit is contained in:
2026-04-27 22:50:18 +08:00
parent ded6f6ee2a
commit b6c6640548
77 changed files with 5240 additions and 833 deletions

View File

@@ -240,7 +240,7 @@ function buildNpcFirstContactOptionCatalog(
- 不能再用“某人看着你,像是在等你把话接下去”这类第三人称占位旁白充当可见对话历史首句,也不能在聊天 state 里本地硬编码一条替代台词。
- 当玩家在场景中第一次真正撞上角色型 NPC 并进入聊天时,应直接触发一轮由 NPC 主动开口的模型回复;这一轮只生成 NPC 自己的首句与后续可选回应,不得代替玩家补写未说过的话。
- 负好感或敌对关系不应跳过主动开口;如果玩家从 NPC 交互面板点击 `npc_chat`,且该角色尚未完成 `firstMeaningfulContactResolved`,仍要走同一条 NPC 主动开场链路。负好感只影响语气、敌对聊天指令与后续可选功能,不影响“由角色先发言”的首遇行为。
- 好感度小于 `0` 的角色在聊天终止时不进入 `story_continue_adventure` 收束态。无论是玩家主动退出聊天,还是模型通过敌对聊天指令主动结束聊天,底部选项都固定收束为 `npc_fight``battle_escape_breakout`:按钮文案分别为“战斗”“逃跑”。点击“战斗”进入 NPC 战斗结算链路;点击“逃跑”执行现有 `battle_escape_breakout` function完成脱离演出与后续状态更新
- 好感度小于 `0` 的角色在聊天终止时不进入 `story_continue_adventure` 收束态。无论是玩家主动退出聊天,还是模型通过敌对聊天指令主动结束聊天,底部选项都必须收束为一个 `npc_fight`多个 `battle_escape_breakout``npc_fight`按钮文案保持“战斗”,点击后仍进入 NPC 战斗结算链路;逃跑类选项按当前场景相邻场景展开为“逃往{场景名}”,并额外提供“逃回当前场景起点”。逃跑选项需要在 `runtimePayload` 中携带目标场景信息,点击后复用现有主角向左转身跑出屏幕的逃离演出,再在目标场景从左侧入场并面向右侧
4. 首遇状态下,不允许前两项直接变成:
- 深背景追问

View File

@@ -0,0 +1,68 @@
# 拼图运行时顶栏与通关演出调整设计
## 背景
现有拼图运行时存在 4 个体验问题:
1. 顶栏把 `PUZZLE``3*3 / 4*4` 这类系统标签直接暴露给玩家,主信息不够聚焦。
2. 拼图块右下角数字会破坏原图识别,影响拼图沉浸感。
3. 拼图运行时右上角缺少与 RPG 一致的设置入口,玩家不能在玩法内直接调整音量或处理中途退出。
4. 通关后立即弹结算弹窗,会打断玩家先看到完整成图的奖励时刻。
## 本次落地结论
### 1. 顶栏信息层级
拼图运行时顶栏统一改成三段结构:
1. 左侧保留返回按钮。
2. 中间居中展示关卡主信息:
- 第一行:拼图关卡名
- 第二行:作者昵称
- 第三行:`第 N 关`
3. 右侧新增设置按钮。
同时移除以下冗余标识:
1. `PUZZLE`
2. `3*3 / 4*4`
网格规模仍可作为运行时内部状态存在,但不默认写在 UI 顶栏中。
### 2. 拼图块显示规则
运行时单块右下角编号全部移除。
原因:
1. 玩家需要优先依赖画面主体、构图和色块识别位置。
2. 编号覆盖会削弱“完整图片被逐步复原”的视觉奖励。
### 3. 设置能力
拼图运行时右上角设置按钮对齐 RPG 玩法内设置入口,打开独立弹层,不在当前面板下方展开内容。
本次至少保留以下能力:
1. 音乐音量调节
2. 本局进度查看
3. 返回上一页
后续若 RPG 运行时设置继续扩展,拼图运行时应优先复用同类能力与交互层级。
### 4. 通关演出时序
拼图完成后不立即弹结算弹窗,统一按以下顺序执行:
1. 保持完整成图画面可见。
2. 播放一段从一个角扫到另一个角的对角线闪光特效。
3. 闪光特效结束后额外等待 `0.5s`
4. 再弹出结算弹窗。
这样可以先给玩家完整成图的视觉奖励,再进入排行榜与下一关决策。
## 工程约束
1. 继续复用现有 `PuzzleRuntimeShell` 作为运行时承载组件,不新增平行页面。
2. 设置弹层沿用现有像素风弹窗资源,不单独引入新的弹窗体系。
3. 通关演出只作为前端表现层时序,不改动通关判定与排行榜数据来源。

View File

@@ -15,7 +15,7 @@
5. 模型判定终止后,聊天面板不再继续提供聊天输入,只显示“继续”按钮,点击后沿用原流程继续生成冒险选项。
6. 点击“退出聊天”不再直接收起聊天页,也不立即进入剧情推理;它会发送一条结束聊天的玩家输入,对方回复后同样只显示“继续”按钮。
7. 正向 NPC 的退出聊天只是玩家主动收束,不代表模型强制中止,也不展示战斗/逃跑选项。
8. 对负好感或敌对 NPC在聊天终止后的后续流程仍沿用敌对出口:继续推进后回到原有战斗或逃跑选
8. 对负好感或敌对 NPC在聊天终止后的后续流程仍沿用敌对出口继续推进后展示一个“战斗”选项,以及按相邻场景和当前场景起点展开的多个逃跑选
9. 聊天候选中允许混入当前 NPC 可执行 function例如交易、送礼、请求帮助、招募、接任务、交任务、开战、离开等。
10. Function 候选进入聊天上下文时只作为可触发动作,不在 UI 中展示说明类文本。
11. “换一换”在聊天态可用,用于在不推进对话的情况下改排/轮换当前候选;它不调用后端,不改变聊天历史。
@@ -68,6 +68,14 @@
5. 相邻场景选项继续使用 `idle_travel_next_scene`,并在 `runtimePayload.targetSceneId` 中携带目标场景,后续点击沿用现有地图跳转结算。
6. 若没有场景幕数据,则继续使用当前可用选项作为兜底,不额外生成规则说明文案。
## 8. 补充规则:敌对聊天逃跑目标展开
1. 负好感或敌对 NPC 聊天终止后,`npc_fight` 只保留一个,按钮文案固定为“战斗”,原有 NPC 战斗交互与结算链路不变。
2. 原单一“逃跑”按钮改为多个 `battle_escape_breakout` 选项:当前场景每个相邻场景生成“逃往{场景名}”,并额外生成“逃回当前场景起点”。
3. 逃往相邻场景的选项在 `runtimePayload.targetSceneId` 中写入目标场景 id逃回起点的选项在 `runtimePayload.escapeReturnToSceneStart` 中写入 `true`,并保留当前场景 id 作为目标。
4. 点击任一逃跑类选项时,先复用现有主角向左转身跑出屏幕的逃离动画,再把运行态切到目标场景或当前场景起点,最后从左侧入场并面向右侧。
5. 逃跑类选项只负责运行态目标和表现,不重新请求剧情推理,也不把规则说明显示到 UI。
## 7. 验收
1. 负好感主 NPC 不再出现固定 `turnLimit: 5`