merge: absorb samwhosung/main on top of the upstream merge

Same fork policy: upstream structure wins, local-unique re-instated.

Cargo.toml unions both measured dev-profile philosophies (codegen-units=1 +
lto=off from samwhosung, debug=line-tables-only + split-debuginfo from the
fork's disk measurements).

glue_booth.rs takes samwhosung's typed GlueScene (token/of_race/from_model_path)
and re-adds the fork's TurtleWoW races (Goblin=9, BloodElf=10) as variants;
their glue fog stays on Human's row, exactly as the fork's scene_fog fallback did.

ui script takes samwhosung's mouseover/hyperlink rework (world_mouseover,
minimap_blip, hyperlink.rs) over the fork's inline hover_link/span_at/pointer
path — the rework covers the same OnHyperlinkEnter/Leave behaviour.

game_plugins.rs keeps the fork's re-measured ceilings (466 / 5,509); mail.rs
keeps the explicit 13-tuple with a float daysLeft; MAP.md takes the superset.
This commit is contained in:
chairmanpow
2026-10-12 17:24:31 +01:00
403 changed files with 52938 additions and 9951 deletions
+21
View File
@@ -81,3 +81,24 @@ Reading it: `crates/benilla-app/src/ui_script/verb_event_gate.rs` is the gate. F
verb benilla registers, the module that registers the verb fires the event, or the pair is declared
there: `ELSEWHERE` (a feed fires it on the state the verb changes, and the named file is checked
too) or `GAP` (nothing does, with the reason).
## `1.12-glue-events.tsv` and `1.12-glue-surface.tsv`
The glue screens' own FrameScript state. The glue builder (`0x46a7b0`) gives Lua a different
surface and a different event table from the in-game state's, and GlueXML runs against those.
`1.12-glue-events.tsv` is the 26-entry event table (`0xb41e70`) the builder loads in place of the
in-game one (`0x703d90` at `0x46a88f`), so a glue event's id names a different event in-game. It is
vendored from the client's bytes, as `1.12-event-catalog.tsv` is.
`1.12-glue-surface.tsv` is every function in the glue state's `_G` before GlueXML loads: the base
set both states share (`0x7039e0`), the three registrars the in-game state calls too, and the four
glue-only tables, with each glue verb's in-game namesake and the six whose shape differs from it.
Regenerating: `scripts/gen-reference-glue-surface.py`, from the shapes and globals tables, so it
reproduces the committed file from any clone.
Reading them: `crates/benilla-ui/src/script/tests/glue_surface.rs` holds the surface table to the
shapes table, row for row by `table_va`, and the glue VM (`UiScript::new_glue`) to the surface table:
every function it exposes is a glue-state one, and every glue-state function it lacks is on the
file's `NOT_YET` list, which only shrinks. The same file holds the VM's event table to
`1.12-glue-events.tsv`.