Saving marks effect objects dead, so after a load the Heldenmut / Klingenblick buff was active but its aura effect (cObjectFX 842) was gone. A few ticks after a save game has loaded, the effect is created again for each such buff of a player hero (CreateAt + cEventFX 0x42, as the art's cast effect does), with the buff's remaining time. Shared game events (game/engine/events): engine tick and "save game loaded" callbacks; the WASD mod uses the tick through it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
156 lines
8.4 KiB
Plaintext
156 lines
8.4 KiB
Plaintext
# Function names for sacred.exe (Sacred Gold 2.28), applied to the Ghidra
|
|
# project by tools/rename.ps1. One "0xADDRESS Name" per line; "Class::Method"
|
|
# names go into a class namespace. Keep in sync with src/game/addresses.h.
|
|
|
|
# --- startup / engine core ---------------------------------------------------
|
|
0x0066f1c0 Log
|
|
0x00813140 CmdLineHasFlag
|
|
0x0066e500 GetMouseClientPos
|
|
0x008122a0 MainWindowProc
|
|
0x00849701 __RTDynamicCast
|
|
0x0084aa86 ToUpper
|
|
|
|
# --- renderer ----------------------------------------------------------------
|
|
0x00645390 DxDriver7::SetDisplayMode
|
|
0x00645f70 DxDriver7::Flip
|
|
0x00646f50 DxDriver7::BeginScene
|
|
0x00646fd0 DxDriver7::EndScene
|
|
0x006469d0 DxDriver7::LoadingScreen
|
|
|
|
# --- kernel event queue ------------------------------------------------------
|
|
0x00808490 Kernel_Instance
|
|
0x00808930 cKernel::PostEvent # (event, flags, delayMs); key events (category 4) are queued
|
|
0x008087b0 cKernel::DispatchQueued
|
|
|
|
# --- engine (cEngine, vtable 0x88ff34) ---------------------------------------
|
|
0x0060e3f0 cEngine::RenderThreadLoop
|
|
0x0060f1d0 cEngine::Tick # per game tick (10 Hz): queued events, then hold-to-move orders
|
|
0x00618130 cEngine::ReceiveEvent # vf00: offers events to the UI, then engine hotkeys (A, P, Q/W/E/R/B/Space, ^)
|
|
0x00617360 cEngine::HandleMouseButton # click: pick object / walk to ground point
|
|
0x006170d0 cEngine::SendCreatureOrder # (creature, cEvent_creature*): snaps ground targets, then creature->vf18
|
|
0x00611f10 cEngine::UpdateCursorPick # per frame: object under the cursor
|
|
0x00610650 cEngine::ScrollInput # arrow keys: walk object #2 or scroll the camera
|
|
0x00613040 cEngine::UseActionSlot # hotkeys Q/W/E/R/B/Space
|
|
0x00613710 cEngine::CaptureScreen # save-game thumbnail
|
|
|
|
# --- objects / creatures -----------------------------------------------------
|
|
0x005fe060 cObjectManager::GetObject # (id); manager at *0xad3bc0
|
|
0x00603e90 cObjectManager::GetPlayerHero
|
|
0x00546ed0 cCreature::IsWalking # state +0x150 == 1
|
|
0x0052e400 cCreature::ReceiveOrder # vf18
|
|
0x004fb620 cCreature::TraceToCursor # line trace from the creature to the cursor's world point (aiming)
|
|
|
|
# --- mouse cursor (single instance) ------------------------------------------
|
|
0x006550f0 MouseCursor_Instance
|
|
0x00654e10 cMouseCursor::cMouseCursor
|
|
0x00655670 cMouseCursor::SetPosition
|
|
0x006559e0 cMouseCursor::GetX
|
|
0x006559f0 cMouseCursor::GetY
|
|
0x006559a0 cMouseCursor::GetPreviousPosition
|
|
0x006555e0 cMouseCursor::DrawItem
|
|
0x00655ab0 cMouseCursor::IsButtonHeld
|
|
|
|
# --- world view (cWorldView0, vtable 0x8900f8) -------------------------------
|
|
0x00624ae0 cWorldView0::SetupView
|
|
0x00628210 cWorldView0::SetZoom
|
|
0x006322b0 cWorldView0::Render
|
|
0x0062a730 cWorldView0::UpdateCamera
|
|
0x0062b000 cWorldView0::RenderTileRow # tiles + collects objects into the draw lists
|
|
0x0062e580 cWorldView0::DrawObjects
|
|
0x006300d0 cWorldView0::DrawObjects2
|
|
0x00623c40 cWorldView0::WorldToScreen
|
|
0x00623a20 cWorldView0::ScreenToView
|
|
0x00626d30 cWorldView0::PickObjectAt # (screen x, y) -> object id
|
|
0x00627260 cWorldView0::DrawObjectLabels # Alt
|
|
0x006426a0 BuildOrthoMatrix
|
|
|
|
# --- UI ----------------------------------------------------------------------
|
|
0x00756820 UiManager_Instance # *0x17ecb3c
|
|
0x00756940 cUI_Manager::ThreadLoop
|
|
0x00757120 cUI_Manager::ReceiveEvent # vf00: UI hotkeys (C F H I L M N O S T)
|
|
0x007587b0 cUI_Manager::Render
|
|
0x0075a860 cUI_Manager::GetFocus
|
|
0x0075a370 cUI_Manager::IsUiAtPoint
|
|
0x0075bbf0 cUI_Manager::DrawStatusLine
|
|
0x0075c200 cUI_Manager::DrawMessage
|
|
0x00731d40 cUI_Window2::HitTest
|
|
0x006dfb10 cUI_Taskbar2::HitTest
|
|
0x006e1970 cUI_Taskbar2::HandleEvent # digit keys: 1-5 weapon sets, 6-0 combat-art slots
|
|
0x006e1440 cUI_Taskbar2::SelectWeaponSet # digits 1-5
|
|
0x006e17d0 cUI_Taskbar2::SelectSkillSlot # digits 6-0: right mouse button combat art
|
|
0x006e3ac0 cUI_Taskbar2::Render
|
|
0x006e7300 cUI_Tooltip::Render
|
|
# cInventoryEntry (32 x 0x1180 in one block, see docs/skill-slots.md)
|
|
0x005deb80 cInventoryManager::Instance # allocates 32 inventories (0x23008 bytes)
|
|
0x005dec50 cInventoryManager::GetInventory # index * 0x1180
|
|
0x005d7a10 cInventoryEntry::Construct
|
|
0x005d7bf0 cInventoryEntry::Destruct
|
|
0x005d7d30 cInventoryEntry::Clear # zeroes grid, weapon sets, art slots
|
|
0x005d80e0 cInventoryEntry::ReplaceItemId # grid + weapon sets
|
|
0x005d86c0 cInventoryEntry::GetWeaponSetItem # (set, hand)
|
|
0x005d86f0 cInventoryEntry::SetWeaponSetItem # (set, hand, id, notify) -> network 299
|
|
0x005d8930 cInventoryEntry::SetWeaponSet # (set, left, right, notify) -> network 300
|
|
0x005d8be0 cInventoryEntry::TakeWeaponSetItem
|
|
0x005d8d00 cInventoryEntry::GetWeaponSetItemPos
|
|
0x005d9200 cInventoryEntry::SetArtVariant # 0x1162 bit 2: second art slot set (mounted?)
|
|
0x005d93e0 cInventoryEntry::GetArtSlotType
|
|
0x005d9420 cInventoryEntry::GetArtSlotRef
|
|
0x005d9480 cInventoryEntry::SetArtSlot # -> network 0x129
|
|
0x005d9680 cInventoryEntry::ClearArtSlot # -> network 0x12a
|
|
0x005d9820 cInventoryEntry::SelectSlot # (slot, kind 0 weapons / 1 arts) -> +0xd58
|
|
0x005d9b60 cInventoryEntry::GetSelectedSlot # (kind)
|
|
0x005dd9f0 cInventoryEntry::Serialize # (stream, write)
|
|
0x005de8a0 cInventoryEntry::FixInventory
|
|
0x005da880 cInventoryEntry::GetPotionRef
|
|
0x0057f750 SlotCountForLevel # table 0x95503c, max 5
|
|
0x008110d0 GameWindowProc # in-game window procedure: keys (dead keys, modifiers 0x182cdec)
|
|
0x005def60 cInventoryManager::Serialize # (stream, write, x): all 32 inventories, save games
|
|
0x005d9450 cInventoryEntry::GetArtSlotData
|
|
0x005de4e0 cInventoryEntry::CollectItemIds # grid items only
|
|
0x0055fac0 cCreature::AssignArtToSlot # (art, slot), rejects slot > 4
|
|
0x006046f0 ItemDataMgr::saveHero
|
|
0x00605900 ItemDataMgr::loadHero
|
|
0x006dffa0 cUI_Taskbar2::SetSlotCount # shows the first n slots of each row, n from SlotCountForLevel
|
|
0x006e4ba0 cUI_Taskbar2::Layout # creates the slot controls and buttons
|
|
0x006dfce0 cUI_Taskbar2::SkillSlotAt # (x, y, out slot)
|
|
0x006dfd40 cUI_Taskbar2::WeaponSetAt # (x, y, out slot)
|
|
0x006df9a0 cUI_Taskbar2::UpdateSlotHighlight
|
|
0x006e2790 cUI_Taskbar2::RenderWeaponSets
|
|
0x006e31e0 cUI_Taskbar2::RenderArtSlots
|
|
0x006e4310 cUI_Taskbar2::UpdateTooltips
|
|
0x0081c020 Options::CombineSlots # COMBINE_SLOTS: weapon set also selects the art slot
|
|
# combat arts
|
|
0x0052e400 cCreature::ReceiveOrder # vf18; order 0x105 (use art) at 0x52fc58
|
|
0x006170d0 cEngine::SendCreatureOrder
|
|
0x005521e0 cCreature::ResolveArtId # art variant for the creature class (+0x10)
|
|
0x00580cb0 cArtCooldowns::IsReady # (art): cooldown <= 0.01
|
|
0x00548ef0 cCreature::IsAlive
|
|
0x004d1930 CombatMoveDef::Find # (id) -> g_combatMoveDefs entry
|
|
0x004d2150 SpellDef::Find # (id) -> g_spellDefs entry
|
|
0x004d1a20 CombatMoveDef::UsableMounted # flags +0x74
|
|
0x004d23e0 SpellDef::UsableMounted # flags +0x90
|
|
0x0094ddb0 g_combatMoveDefs # 95 x 0x78: id +0, icon name +0xc, target type +0x4c
|
|
0x00950a38 g_spellDefs # 71 x 0x94: id +0, icon name +0xc, target type u16 +0x3c
|
|
0x0095503c g_slotCountByLevel # (level, slots) u16 pairs
|
|
0x009ed058 g_taskbarSlotColors
|
|
0x00ad23c8 g_inventoryManager
|
|
0x00ad3bc0 g_objectManager
|
|
0x0051d680 cCreature::IsValidArtTarget # (pick, launch type): can the art be used on the picked object
|
|
0x0051d670 NormalizeArtId
|
|
0x00548f20 cCreature::IsAlly # (object id)
|
|
0x00548e70 cCreature::IsEnemy # (object id)
|
|
0x00611f10 cEngine::UpdateCursorPick # cursor target for the selected art
|
|
0x00548060 cCreature::ChooseAiArt # monsters: art per creature class
|
|
0x00582c10 cCreatureArts::AddEffect # (kind, value, factor, duration, art, notify, ...): active effects at +0x11a
|
|
0x00539ce0 cCreature::StartArtCooldown # AddEffect(0x22, ...)
|
|
0x004feef0 cCreature::ArtCastEffect # per-art effect of using an art (switch on art id)
|
|
0x005fbaa0 cObjectManager::CreateAt # (type, position, ...): object placed in the world
|
|
0x005fb590 cObjectManager::CreateFX
|
|
0x005fb040 cObjectManager::Allocate
|
|
0x004514d0 ObjectFactory::Create # (class, ...)
|
|
0x005fcd10 cObjectManager::Place # (id, position); refuses dead objects (+0x14 & 0x10)
|
|
0x00602d70 cObjectManager::Load # objects from a save stream
|
|
0x005a0980 cObjectFX::Construct
|
|
0x005a37b0 cObjectFX::ReceiveEvent # vf18; cEventFX 0x42 attaches it to an owner
|
|
0x0041e0a0 cEventFX::Construct
|