2V3-a: walk with the keyboard through the ported player chain

PythonPlayer, PythonPlayerInput{,Keyboard,Mouse}, PythonPlayerEventHandler,
PythonPlayerSkill, PythonPlayerModule and GameType are verbatim copies; the
`player` stub module and the pending PythonPlayer/GameType stand-ins are gone.
Unported callees (CPythonSkill, CItemData, CItemManager, CPythonItem, ...) are
pending stubs. 64-bit fixes: emotion icon handles use Py_BuildPointer, and
PyDict_Next takes Py_ssize_t.

The actor did not move because GrannyUpdateModelMatrix passed the model matrix
through. Walk/run motions use constant root-motion extraction
(AccumulationFlags=AccumulationExtracted, LoopTranslation e.g. (0,-300,0) for
the warrior run, same as the .msa Accumulation). libgr2 now reads both fields
from TrackGroups[0], and the runtime moves by LoopTranslation over each
control's local-clock span, blended by control weight. VDA extraction is not
implemented.

port.login_flow presses DIK_UP; the actor walks more than 100 cm, and the fake
server parses CG packets and sees CG_MOVE FUNC_MOVE, then FUNC_WAIT at the new
position. port.login_live against the real server walked 132 cm.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-23 23:41:31 +09:00
co-authored by Claude Opus 5.5
parent 157f7c3bb4
commit ff0983d3c8
39 changed files with 10170 additions and 2039 deletions
@@ -0,0 +1,38 @@
{
"reference": "UserInterface/PythonPlayerInputKeyboard.cpp",
"reference_sha256": "c559220298d2f50e1028f859dbbe110dea0fe776d0037b66b03916385ecf4e01",
"priority": "P0",
"contracts": [],
"functions": {
"CPythonPlayer::SetAttackKeyState": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerInputKeyboard.cpp:CPythonPlayer::SetAttackKeyState"
]
},
"CPythonPlayer::NEW_SetSingleDIKKeyState": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerInputKeyboard.cpp:CPythonPlayer::NEW_SetSingleDIKKeyState"
]
},
"CPythonPlayer::NEW_SetSingleDirKeyState": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerInputKeyboard.cpp:CPythonPlayer::NEW_SetSingleDirKeyState"
]
},
"CPythonPlayer::NEW_SetMultiDirKeyState": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerInputKeyboard.cpp:CPythonPlayer::NEW_SetMultiDirKeyState"
]
},
"CPythonPlayer::GetDegreeFromDirection": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonPlayerInputKeyboard.cpp:CPythonPlayer::GetDegreeFromDirection"
]
}
}
}