2V2-e.2: Godot consumer of the 3D draw commands, offline screenshot

python_3d_surface.gd turns RenderGame's recorded draws into meshes under a
camera read back from SetPerspective; textures come from the 40250 packs.
GetFarClip and the CMapManager ctor ported verbatim. Until the environment
is ported, lit draws with no light/ambient are shown unshaded (stand-in).
script/python_game_render_test.sh runs system.py login -> select -> game
against port_fake_login_server (or --live via MT_LIVE_*) and screenshots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-23 20:35:36 +09:00
co-authored by Claude Opus 5.5
parent 5bfa13c5cc
commit 1fe8a4b643
12 changed files with 630 additions and 6 deletions
+13
View File
@@ -37,6 +37,19 @@ static func load_tex(assets_root: String, vpath: String) -> Texture2D:
_cache[key] = tex
return tex
# 只从 40250 Client/pack(Metin2Pack)取,不看 assets/ 散文件:移植的客户端从包里读模型,
# 贴图也必须是同一份(assets/ 里同名的 fork 贴图 UV 布局可能不同)。
static func load_pack_tex(vpath: String) -> Texture2D:
if vpath == "":
return null
var key := "pack|" + vpath
if _cache.has(key):
return _cache[key]
# 40250 的包名带盘符(d:/ymir work/...),原样交给 CEterPackManager。
var tex: Texture2D = _load_pack_image(vpath.replace("\\", "/"))
_cache[key] = tex
return tex
static func _strip_drive(p: String) -> String:
var s := p.replace("\\", "/")
if s.length() >= 2 and s[1] == ":":