Quest dialogs: stay centred, clickable, closable with Esc

- 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>
This commit is contained in:
khallaandClaude Opus 5.5 committed 2026-10-16 00:39:29 +02:00
1 parent 1fd89524d3
commit a7f8496b2b
6 files changed
+165 -4

No files matched your search

+8 -2
View File
@@ -29,5 +29,11 @@ HandleEsc is hooked: unless the ESC menu is open, every visible window of a
table (slot, name) gets that hide command, and Esc does nothing else. If none
is open, the game handles Esc as before.
Not covered: dialogs that are not one of these windows, e.g. quest dialogs
(standalone buttons and texts in the UI manager, docs/hud.md).
Quest dialogs are tooltips (docs/hud.md) that block all input until answered.
A click on one of their entries (cUI_Tooltip::HandleEvent 0x6e71e2) hides the
tooltip (0x731ee0, flag 1), calls cDialogManager::Answer (0x49a090 on
0xaaaf00, (owner = tooltip +0x21cc, answer)) and clears 0xab5314. Answer sends
every player hero a cEvent_creature 0x10c (ends the input lock) and passes
answers below 100000 to the quest script (0x46bd80). Esc does the same with
answer 0xffffffff: the dialog closes, nothing is chosen. (Hiding the tooltip
alone left the input lock; measured with a write watch on its flags.)
+16
View File
@@ -70,3 +70,19 @@ clicks only hit at the unshifted position. `cUI_Button2`, `cUI_Static2`,
`cUI_StaticText64`, `cUI_StaticText64FX` (render and event) and
`cUI_TextLines` (render) are hooked as centred windows too; inside other
windows they are in that window's scope already (outermost wins).
## Tooltips and quest dialogs (2026-10-16)
Quest dialogs are tooltips: `cUI_Manager::tooltipCreate` (`0x75a870`) hands
out a panel from a pool at cUI_Manager +0x124 (`UI_WND_TOOLTIP`, created
1024x768, flags 0x804 while hidden); the quest dialog used one at 136,306,
752x157 (flags 0x805). Tooltips used to be drawn with the offset of the moved
window under the cursor in every frame, and without recording an offset for
hit tests: dialogs jumped to the 1024 frame when the cursor left the UI, and
their clicks only hit at the unshifted position. Now a tooltip keeps the
offset it gets when it becomes visible (the hovered window's, or the centre
when no moved window is under the cursor: a dialog) and records it for hit
tests. Visible dialog tooltips: `mods::hud::VisibleDialogTooltips`.
The standalone control hooks (buttons, texts) above turned out not to be what
the quest dialog is made of; they stay, for top-level controls in general.