{ "reference": "UserInterface/UserInterface.cpp", "reference_sha256": "beed987e4b1de627acafe7ea6f5fde989b8f4b33c8643fe2abb0f7152ea4a9eb", "priority": "P4", "contracts": [], "functions": { "ApplicationSetErrorString": { "status": "PORTED", "impl": [ "src/platform/UserInterface/UserInterface.cpp:ApplicationSetErrorString" ], "test": [ "tests/port/port_app_loop_test.cpp (port.app_loop: ApplicationSetErrorString fills gs_szErrorString; ApplicationStringTable_GetStringz(IDS_APP_NAME))" ] }, "CheckPythonLibraryFilenames": { "status": "N_A", "note": "Win32 install check of lib\\\\*.pyc next to the exe. The embedded CPython 2.7 stdlib is installed by PythonHost::InstallStdLib, whose failure fails PythonBoot::Start." }, "ApplicationStringTable_Initialize": { "status": "PORTED", "impl": [ "src/platform/UserInterface/UserInterface.cpp:ApplicationStringTable_Initialize", "src/platform/ScriptLib/PythonBoot.cpp:PythonBoot::Start" ], "test": [ "tests/port/port_app_loop_test.cpp (port.app_loop: ApplicationSetErrorString fills gs_szErrorString; ApplicationStringTable_GetStringz(IDS_APP_NAME))" ], "note": "verbatim; PythonBoot::Start calls it before locale.cfg as WinMain does, with a NULL module handle (LoadString is the English STRINGTABLE switch)." }, "ApplicationStringTable_GetString": { "status": "ADAPTED", "impl": [ "src/platform/UserInterface/UserInterface.cpp:ApplicationStringTable_GetString" ], "note": "Only the (DWORD) overload: LoadString becomes a switch over UserInterface.rc's LANG_ENGLISH/SUBLANG_ENGLISH_US STRINGTABLE. The (DWORD, LPCSTR) metin2client.dat overload is declared but not defined (no caller ported yet).", "test": "tests/port/port_login_flow_test.cpp ground-item step (port.login_flow: ALT frame projects the item name tail, textTail Pick returns the ground item VID); PythonTextTail::SetItemTextTailOwner uses IDS_POSSESSIVE_MORPHENE" }, "ApplicationStringTable_GetStringz": { "status": "ADAPTED", "impl": [ "src/platform/UserInterface/UserInterface.cpp:ApplicationStringTable_GetStringz" ], "note": "Only the (DWORD) overload: LoadString becomes a switch over UserInterface.rc's LANG_ENGLISH/SUBLANG_ENGLISH_US STRINGTABLE. The (DWORD, LPCSTR) metin2client.dat overload is declared but not defined (no caller ported yet).", "test": "tests/port/port_login_flow_test.cpp ground-item step (port.login_flow: ALT frame projects the item name tail, textTail Pick returns the ground item VID); PythonTextTail::SetItemTextTailOwner uses IDS_POSSESSIVE_MORPHENE" }, "PackInitialize": { "impl": [ "src/platform/UserInterface/UserInterface.cpp:PackInitialize" ], "status": "ADAPTED", "note": "platform PackInitialize: Index pack names resolved to the on-disk .eix spelling case-insensitively; no LogBoxf; CTextFileLoader::SetCacheMode / CSoundData::SetPackMode not called (units not ported, neither affects pack registration)", "test": "tests/port/port_eterpack_test.cpp (103 packs, 54891 entries, first-registered wins, 4 SECURITY rejects); tests/port/proto_test.cpp (40250 locale/en item_proto/mob_proto through pack://)" }, "RunMainScript": { "impl": [ "src/platform/ScriptLib/PythonBoot.cpp:PythonBoot::RunMainScript" ], "status": "ADAPTED", "note": "40250 runs it on Main()'s stack and takes the CPythonLauncher by reference; Godot owns this process, so PythonBoot::Start holds the launcher and RunMainScript takes only the command line plus a std::string* for the text 40250 shows in LogBox's message box. Of the 37 module initializers only initpack() is called — the rest are 2V slices, which is why system.py still stops at its first import. RegisterCommandLine passes the line through unchanged: the -cs/-ncs auto-login decoding needs EterBase/Utils.cpp SplitLine and EterLib/Util.cpp base64_decode, both still TODO (批次 2V1). '--pause-before-create-window' (system(\"pause\")) and the XTrap init check are dropped: no console and no XTrap on this platform.", "test": "project/python_host_test.gd (godot --headless --path project --script python_host_test.gd) and the same check through MT_TEST_MODE=python in project/client_main.gd -> system.py stops at ImportError: No module named app, the same point as ctest port.python_launcher" }, "Main": { "status": "ADAPTED", "impl": [ "src/platform/ScriptLib/PythonBoot.cpp:PythonBoot::Start", "src/platform/ScriptLib/PythonBoot.cpp:PythonBoot::RunMainScript", "src/platform/UserInterface/UserInterface.cpp:PackSingletons" ], "note": "40250: Main seeds rand, opens the log, creates CLZO/CEterPackManager, PackInitialize(\"pack\"), locale, CPythonApplication, CPythonLauncher + exception sender, RunMainScript, then tears down. Port: the host owns the frame loop, so PythonBoot::Start does the setup (launcher, exception sender, singletons, CPythonApplication::Create pieces), PackSingletons/PackInitialize run from the host pack bootstrap, and RunMainScript runs system.py on a script fiber that parks in app.Loop(). Invariant: the same singletons exist and system.py runs with __COMMAND_LINE__ before the first frame.", "test": [ "tests/port/port_app_loop_test.cpp (port.app_loop: Start + RunMainScript reach app.Loop)", "tests/port/port_login_flow_test.cpp" ] }, "CreateMetin2GameMutex": { "status": "N_A", "note": "Win32 named mutex; no caller in 40250." }, "DestroyMetin2GameMutex": { "status": "N_A", "note": "Win32 named mutex; no caller in 40250." }, "__ErrorPythonLibraryIsNotExist": { "status": "N_A", "note": "message box for CheckPythonLibraryFilenames (N_A); PythonBoot::Start returns the InstallStdLib error instead." }, "__IsTimeStampOption": { "status": "N_A", "note": "WinMain launcher option (/timestamp -> build-stamp message box); the host has no Win32 command line." }, "__PrintTimeStamp": { "status": "N_A", "note": "WinMain /timestamp message box with _MSC_VER build stamp; no gameplay semantics." }, "__IsLocaleOption": { "status": "N_A", "note": "WinMain --locale writes locale.txt and quits (launcher diagnostics); the host has no Win32 command line." }, "__IsLocaleVersion": { "status": "N_A", "note": "WinMain --perforce-revision writes .version and quits (patcher diagnostics)." }, "__IsOpenIDAuthKeyOption": { "status": "N_A", "note": "USE_OPENID is not defined in the 40250 build; compiled out." }, "__IsOpenIDTestOption": { "status": "N_A", "note": "USE_OPENID is not defined in the 40250 build; compiled out." }, "WinMain": { "status": "N_A", "note": "Win32 entry: hackshield/XTrap/GameGuard/CheckLatestFiles/WebBrowser/COM and launcher options. The platform entry is the host (src/host, android) calling PythonBoot::Start (ApplicationStringTable_Initialize, locale.cfg + SetDefaultCodePage) then PythonBoot::RunMainScript." }, "GrannyError": { "status": "N_A", "note": "never installed: 40250 Setup sets the Granny log callback Function to nullptr." }, "Setup": { "status": "N_A", "note": "timeBeginPeriod (Win32 timer resolution) and a null Granny log callback, which is the GrannyRuntime default." } } }