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,248 @@
{
"reference": "UserInterface/PythonTextTail.cpp",
"reference_sha256": "30392fd529a043f638bc7ada3e5177f78a9424857911b2903f3f9d7cec7aba7a",
"priority": "P3",
"contracts": [],
"functions": {
"TextTail_GetLivingTime": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:TextTail_GetLivingTime"
]
},
"TextTail_SetLivingTime": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:TextTail_SetLivingTime"
]
},
"CPythonTextTail::GetInfo": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::GetInfo"
]
},
"CPythonTextTail::UpdateAllTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::UpdateAllTextTail"
]
},
"CPythonTextTail::UpdateShowingTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::UpdateShowingTextTail"
]
},
"CPythonTextTail::UpdateTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::UpdateTextTail"
]
},
"CPythonTextTail::ArrangeTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::ArrangeTextTail"
]
},
"CPythonTextTail::Render": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::Render"
]
},
"CPythonTextTail::RenderTextTailBox": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::RenderTextTailBox"
]
},
"CPythonTextTail::RenderTextTailName": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::RenderTextTailName"
]
},
"CPythonTextTail::HideAllTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::HideAllTextTail"
]
},
"CPythonTextTail::UpdateDistance": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::UpdateDistance"
]
},
"CPythonTextTail::ShowAllTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::ShowAllTextTail"
]
},
"CPythonTextTail::ShowCharacterTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::ShowCharacterTextTail"
]
},
"CPythonTextTail::ShowItemTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::ShowItemTextTail"
]
},
"CPythonTextTail::isIn": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::isIn"
]
},
"CPythonTextTail::RegisterCharacterTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::RegisterCharacterTextTail"
]
},
"CPythonTextTail::RegisterItemTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::RegisterItemTextTail"
]
},
"CPythonTextTail::RegisterChatTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::RegisterChatTail"
]
},
"CPythonTextTail::RegisterInfoTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::RegisterInfoTail"
]
},
"CPythonTextTail::GetTextTailPosition": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::GetTextTailPosition"
]
},
"CPythonTextTail::IsChatTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::IsChatTextTail"
]
},
"CPythonTextTail::SetCharacterTextTailColor": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::SetCharacterTextTailColor"
]
},
"CPythonTextTail::SetItemTextTailOwner": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::SetItemTextTailOwner"
]
},
"CPythonTextTail::DeleteCharacterTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::DeleteCharacterTextTail"
]
},
"CPythonTextTail::DeleteItemTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::DeleteItemTextTail"
]
},
"CPythonTextTail::RegisterTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::RegisterTextTail"
]
},
"CPythonTextTail::DeleteTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::DeleteTextTail"
]
},
"CPythonTextTail::Pick": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::Pick"
]
},
"CPythonTextTail::SelectItemName": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::SelectItemName"
]
},
"CPythonTextTail::AttachTitle": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::AttachTitle"
]
},
"CPythonTextTail::DetachTitle": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::DetachTitle"
]
},
"CPythonTextTail::EnablePKTitle": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::EnablePKTitle"
]
},
"CPythonTextTail::AttachLevel": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::AttachLevel"
]
},
"CPythonTextTail::DetachLevel": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::DetachLevel"
]
},
"CPythonTextTail::Initialize": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::Initialize"
]
},
"CPythonTextTail::Destroy": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::Destroy"
]
},
"CPythonTextTail::Clear": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::Clear"
]
},
"CPythonTextTail::CPythonTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::CPythonTextTail"
]
},
"CPythonTextTail::~CPythonTextTail": {
"status": "PORTED",
"impl": [
"extension/src/port/UserInterface/PythonTextTail.cpp:CPythonTextTail::~CPythonTextTail"
]
}
}
}