CScreen::SetCursorPosition and CPythonGraphic::SetCursorPosition are the 40250 bodies, so RenderGame builds the pick ray under the cursor each frame. CPythonBackground::GetPickingPoint* march that ray as CMapOutdoor::__PickTerrainHeight does, against the native CMapManager height (PR_FLOAT_TO_INT's x87 rounding becomes floor); object picking waits for CMapOutdoor. CMapManager::isAttrOn reads the packed <map>/<xxxyyy>/attr.atr as CMapOutdoor::isAttrOn + CTerrain::isAttrOn do, and CheckAdvancing with its collision checkers is verbatim (no map objects are registered yet). All of this stays in the pending/platform layer and is marked ADAPTED. port.login_flow clicks the ground below the actor after the key walk. The actor walks to the picked point (334 cm offline), and the fake server sees FUNC_MOVE, then FUNC_WAIT. It also checks that the actor's cell is free and that its terrain block has blocked cells. port.login_live against the real server passed (key 133 cm, click 296 cm), and python_game_render_test.sh passes offline. MT_TEST_MODE=python_ui now adds the 3D surface, so the port route can be played by hand. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
215 lines
6.8 KiB
JSON
215 lines
6.8 KiB
JSON
{
|
|
"reference": "GameLib/MapManager.cpp",
|
|
"reference_sha256": "6e20512dcbe73aeb9d49300667ce460bbd21bf4697a75a0d96fa1b57e7c8a4ff",
|
|
"priority": "P4",
|
|
"contracts": [],
|
|
"functions": {
|
|
"CMapManager::IsMapOutdoor": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetMapOutdoorRef": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::CMapManager": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::CMapManager"
|
|
],
|
|
"note": "Constructor matches 40250; kept in pending file until CMapOutdoor is ported.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::~CMapManager": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::~CMapManager"
|
|
],
|
|
"note": "Calls transition adapter Destroy, which frees pack-backed map state.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::IsSoftwareTilingEnable": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::ReserveSoftwareTilingEnable": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::Initialize": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::Initialize"
|
|
],
|
|
"note": "40250 AtlasInfo loading order; pack text parsed in transition adapter.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::Create": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::Create"
|
|
],
|
|
"note": "No CMapOutdoor allocation yet; Metin2World renders terrain.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::Destroy": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::Destroy"
|
|
],
|
|
"note": "Frees transition map and environment data; CMapOutdoor cleanup remains TODO.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::Clear": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::Clear"
|
|
],
|
|
"note": "Clears pack-backed terrain state, not CMapOutdoor.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::AllocMap": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::LoadProperty": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::LoadMap": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::LoadMap"
|
|
],
|
|
"note": "Loads Setting.txt, initial height tile and .msenv from 40250 packs for reachable Warp chain; outdoor scene lifecycle remains TODO.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::IsMapReady": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::IsMapReady"
|
|
],
|
|
"note": "Reports pack-backed transition map readiness instead of CMapOutdoor::IsReady.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::UnloadMap": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::UpdateMap": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::UpdateAroundAmbience": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetHeight": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::GetHeight"
|
|
],
|
|
"note": "Uses the 40250 terrain triangle interpolation on packed height.raw; placed-object height remains TODO.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::GetTerrainHeight": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetWaterHeight": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::BeginEnvironment": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::BeginEnvironment"
|
|
],
|
|
"note": "Applies .msenv material/background light through RecordingDevice; fog and full CMapOutdoor environment remain TODO.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::EndEnvironment": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::EndEnvironment"
|
|
],
|
|
"note": "Restores recorded lighting state; full environment state restoration remains TODO.",
|
|
"test": "project/python_game_render_test.gd"
|
|
},
|
|
"CMapManager::SetEnvironmentData": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::SetEnvironmentDataPtr": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::ResetEnvironmentDataPtr": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::BlendEnvironmentData": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::RegisterEnvironmentData": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetCurrentEnvironmentData": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetEnvironmentData": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::RefreshPortal": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::ClearPortal": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::AddShowingPortalID": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::AllocEnvironmentData": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::DeleteEnvironmentData": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::LoadEnvironmentData": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetShadowMapColor": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetRenderedSplatNum": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetRenderedGraphicThingInstanceNum": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetNormal": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::isPhysicalCollision": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::isAttrOn": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::isAttrOn"
|
|
],
|
|
"test": "extension/tests/port_login_flow_test.cpp",
|
|
"note": "CMapOutdoor::isAttrOn + CTerrain::isAttrOn verbatim over native attr.atr tiles (Setting.txt map size instead of the CTerrain list)."
|
|
},
|
|
"CMapManager::GetAttr": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::SetTerrainRenderSort": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::SetTransparentTree": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetTerrainRenderSort": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::GetBaseXY": {
|
|
"status": "TODO"
|
|
},
|
|
"CMapManager::__LoadMapInfoVector": {
|
|
"status": "ADAPTED",
|
|
"impl": [
|
|
"extension/src/platform/pending/GameLib/MapManager.cpp:CMapManager::__LoadMapInfoVector"
|
|
],
|
|
"note": "Reads packed AtlasInfo bounds with 40250 terrain tile size; parser is transitional.",
|
|
"test": "project/python_game_render_test.gd"
|
|
}
|
|
}
|
|
}
|