port: P3-d PythonTextTail + textTail module (1:1 40250)

Copy PythonTextTail.cpp/PythonTextTailModule.cpp verbatim, drop the pending
stand-in and the textTail module stub, register initTextTail() after
initChat() and call CPythonTextTail::Initialize() in Create as 40250 does.
Implement CScreen::ProjectPosition/UnprojectPosition (were stubs) with
D3DXVec3Project/Unproject, and ApplicationStringTable_GetString(DWORD) over
UserInterface.rc's English string table. port.login_flow projects the ground
item's name tail in an ALT frame and picks it back by screen position.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-09-24 01:10:41 +09:00
co-authored by Claude Opus 5.5
parent 72b19b677d
commit 070a27b2cb
19 changed files with 1874 additions and 211 deletions
@@ -0,0 +1,122 @@
{
"reference": "UserInterface/PythonTextTailModule.cpp",
"reference_sha256": "bd7149ddc99091064e9e011894562e6adae137efec7ec10c42400c2b23bba796",
"priority": "P4",
"contracts": [],
"functions": {
"textTailClear": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailClear"
]
},
"textTailUpdateAllTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailUpdateAllTextTail"
]
},
"textTailUpdateShowingTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailUpdateShowingTextTail"
]
},
"textTailRender": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailRender"
]
},
"textTailRegisterCharacterTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailRegisterCharacterTextTail"
]
},
"textTailGetPosition": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailGetPosition"
]
},
"textTailIsChat": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailIsChat"
]
},
"textTailRegisterChatTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailRegisterChatTail"
]
},
"textTailRegisterInfoTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailRegisterInfoTail"
]
},
"textTailAttachTitle": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailAttachTitle"
]
},
"textTailShowCharacterTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailShowCharacterTextTail"
]
},
"textTailShowItemTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailShowItemTextTail"
]
},
"textTailArrangeTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailArrangeTextTail"
]
},
"textTailHideAllTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailHideAllTextTail"
]
},
"textTailShowAllTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailShowAllTextTail"
]
},
"textTailPick": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailPick"
]
},
"textTailSelectItemName": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailSelectItemName"
]
},
"textTailEnablePKTitle": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:textTailEnablePKTitle"
]
},
"initTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTailModule.cpp:initTextTail"
]
}
}
}