diff --git a/.planning/phases/09-minimum-browser-runnable/09-44-SUMMARY.md b/.planning/phases/09-minimum-browser-runnable/09-44-SUMMARY.md index caba9a5..9b8aac1 100644 --- a/.planning/phases/09-minimum-browser-runnable/09-44-SUMMARY.md +++ b/.planning/phases/09-minimum-browser-runnable/09-44-SUMMARY.md @@ -7,13 +7,14 @@ - 当前特性表行数:620 - 移除新引擎独有行:4(0 号特殊属性、26 号特殊属性、客户端配置、默认值) - 基线行数:616 -- 新文档行数:616 -- 合并或拆分记录:无,按旧侧粒度逐条保留 +- 新文档行数:614 +- 合并或拆分记录:删除旧样板不存在的 254、255 两行;其余按旧侧粒度逐条保留 - 判定统计: -- 支持:474 -- 部分支持:80 -- 不支持:62 -- 三值相加:474 + 80 + 62 = 616 +- 支持:476 +- 部分支持:81 +- 不支持:57 +- 三值相加:476 + 81 + 57 = 614 +- not planned:15(标号 13;36 中的 `bigImage`;217;252;500;508;511;514;516;542;546;553;554;606;607) ## 分节行数 @@ -28,7 +29,7 @@ | §4.3 道具能力 | 7 | 分类、效果、隐藏、售卖 | | §5 装备 | 10 | 槽、实例、换装、比较、套装 | | §6.1 图块类别 | 9 | cls 分布 | -| §6.2 图块字段 | 18 | 字段映射 | +| §6.2 图块字段 | 16 | 字段映射;254、255 已删除 | | §6.3 图块条目 | 224 | 数字键逐条 | | §6.4 图块能力 | 8 | 类别、通行、触发、门 | | §7 楼层字段 | 29 | 字段逐条 | @@ -59,6 +60,7 @@ 2. **门禁误报 - 禁用词 `info`**:旧字段名 `doorInfo` 含禁用子串 `info`,导致 Task 3/4 的禁用词门禁误报。保留语义,把该字段在正文写作「门信息字段」,子字段 time/openSound/closeSound/keys 原样保留;门禁本身不放宽,记录为偏差。 3. **门禁误报 - 禁用词 `core.`**:内容文件 `core.jsonc` 的扩展名含禁用子串 `core.`,导致实现列被误判为使用旧全局 `core.`。保留语义,在实现列写作 `src/content` 下的 `core` 配置;门禁本身不放宽,记录为偏差。 4. **长原文摘录**:按要求删除旧源码长摘录,只保留 `file:line` 与短句行为。 +5. **删除误列**:按用户确认删除 254、255(旧样板不存在图块级 `bg` / `fg` 字段)。 ## 产物 diff --git a/.planning/phases/09-minimum-browser-runnable/09-45-SUMMARY.md b/.planning/phases/09-minimum-browser-runnable/09-45-SUMMARY.md index e3cd20c..403b3d4 100644 --- a/.planning/phases/09-minimum-browser-runnable/09-45-SUMMARY.md +++ b/.planning/phases/09-minimum-browser-runnable/09-45-SUMMARY.md @@ -23,11 +23,12 @@ metrics: - 移除新引擎独有行:11 - 基线行数:272 - 新文档行数:272 -- 支持:103 -- 部分支持:113 -- 不支持:56 +- 支持:55 +- 部分支持:45 +- 不支持:172 -三值相加 103 + 113 + 56 = 272。 +三值相加 55 + 45 + 172 = 272。 +- not planned:33(标号 21、23、24、187、197、207、209、212;248–272);maybe:3(204、205、220) 移除的 11 行:光环附录 1 行(特殊光环)、7.13(c) 内建函数与新语句种类 2 行、11.2 新回放指令 8 行。 @@ -72,6 +73,9 @@ metrics: ## 偏差 +- **事件判定**:按用户要求把 53–181 的 129 条事件语句全部改为“不支持”。 +- **回放判定**:247 的 `no` 改为“不支持”(用于移动到楼层转换图块而不触发);12.2/12.3 全部标为 `not planned`。 + - **门禁误报**:`05-RUNTIME-UNCERTAIN.md` 是 00-INDEX.md 指定的必需分册文件名,文件名本身含计划禁止词 `UNCERTAIN`。按本次执行要求保留该路径,并在此记录门禁缺陷;掩码复核证明除该文件名外全部门禁通过。 - **生成方式**:目标文档由 Node 从与判定清单相同的数据源生成,避免 272 行手工复制漂移;分节、六列表头与三值判定均按计划执行,两个目标文件仍为未提交的 Markdown。 @@ -86,6 +90,6 @@ metrics: ## Self-Check: PASSED - 目标文档存在,272 行,六列表头 25 张全部一致。 -- SUMMARY 存在,三值合计 103 + 113 + 56 = 272。 +- SUMMARY 存在,三值合计 55 + 45 + 172 = 272。 - 范围无目标外路径;源码、配置、STATE、ROADMAP 与基线一致;无提交。 - 唯一未通过项是必需文件名触发的禁止词误报,已在偏差中记录。 diff --git a/.planning/phases/09-minimum-browser-runnable/09-46-SUMMARY.md b/.planning/phases/09-minimum-browser-runnable/09-46-SUMMARY.md index fdfaf33..0e5145c 100644 --- a/.planning/phases/09-minimum-browser-runnable/09-46-SUMMARY.md +++ b/.planning/phases/09-minimum-browser-runnable/09-46-SUMMARY.md @@ -48,3 +48,7 @@ - 门禁把 `info` 当作禁用词,而旧符号 `_drawBlockInfo`、`getBlockInfo`、`_getBigImageInfo`、`doorInfo`、`posInfo` 天然包含该子串。为不改门禁、不伪造符号,正文改用中文描述这些内部函数并保留原 `file:line` 锚点;这属于门禁子串误判导致的表述调整,不改变旧侧覆盖。 - 目标文档哈希在改写前为 `5A62CF078841DA5806F494320F375BBB3F1313DC445F5DDD7B9F59B27375EB2E`,改写后由 Task 4 重新记录。 + +## 标注 + +- not planned:1(标号 40) diff --git a/.planning/phases/09-minimum-browser-runnable/09-48-SUMMARY.md b/.planning/phases/09-minimum-browser-runnable/09-48-SUMMARY.md index 158d1f8..2450493 100644 --- a/.planning/phases/09-minimum-browser-runnable/09-48-SUMMARY.md +++ b/.planning/phases/09-minimum-browser-runnable/09-48-SUMMARY.md @@ -56,11 +56,12 @@ actuals: 三值统计: -- 支持:45 +- 支持:48 - 部分支持:21 -- 不支持:27 +- 不支持:24 -45 + 21 + 27 = 93。 +48 + 21 + 24 = 93。 +- not planned:17(§2:2、7、8、10、11、12;§3:1、2、3;§4:5;§7:2、3;§8:3;§9:2、4、5、6);maybe:1(§4:20) 分域计数: @@ -75,7 +76,7 @@ actuals: | 错误、日志与调试 | 1 | 0 | 3 | 4 | | 全局入口与构建 | 2 | 1 | 3 | 6 | | 回放播放控制 | 3 | 3 | 0 | 6 | -| 合计 | 45 | 21 | 27 | 93 | +| 合计 | 48 | 21 | 24 | 93 | ## 2. 粒度与合并记录 @@ -115,4 +116,7 @@ actuals: ## Self-Check: PASSED - 目标文档 93 行、九张六列表、三值判定齐全。 -- Summary 含 102、9、93、93 与 45、21、27 统计,且相加等于 93。 +- Summary 存在,旧 102 行减 9 行后 93 行,三值 48/21/24 统计,相加等于 93。 + +- **插件判定**:4 改为支持(楼层激活/未激活状态等价);2、7、8、10、11、12 标为 not planned。 +- **服务端判定**:§7 的 1、4 改由 Vite 与外部编辑器/ToolKit 实现,判支持;2、3 标为 not planned。 \ No newline at end of file diff --git a/.planning/phases/09-minimum-browser-runnable/09-PARITY/01-DATA.md b/.planning/phases/09-minimum-browser-runnable/09-PARITY/01-DATA.md index 1af6e8c..8b86c9c 100644 --- a/.planning/phases/09-minimum-browser-runnable/09-PARITY/01-DATA.md +++ b/.planning/phases/09-minimum-browser-runnable/09-PARITY/01-DATA.md @@ -5,7 +5,7 @@ - 旧样板快照:`D:/github/mota-js`,分支 `master`,HEAD `3efb548e407ad2b8007b498cb98401e2012a0b55`,工作树干净。 - 新样板快照:`D:/github/template`,分支 `refine/data-client`,HEAD `5af3ab378b4d65dc5cf1fbcb621fd9a776608dd7`,工作树 159 行改动。 - 采样时间:2026-11-03 21:30(UTC+8)。工作树会持续变动,本文件只对上述快照负责,不回滚任何外部改动。 -- 行数:旧侧内容表原有 620 行,移除 4 行新样板独有的 0 号与 26 号特殊属性、客户端配置与默认值后,保留 616 行。 +- 行数:旧侧内容表原有 620 行,移除 4 行新样板独有的 0 号与 26 号特殊属性、客户端配置与默认值后为 616 行;再删除 2 行旧样板不存在的误列(254、255)后,保留 614 行。 - 判定:`支持` 表示用现有接口、标签或组件做组合、配置或简单映射即可;`部分支持` 表示核心能力存在但要适配,或只覆盖旧行为的一部分;`不支持` 表示没有等价能力,或需要复杂逻辑、算法、直接底层调用。现有接口无法确认可以简单实现时一律判 `不支持`,并在差异列写明已检索范围。 - 锚点:旧侧写 `file:line` 与短句行为,新侧写路径、符号或内容字段;不复制大段原文。 @@ -29,12 +29,12 @@ | 10 | 怪物模板字段 n | 旧在 project/enemys.js:10 使用该字段:`project/enemys.js:10`(vampire/冥灵魔王);`project/functions.js:499` | 支持 | 作为新 `special` 4 的 `value`(`src/data/enemy/special.ts:143-153`)。 | 旧顶层字段改为特殊属性参数。 | | 11 | 怪物模板字段 range | 旧在 project/functions.js:508 使用该字段:`project/functions.js:508`(领域)、`:518`(光环) | 支持 | 作为新 `special` 13 或 23 的 `value.range`(`src/data/enemy/special.ts:252-267,358-367`)。 | 旧顶层字段改为特殊属性参数。 | | 12 | 怪物模板字段 zoneSquare | 旧在 project/functions.js:508 使用该字段:`project/functions.js:508,511,520` | 支持 | 作为新 `special` 13 或 23 的 `value.square`(`src/data/enemy/special.ts:252-267,358-367`)。 | 旧顶层字段改为特殊属性参数。 | -| 13 | 怪物模板字段 bigImage | 旧在 `libs/maps.js:1010-1037` 的大图绘制流程使用该字段 | 不支持 | 无等价数据字段。 | 渲染用大图由素材决定,`ITileRawData`(`packages-user/data-common/src/store/types.ts:47-68`)不含该字段。 | +| 13 | 怪物模板字段 bigImage | 旧在 `libs/maps.js:1010-1037` 的大图绘制流程使用该字段 | 不支持 | 无等价数据字段。 | 渲染用大图由素材决定,`ITileRawData`(`packages-user/data-common/src/store/types.ts:47-68`)不含该字段;not planned。 | | 14 | 怪物模板字段 atkValue | 旧在 project/functions.js:514 使用该字段:`project/functions.js:514`(退化) | 支持 | 作为新 `special` 19 的 `value.atkValue`(`src/data/enemy/special.ts:300-308`)。 | 旧顶层字段改为特殊属性参数。 | | 15 | 怪物模板字段 defValue | 旧在 project/functions.js:514 使用该字段:`project/functions.js:514`(退化) | 支持 | 作为新 `special` 19 的 `value.defValue`(`src/data/enemy/special.ts:300-308`)。 | 旧顶层字段改为特殊属性参数。 | | 16 | 怪物模板字段 add | 旧在 project/functions.js:504 使用该字段:`project/functions.js:504`(吸血是否加到自身) | 支持 | 作为新 `special` 9 的 `value.add`(`src/data/enemy/special.ts:16-22`)。 | 旧顶层字段改为特殊属性参数。 | | 17 | 怪物模板字段 notBomb | 旧在 libs/ui.js:2348 使用该字段:`libs/ui.js:2348` `if (enemy.notBomb) damage += "[b]"` | 不支持 | 无等价数据字段。 | `IEnemyAttr` 与 `IEnemyRawData` 均无不可炸标记,现有接口无法确认可简单实现。 | -| 18 | 怪物模板字段 faceIds | 旧在 libs/maps.js:223-226 使用该字段:`libs/maps.js:223-226` 给怪物图块补 `faceIds` | 不支持 | 无等价数据字段。 | 朝向素材由渲染层按图块决定,数据层无字段。 | +| 18 | 怪物模板字段 faceIds | 旧在 libs/maps.js:223-226 使用该字段:`libs/maps.js:223-226` 给怪物图块补 `faceIds` | 支持 | `IRoleFaceBinder`(`packages-user/data-common/src/common/types.ts:27`)承担图块朝向分配与绑定;图块通过 `faceBinder` 取得对应朝向。 | 旧 `faceIds` 由角色朝向绑定接口承接。 | | 19 | 怪物模板字段 vampire | 旧在 project/functions.js:504 使用该字段:`project/functions.js:504`(吸血比例,`enemy.vampire`) | 支持 | 作为新 `special` 9 的 `value.vampire`(`src/data/enemy/special.ts:16-22`)。 | 旧顶层字段改为特殊属性参数。 | | 20 | 怪物模板字段 breakArmor | 旧在 project/functions.js:500 使用该字段:`project/functions.js:500`(破甲比例) | 支持 | 作为新 `special` 5 的 `value`(`src/data/enemy/special.ts:152-161`)。 | 旧为比例,新为百分比,按数值换算。 | | 21 | 怪物模板字段 counterAttack | 旧在 project/functions.js:501 使用该字段:`project/functions.js:501`(反击比例) | 支持 | 作为新 `special` 6 的 `value`(`src/data/enemy/special.ts:164-173`)。 | 旧为比例,新为百分比,按数值换算。 | @@ -57,7 +57,7 @@ | 33 | 怪物模板字段体系 | D:/github/mota-js/project/enemys.js:3 每个怪物用字符串键 + 8 个基础字段描述,无 schema | 支持 | `IEnemyAttr`(`packages-user/data-common/src/types.ts:13-30`)加 `IEnemyRawData`(`packages-user/data-common/src/store/types.ts:324-331`),内容写在 `src/content/enemy.jsonc`。 | 旧无 schema,新为穷举字段;基础 8 字段一一对应。 | | 34 | 怪物字符串键与数字标识 | D:/github/mota-js/project/enemys.js:3 ;`libs/enemys.js` 以字符串键索引 怪物以字符串键(如 greenSlime)作为唯一标识 | 支持 | `IEnemyStore.getEnemy(token: number / string)`(`packages-user/data-common/src/store/types.ts:333-345`)同时接受数字与字符串。 | 旧以字符串键为主,新以图块 num 为主,仍可按 id 查询。 | | 35 | 怪物特殊属性承载 | D:/github/mota-js/project/functions.js:493-500 `special` 为数字数组,参数散落在怪物顶层字段或全局 values | 支持 | `IEnemyRawData.special`(`packages-user/data-common/src/store/types.ts:324-331`)加 `src/data/enemy/special.ts:84-476` 注册表。 | 编号整体重排,参数改由 special 的 value 承载。 | -| 36 | 怪物额外渲染字段 | D:/github/mota-js/libs/maps.js:223-226 `faceIds` / `bigImage` 直接从怪物模板读取用于绘制 | 不支持 | 无等价数据字段。 | `faceIds` 与 `bigImage` 属渲染层,数据层没有承载点。 | +| 36 | 怪物额外渲染字段 | D:/github/mota-js/libs/maps.js:223-226 `faceIds` / `bigImage` 直接从怪物模板读取用于绘制 | 支持 | `faceIds` 由 `IRoleFaceBinder` 承接;`bigImage` 按设计不再需要,无需对应接口。 | `faceIds` 已支持;`bigImage` 不再需要(not planned),不构成缺口。 | ### 2.3 81 条怪物模板 @@ -269,7 +269,7 @@ | 214 | 道具提示文本 | D:/github/mota-js/libs/items.js:67 拾取时按表达式替换并提示 | 不支持 | 无等价数据字段。 | 新道具 schema 无提示字段。 | | 215 | 道具隐藏开关 | D:/github/mota-js/project/items.js:312 `hideInToolbox` 与 `hideInReplay` 分别控制道具栏与录像栏 | 部分支持 | `IItemRawData.hideInToolbox`(`packages-user/data-common/src/store/types.ts:181-198`)。 | 道具栏隐藏有字段,录像栏隐藏无字段。 | | 216 | 道具图标 | D:/github/mota-js/project/items.js:371 旧内容可带 `icon` 字段(研究口径列出;实际 51 条未出现) | 支持 | `IItemRawData.num`(`packages-user/data-common/src/store/types.ts:181-198`)绑定图块,贴图清单在 `src/content/texture/.list.jsonc`。 | 旧内容实际没有 icon 字段,新以 num 绑素材。 | -| 217 | 道具售卖字段 | D:/github/mota-js/project/items.js:3 研究口径列出 `canSale`/`sell`(实际 51 条未出现) | 部分支持 | 商店状态由 `src/data/plugin/shop` 承载,商品价格写在商店配置。 | 道具级售卖字段不存在,价格改由商店状态表达。 | +| 217 | 道具售卖字段 | D:/github/mota-js/project/items.js:3 研究口径列出 `canSale`/`sell`(实际 51 条未出现) | 部分支持 | 商店状态由 `src/data/plugin/shop` 承载,商品价格写在商店配置。 | 道具级售卖字段不存在,价格改由商店状态表达;not planned。 | | 218 | 即捡即用道具 | D:/github/mota-js/libs/items.js:29-59 `cls: items` 在拾取时直接执行效果且不计数量 | 支持 | `ItemCategory.Pick`(`packages-user/data-common/src/store/types.ts:130-141`)加 `packages-user/data-base/src/hero/items.ts` 的拾取执行点。 | 类别与拾取执行均存在,内容需把即捡即用道具改为 Pick。 | ## 5. 装备槽与实例(10 项) @@ -323,12 +323,11 @@ | 247 | 图块字段 event | 旧在 libs/maps.js:864 使用。 | 支持 | `ITileRawData.events`(`packages-user/data-common/src/store/types.ts:47-68`)填事件 id。 | 旧内联事件对象改为事件 id。 | | 248 | 图块字段 门信息字段 | 旧在 libs/maps.js:1966 使用。 | 部分支持 | `TileType.Animate`(`packages-user/data-common/src/store/types.ts:6-25`)加事件配置。 | 旧 time/openSound/closeSound/keys 无独立字段,需用事件表达。 | | 249 | 图块字段 animate | 旧在 libs/maps.js:248-250 使用。 | 支持 | `TileType.Animate`(`packages-user/data-common/src/store/types.ts:6-25`)加 `src/content/animation/.list.jsonc`。 | 旧帧数字段改为动画清单。 | -| 250 | 图块字段 faceIds | 旧在 libs/maps.js:223-226 使用。 | 不支持 | 无等价数据字段。 | 朝向素材由渲染层按图块决定。 | +| 250 | 图块字段 faceIds | 旧在 libs/maps.js:223-226 使用。 | 支持 | `IRoleFaceBinder`(`packages-user/data-common/src/common/types.ts:27`)承担图块朝向分配与绑定。 | 朝向素材由朝向绑定接口承接。 | | 251 | 图块字段 height | 旧在 libs/maps.js:251-253 使用。 | 部分支持 | 高度由素材尺寸与 `TileType` 推导,无数据字段。 | 旧 32/48 字段不再需要,但也没有显式配置点。 | -| 252 | 图块字段 bigImage | 旧在 libs/maps.js:1010-1037 使用。 | 不支持 | 无等价数据字段。 | 大图属渲染层。 | +| 252 | 图块字段 bigImage | 旧在 libs/maps.js:1010-1037 使用。 | 支持 | `bigImage` 按设计不再需要,无需对应接口。 | `bigImage` 不再需要(not planned),不构成缺口。 | | 253 | 图块字段 enable | 旧在 libs/maps.js:134 使用。 | 不支持 | 无等价数据字段。 | 旧 enable 属于楼层事件项,新事件无开关。 | -| 254 | 图块字段 bg | 旧`project/maps.js`、`libs/maps.js` 检索不到图块级 bg 字段(楼层级只有 `bgmap`) 使用。 | 不支持 | 无等价数据字段。 | 图块级 bg 在旧引擎也未出现,新侧无字段。 | -| 255 | 图块字段 fg | 旧`project/maps.js`、`libs/maps.js` 检索不到图块级 fg 字段(楼层级只有 `fgmap`) 使用。 | 不支持 | 无等价数据字段。 | 图块级 fg 在旧引擎也未出现,新侧无字段。 | +> 254、255 已删除:旧样板不存在图块级 `bg` / `fg` 字段,不作为缺口。 ### 6.3 224 条图块 @@ -570,7 +569,7 @@ | 484 | 图块事件触发 | D:/github/mota-js/libs/maps.js:242-246 `trigger` 决定撞上触发还是走上去触发,默认按 cls 推断 | 支持 | `ITileRawData.events` 与 `eventPass`(`packages-user/data-common/src/store/types.ts:47-68`)。 | 旧 trigger 字符串改为事件映射加触发方式布尔。 | | 485 | 门图块 | D:/github/mota-js/project/maps.js:71 门用 time、openSound、closeSound、keys 描述 | 部分支持 | `TileType.Animate`(`packages-user/data-common/src/store/types.ts:6-25`)加事件配置。 | 旧 门信息字段 的 time/openSound/closeSound/keys 无独立字段。 | | 486 | 图块脚本与内联事件 | D:/github/mota-js/libs/maps.js:864 | 支持 | `ITileRawData.events`(`packages-user/data-common/src/store/types.ts:47-68`)填事件 id。 | 旧内联脚本与事件改为事件 id。 | -| 487 | 图块破坏与大图 | D:/github/mota-js/project/items.js:371 `canBreak` 控制破墙镐;`bigImage`/`faceIds`/`height` 控制绘制 | 不支持 | 无等价数据字段。 | canBreak/bigImage/faceIds/height 在数据层均无字段。 | +| 487 | 图块破坏与大图 | D:/github/mota-js/project/items.js:371 `canBreak` 控制破墙镐;`bigImage`/`faceIds`/`height` 控制绘制 | 部分支持 | `canBreak` 无独立字段;`faceIds` 由 `IRoleFaceBinder` 承接;`bigImage` 不再需要;`height` 由素材尺寸推导。 | `canBreak` 无字段;其余按已确认方式处理。 | ## 7. 楼层字段(29 项) @@ -587,10 +586,10 @@ | 494 | 楼层字段 cannotViewMap | 旧在 D:/github/mota-js/project/floors/MT0.js:9 使用。 | 不支持 | 无等价数据字段。 | 现有接口无法确认可简单实现,地图查看过滤只在旧 UI。 | | 495 | 楼层字段 defaultGround | 旧在 D:/github/mota-js/project/floors/MT0.js:10 使用。 | 不支持 | 无等价数据字段。 | 现有接口无法确认可简单实现。 | | 496 | 楼层字段 images | 旧在 D:/github/mota-js/project/floors/MT0.js:11 使用。 | 不支持 | 无等价楼层字段。 | 素材清单按贴图全局管理,没有楼层级图片配置。 | -| 497 | 楼层字段 ratio | 旧在 D:/github/mota-js/project/floors/MT0.js:12 使用。 | 不支持 | 无等价楼层字段。 | 画布缩放与楼层倍率不是同一能力。 | +| 497 | 楼层字段 ratio | 旧在 D:/github/mota-js/project/floors/MT0.js:12 使用。 | 不支持 | 无等价楼层字段。 | 楼层级宝石/血瓶数值倍率,新无楼层级倍率配置。 | | 498 | 楼层字段 map | 旧在 D:/github/mota-js/project/floors/MT0.js:13 使用。 | 支持 | `IMapRawData.map`(`packages-user/data-common/src/store/types.ts:265-276`)。 | 字段名一致,二维数组按图层存放。 | | 499 | 楼层字段 firstArrive | 旧在 D:/github/mota-js/project/floors/MT0.js:28 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现,首达事件没有楼层配置点。 | -| 500 | 楼层字段 parallelDo | 旧在 D:/github/mota-js/project/floors/MT0.js:29 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现。 | +| 500 | 楼层字段 parallelDo | 旧在 D:/github/mota-js/project/floors/MT0.js:29 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现;not planned。 | | 501 | 楼层字段 events | 旧在 D:/github/mota-js/project/floors/MT0.js:30 使用。 | 支持 | `IMapRawData.events`(`packages-user/data-common/src/store/types.ts:265-276`)。 | 旧坐标到事件数组,新为图层到位置到优先级到事件 id。 | | 502 | 楼层字段 changeFloor | 旧在 D:/github/mota-js/project/floors/MT0.js:31 使用。 | 部分支持 | `IChangeFloorData`(`packages-user/data-common/src/store/types.ts:249-263`)加 `IMapRawData.events`。 | 切换能力存在,楼层级 changeFloor 表改为事件配置。 | | 503 | 楼层字段 afterBattle | 旧在 D:/github/mota-js/project/floors/MT0.js:32 使用。 | 部分支持 | `EventTrigger.OnAfterBattle`(`packages-user/data-common/src/event/types.ts:17-19`)加 `IMapRawData.events`。 | 触发器存在,楼层级表改为事件配置。 | @@ -598,15 +597,15 @@ | 505 | 楼层字段 afterOpenDoor | 旧在 D:/github/mota-js/project/floors/MT0.js:34 使用。 | 部分支持 | `EventTrigger.OnAfterOpenDoor`(`packages-user/data-common/src/event/types.ts:23`)加 `IMapRawData.events`。 | 触发器存在,楼层级表改为事件配置。 | | 506 | 楼层字段 cannotMove | 旧在 D:/github/mota-js/project/floors/MT0.js:35 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现。 | | 507 | 楼层字段 bgmap | 旧在 D:/github/mota-js/project/floors/MT0.js:36 使用。 | 部分支持 | `IGameMap.setBackground` 与 `getBackground`(`packages-user/data-base/src/map/gameMap.ts:108-117`)。 | 旧二维背景数组改为单个背景图块数字。 | -| 508 | 楼层字段 fgmap | 旧在 D:/github/mota-js/project/floors/MT0.js:39 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现,前景图没有对应字段。 | +| 508 | 楼层字段 fgmap | 旧在 D:/github/mota-js/project/floors/MT0.js:39 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现,前景图没有对应字段;not planned。 | | 509 | 楼层字段 width | 旧在 D:/github/mota-js/project/floors/MT0.js:42 使用。 | 支持 | `IMapRawData.width`(`packages-user/data-common/src/store/types.ts:265-276`)。 | 字段名一致。 | | 510 | 楼层字段 height | 旧在 D:/github/mota-js/project/floors/MT0.js:43 使用。 | 部分支持 | `IGameMap.height` 由地图内容推导(`packages-user/data-base/src/map/types.ts:664-667`)。 | 旧显式高度改为推导值。 | -| 511 | 楼层字段 autoEvent | 旧在 D:/github/mota-js/project/floors/MT0.js:44 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现。 | +| 511 | 楼层字段 autoEvent | 旧在 D:/github/mota-js/project/floors/MT0.js:44 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现;not planned。 | | 512 | 楼层字段 bgm | 旧在 D:/github/mota-js/project/floors/sample0.js:11 使用。 | 不支持 | 无等价楼层字段。 | 音频播放能力存在,但没有按楼层切换的配置字段。 | | 513 | 楼层字段 beforeBattle | 旧在 D:/github/mota-js/project/floors/sample0.js:257 使用。 | 部分支持 | `EventTrigger.OnBeforeBattle`(`packages-user/data-common/src/event/types.ts:17`)加 `IMapRawData.events`。 | 触发器存在,楼层级表改为事件配置。 | -| 514 | 楼层字段 cannotMoveIn | 旧在 D:/github/mota-js/project/floors/sample0.js:258 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现。 | +| 514 | 楼层字段 cannotMoveIn | 旧在 D:/github/mota-js/project/floors/sample0.js:258 使用。 | 不支持 | 无等价字段。 | 现有接口无法确认可简单实现;not planned。 | | 515 | 楼层字段 weather | 旧在 D:/github/mota-js/project/floors/sample1.js:18 使用。 | 不支持 | 无等价楼层字段。 | 天气在渲染层,数据层没有楼层天气字段。 | -| 516 | 楼层字段 upFloor | 旧在 D:/github/mota-js/project/floors/sample2.js:80 使用。 | 不支持 | 无等价楼层字段。 | 上楼只作为图块 id 出现,不是楼层字段。 | +| 516 | 楼层字段 upFloor | 旧在 D:/github/mota-js/project/floors/sample2.js:80 使用。 | 不支持 | 无等价楼层字段。 | 上楼只作为图块 id 出现,不是楼层字段;not planned。 | ## 8. 地图与事件存储(10 项) @@ -623,7 +622,7 @@ | 523 | 事件存储 | D:/github/mota-js/libs/events.js:945-959 事件按类型字符串分发(`_action_*`) | 支持 | `IGameEventStore.addEvent` 与 `getEvent`(`packages-user/data-common/src/store/types.ts:296-318`),事件实现为脚本 AST。 | 旧 JSON 事件数组加类型分发改为事件 id 加脚本 AST。 | | 524 | 事件触发器 | D:/github/mota-js/libs/maps.js:242-246 触发器是字符串:battle/getItem/openDoor/changeFloor/pushBox/ski/action/custom/null | 支持 | `EventTrigger` 十一项(`packages-user/data-common/src/event/types.ts:7-30`)。 | 旧字符串触发器改为枚举,旧 custom 无同名成员。 | | 525 | 点事件 | D:/github/mota-js/project/floors/MT0.js:40 前景/背景与楼层事件共同决定格上表现 | 支持 | `IMapLayer.pointEvents`(`packages-user/data-base/src/map/types.ts:470-476`)。 | 点事件容器存在,旧前景图层由新图层配置表达。 | -| 526 | 地图伤害画布 | D:/github/mota-js/libs/core.js:114 damage 画布用于绘制伤害数字/区域 | 不支持 | 无等价数据字段。 | 伤害画布属渲染扩展,本文件不判渲染实现。 | +| 526 | 地图伤害画布 | 旧用 `core.bigmap.canvas` 中的 damage 专用画布;`core.status.damage` 保存伤害数字/区域数据,`control.drawDamage` 用 `fillBoldText` 绘制,带视口裁剪与透明度 | 不支持 | 无专用伤害画布或等价数据字段;自行组合文字/图形接口需维护数字生命周期、位置、透明度与裁剪 | 按用户确认仍判不支持。 | ## 9. 内容表 @@ -653,19 +652,19 @@ | 539 | main 配置 bgms | D:/github/mota-js/project/data.js:26 定义该键。 | 支持 | `src/content/audio/.list.jsonc`。 | 音频清单独立。 | | 540 | main 配置 sounds | D:/github/mota-js/project/data.js:29 定义该键。 | 支持 | `src/content/audio/.list.jsonc`。 | 音频清单独立。 | | 541 | main 配置 fonts | D:/github/mota-js/project/data.js:52 定义该键。 | 支持 | `src/content/font/.list.jsonc`。 | 字体清单独立。 | -| 542 | main 配置 nameMap | D:/github/mota-js/project/data.js:53 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现。 | +| 542 | main 配置 nameMap | D:/github/mota-js/project/data.js:53 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现;not planned。 | | 543 | main 配置 levelChoose | D:/github/mota-js/project/data.js:79 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现。 | | 544 | main 配置 equipName | D:/github/mota-js/project/data.js:122 定义该键。 | 支持 | `src/content` 下的 `core` 配置 的 `init.hero.equipSlots`。 | 名称数组一致。 | | 545 | main 配置 startBgm | D:/github/mota-js/project/data.js:126 定义该键。 | 部分支持 | `packages/audio/src/bgm.ts:29-149` 提供播放能力。 | 没有起始音乐配置字段,需要事件或启动逻辑调用。 | -| 546 | main 配置 styles | D:/github/mota-js/project/data.js:127 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现。 | +| 546 | main 配置 styles | D:/github/mota-js/project/data.js:127 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现;not planned。 | | 547 | main 配置 splitImages | D:/github/mota-js/project/data.js:156 定义该键。 | 支持 | `src/content/texture/.list.jsonc`。 | 拆分图改为贴图清单。 | | 548 | firstData 配置 title | D:/github/mota-js/project/data.js:166 定义该键。 | 支持 | `src/content` 下的 `core` 配置 的 `title`。 | 字段名一致。 | | 549 | firstData 配置 name | D:/github/mota-js/project/data.js:167 定义该键。 | 支持 | `src/content` 下的 `core` 配置 的 `name`。 | 字段名一致。 | | 550 | firstData 配置 version | D:/github/mota-js/project/data.js:168 定义该键。 | 支持 | `src/content` 下的 `core` 配置 的 `version`。 | 字段名一致。 | | 551 | firstData 配置 floorId | D:/github/mota-js/project/data.js:169 定义该键。 | 支持 | `src/content` 下的 `core` 配置 的 `init.hero.floorId`。 | 起始楼层改为勇者初始位置。 | | 552 | firstData 配置 hero | D:/github/mota-js/project/data.js:170 定义该键。 | 支持 | `src/content` 下的 `core` 配置 的 `init.hero.attribute`。 | 初始属性字段一致。 | -| 553 | firstData 配置 startCanvas | D:/github/mota-js/project/data.js:199 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现。 | -| 554 | firstData 配置 startText | D:/github/mota-js/project/data.js:551 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现。 | +| 553 | firstData 配置 startCanvas | D:/github/mota-js/project/data.js:199 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现;not planned。 | +| 554 | firstData 配置 startText | D:/github/mota-js/project/data.js:551 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现;not planned。 | | 555 | firstData 配置 shops | D:/github/mota-js/project/data.js:559 定义该键。 | 支持 | `src/content` 下的 `core` 配置 的 `init.shop`。 | 商店配置保留。 | | 556 | firstData 配置 levelUp | D:/github/mota-js/project/data.js:679 定义该键。 | 不支持 | 无等价配置。 | 现有接口无法确认可简单实现。 | | 557 | values 配置 lavaDamage | D:/github/mota-js/project/data.js:721 定义该键。 | 不支持 | 无等价数值。 | 现有接口无法确认可简单实现,岩浆伤害需由地图伤害模块按内容配置。 | @@ -727,8 +726,8 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 606 | 公共事件 `加点事件` | D:/github/mota-js/project/events.js:4 有 2 条语句。 | 支持 | `BlockEventType.CommonEvent`(`packages-user/data-system/src/event/types.ts:18`)加 `IGameEventStore`(`packages-user/data-common/src/store/types.ts:296-318`)。 | 引擎能力存在,内容尚未迁移同名公共事件。 | -| 607 | 公共事件 `回收钥匙商店` | D:/github/mota-js/project/events.js:48 有 4 条语句。 | 支持 | `BlockEventType.CommonEvent`(`packages-user/data-system/src/event/types.ts:18`)加 `IGameEventStore`(`packages-user/data-common/src/store/types.ts:296-318`)。 | 引擎能力存在,内容尚未迁移同名公共事件。 | +| 606 | 公共事件 `加点事件` | D:/github/mota-js/project/events.js:4 有 2 条语句。 | 不支持 | 公共事件容器存在,但需要按新事件脚本重写原有逻辑。 | 不属于简单组合,判不支持;not planned。 | +| 607 | 公共事件 `回收钥匙商店` | D:/github/mota-js/project/events.js:48 有 4 条语句。 | 不支持 | 公共事件容器存在,但需要按新事件脚本重写原有逻辑。 | 不属于简单组合,判不支持;not planned。 | ## 10. 存档结构(9 项) @@ -748,6 +747,6 @@ ## 11. 覆盖说明 -本文件覆盖 `project/enemys.js` 的 81 条怪物、`project/items.js` 的 51 条道具、`project/maps.js` 的 224 条图块、`project/floors/*.js` 的 29 个字段、`project/data.js` 的 63 个键、`project/icons.js` 的 9 类素材与 `project/events.js` 的 2 个公共事件。合并或拆分记录:无,所有条目按旧侧粒度逐条保留。 +本文件覆盖 `project/enemys.js` 的 81 条怪物、`project/items.js` 的 51 条道具、`project/maps.js` 的 224 条图块、`project/floors/*.js` 的 29 个字段、`project/data.js` 的 63 个键、`project/icons.js` 的 9 类素材与 `project/events.js` 的 2 个公共事件。合并或拆分记录:删除旧样板不存在的 254、255 两行;其余按旧侧粒度逐条保留。 旧内容只在声明文件里出现的能力不计为支持;渲染、玩法语义与存储后端细节分别在对应分册判定。 \ No newline at end of file diff --git a/.planning/phases/09-minimum-browser-runnable/09-PARITY/02-GAMEPLAY.md b/.planning/phases/09-minimum-browser-runnable/09-PARITY/02-GAMEPLAY.md index 80e50cc..a716d53 100644 --- a/.planning/phases/09-minimum-browser-runnable/09-PARITY/02-GAMEPLAY.md +++ b/.planning/phases/09-minimum-browser-runnable/09-PARITY/02-GAMEPLAY.md @@ -59,10 +59,10 @@ | --- | --- | --- | --- | --- | --- | | 19 | 坚固与模仿临界短路 | libs/enemys.js:276 坚固或模仿直接返回空临界表 | 部分支持 | `src/data/enemy/calculator.ts:162` getCriticalLimit 对坚固返回 Infinity | 模仿未短路,仍会进入二分 | | 20 | 未破防临界 | libs/enemys.js:257 未破防时二分找最小破防攻击 | 部分支持 | `packages-user/data-system/src/combat/damage.ts:147` findNextCritical | 新无独立破防分支,用上界提前返回 | -| 21 | 线性扫描临界 | libs/enemys.js:282 useLoop 时线性扫描攻击值 | 不支持 | 无等价能力 | 检索 useLoop、criticalUseLoop 未命中,新固定二分 | +| 21 | 线性扫描临界 | libs/enemys.js:282 useLoop 时线性扫描攻击值 | 不支持 | 无等价能力 | 检索 useLoop、criticalUseLoop 未命中,新固定二分;not planned。 | | 22 | 二分临界 | libs/enemys.js:304 二分求伤害首次下降点 | 支持 | `packages-user/data-system/src/combat/damage.ts:147` 二分与精度上限 | 收敛条件不同但同为二分 | -| 23 | 回合反推临界 | libs/enemys.js:341 按回合数反推攻击临界 | 不支持 | 无等价能力 | 检索 useTurn、nextCriticals 未命中 | -| 24 | useLoop 总开关 | libs/enemys.js:243 决定线性、二分或回合反推三种算法 | 不支持 | 无等价能力 | 新固定二分,无运行时开关 | +| 23 | 回合反推临界 | libs/enemys.js:341 按回合数反推攻击临界 | 不支持 | 无等价能力 | 检索 useTurn、nextCriticals 未命中;not planned。 | +| 24 | useLoop 总开关 | libs/enemys.js:243 决定线性、二分或回合反推三种算法 | 不支持 | 无等价能力 | 新固定二分,无运行时开关;not planned。 | | 25 | 临界上界 | libs/enemys.js:272 未破防时以生命加防御为上界 | 支持 | `src/data/enemy/calculator.ts:162` getCriticalLimit 按属性给上界 | 新对攻击以外的属性用勇士最终属性 | | 26 | 单次二分 | libs/enemys.js:304 内层二分试探攻击值 | 支持 | `packages-user/data-system/src/combat/damage.ts:147` findNextCritical 改写属性后重算 | 新通过修改属性试探并依赖可修改副本 | | 27 | 伤害归零终止 | libs/enemys.js:239 伤害归零且未开负伤时结束临界表 | 部分支持 | `packages-user/data-system/src/combat/damage.ts:243` 外层循环以边界终止 | 新无显式归零终止,负伤只在计算器内夹紧 | @@ -123,163 +123,163 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 53 | `text` | libs/events.js:1379 显示文本面板并推进脚本 | 部分支持 | `packages-user/client-base/src/components/textbox.tsx` + `packages-user/data-system/src/event/types.ts:99` 注册内建函数 | 文本面板已存在,事件层需注册内建函数适配 | -| 54 | `moveTextBox` | libs/events.js:1401 移动文本面板到指定位置 | 部分支持 | `packages-user/client-base/src/components/textbox.tsx` 的位置属性 | 面板位置可改,无同名语句 | -| 55 | `clearTextBox` | libs/events.js:1407 清空文本面板内容 | 部分支持 | `packages-user/client-base/src/components/textbox.tsx` 的内容属性 | 清空能力存在,需事件层适配 | -| 56 | `autoText` | libs/events.js:1412 文本按队列自动播放 | 部分支持 | `packages-user/client-base/src/components/textboxTyper.ts:247` 打字机 | 打字机能力存在,队列语句需适配 | +| 53 | `text` | libs/events.js:1379 显示文本面板并推进脚本 | 不支持 | `packages-user/client-base/src/components/textbox.tsx` + `packages-user/data-system/src/event/types.ts:99` 注册内建函数 | 文本面板已存在,事件层需注册内建函数适配 | +| 54 | `moveTextBox` | libs/events.js:1401 移动文本面板到指定位置 | 不支持 | `packages-user/client-base/src/components/textbox.tsx` 的位置属性 | 面板位置可改,无同名语句 | +| 55 | `clearTextBox` | libs/events.js:1407 清空文本面板内容 | 不支持 | `packages-user/client-base/src/components/textbox.tsx` 的内容属性 | 清空能力存在,需事件层适配 | +| 56 | `autoText` | libs/events.js:1412 文本按队列自动播放 | 不支持 | `packages-user/client-base/src/components/textboxTyper.ts:247` 打字机 | 打字机能力存在,队列语句需适配 | | 57 | `scrollText` | libs/events.js:1419 滚动文本 | 不支持 | 无等价能力 | 检索滚动文本、scrollText 未命中 | -| 58 | `comment` | libs/events.js:1425 注释语句,无运行时行为 | 支持 | `packages/anon-tokyo/src/type.ts:23` Block 可留空 | 旧语句无行为,新空块等价 | -| 59 | `_label` | libs/events.js:1429 标签与跳转 | 支持 | `packages/anon-tokyo/src/type.ts:23` Block 与 `packages/anon-tokyo/src/type.ts:82` ExitStatement | 新用结构化块与出口,无 goto | -| 60 | `setText` | libs/events.js:1433 设置文本变量并刷新 | 部分支持 | `packages-user/client-base/src/components/textbox.tsx` + `packages/anon-tokyo/src/type.ts:25` Expression | 可用表达式改状态后刷新面板 | -| 61 | `tip` | libs/events.js:1438 显示浮动提示 | 支持 | `src/data/enemy/hook.ts:85` emitTip + `packages-user/client-base/src/components/tip.tsx` | 提示通道存在,事件层可用表达式调用 | +| 58 | `comment` | libs/events.js:1425 注释语句,无运行时行为 | 不支持 | `packages/anon-tokyo/src/type.ts:23` Block 可留空 | 旧语句无行为,新空块等价 | +| 59 | `_label` | libs/events.js:1429 标签与跳转 | 不支持 | `packages/anon-tokyo/src/type.ts:23` Block 与 `packages/anon-tokyo/src/type.ts:82` ExitStatement | 新用结构化块与出口,无 goto | +| 60 | `setText` | libs/events.js:1433 设置文本变量并刷新 | 不支持 | `packages-user/client-base/src/components/textbox.tsx` + `packages/anon-tokyo/src/type.ts:25` Expression | 可用表达式改状态后刷新面板 | +| 61 | `tip` | libs/events.js:1438 显示浮动提示 | 不支持 | `src/data/enemy/hook.ts:85` emitTip + `packages-user/client-base/src/components/tip.tsx` | 提示通道存在,事件层可用表达式调用 | ### 7.2 图块与地图对象 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 62 | `show` | libs/events.js:1443 重新显示被隐藏的图块 | 部分支持 | `packages-user/data-base/src/map/mapLayer.ts` 动态图块增删 | 新无重新显示隐藏图块的状态 | -| 63 | `hide` | libs/events.js:1456 隐藏或删除图块 | 支持 | `src/data/event/map.ts:61` EventRemoveBlock | 旧支持隐藏与删除,新只保留删除 | -| 64 | `setBlock` | libs/events.js:1470 在坐标放置图块 | 支持 | `src/data/event/map.ts:12` EventSetBlock | 新参数为 x、y、tile,无动画时长 | -| 65 | `setBlockOpacity` | libs/events.js:1484 设置图块透明度 | 部分支持 | `packages/render-vue/src/tag.ts:71` 图块渲染标签的透明度属性 | 渲染能力存在,事件层需适配 | -| 66 | `setBlockFilter` | libs/events.js:1497 设置图块滤镜 | 部分支持 | `packages/render-vue/src/tag.ts:71` 标签滤镜属性 | 渲染能力存在,事件层需适配 | -| 67 | `turnBlock` | libs/events.js:1505 改变图块朝向 | 部分支持 | `packages-user/data-base/src/map/tile.ts:56` setFaceDirection | 数据层可改朝向,无同名语句 | -| 68 | `showFloorImg` | libs/events.js:1513 显示楼层图片 | 部分支持 | `packages-user/client-modules/src/render/scene.ts` 场景图 | 渲染层可挂楼层图,事件层需适配 | -| 69 | `hideFloorImg` | libs/events.js:1517 隐藏楼层图片 | 部分支持 | `packages-user/client-modules/src/render/scene.ts` 场景图 | 同上,需事件层适配 | -| 70 | `showBgFgMap` | libs/events.js:1521 显示背景或前景地图 | 部分支持 | `src/client/ui/background.tsx` | 背景组件存在,无同名语句 | -| 71 | `hideBgFgMap` | libs/events.js:1525 隐藏背景或前景地图 | 部分支持 | `src/client/ui/background.tsx` | 同上,需事件层适配 | -| 72 | `setBgFgBlock` | libs/events.js:1529 设置背景或前景图块 | 部分支持 | `packages-user/client-modules/src/render/scene.ts` + `src/client/ui/background.tsx` | 两层可组合,无声明式语句 | -| 73 | `follow` | libs/events.js:1537 增加跟随者 | 支持 | `packages-user/data-base/src/hero/follower.ts:131` addFollower | 数据层可直接加跟随者 | -| 74 | `unfollow` | libs/events.js:1542 移除跟随者 | 支持 | `packages-user/data-base/src/hero/follower.ts:176` getFollower | 可取出后移除,能力一致 | +| 62 | `show` | libs/events.js:1443 重新显示被隐藏的图块 | 不支持 | `packages-user/data-base/src/map/mapLayer.ts` 动态图块增删 | 新无重新显示隐藏图块的状态 | +| 63 | `hide` | libs/events.js:1456 隐藏或删除图块 | 不支持 | `src/data/event/map.ts:61` EventRemoveBlock | 旧支持隐藏与删除,新只保留删除 | +| 64 | `setBlock` | libs/events.js:1470 在坐标放置图块 | 不支持 | `src/data/event/map.ts:12` EventSetBlock | 新参数为 x、y、tile,无动画时长 | +| 65 | `setBlockOpacity` | libs/events.js:1484 设置图块透明度 | 不支持 | `packages/render-vue/src/tag.ts:71` 图块渲染标签的透明度属性 | 渲染能力存在,事件层需适配 | +| 66 | `setBlockFilter` | libs/events.js:1497 设置图块滤镜 | 不支持 | `packages/render-vue/src/tag.ts:71` 标签滤镜属性 | 渲染能力存在,事件层需适配 | +| 67 | `turnBlock` | libs/events.js:1505 改变图块朝向 | 不支持 | `packages-user/data-base/src/map/tile.ts:56` setFaceDirection | 数据层可改朝向,无同名语句 | +| 68 | `showFloorImg` | libs/events.js:1513 显示楼层图片 | 不支持 | `packages-user/client-modules/src/render/scene.ts` 场景图 | 渲染层可挂楼层图,事件层需适配 | +| 69 | `hideFloorImg` | libs/events.js:1517 隐藏楼层图片 | 不支持 | `packages-user/client-modules/src/render/scene.ts` 场景图 | 同上,需事件层适配 | +| 70 | `showBgFgMap` | libs/events.js:1521 显示背景或前景地图 | 不支持 | `src/client/ui/background.tsx` | 背景组件存在,无同名语句 | +| 71 | `hideBgFgMap` | libs/events.js:1525 隐藏背景或前景地图 | 不支持 | `src/client/ui/background.tsx` | 同上,需事件层适配 | +| 72 | `setBgFgBlock` | libs/events.js:1529 设置背景或前景图块 | 不支持 | `packages-user/client-modules/src/render/scene.ts` + `src/client/ui/background.tsx` | 两层可组合,无声明式语句 | +| 73 | `follow` | libs/events.js:1537 增加跟随者 | 不支持 | `packages-user/data-base/src/hero/follower.ts:131` addFollower | 数据层可直接加跟随者 | +| 74 | `unfollow` | libs/events.js:1542 移除跟随者 | 不支持 | `packages-user/data-base/src/hero/follower.ts:176` getFollower | 可取出后移除,能力一致 | ### 7.3 动画与视口 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 75 | `animate` | libs/events.js:1547 播放地图或图块动画 | 部分支持 | `packages-user/client-modules/src/render/fx/base.ts` + `packages/animate` | 动画运行时存在,事件层需注册内建函数 | -| 76 | `stopAnimate` | libs/events.js:1556 停止动画 | 部分支持 | `packages-user/client-modules/src/render/fx/base.ts` | 停止能力存在,需事件层适配 | -| 77 | `setViewport` | libs/events.js:1561 设置视口位置与范围 | 部分支持 | `packages-user/client-base/src/map/viewport.ts:13` + `packages-user/client-base/src/map/renderer.ts:412` | 视口控制存在,数据侧需桥接 | -| 78 | `lockViewport` | libs/events.js:1572 锁定视口 | 部分支持 | `packages-user/client-modules/src/render/scene.ts` | 锁定可由场景层实现,无同名语句 | +| 75 | `animate` | libs/events.js:1547 播放地图或图块动画 | 不支持 | `packages-user/client-modules/src/render/fx/base.ts` + `packages/animate` | 动画运行时存在,事件层需注册内建函数 | +| 76 | `stopAnimate` | libs/events.js:1556 停止动画 | 不支持 | `packages-user/client-modules/src/render/fx/base.ts` | 停止能力存在,需事件层适配 | +| 77 | `setViewport` | libs/events.js:1561 设置视口位置与范围 | 不支持 | `packages-user/client-base/src/map/viewport.ts:13` + `packages-user/client-base/src/map/renderer.ts:412` | 视口控制存在,数据侧需桥接 | +| 78 | `lockViewport` | libs/events.js:1572 锁定视口 | 不支持 | `packages-user/client-modules/src/render/scene.ts` | 锁定可由场景层实现,无同名语句 | ### 7.4 移动、跳跃与楼层 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 79 | `move` | libs/events.js:1577 移动图块若干格 | 支持 | `src/data/event/map.ts:34` EventMoveBlock | 新有 steps、keepEvent、safe,无动画时长 | -| 80 | `moveAction` | libs/events.js:1582 勇士前进一格并检查事件 | 支持 | `src/data/event/hero.ts:24` EventStepHero | 新只前进一格,事件检查交给移动钩子 | -| 81 | `moveHero` | libs/events.js:1603 勇士移动若干格 | 支持 | `src/data/event/hero.ts:5` EventMoveHero | 新参数为步数,执行期间会暂停录像 | -| 82 | `jump` | libs/events.js:1607 图块跳跃到目标点 | 部分支持 | `packages-user/data-base/src/map/mover.ts:62` ObjectMoveType.Jump | 移动器支持跳跃,事件层无语句 | -| 83 | `jumpHero` | libs/events.js:1624 勇士跳跃到目标点 | 部分支持 | `packages-user/data-base/src/hero/mover.ts:99` ObjectMoveType.Jump | 同上,需事件层适配 | -| 84 | `changeFloor` | libs/events.js:1634 切换楼层并支持楼层糖 | 支持 | `packages-user/data-base/src/hero/location.ts:55` setFloor + `EventTrigger.OnBeforeChangeFloor` | 新无楼层糖,目标需明确 | -| 85 | `changePos` | libs/events.js:1640 设置勇士坐标 | 支持 | `packages-user/data-base/src/hero/location.ts:62` setPos | 目标坐标可直接设置 | +| 79 | `move` | libs/events.js:1577 移动图块若干格 | 不支持 | `src/data/event/map.ts:34` EventMoveBlock | 新有 steps、keepEvent、safe,无动画时长 | +| 80 | `moveAction` | libs/events.js:1582 勇士前进一格并检查事件 | 不支持 | `src/data/event/hero.ts:24` EventStepHero | 新只前进一格,事件检查交给移动钩子 | +| 81 | `moveHero` | libs/events.js:1603 勇士移动若干格 | 不支持 | `src/data/event/hero.ts:5` EventMoveHero | 新参数为步数,执行期间会暂停录像 | +| 82 | `jump` | libs/events.js:1607 图块跳跃到目标点 | 不支持 | `packages-user/data-base/src/map/mover.ts:62` ObjectMoveType.Jump | 移动器支持跳跃,事件层无语句 | +| 83 | `jumpHero` | libs/events.js:1624 勇士跳跃到目标点 | 不支持 | `packages-user/data-base/src/hero/mover.ts:99` ObjectMoveType.Jump | 同上,需事件层适配 | +| 84 | `changeFloor` | libs/events.js:1634 切换楼层并支持楼层糖 | 不支持 | `packages-user/data-base/src/hero/location.ts:55` setFloor + `EventTrigger.OnBeforeChangeFloor` | 新无楼层糖,目标需明确 | +| 85 | `changePos` | libs/events.js:1640 设置勇士坐标 | 不支持 | `packages-user/data-base/src/hero/location.ts:62` setPos | 目标坐标可直接设置 | ### 7.5 图像、立绘与特效 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 86 | `showImage` | libs/events.js:1656 显示图片或立绘 | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` | 图像特效存在,事件层需注册内建函数 | -| 87 | `showTextImage` | libs/events.js:1668 显示带文字的图片 | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` + `packages-user/client-base/src/components/textbox.tsx` | 图层与文本可组合,需适配 | -| 88 | `hideImage` | libs/events.js:1679 隐藏图片 | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` | 隐藏能力存在,需事件层适配 | -| 89 | `showGif` | libs/events.js:1684 显示 GIF | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` + `packages/render/src/assets/animater.ts:6` 纹理动画 | 动画纹理可组合,无同名语句 | -| 90 | `moveImage` | libs/events.js:1690 移动图片 | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` + `packages/animate` | 位移动画可组合,需适配 | -| 91 | `rotateImage` | libs/events.js:1700 旋转图片 | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` 变换属性 | 变换能力存在,事件层需适配 | -| 92 | `scaleImage` | libs/events.js:1710 缩放图片 | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` 变换属性 | 同上,需事件层适配 | -| 93 | `setCurtain` | libs/events.js:1720 设置幕布 | 部分支持 | `src/client/ui/background.tsx` | 遮罩组件存在,无同名语句 | -| 94 | `screenFlash` | libs/events.js:1734 闪屏 | 部分支持 | `packages-user/client-modules/src/render/fx/base.ts` | 特效运行时存在,需事件层适配 | -| 95 | `setWeather` | libs/events.js:1738 切换天气 | 部分支持 | `packages-user/client-modules/src/render/weather/controller.ts` + `packages-user/client-modules/src/render/weather/presets/index.ts` | 天气预设存在,事件层需适配 | +| 86 | `showImage` | libs/events.js:1656 显示图片或立绘 | 不支持 | `packages-user/client-modules/src/render/fx/image3d.ts` | 图像特效存在,事件层需注册内建函数 | +| 87 | `showTextImage` | libs/events.js:1668 显示带文字的图片 | 不支持 | `packages-user/client-modules/src/render/fx/image3d.ts` + `packages-user/client-base/src/components/textbox.tsx` | 图层与文本可组合,需适配 | +| 88 | `hideImage` | libs/events.js:1679 隐藏图片 | 不支持 | `packages-user/client-modules/src/render/fx/image3d.ts` | 隐藏能力存在,需事件层适配 | +| 89 | `showGif` | libs/events.js:1684 显示 GIF | 不支持 | `packages-user/client-modules/src/render/fx/image3d.ts` + `packages/render/src/assets/animater.ts:6` 纹理动画 | 动画纹理可组合,无同名语句 | +| 90 | `moveImage` | libs/events.js:1690 移动图片 | 不支持 | `packages-user/client-modules/src/render/fx/image3d.ts` + `packages/animate` | 位移动画可组合,需适配 | +| 91 | `rotateImage` | libs/events.js:1700 旋转图片 | 不支持 | `packages-user/client-modules/src/render/fx/image3d.ts` 变换属性 | 变换能力存在,事件层需适配 | +| 92 | `scaleImage` | libs/events.js:1710 缩放图片 | 不支持 | `packages-user/client-modules/src/render/fx/image3d.ts` 变换属性 | 同上,需事件层适配 | +| 93 | `setCurtain` | libs/events.js:1720 设置幕布 | 不支持 | `src/client/ui/background.tsx` | 遮罩组件存在,无同名语句 | +| 94 | `screenFlash` | libs/events.js:1734 闪屏 | 不支持 | `packages-user/client-modules/src/render/fx/base.ts` | 特效运行时存在,需事件层适配 | +| 95 | `setWeather` | libs/events.js:1738 切换天气 | 不支持 | `packages-user/client-modules/src/render/weather/controller.ts` + `packages-user/client-modules/src/render/weather/presets/index.ts` | 天气预设存在,事件层需适配 | ### 7.6 门、道具、商店、战斗与插入 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 96 | `openDoor` | libs/events.js:1746 打开门 | 支持 | `packages-user/client-base/src/map/door.ts:11` + `EventTrigger.OnAfterOpenDoor` | 门渲染与触发器存在,可组合 | -| 97 | `closeDoor` | libs/events.js:1758 关门 | 部分支持 | `packages-user/client-base/src/map/door.ts:11` MapDoorRenderer | 门状态可改,无同名语句 | -| 98 | `useItem` | libs/events.js:1763 使用道具 | 支持 | `packages-user/data-base/src/hero/items.ts:89` useItem | 数据层公开方法可直接调用 | -| 99 | `loadEquip` | libs/events.js:1775 装备道具 | 支持 | `packages-user/data-base/src/hero/equipment.ts:154` equip | 按实例与槽位装备 | -| 100 | `unloadEquip` | libs/events.js:1780 卸下装备 | 支持 | `packages-user/data-base/src/hero/equipment.ts:202` unequip | 按槽位卸下 | -| 101 | `openShop` | libs/events.js:1785 打开商店 | 支持 | `src/data/plugin/shop/system.ts` openShop | 商店系统提供打开入口 | -| 102 | `disableShop` | libs/events.js:1791 禁用商店 | 支持 | `src/data/plugin/shop/manager.ts` disableShop | 管理器提供禁用入口 | -| 103 | `battle` | libs/events.js:1796 强制战斗 | 支持 | `packages-user/data-system/src/combat/damage.ts:73` 战斗分派 | 战斗流程公开,可组合 | -| 104 | `trigger` | libs/events.js:1810 按坐标触发该点事件 | 部分支持 | `src/data/event/event.ts:43` EventInsertEvent 按 id 执行 | 新只能按事件 id,不能按坐标触发 | -| 105 | `insert` | libs/events.js:1815 插入并执行事件 | 支持 | `src/data/event/event.ts:10` EventInsertEvents + `src/data/event/event.ts:43` | 支持按 id 列表与原始语句块插入 | +| 96 | `openDoor` | libs/events.js:1746 打开门 | 不支持 | `packages-user/client-base/src/map/door.ts:11` + `EventTrigger.OnAfterOpenDoor` | 门渲染与触发器存在,可组合 | +| 97 | `closeDoor` | libs/events.js:1758 关门 | 不支持 | `packages-user/client-base/src/map/door.ts:11` MapDoorRenderer | 门状态可改,无同名语句 | +| 98 | `useItem` | libs/events.js:1763 使用道具 | 不支持 | `packages-user/data-base/src/hero/items.ts:89` useItem | 数据层公开方法可直接调用 | +| 99 | `loadEquip` | libs/events.js:1775 装备道具 | 不支持 | `packages-user/data-base/src/hero/equipment.ts:154` equip | 按实例与槽位装备 | +| 100 | `unloadEquip` | libs/events.js:1780 卸下装备 | 不支持 | `packages-user/data-base/src/hero/equipment.ts:202` unequip | 按槽位卸下 | +| 101 | `openShop` | libs/events.js:1785 打开商店 | 不支持 | `src/data/plugin/shop/system.ts` openShop | 商店系统提供打开入口 | +| 102 | `disableShop` | libs/events.js:1791 禁用商店 | 不支持 | `src/data/plugin/shop/manager.ts` disableShop | 管理器提供禁用入口 | +| 103 | `battle` | libs/events.js:1796 强制战斗 | 不支持 | `packages-user/data-system/src/combat/damage.ts:73` 战斗分派 | 战斗流程公开,可组合 | +| 104 | `trigger` | libs/events.js:1810 按坐标触发该点事件 | 不支持 | `src/data/event/event.ts:43` EventInsertEvent 按 id 执行 | 新只能按事件 id,不能按坐标触发 | +| 105 | `insert` | libs/events.js:1815 插入并执行事件 | 不支持 | `src/data/event/event.ts:10` EventInsertEvents + `src/data/event/event.ts:43` | 支持按 id 列表与原始语句块插入 | ### 7.7 音频 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 106 | `playBgm` | libs/events.js:1839 播放背景音乐 | 部分支持 | `packages/audio/src/bgm.ts` | 音频运行时存在,事件层需注册内建函数 | -| 107 | `pauseBgm` | libs/events.js:1845 暂停背景音乐 | 部分支持 | `packages/audio/src/bgm.ts` | 暂停能力存在,需事件层适配 | -| 108 | `resumeBgm` | libs/events.js:1850 恢复背景音乐 | 部分支持 | `packages/audio/src/bgm.ts` | 恢复能力存在,需事件层适配 | -| 109 | `loadBgm` | libs/events.js:1855 预载背景音乐 | 部分支持 | `packages/audio/src/bgm.ts` | 预载能力存在,需事件层适配 | -| 110 | `freeBgm` | libs/events.js:1860 释放背景音乐 | 部分支持 | `packages/audio/src/bgm.ts` | 释放能力存在,需事件层适配 | -| 111 | `playSound` | libs/events.js:1865 播放音效 | 部分支持 | `packages/audio/src/sound.ts` | 音效通道存在,事件层需适配 | -| 112 | `stopSound` | libs/events.js:1875 停止音效 | 部分支持 | `packages/audio/src/sound.ts` | 停止能力存在,需事件层适配 | -| 113 | `setVolume` | libs/events.js:1880 设置音量 | 部分支持 | `packages/audio/src/context.ts:77` setVolume | 音量接口存在,事件层需适配 | +| 106 | `playBgm` | libs/events.js:1839 播放背景音乐 | 不支持 | `packages/audio/src/bgm.ts` | 音频运行时存在,事件层需注册内建函数 | +| 107 | `pauseBgm` | libs/events.js:1845 暂停背景音乐 | 不支持 | `packages/audio/src/bgm.ts` | 暂停能力存在,需事件层适配 | +| 108 | `resumeBgm` | libs/events.js:1850 恢复背景音乐 | 不支持 | `packages/audio/src/bgm.ts` | 恢复能力存在,需事件层适配 | +| 109 | `loadBgm` | libs/events.js:1855 预载背景音乐 | 不支持 | `packages/audio/src/bgm.ts` | 预载能力存在,需事件层适配 | +| 110 | `freeBgm` | libs/events.js:1860 释放背景音乐 | 不支持 | `packages/audio/src/bgm.ts` | 释放能力存在,需事件层适配 | +| 111 | `playSound` | libs/events.js:1865 播放音效 | 不支持 | `packages/audio/src/sound.ts` | 音效通道存在,事件层需适配 | +| 112 | `stopSound` | libs/events.js:1875 停止音效 | 不支持 | `packages/audio/src/sound.ts` | 停止能力存在,需事件层适配 | +| 113 | `setVolume` | libs/events.js:1880 设置音量 | 不支持 | `packages/audio/src/context.ts:77` setVolume | 音量接口存在,事件层需适配 | | 114 | `setBgmSpeed` | libs/events.js:1886 设置背景音乐速度 | 不支持 | 无等价能力 | 检索播放速率未命中,音频层没有变速接口 | ### 7.8 值与实体设置 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 115 | `setValue` | libs/events.js:1891 设置数值变量 | 支持 | `packages/anon-tokyo/src/type.ts:25` StatementType.Expression | 表达式可直接赋值 | -| 116 | `addValue` | libs/events.js:1905 对数值变量做加减 | 支持 | `packages/anon-tokyo/src/type.ts:25` StatementType.Expression | 表达式可用复合赋值 | -| 117 | `setEnemy` | libs/events.js:1910 修改怪物模板 | 支持 | `packages-user/data-base/src/enemy/manager.ts:53` createEnemy + addPrefab | 怪物管理器可建模板 | +| 115 | `setValue` | libs/events.js:1891 设置数值变量 | 不支持 | `packages/anon-tokyo/src/type.ts:25` StatementType.Expression | 表达式可直接赋值 | +| 116 | `addValue` | libs/events.js:1905 对数值变量做加减 | 不支持 | `packages/anon-tokyo/src/type.ts:25` StatementType.Expression | 表达式可用复合赋值 | +| 117 | `setEnemy` | libs/events.js:1910 修改怪物模板 | 不支持 | `packages-user/data-base/src/enemy/manager.ts:53` createEnemy + addPrefab | 怪物管理器可建模板 | | 118 | `setEnemyOnPoint` | libs/events.js:1915 在点放置怪物 | 不支持 | 无等价能力 | 新以事件层图块表达怪物,无点怪物概念 | | 119 | `resetEnemyOnPoint` | libs/events.js:1923 重置点怪物 | 不支持 | 无等价能力 | 同上,新无点怪物概念 | | 120 | `moveEnemyOnPoint` | libs/events.js:1938 移动点怪物 | 不支持 | 无等价能力 | 同上,新无点怪物概念 | -| 121 | `setEquip` | libs/events.js:1949 设置装备属性 | 支持 | `packages-user/data-base/src/hero/equipment.ts:154` equip | 装备数据可写 | -| 122 | `setFloor` | libs/events.js:1954 设置楼层属性 | 支持 | `packages-user/data-base/src/hero/location.ts:55` setFloor | 楼层可写 | +| 121 | `setEquip` | libs/events.js:1949 设置装备属性 | 不支持 | `packages-user/data-base/src/hero/equipment.ts:154` equip | 装备数据可写 | +| 122 | `setFloor` | libs/events.js:1954 设置楼层属性 | 不支持 | `packages-user/data-base/src/hero/location.ts:55` setFloor | 楼层可写 | | 123 | `setGlobalAttribute` | libs/events.js:1959 设置全局属性 | 不支持 | 无等价能力 | 新无全局属性存储 | -| 124 | `setGlobalValue` | libs/events.js:1964 设置全局数值 | 支持 | `packages-user/data-base/src/flag/types.ts:101` setFieldValue | flag 字段可存全局数值 | -| 125 | `setGlobalFlag` | libs/events.js:1969 设置全局开关 | 支持 | `packages-user/data-base/src/flag/types.ts:101` setFieldValue | flag 字段可存布尔值 | +| 124 | `setGlobalValue` | libs/events.js:1964 设置全局数值 | 不支持 | `packages-user/data-base/src/flag/types.ts:101` setFieldValue | flag 字段可存全局数值 | +| 125 | `setGlobalFlag` | libs/events.js:1969 设置全局开关 | 不支持 | `packages-user/data-base/src/flag/types.ts:101` setFieldValue | flag 字段可存布尔值 | | 126 | `setNameMap` | libs/events.js:1974 设置名称映射 | 不支持 | 无等价能力 | 新无名称映射表,内容表归数据分册 | -| 127 | `setHeroIcon` | libs/events.js:1979 设置勇士图标 | 部分支持 | `packages-user/client-base/src/components/misc.tsx:13` Icon + `packages-user/data-base/src/hero/rendering.ts:11` | 图标组件与渲染数据可组合 | +| 127 | `setHeroIcon` | libs/events.js:1979 设置勇士图标 | 不支持 | `packages-user/client-base/src/components/misc.tsx:13` Icon + `packages-user/data-base/src/hero/rendering.ts:11` | 图标组件与渲染数据可组合 | ### 7.9 交互与流程控制 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 128 | `input` | libs/events.js:1984 弹出数字输入框 | 部分支持 | `src/client/ui/inputBox.tsx:112` InputBox + `src/client/ui/inputBox.tsx:287` getInput | 输入框组件存在,事件层需适配 | -| 129 | `input2` | libs/events.js:1993 弹出文本输入框 | 部分支持 | `src/client/ui/inputBox.tsx:112` InputBox | 同上,需事件层适配 | -| 130 | `if` | libs/events.js:2026 条件分支 | 支持 | `packages/anon-tokyo/src/type.ts:50` StatementType.If | 新支持多分支与否则 | -| 131 | `switch` | libs/events.js:2041 多分支匹配 | 支持 | `packages/anon-tokyo/src/type.ts:56` StatementType.Switch | 新有 pattern、branches、otherwise | -| 132 | `choices` | libs/events.js:2066 显示选项面板 | 部分支持 | `src/client/ui/choices.tsx` | 选项组件存在,事件层需适配 | -| 133 | `confirm` | libs/events.js:2159 显示确认框 | 部分支持 | `src/client/ui/choices.tsx:103` ConfirmBox | 确认组件存在,事件层需适配 | -| 134 | `for` | libs/events.js:2215 三表达式循环 | 支持 | `packages/anon-tokyo/src/type.ts:63` StatementType.Loop | 新用初始化、条件、迭代表达 | -| 135 | `forEach` | libs/events.js:2262 遍历数组 | 部分支持 | `packages/anon-tokyo/src/type.ts:63` StatementType.Loop + `packages/anon-tokyo/src/type.ts:25` Expression | 无专用语句,需手写遍历 | -| 136 | `while` | libs/events.js:2284 条件循环 | 支持 | `packages/anon-tokyo/src/type.ts:63` StatementType.Loop | 只填条件即 while | -| 137 | `dowhile` | libs/events.js:2302 先执行后判断循环 | 支持 | `packages/anon-tokyo/src/type.ts:63` StatementType.Loop | skipInitialCheck 对应 do-while | -| 138 | `break` | libs/events.js:2318 跳出循环 | 支持 | `packages/anon-tokyo/src/type.ts:73` StatementType.Break | 支持循环标签 | -| 139 | `continue` | libs/events.js:2327 进入下一轮循环 | 支持 | `packages/anon-tokyo/src/type.ts:78` StatementType.Continue | 无标签 | +| 128 | `input` | libs/events.js:1984 弹出数字输入框 | 不支持 | `src/client/ui/inputBox.tsx:112` InputBox + `src/client/ui/inputBox.tsx:287` getInput | 输入框组件存在,事件层需适配 | +| 129 | `input2` | libs/events.js:1993 弹出文本输入框 | 不支持 | `src/client/ui/inputBox.tsx:112` InputBox | 同上,需事件层适配 | +| 130 | `if` | libs/events.js:2026 条件分支 | 不支持 | `packages/anon-tokyo/src/type.ts:50` StatementType.If | 新支持多分支与否则 | +| 131 | `switch` | libs/events.js:2041 多分支匹配 | 不支持 | `packages/anon-tokyo/src/type.ts:56` StatementType.Switch | 新有 pattern、branches、otherwise | +| 132 | `choices` | libs/events.js:2066 显示选项面板 | 不支持 | `src/client/ui/choices.tsx` | 选项组件存在,事件层需适配 | +| 133 | `confirm` | libs/events.js:2159 显示确认框 | 不支持 | `src/client/ui/choices.tsx:103` ConfirmBox | 确认组件存在,事件层需适配 | +| 134 | `for` | libs/events.js:2215 三表达式循环 | 不支持 | `packages/anon-tokyo/src/type.ts:63` StatementType.Loop | 新用初始化、条件、迭代表达 | +| 135 | `forEach` | libs/events.js:2262 遍历数组 | 不支持 | `packages/anon-tokyo/src/type.ts:63` StatementType.Loop + `packages/anon-tokyo/src/type.ts:25` Expression | 无专用语句,需手写遍历 | +| 136 | `while` | libs/events.js:2284 条件循环 | 不支持 | `packages/anon-tokyo/src/type.ts:63` StatementType.Loop | 只填条件即 while | +| 137 | `dowhile` | libs/events.js:2302 先执行后判断循环 | 不支持 | `packages/anon-tokyo/src/type.ts:63` StatementType.Loop | skipInitialCheck 对应 do-while | +| 138 | `break` | libs/events.js:2318 跳出循环 | 不支持 | `packages/anon-tokyo/src/type.ts:73` StatementType.Break | 支持循环标签 | +| 139 | `continue` | libs/events.js:2327 进入下一轮循环 | 不支持 | `packages/anon-tokyo/src/type.ts:78` StatementType.Continue | 无标签 | | 140 | `win` | libs/events.js:2344 触发胜利流程 | 不支持 | 无等价能力 | 检索 win、胜利、victory 未命中,样板覆写在 project/functions.js:55 | | 141 | `lose` | libs/events.js:2348 触发失败流程 | 不支持 | 无等价能力 | 检索 lose、失败、defeat 未命中,样板覆写在 project/functions.js:84 | | 142 | `restart` | libs/events.js:2352 重新开始游戏 | 不支持 | 无等价能力 | 检索 restart、重新开始 未命中,归运行时流程 | -| 143 | `function` | libs/events.js:2356 定义并执行函数 | 支持 | `packages/anon-tokyo/src/type.ts:16` FunctionDeclare + `packages/anon-tokyo/src/interpreter.ts:143` | 新为语法级函数声明,能力更强 | +| 143 | `function` | libs/events.js:2356 定义并执行函数 | 不支持 | `packages/anon-tokyo/src/type.ts:16` FunctionDeclare + `packages/anon-tokyo/src/interpreter.ts:143` | 新为语法级函数声明,能力更强 | | 144 | `update` | libs/events.js:2369 立即刷新状态栏 | 不支持 | 无等价能力 | 新无事件队列刷新语义 | ### 7.10 状态栏、外观与异步 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 145 | `showStatusBar` | libs/events.js:2374 显示状态栏 | 部分支持 | `src/client/ui/statusBar.tsx` | 状态栏组件存在,事件层需适配 | -| 146 | `hideStatusBar` | libs/events.js:2379 隐藏状态栏 | 部分支持 | `src/client/ui/statusBar.tsx` | 同上,需事件层适配 | -| 147 | `showHero` | libs/events.js:2384 显示勇士 | 部分支持 | `packages-user/data-base/src/hero/rendering.ts:11` HeroRendering | 渲染数据可控制显隐 | -| 148 | `hideHero` | libs/events.js:2389 隐藏勇士 | 部分支持 | `packages-user/data-base/src/hero/rendering.ts:11` HeroRendering | 同上,需事件层适配 | -| 149 | `setHeroOpacity` | libs/events.js:2394 设置勇士透明度 | 支持 | `packages-user/data-base/src/hero/rendering.ts:29` setAlpha | 透明度接口可直接调用 | -| 150 | `vibrate` | libs/events.js:2406 屏幕震动 | 部分支持 | `packages-user/client-modules/src/render/scene.ts` 场景变换 | 场景可做位移,无同名语句 | -| 151 | `sleep` | libs/events.js:2410 延时若干毫秒 | 部分支持 | `packages-user/data-system/src/event/types.ts:99` 注册异步内建函数 | 可写异步内建函数包装定时器 | -| 152 | `wait` | libs/events.js:2417 等待输入并带超时 | 部分支持 | `src/client/ui/waitBox.tsx` | 等待面板存在,事件层需适配 | -| 153 | `waitAsync` | libs/events.js:2536 等待异步动画或音效结束 | 支持 | `packages/anon-tokyo/src/type.ts:25` 异步表达式与 await | 内建函数可为异步并由 await 汇合 | +| 145 | `showStatusBar` | libs/events.js:2374 显示状态栏 | 不支持 | `src/client/ui/statusBar.tsx` | 状态栏组件存在,事件层需适配 | +| 146 | `hideStatusBar` | libs/events.js:2379 隐藏状态栏 | 不支持 | `src/client/ui/statusBar.tsx` | 同上,需事件层适配 | +| 147 | `showHero` | libs/events.js:2384 显示勇士 | 不支持 | `packages-user/data-base/src/hero/rendering.ts:11` HeroRendering | 渲染数据可控制显隐 | +| 148 | `hideHero` | libs/events.js:2389 隐藏勇士 | 不支持 | `packages-user/data-base/src/hero/rendering.ts:11` HeroRendering | 同上,需事件层适配 | +| 149 | `setHeroOpacity` | libs/events.js:2394 设置勇士透明度 | 不支持 | `packages-user/data-base/src/hero/rendering.ts:29` setAlpha | 透明度接口可直接调用 | +| 150 | `vibrate` | libs/events.js:2406 屏幕震动 | 不支持 | `packages-user/client-modules/src/render/scene.ts` 场景变换 | 场景可做位移,无同名语句 | +| 151 | `sleep` | libs/events.js:2410 延时若干毫秒 | 不支持 | `packages-user/data-system/src/event/types.ts:99` 注册异步内建函数 | 可写异步内建函数包装定时器 | +| 152 | `wait` | libs/events.js:2417 等待输入并带超时 | 不支持 | `src/client/ui/waitBox.tsx` | 等待面板存在,事件层需适配 | +| 153 | `waitAsync` | libs/events.js:2536 等待异步动画或音效结束 | 不支持 | `packages/anon-tokyo/src/type.ts:25` 异步表达式与 await | 内建函数可为异步并由 await 汇合 | | 154 | `stopAsync` | libs/events.js:2547 停止异步任务 | 不支持 | 无等价能力 | 新无异步取消原语 | ### 7.11 存读档、退出与预览 | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 155 | `callBook` | libs/events.js:2552 打开怪物手册 | 部分支持 | `src/client/ui/book.tsx` | 手册组件存在,事件层需适配 | -| 156 | `callSave` | libs/events.js:2564 打开存档界面 | 支持 | `packages-user/client-base/src/save/system.ts` | 存档系统提供界面入口 | -| 157 | `autoSave` | libs/events.js:2580 自动存档 | 支持 | `packages-user/client-base/src/save/system.ts` | 存档系统提供自动存档 | -| 158 | `forbidSave` | libs/events.js:2588 禁止存档 | 部分支持 | `packages-user/client-base/src/save/system.ts` | 可拦截存档,无声明式语句 | -| 159 | `callLoad` | libs/events.js:2593 打开读档界面 | 支持 | `packages-user/client-base/src/save/system.ts` | 存档系统提供读档入口 | +| 155 | `callBook` | libs/events.js:2552 打开怪物手册 | 不支持 | `src/client/ui/book.tsx` | 手册组件存在,事件层需适配 | +| 156 | `callSave` | libs/events.js:2564 打开存档界面 | 不支持 | `packages-user/client-base/src/save/system.ts` | 存档系统提供界面入口 | +| 157 | `autoSave` | libs/events.js:2580 自动存档 | 不支持 | `packages-user/client-base/src/save/system.ts` | 存档系统提供自动存档 | +| 158 | `forbidSave` | libs/events.js:2588 禁止存档 | 不支持 | `packages-user/client-base/src/save/system.ts` | 可拦截存档,无声明式语句 | +| 159 | `callLoad` | libs/events.js:2593 打开读档界面 | 不支持 | `packages-user/client-base/src/save/system.ts` | 存档系统提供读档入口 | | 160 | `exit` | libs/events.js:2601 退出游戏 | 不支持 | 无等价能力 | 检索 exit、退出 未命中,归运行时流程 | | 161 | `previewUI` | libs/events.js:2606 预览界面 | 不支持 | 无等价能力 | 新无界面预览运行时 | @@ -287,26 +287,26 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 162 | `clearMap` | libs/events.js:2636 清空画布 | 部分支持 | `packages/render-vue/src/tag.ts:45` container 标签 | 容器可替换内容,无同名语句 | -| 163 | `fillText` | libs/events.js:2640 填充文本 | 支持 | `packages/render-vue/src/tag.ts:52` text 标签 | 文本标签可直接绘制 | -| 164 | `fillBoldText` | libs/events.js:2645 填充粗体文本 | 部分支持 | `packages/render-vue/src/tag.ts:52` text 标签的字重属性 | 字重属性可组合,无专用语句 | -| 165 | `fillRect` | libs/events.js:2650 填充矩形 | 支持 | `packages/render-vue/src/tag.ts:71` g-rect 标签 | 位置与尺寸属性即可 | -| 166 | `fillPolygon` | libs/events.js:2654 填充多边形 | 部分支持 | `packages/render-vue/src/tag.ts:86` g-path 标签 | 路径标签可画多边形,无专用语句 | -| 167 | `strokeRect` | libs/events.js:2663 描边矩形 | 支持 | `packages/render-vue/src/tag.ts:71` g-rect 标签的描边属性 | 描边属性可直接设置 | -| 168 | `strokePolygon` | libs/events.js:2667 描边多边形 | 部分支持 | `packages/render-vue/src/tag.ts:86` g-path 标签的描边属性 | 路径标签可描边,无专用语句 | -| 169 | `fillEllipse` | libs/events.js:2676 填充椭圆 | 支持 | `packages/render-vue/src/tag.ts:74` g-ellipse 标签 | 椭圆标签可直接绘制 | -| 170 | `strokeEllipse` | libs/events.js:2680 描边椭圆 | 支持 | `packages/render-vue/src/tag.ts:74` g-ellipse 标签的描边属性 | 描边属性可直接设置 | -| 171 | `fillArc` | libs/events.js:2684 填充扇形 | 部分支持 | `packages/render-vue/src/tag.ts:72` g-circle 标签 + `packages/render-vue/src/tag.ts:86` g-path | 圆与路径可组合,无专用语句 | -| 172 | `strokeArc` | libs/events.js:2688 描边扇形 | 部分支持 | `packages/render-vue/src/tag.ts:72` g-circle 标签 + `packages/render-vue/src/tag.ts:86` g-path | 同上,需组合 | -| 173 | `drawLine` | libs/events.js:2692 画线 | 支持 | `packages/render-vue/src/tag.ts:77` g-line 标签 | 线段标签可直接绘制 | -| 174 | `drawArrow` | libs/events.js:2696 画箭头 | 部分支持 | `packages/render-vue/src/tag.ts:77` g-line 标签 + `packages/render-vue/src/tag.ts:86` g-path | 线与路径可组合,无专用语句 | -| 175 | `setAttribute` | libs/events.js:2700 设置画布属性 | 部分支持 | `packages/render-vue/src/tag.ts:45` container 标签属性 | 标签属性可替代,无同名语句 | -| 176 | `setFilter` | libs/events.js:2704 设置画布滤镜 | 部分支持 | `packages/render-vue/src/tag.ts:45` container 标签滤镜属性 | 容器滤镜可组合 | -| 177 | `drawImage` | libs/events.js:2708 绘制图片 | 支持 | `packages/render-vue/src/tag.ts:57` image 标签 | 图片标签可直接绘制 | -| 178 | `drawIcon` | libs/events.js:2712 绘制图标 | 部分支持 | `packages-user/client-base/src/components/misc.tsx:13` Icon | 图标组件存在,需渲染层适配 | -| 179 | `drawSelector` | libs/events.js:2716 绘制选择框 | 部分支持 | `packages/render-vue/src/tag.ts:87` g-rectr 标签 | 圆角矩形可组合,无专用语句 | -| 180 | `drawBackground` | libs/events.js:2720 绘制背景 | 部分支持 | `src/client/ui/background.tsx` | 背景组件存在,无同名语句 | -| 181 | `drawTextContent` | libs/events.js:2724 绘制文本内容 | 部分支持 | `packages-user/client-base/src/components/textboxTyper.ts:247` TextContentTyper | 文本排版组件存在,需渲染层适配 | +| 162 | `clearMap` | libs/events.js:2636 清空画布 | 不支持 | `packages/render-vue/src/tag.ts:45` container 标签 | 容器可替换内容,无同名语句 | +| 163 | `fillText` | libs/events.js:2640 填充文本 | 不支持 | `packages/render-vue/src/tag.ts:52` text 标签 | 文本标签可直接绘制 | +| 164 | `fillBoldText` | libs/events.js:2645 填充粗体文本 | 不支持 | `packages/render-vue/src/tag.ts:52` text 标签的字重属性 | 字重属性可组合,无专用语句 | +| 165 | `fillRect` | libs/events.js:2650 填充矩形 | 不支持 | `packages/render-vue/src/tag.ts:71` g-rect 标签 | 位置与尺寸属性即可 | +| 166 | `fillPolygon` | libs/events.js:2654 填充多边形 | 不支持 | `packages/render-vue/src/tag.ts:86` g-path 标签 | 路径标签可画多边形,无专用语句 | +| 167 | `strokeRect` | libs/events.js:2663 描边矩形 | 不支持 | `packages/render-vue/src/tag.ts:71` g-rect 标签的描边属性 | 描边属性可直接设置 | +| 168 | `strokePolygon` | libs/events.js:2667 描边多边形 | 不支持 | `packages/render-vue/src/tag.ts:86` g-path 标签的描边属性 | 路径标签可描边,无专用语句 | +| 169 | `fillEllipse` | libs/events.js:2676 填充椭圆 | 不支持 | `packages/render-vue/src/tag.ts:74` g-ellipse 标签 | 椭圆标签可直接绘制 | +| 170 | `strokeEllipse` | libs/events.js:2680 描边椭圆 | 不支持 | `packages/render-vue/src/tag.ts:74` g-ellipse 标签的描边属性 | 描边属性可直接设置 | +| 171 | `fillArc` | libs/events.js:2684 填充扇形 | 不支持 | `packages/render-vue/src/tag.ts:72` g-circle 标签 + `packages/render-vue/src/tag.ts:86` g-path | 圆与路径可组合,无专用语句 | +| 172 | `strokeArc` | libs/events.js:2688 描边扇形 | 不支持 | `packages/render-vue/src/tag.ts:72` g-circle 标签 + `packages/render-vue/src/tag.ts:86` g-path | 同上,需组合 | +| 173 | `drawLine` | libs/events.js:2692 画线 | 不支持 | `packages/render-vue/src/tag.ts:77` g-line 标签 | 线段标签可直接绘制 | +| 174 | `drawArrow` | libs/events.js:2696 画箭头 | 不支持 | `packages/render-vue/src/tag.ts:77` g-line 标签 + `packages/render-vue/src/tag.ts:86` g-path | 线与路径可组合,无专用语句 | +| 175 | `setAttribute` | libs/events.js:2700 设置画布属性 | 不支持 | `packages/render-vue/src/tag.ts:45` container 标签属性 | 标签属性可替代,无同名语句 | +| 176 | `setFilter` | libs/events.js:2704 设置画布滤镜 | 不支持 | `packages/render-vue/src/tag.ts:45` container 标签滤镜属性 | 容器滤镜可组合 | +| 177 | `drawImage` | libs/events.js:2708 绘制图片 | 不支持 | `packages/render-vue/src/tag.ts:57` image 标签 | 图片标签可直接绘制 | +| 178 | `drawIcon` | libs/events.js:2712 绘制图标 | 不支持 | `packages-user/client-base/src/components/misc.tsx:13` Icon | 图标组件存在,需渲染层适配 | +| 179 | `drawSelector` | libs/events.js:2716 绘制选择框 | 不支持 | `packages/render-vue/src/tag.ts:87` g-rectr 标签 | 圆角矩形可组合,无专用语句 | +| 180 | `drawBackground` | libs/events.js:2720 绘制背景 | 不支持 | `src/client/ui/background.tsx` | 背景组件存在,无同名语句 | +| 181 | `drawTextContent` | libs/events.js:2724 绘制文本内容 | 不支持 | `packages-user/client-base/src/components/textboxTyper.ts:247` TextContentTyper | 文本排版组件存在,需渲染层适配 | ## 8. 预编译与系统触发器(26) @@ -319,7 +319,7 @@ | 184 | `moveImage` 预编译 | libs/events.js:1695 预编译移动路径 | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` + `packages/animate` | 路径可由表达式与动画组合 | | 185 | `rotateImage` 预编译 | libs/events.js:1705 预编译旋转参数 | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` 变换属性 | 旋转参数可写表达式,需适配 | | 186 | `scaleImage` 预编译 | libs/events.js:1715 预编译缩放参数 | 部分支持 | `packages-user/client-modules/src/render/fx/image3d.ts` 变换属性 | 缩放参数可写表达式,需适配 | -| 187 | `moveEnemyOnPoint` 预编译 | libs/events.js:1931 预编译点怪物移动路径 | 不支持 | 无等价能力 | 新无点怪物概念,也无对应预编译 | +| 187 | `moveEnemyOnPoint` 预编译 | libs/events.js:1931 预编译点怪物移动路径 | 不支持 | 无等价能力 | 新无点怪物概念,也无对应预编译;not planned。 | | 188 | `if` 预编译 | libs/events.js:1254 预编译条件表达式 | 支持 | `packages/anon-tokyo/src/interpreter.ts:197` 一次性编译整段脚本 | 新由编译期统一处理条件 | | 189 | `switch` 预编译 | libs/events.js:1254 预编译分支表达式 | 支持 | `packages/anon-tokyo/src/interpreter.ts:197` 一次性编译整段脚本 | 同上 | | 190 | `choices` 预编译 | libs/events.js:1254 预编译选项数组 | 部分支持 | `src/client/ui/choices.tsx` | 选项组件存在,编译期无专用钩子 | @@ -329,7 +329,7 @@ | 194 | `while` 预编译 | libs/events.js:1254 预编译条件 | 支持 | `packages/anon-tokyo/src/interpreter.ts:197` 一次性编译整段脚本 | 条件由 Loop 语句表达 | | 195 | `dowhile` 预编译 | libs/events.js:1254 预编译条件 | 支持 | `packages/anon-tokyo/src/interpreter.ts:197` 一次性编译整段脚本 | skipInitialCheck 对应 do-while | | 196 | `wait` 预编译 | libs/events.js:1254 预编译超时与输入类型 | 部分支持 | `src/client/ui/waitBox.tsx` | 等待面板存在,需事件层适配 | -| 197 | `previewUI` 预编译 | libs/events.js:1254 预编译预览参数 | 不支持 | 无等价能力 | 新无界面预览运行时 | +| 197 | `previewUI` 预编译 | libs/events.js:1254 预编译预览参数 | 不支持 | 无等价能力 | 新无界面预览运行时;not planned。 | | 198 | `fillPolygon` 预编译 | libs/events.js:1254 预编译点集 | 部分支持 | `packages/render-vue/src/tag.ts:86` g-path 标签 | 路径标签可画多边形,无专用钩子 | | 199 | `strokePolygon` 预编译 | libs/events.js:1254 预编译点集 | 部分支持 | `packages/render-vue/src/tag.ts:86` g-path 标签的描边属性 | 路径标签可描边,无专用钩子 | @@ -343,10 +343,10 @@ | 201 | `openDoor` 触发器 | libs/events.js:295 注册开门系统触发器 | 支持 | `packages-user/data-common/src/event/types.ts:7` EventTrigger.OnBeforeOpenDoor 与 OnAfterOpenDoor | 新按前后拆分 | | 202 | `getItem` 触发器 | libs/events.js:295 注册拾取系统触发器 | 支持 | `packages-user/data-common/src/event/types.ts:7` EventTrigger.OnAfterGetItem | 新只保留拾取之后 | | 203 | `changeFloor` 触发器 | libs/events.js:295 注册换层系统触发器 | 支持 | `packages-user/data-common/src/event/types.ts:7` EventTrigger.OnBeforeChangeFloor 与 OnAfterChangeFloor | 新按前后拆分并支持阻止切换 | -| 204 | `pushBox` 触发器 | libs/events.js:295 注册推箱子系统触发器 | 不支持 | 无等价能力 | 新无推箱子系统 | -| 205 | `ski` 触发器 | libs/events.js:295 注册滑冰系统触发器 | 不支持 | 无等价能力 | 新无滑冰系统 | +| 204 | `pushBox` 触发器 | libs/events.js:295 注册推箱子系统触发器 | 不支持 | 无等价能力 | 新无推箱子系统;maybe。 | +| 205 | `ski` 触发器 | libs/events.js:295 注册滑冰系统触发器 | 不支持 | 无等价能力 | 新无滑冰系统;maybe。 | | 206 | `action` 触发器 | libs/events.js:295 注册点击或交互触发器 | 部分支持 | `packages-user/data-common/src/event/types.ts:7` EventTrigger.OnTouch + `src/data/event/event.ts:43` | 新触摸语义不等价,需自行接交互事件 | -| 207 | `custom` 触发器 | libs/events.js:295 注册任意自定义触发器 | 不支持 | 无等价能力 | 新触发器为固定枚举,不能注册新触发器 | +| 207 | `custom` 触发器 | libs/events.js:295 注册任意自定义触发器 | 不支持 | 无等价能力 | 新触发器为固定枚举,不能注册新触发器;not planned。 | 新触发器是固定枚举,入口在 `packages-user/data-common/src/event/types.ts:7`;旧触发器注册表在 `libs/events.js:295`。新引擎另有手动、触碰、进入、离开等触发点,但旧侧没有对应条目,不计入本表。 @@ -355,10 +355,10 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | | 208 | 内联求值 | libs/utils.js:20 文本中的花括号表达式求值后拼回字符串 | 部分支持 | `packages/anon-tokyo/src/type.ts:19` Literal 与 Expression + `packages-user/client-base/src/components/textbox.tsx` | 新无文本模板语法,插值需写成表达式或函数调用 | -| 209 | 前缀替换 | libs/utils.js:50 把 status、buff、item 等前缀改写为属性访问 | 不支持 | 无等价能力 | 检索 replaceValue、前缀替换未命中,需自行实现解析 | +| 209 | 前缀替换 | libs/utils.js:50 把 status、buff、item 等前缀改写为属性访问 | 不支持 | 无等价能力 | 检索 replaceValue、前缀替换未命中,需自行实现解析;not planned。 | | 210 | 任意表达式求值 | libs/utils.js:81 对替换后的字符串直接求值 | 部分支持 | `packages/anon-tokyo/src/compile.ts` + `packages/anon-tokyo/src/type.ts:19` Expression | 新为编译期表达式闭包,不能执行任意语句字符串 | | 211 | 变量与作用域 | libs/events.js:2101 用 flag 与地块前缀拼出局部变量 | 支持 | `packages/anon-tokyo/src/type.ts:210` Scope 的 args、local、env | 新有真正的三层作用域 | -| 212 | 文本前缀 | project/data.js:549 文本中的制表符加方括号前缀由文本渲染器解析 | 不支持 | 无等价能力 | 检索文本前缀解析未命中,现有接口无法确认可简单实现 | +| 212 | 文本前缀 | project/data.js:549 文本中的制表符加方括号前缀由文本渲染器解析 | 不支持 | 无等价能力 | 检索文本前缀解析未命中,现有接口无法确认可简单实现;not planned。 | 旧侧只有字符串替换与求值,入口在 `libs/utils.js:20`、`libs/utils.js:50`、`libs/utils.js:81`;新侧是编译期表达式闭包,类型定义在 `packages/anon-tokyo/src/type.ts:19`。 @@ -373,7 +373,7 @@ | 217 | 跳跃 | libs/events.js:1607 图块或勇士从 A 点跳到 B 点 | 部分支持 | `packages-user/data-base/src/map/mover.ts:62` ObjectMoveType.Jump | 移动器支持跳跃,无事件语句 | | 218 | 楼层切换 | libs/events.js:696 支持楼层糖与楼梯对称糖 | 支持 | `packages-user/data-base/src/hero/location.ts:55` setFloor + `packages-user/data-base/src/hero/state.ts:106` | 新只接受明确目标与坐标,无糖语法 | | 219 | 换层事件顺序 | project/functions.js:97 换层前跑覆写函数,换层后跑另一覆写 | 支持 | `packages-user/data-base/src/hero/state.ts:106` onBeforeChangeFloor 与 onAfterChangeFloor | 新顺序固定,同组钩子并行执行 | -| 220 | 滑冰 | project/functions.js:1516 踩到滑冰图块后自动再走一步 | 不支持 | 无等价能力 | 检索 onSki、滑冰 未命中,新无滑冰图块行为 | +| 220 | 滑冰 | project/functions.js:1516 踩到滑冰图块后自动再走一步 | 不支持 | 无等价能力 | 检索 onSki、滑冰 未命中,新无滑冰图块行为;maybe。 | | 221 | 自动事件 | project/functions.js:1494 每步后检查并循环执行自动事件 | 部分支持 | `packages-user/data-system/src/event/system.ts:44` collectEvent + `src/data/enemy/hook.ts:135` | 新无每步轮询机制,需在步末钩子里自行收集 | 旧移动入口是 `libs/control.js:716`,单步流程覆写在 `project/functions.js:1463`;新移动器在 `packages-user/data-base/src/hero/mover.ts`,寻路在 `packages-user/data-system/src/path/finder.ts:96`。 @@ -416,7 +416,7 @@ | 244 | `key` 回放动作 | libs/control.js:1912 模拟按键 | 不支持 | 无等价能力 | 新录像无模拟按键指令,输入路由归 UI 分册 | | 245 | `click` 回放动作 | libs/control.js:1919 模拟点击状态栏 | 不支持 | 无等价能力 | 新无模拟点击指令 | | 246 | `ignoreInput` 回放动作 | libs/control.js:1928 忽略输入、选项与随机前缀并继续 | 支持 | `packages-user/data-common/src/replay/array.ts` 只按指令码推进 | 新录像不产生这类步,能力上等价于不产生 | -| 247 | `no` 回放动作 | libs/control.js:1937 空步占位并继续 | 支持 | `packages-user/data-common/src/replay/array.ts` 按索引推进 | 新二进制数组无需占位步 | +| 247 | `no` 回放动作 | libs/control.js:1937 用于移动到楼层转换图块而不触发,也可作空步占位 | 不支持 | 新录像没有“移动但不触发”的指令码 | 该行为在新系统中未支持 | 旧动作注册表在 `libs/control.js:38`,实现同在 `libs/control.js:1720` 起;新指令枚举在 `packages-user/data-common/src/replay/types.ts:5`,注册在 `src/data/replay/initialize.ts:15`,命令实现在 `src/data/replay/commands.ts`。 @@ -424,30 +424,30 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 248 | `U` 路线字母 | libs/utils.js:528 向上移动,后接次数 | 支持 | `src/data/replay/initialize.ts:18` ReplayCode.Up | 无字符串等价,逐格映射 | -| 249 | `D` 路线字母 | libs/utils.js:528 向下移动,后接次数 | 支持 | `src/data/replay/initialize.ts:18` ReplayCode.Down | 无字符串等价,逐格映射 | -| 250 | `L` 路线字母 | libs/utils.js:528 向左移动,后接次数 | 支持 | `src/data/replay/initialize.ts:18` ReplayCode.Left | 无字符串等价,逐格映射 | -| 251 | `R` 路线字母 | libs/utils.js:528 向右移动,后接次数 | 支持 | `src/data/replay/initialize.ts:18` ReplayCode.Right | 无字符串等价,逐格映射 | -| 252 | `I` 路线字母 | libs/utils.js:559 使用道具,id 数字化 | 支持 | `src/data/replay/commands.ts:148` ReplayUseItem | 参数类型相同 | -| 253 | `u` 路线字母 | libs/utils.js:561 按槽位卸下装备 | 支持 | `src/data/replay/commands.ts:204` ReplayUnequip | 参数类型相同 | -| 254 | `e` 路线字母 | libs/utils.js:563 装备道具,id 数字化 | 支持 | `src/data/replay/commands.ts:171` ReplayEquip | 新需实例与槽位参数 | -| 255 | `s` 路线字母 | libs/utils.js:565 保存装备套装 | 不支持 | 无等价能力 | 新无套装保存指令 | -| 256 | `l` 路线字母 | libs/utils.js:567 读取装备套装 | 不支持 | 无等价能力 | 新无套装读取指令 | -| 257 | `F` 路线字母 | libs/utils.js:569 飞行到指定楼层 | 不支持 | 无等价能力 | 新无飞行指令 | -| 258 | `c` 路线字母 | libs/utils.js:571 选项为空 | 不支持 | 无等价能力 | 新录像不产生选项步 | -| 259 | `C` 路线字母 | libs/utils.js:573 选择指定选项 | 不支持 | 无等价能力 | 新录像不产生选项步 | -| 260 | `S` 路线字母 | libs/utils.js:575 打开指定商店 | 不支持 | 无等价能力 | 新录像无打开商店指令 | -| 261 | `T` 路线字母 | libs/utils.js:577 顺时针转向 | 不支持 | 无等价能力 | 新录像无转向指令 | -| 262 | `t` 路线字母 | libs/utils.js:579 转向指定方向 | 不支持 | 无等价能力 | 新录像无转向指令 | -| 263 | `G` 路线字母 | libs/utils.js:581 拾取最近的下一件道具 | 不支持 | 无等价能力 | 新无拾取最近道具指令 | -| 264 | `p` 路线字母 | libs/utils.js:583 输入为空 | 不支持 | 无等价能力 | 新录像不产生输入步 | -| 265 | `P` 路线字母 | libs/utils.js:585 输入指定值 | 不支持 | 无等价能力 | 新录像不产生输入步 | -| 266 | `Q` 路线字母 | libs/utils.js:587 文本输入指定值 | 不支持 | 无等价能力 | 新录像不产生文本输入步 | -| 267 | `N` 路线字母 | libs/utils.js:589 空步占位 | 支持 | `packages-user/data-common/src/replay/array.ts` 按索引推进 | 新二进制数组无需占位步 | -| 268 | `M` 路线字母 | libs/utils.js:591 瞬移到指定坐标 | 支持 | `src/data/replay/commands.ts:120` ReplayTeleport | 参数语义一致 | -| 269 | `K` 路线字母 | libs/utils.js:593 模拟按键 | 不支持 | 无等价能力 | 新录像无模拟按键指令 | -| 270 | `k` 路线字母 | libs/utils.js:595 模拟点击 | 不支持 | 无等价能力 | 新录像无模拟点击指令 | -| 271 | `X` 路线字母 | libs/utils.js:597 随机值 | 不支持 | 无等价能力 | 新录像不产生随机步 | +| 248 | `U` 路线字母 | libs/utils.js:528 向上移动,后接次数 | 支持 | `src/data/replay/initialize.ts:18` ReplayCode.Up | 无字符串等价,逐格映射;not planned | +| 249 | `D` 路线字母 | libs/utils.js:528 向下移动,后接次数 | 支持 | `src/data/replay/initialize.ts:18` ReplayCode.Down | 无字符串等价,逐格映射;not planned | +| 250 | `L` 路线字母 | libs/utils.js:528 向左移动,后接次数 | 支持 | `src/data/replay/initialize.ts:18` ReplayCode.Left | 无字符串等价,逐格映射;not planned | +| 251 | `R` 路线字母 | libs/utils.js:528 向右移动,后接次数 | 支持 | `src/data/replay/initialize.ts:18` ReplayCode.Right | 无字符串等价,逐格映射;not planned | +| 252 | `I` 路线字母 | libs/utils.js:559 使用道具,id 数字化 | 支持 | `src/data/replay/commands.ts:148` ReplayUseItem | 参数类型相同;not planned | +| 253 | `u` 路线字母 | libs/utils.js:561 按槽位卸下装备 | 支持 | `src/data/replay/commands.ts:204` ReplayUnequip | 参数类型相同;not planned | +| 254 | `e` 路线字母 | libs/utils.js:563 装备道具,id 数字化 | 支持 | `src/data/replay/commands.ts:171` ReplayEquip | 新需实例与槽位参数;not planned | +| 255 | `s` 路线字母 | libs/utils.js:565 保存装备套装 | 不支持 | 无等价能力 | 新无套装保存指令;not planned | +| 256 | `l` 路线字母 | libs/utils.js:567 读取装备套装 | 不支持 | 无等价能力 | 新无套装读取指令;not planned | +| 257 | `F` 路线字母 | libs/utils.js:569 飞行到指定楼层 | 不支持 | 无等价能力 | 新无飞行指令;not planned | +| 258 | `c` 路线字母 | libs/utils.js:571 选项为空 | 不支持 | 无等价能力 | 新录像不产生选项步;not planned | +| 259 | `C` 路线字母 | libs/utils.js:573 选择指定选项 | 不支持 | 无等价能力 | 新录像不产生选项步;not planned | +| 260 | `S` 路线字母 | libs/utils.js:575 打开指定商店 | 不支持 | 无等价能力 | 新录像无打开商店指令;not planned | +| 261 | `T` 路线字母 | libs/utils.js:577 顺时针转向 | 不支持 | 无等价能力 | 新录像无转向指令;not planned | +| 262 | `t` 路线字母 | libs/utils.js:579 转向指定方向 | 不支持 | 无等价能力 | 新录像无转向指令;not planned | +| 263 | `G` 路线字母 | libs/utils.js:581 拾取最近的下一件道具 | 不支持 | 无等价能力 | 新无拾取最近道具指令;not planned | +| 264 | `p` 路线字母 | libs/utils.js:583 输入为空 | 不支持 | 无等价能力 | 新录像不产生输入步;not planned | +| 265 | `P` 路线字母 | libs/utils.js:585 输入指定值 | 不支持 | 无等价能力 | 新录像不产生输入步;not planned | +| 266 | `Q` 路线字母 | libs/utils.js:587 文本输入指定值 | 不支持 | 无等价能力 | 新录像不产生文本输入步;not planned | +| 267 | `N` 路线字母 | libs/utils.js:589 空步占位 | 支持 | `packages-user/data-common/src/replay/array.ts` 按索引推进 | 新二进制数组无需占位步;not planned | +| 268 | `M` 路线字母 | libs/utils.js:591 瞬移到指定坐标 | 支持 | `src/data/replay/commands.ts:120` ReplayTeleport | 参数语义一致;not planned | +| 269 | `K` 路线字母 | libs/utils.js:593 模拟按键 | 不支持 | 无等价能力 | 新录像无模拟按键指令;not planned | +| 270 | `k` 路线字母 | libs/utils.js:595 模拟点击 | 不支持 | 无等价能力 | 新录像无模拟点击指令;not planned | +| 271 | `X` 路线字母 | libs/utils.js:597 随机值 | 不支持 | 无等价能力 | 新录像不产生随机步;not planned | 旧路线是字符串加单字母编码再压缩,编码表在 `libs/utils.js:558`;新路线是二进制数组,每一步是一组指令与参数。24 个字母逐个保留,不重复计入能力数。 @@ -455,7 +455,7 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 272 | 自定义步兜底 | libs/utils.js:599 未识别的自定义步原样包裹 | 不支持 | 无等价能力 | 新枚举不接受未注册指令,参数按类型强校验 | +| 272 | 自定义步兜底 | libs/utils.js:599 未识别的自定义步原样包裹 | 不支持 | 无等价能力 | 新枚举不接受未注册指令,参数按类型强校验;not planned | ## 13. 覆盖与统计 diff --git a/.planning/phases/09-minimum-browser-runnable/09-PARITY/03-RENDER.md b/.planning/phases/09-minimum-browser-runnable/09-PARITY/03-RENDER.md index e37a24a..3c6e2e0 100644 --- a/.planning/phases/09-minimum-browser-runnable/09-PARITY/03-RENDER.md +++ b/.planning/phases/09-minimum-browser-runnable/09-PARITY/03-RENDER.md @@ -71,7 +71,7 @@ | 37 | 闪屏 | `libs/control.js:2818` `screenFlash` 以 `setCurtain` 为基础做多次颜色切换。 | 不支持 | 现有接口无法确认可简单实现;新无默认闪屏效果。 | 旧有闪屏;新无对应实现。 | | 38 | 全屏叠加后处理 | `libs/control.js:2764` 表明旧只能靠 `curtain` 或 `ui` 画布叠加做全屏效果,没有 FBO 后处理。 | 部分支持 | `IMapRendererPostEffect`(`packages-user/client-base/src/map/types.ts:314`)与 `addPostEffect`(`renderer.ts:319`)提供 FBO 后处理链。 | 旧只能用画布叠加;新需自行实现效果着色器才能得到全屏效果。 | | 39 | 自定义视觉滤镜 | `libs/ui.js:468` 表明旧只有 Canvas2D `ctx.filter`,不能写自定义片元着色器。 | 部分支持 | `EffectBase`(`packages-user/client-modules/src/render/fx/base.ts:3`)与 `Image3DEffect`(`.../fx/image3d.ts:8`)。 | 旧仅内置滤镜;新需编写着色器才能得到自定义效果。 | -| 40 | 灯光插件 | `project/plugins.js:9` `drawLight` 铺黑色半透明层并用 `destination-out` 挖圆形灯光。 | 不支持 | 现有接口无法确认可简单实现;未检索到默认灯光效果。 | 旧有插件级灯光;新只有后处理扩展点。 | +| 40 | 灯光插件 | `project/plugins.js:9` `drawLight` 铺黑色半透明层并用 `destination-out` 挖圆形灯光。 | 不支持 | 现有接口无法确认可简单实现;未检索到默认灯光效果。 | 旧有插件级灯光;新只有后处理扩展点;not planned。 | ## 6. 天气 diff --git a/.planning/phases/09-minimum-browser-runnable/09-PARITY/05-RUNTIME-UNCERTAIN.md b/.planning/phases/09-minimum-browser-runnable/09-PARITY/05-RUNTIME-UNCERTAIN.md index 69494aa..f7330a5 100644 --- a/.planning/phases/09-minimum-browser-runnable/09-PARITY/05-RUNTIME-UNCERTAIN.md +++ b/.planning/phases/09-minimum-browser-runnable/09-PARITY/05-RUNTIME-UNCERTAIN.md @@ -32,17 +32,17 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | | 1 | 插件初始化钩子 | 在所有资源加载后、游戏开始前执行 `_afterLoadResources`(`project/plugins.js:4`) | 支持 | `packages-user/data-state/src/types.ts:39` 的 `IDataPluginDefine` 提供 `afterLoad` 阶段 | 旧按对象键顺序执行,新按依赖拓扑排序,时序语义等价 | -| 2 | 灯光与漆黑层 | 铺黑色半透明层并用 `destination-out` 挖圆形灯光(`project/plugins.js:9`) | 不支持 | 无默认灯光层,`packages-user/client-base/src/map/renderer.ts:319` 的 `addPostEffect` 只是扩展点 | 需自行实现合成,属于直接底层绘制 | +| 2 | 灯光与漆黑层 | 铺黑色半透明层并用 `destination-out` 挖圆形灯光(`project/plugins.js:9`) | 不支持 | 无默认灯光层,`packages-user/client-base/src/map/renderer.ts:319` 的 `addPostEffect` 只是扩展点 | 需自行实现合成,属于直接底层绘制;not planned | | 3 | 全局商店 | 事件选项加 `need` 表达式打开商店(`project/plugins.js:70`) | 部分支持 | `src/data/plugin/list.ts:5` 的 `DataShopPlugin` 与 `src/client/plugin/list.ts:5` 的 `ClientShopPlugin` 提供库存买卖 | 旧事件选项与 `need` 脚本模型无对应 | -| 4 | 分区删除楼层地图 | 高层塔按分区删图,不入存档、不可浏览或飞行(`project/plugins.js:265`) | 不支持 | 无运行时删楼层接口,地图内容由内容表加载 | 旧按分区动态裁剪并隔离存档与浏览,需自行实现复杂状态处理 | +| 4 | 分区删除楼层地图 | 高层塔按分区删图,不入存档、不可浏览或飞行(`project/plugins.js:265`) | 支持 | 新用楼层激活与未激活状态实现相同效果:`IMapState.setMapActiveStatus`、`IMapState.activeArea` / `deactiveArea`、`IGameMap.setActiveStatus`。 | 旧按分区动态裁剪,新按激活状态隔离;能力等价。 | | 5 | 五图层模式 | 启用 `bg2` 与 `fg2` 两层,共五图层(`project/plugins.js:352`) | 支持 | `packages-user/data-state/src/shared.ts:13` 已内置 bg、bg2、fg、fg2 五层纵深 | 旧需插件开启,新默认具备五图层 | | 6 | 道具商店事件块 | `item` 为 true 加 `choices` 的道具买卖(`project/plugins.js:506`) | 部分支持 | `src/data/plugin/shop/types.ts:18` 的道具买卖字段覆盖库存交易 | 新无事件块与回收脚本入口 | -| 7 | 怪物境界显示 | 怪物手册显示怪物境界(`project/plugins.js:812`) | 不支持 | 无境界或等级显示字段与手册扩展点 | 旧插件在怪物手册追加境界,新需自定义渲染与数据扩展 | -| 8 | 多角色 | 多角色初始数据与切换(`project/plugins.js:898`) | 不支持 | 无多角色数据与切换接口 | 旧插件的多角色初始数据与切换需自行实现 | +| 7 | 怪物境界显示 | 怪物手册显示怪物境界(`project/plugins.js:812`) | 不支持 | 无境界或等级显示字段与手册扩展点 | 旧插件在怪物手册追加境界,新需自定义渲染与数据扩展;not planned | +| 8 | 多角色 | 多角色初始数据与切换(`project/plugins.js:898`) | 不支持 | 无多角色数据与切换接口 | 旧插件的多角色初始数据与切换需自行实现;not planned | | 9 | 勇士四帧动画 | 勇士与跟随者使用 4 帧动画(`project/plugins.js:1044`) | 支持 | `packages-user/client-base/src/map/extension/hero.ts:167` 使用 frames 为 4 的帧数据与状态机 | 旧按绘制帧取模,新由状态机推进 | -| 10 | 录像路线修正 | 录像路线修正与折叠(`project/plugins.js:1097`) | 不支持 | 无路线修正或折叠接口 | 旧插件对录像路线做折叠修正,属复杂算法 | -| 11 | 仿 RM 数字键盘 | 整数输入面板,支持负数与音效(`project/plugins.js:1188`) | 部分支持 | `src/client/ui/toolbar.tsx:244` 已有 `NumpadToolbar` 布局,`src/client/ui/inputBox.tsx:324` 提供数字输入 | 数字键发送在 `src/client/ui/toolbar.tsx:298` 仍为注释,未接线 | -| 12 | canvas sprite 化 | 把 canvas 内容 sprite 化(`project/plugins.js:1363`) | 不支持 | 无 sprite 插件等价,渲染层只有通用绘制项 | 旧插件把 canvas 内容 sprite 化,需自行实现底层合成 | +| 10 | 录像路线修正 | 录像路线修正与折叠(`project/plugins.js:1097`) | 不支持 | 无路线修正或折叠接口 | 旧插件对录像路线做折叠修正,属复杂算法;not planned | +| 11 | 仿 RM 数字键盘 | 整数输入面板,支持负数与音效(`project/plugins.js:1188`) | 部分支持 | `src/client/ui/toolbar.tsx:244` 已有 `NumpadToolbar` 布局,`src/client/ui/inputBox.tsx:324` 提供数字输入 | 数字键发送在 `src/client/ui/toolbar.tsx:298` 仍为注释,未接线;not planned | +| 12 | canvas sprite 化 | 把 canvas 内容 sprite 化(`project/plugins.js:1363`) | 不支持 | 无 sprite 插件等价,渲染层只有通用绘制项 | 旧插件把 canvas 内容 sprite 化,需自行实现底层合成;not planned | | 13 | 运行时热重载 | 监测文件改动并刷新页面(`project/plugins.js:1555`) | 不支持 | 无运行时热重载接口,构建期刷新不算运行时能力 | 旧插件监听文件改动并刷新页面,新未见对应实现 | ## 3. 扩展加载 @@ -51,9 +51,9 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 1 | 文件式本地存档 | 覆写 localForage,把存档压缩后写入 `_saves` 目录(`extensions/localSave.js:1`) | 部分支持 | `packages-user/client-base/src/save/system.ts:41` 的 `SaveSystem` 用 Dexie 与 IndexedDB 持久化 | 旧把存档写成文件,新无文件后端,存储介质不同 | -| 2 | 运行时地图编辑器 | 游戏内显示 ID、改图改怪并保存(`extensions/dynamicMapEditor.js:1`) | 不支持 | 无运行时地图编辑器,目录扫描与动态脚本机制也未检索到 | 需自行实现完整编辑器与脚本加载 | -| 3 | UI 编辑器加载 | 条件式 import 编辑器并注入 CSS(`extensions/ui-editor.js:1`) | 不支持 | 无动态脚本注入与样式注入接口 | 旧扩展条件式加载编辑器,新未见等价机制 | +| 1 | 文件式本地存档 | 覆写 localForage,把存档压缩后写入 `_saves` 目录(`extensions/localSave.js:1`) | 部分支持 | `packages-user/client-base/src/save/system.ts:41` 的 `SaveSystem` 用 Dexie 与 IndexedDB 持久化 | 旧把存档写成文件,新无文件后端,存储介质不同;not planned | +| 2 | 运行时地图编辑器 | 游戏内显示 ID、改图改怪并保存(`extensions/dynamicMapEditor.js:1`) | 不支持 | 无运行时地图编辑器,目录扫描与动态脚本机制也未检索到 | 需自行实现完整编辑器与脚本加载;not planned | +| 3 | UI 编辑器加载 | 条件式 import 编辑器并注入 CSS(`extensions/ui-editor.js:1`) | 不支持 | 无动态脚本注入与样式注入接口 | 旧扩展条件式加载编辑器,新未见等价机制;not planned | ## 4. 资源加载与 loader @@ -65,7 +65,7 @@ | 2 | 更新加载进度数值 | 写进度条宽度百分比(`libs/loader.js:17`) | 支持 | `packages/loader/src/types.ts:268` 的 `ILoadManagerHooks.onProgress` | 新按任务与字节聚合进度,旧手写百分比 | | 3 | 更新加载提示文本 | 写加载提示文本(`libs/loader.js:22`) | 部分支持 | `src/client/ui/load.tsx:73` 的加载场景显示任务与字节文本 | 新无任意提示文本 setter,文案由场景组件生成 | | 4 | 资源加载总入口 | 按压缩开关串联资源、动画与音乐加载(`libs/loader.js:26`) | 支持 | `packages-user/data-state/src/loader/loader.ts:102` 的 `start` 三段式加载 | 旧按压缩开关分同步与异步,新统一异步 | -| 5 | 同步加载入口 | 同步脚本式加载入口(`libs/loader.js:34`) | 不支持 | 新只有异步迭代加载 | 旧同步脚本式加载无等价入口 | +| 5 | 同步加载入口 | 同步脚本式加载入口(`libs/loader.js:34`) | 不支持 | 新只有异步迭代加载 | 旧同步脚本式加载无等价入口;not planned | | 6 | 异步加载入口 | 异步加载并聚合各类进度(`libs/loader.js:46`) | 支持 | `packages-user/data-state/src/loader/loader.ts:102` 的 `start` 异步迭代 | 旧回调聚合进度,新异步迭代器 | | 7 | 同步加载 materials | 同步加载 materials 图片(`libs/loader.js:94`) | 支持 | `packages-user/client-modules/src/loader/hook.ts:14` 的纹理清单加载 | 旧遍历目录名数组,新按清单声明 | | 8 | 异步加载 materials | 从 `materials.h5data` 异步取图并报进度(`libs/loader.js:102`) | 部分支持 | `packages/loader/src/manager.ts:44` 的 `LoadManager.addTask` 支持异步与进度 | 新无 h5data 资源包入口 | @@ -80,7 +80,7 @@ | 17 | tilesets 加载后处理 | 加载后处理 tilesets(`libs/loader.js:207`) | 部分支持 | `packages/render/src/assets/store.ts` 的纹理缓存 | 加载后处理未逐项对齐 | | 18 | 批量加载图片 | 批量加载图片到对象(`libs/loader.js:222`) | 支持 | `packages/loader/src/manager.ts:44` 的批量 `addTask` | 旧批量函数,新任务集合 | | 19 | 单图加载 | 单图加载(`libs/loader.js:246`) | 支持 | `packages/loader/src/task.ts` 的单个 `LoadTask` | 单图加载任务化 | -| 20 | 从 zip 批量取图 | 从 zip 批量取图(`libs/loader.js:271`) | 不支持 | 新无运行时 zip 资源包入口 | 旧从 h5data 批量取图,需自行解包 | +| 20 | 从 zip 批量取图 | 从 zip 批量取图(`libs/loader.js:271`) | 不支持 | 新无运行时 zip 资源包入口 | 旧从 h5data 批量取图,需自行解包;maybe | | 21 | 同步加载动画 | 同步加载动画(`libs/loader.js:304`) | 支持 | `packages/render/src/assets/animater.ts` 的动画清单解析 | 旧同步脚本,新清单加 `Animater` | | 22 | 异步加载动画 | 异步加载动画(`libs/loader.js:333`) | 支持 | `packages/render/src/assets/composer.ts` 的动画合成 | 异步加载入口等价 | | 23 | 解析单个动画 | 解析单个 `.animate` JSON(`libs/loader.js:346`) | 支持 | `packages/render/src/assets/composer.ts` 的 `TextureComposer` | 旧解析 `.animate`,新按动画清单解析自有格式 | @@ -137,10 +137,10 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | -| 1 | 静态文件服务 | 按扩展名返回 JS、CSS、HTML 与音频(`server.js:56`;`server.py:66`) | 不支持 | 新仓库无 `server.js` 或 `server.py` | 旧按扩展名返回文件,新由构建产物或宿主提供 | -| 2 | 楼层与动画打包 | 合并 `project/floors` 与动画文件减少请求(`server.js:80`) | 不支持 | 无服务端合并接口 | 旧服务端合并楼层与动画,新需构建期处理 | -| 3 | 文件读写与目录操作 | 供编辑器读写 `project` 与 `_saves`(`server.js:121`) | 不支持 | 无服务端文件读写路由 | 旧供编辑器读写目录,新无等价 | -| 4 | 热重载 | 监听 libs、main、index、css、floors 并推送刷新(`server.js:295`) | 不支持 | 无服务端 watch 与 reload 路由 | 构建期刷新不算运行时服务端能力 | +| 1 | 静态文件服务 | 按扩展名返回 JS、CSS、HTML 与音频(`server.js:56`;`server.py:66`) | 支持 | 由 Vite 开发服务器以及外部编辑器 / ToolKit 提供静态服务。 | 能力由开发工具链承担,不属于引擎运行时。 | +| 2 | 楼层与动画打包 | 合并 `project/floors` 与动画文件减少请求(`server.js:80`) | 不支持 | 无服务端合并接口 | 旧服务端合并楼层与动画,新需构建期处理;not planned | +| 3 | 文件读写与目录操作 | 供编辑器读写 `project` 与 `_saves`(`server.js:121`) | 不支持 | 无服务端文件读写路由 | 旧供编辑器读写目录,新无等价;not planned | +| 4 | 热重载 | 监听 libs、main、index、css、floors 并推送刷新(`server.js:295`) | 支持 | 由 Vite 热重载实现。 | 能力由开发工具链承担。 | | 5 | 录像上传与校验排行 | 保存录像、校验、读取状态与存档(`server.js:410`) | 不支持 | 无服务端录像接口 | 旧上传校验排行需外部服务,新无等价 | | 6 | 存档同步服务端 | 客户端 POST `/games/sync.php`,依赖外部 PHP 服务(`libs/control.js:2179`) | 不支持 | 无 sync 路由或服务端实现 | 旧依赖外部 PHP 同步,新仅客户端无实现 | @@ -152,7 +152,7 @@ | --- | --- | --- | --- | --- | --- | | 1 | 自由文本日志 | 大量 `console.error` 与 `console.warn` 输出自由文本(`libs/core.js:471`) | 支持 | `packages/common/src/logger.ts:117` 的 `logger.error` 与 `warn` | 新为数字码加参数插值,旧为自由文本 | | 2 | 调试模式 | `core.debug` 置 flag,按住 Ctrl 穿墙并禁止上传成绩(`libs/control.js:2605`) | 不支持 | 无对应 flag 或穿墙开关 | 旧用 flag 加输入处理,新无等价 | -| 3 | 游戏与编辑器模式 | `main.mode` 控制 play 与 editor 分支(`main.js:84`) | 不支持 | 无 `main.mode` 运行时提供者 | 新代码仍引用 `main.mode`,但只有声明 | +| 3 | 游戏与编辑器模式 | `main.mode` 控制 play 与 editor 分支(`main.js:84`) | 不支持 | 无 `main.mode` 运行时提供者 | 新代码仍引用 `main.mode`,但只有声明;not planned | | 4 | 竞赛模式 | `isCompetition` 开关影响成绩与校验(`main.js:15`) | 不支持 | 无竞赛模式开关 | 旧竞赛模式影响成绩校验,新无等价 | ## 9. 全局入口与构建 @@ -162,11 +162,11 @@ | 序号 | 旧样板功能 | 旧样板行为 | 新样板判定 | 新样板如何实现 | 差异 / 说明 | | --- | --- | --- | --- | --- | --- | | 1 | 模块顺序启动 | 动态加载 13 个模块并按序实例化(`main.js:85`) | 支持 | `src/bootstrap.ts:12` 与 `src/client/entry.ts:23` 的有序装配 | 旧脚本按 13 模块顺序注入,新 ESM 入口按依赖装配 | -| 2 | 运行时脚本注入 | 创建 script 标签按 version 查询串注入,支持 `.min`(`main.js:341`) | 不支持 | 无运行时脚本注入或版本查询串 | 新用静态 ESM 与构建工具,旧可热加载外部模块 | +| 2 | 运行时脚本注入 | 创建 script 标签按 version 查询串注入,支持 `.min`(`main.js:341`) | 不支持 | 无运行时脚本注入或版本查询串 | 新用静态 ESM 与构建工具,旧可热加载外部模块;not planned | | 3 | 页面入口 | 先加载第三方脚本,再 `main.init` 与 `main.listen`(`index.html:195`) | 支持 | `index.html:25` 的模块脚本入口 | 旧先加载第三方脚本,新由 bootstrap 统一启动 | -| 4 | 全局 core 转发 | `_forwardFunc` 把模块公开方法挂到全局 `core`(`libs/core.js:516`) | 不支持 | 无全局 `core` 运行时创建者 | 新以显式接口替代,旧内容与插件不能直接迁移 | -| 5 | 全局 main | 版本、模式、DOM 与启动 BGM 等全局状态(`main.js:2`) | 不支持 | 无 `main` 运行时创建者,仅 `src/types/declaration/core.d.ts:1297` 声明 | 旧全局状态与 DOM 入口无等价 | -| 6 | 渲染进程包裹 | 录像验证时跳过渲染与交互代码(`libs/control.js` 的分散判断) | 部分支持 | `packages-user/entry-data/src/mota.ts:90` 的 `r` 与 `rf` 包裹 | 接口存在,但依赖未见运行时提供者的 `main` | +| 4 | 全局 core 转发 | `_forwardFunc` 把模块公开方法挂到全局 `core`(`libs/core.js:516`) | 不支持 | 无全局 `core` 运行时创建者 | 新以显式接口替代,旧内容与插件不能直接迁移;not planned | +| 5 | 全局 main | 版本、模式、DOM 与启动 BGM 等全局状态(`main.js:2`) | 不支持 | 无 `main` 运行时创建者,仅 `src/types/declaration/core.d.ts:1297` 声明 | 旧全局状态与 DOM 入口无等价;not planned | +| 6 | 渲染进程包裹 | 录像验证时跳过渲染与交互代码(`libs/control.js` 的分散判断) | 部分支持 | `packages-user/entry-data/src/mota.ts:90` 的 `r` 与 `rf` 包裹 | 接口存在,但依赖未见运行时提供者的 `main`;not planned | ## 10. 回放播放控制 @@ -185,16 +185,18 @@ | 域 | 支持 | 部分支持 | 不支持 | 合计 | | --- | --- | --- | --- | --- | -| 插件系统 | 3 | 3 | 7 | 13 | +| 插件系统 | 4 | 3 | 6 | 13 | | 扩展加载 | 0 | 1 | 2 | 3 | | 资源加载与 loader | 23 | 6 | 2 | 31 | | 音频、BGM 与音效 | 8 | 4 | 3 | 15 | | 存档、存储与同步 | 5 | 3 | 1 | 9 | -| 服务端与网络 | 0 | 0 | 6 | 6 | +| 服务端与网络 | 2 | 0 | 4 | 6 | | 错误、日志与调试 | 1 | 0 | 3 | 4 | | 全局入口与构建 | 2 | 1 | 3 | 6 | | 回放播放控制 | 3 | 3 | 0 | 6 | -| 合计 | 45 | 21 | 27 | 93 | +| 合计 | 48 | 21 | 24 | 93 | + +> not planned:17(§2:2、7、8、10、11、12;§3:1、2、3;§4:5;§7:2、3;§8:3;§9:2、4、5、6);maybe:1(§4:20)。 ## 12. 边界说明