- Megamap / TAB map zoomed view: heroes' markers and the other symbols
(integer 200h centre immediates) follow the view's centre.
- Map reveal: the hero's reveal stamp scaled 10x (mods/mapreveal.cpp,
docs/map-reveal.md); creatures on the zoomed map shown within 10x the
sight range.
- Load / save progress screen drawn on the rock background across the full
width, the picture blended over it (mods/loadingscreen.cpp); the classic
1024x768 frame is gone.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Shared chest: emptied and not saved from the moment a save game is read
until it reloads; a hero saved inside a load wrote the new world's
objects (stale ids) as the chest's items.
- Main menu after a game: shown 16:9 screens are tracked on the menu thread
only and expire after 2 frames; a destroyed in-game window kept the menu
unframed (old pictures, frame at the left).
- Dialogs over a 16:9 screen in the main menu are centred, their dimming
covers the screen.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The hidden-texture list stayed active in a game; a game texture made at the
address of a freed menu picture was skipped (rendering glitches in-game).
Hiding now applies only while the main menu's frame or the in-game options
draw over the menu background.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Spielen hero panel shows the selected hero in 3D (cUI_NetGranny,
game/ui/granny.h).
- All menu screens draw on the options' rock wall; the main menu's 1024
frame is drawn centred over it, mouse and cursor shifted to match.
- The main menu's and options' own pictures and the main menu's 3D scene
are left out (textures hidden by surface, scene call redirected).
- Logo top left: FX_SACREDLOGO.TGA, drawn added.
- Game textures by name (game/ui/texture.h), textured and added quads.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Shared screen kit (mods/screen, docs/screens.md): a 1365x768 canvas
centred in the render width on our own dark background, the game's
frames and buttons; the main menu renders full width while it is shown.
- The load window (cUI_Savegame) is replaced by the Spielen screen:
character list, hero panel, campaign x difficulty grid, save/autosave
choice, rename/delete/reset/new character dialogs.
- Migrated characters without a shared hero load their hero's world
first, then start the new world.
- Options, Allgemein: autosave interval (Aus/5/10/15/30 minutes).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- CharacterNN.sacredK holds the shared hero and one world per difficulty,
plus an autosave file; the game works in save\characters\_work
- Load window: one row per character, a difficulty dialog on Laden
(worlds, newer autosaves, "(neu)" starts a new game with the shared
hero), Umbenennen, delete moves the character to characters\deleted
- The world keeps its own portals and hero position when the shared hero
is put on
- K and the Esc menu's "Speichern" save directly (quicksave path)
- One-time migration of the old save rows and exported heroes, after a
backup
- Startup no longer hangs in the game's foreground loop (0x810af0)
- Text overrides apply to our own text ids too; shared cUI_Button2
helpers in game/ui/button.h
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
sacred_re.dll/.exe/.ini/.log/_crash files are now sacredK.*; inventory saves
with the old "sacred_re.inventory" format id still load.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Options window in three tabs; the auto-pickup settings move to Beute;
sliders move with their page; black sides like the save game screen.
- Tastenbelegung: every binding settable (click, press key; Esc cancels,
Backspace unbinds), "Alle zurücksetzen" as a game button, saved on OK.
- Potions bindable (default unbound), named by the game's potion texts; the
game's own potion hotkeys are off; bar tooltips show the bound key.
- Map (M), overview map (Tab, held) and labels (Alt, held) bindable; the
game's own M / Tab / Alt handling is switched off.
- Save game key calls the game's save window code instead of a posted key.
- Teleportationstrank: fixed text replacement from startup (also the
Ausdauertrank items, potion kind 5 as well).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- cUI_Character (export) and cUI_Savegame draw inside the centred 1024x768
frame (viewport) with the render target beside it cleared black; the
export screen's 3D heroes were stretched across the wide viewport, away
from their labels and hit areas.
- Export screen shows the game's erase button for an occupied slot and
reloads the heroes after a delete. Overwriting was already the game's
own path once clicks hit the right slot.
- game/ui/control.h: shared show/hide for cUI_Control2.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The zoomed map view resets the viewport to the full render size when done;
the HUD layer shifted that reset past the render target, SetViewport failed
and the map's 256x256 viewport stayed set, clipping the cursor. Full-width
viewports at x 0 are no longer shifted.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Shared chest: tabs "Truhe"/"Gemeinsam" as a column left of the grid
(game tab sheet), grids placed every tick, persistent across heroes
- Inventory tab texts capitalized (RegisterText / CapitalizeText)
- Combat-art runes stack like potions (itemstack, renamed from potionstack)
- Rune master: any rune for any number of runes, price by rune count
(4 runes = 1,000, x10 per missing rune), bought rune goes into the
backpack, Buy disabled without runes, gold or room, last rune remembered
per hero (saved), the chosen rune's name below its icon, dropping a
stack gives up one rune
- Keys: the old key handling no longer takes over after the save screen
(text field focus only counts while its dialog is shown)
- Esc crash: tooltips forgotten when the game destroys them
- Pick up (Q) sends the pickup order directly; search reach doubled
- Kettenblitz: tooltip shows hits per chain, chains, cast and jump range;
cast range 900 (longer ray segments), jumps half of that
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- megamap: the zoomed view (0x6cc950) is shared by the large map and the
TAB overview map; its centre is now set per call from the drawing
window's offset (hud::DrawOffsetX) instead of fixed to the render width
- input: drop the Ctrl/Alt pass-through; GetKeyState reports Alt as held
after Alt+Tab, which switched all bindings back to the game's handling
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- respec: the panel's unused second button array becomes − buttons between
name and value; attributes give back invested points, skills give back
skill points, a level-1 skill is removed and can be chosen anew; all
through the game's own point functions (protected copy stays in sync)
- the − is the + icon with its vertical arm covered (no minus image exists)
- hud: RenderCentred / HandleCentred for mods hooking centred windows;
mouse event helpers shared in game/ui/events.h
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- hud: shift SetViewport/Clear with moved windows (TAB overview map)
- megamap: view constants patched to the render width (clip, scroll limit,
edge scrolling, centre, dark band, zoomed view and its markers); frame
stretched to the screen edges, zoom controls and their click area centred
- hud: Anchor::Screen windows are drawn and clicked unshifted but still own
the event scope
- autotest waits for log markers instead of fixed delays (~18 s per run)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Quest dialogs are tooltips. A tooltip now keeps the offset it gets when it
becomes visible (the hovered window's, or centred for dialogs) and records
it for hit tests; its own event handler is shifted too. Hidden windows no
longer count as hovered.
- Esc closes a visible dialog the way its answer buttons do: hide, then
cDialogManager::Answer with no answer (ends the input lock, nothing chosen).
- Autotest can select a save game row (-Save).
- Names for the UI manager, tooltip and dialog functions.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Skill bar: no art selection; slot 0 is the right-click art, keys 0-6 cast
slots directly; cooldown labels in exact seconds; slot 0 set apart.
- Arts regenerate on their own (casting no longer refills the group).
- Auto-attack after targeting or casting at a hostile creature, at the speed
of a held button.
- Auras can be recast while active (renew, no second visual).
- Blicke wie Klingen hits every enemy in range, physical, with life leech.
- Blitzschlag steers the game's own chain: 3 + level/5 hits, 1 + level/10
chains, re-hits a lone enemy.
- Weapon sets: click selects, drag only from the selected set; the leftmost
set is clickable (signed hit tests).
- Esc closes open windows before opening the game menu.
- HUD: standalone buttons and texts are centred.
- Record cache sized for widened views (town lag while walking).
- Shared game code: orders, fx events, text drawing, cooldowns, effects.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Primitives covering the whole 1024x768 layout inside a moved window, such as
the dimming behind the exit confirmation, were shifted with the window and
left both sides undimmed; they are stretched to the render width instead.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Creatures were culled beyond 1024+200 x 768+200 screen pixels (cmp 4C8h /
3C8h in both object passes): invisible in the right part of a wide view,
and the player too once the centre passed 1224. The bounds follow the
render size now.
- Centre immediates written as negatives (-200h / -180h), missed before:
the row renderer's static object origin (0x62babb) and aiming at the
cursor (0x4fb620).
- HUD: moved windows no longer shift the shared mouse cursor object; the
cursor accessor (0x6550f0) hands them a per-thread shifted copy and writes
back what they changed. World input on other threads read the shifted
position now and then, which made hold-to-move jerky.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Mouse move events carry previous and current x (+4, +0xc); button events
x at +8. All are shifted, and restored to the saved values.
- The cursor object's previous x (+0xc) is shifted too: picking up an item
writes the cursor position into the event (0x6559a0).
- GetMouseClientPos returns the shifted position inside a moved window.
- Window hit tests (vf1c 0x731d40, taskbar 0x6dfb10) called outside a window
scope, e.g. 'is UI under the cursor' for world picking (0x75a370), use the
offset the top-level window was last drawn with.
- The item carried by the cursor (0x6555e0) and the UI manager's centred
status line / message box (0x75bbf0, 0x75c200) draw with the centre offset.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Windows poll the mouse cursor object (0xcdbadc, x +4) for hover; it is
shifted inside a moved window's render/event scope like the events.
Tooltips are separate windows placed by the hovered window in its 1024
layout, so cUI_Tooltip renders with the offset of the moved window under
the cursor. Adds Move-To to the test input helpers.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Generic cUI_Window2 hooks centre dialogs, inventory, maps, traders and the
ESC menu. Event shifting now targets the cursor position of mouse events
(move/down/up, x at +8) instead of category 5 UI events, whose +0x48 is not
a point for commands such as opening the ESC menu.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
New mods/hud: while a HUD window renders, screen-space vertices passed to
D3D7 DrawPrimitive/DrawIndexedPrimitive are shifted by dx; while it handles
an event, the UI event point (category 5, +0x48) is shifted by -dx. Applied
to cUI_Taskbar2 (centred) and cUI_Mercenary (portrait + health, right edge).
3D belt items line up without help (their projection is screen-centred).
re::AttachRuntimeHook hooks functions only known at runtime (COM methods).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>