Files
shenandClaude Sonnet 5 47baf6c0c6 Metin2 game client (P0–P11) + mobile asset pipeline
Networked client on the existing Godot 4.7 + libgr2 renderer:
- net: m2dev wire protocol (libsodium KX + XChaCha20), auth/select/game
  phases, EntityStore world model, ~all GC/CG headers. char create/delete,
  private shop / mall / cube, SHOP_GC_START_EX, guild, party (+ CG_PARTY_SET_STATE),
  quests, dragon soul, refine, safebox, exchange.
- UI: in-game windows migrated 1:1 from the reference uiscript/root .py —
  char status (/stat), inventory+equipment, select-item ([SELECT_ITEM] quest
  token), system-option + game-option + ESC system menu, private-shop 39-grid,
  party info board, shop tabs, atlas, minimap, quickbar, chat, …
- EterGrnLib polish: GR2 material blend/two-sided, LOD crossfade, motion-event
  dispatch, contact shadow, ray-AABB picking, weapon grip pre-transform.

Portable asset IO (A1) — all extension/libgr2/formats/mtproto reads routed
through godot::FileAccess (res:// PCK works on iOS/Android); standalone-lib
*_path() kept for the non-Godot CTests. AssetResolver + PropertyRegistry
switched to a baked index (bake_asset_index.gd) instead of std::filesystem.

Mobile builds: build-{android,ios}.sh, export-android.sh, pack-assets.sh,
gen-debug-keystore.sh. Assets ship as a zip mounted at runtime by
project/asset_pack.gd (adb push now; HTTP download is a drop-in later).

ctest 10/10, 34 GDScript suites, macOS/iOS/Android all build.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013EJxkHiNKS4kybHS3XKyAJ
2026-08-31 20:02:12 +09:00

44 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# oracle/ —— Windows 真值源工具
**独立 Windows/MSVC 工程,不在主 CMake 树内。** 施工文档:[`../docs/steps/00-oracle.md`](../docs/steps/00-oracle.md)
## 两条轨
| 轨 | 产物 | 状态 |
|---|---|---|
| **Oracle-Lite**(只用 `granny2.dll` C API | `granny_probe.exe` · `oracle dump` CLI · 最小 D3D9 渲染器 | 必做,关键路径 |
| **Oracle-Full**+ 抽出的 `EterGrnLib` | `oracle_etergrn` + 层② dump | 延后,demo 不需要 |
## 目录
```
oracle/
oracle.c ★ Oracle-Lite 全部:probeT1+ dumpT3 层① / T5 蒙皮顶点)
CMakeLists.txt Windows/MSVC 工程,链泄露 SDK 的 granny2_x64.lib
RUNBOOK.md 怎么 build+run(原生 Windows / Wine / stretch: POSIX 移植)
GRANNY-VERSION.md 版本判定 + 候选对比(待跑 probe 填实)
FORMAT.md dump 二进制布局 + 坐标约定
vendor/ 锁定的 granny2 DLLT1 选定后 git-track
render/ 独立最小 D3D9 → PNGT6,不依赖 EterGrnLib;待写)
selfcheck.* T7 自检(Windows CI runner;逻辑见 RUNBOOK.md「selfcheck」)
full/ Oracle-Fulloracle_etergrn + 层② dumpT2/T4,延后)
```
## 状态
- [x] `oracle.c` —— probe + dump(层① 世界矩阵 + mesh N 蒙皮顶点)
- [x] **macOS + Wine 跑通**`build-wine.sh` = MinGW-w64 交叉编译 + wine-stable)。Granny **2.9.12.0**
- [x] **T1** DLL 选定 + probe vs `gr2dump` 逐字段一致(`GRANNY-VERSION.md`
- [x] **T3/T5** 层① dump + 蒙皮顶点 dump 跑通;**M2 门禁·主对拍 PASS**
- `warrior_cheongrin` bind + `dance_1` @ t={0, 4.7, 11.333, 20}:骨骼矩阵 `max|Δ| ≤ 4.1e-5`、蒙皮顶点 `max‖Δ‖ ≤ 6.5e-5`
- `assassin`(双 root,非单位 InitialPlacementbind`3.1e-5 / 4.6e-5`
- 对拍工具 `tools/oracle_diff`libgr2 侧读 `.bin` 逐字段比)
- [ ] T8 noise_floor.json(跑同 dump 100 次 + 换相邻 DLL 一次,取 `max|Δ|`
- [ ] T6 D3D9 确定态截图 harnessM1 视觉对拍用)
- [ ] Oracle-Full(层②,`EterGrnLib`)—— 延后
## 输出
- dump → `../test/oracle_dumps/`(格式见 `FORMAT.md`
- 噪声地板 → `../test/noise_floor.json`T8M2 用它设 ε)