diff --git a/.agents/skills/littlejs-game-dev.md b/.agents/skills/littlejs-game-dev.md index 0fed8c19..e8f13da6 100644 --- a/.agents/skills/littlejs-game-dev.md +++ b/.agents/skills/littlejs-game-dev.md @@ -95,7 +95,7 @@ export function createGame({ plugins, bundle, viewport }) { - **输入收归 L1(别自己订阅)**:不写 `ctx.getInput()`、不自建点击队列、不在 `update` 里挑时机消费点击——只写实例方法 **`handleTap(x,y)`**(点击)/**`handleKey(key)`**(键盘),L1 的 game.js wrapper 在 pointerdown/keydown 时**直达**调用。〔HJ-AGI 实测:M3 把点击塞 `pendingClicks`、在 `update` 的 play 分支(menu early-return 之后)才消费 → 菜单点击永不处理 → 启动不了;收归 L1 结构性根除。check 会拦 `getInput` 与"零输入方法"。〕 - **⚠️ 驱动插件 onFrame**:`update(dt)` 内**必须 `bundle.tick(dt)`**(`bundle` 是 createGame 入参)——否则 timer-scheduler/gamefeel 等的 onFrame 不推进、timer 永不到期、一局不结束。 - **viewport**:画面口径读入参 `viewport.w/h`,别硬编码 390×844。 -- **取证面(`_forensicsView()` 必须实现,可测性红线)**:实例必须挂 `_forensicsView()`→`{ state(), measures() }`;`state()` 导出可观测态——至少 `{ phase, score }`,有可点目标则加 `targets:[{x,y,occupied}]`(九门据此验「真活+有进展」+ 驱动)。**不写则 check 拦 + 九门 E_live/H_progress 读不到状态**。另可选挂 `_handleAction(action)`(host.do() 走逻辑驱动,便于确定性 e2e)。范式见 `_template/src/game-logic.js`。 +- **取证面(`_forensicsView()` 必须实现,可测性红线)**:实例必须挂 `_forensicsView()`→`{ state(), measures() }`;`state()` 导出可观测态——至少 `{ phase, score }`,有可点目标则加 `targets:[{x,y,occupied}]`(九门据此验「真活+有进展」+ 驱动)。**targets 要反映「当前该点什么才推进」**:多步动作(如选客→选货)在选中后,把第二步目标(货架商品)也标 `occupied:true` —— 否则零-LLM driver 单击跟不动两步、H 门验不到进展(实测 wanglanmei-v4:两步成单 → driver 只选客不成单 → score 0 误判)。**最稳:核心成单做成单击即完成**。**不写则 check 拦 + 九门 E_live/H_progress 读不到状态**。另可选挂 `_handleAction(action)`(host.do() 走逻辑驱动,便于确定性 e2e)。范式见 `_template/src/game-logic.js`。 - **关键事件记日志(`ctx.log`)**:在 init/场景切换/得分/出错处 调 `ctx.log('tag', 信息)`(`ctx`=init(boot).boot.ctx)→ 写 `window.__gameLog`,便于读日志诊断运行时问题。**插件调用已由 host 自动记**(你只补游戏语义事件)。 --- diff --git a/.agents/skills/sim-business-game-design.md b/.agents/skills/sim-business-game-design.md index a7606aec..40d08d89 100644 --- a/.agents/skills/sim-business-game-design.md +++ b/.agents/skills/sim-business-game-design.md @@ -132,6 +132,7 @@ - ❌ 3D / 大量逐帧手绘动画 → 2D + 程序化动效(particles-juice/缓动)+ 少量 mmx 静态图。 - ❌ 复杂经济(多资源链/市场波动)→ 双货币 + 简单成长曲线。 - ❌ 超过 2 个主机制 → 便宜模型 + 单屏扛不住,聚焦 1 主 + 1 成长轴。 +- ❌ **核心成单/得分动作做成「先选 A 再选 B」两步**(如"点顾客锁定→再点货架商品"):零-LLM 自动验收 driver 只会单击 `occupied:true` 目标、跟不动两步 → 九门 H 验不到进展 = **好游戏被误判** → ✅ **核心动作单击即成单**(点等待中的顾客 = 自动按库存售卖收钱,casual 友好 + driver 可达);**深度靠进货/库存/解锁/节奏,不靠两步匹配**。若确需多步,则 `_forensicsView().state().targets` 必须**随状态把"下一步该点的"标 occupied:true**(选中顾客后,把该卖的货架商品标 occupied),让 driver 跟着两步推进。 - ✅ 留下的:放置产出、合成升级、点击经营、阶段解锁、收集、轻决策、数值滚雪球 —— 全在 12 插件 + 单屏 + 便宜模型可生成范围内。 --- diff --git a/game-runtime/tools/amodel-gen/prompt.mjs b/game-runtime/tools/amodel-gen/prompt.mjs index 68329cc5..296a2fa7 100644 --- a/game-runtime/tools/amodel-gen/prompt.mjs +++ b/game-runtime/tools/amodel-gen/prompt.mjs @@ -158,7 +158,7 @@ export function buildDesignSystemPrompt() { 核心循环(+30 秒脚本)· 主机制 1–2 个(标用哪些插件)· **经营品类必含「进货→库存→售卖→补货」资源环** · 解锁阶梯(3–6 级 + 阈值)· 数值骨架(初始/成长率/卡点)· **客流/出现节奏目标值**(出现间隔·同屏上限·耐心·rush 起点 —— 按 §3 给具体区间,别拍激进=别让顾客太快)· 美术风格词(一组共用)· 音效清单(收益/升级/解锁,§10 红线「必有反馈音」)· UI 布局 · 首 3 分钟脚本。 【两道自检(必过,写进设计稿)】 -- **可达性自检(§9)**:逐条问「12 插件 + boot.ctx 能落吗」——落不到的(联网/3D/大世界/复杂经济)剔除或简化。 +- **可达性自检(§9)**:逐条问「12 插件 + boot.ctx 能落吗」——落不到的(联网/3D/大世界/复杂经济)剔除或简化。**+ driver 可达(关键)**:核心成单/得分动作要**单击 occupied 目标即完成**(零-LLM 自动验收据此点);**别做"先选客再选货"两步**(driver 跟不动 → 九门 H 验不到进展 = 好游戏被误判);确需多步则要求 _forensicsView.targets 随状态把"下一步该点的"标 occupied。 - **好玩自检(§10)**:过 8 条,**至少命中 4 条可机检项**并写明命中哪几条:①即时反馈(飘字+音效+粒子)②可见成长(score 上升)③下一个解锁 ⑧音反馈;经营再加「买/进货扣币」。 【gatespec(钉死,下游据此验收)——作为 done 的结构化参数传,别塞进设计稿正文/别用围栏块】