fix(ui): OP3 review fixes — byte-verified Magic chat lines, Gameplay/OptionPage shape, mid-air tri-state, shared geometry
Consolidated fix round for the two OP3 dual-lens reviews
(docs/research/2026-08-11-op3-review-{mechanism,blast}.md), both
APPROVE-WITH-FIXES.
MUST-FIX:
- The six "Use Mouse Turning Settings" chat lines were typed
RetailLogTextType.ClientLocal (0x1A); retail types them 0x07 (Magic).
BYTE-VERIFIED against the PDB-paired binary at all six
gmConfigUI::SetMouseTurningDefaults call sites (0x0049E972/E9E2/EA52/
EAA4/EAF6/EB48): every site pushes `6a 07` (type=7) immediately before
the text-pointer push and the AddTextToScroll call. Added a dedicated
OptionsRuntimeBindings.DisplayMouseTurningMacroLine seam routed at
Magic (scrolling chat transcript, light blue, timestamped) instead of
the 4-slot SpewBox ClientLocal uses; the mid-air refusal and UA/RA
keep ClientLocal (both independently confirmed correct).
- Filed AD-77: the client-wide floating-only gmPanelUI host divergence
(retail also exposes a docked 0x21000017 host) the plan §5 delegated
to this review, scoped to every main panel, not just Options.
SHOULD-FIX:
- gmGameplayOptionsUI is not an OptionPage in retail (acclient.h:55857,
UIElement_Field). OptionsPanelController now constructs the Gameplay
slot's OptionPage with AfterApply deliberately null, so entering/
leaving that tab never publishes SaveCharacterOptionsRuntimeCmd.
Corrected OptionPageModel's doc comment and rewrote the two tests
that pinned the wrong (Gameplay-flushes) shape.
- Added the OptionPage.OnOptionChanged seam (PlayerOptionPage::
OnOptionChanged @0x004F27D0) — fires as the last step of Apply/
Reset/Defaults, plus once per live LED edit via a new
IOptionRow.AttachPageNotify hook (BoolOptionRow wires it into
SetCurrentValue only, matching retail's Apply(1)-only
HandleDialogAndNotices path). OP4-6 will bind Apply/Reset enable
state to this.
- Exit to Character Selection's mid-air refusal is now tri-state
(Func<bool?> IsGrounded): retail's UseTime only reaches the airborne
test inside `else if (smartbox->player)`, so outside player mode (or
with no live controller) the button is a SILENT no-op, not a
refusal. Fixed the inverted comment at both call sites.
- Options panel geometry now matches its nine gmPanelUI siblings
sharing RetailPanelUiController's one main-panel rectangle
(ResizeX=false, bottom-edge-only resize, no invented Min/MaxWidth/
Height) instead of being the only all-four-edge/horizontal-resize
outlier whose width silently reverted whenever a sibling was shown.
- Added the three missing test pins: Options/Character mutual
exclusion through a REAL RetailPanelUiController registration,
RetailDialogFactory.MakeConfirmation's omitted-queueKey overload
sharing DefaultQueueKey, and UiTabPanel.ActivePageChanged never
firing on a dormant (non-activated) host.
- TS-74's What/Where now names the five store-only CameraTurning
preferences explicitly instead of only mentioning them in Risk.
- Test script gains the toolbar-button ghosted->enabled+highlight
check, UseMouseTurning-survives-relogin and the five prefs-survive-
relaunch steps, a UA/RA legibility eye-item, and the corrected
bottom-edge-only geometry description for step 5.
One-liners fixed in files already touched: symmetric close-button
resolve-failure logging in OptionsPanelController.Bind (blast NOTE 8).
Full Release suite: 12,947 passed / 4 skipped / 0 failed (baseline
12,935/4/0 post-OP7 — 12 net new tests; the two OptionPageModelTests
"wrong-shape" tests were renamed/rewritten in place, not removed).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
64898f1301
commit
386076af0f
11 changed files with 505 additions and 72 deletions
|
|
@ -28,13 +28,24 @@ for this slice, not a bug.
|
|||
`gmPanelUI`-family panel was already open (Character Info, Skills,
|
||||
Vitae, Inventory, etc.), opening Options closes it first — this is
|
||||
retail's real "one active panel" behavior (`gmPanelUI`'s shared
|
||||
geometry/exclusive-child model), not new to this panel.
|
||||
geometry/exclusive-child model), not new to this panel. **Note the
|
||||
button's STATE change, not just its behavior:** before this slice this
|
||||
button was greyed out/disabled (panel id 10 was not in the catalog) and
|
||||
clicking it did nothing. It should now be fully enabled, AND it should
|
||||
highlight (same visual as the Inventory/Character/Magic buttons) while
|
||||
the Options panel is open, un-highlighting when it closes.
|
||||
4. **Click the panel's own close (X) button**, top-right of the window
|
||||
chrome. The panel closes — same action as F11.
|
||||
5. **Drag the window by its border/chrome, resize it from any edge or
|
||||
corner.** Behaves like the CH6 chat floaties: draggable, resizable on
|
||||
all four edges, remembers its geometry across a close/reopen within
|
||||
the same session.
|
||||
5. **Drag the window by its border/chrome; resize it from the BOTTOM
|
||||
edge only.** Options shares its geometry policy with every other
|
||||
`gmPanelUI` sibling (Character/Inventory/Spellbook/the indicator-detail
|
||||
panels): draggable, resizable from the bottom edge only (NOT the top,
|
||||
left, or right edges, and NOT a corner — the panel does not resize
|
||||
horizontally at all), and it remembers its HEIGHT across a close/reopen
|
||||
within the same session, same as every sibling. This is a correction
|
||||
from OP3-as-landed, which briefly gave Options all-four-edge/horizontal
|
||||
resize that no sibling has and that silently reverted to 300px wide the
|
||||
next time a sibling panel was shown.
|
||||
|
||||
### Tab switching
|
||||
|
||||
|
|
@ -79,14 +90,29 @@ for this slice, not a bug.
|
|||
— retail's own byte-verified failure text, always shown (the URL is
|
||||
dead in 2026, so acdream never attempts to open a browser — register
|
||||
row AD-75). **No native browser window opens, no OS dialog box.**
|
||||
14. **Report Abuse.** Click it. Same shape as Urgent Assistance, with
|
||||
its own retail text ("...to submit an abuse report...").
|
||||
**Legibility check (blast review SHOULD-FIX 4):** this is a
|
||||
THREE-LINE, ~110-character-URL body landing in the SpewBox overlay,
|
||||
which auto-expires after 5 seconds. Read the whole body BEFORE it
|
||||
disappears — if you cannot finish reading it (especially the URL) in
|
||||
that window, report it as a legibility problem; the honest fix would
|
||||
be routing it to the scrolling chat transcript (which stays and
|
||||
scrolls back) instead of shortening the timeout.
|
||||
14. **Report Abuse.** Click it. Same shape as Urgent Assistance
|
||||
(including the same legibility check), with its own retail text
|
||||
("...to submit an abuse report...").
|
||||
15. **Use Mouse Turning Settings.** Click it. Expect one retail chat
|
||||
line per changed value among: Camera Stiffness, Camera Adjustment,
|
||||
Mouse Sensitivity, Align To Slope, Invert Mouselook Axes, Turn to
|
||||
Face Camera — a FRESH character (never touched these settings) sees
|
||||
all six lines; clicking the button a second time in the same
|
||||
session sees zero lines (everything already at the macro's target).
|
||||
**These six lines are byte-verified `RetailLogTextType.Magic` (0x07),
|
||||
NOT the client-local refusal type** — expect LIGHT BLUE text in the
|
||||
SCROLLING CHAT TRANSCRIPT (not the transient SpewBox overlay), with
|
||||
a timestamp prefix, same as any other Magic-colored system line. If
|
||||
you see bright red text in a transient 5-second overlay instead (the
|
||||
ClientLocal/SpewBox look used by the mid-air refusal and UA/RA
|
||||
above), that is the pre-fix-round bug — report it.
|
||||
**Known, registered gap (TS-74): acdream has no persistent
|
||||
"turn to face camera" mouse-turning MODE yet, so this button changes
|
||||
stored preferences and sends the wire bit, but you will not see the
|
||||
|
|
@ -94,12 +120,34 @@ for this slice, not a bug.
|
|||
does not exist yet. Verify the CHAT LINES and that the button is
|
||||
clickable/does not crash; do not expect a camera-behavior change.
|
||||
|
||||
### Cross-session persistence (mechanism review S6)
|
||||
|
||||
16. **Relog the SAME character** (log off through Exit Game, or
|
||||
disconnect/reconnect, then log back in) after step 15 has already
|
||||
shown all six lines once. Open the Options panel and click "Use
|
||||
Mouse Turning Settings" again. Expect **zero** chat lines this time —
|
||||
`UseMouseTurning` is an auto-save id (`SetSingleCharacterOption
|
||||
0x0005`), so the bit reached ACE on the first click and the fresh
|
||||
post-relog `PlayerDescription` echoes it back as already-on. Seeing
|
||||
the "Turn to Face Camera was changed..." line AGAIN after a clean
|
||||
relog means the bit did not actually persist server-side — report it.
|
||||
17. **Fully relaunch the client** (close the window, start a new
|
||||
process) after step 15. Reopen the Options panel — no button click
|
||||
needed. The five CLIENT-LOCAL preferences (Camera Stiffness,
|
||||
Adjustment Speed, Mouse Sensitivity, Align To Slope, Invert Mouselook
|
||||
Axes) persisted to `settings.json`'s `cameraTurning` section should
|
||||
still read at the macro's target values from the PREVIOUS session —
|
||||
click "Use Mouse Turning Settings" once more and confirm you again
|
||||
see zero lines (proving the five client-local prefs, not just the
|
||||
one server bit, survived the relaunch).
|
||||
|
||||
### What to report
|
||||
|
||||
- Any of the above NOT matching (wrong text, wrong tab default, window
|
||||
not draggable/resizable, close button not working, F11/toolbar not
|
||||
opening the panel, opening Options not closing a sibling panel).
|
||||
- Any exception/crash on any of the 15 steps.
|
||||
opening the panel, opening Options not closing a sibling panel, toolbar
|
||||
button not highlighting while the panel is open).
|
||||
- Any exception/crash on any of the 17 steps.
|
||||
- Whether the confirmation dialog's exact wording looks retail-correct
|
||||
(it resolves from the DAT string table at runtime; a fallback English
|
||||
string only appears if that resolution fails, which would itself be
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue