[Parity][automap][S1][R] Tab 键与迷你面板自动地图按钮在 off → level → act 三态揭图间循环,原版仅切换开关且只显示已探索区域 #584

Closed
opened 2026-10-02 11:42:42 +00:00 by troytt · 0 comments
Owner

1.13c 客户端保真度审计立项(基准快照:7bd1090 / main @ 77a20c7)

证据标记说明:V-data = 1.13c MPQ 数据表 (.txt / animdata.d2 / .tbl / pal.pl2);V-src = D2MOO 逆向源码;V-bin = 1.13c DLL 反汇编;K = 1.13c 公认行为。

来源审计项:motion-input#4 — [S1][R] 4. Tab 被做成"揭图"三态循环(off → level → act),原版"只显示已探索区域"的 automap 永远看不到

  • 位置:command-mapper.ts:715-726;ui-model/hud-model.ts:539-547(toggleAutomap);scene/world-renderer.ts:1138-1143(mode 为 'off' 时 minimap.visible = false);automap/automap-view.ts:200-207('level' 揭示整层全部 DRLG 房间,'act' 生成并揭示整幕);settings/client-settings.ts:15, 23, 40-44, 59(automapReveal 设置,默认 'off');session/online-session.ts:295-298(initialMode 取自设置)
  • 代码:const next = cur === 'off' ? 'level' : cur === 'level' ? 'act' : 'off'
  • 原版:Tab 只负责开关 automap 叠加层,显示的内容只有玩家已探索(走近后揭开)的部分,没有"整层或整幕全图"模式(K-高)。
  • 影响:默认情况下看不到任何 automap。第一次按 Tab 就是整层全图(相当于 maphack),第二次是整幕全图。automap-view.ts:204 文档说 'off' 只显示 0x07 已揭示的房间,但渲染端在 'off' 时直接把 automap 隐藏了,这个模式永远到不了。玩家还能在设置里把揭图模式设成默认。
  • 建议:Tab 只做显示/隐藏;内容只画已探索的房间(按原版揭示规则)。删除 level/act 揭图;如果要保留,只作为调试开关,不接 Tab,也不放进玩家设置。
  • 已有 issue:—(#549 只修了随区域切换)

来源审计项:map#4 — [S1][R] Tab 变成三态循环 off→level→act→off:第二次按 Tab 进入自创的"整幕"视图,而不是关闭地图

位置:

  • src/client/ui-model/hud-model.ts:542-547(toggleAutomap):cur === 'off' ? 'level' : cur === 'level' ? 'act' : 'off'。
  • src/client/input/command-mapper.ts:716-723:Tab 走这条路径,回退分支也是同样的三态。
  • src/client/scene/world-renderer.ts:1139-1143:可见性跟随 mode。
  • src/client/automap/automap-view.ts:48-54:ACT_PRIMARY_LEVEL_IDS,手写的每幕关卡清单。
  • automap-view.ts:379-390(applyRevealModeToViews):在 'act' 模式下对清单中每个关卡同步调用 ensureLevelView(主线程同步跑 DRLG)。
  • automap-view.ts:412-421:'act' 模式把这些关卡都设为可见。

代码:

const next = cur === 'off' ? 'level' : cur === 'level' ? 'act' : 'off'   // hud-model.ts:545

原版: default.key 把 Tab 绑定为 func7(自动地图)。V-data:本地解析 $S/excel/default.key。原版行为是开/关自动地图(K,高把握)。原版不存在"整幕"显示模式,自动地图永远只画当前关卡(以及同层可见房间)。

影响:

  • 玩家按 Tab 打开地图,再按一次 Tab 并不会关闭,而是进入一个自创视图,需要按第三次才关闭。
  • 'act' 视图同步生成 15-22 个关卡,其中任何一个出异常都会静默换成伪造关卡(见 S2 "伪 LevelView" 一条)。
  • ensureLevelView 会通过 mapService.loadAct/getLevelView 改写 MapService.activeView。map-service.ts:452-456 的注释已承认这个副作用(#539)。

建议: Tab 只做 off ↔ on 切换,删除 'act' 模式和 ACT_PRIMARY_LEVEL_IDS。

已有 issue: —(#534 讲的是按键冲突和重复处理器,没有涉及这里的三态语义)


来源审计项:hud#4 — [S2][R] 4. Tab 键和迷你面板"自动地图"按钮在 off → level → act 三种揭示模式间循环

  • 位置:src/client/ui-model/hud-model.ts:540-547(toggleAutomap)。调用方:src/client/input/command-mapper.ts:716-727(Tab)、src/client/main.ts:209-211 加 src/client/ui/hud-manager.ts:1676(迷你面板)。模式语义见 src/client/automap/automap-view.ts:200-207、:430-437;显示条件见 src/client/scene/world-renderer.ts:1139-1142。
  • 代码:const next = cur === 'off' ? 'level' : cur === 'level' ? 'act' : 'off'
  • 原版:Tab 只负责显示或隐藏自动地图,地图内容只来自已探索的房间(K-高)。
  • 影响:'off' 就等于"隐藏"。第一次按 Tab 进入 'level',数据源变成当前关卡的全部 DRLG 房间,不再按服务器 0x07 AddMapRoom 过滤;第二次进入 'act',加载整幕主要关卡和跨关卡出口标签;第三次才关闭。服务器揭示过滤只在不显示地图的 'off' 模式下生效。最终画出多少,还要看 minimap 自己的 explored 掩码(属于 automap 区域,这里没有深究)。但"第二次按 Tab 不关地图,而是切到整幕揭示"本身就和原版不同。toolbar 的 automapReveal 设置(默认 off)共用同一个状态。
  • 建议:Tab 只切换自动地图可见性;揭示范围固定来自服务器和探索数据。如果要保留揭示模式作调试用,应和 Tab 分开,正常游玩中不可触发。
  • 已有 issue:—
> **1.13c 客户端保真度审计立项**(基准快照:`7bd1090` / `main @ 77a20c7`) > 证据标记说明:`V-data` = 1.13c MPQ 数据表 (`.txt` / `animdata.d2` / `.tbl` / `pal.pl2`);`V-src` = D2MOO 逆向源码;`V-bin` = 1.13c DLL 反汇编;`K` = 1.13c 公认行为。 ### 来源审计项:`motion-input#4` — [S1][R] 4. Tab 被做成"揭图"三态循环(off → level → act),原版"只显示已探索区域"的 automap 永远看不到 - 位置:`command-mapper.ts:715-726`;`ui-model/hud-model.ts:539-547`(`toggleAutomap`);`scene/world-renderer.ts:1138-1143`(mode 为 `'off'` 时 `minimap.visible = false`);`automap/automap-view.ts:200-207`(`'level'` 揭示整层全部 DRLG 房间,`'act'` 生成并揭示整幕);`settings/client-settings.ts:15, 23, 40-44, 59`(`automapReveal` 设置,默认 `'off'`);`session/online-session.ts:295-298`(`initialMode` 取自设置) - 代码:`const next = cur === 'off' ? 'level' : cur === 'level' ? 'act' : 'off'` - 原版:Tab 只负责开关 automap 叠加层,显示的内容只有玩家已探索(走近后揭开)的部分,没有"整层或整幕全图"模式(K-高)。 - 影响:默认情况下看不到任何 automap。第一次按 Tab 就是整层全图(相当于 maphack),第二次是整幕全图。`automap-view.ts:204` 文档说 `'off'` 只显示 0x07 已揭示的房间,但渲染端在 `'off'` 时直接把 automap 隐藏了,这个模式永远到不了。玩家还能在设置里把揭图模式设成默认。 - 建议:Tab 只做显示/隐藏;内容只画已探索的房间(按原版揭示规则)。删除 level/act 揭图;如果要保留,只作为调试开关,不接 Tab,也不放进玩家设置。 - 已有 issue:—(#549 只修了随区域切换) ### 来源审计项:`map#4` — [S1][R] Tab 变成三态循环 off→level→act→off:第二次按 Tab 进入自创的"整幕"视图,而不是关闭地图 **位置:** - `src/client/ui-model/hud-model.ts:542-547`(`toggleAutomap`):`cur === 'off' ? 'level' : cur === 'level' ? 'act' : 'off'`。 - `src/client/input/command-mapper.ts:716-723`:Tab 走这条路径,回退分支也是同样的三态。 - `src/client/scene/world-renderer.ts:1139-1143`:可见性跟随 mode。 - `src/client/automap/automap-view.ts:48-54`:`ACT_PRIMARY_LEVEL_IDS`,手写的每幕关卡清单。 - `automap-view.ts:379-390`(`applyRevealModeToViews`):在 'act' 模式下对清单中每个关卡同步调用 `ensureLevelView`(主线程同步跑 DRLG)。 - `automap-view.ts:412-421`:'act' 模式把这些关卡都设为可见。 **代码:** ```ts const next = cur === 'off' ? 'level' : cur === 'level' ? 'act' : 'off' // hud-model.ts:545 ``` **原版:** `default.key` 把 Tab 绑定为 func7(自动地图)。V-data:本地解析 `$S/excel/default.key`。原版行为是开/关自动地图(K,高把握)。原版不存在"整幕"显示模式,自动地图永远只画当前关卡(以及同层可见房间)。 **影响:** - 玩家按 Tab 打开地图,再按一次 Tab 并不会关闭,而是进入一个自创视图,需要按第三次才关闭。 - 'act' 视图同步生成 15-22 个关卡,其中任何一个出异常都会静默换成伪造关卡(见 S2 "伪 LevelView" 一条)。 - `ensureLevelView` 会通过 `mapService.loadAct/getLevelView` 改写 `MapService.activeView`。`map-service.ts:452-456` 的注释已承认这个副作用(#539)。 **建议:** Tab 只做 off ↔ on 切换,删除 'act' 模式和 `ACT_PRIMARY_LEVEL_IDS`。 **已有 issue:** —(#534 讲的是按键冲突和重复处理器,没有涉及这里的三态语义) --- ### 来源审计项:`hud#4` — [S2][R] 4. Tab 键和迷你面板"自动地图"按钮在 off → level → act 三种揭示模式间循环 - 位置:`src/client/ui-model/hud-model.ts:540-547`(`toggleAutomap`)。调用方:`src/client/input/command-mapper.ts:716-727`(Tab)、`src/client/main.ts:209-211` 加 `src/client/ui/hud-manager.ts:1676`(迷你面板)。模式语义见 `src/client/automap/automap-view.ts:200-207`、`:430-437`;显示条件见 `src/client/scene/world-renderer.ts:1139-1142`。 - 代码:`const next = cur === 'off' ? 'level' : cur === 'level' ? 'act' : 'off'` - 原版:Tab 只负责显示或隐藏自动地图,地图内容只来自已探索的房间(K-高)。 - 影响:`'off'` 就等于"隐藏"。第一次按 Tab 进入 `'level'`,数据源变成当前关卡的全部 DRLG 房间,不再按服务器 0x07 AddMapRoom 过滤;第二次进入 `'act'`,加载整幕主要关卡和跨关卡出口标签;第三次才关闭。服务器揭示过滤只在不显示地图的 `'off'` 模式下生效。最终画出多少,还要看 minimap 自己的 explored 掩码(属于 automap 区域,这里没有深究)。但"第二次按 Tab 不关地图,而是切到整幕揭示"本身就和原版不同。toolbar 的 `automapReveal` 设置(默认 off)共用同一个状态。 - 建议:Tab 只切换自动地图可见性;揭示范围固定来自服务器和探索数据。如果要保留揭示模式作调试用,应和 Tab 分开,正常游玩中不可触发。 - 已有 issue:—
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#584
No description provided.