# 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 0x0043f630 ItemPotionKind # (ecx = item type table *0xaa9564, type): potion kind 1-5, 0 = none 0x006e39e0 cUI_Taskbar2::RenderPotionSlots # 5 potion kinds, controls at +0x258 (stride 0xbc) 0x005d9ec0 cInventoryEntry::PlaceItem # (cell, id, w, h, notify) -> network 0x13f; returns the item it replaced 0x005da290 cInventoryEntry::GetItemAt # (cell, resolve covered cells) 0x005da360 cInventoryEntry::CountItems 0x005da390 cInventoryEntry::RemoveAt # (cell, notify) -> network 0x13e 0x005da5f0 cInventoryEntry::RemoveItem # (id, notify) 0x005dab60 cInventoryEntry::FindFreeSpace # (w, h, out cell, mode) 0x005dac70 cInventoryEntry::FitsAt # (cell, w, h) 0x005db670 cInventoryEntry::Sort # (mode): the inventory window's sort button, trader stock 0x005dc3f0 cInventoryEntry::DrawItems # (renderer, flag) 0x005dd530 cInventoryEntry::CellRect # (out rect, cell): 32x32 from the origin at +0x1164 / +0x1166 0x0054a8f0 cCreature::UseItem # (id): event 0x10 to the item; used up -> RemoveItem + DestroyObject 0x005fbe10 cObjectManager::DestroyObject # (id, 1, 0, 0) 0x005ca9d0 cPotion3D::ReceiveEvent # vf18: drink effect, sets +0x14 bit 0x8000000 (used up) 0x00613040 cEngine::UseActionSlot # (potion kind, ...): potion keys 0x006c5f40 cUI_Inventory3::HandleEvent # sort button (+0x158) -> cInventoryEntry::Sort 0x006c1210 cUI_InventoryTab::Render # grid origin (0, 0x188), DrawItems 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::Create # (type, 0, 0, 0) -> id; loadHero creates items with it 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 0x009eaee0 g_uiAtlasEntries # 0x54 each: texture +0, uv +4..+0x10; indexed by icon id (art icons, 3 per art) 0x009ed030 g_uiTaskbarSlotBackground # atlas entry: slot control background 0x009ed084 g_uiTaskbarSlotBackgroundSelected 0x009f7f14 g_uiTaskbarArtFrame # atlas entry: frame over an art slot 0x009f4be4 g_uiTaskbarArtFrameSelected 0x009f5d9c g_uiTaskbarArtFrameDropTarget # while dragging an art 0x00581c00 cArtCooldowns::Find # (art) -> entry index (also an art's variants); count if none 0x005829c0 cCreatureArts::HasEffectOfArt # (art): any active effect of the art (+0x1c) 0x00553840 cCreatureArts::FindEffectByKind # (kind) -> entry or null 0x00582710 cCreatureArts::RegenFor # (art) -> regeneration amount (float) 0x00562330 cCreatureArts::AddGroupRegen # (amount, group, filter): adds to every cooldown entry of the group 0x00536f20 cCreature::DistanceTo # (object id) 0x00ad1c60 g_nearbyCreatures # {object id, ?} x g_nearbyCreatureCount, creatures near the player 0x00ad1b48 g_nearbyCreatureCount 0x0049a090 cDialogManager::Answer # (owner, answer): cEvent_creature 0x10c to all heroes (ends the dialog lock); answers < 100000 -> quest script 0x46bd80 0x006e7120 cUI_Tooltip::HandleEvent # dialog answers: click on an entry (+0x2188 list) -> hide, cDialogManager::Answer 0x0075a870 cUI_Manager::TooltipCreate # a panel from the pool at +0x124 0x00756ba0 cUI_Manager::HandleEsc 0x00731ee0 cUI_Control2::ClearFlags # (flags): bit 0 = visible (hide) 0x00aaaf00 g_dialogManager 0x006360e0 cRecordCache::Get # map at +0xde5c, LRU (see docs/performance.md) # Character panel, points (docs/respec.md) 0x006a5dd0 cUI_StatisticsChar::HandleEvent 0x006a9be0 cUI_StatisticsChar::Render 0x006ac120 cUI_StatisticsChar::Layout 0x00580d50 cCreatureArts::RaiseAttribute # (row): + of the attribute panel 0x005a03a0 cCreatureArts::AddAttributePoints # (index, delta), index 7 = free points 0x00582280 cCreatureArts::SkillIdAt # (row) 0x005822c0 cCreatureArts::SkillLevelAt # (row, boughtOnly) 0x00582360 cCreatureArts::AddSkillLevels # (row, delta, spendFreePoints) 0x00580f30 cCreatureArts::ChoosableSkills # (out[8]) -> count 0x00580fe0 cCreatureArts::ChooseSkill # (skill id) 0x00579560 cCreatureArts::Recalculate # (0, 1) after point changes 0x0072af90 cUI_Button::Render 0x006ac8b0 cUI_Chest::Render # vf14: DrawItems on window +0x158 (inventory 0x11) 0x006acc70 cUI_Chest::HandleEvent # vf10: grid clicks via +0x158; Shift+click -> MoveItem(0x11, hero) 0x005dec80 cInventoryManager::MoveItem # (from, to, id, ?): into free space of `to` 0x0060d5e0 cEngine::~cEngine 0x006ac7f0 cUI_Chest::cUI_Chest 0x00728ed0 cUI_TabSheet::cUI_TabSheet # (name, rect, parent, 5), ret 0x18 0x007290d0 cUI_TabSheet::AddTab # (text id, page), ret 8 0x007290b0 cUI_TabSheet::SetMode 0x007291d0 cUI_TabSheet::SetActive 0x007291f0 cUI_TabSheet::GetActive 0x00729210 cUI_TabSheet::Layout # headers in a row above the sheet 0x00729000 cUI_TabSheet::HandleEvent 0x00729080 cUI_TabSheet::Render 0x007278f0 cUI_TabControl::cUI_TabControl 0x007286e0 cUI_TabControl::AddTab 0x00728af0 cUI_TabControl::SetActive # hides the old page, shows the new (vf24) 0x00728090 cUI_TabControl::Render 0x006728c0 TextManager_Instance 0x00672f70 TextManager::GetText # (id) -> {begin, end, cap} wide string 0x008485e2 operator_new 0x00727120 cUI_Window2::AddControl 0x0043f5f0 ItemIsConsumable # (type): class 9 (potion) or 0x1c (rune) 0x006d54e0 cUI_MasterLotto::HandleEvent # rune master: 4 rune slots 0x00655710 cMouseCursor::SetItem # (descriptor, 0,0,0, 1f,1f,-32,-32), ret 0x20 0x006e6560 cUI_Tooltip::~cUI_Tooltip 0x006d3d50 cUI_MasterLotto::UpdateChoice # after slot changes: arrows, chosen rune (+0x7b4) 0x006d3fd0 cUI_MasterLotto::doLottoSelect # (hero type, 0 prev / 1 next / 2 keep), ret 8 0x006d42a0 cUI_MasterLotto::Buy 0x006d4390 cUI_MasterLotto::Refresh # (char), ret 4 0x006d3ce0 cUI_MasterLotto::TryPay # (pay): gold >= price[runes]; pays if pay 0x006d3c90 cUI_MasterLotto::RuneCount 0x006d4180 cUI_MasterLotto::RandomRune # (hero type or 0), ret 4 0x006d4720 cUI_MasterLotto::Render 0x0057fc40 cCreatureArts::AddGold # (amount; negative pays) 0x006d5d90 cUI_Button::SetColours # (colour set) -> +0x54..+0x60, ret 4 0x0044a420 cItemBase::GetName # wide text of the type's name id (or +0x3c) 0x004ec3a0 cCreature::UpdateCollect # mode 0xc; substate 0 searches rings of cells (cmp edi,-20 at 0x4ec8c6) 0x004ec170 cCreature::CanCollectItem # (item object), ret 4; pickup filter, no distance check 0x00592ef0 WideString_Append # thiscall (first, last, 0), ret 0xc; {begin,end,cap} 0x00589270 cCreatureArts::ArtTooltip # (art, text*, flag), ret 0xc 0x004ae330 cInterpretSQW::Teleporter # script: adds the portal bit (hero +0x578), posts busy dialog mode 5/6 0x00720180 cUI_BusyDlg::SetMode # (mode, a, b), ret 0xc; 5 = known portals 0x00720c10 cUI_BusyDlg::HandleEvent # UI event 0x39 to DEFAULT_BUSYDLG, +8 == 2: SetMode(+0xc) 0x0054d840 cCreature::Teleport # (x, y, 0, 1), ret 0x10 0x00553080 cEvent_UI::cEvent_UI # (type, target, sender, a..f), ret 0x24 0x00428700 cItemTypeTable::NameText # (type), ret 4: text id of the type's name (+0x20) 0x0054a8f0 cCreature::UseItem # (id), ret 4: event 0x10 to the item, removes it if used up 0x00581290 cCreatureArts::SetCombo # (index, arts[4], levels[4], id), ret 0x10: fills a combo, computes its total 0x005818e0 cCreatureArts::ComboChargeFraction # (index) -> charge / total, max 1 0x00581920 cCreatureArts::IsComboReady # (index): total <= charge 0x005819a0 cCreatureArts::FindCombo # (id) -> index, 4 if none 0x00581410 cCreatureArts::ComboTooltip # (index, text, mode) 0x004d2970 FindComboDef # (0x200..0x204) -> 0x30-byte entry at 0x953348 # --- movement (WASD direction movement, 2026-10-18) --------------------------- 0x00594110 cCreature::Update # (u8), ret 4; ~40/s: walks the path (+0x2ed) into g_creatureNewPosition, Place 0x00593c50 cCreature::CanStepTo # (x, y, position*), ret 0xc; refuses an unwalkable other cell; side effects 0x004f7b20 cCreature::IsCellWalkable # (cell position*), ret 4; read-only 0x00593290 cCreature::BlendToAnimation # (anim, duration, speed, scale): Granny cross-fade 0x0054e540 cCreature::ResetToIdle # (notify, any level): idle animation, action 0 phase 1, pending 0 (weapon class change) 0x00622570 MapPosition_Init # {u16 area, x, y, u8 level} 0x00622590 MapPosition_Set # from (area, x, y, level) 0x006225c0 MapPosition_ToCell # world units -> cells (/ 53.66563) 0x00ad2368 g_creatureNewPosition # MapPosition the walk step computes before Place 0x0065f010 cTextureCache::Get # (id): loads on demand, touches the LRU # --- UI edit control --------------------------------------------------------- 0x00737ae0 cUI_EditControl::Render # vf14, ret 4; returns at once while hidden 0x007372b0 cUI_EditControl::HandleEvent # vf10 0x00546df0 cCreature::WeaponClass # (0) -> motion set index 0x004dbaa0 cCreature::ContactDistance # (other): mean of the body radii 0x00537430 cCreature::Think # vf04 (float elapsed), ret 4; ~every 110 ms: pending action (+0xfc), then the action's handler 0x004ede70 cCreature::StartPendingWalk # (): pending walk (+0xfc 2) -> action 1, params +0x100 -> +0x154 0x004f45b0 cCreature::WalkAction # (): walk action handler; phase 0 plans the path, facing, animation # --- statistics / survival bonus (2026-10-18) ---------------------------------- 0x00425160 cStatsManager::Instance # cdecl (player id, ignored) -> record at 0xaa3518 0x00424930 cStatsManager::AddTime # (float s, alive): play time (+0x56f8 h, +0x56fc min, +0x5700 ms), survival +0x570c ms 0x004245a0 cStatsManager::OnHeroDeath # deaths +0x56f4 += 1, survival time = 0 0x004245c0 cStatsManager::Deaths 0x00424520 cStatsManager::SurvivalSeconds # +0x570c / 1000 0x00424540 cStatsManager::SetSurvivalSeconds # (s), ret 4 0x00424560 cStatsManager::CountSpawn # +0x5710 u16 (random spawns near the hero, 0x45ff50) 0x00424ce0 cStatsManager::Serialize # (stream, write): ends with magic 0xF00DF00D; survival time not included 0x00565c30 DiminishingCurve # (min, x, half, max): 0 below 1, else min + 2(max-min)(1 - 1/((x-1)/half + 1)) 0x006046f0 ItemDataMgr::saveHero # 0x22c header + 0x40 block (+0 deaths, +8 survival s, +0xc spawns) 0x00605900 ItemDataMgr::loadHero 0x00672fd0 TextManager::GetTextByKey # (key string): id = hash 0x80e010 0x0080e010 TextKeyHash # h = (h*113 + toupper(c)) % 999999991, & 0x7fffffff 0x00565f30 cCreatureArts::ApplySkill # (skill, level, describe out, ...), ret 0x18: skill effects, or their text 0x00565c80 cCreatureArts::ApplySkillToArts # (arts[], start, level, half, limit, attack, out, nameText), ret 0x20 0x0054a110 cCreature::HoldsRangedWeapon # Geschick instead of Stärke for physical damage 0x004d1c50 CombatMoveDef::LinkedSpell # spell id whose values the combat move uses, 0 if none 0x0043ac50 TypeTable::CreatureRecord # (type), ret 4: class record (+0x16: 16 skill ids) 0x006e6630 cUI_Tooltip::FormatText # (char), ret 4: copies +0x115c to +0x2168, wraps at 45 chars with flag 0x80 0x006e6ae0 cUI_Tooltip::SetText # (textId, text*, fixedWidth), ret 0xc 0x006e7730 cUI_Tooltip::Layout # measures the text, width = longest line + 8 unless flag 0x100 0x0075ac70 cUI_Manager::ShowTooltip # (x, y, text, ?, flags, show) # Character selection / export screen (cUI_Character) 0x0070c760 cUI_Character::SetMode # (mode), ret 4: +0x390 (4 selection, 5 export, 6 overwrite confirm) 0x0070c440 cUI_Character::SelectSlot # (char slot, -1 none), ret 4 0x0070d0f0 cUI_Character::ExecuteAction # (action, slot, extra), ret 0xc: 6 export into slot, 9 export (confirm if occupied) 0x0070e650 cUI_Character::OnConfirmButton # the right-hand button (Exportieren, ...) 0x007f01a0 HeroSlots_DeleteHero # (slot + 1), thiscall on 0x7d7c40(), ret 4: deletes Save\Hero%02d.pax 0x00731e70 cUI_Control2::SetFlags # (flags), ret 4: bit 0 = visible (show) 0x00716570 cUI_Options::cUI_Options # (name, rect, parent, flags) ret 0x18 0x007165f0 cUI_Options::~cUI_Options 0x007184e0 cUI_Options::CreateControls # frames, labels, buttons, sliders (vector +0x90) 0x00717ea0 cUI_Options::LoadSettings # settings -> controls, on show 0x00717460 cUI_Options::Apply # controls -> settings (OK) 0x00739f90 cUI_Frame::cUI_Frame 0x0043fa90 PotionTooltipText # (kind 1..5), ret 4: bar tooltip text id by key ("Heiltrank [SPC]") 0x00724ed0 cUI_Window2::AddBackdrop # (rect*, ARGB), ret 8: translucent cUI_Static into +0x90 0x0075a690 cUI_Manager::CanOpenWindow # (1), ret 4: false while a blocking window is open 0x007320c0 cUI_Control2::SetTooltipText # (text id) -> +0x20, ret 4 0x007320d0 cUI_Control2::TooltipText # +0x20 once hovered long enough, else 0 0x0043ae20 cItemTypeTable::IsGold # (type), ret 4: one of the four gold pile types (0x947920) 0x00433f00 cItemTypeTable::GetGroup # (type), ret 4: group record (0x102 bytes), +0x23 set item 0x00428550 cItemTypeTable::IsAlwaysCollected # (type), ret 4: CanCollectItem takes it whatever PICKUPAUTO 0x005c1330 cItemBase::GetColour # (quality block or 0), ret 4: name colour by quality tier / set 0x00559a30 cCreature::DropLoot # (forced type, ?, ?, killer), ret 0x10; "Drop from [%d] %s" 0x005c9b10 cChest3D::dropItems # (?), ret 4: throws out the contents (ids at +0x1e4) 0x006116c0 cEngine::dropItem # the player's drop into the world 0x005fc910 cObjectManager::RemoveFromMap # (id), ret 4 0x00819580 Options_PickupAuto # PICKUPAUTO from the config (0 all, 1 valuable, 2 gold) 0x0061d190 LoadHeroFile # cdecl (path, 1, 0): a hero file onto the player hero (whole object, position too) 0x0061cda0 cEngine::SaveHero # cdecl (path): the player hero as a hero file 0x0061b790 cEngine::Load # (path, quiet), ret 8: reads a GAME.PAK 0x00619c90 cEngine::Save # (path), ret 4; render thread, engine +0x54 & 0x40 0x0060dc00 cEngine::InitGame # (int), ret 4: new game, start hero 0x0071c4f0 cUI_Savegame::SetMode # (mode), ret 4: 1 save, 2 load (+0x75c) 0x0071cfb0 cUI_Savegame::Show # vf24 (bool), ret 4: picks save mode in a game 0x0071c520 cUI_Savegame::Action # (action), ret 4: 2 save, 4 load, 8 delete, 10 rescan, 0xb default 0x0071e330 cUI_Savegame::Scan # (dir, multiplayer), ret 8: "./SAVE/*.PAK" 0x0071be90 cUI_Savegame::SendSaveLoad # (kind, row): engine event 0xf 0x00755ac0 cCommand_armaPlay::execute # posts 0x8002 (mode, argument) to the main window 0x00755b30 cCommand_armaStop::execute # vf04, plain ret: ends the game, posts 0x8001 to the main window (engine deleted, main menu) 0x007d7c40 Session_Instance 0x007d7cf0 Session::SetHeroClass # (class) -> +0x44, ret 4 0x00417e50 GameSetup_Instance # 0x12e6c bytes; +0 set by both character-screen starts 0x006bb870 cUI_EscMenu::BuildLines # line actions; "Spielstaende" text 0x41b at 0x6bc1f7 0x00810af0 BringWindowToFront # (hwnd, timeout), ret 8; loops forever with timeout -1 0x0072ad60 cUI_Button2::SetCaption # (text id, font), ret 8 -> +0xa4 / +0xa0 0x00712f30 cUI_MainMenu::BuildEntries # thiscall, plain ret: the menu entries (cUI_StaticText64FX); main page vector +0x158 0x00711fa0 cUI_MainMenu::HandleEvent # vf10: sets g_campaign 0x182cdc8 by entry name (NEWGAME 0, NEWADDON 1) 0x00753d70 cUI_StaticText64FX::cUI_StaticText64FX # (name, rect, parent, ?, text id, command, flags) 0x0070e2a0 cUI_Character::Show # vf24 (shown), ret 4: single player + g_campaign 1 -> mode 7 (Underworld import, level 25+) # cUI_NetGranny: 3D hero view (game/ui/granny.h) 0x006f06f0 cUI_NetGranny::cUI_NetGranny # (rect by value), ret 0xc 0x006f17f0 cUI_NetGranny::Render # vf44 (device, 0, label), ret 0xc 0x006f4b20 cUI_NetGranny::SetHero # (hero info, x, y, z, turn), ret 0x14 0x006f4ae0 cUI_NetGranny::ClearHero 0x006f0f10 cUI_NetGranny::SetLights # (on): +0x53f white set 0x006f4d70 cUI_NetGranny::InitCamera 0x0070beb0 cUI_Character::LoadExportedHeroes # Hero00..07.pax -> slot grannies +0x1b4 # Textures by name (game/ui/texture.h) 0x00656c80 TextureManager_Instance # cdecl (), kept at 0x13e57b4 0x00657620 TextureManager::IdOf # (name), ret 4 0x0065f010 TextureCache::Get # (id, 0), ret 8; cache at 0x13e57b8, D3D surface +0x14 # Main menu (mods/screen.cpp) 0x007122c0 cUI_MainMenu::Render # vf14 0x0075df10 MenuScene_Instance # 0x1a84 bytes, kept at 0x17ecb40 0x0075e620 MenuScene::Render # (1 argument), ret 4: sky + water (UI_UW_MAIN_CENTER, UI_MAIN_REF) 0x0075e820 MenuScene::Update # (seconds) 0x005905f0 VerifyHeroMirror # anti-cheat: local hero vs protected mirror (0x182cddc); resets mismatches, returns 1 if all matched (mods/anticheat.cpp)