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
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"granny": "2.9.12.0",
|
||||
"threshold": {"mat": 1e-3, "vtx": 1e-3},
|
||||
"cases": [
|
||||
{"model":"warrior_cheongrin.gr2","anim":"-","t":0,"mesh":4,"mat":1.5e-05,"vtx":4.6e-05,"status":"PASS"},
|
||||
{"model":"warrior_cheongrin_lod_01.gr2","anim":"-","t":0,"mesh":4,"mat":1.5e-05,"vtx":4.6e-05,"status":"PASS"},
|
||||
{"model":"warrior_cheongrin_lod_02.gr2","anim":"-","t":0,"mesh":4,"mat":1.5e-05,"vtx":4.6e-05,"status":"PASS"},
|
||||
{"model":"warrior_cheongrin_lod_03.gr2","anim":"-","t":0,"mesh":4,"mat":1.5e-05,"vtx":4.6e-05,"status":"PASS"},
|
||||
{"model":"warrior_lord.gr2","anim":"-","t":0,"mesh":1,"mat":1.5e-05,"vtx":1.5e-05,"status":"PASS"},
|
||||
{"model":"warrior_lord_lod_01.gr2","anim":"-","t":0,"mesh":1,"mat":1.5e-05,"vtx":1.5e-05,"status":"PASS"},
|
||||
{"model":"warrior_lord_lod_02.gr2","anim":"-","t":0,"mesh":1,"mat":1.5e-05,"vtx":1.5e-05,"status":"PASS"},
|
||||
{"model":"warrior_lord_lod_03.gr2","anim":"-","t":0,"mesh":1,"mat":1.5e-05,"vtx":1.5e-05,"status":"PASS"},
|
||||
{"model":"assassin.gr2","anim":"-","t":0,"mesh":16,"mat":3.1e-05,"vtx":4.6e-05,"status":"PASS"},
|
||||
{"model":"shaman_lord.gr2","anim":"-","t":0,"mesh":0,"mat":7.6e-06,"vtx":3.8e-05,"status":"PASS"},
|
||||
{"model":"redthief2_soldier2_lod_01.gr2","anim":"-","t":0,"mesh":4,"mat":0,"vtx":0,"status":"PASS"},
|
||||
{"model":"snakeman_bow_lod_01.gr2","anim":"-","t":0,"mesh":0,"mat":3.1e-05,"vtx":6.1e-05,"status":"PASS"},
|
||||
{"model":"snakeman_bow_lod_01.gr2","anim":"-","t":0,"mesh":1,"mat":3.1e-05,"vtx":3.2e-05,"status":"PASS"},
|
||||
{"model":"warrior_rabbit1_backup.gr2","anim":"-","t":0,"mesh":0,"mat":1.5e-05,"vtx":3.9e-05,"status":"PASS"},
|
||||
{"model":"ox_01.gr2","anim":"-","t":0,"mesh":0,"mat":0,"vtx":0,"status":"PASS"},
|
||||
{"model":"warrior_cheongrin.gr2","anim":"dance_1.gr2","t":0,"mesh":4,"mat":2.3e-05,"vtx":3.9e-05,"status":"PASS"},
|
||||
{"model":"warrior_cheongrin.gr2","anim":"dance_1.gr2","t":4.7,"mesh":4,"mat":3.1e-05,"vtx":5e-05,"status":"PASS"},
|
||||
{"model":"warrior_cheongrin.gr2","anim":"dance_1.gr2","t":11.333,"mesh":4,"mat":4.1e-05,"vtx":5.8e-05,"status":"PASS"},
|
||||
{"model":"warrior_cheongrin.gr2","anim":"dance_1.gr2","t":20,"mesh":4,"mat":3.1e-05,"vtx":6.5e-05,"status":"PASS"},
|
||||
{"model":"warrior_cheongrin.gr2","anim":"attack.gr2","t":0.3,"mesh":4,"mat":4.5e-05,"vtx":5.9e-05,"status":"PASS"},
|
||||
{"model":"warrior_cheongrin.gr2","anim":"run.gr2","t":0.5,"mesh":4,"mat":2.3e-05,"vtx":5e-05,"status":"PASS"},
|
||||
{"model":"warrior_lord.gr2","anim":"dance_1.gr2","t":10,"mesh":1,"mat":4.6e-05,"vtx":6.4e-05,"status":"PASS"},
|
||||
{"model":"warrior_lord.gr2","anim":"wait.gr2","t":1.0,"mesh":1,"mat":4.6e-05,"vtx":4.8e-05,"status":"PASS"}
|
||||
],
|
||||
"summary": {"total": 23, "passed": 23, "worst_mat": 4.6e-05, "worst_vtx": 6.5e-05}
|
||||
}
|
||||
Reference in New Issue
Block a user