port: mark PythonCharacterManager + InstanceBaseMovement PORTED (batch 2 P0)

Both units were copied verbatim in 2V2-b and are on the running path since
2V3; diffed against 40250 (only include case, comment encoding and two
PORT edits) and no duplicate definitions outside port/. P0 queue is empty.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-24 00:02:17 +09:00
co-authored by Claude Opus 5.5
parent 8b4700f008
commit 05de621199
4 changed files with 348 additions and 86 deletions
+1
View File
@@ -526,3 +526,4 @@
{"time":"2026-09-23T13:09:00Z","event":"test_run","id":"PORT-PLAN 2V2-e.5","result":"PASS","tests":["script/port_gate.sh macos: PASS (12 port tests; port.login_live skipped without MT_LIVE_*)","script/python_game_render_test.sh: PASS (4/4 native light0, finite camera matrix, 0.1 cm foot-ground difference, 559 terrain texture contrasts)","port_map.py check: 0 errors","git diff --check: PASS"],"reason":"The first sandboxed port gate run denied localhost sockets; loopback-enabled rerun passed. Full CMapOutdoor and live/cross-map evidence remain outstanding."} {"time":"2026-09-23T13:09:00Z","event":"test_run","id":"PORT-PLAN 2V2-e.5","result":"PASS","tests":["script/port_gate.sh macos: PASS (12 port tests; port.login_live skipped without MT_LIVE_*)","script/python_game_render_test.sh: PASS (4/4 native light0, finite camera matrix, 0.1 cm foot-ground difference, 559 terrain texture contrasts)","port_map.py check: 0 errors","git diff --check: PASS"],"reason":"The first sandboxed port gate run denied localhost sockets; loopback-enabled rerun passed. Full CMapOutdoor and live/cross-map evidence remain outstanding."}
{"time": "2026-09-23T14:45:00Z", "event": "port_round", "unit": "PORT-PLAN 2V3-a: player/input/event handler chain and Granny root motion", "ported": ["UserInterface/PythonPlayer.cpp", "UserInterface/PythonPlayerInput.cpp", "UserInterface/PythonPlayerInputKeyboard.cpp", "UserInterface/PythonPlayerInputMouse.cpp", "UserInterface/PythonPlayerEventHandler.cpp", "UserInterface/PythonPlayerSkill.cpp", "UserInterface/PythonPlayerModule.cpp", "UserInterface/GameType.cpp"], "adapted": ["GrannyUpdateModelMatrix constant-extraction root motion from TrackGroups[0] AccumulationFlags/LoopTranslation (libgr2)"], "divergent": ["VDA accumulation not implemented", "CPythonSkill/CItemData/CItemManager/CPythonItem callees remain pending stubs"], "needs_live": [], "tests": ["port.login_flow: DIK_UP walked 108 cm; fake server got CG_MOVE FUNC_MOVE then FUNC_WAIT at moved y", "port.login_live 192.168.21.203: PASS, walked 132 cm", "ctest all: PASS (login_live skipped without MT_LIVE_*)", "port_map.py check: 0 errors"], "todo": ["mouse click-to-move and attack", "CheckAdvancing/map attribute stubs", "delete legacy movement when default route switches to port"]} {"time": "2026-09-23T14:45:00Z", "event": "port_round", "unit": "PORT-PLAN 2V3-a: player/input/event handler chain and Granny root motion", "ported": ["UserInterface/PythonPlayer.cpp", "UserInterface/PythonPlayerInput.cpp", "UserInterface/PythonPlayerInputKeyboard.cpp", "UserInterface/PythonPlayerInputMouse.cpp", "UserInterface/PythonPlayerEventHandler.cpp", "UserInterface/PythonPlayerSkill.cpp", "UserInterface/PythonPlayerModule.cpp", "UserInterface/GameType.cpp"], "adapted": ["GrannyUpdateModelMatrix constant-extraction root motion from TrackGroups[0] AccumulationFlags/LoopTranslation (libgr2)"], "divergent": ["VDA accumulation not implemented", "CPythonSkill/CItemData/CItemManager/CPythonItem callees remain pending stubs"], "needs_live": [], "tests": ["port.login_flow: DIK_UP walked 108 cm; fake server got CG_MOVE FUNC_MOVE then FUNC_WAIT at moved y", "port.login_live 192.168.21.203: PASS, walked 132 cm", "ctest all: PASS (login_live skipped without MT_LIVE_*)", "port_map.py check: 0 errors"], "todo": ["mouse click-to-move and attack", "CheckAdvancing/map attribute stubs", "delete legacy movement when default route switches to port"]}
{"time": "2026-09-23T15:00:00Z", "event": "port_round", "unit": "PORT-PLAN 2V3-b: click-to-move, terrain picking and attribute map", "ported": [], "adapted": ["CScreen::SetCursorPosition / CPythonGraphic::SetCursorPosition verbatim in platform layer", "CPythonBackground::GetPickingPoint* terrain half via CMapOutdoor::__PickTerrainHeight over native height", "CMapManager::isAttrOn via CMapOutdoor/CTerrain::isAttrOn over packed attr.atr", "CPythonBackground::CheckAdvancing + collision checkers verbatim (no map objects registered yet)"], "divergent": ["object picking and object collision wait for CMapOutdoor"], "needs_live": [], "tests": ["port.login_flow: click walked 334 cm, FUNC_MOVE..FUNC_WAIT; 17814 blocked cells", "port.login_live 192.168.21.203: PASS (key 133 cm, click 296 cm, 11406 blocked cells)", "script/python_game_render_test.sh offline: PASS", "ctest all: 19/19 (login_live skipped without env)", "port_map.py check: 0 errors"], "todo": ["switch client_main default to the port route and delete the legacy GDScript client"]} {"time": "2026-09-23T15:00:00Z", "event": "port_round", "unit": "PORT-PLAN 2V3-b: click-to-move, terrain picking and attribute map", "ported": [], "adapted": ["CScreen::SetCursorPosition / CPythonGraphic::SetCursorPosition verbatim in platform layer", "CPythonBackground::GetPickingPoint* terrain half via CMapOutdoor::__PickTerrainHeight over native height", "CMapManager::isAttrOn via CMapOutdoor/CTerrain::isAttrOn over packed attr.atr", "CPythonBackground::CheckAdvancing + collision checkers verbatim (no map objects registered yet)"], "divergent": ["object picking and object collision wait for CMapOutdoor"], "needs_live": [], "tests": ["port.login_flow: click walked 334 cm, FUNC_MOVE..FUNC_WAIT; 17814 blocked cells", "port.login_live 192.168.21.203: PASS (key 133 cm, click 296 cm, 11406 blocked cells)", "script/python_game_render_test.sh offline: PASS", "ctest all: 19/19 (login_live skipped without env)", "port_map.py check: 0 errors"], "todo": ["switch client_main default to the port route and delete the legacy GDScript client"]}
{"time": "2026-09-24T02:00:00Z", "event": "port_round", "unit": "PORT-PLAN batch 2 P0: UserInterface/PythonCharacterManager.cpp + InstanceBaseMovement.cpp", "ported": ["UserInterface/PythonCharacterManager.cpp (54)", "UserInterface/InstanceBaseMovement.cpp (32)"], "adapted": [], "divergent": [], "needs_live": [], "tests": ["diff vs 40250: include case, comment encoding, 2 PORT edits only", "ctest all: 19/19 incl. port.login_live 192.168.21.203", "port_map.py check: 0 errors"], "todo": ["P1 queue: FlyingInstance, ActorInstanceData, FlyingObjectManager, FlyTrace"]}
@@ -5,100 +5,197 @@
"contracts": [], "contracts": [],
"functions": { "functions": {
"CInstanceBase::SetAttackSpeed": { "CInstanceBase::SetAttackSpeed": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::SetAttackSpeed"
]
}, },
"CInstanceBase::SetMoveSpeed": { "CInstanceBase::SetMoveSpeed": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::SetMoveSpeed"
]
}, },
"CInstanceBase::SetRotationSpeed": { "CInstanceBase::SetRotationSpeed": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::SetRotationSpeed"
]
}, },
"CInstanceBase::NEW_Stop": { "CInstanceBase::NEW_Stop": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_Stop"
]
}, },
"CInstanceBase::NEW_SyncPixelPosition": { "CInstanceBase::NEW_SyncPixelPosition": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_SyncPixelPosition"
],
"note": "verbatim apart from the signature: 40250 Win32 long is 32-bit, so the references are LONG & to keep the header's 32-bit type on LP64."
}, },
"CInstanceBase::NEW_CanMoveToDestPixelPosition": { "CInstanceBase::NEW_CanMoveToDestPixelPosition": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_CanMoveToDestPixelPosition"
]
}, },
"CInstanceBase_GetDegreeFromPosition": { "CInstanceBase_GetDegreeFromPosition": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase_GetDegreeFromPosition"
]
}, },
"CInstanceBase::NEW_GetAdvancingRotationFromDirPixelPosition": { "CInstanceBase::NEW_GetAdvancingRotationFromDirPixelPosition": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_GetAdvancingRotationFromDirPixelPosition"
]
}, },
"CInstanceBase::NEW_GetAdvancingRotationFromDestPixelPosition": { "CInstanceBase::NEW_GetAdvancingRotationFromDestPixelPosition": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_GetAdvancingRotationFromDestPixelPosition"
]
}, },
"CInstanceBase::NEW_GetAdvancingRotationFromPixelPosition": { "CInstanceBase::NEW_GetAdvancingRotationFromPixelPosition": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_GetAdvancingRotationFromPixelPosition"
]
}, },
"CInstanceBase::NEW_SetAdvancingRotationFromDirPixelPosition": { "CInstanceBase::NEW_SetAdvancingRotationFromDirPixelPosition": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_SetAdvancingRotationFromDirPixelPosition"
]
}, },
"CInstanceBase::NEW_SetAdvancingRotationFromPixelPosition": { "CInstanceBase::NEW_SetAdvancingRotationFromPixelPosition": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_SetAdvancingRotationFromPixelPosition"
]
}, },
"CInstanceBase::NEW_SetAdvancingRotationFromDestPixelPosition": { "CInstanceBase::NEW_SetAdvancingRotationFromDestPixelPosition": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_SetAdvancingRotationFromDestPixelPosition"
]
}, },
"CInstanceBase::SetAdvancingRotation": { "CInstanceBase::SetAdvancingRotation": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::SetAdvancingRotation"
]
}, },
"CInstanceBase::StartWalking": { "CInstanceBase::StartWalking": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::StartWalking"
]
}, },
"CInstanceBase::EndWalking": { "CInstanceBase::EndWalking": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::EndWalking"
]
}, },
"CInstanceBase::EndWalkingWithoutBlending": { "CInstanceBase::EndWalkingWithoutBlending": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::EndWalkingWithoutBlending"
]
}, },
"CInstanceBase::IsWaiting": { "CInstanceBase::IsWaiting": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::IsWaiting"
]
}, },
"CInstanceBase::IsWalking": { "CInstanceBase::IsWalking": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::IsWalking"
]
}, },
"CInstanceBase::IsPushing": { "CInstanceBase::IsPushing": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::IsPushing"
]
}, },
"CInstanceBase::IsAttacked": { "CInstanceBase::IsAttacked": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::IsAttacked"
]
}, },
"CInstanceBase::IsKnockDown": { "CInstanceBase::IsKnockDown": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::IsKnockDown"
]
}, },
"CInstanceBase::IsAttacking": { "CInstanceBase::IsAttacking": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::IsAttacking"
]
}, },
"CInstanceBase::IsActingEmotion": { "CInstanceBase::IsActingEmotion": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::IsActingEmotion"
]
}, },
"CInstanceBase::IsGoing": { "CInstanceBase::IsGoing": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::IsGoing"
]
}, },
"CInstanceBase::NEW_MoveToDestInstanceDirection": { "CInstanceBase::NEW_MoveToDestInstanceDirection": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_MoveToDestInstanceDirection"
]
}, },
"CInstanceBase::NEW_MoveToDestPixelPositionDirection": { "CInstanceBase::NEW_MoveToDestPixelPositionDirection": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_MoveToDestPixelPositionDirection"
]
}, },
"CInstanceBase::NEW_Goto": { "CInstanceBase::NEW_Goto": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_Goto"
]
}, },
"CInstanceBase::NEW_MoveToDirection": { "CInstanceBase::NEW_MoveToDirection": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::NEW_MoveToDirection"
]
}, },
"CInstanceBase::EndGoing": { "CInstanceBase::EndGoing": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::EndGoing"
]
}, },
"CInstanceBase::SetRunMode": { "CInstanceBase::SetRunMode": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::SetRunMode"
]
}, },
"CInstanceBase::SetWalkMode": { "CInstanceBase::SetWalkMode": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/InstanceBaseMovement.cpp:CInstanceBase::SetWalkMode"
]
} }
} }
} }
@@ -5,166 +5,329 @@
"contracts": [], "contracts": [],
"functions": { "functions": {
"CPythonCharacterManager::AdjustCollisionWithOtherObjects": { "CPythonCharacterManager::AdjustCollisionWithOtherObjects": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::AdjustCollisionWithOtherObjects"
]
}, },
"CPythonCharacterManager::EnableSortRendering": { "CPythonCharacterManager::EnableSortRendering": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::EnableSortRendering"
]
}, },
"CPythonCharacterManager::InsertPVPKey": { "CPythonCharacterManager::InsertPVPKey": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::InsertPVPKey"
]
}, },
"CPythonCharacterManager::RemovePVPKey": { "CPythonCharacterManager::RemovePVPKey": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::RemovePVPKey"
]
}, },
"CPythonCharacterManager::ChangeGVG": { "CPythonCharacterManager::ChangeGVG": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::ChangeGVG"
]
}, },
"CPythonCharacterManager::ClearMainInstance": { "CPythonCharacterManager::ClearMainInstance": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::ClearMainInstance"
]
}, },
"CPythonCharacterManager::SetMainInstance": { "CPythonCharacterManager::SetMainInstance": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::SetMainInstance"
]
}, },
"CPythonCharacterManager::GetMainInstancePtr": { "CPythonCharacterManager::GetMainInstancePtr": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::GetMainInstancePtr"
]
}, },
"CPythonCharacterManager::GetInfo": { "CPythonCharacterManager::GetInfo": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::GetInfo"
]
}, },
"CPythonCharacterManager::IsCacheMode": { "CPythonCharacterManager::IsCacheMode": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::IsCacheMode"
]
}, },
"CPythonCharacterManager::Update": { "CPythonCharacterManager::Update": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::Update"
]
}, },
"CPythonCharacterManager::ShowPointEffect": { "CPythonCharacterManager::ShowPointEffect": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::ShowPointEffect"
]
}, },
"CPythonCharacterManager::RegisterPointEffect": { "CPythonCharacterManager::RegisterPointEffect": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::RegisterPointEffect"
]
}, },
"CPythonCharacterManager::UpdateTransform": { "CPythonCharacterManager::UpdateTransform": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::UpdateTransform"
]
}, },
"CPythonCharacterManager::UpdateDeleting": { "CPythonCharacterManager::UpdateDeleting": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::UpdateDeleting"
]
}, },
"CPythonCharacterManager::Deform": { "CPythonCharacterManager::Deform": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::Deform"
]
}, },
"CPythonCharacterManager::OLD_GetPickedInstanceVID": { "CPythonCharacterManager::OLD_GetPickedInstanceVID": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::OLD_GetPickedInstanceVID"
]
}, },
"CPythonCharacterManager::OLD_GetPickedInstancePtr": { "CPythonCharacterManager::OLD_GetPickedInstancePtr": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::OLD_GetPickedInstancePtr"
]
}, },
"CPythonCharacterManager::OLD_GetPickedInstPosReference": { "CPythonCharacterManager::OLD_GetPickedInstPosReference": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::OLD_GetPickedInstPosReference"
]
}, },
"CPythonCharacterManager::IsRegisteredVID": { "CPythonCharacterManager::IsRegisteredVID": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::IsRegisteredVID"
]
}, },
"CPythonCharacterManager::IsAliveVID": { "CPythonCharacterManager::IsAliveVID": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::IsAliveVID"
]
}, },
"CPythonCharacterManager::IsDeadVID": { "CPythonCharacterManager::IsDeadVID": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::IsDeadVID"
]
}, },
"CPythonCharacterManager::__RenderSortedAliveActorList": { "CPythonCharacterManager::__RenderSortedAliveActorList": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::__RenderSortedAliveActorList"
]
}, },
"CPythonCharacterManager::__RenderSortedDeadActorList": { "CPythonCharacterManager::__RenderSortedDeadActorList": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::__RenderSortedDeadActorList"
]
}, },
"CPythonCharacterManager::Render": { "CPythonCharacterManager::Render": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::Render"
]
}, },
"CPythonCharacterManager::RenderShadowMainInstance": { "CPythonCharacterManager::RenderShadowMainInstance": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::RenderShadowMainInstance"
]
}, },
"CPythonCharacterManager::RenderShadowAllInstances": { "CPythonCharacterManager::RenderShadowAllInstances": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::RenderShadowAllInstances"
]
}, },
"CPythonCharacterManager::RenderCollision": { "CPythonCharacterManager::RenderCollision": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::RenderCollision"
]
}, },
"CPythonCharacterManager::CreateInstance": { "CPythonCharacterManager::CreateInstance": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::CreateInstance"
],
"note": "verbatim apart from one PORT fix: the ALREADY EXIST TraceError passed the whole SCreateData struct through varargs (MSVC tolerated it); it now passes c_rkCreateData.m_dwVID."
}, },
"CPythonCharacterManager::RegisterInstance": { "CPythonCharacterManager::RegisterInstance": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::RegisterInstance"
]
}, },
"CPythonCharacterManager::DeleteInstance": { "CPythonCharacterManager::DeleteInstance": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::DeleteInstance"
]
}, },
"CPythonCharacterManager::__DeleteBlendOutInstance": { "CPythonCharacterManager::__DeleteBlendOutInstance": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::__DeleteBlendOutInstance"
]
}, },
"CPythonCharacterManager::DeleteInstanceByFade": { "CPythonCharacterManager::DeleteInstanceByFade": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::DeleteInstanceByFade"
]
}, },
"CPythonCharacterManager::SelectInstance": { "CPythonCharacterManager::SelectInstance": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::SelectInstance"
]
}, },
"CPythonCharacterManager::GetInstancePtr": { "CPythonCharacterManager::GetInstancePtr": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::GetInstancePtr"
]
}, },
"CPythonCharacterManager::GetInstancePtrByName": { "CPythonCharacterManager::GetInstancePtrByName": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::GetInstancePtrByName"
]
}, },
"CPythonCharacterManager::GetSelectedInstancePtr": { "CPythonCharacterManager::GetSelectedInstancePtr": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::GetSelectedInstancePtr"
]
}, },
"CPythonCharacterManager::FindClickableInstancePtr": { "CPythonCharacterManager::FindClickableInstancePtr": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::FindClickableInstancePtr"
]
}, },
"CPythonCharacterManager::__UpdateSortPickedActorList": { "CPythonCharacterManager::__UpdateSortPickedActorList": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::__UpdateSortPickedActorList"
]
}, },
"CPythonCharacterManager::__UpdatePickedActorList": { "CPythonCharacterManager::__UpdatePickedActorList": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::__UpdatePickedActorList"
]
}, },
"CPythonCharacterManager::__SortPickedActorList": { "CPythonCharacterManager::__SortPickedActorList": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::__SortPickedActorList"
]
}, },
"CPythonCharacterManager::__NEW_Pick": { "CPythonCharacterManager::__NEW_Pick": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::__NEW_Pick"
]
}, },
"CPythonCharacterManager::__OLD_Pick": { "CPythonCharacterManager::__OLD_Pick": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::__OLD_Pick"
]
}, },
"CPythonCharacterManager::PickAll": { "CPythonCharacterManager::PickAll": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::PickAll"
]
}, },
"CPythonCharacterManager::GetCloseInstance": { "CPythonCharacterManager::GetCloseInstance": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::GetCloseInstance"
]
}, },
"CPythonCharacterManager::RefreshAllPCTextTail": { "CPythonCharacterManager::RefreshAllPCTextTail": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::RefreshAllPCTextTail"
]
}, },
"CPythonCharacterManager::RefreshAllGuildMark": { "CPythonCharacterManager::RefreshAllGuildMark": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::RefreshAllGuildMark"
]
}, },
"CPythonCharacterManager::DeleteAllInstances": { "CPythonCharacterManager::DeleteAllInstances": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::DeleteAllInstances"
]
}, },
"CPythonCharacterManager::DestroyAliveInstanceMap": { "CPythonCharacterManager::DestroyAliveInstanceMap": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::DestroyAliveInstanceMap"
]
}, },
"CPythonCharacterManager::DestroyDeadInstanceList": { "CPythonCharacterManager::DestroyDeadInstanceList": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::DestroyDeadInstanceList"
]
}, },
"CPythonCharacterManager::Destroy": { "CPythonCharacterManager::Destroy": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::Destroy"
]
}, },
"CPythonCharacterManager::__Initialize": { "CPythonCharacterManager::__Initialize": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::__Initialize"
]
}, },
"CPythonCharacterManager::CPythonCharacterManager": { "CPythonCharacterManager::CPythonCharacterManager": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::CPythonCharacterManager"
]
}, },
"CPythonCharacterManager::~CPythonCharacterManager": { "CPythonCharacterManager::~CPythonCharacterManager": {
"status": "TODO" "status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonCharacterManager.cpp:CPythonCharacterManager::~CPythonCharacterManager"
]
} }
} }
} }
+1
View File
@@ -431,6 +431,7 @@ extension/third_party/cpython-2.7.18/ # 静态库(2P 批次
改变位置/朝向、发送与 40250 相同的移动封包,并在离线边界测试和真服 smoke 中通过。接通时删除对应 legacy 玩法逻辑。 改变位置/朝向、发送与 40250 相同的移动封包,并在离线边界测试和真服 smoke 中通过。接通时删除对应 legacy 玩法逻辑。
2V3-a(2026-09-23):`PythonPlayer`、`PythonPlayerInput`/`InputKeyboard`/`InputMouse`、`PythonPlayerEventHandler`、`PythonPlayerSkill`、`PythonPlayerModule`、`GameType` 原样移植(port-map 标 PORTED),`GameplayModules.cpp` 的 `player` 桩删除,`initPlayer()` 按 40250 顺序在 `initchrmgr()` 后调用;`pending/UserInterface/{PythonPlayer,GameType}.cpp` 替身删除,其余被调方(`CPythonSkill`、`CItemData`、`CItemManager`、`CPythonItem` 等)进 `pending`。64 位修正:`playerGetEmotionIconImage` 用 `Py_BuildPointer`,`PyDict_Next` 用 `Py_ssize_t`。根运动:Granny 运行时的 `GrannyUpdateModelMatrix` 原为直通,按 TrackGroups[0] 的 `AccumulationFlags`(AccumulationExtracted)/`LoopTranslation`(libgr2 新读出,战士 run = (0,-300,0),同 .msa `Accumulation`)按控制器本地时钟推进与权重累加位移(Delta × ModelMatrix);VDA 抽取未实现。`port.login_flow` 按 DIK_UP 经 `game.GameWindow` → `player.SetSingleDIKKeyState` 行走 >100 cm,假服解析 CG 包,收到 `CG_MOVE` FUNC_MOVE 后 FUNC_WAIT 且坐标变化;`port.login_live` 2026-09-23 对 192.168.21.203 走 132 cm 通过。(2V3-a 的待办见 2V3-b。) 2V3-a(2026-09-23):`PythonPlayer`、`PythonPlayerInput`/`InputKeyboard`/`InputMouse`、`PythonPlayerEventHandler`、`PythonPlayerSkill`、`PythonPlayerModule`、`GameType` 原样移植(port-map 标 PORTED),`GameplayModules.cpp` 的 `player` 桩删除,`initPlayer()` 按 40250 顺序在 `initchrmgr()` 后调用;`pending/UserInterface/{PythonPlayer,GameType}.cpp` 替身删除,其余被调方(`CPythonSkill`、`CItemData`、`CItemManager`、`CPythonItem` 等)进 `pending`。64 位修正:`playerGetEmotionIconImage` 用 `Py_BuildPointer`,`PyDict_Next` 用 `Py_ssize_t`。根运动:Granny 运行时的 `GrannyUpdateModelMatrix` 原为直通,按 TrackGroups[0] 的 `AccumulationFlags`(AccumulationExtracted)/`LoopTranslation`(libgr2 新读出,战士 run = (0,-300,0),同 .msa `Accumulation`)按控制器本地时钟推进与权重累加位移(Delta × ModelMatrix);VDA 抽取未实现。`port.login_flow` 按 DIK_UP 经 `game.GameWindow` → `player.SetSingleDIKKeyState` 行走 >100 cm,假服解析 CG 包,收到 `CG_MOVE` FUNC_MOVE 后 FUNC_WAIT 且坐标变化;`port.login_live` 2026-09-23 对 192.168.21.203 走 132 cm 通过。(2V3-a 的待办见 2V3-b。)
2V3-b(2026-09-23):鼠标点地移动。`CScreen::SetCursorPosition`(GrpScreen.cpp:487)与 `CPythonGraphic::SetCursorPosition` 原样实现,`RenderGame` 每帧用光标建拾取射线;`CPythonBackground::GetPickingPoint`/`GetPickingPointWithRay`/`GetPickingPointWithRayOnlyTerrain` 按 `CMapOutdoor::__PickTerrainHeight` 原样沿射线步进,地形高度取 native `CMapManager::GetHeight`(`PR_FLOAT_TO_INT` 的 x87 取整按 floor),物件拾取随 `CMapOutdoor` 移植再接。`CMapManager::isAttrOn` 按 `CMapOutdoor::isAttrOn`+`CTerrain::isAttrOn` 读包内 `<map>/<xxxyyy>/attr.atr`(阻挡/水/禁 PK),`CheckAdvancing` 及两个碰撞检查器原样(地图物件未注册到 `CCullingManager` 前不会阻挡)。以上在 pending/platform 层,port-map 标 ADAPTED。`port.login_flow` 在按键行走后左键点击角色下方地面:`game.GameWindow.OnMouseLeftButtonDown` → `player.SetMouseState` → 角色走到拾取点(离线 334 cm),假服收到 FUNC_MOVE … FUNC_WAIT;另断言角色所在格不阻挡、所在地形块有阻挡格(离线 17814 格)。`port.login_live` 2026-09-23 对 192.168.21.203 通过(按键 133 cm、点地 296 cm、11406 阻挡格),`python_game_render_test.sh` 离线通过。`client_main` 的 `MT_TEST_MODE=python_ui` 加上 `python_3d_surface.gd`,新路径可手动登录进游戏走动。待办:默认路由切到 `port`(当前 `client_main` 默认仍走 GDScript `AppFlow`)后整体删除 legacy;攻击/拾取物品等 P1 战斗交互属批次 2 之后。 2V3-b(2026-09-23):鼠标点地移动。`CScreen::SetCursorPosition`(GrpScreen.cpp:487)与 `CPythonGraphic::SetCursorPosition` 原样实现,`RenderGame` 每帧用光标建拾取射线;`CPythonBackground::GetPickingPoint`/`GetPickingPointWithRay`/`GetPickingPointWithRayOnlyTerrain` 按 `CMapOutdoor::__PickTerrainHeight` 原样沿射线步进,地形高度取 native `CMapManager::GetHeight`(`PR_FLOAT_TO_INT` 的 x87 取整按 floor),物件拾取随 `CMapOutdoor` 移植再接。`CMapManager::isAttrOn` 按 `CMapOutdoor::isAttrOn`+`CTerrain::isAttrOn` 读包内 `<map>/<xxxyyy>/attr.atr`(阻挡/水/禁 PK),`CheckAdvancing` 及两个碰撞检查器原样(地图物件未注册到 `CCullingManager` 前不会阻挡)。以上在 pending/platform 层,port-map 标 ADAPTED。`port.login_flow` 在按键行走后左键点击角色下方地面:`game.GameWindow.OnMouseLeftButtonDown` → `player.SetMouseState` → 角色走到拾取点(离线 334 cm),假服收到 FUNC_MOVE … FUNC_WAIT;另断言角色所在格不阻挡、所在地形块有阻挡格(离线 17814 格)。`port.login_live` 2026-09-23 对 192.168.21.203 通过(按键 133 cm、点地 296 cm、11406 阻挡格),`python_game_render_test.sh` 离线通过。`client_main` 的 `MT_TEST_MODE=python_ui` 加上 `python_3d_surface.gd`,新路径可手动登录进游戏走动。待办:默认路由切到 `port`(当前 `client_main` 默认仍走 GDScript `AppFlow`)后整体删除 legacy;攻击/拾取物品等 P1 战斗交互属批次 2 之后。
批次 2 P0 收尾(2026-09-24):`UserInterface/PythonCharacterManager.cpp`(54 函数)与 `InstanceBaseMovement.cpp`(32 函数)在 2V2-b 已原样拷入 `port/`,2V3 起即是运行路径(行走、点地移动、远程角色同步都经它们),本轮逐行比对 40250(仅 include 大小写、注释编码和两处 `// PORT:` 修正:`CreateInstance` 的 TraceError 传 `m_dwVID`,`NEW_SyncPixelPosition` 用 32 位 `LONG &`),确认 pending/platform 无重复定义后标 PORTED。P0 队列已清空;下一步按队列做 P1(`FlyingInstance`、`ActorInstanceData`、`FlyingObjectManager`、`FlyTrace`)。
每个切片都必须同时跑 legacy/port 双路回归;只有 2V3 稳定并把默认路由切到 `port` 后,才能删除总开关和剩余 legacy 宿主。 每个切片都必须同时跑 legacy/port 双路回归;只有 2V3 稳定并把默认路由切到 `port` 后,才能删除总开关和剩余 legacy 宿主。