WIP port 4-d quest dialogue modules

This commit is contained in:
shenlei
2026-09-24 09:53:02 +09:00
parent a12e7fea42
commit ee7a9cd3e2
22 changed files with 2713 additions and 205 deletions
+1
View File
@@ -543,3 +543,4 @@
{"time": "2026-09-24T19:00:00Z", "event": "port", "unit": "batch 4-a text input: EterLib/IME.cpp (ADAPTED), UserInterface/PythonIME.cpp, PythonIMEModule.cpp", "detail": "ime module ported; IMM/TSF-free CIME in platform/; Godot key events -> ui_ime_key/ui_char -> CWindowManager RunIME*; login typed through the IME; in-game chat CG_CHAT round-trip", "tests": ["port.login_flow (typed id/password with edits, chat send/echo/close)", "port.login_live", "python_game_render_test (Godot key events)"]}
{"time": "2026-09-24T20:00:00Z", "event": "verify", "unit": "batch 4-b combat: InstanceBaseBattle / ActorInstanceCollisionDetection / PythonPlayerInput (already ported)", "detail": "fake server spawns a stray dog outside the BANPK safe disc, answers CG_TARGET/CG_ATTACK with GC_TARGET/GC_DAMAGE_INFO/GC_DEAD; held left button walks up and combo-attacks until death; damage numbers wait on CPythonSystem (4-g)", "tests": ["port.login_flow (step 9 held-button kill)", "port.login_live", "python_game_render_test (Godot mouse events, target HP 100/66/33/0)"]}
{"time": "2026-09-24T21:00:00Z", "event": "port", "unit": "batch 4-c shop: UserInterface/PythonShop.cpp (+ PythonApplicationCursor.cpp, SetMouseHandler adapted)", "detail": "shop module ported verbatim; app cursor state moved into the platform CPythonApplication (uishop reads app.GetCursor, which dereferenced the missing application object); fake server general store answers CG_ON_CLICK/CG_SHOP BUY/SELL2/END like CShop::AddGuest/Buy and CShopManager::Sell", "tests": ["port.login_flow (step 10 buy/sell/ESC)", "port.login_live", "python_game_render_test"]}
{"time": "2026-09-24T22:00:00Z", "event": "wip", "unit": "batch 4-d NPC quest dialogue", "detail": "Added event manager, quest state/module, event manager module, parser and DBCS helpers; fake server now has an Oldster NPC and preliminary GC_SCRIPT / CG_SCRIPT_ANSWER exchange. This is explicitly unfinished: login-flow UI round trip and rendering interaction are not wired/verified; all five source-unit port-map entries remain TODO.", "tests": []}
+44
View File
@@ -0,0 +1,44 @@
{
"reference": "EterLib/parser.cpp",
"reference_sha256": "1b81a802b14e1a5958aaf981ca81248e389ad5c6f572858fd31e4afb7674ba86",
"priority": "P4",
"contracts": [],
"functions": {
"LocaleString_FindChar": {
"status": "TODO"
},
"LocaleString_RightTrim": {
"status": "TODO"
},
"OLD_rtrim": {
"status": "TODO"
},
"LocaleString_Skip": {
"status": "TODO"
},
"Group::GetArg": {
"status": "TODO"
},
"Group::Create": {
"status": "TODO"
},
"Group::GetCmd": {
"status": "TODO"
},
"Group::ReadCmd": {
"status": "TODO"
},
"Group::GetError": {
"status": "TODO"
},
"Group::SetError": {
"status": "TODO"
},
"Group::Group": {
"status": "TODO"
},
"Group::~Group": {
"status": "TODO"
}
}
}
@@ -0,0 +1,128 @@
{
"reference": "UserInterface/PythonEventManager.cpp",
"reference_sha256": "db306daefe5948ad7b3d533266bea7ef04826b22311c72d421c4f23c647de8e2",
"priority": "P4",
"contracts": [],
"functions": {
"ShowArgument": {
"status": "TODO"
},
"GetArgumentString": {
"status": "TODO"
},
"GetArgument": {
"status": "TODO"
},
"GetCameraSettingFromArgList": {
"status": "TODO"
},
"CPythonEventManager::__InitEventSet": {
"status": "TODO"
},
"CPythonEventManager::RegisterEventSet": {
"status": "TODO"
},
"CPythonEventManager::RegisterEventSetFromString": {
"status": "TODO"
},
"CPythonEventManager::ClearEventSeti": {
"status": "TODO"
},
"CPythonEventManager::__ClearEventSetp": {
"status": "TODO"
},
"CPythonEventManager::GetEmptyEventSetSlot": {
"status": "TODO"
},
"CPythonEventManager::SetRestrictedCount": {
"status": "TODO"
},
"CPythonEventManager::SetEventHandler": {
"status": "TODO"
},
"CPythonEventManager::GetEventSetLocalYPosition": {
"status": "TODO"
},
"CPythonEventManager::AddEventSetLocalYPosition": {
"status": "TODO"
},
"CPythonEventManager::InsertText": {
"status": "TODO"
},
"CPythonEventManager::UpdateEventSet": {
"status": "TODO"
},
"CPythonEventManager::SetEventSetWidth": {
"status": "TODO"
},
"CPythonEventManager::ProcessEventSet": {
"status": "TODO"
},
"CPythonEventManager::RenderEventSet": {
"status": "TODO"
},
"CPythonEventManager::Skip": {
"status": "TODO"
},
"CPythonEventManager::IsWait": {
"status": "TODO"
},
"CPythonEventManager::EndEventProcess": {
"status": "TODO"
},
"CPythonEventManager::MakeNextButton": {
"status": "TODO"
},
"CPythonEventManager::MakeQuestion": {
"status": "TODO"
},
"CPythonEventManager::SelectAnswer": {
"status": "TODO"
},
"CPythonEventManager::SetVisibleStartLine": {
"status": "TODO"
},
"CPythonEventManager::SetVisibleLineCount": {
"status": "TODO"
},
"CPythonEventManager::GetVisibleStartLine": {
"status": "TODO"
},
"CPythonEventManager::GetLineCount": {
"status": "TODO"
},
"CPythonEventManager::ClearLine": {
"status": "TODO"
},
"CPythonEventManager::__InsertLine": {
"status": "TODO"
},
"CPythonEventManager::RefreshLinePosition": {
"status": "TODO"
},
"CPythonEventManager::__AddSpace": {
"status": "TODO"
},
"CPythonEventManager::GetScriptEventIndex": {
"status": "TODO"
},
"CPythonEventManager::CheckEventSetIndex": {
"status": "TODO"
},
"CPythonEventManager::Destroy": {
"status": "TODO"
},
"CPythonEventManager::SetInterfaceWindow": {
"status": "TODO"
},
"CPythonEventManager::SetLeftTimeString": {
"status": "TODO"
},
"CPythonEventManager::CPythonEventManager": {
"status": "TODO"
},
"CPythonEventManager::~CPythonEventManager": {
"status": "TODO"
}
}
}
@@ -0,0 +1,80 @@
{
"reference": "UserInterface/PythonEventManagerMoudle.cpp",
"reference_sha256": "104c2b16cef91b4d41844caa10851ff82e8e2766c264aaaeca3b7f246a17e4ae",
"priority": "P4",
"contracts": [],
"functions": {
"eventRegisterEventSet": {
"status": "TODO"
},
"eventRegisterEventSetFromString": {
"status": "TODO"
},
"eventClearEventSet": {
"status": "TODO"
},
"eventSetRestrictedCount": {
"status": "TODO"
},
"eventGetEventSetLocalYPosition": {
"status": "TODO"
},
"eventAddEventSetLocalYPosition": {
"status": "TODO"
},
"eventInsertText": {
"status": "TODO"
},
"eventInsertTextInline": {
"status": "TODO"
},
"eventUpdateEventSet": {
"status": "TODO"
},
"eventRenderEventSet": {
"status": "TODO"
},
"eventSetEventSetWidth": {
"status": "TODO"
},
"eventSkip": {
"status": "TODO"
},
"eventIsWait": {
"status": "TODO"
},
"eventEndEventProcess": {
"status": "TODO"
},
"eventSetEventHandler": {
"status": "TODO"
},
"eventSelectAnswer": {
"status": "TODO"
},
"eventGetLineCount": {
"status": "TODO"
},
"eventSetVisibleStartLine": {
"status": "TODO"
},
"eventGetVisibleStartLine": {
"status": "TODO"
},
"eventQuestButtonClick": {
"status": "TODO"
},
"eventSetInterfaceWindow": {
"status": "TODO"
},
"eventSetLeftTimeString": {
"status": "TODO"
},
"eventDestroy": {
"status": "TODO"
},
"initEvent": {
"status": "TODO"
}
}
}
@@ -0,0 +1,14 @@
{
"reference": "UserInterface/PythonGameEventManagerModule.cpp",
"reference_sha256": "233eb8e6439422e3262240f8e22e8df6a4049122fe110a218b5c952207414e2e",
"priority": "P4",
"contracts": [],
"functions": {
"eventMgrUpdate": {
"status": "TODO"
},
"initeventmgr": {
"status": "TODO"
}
}
}
@@ -0,0 +1,77 @@
{
"reference": "UserInterface/PythonQuest.cpp",
"reference_sha256": "2e48148f3da65c4e286843d1b225aaa2021f2731f9f024fe989d1489c6e5f546",
"priority": "P3",
"contracts": [],
"functions": {
"CPythonQuest::RegisterQuestInstance": {
"status": "TODO"
},
"CPythonQuest::DeleteQuestInstance": {
"status": "TODO"
},
"CPythonQuest::IsQuest": {
"status": "TODO"
},
"CPythonQuest::MakeQuest": {
"status": "TODO"
},
"CPythonQuest::SetQuestTitle": {
"status": "TODO"
},
"CPythonQuest::SetQuestClockName": {
"status": "TODO"
},
"CPythonQuest::SetQuestCounterName": {
"status": "TODO"
},
"CPythonQuest::SetQuestClockValue": {
"status": "TODO"
},
"CPythonQuest::SetQuestCounterValue": {
"status": "TODO"
},
"CPythonQuest::SetQuestIconFileName": {
"status": "TODO"
},
"CPythonQuest::GetQuestCount": {
"status": "TODO"
},
"CPythonQuest::GetQuestInstancePtr": {
"status": "TODO"
},
"CPythonQuest::__GetQuestInstancePtr": {
"status": "TODO"
},
"CPythonQuest::__Initialize": {
"status": "TODO"
},
"CPythonQuest::Clear": {
"status": "TODO"
},
"CPythonQuest::CPythonQuest": {
"status": "TODO"
},
"CPythonQuest::~CPythonQuest": {
"status": "TODO"
},
"questGetQuestCount": {
"status": "TODO"
},
"questGetQuestData": {
"status": "TODO"
},
"questGetQuestIndex": {
"status": "TODO"
},
"questGetQuestLastTime": {
"status": "TODO"
},
"questClear": {
"status": "TODO"
},
"initquest": {
"status": "TODO"
}
}
}