Files
Genarrative/docs/【玩法创作】平台入口与玩法链路-2026-05-15.md
T

60 KiB
Raw Blame History

平台入口与玩法链路

更新时间:2026-05-15

平台创作入口

创作入口配置事实源在 SpacetimeDB,通过 GET /api/creation-entry/config 下发;后台通过 /admin/api/creation-entry/config 管理。前端只在展示层派生可见卡片和入口状态,api-server 路由熔断也使用同一份配置。不要恢复前端硬编码入口配置文件。

当前创作 Tab 只承载赛事 banner、玩法模板分类和两列模板卡;点击模板卡后直接进入对应玩法已有的入口创作表单 stage,不再经过空白占位页,也不把旧表单嵌进创作 Tab 首屏。移动端创作 Tab 顶栏在 陶泥儿 品牌同一行显示真实账户泥点数,数据来自 profileDashboard.walletBalance,不得再把活动奖池当作账号余额展示。首屏 banner 结构按参考图拆成横向可滑动赛事卡、主体宣传图文区、奖池胶囊、开始 / 结束时间条和卡片内分页点;轮播只保留 拼图主题创作赛抓大鹅主题创作赛,两个主题赛事奖池均为 1000 泥点数。玩法列表不再套外部边框卡片,移动端需要压缩横向边距和两列间距;玩法卡统一按“上图、左上状态标签(仅非开放态显示)、封面右下 10-20泥点数、下方白底标题/描述”结构展示,卡片高度保持紧凑但标题、描述和预估消耗点数都必须可见。创作 Tab 根容器不再使用 platform-page-stage 这类全局内容卡片壳,但继续保留 platform-remap-surface 作为主题和输入框样式命中钩子。创作首屏字号需要对齐平台普通 UI 档位:顶栏泥点组件、banner 正文、分类 Tab 和玩法卡标题 / 副标题 / 消耗说明优先使用 11px14px,不使用 text-lgtext-xl 或更大的展示级字号。草稿 Tab 继续承接作品架。RPG、RPG 之外的各玩法入口分别落到既有的 agent-workspacebig-fish-agent-workspacematch3d-agent-workspacesquare-hole-agent-workspacejump-hop-workspacewooden-fish-workspacepuzzle-agent-workspacebark-battle-workspacevisual-novel-agent-workspacebaby-object-match-workspace,这些入口继续承接各玩法自己的表单、草稿恢复和后续编排,不作为创作 Tab 首屏内容。

创作恢复参数只保留 sessionIdprofileIddraftIdworkId 这四个私有 query。它们只允许在同一条创作链路的结果页、生成页、工作台之间保留;切到首页、公开作品详情、runtime 或另一条玩法链路时必须清掉。生成页恢复时只认当前进入页的时间作为新的 startedAtMs,作品摘要里的 updatedAt 只用于排序与摘要展示,不再作为生成进度起点。

创作表单提交前的泥点余额前置校验只允许用独立弹窗提示失败原因,不得把用户退回创作入口或玩法模板列表,也不得清空当前表单状态。当前适用拼图、抓大鹅和汪汪声浪等会在前端提交前校验泥点的生成入口;余额不足、余额读取失败都应停留在当前工作台,由用户关闭提示后继续编辑或自行补足泥点。

平台入口、生成页、结果页、作品详情、作品架和运行态的跨流程错误统一收口到 PlatformErrorDialog。弹窗必须带明确错误来源,例如某个草稿、某次生成、作品详情或某个游玩实例,并提供复制按钮复制“错误来源 + 错误内容”。页面内不再重复渲染裸错误 banner;表单校验、发布确认弹窗里的局部业务错误可以保留在原弹窗内。

生成任务在用户离开生成页后异步完成时,平台壳层必须弹出 PlatformTaskCompletionDialog。完成弹窗同样要带来源,例如某个草稿或生成会话,并提供复制按钮复制“来源 + 状态”;如果用户仍停留在生成页并被自动带入结果页或试玩页,生成页 / 结果页本身即为完成反馈,不再额外叠加完成弹窗。

PlatformEntryFlowShellImpl.tsx 仍是平台入口编排壳,后续维护时应优先把独立 UI 片段、公开作品映射、草稿生成 notice 和运行态状态 helper 拆到 src/components/platform-entry/PlatformEntryFlowShellImpl/ 或同目录紧邻 helper 文件。拆分只允许改变文件组织,不改变入口配置事实源、默认导出、props、页面阶段、UI 文案或现有交互;其中拼图首访 onboarding 已拆为 PlatformEntryFlowShellImpl/PuzzleOnboardingView.tsx

platformEntryCreationTypes.ts 只做前端展示派生,分组时必须把后端 creationTypes 里的 categoryId / categoryLabel 当作可缺失字段处理,空值统一回退到 recent / 最近创作,避免旧数据、局部 mock 或异常返回把创作入口初始化直接打崩。

移动端底部一级导航是全局平台样式,不按单一玩法分叉。当前视觉统一为米白浮动胶囊底座、浅棕分隔线、棕色线性图标、橘色选中态和底部短下划线;中间 创作 入口保持凸起圆形主按钮,但凸起位移只能作用在按钮内容层,不能移动承载分隔线的 Tab 按钮容器,确保创作左右分隔线与其他分隔线垂直位置一致。Tab 名称和可见性仍由现有 PlatformHomeTab / 登录态规则决定,样式调整不得改写 Tab 文案或导航状态。

新增玩法创作工具平台 SOP

新增玩法默认采用表单/图片输入创作工作台,链路为:

创作入口 -> 工作台 -> 生成页 -> 结果页 -> 试玩 -> 发布 -> 运行态

默认工作台只提交结构化表单、图片槽位和配置 payload,不默认增加聊天输入区、流式消息区或轻输入 Agent。确需偏离该模式时,必须先在 PRD 和本文档写明例外原因、影响范围和回退方式,再进入编码。

单图资产编辑统一通过 CreativeImageInputPanel 承载上传、AI 重绘、参考图、历史图和删除确认;新玩法页面不得重复手写这些交互。系列素材图集生成统一走“批量规划 -> sheet 生图 -> 后端切图 -> 透明化 -> OSS 持久化 -> 状态回写 -> 局部重生成”流程,玩法只提供 sheetSpecslotSpecs、提示词和字段映射,不把任一玩法专属素材 DTO 当作平台通用模型。

通用系列素材图集能力的实现真相源在 platform-image::generated_asset_sheetsn 是必选参数,模块负责组装 n*n sheet prompt、按 n*n 切片、绿幕 / 近白底透明化、导出 PNG 和 OSS 持久化请求。api-server::generated_asset_sheets 只保留 AppError / AppState 适配,不再承载图像处理和 OSS 请求构造细节。物品名称 prompt 和特殊设定 prompt 是可选输入;调用方可传入类似“每个物品生成五个不同视图”的视角约束,通用模块会把 sheet prompt、物品行 prompt、特殊设定 prompt 编码写入 OSS 元数据。玩法仍负责计费、物品规划、slot 映射、失败回写和把通用切片结果映射回自己的草稿 / profile / runtime 字段。

当前所有玩法生成页 UI 统一收敛为圆环主视觉:media/create_bg_video.mp4 作为生成页固定全屏背景层循环静音播放,主进度圆环居中覆盖在背景之上,围绕陶泥儿视觉展示;页面只保留当前步骤名称和当前步骤进度,不再渲染步骤列表块。视频层需要显式触发播放,不能只依赖 autoPlay/loop/muted 属性。共用生成页 CustomWorldGenerationView 和汪汪声浪生成页都必须遵循这一口径。

草稿与作品架

  1. 草稿页作品卡对齐发现页列表卡风格:左侧信息,右侧封面图,移动端单列,桌面两到三列。
  2. 草稿页顶部 全部 / 草稿 / 已发布 筛选与发现页 推荐 / 今日 / 分类 / 排行 频道标签复用同一选中 / 未选中视觉,即 platform-mobile-home-channelplatform-mobile-home-channel--active,不再使用旧 platform-tab 胶囊样式。
  3. 草稿页与底部导航的未读提示点统一使用平台暖棕色点和暖棕光晕,不再使用红点或红色 glow;草稿 Tab 作品架卡片无论草稿 / 已发布都不外露作者信息;已发布作品卡右上角直接显示无边框分享 icon。删除等破坏性动作继续收口到左滑或长按操作层。
  4. 生成中作品在整卡上加等待遮罩,但不移除作品基础信息。
  5. 生成中状态不能只存在前端内存 notice。后端作品摘要必须下发可恢复的 generationStatus;前端刷新或退出产品后,作品架优先用摘要状态恢复等待遮罩,本轮内存 notice 只作为即时反馈。
  6. 点击 generationStatus=generating 的草稿卡必须恢复对应玩法的生成进度页,不能进入空白结果页或普通工作区;恢复生成页的 startedAtMs 使用进入生成页的当前时间,作品摘要 updatedAt 只用于排序和摘要展示,不参与假进度起算。
  7. 从草稿 Tab 作品架打开草稿工作区、生成页或结果页时,返回按钮必须回到草稿 Tab 的同一作品架语境;从创作 Tab 新建或直接进入创作链路时才回到创作 Tab。平台壳层需要显式记录本次创作流的返回来源,不能让结果页返回动作固定跳到创作入口。
  8. 私有 generated 图片必须通过 ResolvedAssetImage / /api/assets/read-url 换签读取。
  9. 敲木鱼作品架读取当前用户作品列表时走 GET /api/creation/wooden-fish/works;发布成功后平台壳必须同时刷新作品架与公开广场,避免作品刚发布时仍停留在旧列表。

发现 Tab、创作 Tab 与草稿 Tab 的页面根内容区不再套 platform-page-stage 外层全局卡片壳,让列表、筛选和玩法卡获得更宽的横向空间;推荐页和我的页仍按各自页面设计保留原有全局卡片口径。移动端“我的”页仍按顶部头像 / 昵称 / 陶泥号、会员横幅、三张统计卡、每日任务、五项常用功能宫格、设置入口和法律信息组织,不保留旧的底部“填邀请码”次级入口;每日任务卡必须读取 /api/profile/tasks 的当前任务摘要并在领取后同步刷新卡片进度。字号必须维持平台普通 UI 档位,不能因为窄屏把卡片标题、功能 label 或法律信息撑成展示级字号;最后一屏内容必须能在底部 dock 上方完整滚动露出,不得被固定底部导航遮挡。

RPG / 自定义世界

当前 RPG 创作入口使用 playId = rpg,工程域和运行态源类型沿用历史 custom-world。默认入口状态为 visible=trueopen=true,对外展示为“文字冒险”;airp 仍是独立的“AI RPG”占位入口,保持 open=false,不要把它当作当前 RPG 创作链路开放。

当前链路为:

创作入口 -> RPG Agent 共创工作台 -> 生成过程页 -> 结果页 -> 进入世界/试玩 -> 发布 -> RPG 运行态

RPG 是历史既有链路例外:当前仍使用对话式 Agent 共创工作台和 RPG 资产编辑器体系,不作为新增玩法默认模板复制。新增玩法继续遵循本文默认的表单/图片输入工作台、CreativeImageInputPanel 单图槽位和通用系列素材图集生成流程;如果要把 RPG 逐步迁回默认模式,应先补 PRD 和迁移方案,再改代码。

RPG API 仍沿用历史命名空间:/api/runtime/custom-world*/api/story/*/api/runtime/chat/*。这些路由在 api-server 入口熔断中统一映射到 rpg,只按 open 判断是否允许调用;visible 只控制创作页入口展示和作品架可见性。

RPG Agent 结果页点击发布或发布并进入世界时,必须先把结果页当前 profile 通过 sync_result_profile 保存回 custom_world_agent_session.draft_profile_json,再发送发布动作;发布动作前端契约只允许提交 { action: 'publish_world' }api-server 只补作者公开信息,不转发 profiledraftProfilelegacyResultProfilesettingTextspacetime-module 发布时只读取当前 session 的 draft_profile_json 作为草稿真相,从 settingTextcreatorIntent.rawSettingTextcreatorIntent.worldHookworldHookanchorContent.worldPromise(.hook)summaryname/title 依次派生正式 setting_text,最后才回退 seed_text。不要把 seed_text 当作唯一设定来源,旧会话可能为空。

Agent session 已进入 published 后,结果页按钮只能执行“进入世界”:前端需先通过 result-view 回读已发布 profile 并启动运行态,不得再次调用 sync_result_profile 或发送 { action: 'publish_world' }publish_world 只允许在 object_refiningvisual_refininglong_tail_reviewready_to_publish 等发布前阶段触发;否则会被后端阶段门槛拒绝。

legacyResultProfile 只作为历史结果页 profile 兼容兜底;编译正式 profile 时,session 草稿内已保存字段优先于 legacy 字段,legacy 只能补缺失字段。publish_world 不再接受前端临时传入的 legacy 载荷;历史兼容路径中 legacy 缺省或显式为 null 时等价于未提供,不得因此报 custom_world.compile.legacy_result_profile_json 不是合法 JSON object。真正的数组、字符串、数字等非 object legacy 载荷仍应拒绝。

RPG 结果页开局 CG 是 profile.openingCg 资产槽位:api-server 负责 VectorEngine / OSS 副作用并返回故事板和视频引用,前端只把结果写回当前 profile;sync_result_profile、作品库保存和 normalizeCustomWorldProfileRecord 都必须保留该槽位。封面是 profile.cover 资产槽位,默认封面也要保留 sourceType='default'characterRoleIds,不能因为没有 imageSrc 就当作空封面。若生成成功后画面短暂显示又变回空白,优先检查父层重新同步或 profile 归一化是否把 openingCg / cover 丢掉,而不是先怀疑已生成资源本身失效。

RPG 从作品架、广场详情或作品号搜索点击“启动”前,入口 client 必须把后端返回的完整 profile 先经过 normalizeCustomWorldProfileRecord,并用作品条目的 profileId/worldName/subtitle/summaryText 补齐旧数据缺失字段;运行态和详情页不得直接消费未归一化的旧 profile。作品架列表或 savedCustomWorldEntries 中的摘要 profile 只可用于卡片展示,不可在详情接口已回读完整 profile 后覆盖 selectedDetailEntry;若摘要缺少 playableNpcsstoryNpcslandmarksitemssceneChapterBlueprintscoveropeningCgskills[].actionPreviewConfiginitialItems[].iconSrcattributeSchema、角色 attributeProfile、场景残留或场景幕背景资产,启动和编辑必须继续使用详情 profile,否则会进入默认角色 / 默认 profile,或在编辑页丢 CG、封面、技能预览和初始物品图标。正式“进入世界”发布 / 回读结果页时,同一 profile.id 下也不得用字段更少的后端旧视图降级当前结果页完整 profile。角色选择页还需要在角色数组异常或为空时回退默认角色,并显示可返回的轻量空态,不能 return null 造成黑屏。运行态懒加载 fallback 必须可见,不能用纯 null 让用户误判为黑屏。

RPG 运行态的战斗终局、继续冒险、继续探索和切场景都属于服务端 runtime 快照真相:module-runtime-story 必须在终局战斗 action 后调用 post-battle finalization,持久写入 story_continue_adventuredeferredOptionsdeferredRuntimeState.storyEngineMemory.currentSceneActState 和清理后的战斗状态;idle_travel_next_scene / camp_travel_home_scene 必须由后端写入新的 currentScenePresetcurrentSceneActStatecurrentEncounterruntimeStats.scenesTraveled。前端只播放退场、进场和继续按钮表现,不能用默认 观察/试探/调息 fallback 或本地动画假装推进剧情。旧 bootstrap 快照可能只有 connectedSceneIds / forwardSceneId 而没有 connections,后端生成战后旅行选项时必须兼容这些字段。

RPG / 拼图等运行态存档仍以 /api/profile/save-archives 的后端列表为真相,恢复动作继续走对应恢复接口,但移动端“我的”页已经不再提供独立的 次级入口 > 存档 和设置入口存档按钮;“玩过”弹窗可以继续合并展示可继续存档,个人中心只保留设置、扫码和五项常用功能。移动端“我的”页的五项常用功能宫格只放泥点充值、邀请好友、兑换码、玩家社区、反馈与建议,避免把存档或填邀请码挤入主宫格破坏参考图布局。前端只展示 /api/profile/save-archives 返回的列表并在用户选择后调用对应恢复接口,不能本地拼装或筛选正式存档真相。

拼图

当前拼图链路:

创作入口 -> 图像/描述输入 -> 生成过程页 -> 结果页 -> 试玩 -> 发布 -> 运行态

当前口径:

  • 图像输入复用 CreativeImageInputPanel
  • 结果页每关画面编辑复用 CreativeImageInputPanel;入口页和关卡画面只共享受控 UI 模块,不共享数据源、状态、action 或存储位置:入口页继续写 formDraft 与草稿编译 payload,关卡画面写 levels[].pictureReference/pictureDescription 并触发 generate_puzzle_images。结果页删除独立“素材配置”Tab,不再提供单独 UI 背景生成入口。通用图片面板的展示图和 AI 重绘参考图能力必须分开控制:结果页正式关卡图只作为预览图,不因存在正式图自动暴露 AI 重绘开关;只有本地上传、历史选择或已保存 pictureReference 可作为重绘参考图时,才显示 AI 重绘开关并把状态带入 generate_puzzle_images。用户在本次编辑中上传或选择历史图后,该图优先占据主图卡片,可删除、切换 AI 重绘,也可关闭 AI 重绘直用;仅有正式图预览时,画面描述框仍可上传多张参考图。关卡详情弹窗应使用加宽面板,关卡名称、画面图和画面描述合并在同一个纵向列表中,名称输入和画面编辑模块外层不再包独立 platform-subpanel;画面图卡仍必须保留稳定最小高度,避免弹窗内 flex-1 布局坍缩后只剩标题、描述输入和操作按钮。
  • 支持画面描述生图、多参考图生图、上传或历史生成主图后 AI 重绘、上传或历史生成主图后不重绘;主链要求浏览器先经 /api/assets/direct-upload-tickets 直传 OSS 并确认 asset_object,创作 action 只提交 referenceImageAssetObjectId(s),由后端校验 owner / bucket / kind / MIME / size 后签发 OSS 只读 URL 并下载为 VectorEngine /v1/images/edits 的 multipart image part。本地上传 Data URL 与历史 /generated-* 图片路径仅保留为旧草稿、旧入口或未迁移客户端的兼容输入;关闭 AI 重绘时,后端统一解析为首关或当前关卡正式图后再持久化,不调用第一段拼图首图生成。
  • 草稿生成会先持久化 generationStatus=generating 的作品摘要,生成完成并回写关卡拼图画面、关卡画面参考图、UI spritesheet 和关卡背景图后再变为 ready;当前不自动生成背景音乐。生成页步骤推进必须跟随后端 session progressPercent 的真实里程碑:88 表示草稿编译完成并进入出图步骤,94 表示生成图已保存并进入 UI / 背景步骤,96 表示正式图与 UI 背景已确认并进入写入步骤,最终 action 成功或发布才进入完成态;每个步骤内部可以按实际等待时间使用假进度平滑推进,总进度按 0-8888-9494-9696-98 的真实里程碑区间平滑推进。任一同步 action 回包到达时立即以真实完成/失败结果冻结进度。
  • 作品架拼图草稿的“生成中”遮罩只表示初始草稿还没有可查看结果;只要作品摘要、首关封面或任一关卡候选图已经可用,后续 UI 背景重生成和追加关卡生图都必须作为结果页局部生成态处理,不能阻止打开草稿结果页。
  • 拼图草稿编译是长耗时 action,前端 action 请求默认等待 1_800_000ms(30 分钟)且不自动重试。每次图片生成调用的预期用时按 90 秒计算,但 生成拼图首图 单独按 4 分钟展示;完整 AI 重绘路径为 编译首关草稿 8 秒、生成关卡名称 10 秒、生成拼图首图 4 分钟、生成关卡画面 90 秒、生成UI与背景 90 秒、写入正式草稿 10 秒,合计约 448 秒。上传图且关闭 AI 重绘时必须跳过 生成拼图首图,直接进入 生成关卡画面生成UI与背景,合计约 208 秒。生成页恢复时必须使用进入生成页的当前时间作为原始 startedAtMs;失败/完成态用 finishedAtMs 冻结耗时。未收到对应后端里程碑前,后续步骤保持待处理;即使当前步骤预计时长耗尽,也只能让当前步骤内部进度停在 98% 内,不能自动完成当前步骤或跳到后续步骤。生成页每个步骤只展示标题和进度,不展示步骤详细描述。
  • 前端创作、结果页、生成页和错误提示不展示 GPT / Gemini 等具体模型名称;如需在内部保留模型路由,UI 只使用“标准模式”“创意模式”等产品化名称。
  • 若浏览器锁屏、息屏或网络切换导致 compile 请求失败,前端在标记失败前必须先复读 getPuzzleAgentSession(sessionId);只有最新 session 仍缺 draft.coverImageSrc、首关 coverImageSrc 或候选图时才展示失败,复读到已生成草稿时按成功收尾、刷新作品架并继续自动试玩/结果页链路。
  • 拼图参考图 AI 重绘走 VectorEngine /v1/images/edits;无参考图时走 /v1/images/generations。两者模型都使用 gpt-image-2,参考图由后端作为 multipart image part 传入编辑接口。
  • 每次新建关卡生成或重新生成关卡图都必须由 api-server 串起当前关卡资产包:AI 重绘开启时第一段沿用草稿生成第一关的拼图主图提示词配置和模型 / 尺寸 / 参考图规则生成 coverImageSrc/coverAssetId 作为关卡拼图画面和结果页预览图,提示词来源同样按显式画面描述、关卡画面描述、草稿摘要顺序回退,且固定要求输出画面比例为 1:1;上传图且关闭 AI 重绘时跳过这一段,把上传图或历史图持久化为 sourceType=uploaded 的正式候选。随后用正式候选图作为参考,9:16 生成完整拼图游戏关卡画面并写入 levelSceneImageSrc/levelSceneImageObjectKey,提示词必须要求道具按钮上不要显示次数标注,且返回按钮和设置按钮旁禁止标注文字;UI spritesheet 与关卡纯背景在关卡画面完成后并发生成,spritesheet 用 1:11k 先生成纯绿色绿幕背景图,后端上传 OSS 前必须把绿幕扣成透明 PNG,再写入 uiSpritesheetImageSrc/uiSpritesheetImageObjectKey,按钮顺序固定为返回、设置、下一关、提示、原图、冻结,按钮素材自身保留对应中文文字,返回和设置按钮不得额外生成白色外圈、白底圆环或浮雕外框;纯背景用 9:161k 写入 levelBackgroundImageSrc/levelBackgroundImageObjectKey,提示词必须包含“禁止在背景中出现人像或和拼图画面中主体一致的内容”。运行态不直接使用第二段完整关卡画面,但必须持久化它用于追踪和后续再生成。结果页局部关卡生成进度按 AI 重绘开启约 270 秒、关闭 AI 重绘约 180 秒展示。
  • 结果页允许多关卡并行编辑和生成;某一关卡图片生成完成回包只静默更新该关卡素材与生成态,不得自动打开或切换关卡详情面板,避免打断用户正在编辑的其它关卡。
  • 结果页关卡图片生成只标记对应关卡的局部生成进度,不禁用“新增关卡”、其它关卡详情编辑和结果页导航。
  • 结果页单关测试只能把完整草稿持久化,并通过 levelId 指定运行态起始关卡;不得把单关快照作为整份草稿调用 updatePuzzleWork,否则 source session 和作品 profile 的 levels 会被覆盖成单关,退出重进后其它关卡会丢失。
  • 拼图试玩和正式运行态刷新恢复不复用创作私有 query。进入 /runtime/puzzle 时必须写入 runtimeProfileId、草稿 runtimeSessionId、可选 runtimeLevelId、公开作品 workmode=draft|published;进入运行态的导航顺序必须先切到 /runtime/puzzle,再写这些 runtime query,避免被阶段导航清掉后刷新停在“正在进入拼图关卡”。
  • 结果页生成关卡图时若关卡名为空,前端必须传 shouldAutoNameLevel=true,后端复用首关命名契约先按画面描述生成关卡名,再在图片生成后用视觉命名结果精修,并把生成名和 UI 背景提示词随本次关卡快照写回。
  • 拼图运行态背景优先读取当前关卡 levelBackgroundImageSrc/levelBackgroundImageObjectKey,旧数据才兼容 uiBackgroundImageSrc/uiBackgroundImageObjectKey;本地试玩、直达指定关卡和正式 next-level 推进时,目标关卡缺关卡背景时必须继承同作品首个可用关卡背景,仍缺失时才沿用当前运行态快照背景或默认 UI。运行态按钮视觉优先读取当前关卡 uiSpritesheetImageSrc/uiSpritesheetImageObjectKey,先按透明 alpha 自动边界检测识别 spritesheet 中的独立按钮展示矩形,再按原图位置从左到右、从上到下映射到返回、设置、下一关、提示、原图、冻结;同一组件还要按较高 alpha 阈值派生紧致点击热区,透明留白和柔边低 alpha 区域尽量不响应点击。检测失败时回退旧固定六格裁切,缺失时才用现有图标按钮兜底。有 spritesheet 时,返回和设置按钮的点击容器只提供透明点击区,不再叠加默认白色圆形底;底部提示、原图、冻结三枚素材按检测矩形的原始宽高比显示,不能强行拉伸成正圆或铺满整列。底部道具区不再使用连片胶囊背景,提示、原图、冻结三个按钮均匀分布;运行态只展示按钮素材本身,不额外叠加“提示 / 原图 / 冻结”文字。
  • 推荐页本身不是登录门禁入口,未登录用户点击底部或侧边栏的推荐 Tab 应直接进入嵌入运行态,不主动打开登录弹窗。推荐页嵌入运行态必须按真实身份分流:已登录用户或本地已有 access token 时,启动拼图和后续排行榜 / 下一关等正式请求继续走账号 Bearer;只有确认为匿名访客时才申请并透传 runtime guest token。/api/runtime/puzzle/runs* 后端统一接受 RuntimePrincipal,可识别账号用户和匿名 runtime guest;推荐卡片的后台读写请求仍使用 local auth impact,避免单卡 401 清空整站登录态。创作、个人作品、删除、发布、Remix 等账号或所有权动作仍保持普通用户鉴权。
  • 拼图运行态棋盘不叠加分块蒙版、描边、阴影、选中底色或合并块 SVG 轮廓;拼图片本体需要裁切为圆角形状,单块使用独立圆角裁切,合并块使用 SVG 原生 clipPath 裁切整体外轮廓,外凸角和内凹角分别计算半径,内凹角半径要比外凸角更明显以避免手机 WebView 中看起来仍是直角。原图道具只在用户主动确认后打开独立原图查看层,不在当前拼图棋盘上叠加原图。
  • 拼图运行态拖拽必须完全跟随手指或鼠标位置,pointermove 期间即时写入可见拼块的 transform,不依赖等待后端回包、React 重渲染或下一帧动画队列;进入拖动后不展示拼块选中态或“已选择”提示,松手后再提交目标格同步规则真相。
  • 拼图运行态的提示、设置等点击弹层跟随当前运行态主色主题,使用普通圆角主题面板,不复用像素九宫格素材框。
  • 拼图运行态壳层自身要补齐 platform-ui-shell / platform-theme / platform-theme--light|dark,不能依赖外层平台壳来提供主题变量;/puzzle 直达页和平台内嵌页都必须渲染同一套主题语义类。
  • 拼图运行态顶部关卡信息采用游戏化铭牌样式:橘棕横向关卡名牌承载 第 N 关 和关卡名,左侧固定使用 media/logo.png 卡通形象;倒计时作为下挂米白小牌独立显示,紧贴铭牌但不遮挡棋盘。该样式只改变运行态 HUD 视觉,不改变计时、暂停、失败同步或关卡推进规则。
  • 拼图运行态进行中关卡的 elapsedMs 仍是结算字段,设置面板的“当前用时”必须按 startedAtMs、暂停累计和冻结累计实时派生;不要直接把进行中的 currentLevel.elapsedMs 当作展示值。
  • 推荐页嵌入拼图运行态时,通关结算弹层必须挂到页面级 fixed 浮层,不能留在推荐卡片视觉区内的 absolute 覆盖层;推荐页滑动卡片和运行态视口都使用 overflow: hidden,半屏内容区会裁剪排行榜、下一关按钮和相似作品卡。
  • 推荐页嵌入拼图运行态时,“下一关”应优先切到相似作品;如果当前推荐候选为空,才回退到同作品下一关,避免匿名推荐流在多关卡作品上持续停留在同一作品内。下一关请求 pending 期间必须保留当前 PuzzleRuntimeShell 和棋盘,不得把推荐卡整体切回 加载中... 占位态;局部同步状态由拼图运行态自己的 busy 表现承接。后端返回的新关卡属于其它作品时,前端必须同步 selectedPuzzleDetail、推荐页 puzzleGalleryEntries 缓存和 activeRecommendEntryKey,让底部作品信息、分享 / 点赞 / 改造和下一次“下一个”基准都指向新作品。
  • 推荐页里的拼图作品如果从运行态进入“改造”结果页,返回平台后要清掉推荐嵌入态的 activeRecommendEntryKey / activeRecommendRuntimeKind / isStartingRecommendEntry,再重新按推荐页自动启动逻辑进入作品,不能复用已经被清空的旧 puzzleRun
  • 拼图运行态允许前端低延迟交互表现,但通关、排行榜、奖励和作品状态仍以后端确认为准。

跳一跳

对外名称:跳一跳。工程域:jump-hop。PRD 见 docs/prd/【玩法创作】跳一跳俯视角玩法模板PRD-2026-05-19.md

首版定位为俯视角 / 等距视角 2D 休闲跳跃模板,链路对齐拼图的创作闭环:

创作入口 -> 模板输入 -> 生成过程页 -> 结果页 -> 试玩 -> 发布 -> 运行态

素材生成规则固定为:

  1. 初始草稿生成时,角色形象单独调用一次生图;
  2. 初始草稿生成时,地块单独调用一次生图,输出 3D 视图的 2D 图片图集;
  3. 跳一跳地块图集使用专用 2行*3列 六格布局,后端按 start / normal / target / finish / bonus / accent 顺序切分为透明 PNG
  4. 封面和分享图由角色图与地块图轻量合成,不再额外调用第三次生图;
  5. 显式重生成角色或地块时,只重生成对应资产槽位。

运行态规则真相必须沉到 module-jump-hop,前端只做蓄力表现、角色位移、投影和落地反馈。通关、失败、分数、combo、运行态快照和发布作品状态以后端为准。公开列表应走 jump_hop_gallery_card_view 订阅缓存,不要每次 HTTP 请求调用 procedure 组装全量列表。

平台首页推荐、精选、最新、公开详情、搜索、已玩作品和公开试玩统一按 sourceType='jump-hop'JH-* 公开作品号识别跳一跳作品;从公开详情或推荐流启动运行态时,若卡片摘要不足以携带角色图、地块图集和路径配置,必须先补读完整 work profile 再传入运行态。平台壳层必须同步注册 jump-hop-workspacejump-hop-generatingjump-hop-resultjump-hop-runtimejump-hop-gallery-detail 阶段,并在 appPageRoutes.ts 映射 /creation/jump-hop/workspace/creation/jump-hop/generating/creation/jump-hop/result/gallery/jump-hop/detail/runtime/jump-hop,同时持有 session、work、run、gallery、busy/error 与生成进度状态,避免只合入渲染分支但遗漏状态源或分享路径导致 typecheck 失败、刷新回首页。

跳一跳作品架走创作中心的统一作品列表:前端通过 /api/creation/jump-hop/works 拉取作品摘要,草稿态会与 pending notice 合并后显示在作品架里,已发布作品点击后会先按 profileId 读取完整详情再进入详情或运行态。生成中作品仍以后端摘要里的 generationStatus 为准,刷新后应能恢复等待遮罩,不能只依赖内存 notice。

删除等破坏性动作当前未接入 jump-hop 删除 API;如果后续要在作品架提供删除入口,必须先补齐后端/SpacetimeDB/前端整条删除链路,再开放按钮。

推荐页匿名游玩不再限定为跳一跳。移动端一级 推荐 Tab 是内嵌运行态刷卡流,会自动选择推荐作品并启动对应玩法;桌面端首页不启动这套移动推荐运行态,而是渲染桌面发现壳,展示 今日游戏推荐作品分类 等桌面内容。断点事实统一走 platformEntryResponsive.tsusePlatformDesktopLayout(),平台壳和首页视图必须共用同一个判断,避免桌面发现页与移动推荐页同时挂载、重复触发请求或启动运行态。推荐页嵌入运行态启动时按真实身份分流:已登录用户或本地已有 access token 时继续使用账号 Bearer,但请求选项必须是 local auth impact,避免单卡 401 清空整站登录态;只有确认为匿名访客时才申请短期 Runtime Guest Token,并只把它作为局部请求头传给运行态客户端,不写入全局登录态、不触发 refresh,也不把匿名流量伪装成普通用户。当前覆盖矩阵为:跳一跳、视觉小说、抓大鹅 Match3D、方洞挑战、拼图、敲木鱼、大鱼吃小鱼、汪汪声浪。每个模板的启动请求、推荐页内后续运行态动作以及需要上报的 play/finish/leaderboard/next-level 类请求,都必须继续按该身份分流;公开读取入口仍可匿名读取,创作、个人作品、删除、发布、Remix 等账号/所有权动作仍保持普通用户鉴权。

敲木鱼

对外名称:敲木鱼。工程域:wooden-fish。PRD 见 docs/prd/【玩法创作】敲木鱼玩法模板PRD-2026-05-20.md

首版定位为单屏点击解压模板,链路对齐拼图的创作闭环:

创作入口 -> 工作台 -> 生成过程页 -> 结果页 -> 试玩 -> 发布 -> 运行态

创作输入固定为:

  1. 敲什么:敲击物单图资产槽位。默认模板使用内置透明 PNG /wooden-fish/default-hit-object.png 作为 bundled-default 敲击物资产,避免默认关键词被重新语义化改形;用户输入自定义关键词或上传参考图时,后端必须以默认木鱼图作为基础结构和画风参考,使用 image2 生成最终敲击物图案,上传图只作为新主题参考,不直接进入运行态。自定义 compile-draft / regenerate-hit-object 必须完成 image2 -> OSS 私有对象 -> asset object 登记和绑定后,再由 api-server 注入真实 hitObjectAsset.imageSrc,不能只写 /generated-wooden-fish-assets/... 占位路径,也不能接受前端请求自带的 hitObjectAsset 短路生成。
  2. 敲击音效:音频资产槽位,当前创作阶段只支持用户上传或麦克风录制;未提供音频时统一写回内置默认木鱼音 /wooden-fish/default-hit-sound.mp3。提示词生成音效入口临时关闭,通用 /api/creation/audio/sound-effect 对木鱼 hit_sound 目标也返回 410 GonehitSoundPrompt 只作为历史兼容字段保留,不参与当前创作流程,也不得由 spacetime-client 合成假音频路径。
  3. 功德有什么:最多 8 条飘字,创作态首屏只保留一个默认词条 幸运,其下提供加号格继续追加词条;创作态只保存词条名,运行态飘字展示时再追加 +1。运行态顶部总数卡采用品牌化徽标样式,子项计数器预置展示在可展开面板中,未出现词条初始值为 0。
  4. 作品标题 / 作品简介 / 主题标签:不再放在创作工作台首屏,改为生成草稿后的结果页补录区,提交试玩或发布前必须先写回当前作品信息。主题标签编辑样式对齐拼图结果页的胶囊标签编辑器。

图片生成链路固定为三图 image2 流程:第一步用默认木鱼图作为结构和画风参考,按用户题材关键词或参考图主题生成 1:1 绿色背景主体图(纯绿色绿幕),prompt 必须显式要求背景为单一纯绿色 #00FF00 且平整无纹理、无渐变、无阴影、无道具,主体完整居中,且禁止黑底、白底、棋盘格和任何实底背景;后端在落库前只对这张绿幕主体图执行去绿背景处理,不做泛抠图,避免误伤玉米等主体像素。第二步必须使用第一步抠图完成后的透明图作为参考图,再用新敲击物作为主题和画风参考生成 9:16 背景环境图,背景图只适配主题和画风,不能包含新敲击物本体,也不能增加木槌互动物品;画面中央主体预留区必须干净,中央 40% 区域禁止出现主题主体、主体局部特写、轮廓影子或重复元素,主题元素只能作为外围氛围。第三步必须使用去绿后的敲击物主体图和背景环境图作为参考图生成 1:1 返回按钮图,返回按钮必须始终是标准圆形,主体视觉尺寸比当前模板再放大约 50%,圆形外沿必须有与主题色搭配的干净外描边,中央只保留单个左箭头,参考图只约束圆形底色和箭头配色,不得延伸到复杂造型和花纹;按钮不得出现文字、数字、水印、额外 UI 面板或木槌物品。三个资产分别写回 hitObjectAssetbackgroundAssetbackButtonAsset,并绑定到 wooden_fish_workhit_object / background / back_button 槽位。运行态和结果页消费 backgroundAsset 做竖屏背景,中央再叠加 hitObjectAsset,左上角返回按钮消费 backButtonAsset

木鱼初始 compile-draft 是长耗时同步 action,生成页必须按上述三图 image2 链路展示进度:整理草稿、生成敲击物、生成背景环境图、生成返回按钮图、写入正式草稿。本地或供应商慢时一次 action 可能持续数分钟;前端不得把已关闭的提示词生成音效当成进度阶段,也不得在未收到 action 回包前宣称生成完成。

运行态规则真相以后端 run 摘要为准,前端只做点击低延迟表现、敲击动画、音频播放和飘字渲染。每次非功能区点击在当前 run 内累计 totalTapCountwordCounters;计数不进入账号长期账本,不做排行榜。顶部总数卡点击后展开子项计数器面板,子项计数在面板中按词条纵列预置展示,未出现词条初始值为 0,后续同词条继续累加;运行态左上角使用主题化返回按钮图,不提供右上角重开按钮。

平台首页推荐、精选、最新、公开详情、搜索、已玩作品和公开试玩统一按 sourceType='wooden-fish'WF-* 公开作品号识别敲木鱼作品;公开列表应走 wooden_fish_gallery_card_view 订阅缓存,公开详情或运行态启动时卡片摘要不足则补读完整 work profile。

抓大鹅 Match3D

对外名称:抓大鹅。工程域:match3d

入口表单只展示:

  • 题材主题。
  • 难度:轻松、标准、进阶、硬核。

入口不再要求用户选择素材风格;历史草稿和旧接口中的 assetStyleId / assetStyleLabel / assetStylePrompt 仅作为兼容字段保留,新入口提交不再写入这些字段。

难度映射:

难度 clearCount difficulty 总物品数 物品种类
轻松 8 2 24 3
标准 12 4 36 9
进阶 16 6 48 15
硬核 21 8 63 20

当前素材生成流水线:

  1. 点击生成前弹出泥点确认,草稿生成固定消耗 10 泥点。
  2. 先写入可恢复草稿 profile,再执行文本计划、关卡整图生成、三张派生图生成、OSS 上传和素材解析;作品摘要在背景、UI spritesheet 或物品 spritesheet 未完整时下发 generationStatus=generating,完整后下发 ready,草稿完成条件不包含 backgroundMusic
  3. 首次调用 VectorEngine gpt-image-2,无参考图,竖屏 9:16,生成完整抓大鹅关卡画面并持久化到 generatedBackgroundAsset.levelSceneImageSrc/levelSceneImageObjectKey。提示词必须包含用户主题描述、顶部返回 / 标题倒计时 / 设置按钮、中间与主题匹配且贴横向边缘的容器,以及底部“移出 / 凑齐 / 打乱”三个道具按钮。
  4. 关卡整图完成后并发发起三次 gpt-image-2 编辑请求,三者都以关卡整图作为参考图:1K1:1 的 UI spritesheet 写入 uiSpritesheetImageSrc/uiSpritesheetImageObjectKey1K9:16 的背景图写入 imageSrc/imageObjectKey2K1:1 的物品 spritesheet 写入 itemSpritesheetImageSrc/itemSpritesheetImageObjectKey
  5. UI spritesheet 提示词固定要求按从上到下、从左到右整理纯绿色绿幕背景素材:返回按钮、设置按钮、方格素材(不含边框,仅保留一个)、移出按钮、凑齐按钮、打乱按钮;后端上传 OSS 前必须把绿幕扣成透明 PNG。背景图提示词固定要求移除全部 UI 组件和容器内含物,完整保留容器和背景,并补全被 UI 覆盖的背景内容。
  6. 物品 spritesheet 固定 10行*10列、统一纯绿色绿幕背景,后端上传 OSS 前必须把绿幕扣成透明 PNG;素材间距严格均匀分布,每一行包含两种物品,每种物品五个不同形态,物品来自参考图中心容器中的 2D 素材,严禁高相似度物品。新流程每次解析并持久化 20 种物品,物品信息列表全部展示这 20 种;后端切 generatedItemAssets[].imageViews[] 时优先按透明 alpha 连通域识别真实素材矩形,再按原图从上到下、从左到右排序,每 5 个区域组成一个物品的五个形态;只有识别出的区域数量不足时才回退 10*10 固定网格。持久化单格映射元数据仍按 row = itemIndex / 2 + 1col = itemIndex % 2 * 5 + viewIndex + 1 写入通用系列素材图集,不能再用 row = itemIndex + 1generatedItemAssets[].imageViews[] 仍兼容已切好的五视角图,缺失时运行态和编辑器按 spritesheet 自动解析结果回退。
  7. 前端和运行态统一使用 alpha 连通域矩形检测解析 spritesheet:UI 图先把识别出的透明素材矩形按行聚类,再在每一行内按横向 x 坐标排序,最后按返回、设置、方格、移出、凑齐、打乱顺序映射回原 UI 位置;不能只按全局 y 坐标排序,否则同一行素材上下略有错位时会把方格和底部道具按钮顺序打乱。物品图按检测顺序每 5 个区域组成一个物品的五个形态,最多 20 个物品。透明背景是解析前提,不能在前端按固定像素坐标写死切片。
  8. 文本生成物品名称时必须同时生成 itemSize,只允许 。该字段随 generatedItemAssets[].itemSize 持久化并下发;历史缺失字段的素材按 兼容,模型缺失或非法值按物品名本地推断。
  9. 当前抓大鹅音频生成关闭:入口无 生成音效,草稿不生成背景音乐或点击音效,结果页不展示背景音乐 Tab 或点击音效生成入口。历史 backgroundMusic / clickSound 字段继续兼容传递。
  10. 背景、UI spritesheet、物品 spritesheet 和历史容器兼容字段的持久化真相仍在 generatedItemAssets[].backgroundAsset 与提升后的 generatedBackgroundAssetAgent session、work summary/detail、结果页和运行态入口都必须把该字段提升为 backgroundImageSrc/backgroundImageObjectKey/generatedBackgroundAsset 读取。草稿编译后的 draftJson 自身也必须携带 generatedItemAssets 快照;HTTP facade 不能只依赖 work detail 回读补齐 UI 资产,外部回读为空时也不得清空草稿内已有的背景 / 图集。平台壳层从作品架、广场、生成完成回调、结果页保存 / 发布 / 试玩回调进入 Match3D profile 时也要先归一化并提升,避免首次试玩、手动试玩、推荐流或公开详情运行态退回默认背景。

结果页当前结构:

  • 作品信息:名称、描述、标签;封面编辑收口到发布面板。
  • 难度配置:四档离散拖动条,显示需要消除、总物品数、物品种类、已生成物品种类。
  • 素材配置 > 物品:两列素材卡固定展示 20 个物品,点击打开独立五视角预览面板;支持删除、批量新增和批量重新生成。替换模式必须保留原 itemId 和列表顺序。
  • 素材配置 > UI素材:预览背景图、UI spritesheet 原图、物品 spritesheet 原图和物品 spritesheet 自动解析缩略图;背景图只支持预览,不提供重新生成入口。UI 预览必须复用运行态顶部 HUD、中央容器棋盘和底部槽位样式,不单独维护一套简化预览 UI。

运行态当前口径:

  • 规则真相在后端;前端只做即时表现、点击候选、飞入、入槽、三消和胜负过渡。
  • 物品选择只在 pointerup 时提交;pointerdown / pointermove 只更新候选样式。松手时按当前位置和最新快照命中一个最上层可点击物品;生成 2D PNG 物品必须按当前展示图的 alpha 像素做热区精筛,透明像素、object-contain 留白和 itemSize 缩小后的空白区不能响应点击。
  • 物品 DOM 只负责展示,不通过自身 click 事件直接提交,避免浏览器后续 click 绕过松手判定造成重复提交。
  • 初始物品坐标围绕容器口中心生成,并保留内缩安全距离,避免贴边和局部角落聚集。
  • 本地试玩与 Rust module-match3d 后端领域生成使用同一套中心铺开口径;生成点覆盖四象限且均值接近中心。
  • 运行态优先消费 2D 生成图;默认积木 / 程序化 3D 表现只作为视觉分支和兜底,不改变规则真相。
  • 难度只决定本局加载的物品种类数量:轻松 3、标准 9、进阶 15、硬核 20。硬核仍保留 21 次消除和 63 件总物品,运行态按 20 种素材循环复用,不要求生成第 21 种素材。
  • 运行态启动前要预加载 generatedItemAssets[].imageViews[]、顶层 generatedBackgroundAsset、物品挂载 backgroundAsset 中的背景、UI spritesheet 和物品 spritesheet;首次生成自动试玩、结果页手动试玩、推荐流和公开详情启动都必须传入提升后的 profile。卡片摘要缺图集字段时,进入运行态前必须补读 work detail。补读后的 profile 也要再次提升 generatedItemAssets[].backgroundAsset,确保背景和图集字段传给 Match3DRuntimeShell
  • 背景图作为运行态全屏背景,图内已经保留容器;旧 containerImage* 只作为历史透明容器兼容字段。若 containerImage*uiSpritesheetImage* 同源,运行态不得把 UI spritesheet 当中心容器图叠到棋盘上。
  • 抓大鹅运行态 HUD 需贴近拼图顶部信息条的视觉口径:左上只保留透明返回按钮;右上不再暴露设置入口;顶部关卡名和倒计时直接复用拼图同款的铭牌 + 下挂计时牌结构、同色板和同造型,并在牌面左侧挂上 media/logo.png 产品 logo;下方备选栏和道具图标只保留内容与交互边界,不再显示灰白半透底板;中央容器图层视觉可隐藏,但棋盘命中边界仍保留。
  • generated 私有图换签未完成时,局内物品先隐藏等待,不得短暂显示默认积木;同一批资源在重启 run 时保留已解析签名 URL,只有资源源列表变化或换签失败后才允许进入兜底视觉。
  • itemSize 只缩放生成 2D 图片本体: 均按相对尺寸缩放,其中 也比原始图片略小, 进一步缩小;不改变后端下发的布局半径、点击半径或三消规则。
  • 物品进入底部物品栏时按同类型插入:如果物品栏已有同类物品,新物品插到该类型最后一个物品后面,后续物品整体后移;没有同类时追加到当前末尾。达到三件同类时,在飞入物品栏动画结束后,左侧和右侧同类物品向中间合成,三件一起消失,播放合成音效,不展示星星图标,后面的物品再向前补位。该动效只是前端表现层,后端和本地试玩仍负责权威插入、指定点击类型清除与补位后的槽位快照。
  • 抓大鹅运行态不渲染右上角设置入口,也不在局内直接暴露重新开始按钮;结算弹层仍保留结果态的再来一局动作。
  • 高 DPR 移动端 WebGL canvas 必须锁定 CSS 尺寸,避免右下溢出。

发现页不再挂载前端固定官方抓大鹅静态 demo;公开卡片、作品号搜索、详情页和运行态启动只能来自后端真实 profile / gallery 投影。正式公开作品统一走 server runtime adapter,前端不得再用本地 demo profile 绕过后端统计和运行态链路。

视觉小说

当前视觉小说只吸收外部 TXT 玩法的创作与运行经验,不迁入外部平台社区、支付、榜单、私有存档或回放。

入口收敛为:

  • 一句话创作输入。
  • 横向视觉画风选择。
  • 生成过程页。
  • 结果页。

资产引用统一走平台资产对象:

  • 文档上传走 /api/assets/direct-upload-tickets、OSS 直传、/api/assets/objects/confirm/api/assets/read-url
  • 文档只把 assetObjectId 放入 sourceAssetIds,不要在前端状态或 SpacetimeDB 保存大 Data URL。
  • 封面、场景、角色立绘和音乐写平台 asset id 或 generated 引用。
  • 运行时图片渲染使用 ResolvedAssetImage 换签。

视觉小说禁止新增回放 / 录制 / 复盘类功能。npm run check:visual-novel-vn11 继续作为负向扫描门禁。

汪汪声浪 Bark Battle

对外名称:汪汪声浪大作战。工程域:bark-battle

当前领域语言:

  • 有效声浪触发:麦克风归一化响度在冷却结束后达到阈值的一次计分输入。
  • 能量条:玩家与对手当前声浪优势的连续对抗刻度,推到玩家或对手一侧边界时本局立即结算。
  • 主题 / 竞技背景描述:配置字段为 themeDescription,用于生成竞技背景并表达整体场景,不再使用 themePreset 或狗狗皮肤预设。
  • 玩家 / 对手形象描述:配置字段为 playerImageDescription / opponentImageDescription,对外统一称“形象描述”,不再称“角色设定”。
  • 后端裁决结果:后端根据 start run 与 finish 派生指标校验后的正式单局结果。
  • 基础统计:只记录正式 published run 的开始、结算和派生指标,草稿试玩不写正式统计。
  • 公开广场:统一读取 bark_battle_gallery_view 这类 read model,不再由前端自己拼公开列表。
  • 创作者信息:统一作品详情和公开广场都必须展示后端返回的 authorDisplayName,不得只在详情页内层可见;草稿 Tab 作品架遵循平台作品架统一口径,无论草稿 / 已发布都不外露作者信息。
  • 拟声词:配置字段为 onomatopoeia。创作者未手动编辑时,前端根据主题 / 竞技背景描述、玩家形象描述和对手形象描述生成高能词池;创作者手动编辑后按自定义词池发布。默认词池只在命中狗相关主题时加入狗叫词,不能把非狗主题强行带回狗语义。

当前入口默认开放:visible=trueopen=truebadge=可创建,入口参考图使用 /creation-type-references/bark-battle.webp。创作入口使用 7 字段表单(作品标题、简介、主题 / 竞技背景描述 themeDescription、玩家形象描述、对手形象描述、拟声词、难度);提交后先进入 bark-battle-generating 独立生成页,自动生成玩家形象、对手形象和竞技背景三图。生成页即使部分槽位失败也要继续落到结果页,失败槽位保留错误态和单槽重试入口,不在生成页停留。结果页只保留单槽重试、重新生成和上传,不再展示一次生成按钮、音频配置入口、皮肤预设入口或排名配置。发布成功后先跳统一作品详情页 /works/detail?work=BB-xxxxxxxx,正式 published runtime 从作品详情页进入并必须使用真实麦克风;draft 可试玩,可使用 mock 输入,且不写正式统计。统一作品详情和广场列表展示创作者名称;草稿 Tab 作品架不外露创作者名称,已发布作品只在右上角常驻分享入口。

移动端创作 Tab 内嵌 Bark Battle 表单时,只保留外层 Tab 面板承担纵向滚动;表单自身移动端不再创建独立纵向滚动容器,底部“生成草稿”按钮作为普通表单尾部并保留 safe-area 底部间距,避免与最后一组输入框、移动端键盘或底部 TabBar 形成套滚动 / 遮挡。

创作流程为:

  • 创作 Tab 表单:填写作品标题、简介、主题 / 竞技背景描述、玩家形象描述、对手形象描述、拟声词和难度。拟声词支持换行、逗号、顿号、斜杠或竖线分隔;未手动编辑时随主题 / 形象描述自动重算,手动编辑后保持创作者自定义。
  • 草稿编译:POST /api/creation/bark-battle/drafts 写入配置 JSON,返回包含 draftId、稳定 workIdconfigVersionrulesetVersion 的草稿结果。
  • 生成页:bark-battle-generating 自动并行产出玩家形象、对手形象和竞技背景三图;前端生成页 UI 和其它玩法保持同一圆环主视觉,media/create_bg_video.mp4 作为固定全屏页面背景层循环静音播放,主进度圆环居中展示总进度,只保留当前步骤名称和当前步骤进度,不再渲染三行槽位列表。视频层需要显式触发播放。三图都走 Bark Battle 专用后端生图接口 POST /api/creation/bark-battle/images/generate,由后端按 player-characteropponent-characterui-background 分别拼装正式提示词、写入 generated-bark-battle-assets 私有资产前缀并返回实际 prompt。玩家 / 对手形象提示词必须保持用户形象描述,不强行注入狗相关主体,并要求正面、单个完整形象和透明背景。部分失败也继续进入结果页。
  • 结果页:围绕三图槽位展示错误态与已生成结果,只保留单槽重试、重新生成和上传,不再提供一次生成按钮、音频配置入口或排名配置。
  • 手动上传:结果页通过平台资产直传 /api/assets/direct-upload-tickets/api/assets/objects/confirm 写入私有资产,再把返回的历史 generated 路径写回草稿配置。
  • 发布:结果页确认后必须携带草稿返回的同一个 workId 和结果页最终 publishedSnapshot 调用 POST /api/creation/bark-battle/works/publishSpacetimeDB 发布态的 config_json 必须使用该最终快照,works summary 若拿到 publishedSnapshotJson 也优先使用最终快照映射封面三图。发布成功后先进入统一作品详情页,再由详情页进入正式 runtime;缺少 workId 的旧草稿状态需要重新生成草稿。
  • 作品架:Bark Battle 草稿 / 已发布列表优先读取后端 /works,但创建、生成完成、保存或发布后的本地摘要必须在后端 read model 尚未回读到同 workId 前继续保留;创作中心作品架同时接入 pending shelf 兜底,避免 ready 且三图齐全的草稿在刷新窗口期从“我的草稿 / 已发布”中消失。
  • 试玩与正式 runtime:草稿试玩使用 runtimeMode=draft 和 mock 输入,不写正式 run;正式 runtime 使用 runtimeMode=published,进入运行态后直接申请真实麦克风权限,授权成功后立刻进入倒计时,启动对局时调用 POST /api/runtime/bark-battle/works/{workId}/runs 登记 start run,并以返回的 runtimeConfig 作为本局前端规则参数;结算时调用 POST /api/runtime/bark-battle/runs/{runId}/finish 写入基础统计派生指标;对局会在能量条推到任一侧边界时提前结算并弹出独立结算弹窗,运行态内固定提供返回按钮。

支持的创作者可替换内容:

  • 基础信息:作品标题、简介、主题 / 竞技背景描述(themeDescription)、玩家形象描述、对手形象描述和难度。
  • 生成素材:玩家形象、对手形象和竞技背景三个槽位可单槽重试、重新生成或上传;形象图保持正面和透明背景,不把非狗形象描述改写成狗。
  • 拟声词:最多保留前 24 个有效词;默认池按狗、机甲 / 科技、幻想 / 骑士等主题补充高能短词,并叠加通用“炸场 / 破阵 / 声浪拉满”等基础词。局内只要有效声浪触发就随机快速展示,避免连续重复。
  • 运行态输入:正式 runtime 必须真实麦克风;草稿试玩允许 mock,不写正式统计。

这些创作字段写入 Bark Battle 配置 JSON,发布后由 runtime 和基础统计链路读取;对局时长、反作弊校验和后端裁决仍由规则集与后端控制,不能通过前端替换项改变。当前声浪触发口径为前端默认阈值 0.35、有效触发冷却 150ms,后端 BarkBattleRulesetmin_bark_gap_ms 也保持 150ms,用于正式成绩校验的物理触发上限。历史排名相关后端字段暂保留兼容,但 v1 公开闭环不展示音频、皮肤预设或排名配置入口。

方洞挑战

工程域:square-hole。当前链路具备 agent session、work profile、runtime run、drop shape、restart、stop、time-up 等后端 procedure 与前端 service。新改动应沿用独立 module-square-holeshared-contractsspacetime-client,不要挂回 RPG 或拼图语义。

大鱼吃小鱼

工程域:big-fish。当前保留创作会话、素材槽、事件、运行态 run、gallery、like、remix 和 play 记录。新创作和运行态规则应继续通过后端 profile / run 投影,不把运行态结果写成纯前端事实。

儿童向玩法

当前包含:

  • baby-object-match:宝贝识物当前入口状态为 visible=trueopen=true,创作 Tab 展示为“可创建”,进入宝贝识物创作、生成、结果页、试玩和发布链路;资产生成接口为 /api/creation/edutainment/baby-object-match/assets。入口关闭只允许通过 SpacetimeDB / 后台入口配置显式调整,默认种子和 debug 兜底都必须保持可创建。
  • baby-love-drawing:宝贝爱画本地 demo,魔法生成接口为 /api/creation/edutainment/baby-love-drawing/magic
  • child-motion-demo:儿童动作识别热身关。真实动作数据来自 mocap WebSocket,不要把浏览器摄像头视频流当作主动作数据源;发现页的寓教于乐频道同时提供独立热身关入口,点击后进入 /child-motion-demo

创意互动 Agent

创意互动内容生成 Agent 的长期方向是用感知、思考、记忆、行动、反思、协作闭环理解文字、图片或文档,并选择模板生成草稿。当前 Phase 1 以拼图模板闭环为主;Agent 填充和修订模板字段,最终仍落到具体玩法的草稿契约和后端编排。

通用资产规则

  1. 供应商密钥不得进入前端、文档示例或 Git。
  2. 生成资产写入 OSS 后,前端读取前必须通过 /api/assets/read-url 换签。
  3. 生成失败时,后端应返回可操作 details.reason / details.missingEnv,前端优先展示具体原因。
  4. 半配置 OSS 不应阻断 api-server 启动;具体生成或换签接口在需要时返回配置缺失。
  5. 历史 generated path 可以兼容读取,但新链路不要把裸 path 当公开静态资源。
  6. 发现页 / 推荐流公开作品卡封面必须兼容旧移动浏览器内核:封面容器不能只依赖 CSS aspect-ratio 撑高,必须保留 16:9 或对应沉浸卡比例的可见高度兜底;generated 私有封面换签失败时要回落到玩法类型参考图,避免卡片整体黑底。