Files
benilla-octo/reference/1.12-glue-surface.tsv
T
Sam SungandClaude Opus 5.5 a9dd325bb7 A glue Lua state with the reference glue surface, events and ModelFFX (#963)
The first piece of running the stock GlueXML: benilla had no glue Lua state, and no reference data for its surface.

In 1.12.1 the glue state holds the base set (`0x7039e0`) and seven registrars (`0x46abb0`): 119 functions, 105 of them glue-only, with 26 glue events (`0xb41e70`, `0x46a88f`). `RegisterEvent` matches names case-insensitively and drops an unknown one (`0x702140`). The glue builds the 13 base frame types plus `ModelFFX` (`0x46a4fe`), a Model with its own show and paint (`0x46fa00`); the in-game types come only at world entry (`0x495940`).

`reference/` gains the glue event and surface tables, generated and checked against the shapes table. `UiScript::new_glue()` builds that state; a gate holds its globals to the table, with the 108 unbuilt names listed. Nothing in the app changes yet.

Part of #856

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 07:38:02 +07:00

11 KiB

1# The glue screens' Lua surface in the 1.12.1 client (build 5875): every function in `_G`
2# once the glue builder 0x46a7b0 has installed its registrars, before GlueXML loads.
3# Generated by scripts/gen-reference-glue-surface.py from reference/1.12-shapes.tsv and
4# reference/1.12-globals.tsv; the generator's header carries the registrars and the method.
5#
6# scope base = FrameScript's Lua init 0x7039e0, which both states run; shared = a
7# registrar the in-game state calls too (0x51bb20, 0x706350, 0x4587f0); glue =
8# a glue-only registrar table (0x46ddf0, 0x4736c0, 0x471a20, 0x46f480).
9# fn, table_va, arity as 1.12-shapes.tsv has them. A base alias the compat chunk
10# 0x8722e8 defines carries the library binding it names (`tinsert` is table
11# 0x822d40's `insert`), or fn `lua` for a degree-converting closure; math's
12# global `__pow` (0x7fb050) has no table.
13# world_fn a glue row's in-game namesake, a different binding; `-` if none.
14# note shape-differs = both shapes exact, and the glue binding takes or returns a
15# different count than its in-game namesake.
16# 195 functions: 76 base, 14 shared, 105 glue; 6 glue rows differ in shape from their in-game namesake.
17scoperegistrarnamefntable_vaarityworld_fnnote
18base0x7039e0assert0x7031a00x811e281-
19base0x7039e0collectgarbage0x7032500x811e280-
20base0x7039e0date0x7033a00x811e281-
21base0x7039e0debugbreak0x7028200x811e280-
22base0x7039e0debugdump0x7028100x811e280-
23base0x7039e0debuginfo0x7027f00x811e280-
24base0x7039e0debugload0x7027e00x811e280-
25base0x7039e0debugprint0x7028000x811e280-
26base0x7039e0debugprofilestart0x7028400x811e280-
27base0x7039e0debugprofilestop0x7028600x811e281-
28base0x7039e0debugstack0x7037600x811e281-
29base0x7039e0debugtimestamp0x7028300x811e280-
30base0x7039e0error0x7029700x811e28?-
31base0x7039e0gcinfo0x7032000x811e282-
32base0x7039e0geterrorhandler0x7029500x811e281-
33base0x7039e0getfenv0x702ac00x811e281-
34base0x7039e0getglobal0x7027b00x811e281-
35base0x7039e0getmetatable0x7029f00x811e281-
36base0x7039e0ipairs0x702cd00x811e28?-
37base0x7039e0loadstring0x7032800x811e281|2-
38base0x7039e0next0x702c900x811e281|2-
39base0x7039e0pairs0x702da00x811e283-
40base0x7039e0pcall0x7032f00x811e28?-
41base0x7039e0rawequal0x7030f00x811e281-
42base0x7039e0rawget0x7031300x811e281-
43base0x7039e0rawset0x7031600x811e281-
44base0x7039e0seterrorhandler0x7029000x811e280-
45base0x7039e0setfenv0x702be00x811e280-
46base0x7039e0setglobal0x7027700x811e280-
47base0x7039e0setmetatable0x702a400x811e281-
48base0x7039e0time0x7035a00x811e281-
49base0x7039e0tonumber0x702e300x811e281-
50base0x7039e0tostring0x702f400x811e281-
51base0x7039e0type0x702df00x811e281-
52base0x7039e0unpack0x7030a00x811e28?-
53base0x7039e0xpcall0x7033400x811e28?-
54shared0x51bb20AppendToFile0x515f900x8503f4?-
55shared0x51bb20ConsoleExec0x515f100x8503f40-
56shared0x51bb20DeleteFile0x515f700x8503f4?-
57shared0x51bb20GetGameTime0x515ee00x8503f42-
58shared0x51bb20GetTime0x515ea00x8503f41-
59shared0x51bb20ReadFile0x515f500x8503f4?-
60shared0x706350CreateFont0x7060400x872e741-
61shared0x706350CreateFrame0x7060b00x872e741-
62shared0x706350EnumerateFrames0x705f600x872e741-
63shared0x706350GetNumFrames0x705f000x872e741-
64glue0x46ddf0AcceptContest0x46d1500x8373b80-
65glue0x46ddf0AcceptEULA0x46d0700x8373b80-
66glue0x46ddf0AcceptScanning0x46d0e00x8373b80-
67glue0x46ddf0AcceptTOS0x46d0000x8373b80-
68glue0x46ddf0ContestAccepted0x46d1200x8373b81-
69glue0x46ddf0DefaultServerLogin0x46d1600x8373b80-
70glue0x46ddf0DisableAddOn0x46d8a00x8373b800x48e760shape-differs: argc 2 here, 1 in-game (0x48e760)
71glue0x46ddf0DisableAllAddOns0x46d9400x8373b800x48e7f0shape-differs: argc 1 here, 0 in-game (0x48e7f0)
72glue0x46ddf0DisconnectFromServer0x46d3400x8373b80-
73glue0x46ddf0EULAAccepted0x46d0400x8373b81-
74glue0x46ddf0EnableAddOn0x46d7b00x8373b800x48e690shape-differs: argc 2 here, 1 in-game (0x48e690)
75glue0x46ddf0EnableAllAddOns0x46d8500x8373b800x48e720shape-differs: argc 1 here, 0 in-game (0x48e720)
76glue0x46ddf0EnterWorld0x46d3c00x8373b80-
77glue0x46ddf0GetAddOnDependencies0x46d6500x8373b8?0x48e5e0
78glue0x46ddf0GetAddOnEnableState0x46d6f00x8373b81-
79glue0x46ddf0GetAddOnInfo0x46d4600x8373b880x48e390shape-differs: arity 8 here, 7 in-game (0x48e390)
80glue0x46ddf0GetBillingPlan0x46dc400x8373b83-
81glue0x46ddf0GetBillingTimeRemaining0x46dbf00x8373b81-
82glue0x46ddf0GetBillingTimeRested0x46dcf00x8373b810x48ec50
83glue0x46ddf0GetBuildInfo0x46cd700x8373b850x4884a0shape-differs: arity 5 here, 3 in-game (0x4884a0)
84glue0x46ddf0GetCursorPosition0x46dad00x8373b820x48b820
85glue0x46ddf0GetLocale0x46ce400x8373b810x48d8b0
86glue0x46ddf0GetMovieResolution0x46cf100x8373b81-
87glue0x46ddf0GetMovieSubtitles0x46dbc00x8373b81-
88glue0x46ddf0GetNumAddOns0x46d4200x8373b810x48e350
89glue0x46ddf0GetSavedAccountName0x46cdd00x8373b81-
90glue0x46ddf0GetScreenHeight0x46dd800x8373b810x48b4d0
91glue0x46ddf0GetScreenWidth0x46dd300x8373b810x48b480
92glue0x46ddf0GetScriptMemory0x46da100x8373b81-
93glue0x46ddf0GetServerName0x46d2800x8373b83-
94glue0x46ddf0HideCursor0x46db700x8373b80-
95glue0x46ddf0IsAddonVersionCheckEnabled0x46d9b00x8373b81-
96glue0x46ddf0IsConnectedToServer0x46d3800x8373b81-
97glue0x46ddf0LaunchAddOnURL0x46d5e00x8373b80-
98glue0x46ddf0LaunchURL0x46cf600x8373b80-
99glue0x46ddf0PINEntered0x46d1c00x8373b80-
100glue0x46ddf0PatchDownloadApply0x46d4100x8373b80-
101glue0x46ddf0PatchDownloadCancel0x46d4000x8373b80-
102glue0x46ddf0PatchDownloadProgress0x46d3e00x8373b81-
103glue0x46ddf0PlayCreditsMusic0x46cef00x8373b80-
104glue0x46ddf0PlayGlueMusic0x46ceb00x8373b80-
105glue0x46ddf0QuitGame0x46cea00x8373b80-
106glue0x46ddf0ResetAddOns0x46d9a00x8373b80-
107glue0x46ddf0SaveAddOns0x46d9900x8373b80-
108glue0x46ddf0ScanningAccepted0x46d0b00x8373b81-
109glue0x46ddf0Screenshot0x46d3d00x8373b800x4893d0
110glue0x46ddf0SetAddonVersionCheck0x46d9e00x8373b80-
111glue0x46ddf0SetCurrentScreen0x46ce600x8373b80-
112glue0x46ddf0SetMovieSubtitles0x46db800x8373b80-
113glue0x46ddf0SetSavedAccountName0x46cdf00x8373b80-
114glue0x46ddf0SetScriptMemory0x46da500x8373b80-
115glue0x46ddf0ShowContestNotice0x46d0f00x8373b81-
116glue0x46ddf0ShowCursor0x46db600x8373b80-
117glue0x46ddf0ShowEULANotice0x46d0100x8373b81-
118glue0x46ddf0ShowScanningNotice0x46d0800x8373b81-
119glue0x46ddf0ShowTOSNotice0x46cfa00x8373b81-
120glue0x46ddf0StatusDialogClick0x46d2700x8373b80-
121glue0x46ddf0StopGlueMusic0x46cf000x8373b80-
122glue0x46ddf0SurveyNotificationDone0x46ddd00x8373b81-
123glue0x46ddf0TOSAccepted0x46cfd00x8373b81-
124glue0x4736c0DeleteCharacter0x4734c00x8385780-
125glue0x4736c0GetCharacterInfo0x4732a00x8385788-
126glue0x4736c0GetCharacterListUpdate0x4732700x8385780-
127glue0x4736c0GetCharacterSelectFacing0x4736500x8385781-
128glue0x4736c0GetNumCharacters0x4732800x8385781-
129glue0x4736c0RenameCharacter0x4735200x8385780|1-
130glue0x4736c0SelectCharacter0x4734700x8385780-
131glue0x4736c0SetCharSelectBackground0x4732300x8385780-
132glue0x4736c0SetCharSelectModelFrame0x4731c00x8385780-
133glue0x4736c0SetCharacterSelectFacing0x4736700x8385781-
134glue0x4736c0UpdateSelectionCustomizationScene0x4736400x8385780-
135glue0x471a20CreateCharacter0x4719e00x8380f80-
136glue0x471a20CycleCharCustomization0x4718900x8380f80-
137glue0x471a20GetAvailableRaces0x4715200x8380f8?-
138glue0x471a20GetCharacterCreateFacing0x4719100x8380f81-
139glue0x471a20GetClassesForRace0x4715600x8380f8?-
140glue0x471a20GetFacialHairCustomization0x4716200x8380f81-
141glue0x471a20GetFactionForRace0x4714500x8380f82-
142glue0x471a20GetHairCustomization0x4715d00x8380f81-
143glue0x471a20GetNameForRace0x4713f00x8380f82-
144glue0x471a20GetRandomName0x4719800x8380f81-
145glue0x471a20GetSelectedClass0x4716e00x8380f82-
146glue0x471a20GetSelectedRace0x4716800x8380f81-
147glue0x471a20GetSelectedSex0x4716b00x8380f81-
148glue0x471a20HasCharCustomization0x4718200x8380f81-
149glue0x471a20RandomizeCharCustomization0x4719000x8380f80-
150glue0x471a20ResetCharCustomize0x4713e00x8380f80-
151glue0x471a20SetCharCustomizeBackground0x4713a00x8380f80-
152glue0x471a20SetCharCustomizeFrame0x4713300x8380f80-
153glue0x471a20SetCharacterCreateFacing0x4719300x8380f81-
154glue0x471a20SetSelectedClass0x4717c00x8380f80-
155glue0x471a20SetSelectedRace0x4717400x8380f80-
156glue0x471a20SetSelectedSex0x4717800x8380f80-
157glue0x471a20UpdateCustomizationBackground0x4718000x8380f80-
158glue0x471a20UpdateCustomizationScene0x4718100x8380f80-
159glue0x46f480CancelRealmListQuery0x46ed100x837ea00-
160glue0x46f480ChangeRealm0x46f0e00x837ea00-
161glue0x46f480GetNumRealms0x46ed300x837ea01-
162glue0x46f480GetRealmCategories0x46f1f00x837ea0?-
163glue0x46f480GetRealmInfo0x46ee400x837ea08-
164glue0x46f480GetSelectedCategory0x46f4000x837ea01-
165glue0x46f480RealmListDialogCancelled0x46ed200x837ea00-
166glue0x46f480RequestRealmList0x46ecf00x837ea00-
167glue0x46f480SetPreferredInfo0x46f2c00x837ea00-
168glue0x46f480SortRealms0x46f3300x837ea00-
169shared0x4587f0PlayMusic0x4587200x835a500-
170shared0x4587f0PlaySound0x4586d00x835a500-
171shared0x4587f0PlaySoundFile0x4587800x835a501-
172shared0x4587f0StopMusic0x4587700x835a500-
173base0x7039e0foreach0x7fb5900x822d400|1-
174base0x7039e0foreachi0x7fb4e00x822d400|1-
175base0x7039e0getn0x7fb6300x822d401-
176base0x7039e0tinsert0x7fb6b00x822d400-
177base0x7039e0tremove0x7fb7700x822d400|1-
178base0x7039e0sort0x7fb9200x822d400-
179base0x7039e0abs0x7fade00x822c601-
180base0x7039e0acoslua-?-
181base0x7039e0asinlua-?-
182base0x7039e0atanlua-?-
183base0x7039e0atan2lua-?-
184base0x7039e0ceil0x7faf700x822c601-
185base0x7039e0coslua-?-
186base0x7039e0deg0x7fb1400x822c601-
187base0x7039e0exp0x7fb1000x822c601-
188base0x7039e0floor0x7fafa00x822c601-
189base0x7039e0frexp0x7fb1a00x822c602-
190base0x7039e0ldexp0x7fb1f00x822c601-
191base0x7039e0log0x7fb0a00x822c601-
192base0x7039e0log100x7fb0d00x822c601-
193base0x7039e0max0x7fb2a00x822c601-
194base0x7039e0min0x7fb2300x822c601-
195base0x7039e0mod0x7fafd00x822c601-
196base0x7039e0rad0x7fb1700x822c601-
197base0x7039e0random0x7fb3100x822c601-
198base0x7039e0randomseed0x7fb4500x822c600-
199base0x7039e0sinlua-?-
200base0x7039e0sqrt0x7fb0200x822c601-
201base0x7039e0tanlua-?-
202base0x7039e0strbyte0x7fc2100x822d880|1-
203base0x7039e0strchar0x7fc2800x822d881-
204base0x7039e0strfind0x7fc3b00x822d88?-
205base0x7039e0format0x7fd3d00x822d881-
206base0x7039e0gsub0x7fd0e00x822d882-
207base0x7039e0strlen0x7fbcf00x822d881-
208base0x7039e0strlower0x7fbdf00x822d881-
209base0x7039e0strrep0x7fc1a00x822d881-
210base0x7039e0strsub0x7fbd300x822d881-
211base0x7039e0strupper0x7fc0c00x822d881-
212base0x7039e0__pow0x7fb050-1-