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:
1 parent
1fd89524d3
commit
a7f8496b2b
6 files changed
+165
-4
No files matched your search
+8
-2
@@ -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
@@ -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.
|
||||
Reference in new issue
Block a user