docs(port-plan): data-source switch from m2dev assets to 40250 (batch 2D)
Records the root/uiscript/locale comparison: npclist, msm contents and motion/combo registration match; msm location differs; item_proto and mob_proto use a different record layout and TEA instead of XChaCha20, so proto.cpp cannot read them; pack contents not yet compared. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+30
-4
@@ -24,7 +24,7 @@ metin2-client 是 40250 Windows 客户端的跨平台版本(macOS / Windows /
|
||||
| --- | --- | --- |
|
||||
| 2026-09-22 | **逻辑层按 40250 结构移植**:C++ → C++,文件名、类名、方法名、成员名、语句顺序都保持一致 | 能逐文件机械核对,不再"找差异" |
|
||||
| 2026-09-22 | **UI 走内嵌 CPython 2.7.18**(方案 A),原样运行 40250 的 `root/*.py` 和 `uiscript/`,只移植 C++ 模块 | 脚本无需改动;macOS 和 Android 真机均已验证,见 `docs/PYTHON-EMBED-EVAL.md` |
|
||||
| 2026-09-22 | UI 参考源是 40250 的 `Client/Eternexus/root`,**不是**仓库里的 `assets/root`(m2dev 版本) | 两者有实质差异 |
|
||||
| 2026-09-22 | 数据源统一改为 40250(`Client/Eternexus` 的 root/uiscript/locale,以及 `Client/pack` 的资源),**不再用**仓库里 m2dev 版本的 `assets/root`、`assets/uiscript`、`assets/locale` | 两者有实质差异,见第 5 节 |
|
||||
| 2026-09-22 | 现有 `project/ui/*.gd`(60 个文件,依据的是错误版本的脚本)不再维护,由 Python 层取代 | — |
|
||||
|
||||
## 3. 三个层和代码位置
|
||||
@@ -63,6 +63,7 @@ extension/third_party/cpython-2.7.18/ # 静态库(2P 批次
|
||||
| — | 内嵌 Python Android 真机验证 | 完成(b02c49bb) |
|
||||
| 2 | P0 角色/移动单元照抄到镜像文件;第一个单元负责建立 `port/`、`platform/` 和 CMake 目标 | **下一步,未开始** |
|
||||
| 2P | CPython 2.7.18 编进 libmtgodot:macOS → Android APK → iOS | **下一步,未开始**,可与 2 并行 |
|
||||
| 2D | 数据源切到 40250(第 5 节的 4 步) | **下一步,未开始**,可与 2、2P 并行;2P 跑 40250 脚本前必须完成 |
|
||||
| 3 | P1 战斗/技能 → P2 游戏阶段封包 → P3 物品;Python 层(`PythonLauncher` → 窗口系统 → `*Module.cpp`) | 未开始 |
|
||||
| 4 | `NEEDS_LIVE` 真服验证 | 未开始 |
|
||||
|
||||
@@ -88,7 +89,32 @@ extension/third_party/cpython-2.7.18/ # 静态库(2P 批次
|
||||
4. 先用桩 C++ 模块在 APK 进程里跑通 `system.py` → `prototype.RunApp()`(对照结果:74 个模块中 66 个加载成功,引导期调用 33 个 C++ 函数)
|
||||
5. 同样的流程在 iOS 上跑一遍
|
||||
|
||||
## 5. 当前进度
|
||||
## 5. 数据源切换:m2dev assets → 40250
|
||||
|
||||
现在的渲染和逻辑读的是 `assets/`,这是从 m2dev 的包解出来的。2026-09-22 与 40250 `Client/Eternexus` 逐项对比的结果:
|
||||
|
||||
| 数据 | 读取方 | 与 40250 的差异 | 处理 |
|
||||
| --- | --- | --- | --- |
|
||||
| `root/npclist.txt` | `mob_view.gd`、`m2_client.cpp` | 相同 | 无 |
|
||||
| 8 个 `*.msm`(种族模型、挂点、染色) | `equip_model.gd`、`player_view.gd` | 内容相同,位置不同:m2dev 在 `root/msm/<cls>_<m/w>.msm`,40250 在 `root/<cls>_<m/w>.msm`(`LoadLocalRaceData("warrior_m.msm")`) | 查找列表加上 40250 的位置 |
|
||||
| `playersettingmodule.py` 的动作注册(`SetGeneralMotions`、`__LoadGame*Ex`)和连击表 | `motion_registry.gd`、`net_play.gd` | 相同 | 40250 的文件是 CP949 + CRLF,切换后跑一遍解析测试 |
|
||||
| `playersettingmodule.py` 的特效注册 | 暂无 | 40250 多了 `EFFECT_LEVELUP_*_FOR_GERMANY`、`EFFECT_EMPIRE+1..3`,少了 `EFFECT_AGGREGATE_MONSTER` | 移植特效时按 40250 |
|
||||
| `atlasinfo.txt`、`grpblk.txt` | — | 相同 | 无 |
|
||||
| `uiscript/uiscript` | 现有 `project/ui/*.gd` | 40250 有 94 个,m2dev 有 80 个;共有的 71 个中,去掉空白差异后有 11 个不同(建角/选角/密码/信使/公会等) | 由 2P 直接运行 40250 的 uiscript,不单独处理 |
|
||||
| `item_proto` | `proto.cpp` | **读不了**:40250 每条 156 字节(`TItemTable`),m2dev 236 字节;40250 用经典 TEA(32 轮,`0x9E3779B9`),m2dev 用 XChaCha20 | 按 40250 移植 |
|
||||
| `mob_proto` | `proto.cpp` | **读不了**:每条 255 字节 vs 335 字节,加密同上 | 按 40250 移植 |
|
||||
| `item_list.txt` | `item_list.gd` | 177 行不同(m2dev 有 dummy 条目等);40250 放在 `locale/en/`,m2dev 在 `locale/common/` | 按 40250 路径读取 |
|
||||
| `locale_interface.txt`、`itemdesc.txt`、`skilldesc.txt`、`skilltable.txt` | UI、技能表 | 20 行 / 2 行 / 2 行 / 位置不同 | 按 40250 路径读取 |
|
||||
| 模型、贴图、地图(PC、Monster、Outdoor 等) | 渲染 | **未核对**:40250 是经典 `.eix/.epk` 包 | 见第 3 步 |
|
||||
|
||||
切换步骤(批次 2D):
|
||||
|
||||
1. msm 查找路径加上 `root/<cls>_<m/w>.msm`。
|
||||
2. proto 读取按 40250 移植:`EterBase/tea.cpp`、`GameLib/ItemData.h` 的 `TItemTable`、`CPythonNonPlayer` 的 mob 表,放进镜像文件,替换 `extension/src/proto/proto.cpp` 里的 m2dev 格式。
|
||||
3. 移植 40250 的 EPK 读取(`EterPack/EterPack.cpp`),解出 `Client/pack`,与 `assets/` 抽样比对模型/贴图/地图;有差异的以 40250 为准。
|
||||
4. 资源根切到 40250 数据(`MT_ASSETS` 指向解出的目录),跑渲染和解析测试,更新本节状态。
|
||||
|
||||
## 6. 当前进度
|
||||
|
||||
实时数字用 `port_map.py status` 查看。2026-09-22 的状态:
|
||||
|
||||
@@ -98,7 +124,7 @@ extension/third_party/cpython-2.7.18/ # 静态库(2P 批次
|
||||
| python | 4890 | 0(其中 `Client/root` 的 3350 个在 2P 完成后记为 `N_A`,属于原样运行) |
|
||||
| platform | 2229 | 0 |
|
||||
|
||||
## 6. 换机器后的环境准备
|
||||
## 7. 换机器后的环境准备
|
||||
|
||||
目录布局(路径都相对 `~/Work/mt/`,工具按相对路径查找):
|
||||
|
||||
@@ -129,4 +155,4 @@ python2.7 .agents/skills/metin2-40250-parity-audit/scripts/py_embed_spike.py --o
|
||||
tools/py_embed_android/build-and-run.sh # 可选:连接 Android 真机复核
|
||||
```
|
||||
|
||||
然后按第 4 节的"下一步"继续,一个单元完成后在第 4、5 节更新状态并提交。
|
||||
然后按第 4 节的"下一步"继续,一个单元完成后在第 4、6 节更新状态并提交。
|
||||
|
||||
Reference in New Issue
Block a user