fix #234: port retail appraisal floaty and inscriptions
This commit is contained in:
parent
643cdfe66e
commit
f1a7912160
23 changed files with 1310 additions and 106 deletions
|
|
@ -30,11 +30,15 @@ ports the optional public shared-cooldown metadata, the authoritative
|
|||
cooldown-enchantment lookup, the exact ten-step bucket formula, and DAT
|
||||
sprites `0x060067CF..0x060067D8` through the shared retained `UiItemSlot`
|
||||
presentation; its connected gate passed. The existing magnifying-glass Assess
|
||||
command was already retail-faithful. Slice 3 is now code-complete: the complete
|
||||
appraisal response reaches a balanced pending/current request owner and the
|
||||
imported 310 x 400 examination layout through the canonical shared main-panel
|
||||
host. Item, creature, and character views, authored scrollbars, first-response
|
||||
visibility, and visible-combat refresh are pinned; the connected examination
|
||||
command was already retail-faithful. Slice 3's first connected gate exposed
|
||||
three deeper defects, now corrected: the response enum mislabeled ACE's
|
||||
creature bit `0x0100` and dropped monster packets while retaining the busy
|
||||
cursor; the imported 310 x 400 examination layout was incorrectly hosted as
|
||||
shared main-panel content; and inscription was display-only. Exact flag
|
||||
decoding now reaches the balanced request owner, retail's
|
||||
`gmFloatyExaminationUI` has an independent top-level lifetime, and the
|
||||
imported multiline field sends the exact `SetInscription (0x00BF)`
|
||||
transaction under retail ownership/authorship rules. The corrective connected
|
||||
gate is next.
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -97,11 +97,15 @@ AutoWear blockers, and carried-use delivery is user-confirmed. The requested
|
|||
adjacent cooldown follow-up now preserves the item's shared group/duration,
|
||||
projects the authoritative cooldown-enchantment bucket, and draws retail's ten
|
||||
DAT-authored radial steps across all item-slot surfaces; its connected gate
|
||||
passed. The pre-existing Assess command has been reconciled against retail and
|
||||
Slice 3 is code-complete: strict full appraisal parsing, balanced
|
||||
pending/current request ownership, and LayoutDesc `0x2100006B` item,
|
||||
creature, and character views now live in the canonical shared main-panel
|
||||
host. Its connected examination gate is next.
|
||||
passed. The pre-existing Assess command has been reconciled against retail.
|
||||
Slice 3's first connected gate found and corrected the real remaining defects:
|
||||
ACE creature flag `0x0100` was mislabeled as a weapon profile and left the
|
||||
appraisal busy reference held, retail's examination UI had been mounted as a
|
||||
shared main-panel page rather than its own floaty window, and inscription was
|
||||
display-only. Exact response flags, the independent
|
||||
`gmFloatyExaminationUI` lifetime, and the retail `SetInscription (0x00BF)`
|
||||
edit transaction are now ported. The corrective connected
|
||||
examination/inscription gate is next.
|
||||
|
||||
Carried:
|
||||
#153 far-teleport residual, #116 slide-response, the remaining R6 ownership cleanup plus
|
||||
|
|
|
|||
|
|
@ -2,9 +2,11 @@
|
|||
|
||||
**Status:** Slice 1 user-accepted 2026-07-23. Slice 2 Use-hand selection,
|
||||
zero-useability, carried direct-use, AutoWear correction, and the requested
|
||||
shared item-cooldown follow-up passed their connected gates. The existing
|
||||
retail Assess command has been reconciled and Slice 3's examination panel is
|
||||
code-complete; its connected visual gate is next.
|
||||
shared item-cooldown follow-up passed their connected gates. Slice 3's first
|
||||
connected gate exposed an incorrect IdentifyResponse flag table, a non-retail
|
||||
shared-panel mount, and its missing inscription transaction. All three are
|
||||
corrected; the independent floaty examination window awaits its corrective
|
||||
connected gate.
|
||||
**Milestone:** M4 prerequisite/preamble.
|
||||
**Architecture:** retained gameplay UI over shared selection, object, and
|
||||
interaction state. `GameWindow` remains a composition/callback shell.
|
||||
|
|
@ -19,7 +21,7 @@ quest/emote/character-creation bodies begin:
|
|||
2. The status bar's hand and magnifying-glass controls invoke the same Use and
|
||||
Assess commands as their keyboard paths.
|
||||
3. Assessing a creature, player, NPC, or object opens its retail information in
|
||||
the canonical shared main-panel host.
|
||||
the independent movable/resizable retail floaty examination window.
|
||||
4. World picking can resolve visible equipped children, such as a character's
|
||||
wielded weapon, while selection markers remain anchored to the picked child.
|
||||
5. Vendor use opens the authored vendor surface, publishes its inventory, and
|
||||
|
|
@ -38,7 +40,7 @@ selection state, or optimistic inventory outcomes.
|
|||
|---|---|---|
|
||||
| 1 | Spell-bar overflow arrows | `SpellcastingUiController` + generic retained scrollbar/list |
|
||||
| 2 | Status Use/Assess commands | focused status-bar controller binding to the existing action router |
|
||||
| 3 | Assessment information panel | new retained panel controller mounted by the canonical main-panel host |
|
||||
| 3 | Assessment information panel | retained controller in an independent floaty examination window |
|
||||
| 4 | Equipped-child world picking | pure world-query/picking policy plus presentation anchor |
|
||||
| 5 | Vendor browse lifecycle | vendor session/controller plus authored panel |
|
||||
| 6 | Vendor transactions | server-authoritative buy/sell command and reconciliation owner |
|
||||
|
|
@ -114,19 +116,29 @@ retail response owner around it. One shared UI-busy reference covers the
|
|||
latest pending GUID, stale replies are rejected, the accepted reply becomes
|
||||
the current appraisal, and combat-time creature/player refreshes occur every
|
||||
0.75 seconds only while the examination window is visible. Complete
|
||||
`IdentifyObjectResponse` parsing now includes the three-word HookProfile and
|
||||
rejects truncated gated payloads rather than continuing from a corrupt cursor.
|
||||
`IdentifyObjectResponse` parsing now uses ACE/retail's exact flag values and
|
||||
positional order, includes the three-word HookProfile, and rejects truncated
|
||||
gated payloads rather than continuing from a corrupt cursor. The first live
|
||||
monster gate found that `0x0100` had been mislabeled WeaponProfile; the parser
|
||||
dropped every creature response before response acceptance, leaving the one
|
||||
busy reference held. A literal ACE `0x0100` creature fixture now protects that
|
||||
packet-to-controller path.
|
||||
|
||||
LayoutDesc `0x2100006B`, root `0x100005F2`, supplies the complete 310 x 400
|
||||
floaty chrome, title, item/creature/character subviews, close control, and
|
||||
authored scrollbars. The panel participates in the canonical one-active
|
||||
main-panel geometry/lifecycle rather than owning a parallel location. Basic
|
||||
item, creature, and player reports are live; exact 3D preview/specialized
|
||||
detail regions, conditional inscription editing, and selection-follow remain
|
||||
the narrowed AP-110 residual. Research:
|
||||
authored scrollbars. `gmFloatyExaminationUI` is an independent top-level
|
||||
window, so Inventory/Skills/Spellbook no longer replace it or inherit its
|
||||
geometry. The imported multiline inscription field now ports
|
||||
`ItemExamineUI`'s public/hook inscribability, inventory ownership and
|
||||
same-scribe permission rules, placeholder/signature presentation, exact
|
||||
failure notices, focus commit behavior, and CP-1252 `SetInscription (0x00BF)`
|
||||
transaction. Basic item, creature, and player reports are live; exact 3D
|
||||
preview/specialized detail regions and selection-follow remain the narrowed
|
||||
AP-110 residual. Research:
|
||||
[`../research/2026-07-23-retail-appraisal-ui-pseudocode.md`](../research/2026-07-23-retail-appraisal-ui-pseudocode.md).
|
||||
The focused parser/router/request/controller/fixture tests pass, as do the
|
||||
Release solution build with 17 pre-existing tracked test warnings, 3,488 App
|
||||
tests / 3 skips, and 7,885 complete-solution tests / 5 skips.
|
||||
Release solution build with 17 pre-existing tracked test warnings, 3,496 App
|
||||
tests / 3 skips, and 7,913 complete-solution tests / 5 skips.
|
||||
|
||||
## Slice 1 — spell-bar overflow arrows
|
||||
|
||||
|
|
@ -224,20 +236,27 @@ Named retail references and executable pseudocode are recorded in
|
|||
3. `AppraisalUiController` owns response acceptance, item/creature/character
|
||||
subview selection, report projection, scroll preservation, first-response
|
||||
visibility, and visible-combat refresh.
|
||||
4. `RetailUiRuntime` imports the retail layout and registers it with
|
||||
`RetailPanelUiController`, so Inventory, Skills, Spellbook, effects, and
|
||||
Examination remain views of the same movable/resizable main panel.
|
||||
4. `RetailUiRuntime` imports and registers retail's
|
||||
`gmFloatyExaminationUI` as its own top-level window. It deliberately does
|
||||
not enter `RetailPanelUiController`; Inventory, Skills, Spellbook, and
|
||||
effects keep their shared main-panel geometry while Examination coexists.
|
||||
5. Network workers deliver immutable parsed data through the existing
|
||||
session router; retained state changes remain on the update thread.
|
||||
6. `AppraisalUiController` owns inscription presentation and optimistic field
|
||||
state; `WorldSession` owns the exact `0x00BF` GameAction send. Authoritative
|
||||
inventory/appraisal data remains the source on the next response.
|
||||
|
||||
### Connected gate
|
||||
|
||||
- Select an item and click the magnifying glass (or press Assess): the shared
|
||||
panel should show its name, available properties, descriptions,
|
||||
inscription/signature, retail chrome, and working scrollbar.
|
||||
- Select an item and click the magnifying glass (or press Assess): a separate
|
||||
floaty window should show its name, available properties, descriptions,
|
||||
inscription/signature, retail chrome, and working scrollbars.
|
||||
- Assess a monster, NPC, and player: the correct creature/character page
|
||||
should appear and the busy cursor should clear.
|
||||
- In combat, leave a creature assessment open long enough to observe a health
|
||||
refresh; closing it or opening another shared panel must stop refreshes.
|
||||
- Move/resize Examination, switch to Inventory or Skills, and confirm the
|
||||
shared rectangle is retained.
|
||||
refresh; closing the examination window must stop refreshes.
|
||||
- Keep Examination open while opening/moving Inventory or Skills and confirm
|
||||
both windows coexist with independent rectangles.
|
||||
- Assess an owned inscribable weapon. Edit and clear its inscription by
|
||||
clicking elsewhere, then reassess it. An item authored by another player is
|
||||
read-only and reports the exact retail permission line when clicked.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue