FableCSharp · human overview
Skimmable status for the evidence-first C# / Vulkan reimplementation of Fable: The Lost Chapters. Not a rewrite of the evidence ledgers. If a number, address, or “done” claim is not in those files or in tests/code, treat it as UNREAD.
Same text: docs/status/README.md. Live: https://samg-coder.github.io/FableCSharp/docs/status/index.html (or open this file locally).
| This page | The ledgers |
|---|---|
| Skim what’s locked and what’s next | Authoritative tables, addresses, tests |
| Sequenced by dependency | Do not copy their raw tables here |
StartOakValeWest / Q_NewOakValeIntro /
HerosOldHouse / CAM_OVIF_SHOT2) so
CS_OAKVALE_INTRO_FATHER can run on a real world clock.
Snapshot: 2026-08-24 morning AEST (~8am), previous snapshot
runtime HEAD 4f1819d via PR #54 merge
480f0f9 (~8:13am AEST 21 Aug 2026), runtime HEAD
12118bd (ExeIndex evidence exporters + persist
Layer recover, scene-capture tool /
retain-first-parsed-map, authored intro dialogue/audio
+ kid spawn on StartOakVale, UpdateAtClock + live actor
MeshDraw refresh, intro-father parent continuation +
sortDraws:false + present semaphore, in-game PlayAVI
skip, QuestLifecycleRuntime / S_QNOVI post-cutscene
map).
Just locked: 7 runtime commits since 4f1819d.
Headline locks in order: ExeIndex evidence exporters +
persist Layer recover (951b7f2); scene-capture
tool / retain-first-parsed-map (fa79419);
authored intro dialogue/audio + kid spawn on
StartOakVale (e004fe3); UpdateAtClock + live
actor MeshDraw refresh (b6923a3); intro-father
parent continuation + sortDraws:false + present
semaphore (a02ab21); in-game PlayAVI skip
(41e97c9); QuestLifecycleRuntime / S_QNOVI
post-cutscene map (12118bd).
Ignore merge 480f0f9, docs-only freeze
1f49729, and gitignore/hide-console
56f5f93. CSS unchanged. Freeze at
12118bd. Do not include any later runtime if
master moves. dest still invented 512,384,512,384;
NativeDestTupleUnread stays true; DIP
(0,0) stand-in;
DisplayFlushShouldDip(0, 0) always false;
009DA9F0 flush is still Note-only
(DisplayFlushQueueIsNoteOnly). Point dest still
skips DIPUP (00BADB36). Type4 apply is still
host dest AABB hover, not recovered current-inner
0055CB10. leave #14 open.
FrontendPresentBodyIsLive means
Clear/Begin/recovered DIPUP/Present when Device is set —
it does not dest-lock #14. a02ab21 does not
lock #14 dest/Present. e004fe3
SetFrontendBatch can record world verts under
frontend — leftover already #14, do not file a new
issue. Frontend
0042DF9E / 00595222 still
Note-only; New Game keyboard N/Enter stays leftover.
FrontendDisplayCursorRan stays false.
Startup AVI client Present is blit-only
006286F0 MATCH
(Draw(default) / playAviOnly). Remaining
leftover #20 is Game-stage: PumpGame still
walks 00435530 because 006286F0
does not own that pump. 41e97c9 is in-game
skip
(Game_PlayAVI_006286F0_polls_the_retail_skip_scan).
Startup still Draw(default). Does not lock
#20. Do not treat
FABLE_SKIP_STARTUP_AVI as a 3D Draw fix.
leave #20 open. dest 0044C72B as
[01232C24+8] is not rdata-locked. leave #42
open. New Profile dest/hit is host stand-in
(TryChromeHit invents type-16/37 hit;
GRAPHIC-name AABB is also host).
NativeDestTupleUnread stays true. leave
#48 open.
LoadGlobalThingsHostBreaksAfterFirstProx=false
/ retain-first-parsed-map. 151-slot census is not locked
004FDBC0 NewMap 1. leave #50 open.
dest invented 512,384,512,384. leave #36 open.
Exclusive-walk leftover is STALE (tracker already done).
Skip VAs 0052F180/0052F1D0 stay
named constants (SkipVtblsAreMethodCalls == false);
that is not exclusive-walk. leave #14 and #20 open
(also leave #36 #42 #48 #50 open). Also leave leftover
#4 #5 #9 #12 #15 #17 #19 open. Do not reopen #8. Do
not reopen #46. Master is still
proving boot / world clock, not animation.
README’s long-term priority list still starts with animation; that
list is not the current phase.
Statuses are the project’s own words:
| Word | Meaning here |
|---|---|
| PROVEN | Locked from exe / assets / tests |
| PARTIAL | Script-layer or host path recovered; apply or runtime body not |
| UNREAD | Not filled with a look-better guess |
| DISPROVEN | A previous assumption, recorded so it does not return |
| TEMPORARY | Stand-in classified as such (often a D3D default) |
Parse / dispatch / return ≠ apply ≠ runtime. A finished fixture is script-layer apply, not a mesh or UI body.
This is not a “finish every UNREAD command” roadmap.
| Ledger | What it owns |
|---|---|
| docs/PARITY.md | Worked / DISPROVEN / Open |
| docs/runtime/COMMAND_COVERAGE.md | Token counts and per-verb overall |
| docs/runtime/COMMAND_MAP.generated.md | Generated parse / dispatch / apply / runtime |
| docs/runtime/COMMAND_MAP.md | Hand map + StartNewGame bindings |
| docs/runtime/FIXTURE_COMMAND_AUDIT.md | Script-layer fixture outcomes |
| docs/runtime/FORWARD_TREE.md | PE → WinMain → no-save New Game function tree |
| docs/render/DX9_VULKAN_PARITY.md | DX9 → Vulkan matrix |
| docs/render/FIRST_SCENE_CONTRACT.md | First-scene submit contract |
| docs/render/FIRST_SCENE_AUDIT.md | Live-path classification + leftover UNREAD |
| docs/render/FIRST_SCENE_WORLD_PARITY.md | World/space/visibility checklist |
Boot/clock facts below are from EngineLifecycle /
EngineLifecycleTests (not yet copied into
PARITY.md).
From COMMAND_COVERAGE.md
(generated from exe token list 0x012C1500–0x012C2C00 +
ScriptCommandMap):
| Metric | Count |
|---|---|
| Native command tokens | 185 |
| Recovered dispatch / return | 156 |
| Recovered apply | 95 |
| Implemented runtime | 13 |
| UNREAD tokens | 29 |
The 13 PROVEN overall runtimes are
FadeOut / FadeIn (global and entity),
SetTime, WaitFlag, SetFlag,
PlayAVI, GamePause, DoOneFrame,
CameraPause, ScriptFrame,
DoScriptFrame.
PlayAnimation apply is now
PROVEN; runtime still
PARTIAL.
FirstSeenPlayAnimationAppliesPose=false.
Type-6 XSEQ first-key sample drives PaletteForPose
48-byte locals (00A999B0 /
00AA4680 / 00A4C5E0). Time interpolation
00AA0090 unread.
WaitPlayAnimation apply is now
PROVEN; leftover is vtbl+104.
Do not grind the 29 UNREAD tokens (Crowd*, debug,
LadyGreyIntro, boss fights, …) as a phase.
Sequenced as the engine actually runs. Wrong assumptions named only when a ledger or test already records them.
| Item | Status | Where |
|---|---|---|
| TLC data formats (WLD, WAD/BBB, LEV/TNG, QST, bins, C3D, STB, …) | PROVEN | PARITY.md Worked |
New Game view is StartOakValeWest / HerosOldHouse / CAM_OVIF_SHOT2, not Lookout |
PROVEN | FIRST_SCENE_CONTRACT.md, WorldSceneTests |
| Adult Lookout is not the first-scene camera | PROVEN | FIRST_SCENE_WORLD_PARITY.md |
TNG local vs STB WLD; STB − (MapX, MapY) meeting space |
PROVEN | same |
House 6909/6911, kid 4300 bind-pose, landscape strips, sky else-path 0x2000 |
PROVEN | contract + world parity |
DX9 → Vulkan first-scene submit (layers 0x4 → 0x40 → 0x20 → 0x100 → 0x2000) |
PROVEN / EQUIVALENT | DX9_VULKAN_PARITY.md; 0x100 drain 676bf63 |
T(cam) on host world-space STB verts |
DISPROVEN | world parity; submit uses identity W |
Invented stars.dat billboards / 1 m landscape fill |
DISPROVEN | PARITY / world parity |
S_QNOVI + NOVI_LiveFather → CS_OAKVALE_INTRO_FATHER |
PROVEN | COMMAND_MAP.md, PARITY |
00DB8680 starts the intro |
DISPROVEN | start is 00DB86B0 (PARITY) |
Intro fixture CS_OAKVALE_INTRO_FATHER |
Finished def+60 (script layer) | FIXTURE_COMMAND_AUDIT.md |
Fade / PlayAVI / DoScriptFrame / UseCamera / GamePause at script layer |
PROVEN | command map + PARITY 0b |
return is interpreter stop |
DISPROVEN | it is a RemoveExtras named-arg |
Recent commits (951b7f2 … 12118bd) lock
ExeIndex evidence exporters + persist Layer recover,
scene-capture tool / retain-first-parsed-map, authored
intro dialogue/audio + kid spawn on StartOakVale,
UpdateAtClock + live actor MeshDraw refresh,
intro-father parent continuation + sortDraws:false +
present semaphore, in-game PlayAVI skip, and
QuestLifecycleRuntime / S_QNOVI post-cutscene map.
Previous snapshot
4f1819d via PR #54 480f0f9
(~8:13am AEST 21 Aug 2026).
Just locked this batch: ExeIndex evidence exporters +
persist Layer recover, scene-capture tool /
retain-first-parsed-map, authored intro dialogue/audio
+ kid spawn on StartOakVale, UpdateAtClock + live
actor MeshDraw refresh, intro-father parent
continuation + sortDraws:false + present semaphore,
in-game PlayAVI skip, QuestLifecycleRuntime / S_QNOVI
post-cutscene map. MATCH for named-stage Add Def Class is still
Note-only + *DefClassRegistered flag, not a
live constructed object. dest 0044C72B as
[01232C24+8] is not rdata-locked. leave #42
open. dest still invented 512,384,512,384;
NativeDestTupleUnread stays true; DIP
(0,0) stand-in;
DisplayFlushShouldDip(0, 0) always false;
009DA9F0 flush is still Note-only
(DisplayFlushQueueIsNoteOnly). Point dest
still skips DIPUP (00BADB36). Type4 apply is
still host dest AABB hover, not recovered current-inner
0055CB10. leave #14 open.
FrontendPresentBodyIsLive means
Clear/Begin/recovered DIPUP/Present when Device is set —
it does not dest-lock #14. a02ab21 does not
lock #14 dest/Present. e004fe3
SetFrontendBatch can record world verts under
frontend — leftover already #14, do not file a new
issue. Frontend
0042DF9E / 00595222 still
Note-only; New Game keyboard N/Enter stays leftover.
FrontendDisplayCursorRan stays false.
Startup AVI client Present is blit-only
006286F0 MATCH
(Draw(default) / playAviOnly). Remaining
leftover #20 is Game-stage: PumpGame still
walks 00435530 because 006286F0
does not own that pump. 41e97c9 is in-game
skip
(Game_PlayAVI_006286F0_polls_the_retail_skip_scan).
Startup still Draw(default). Does not lock
#20. Do not treat
FABLE_SKIP_STARTUP_AVI as a 3D Draw fix.
leave #20 open. New Profile dest/hit is host stand-in
(TryChromeHit invents type-16/37 hit;
GRAPHIC-name AABB is also host).
NativeDestTupleUnread stays true. leave
#48 open.
LoadGlobalThingsHostBreaksAfterFirstProx=false
/ retain-first-parsed-map. 151-slot census is not locked
004FDBC0 NewMap 1. leave #50 open. dest
invented 512,384,512,384. leave #36
open. Exclusive-walk leftover is STALE (tracker already
done). Skip VAs 0052F180 /
0052F1D0 stay named constants
(SkipVtblsAreMethodCalls == false); that is
not exclusive-walk. Do not invent DrawContainerWalk calls
of those VAs. Do not file a new leftover for that unread
gap. #5 grok-goal dump still written — do not re-file.
Host NAudio FrontendAudioPlayer (Intro.ogg /
Frontend.lug CS_GUI_1/2) does not lock leftover #15
(Init Sound 00417A58) or leftover #9
(WmvPlayer IBasicAudio).
3D stays Compatibility host.Draw after Leave.
F2 fly is Game-only. WM_CHAR is type 15; Press Start /
New Profile / New Game are LMB type 4/6. Type-10 packet
is widget +352, not MessageId. leave #14 and #20 open
(also leave #36 #42 #48 #50 open). Also leave leftover
#4 #5 #9 #12 #15 #17 #19 open. Do not reopen #8. Do
not reopen #46. CSS unchanged.
| Item | Status | Evidence |
|---|---|---|
Launch from PE 00401067 / WinMain 00403480 / bootstrap 00402510 |
PROVEN | EngineLifecycleTests.Pe_entry_is_crt_not_new_game |
New Game is leave-frontend → FinalAlbion.wld → Init Game 004184BD |
PROVEN | same + New_game_is_leave_frontend_then_FinalAlbion_wld |
Init World Map 005066E0; Load .wld 00507C30 token switch |
PROVEN | Load_wld_is_00507C30_not_00DBDE40 |
Region graph 00506D40 / 00828710 |
PROVEN | Install_banks_and_startup_videos_exist |
Create Players: 5 × 0x22C slots, 4 active — not hero_swap_*.tng |
PROVEN | CreatePlayers_is_five_0x22C_slots_not_hero_swap. Runs at the named 004166A8 stage (b8a2b21). Hero swap names hero_swap_1.tng…_4.tng belong on the player owner at game+28 (4a03969), not here. |
Load GTNG 0050959F stem+.gtng; TLC missing → skip |
PROVEN | same install test (Gtng null, “missing”) |
Global things: BSS [0x13B8609]=0 → per-map .tng 004FDBC0; flag → .gtg 004FE2A0 |
PROVEN | Gtng_is_stem_gtng_gtg_is_004FE2A0_single_file |
Current region index is WorldMap+156 (004FB150); ctor 0 is dummy |
PROVEN | Game_pump_is_004189C2_not_00DBDE40 |
First 004189C2 pump does not SetRegionAsLoaded |
PROVEN | install test |
No-save enqueue 00501450 → 00500540(1,0,0) LookoutPoint (native index 1) |
PROVEN | first i=1; then i=2..141 |
00501450 is only 00500540(1,0,0) |
DISPROVEN | loops all i; last +156=141 Filler_NorthernWastes_02; restore (0,0,1) no pump |
005198B0 releases the 0048D400 list |
DISPROVEN | second collector: +145 then CTCActionUseScriptedHook |
00501450 E8/E9/imm/vtbl |
UNREAD | 0 hits; not 004162B5 / 00418289 / 004189C2 (0049D9E0 is ret) |
| Live client dummy → first playable region | HOST BRIDGE | After the first dummy pump, Program calls EnsureFirstPlayableRegionLoaded: persist uses 00487C20; no-save uses the proven first WLD slot through 00500540 / 006C2170. This deliberately does not claim the unread native caller and does not run the 141-region 00501450 catalogue walk. It fixes the post-New-Game black frame without restoring the allocation spike. Locked by Live_client_after_New_Game_loads_first_playable_region_without_catalogue_walk. |
| Host seeds type-1 tick on InitGame | DISPROVEN | first-seen game+164 empty; 0041726D skips |
Inner loop 009F8BA0 before 004162B5 |
PROVEN | [game+52]==0; IAT 0x14404B4; +90556 |
00416E78 skipped when WorldFrame<=1 |
DISPROVEN | prefix always runs; only 004457F0 is gated |
Persist PlayerRegionName 00487C20 / 00449E60 loads named region (e.g. StartOakVale = 4) |
PROVEN | Persist_PlayerRegionName_is_00487C20_not_new_game |
SetRegionAsLoaded 004FC8A0 writes +156, then 00B42750 mode 1 |
DISPROVEN | 004FC8A0 is MiniMap only. 00B428E0 is 004A1840 vtbl+208 |
004FC8A0 calls 005064C0 / 00B428E0 |
DISPROVEN | 004FC8A0 is +156/00437CE0/0082BA00. 005064C0 is vtbl+88 before it. SetRegionAsLoaded_004FC8A0_is_minimap_after_005064C0 |
00B428E0 after 004AFC00 |
DISPROVEN | 00500540 tail is dtor/ret 12. Caller is 00B23DC0 from 004A1840 004A1BD3 |
004A1840 WLD before Startup WAD |
DISPROVEN | 00507C30 is world vtbl+8 0049E220 after WAD; 006C20A0 empty; Generate Offline skipped |
First-seen 00B428E0 opens Lookout STB |
DISPROVEN | arg is Data\Levels\FinalAlbion.stb; file absent; 00B42750 miss |
OpenStaticMap 00B42530 STB height + compiled .lev (v25 / 0x1904) |
PROVEN | 7869e8e / install test |
00418289 / 004AEBA0 gate player/world on [player+9826]; 00417001 still skips camera body while WorldFrame<=1 |
PROVEN | 7cc44c0 / Update_00418289_* / Render_00417001_* |
WorldFrame inc at 004A5E10 via 0049DFB0 type-1 (00629270 / 004A5A40) |
PROVEN | ced722f / WorldFrame_004A5E10_unblocks_004164E0 |
Camera body 004164E0 steps arg/15 when [0x13B8630]>0 |
PROVEN | 6d7545a |
0041707E interpolates when catchup ticks are 0 (default New Game) |
PROVEN | c3be891 |
006B4900 world+24 slots; 006B42F0 lerps +6296/+6312/+6328 into ScriptedCamera |
PROVEN | 6e1ff8e / World_camera_006B4900_slots_lerp_into_ScriptedCamera |
Leave Press Start: 0059A238 msg 0xE5 → 00599D5C empty 005955AB → 00595845 → 00596917 slot 0x17 NEW_PROFILE |
PROVEN | Frontend_0059A238_msg_E5_empty_005955AB_is_00595845_then_00596917. Type-4 posts type-10 +352 only (48133e9). Host LMB edge queues Type4 (5dcc1fc). Host Return quarantined as accept. Return→msg 15 from Press Start DISPROVEN. Type-10 0xE5 is the 00598A1C attach write (00598EE6 is the mov inside it) → widget+352 (61e430f). #37 already locked. Later 59fde69 writes 0xE5 through slot 0x14 0059B5D7 then vtbl+284 0054E4F0. |
New Profile accept: 00851770 seeds 0x122DE80 "Default"; msg 0x126 → 00851920 → 0059697A MAIN_MENU_NO_CONTINUE |
PROVEN | Frontend_00851770_seeds_Default_then_0x126_is_0059697A_main_menu. Persist CRC 0x53C644E4 as MessageId (def+228 via 0055B040 / 00632500): type-38 UI_ACCEPT_NEW_PROFILE stores 0x126 (f38f9f9). Action 26 posts widget+372 from def+224 (0 first-seen). LMB-up action 28 posts +228 after arm (48133e9). |
Frontend New Game click: 0059A238 msg 15 → [retail+41]=1 → Leave 0042F2A2 |
PROVEN | 64a2e14 / Frontend_00595582_new_game_message_leaves_without_RequestNewGame. Type-11 UI_FRONTEND_BUTTON_NEW_GAME stores 15 at +228 (f38f9f9). Action 26 posts empty +224 first-seen (9e94ef9). LMB-up action 28 posts +228 after arm (48133e9). |
Menu built at 00595B24 (UI_TEXT_NEW_GAME id=0); not 00DBDE40 |
PROVEN | same |
Frontend frame 0042EC7C: input 0042E3EE → fill → draw 0042DF9E (BeginScene / UI vtbl+8 / EndScene / Present) |
PROVEN | 0d8f5e5 / Frontend_0042EC7C_frame_is_input_then_0042DF9E_Present |
Same Present as PlayAVI (009BEEB0); extra .wmv after draw skipped (00595A03 always 0) |
PROVEN | same |
006C2170 Loading objects → 00522720 / 00521AE0 current-map .tng (LookoutPoint on no-save) |
PROVEN | 1ebece6 / Loading_objects_00521AE0_loads_LookoutPoint_tng |
0051FD80 Load Single Thing: no-save LookoutPoint TNG has no PlayerCreature; HOLY_SITE_PLAYER_START GuildArrivalHSP → 00489D40 / 006AC910 inserts PlayerCreature at that pose. RHSet axes later (ff808b1); #18 done |
PROVEN | 8f89aad / Load_single_thing_0051FD80_spawns_hero_at_LookoutPoint (refined by e0e0511) |
No-save hero is 00DBDE40 / CREATURE_HERO_CHILD / StartOakVale |
DISPROVEN | same |
004AE940 Create Players writes [player+9826]=1 because 0099A350 always returns 1 (al=1) |
PROVEN | ea479d2 / CreatePlayers_004AE940_sets_plus9826_via_0099A350 |
+9826 stays 0 after Create Players (first 004162B5 skips world) |
DISPROVEN | same; first pump takes player/world/vtbl+24; WorldFrame increments |
No-save first rendered scene is LookoutPoint RegionThings + hero camera 006B3FF0; client BindLifecycleFirstRegion skips if map name contains StartOakVale |
PROVEN | fe6a11e / same LookoutPoint test + client early return |
00662880 / 004CA010 insert binds CREATURE_HERO mesh 4299 after the PLAYER_HERO miss chain |
PROVEN | e0e0511 / Load_single_thing_0051FD80_spawns_hero_at_LookoutPoint (HeroMeshId=4299) |
0049F180 after characters: Init GUI 0043A380 PLAYER_GUI_PC |
PROVEN | 21491ac / same test (PlayerGuiReady); bind still #17 / PARTIAL (Note-only) |
00403079 / 009C0E50 display defaults 1024×768, title TEXT_GUI_WINDOW_TITLE |
PROVEN | 48a879ac / Window_00403079_defaults_1024x768_and_title. Client Size = BackBufferWidth/Height. DefaultVulkan 1600×900 DISPROVEN (issue #8 done). |
004B4260 activates QST AddQuest TRUE as world+172 (FinalAlbion then GlobalQuests, not WLD START_INITIAL_QUESTS) |
PROVEN | 5dcc1fc / Init_quests_004B4260_activates_wld_initial_list (QuestsInitDone=true). 00507C30 has no START_INITIAL_QUESTS case. |
00CB5AD0 starts QuestFactoryTable factory scripts (not S_QNOVI) |
PROVEN | 48a879ac / Activate_quests_00CB5AD0_starts_factory_scripts. QM+44 (004B2850 / 004B00C0) gates activate before 00CB5AD0 (f38f9f9). |
0042E3EE type/key events dispatch 0041E5F2 actions 0–5 / 20–21 (not WASD) |
PROVEN | e7b3c76 / Input_0042E3EE_dispatches_0041E5F2_actions. 0055CB10 records actions; no recovered player-move listener. Not WASD. Host LMB edge queues Type4 (5dcc1fc). New Game keyboard N/Enter leftover still stands (leave #14 open). |
009BEF80 SetViewport vtbl+188 full backbuffer 1024×768 MinZ 0 MaxZ 1 |
PROVEN | 12e0d75 / Window_00403079_defaults_1024x768_and_title + Game_00435530_Presents_009BEEB0_and_pumps_input |
Game 00435530 / 00435F50 Present is the same 009BEEB0 as frontend and PlayAVI |
PROVEN | 12e0d75 / Game_00435530_Presents_009BEEB0_and_pumps_input. 00417001 does not Present; it calls 00435F70 → 00435530 after WorldFrame>1. Client Draw is that Present, not a second swapchain. |
00435530 flushes ScenePasses via 009DA9F0(1) DIP vtbl+332 (bits 0x4 → 0x40 → 0x20 → 0x100 → 0x2000) |
PROVEN | be8545e / 676bf63 / same Game_00435530 test (SubmittedLayerBits). Order BeginScene, Clear, PlayerOverlay 00435000→00639E40, PlayerInterface 00435070, Flush2D 009D9C80, FlushLayers 009DA9F0(1), EndScene, Present. Overlay/interface still Note. |
00CDC070 binds Q_SunnyvaleMaster persist slots via 004045C0 bool / 00410BE0 int |
PROVEN | a708e60 / Activate_quests_00CB5AD0_starts_factory_scripts. PersistTable.Sunnyvale length 38, defaults 00CDBA10 zeros. BindBool 004045C0, BindInt 00410BE0, SunnyvaleBind 00CDC070. |
00416E78 vtbl+24 after WorldFrame>1 pumps [game+32].vtbl+4 00446A30 player-interface listeners (0123758C / 0041649C) |
PROVEN | 012dccad / Player_interface_00446A30_pumps_listeners_after_WorldFrame. Init Player Interface 004473A0 alloc 0x898 vtbl 01231BDC stored at game+32. Then 004457F0 [+2196]=0, poll 00446330 / 009F4ED0. Skip device 2 / key 15 / type 0. Listeners vtbl+32 accept 00687DB0, vtbl+16 apply 00687FD0 (0123758C). Zero E8 of 00446A30 itself; caller is 00416E78. After hit: 0041649C unless paused. Not the retail frontend 0042E3EE walk. Not 00DBDE40. |
0123758C ActionInputListener: accept 00687DB0, apply 00687FD0; factory 00488D20. RecordingInputListener is gone |
PROVEN | 6b02b3b / Player_interface_00446A30_pumps_listeners_after_WorldFrame |
After 00446A30 hit: 0041649C unless paused; action==2 queues 009F1650. Default KeyMove3 DeliveredCount=0 until owner ResultSelect (recovered) |
PROVEN | 6b02b3b / Player_apply_0041649C_queues_009F1650_on_action_2 |
WorldGeometry.ApplyActorPositions consumes 006A9960 dest via World.Positions. Father still NOVI_LiveFather via 00DB86B0. Not a renderer hack |
PROVEN | 666df8f / WalkTo_writes_destination_and_entity_task |
PlayAnimation apply 004C7470 / 0070D580 (vtbl+72 walk; +68 00686920 accept; 00662A00 table; 0070C050+0070D580 inner) |
PROVEN | apply f778853. XSEQ first-key PaletteForPose (00A999B0/00AA4680/00A4C5E0) / XSeqFormatTests. Runtime still PARTIAL. Time interp 00AA0090 unread. FirstSeenPlayAnimationAppliesPose=false. |
Engine primary-map draw, unload AVI, seed camera 006B3FF0 (LookoutPoint only; neighbour headers stay closed) |
PROVEN | 9c625bc / Install_banks_and_startup_videos_exist / Open_records_instances_without_c3d_or_tiles (primaryOnly) |
PlayAVI 00A3B380/00A3BC20 unload graph before the next 006286F0 slot |
PROVEN | 0ace433 / PlayAvi_rewrites_xmv_to_installed_wmv_and_blocks (WmvPlayer.ReleaseGraphFn, PlayerDtorFn, GraphReleased). Does not lock leftover #20 3D Draw. |
Client is IEngineHost; Pump owns AVI, New Game, world submit. Host only queues input and Presents |
PROVEN | d9977fb / EngineFrame_constructs_for_host_present / Unexpanded_world_is_not_a_geometry_submit / Install_banks WorldSubmitted |
Engine submit: unique primary C3Ds + primary terrain, no world triangle soup. SubmittedWorld stays unexpanded |
PROVEN | f63b741 / Install_banks_and_startup_videos_exist (SubmittedMesh verts, LookoutPoint) |
Engine submit skins PALSKIN C3Ds (TrianglesForPose / 00BD2F91) not static flatten. Hero 4299 is in SubmittedPalskinMeshIds |
PROVEN | 5cb3435 / Install_banks_and_startup_videos_exist + Kid_c3d / Wake_loop_3420. First-seen dest later file triangles (cb22533); no CPU re-skin. |
Submit before 00435530. Terrain is 00BDC2D0 AABB then 00BF4570 cells on opened patches |
PROVEN | b062c5d / TessellateVisible_uses_00bdc2d0_aabb / Install_banks. Instances stay primary-only. Later persistent cells (3dba4a1); cell DIP 0x40 only (40037b1). |
Init Graphics opens GBANK_MAIN_PC; submitted ids go on EngineFrame.Textures. Game Present waits for seed+submit |
PROVEN | 991bab2 / Install_banks SubmittedTextures. Program no longer constructs TextureLibrary. |
First-seen Lookout green is leftover c3=(0,0.125,0) × mul_x2 × oT1=(0,0), not a missing sampler |
PROVEN | Dx9VulkanShaderConstants.UnlitRgbIsC3Leftover. Do not invent world UV. |
Q_NewOakValeIntro / SHOT2 is not first no-save Present. First playable is Lookout 006B3FF0 |
PROVEN | 004162B5 dump: +20 then +28. Frontend 00595222 is the resident-slot vtbl+8 walk (7adf621 / b4a2c89). Present 0042DF9E still Note-only. |
0042DF9E walks [ui+84] vtbl+8, then 009D9C80/009DA9F0(1) twice. 00404A80 is getter 0x13B7CD8 |
PROVEN | 5657176 / 6607c1e / Frontend_0042EC7C_frame_is_input_then_0042DF9E_Present (FrontendFlushCount=2, FrontendDisplayHelperFn, FrontendDisplaySingletonVa). Walks every resident [ui+84] slot (b4a2c89 / Frontend_tick_and_draw_walk_resident_ui84_slots). Present 0042DF9E still Note-only. New Game still keyboard N/Enter (leave #14 open). |
PRESS_START is type 10 0054E3D0 vtbl 012497E4; draw 00530260 +176; 005339B0 +272=1; UI_PRESS_START_TEXT TEXT_GUI_MENU_PRESS_BUTTON |
PROVEN | Frontend_PRESS_START_is_type_10_with_text_child. Type-0 0041B800 / dest-always-0 / 0041AFA0 as the menu draw is DISPROVEN. 00595222 calls [node+20].vtbl+8. Types 5/10/12/18 are 00530260. Attach no longer Finds UI_PRESS_START_TEXT after every root (7adf621). |
Press Start sprites are frontend.big FRONTEND_TITLE_01/02_SPRITE + FORREST_1_* + mouse |
PROVEN | decoded via TextureFile (Rgba8 framed LZO); title 256×128 gold logo; forest DXT1 oak grove |
frontend.bin drives widget tree, dest, sprites and DX9-to-Vulkan submit |
PROVEN | 0d77c2c. e79f7b4 drops unused usings from FrontendWidgetFactory (cleanup of 0d77c2c). Type-10 draw is 00530260 vtbl+8 DrawsChildList (7adf621). Present 0042DF9E still Note-only. Host LMB edge queues Type4 (5dcc1fc). Host queues LMB-up as type 6 (48133e9). leave #14 and #20 open. |
Press Start dest inherits type-10 remap scale. Leftover +204/+208 only when GraphicIndex != 0. leftover+204 GraphicIndex gate recovered (76edbbd): index 0 → leftover 0. dest still invented 512,384,512,384; tests lock that dest. Type-6 leftover 16×16 is gone; leftover204 is widget +204 (0 first-seen). Type-6 dest is a point at remapped origin (512,384,512,384), not ctor 0,0,0,0. UI_TITLE_01 dest still from texture FrameWidth 256. Nonempty dest draw path is still 00BAE2D0 / 00BAD8A0. EnqueuesDisplayQueue still false. No E8 009DB700. FrontendEnqueueRan still true on nonempty dest / PRESS START. Host Notes 009DA9F0(1) [+16020] empty / skip DIP — stand-in, not a recovered queue read. DisplayFlushShouldDip(0, 0) always false |
PROVEN / leftover #36 | 1a08cc0 / later b1d6877 / 76edbbd / Type6_leftover204_is_widget_plus204_not_dest_width / Leftover204_is_0041AC20_graphic_index_not_persist_size / Press_Start_type6_dest_is_a_point / Frontend_PRESS_START_is_type_10_with_text_child / Press_Start_first_seen_dest_table_matches_0041AFA0 / Frontend_0041AC20_dest_and_0xE5_new_profile_0x126_main_menu_15 / Nonempty_dest_draws_via_00BAE2D0_not_009DB700. leave #36 open. |
Type-4 posts 0xE5 on Press Start. Host Return quarantined as accept. 0x126/15 were still injected at this SHA. CUIDef persist 00631C60 +189/+190 u8s consumed so Absolute stays aligned. Type-6 Font 26051 is a names.bin offset that resolves to ENG_ARIAL_24, not the 0054F4B0 ENG_ARIAL_16 helper |
PROVEN | db36334 |
Persist CRC 0x53C644E4 as MessageId (def+224 via 0055B040). Type-38 UI_ACCEPT_NEW_PROFILE stores 0x126; type-11 UI_FRONTEND_BUTTON_NEW_GAME stores 15. Type 4 is 00A03C80 (+40=4), not a DIK. Action 26 posts stored id. Lifecycle no longer injects 0x126/15 |
PROVEN | c180b8c / Type4_drives_lifecycle_0xE5_then_0x126_then_15. Later f38f9f9 moves MessageId to persist +228. |
QST AddQuest TRUE as world+172 (FinalAlbion then GlobalQuests, not WLD START_INITIAL_QUESTS). Host LMB edge queues Type4. DikPosterUnread=false |
PROVEN | 5dcc1fc |
MessageId is persist +228 / 0x53C644E4 (00632500), not +224 (0x230364D6). QM+44 (004B2850 / 004B00C0) gates activate before 00CB5AD0 |
PROVEN | f38f9f9 |
Action 26 posts widget+372 from def+224 (0 first-seen on Accept/New Game). 0x53C644E4 at +228 still holds 0x126/15. Widgets carry Plus224 |
PROVEN | 9e94ef9 |
Type 11/38 +228 via 0055ACF0. Type-10 0xE5 is only the 00598A1C attach write (00598EE6 is the mov inside it). Empty widget lists no longer invent 0xE5. Press Start name-check invent gone. 0xE5 host fill gone |
PROVEN | 61e430f / Frontend_press_start_type4_without_widgets_does_not_invent_0xE5. #37 first half locked. |
Type 11/38 +228 on LMB-up action 28 after action 26 arms. Type 4 still posts type-10 +352 only (not first-visible +228). Type 6 (00A03D60) is action 28 / vtbl+588 / 0055ACF0. Host queues LMB-up as type 6. Unarmed +228 lists stay silent |
PROVEN | 48133e9 / Type4_action_26_posts_stored_widget_message (ActionType4 accept == null) / Type4_drives_lifecycle_0xE5_then_0x126_then_15 (Type4 then Type6). #37 second half locked. |
Press Start 0xE5 host fill gone; Type4 posts type-10 +352 only; Type6 LMB-up action 28 posts +228 after arm. Unarmed lists silent. #37 already locked |
PROVEN | 61e430f / Frontend_press_start_type4_without_widgets_does_not_invent_0xE5. 48133e9 / Type4_action_26_posts_stored_widget_message / Type4_drives_lifecycle_0xE5_then_0x126_then_15 |
Draw type-10 menus via vtbl+8 DrawsChildList. 00595222 calls [node+20].vtbl+8. Types 5/10/12/18 are 00530260. Attach no longer Finds UI_PRESS_START_TEXT after every root. 00598EE6 stays on the 00598A1C slot-0x14 write |
PROVEN | 7adf621. Present 0042DF9E still Note-only. |
Write Press Start 0xE5 through slot 0x14 0059B5D7. Native attach looks up [ui+84] key 0x14 then vtbl+284 0054E4F0. Dropped leftover widgets[0] type-10 / MessageId==0 walk. Host still collapses [packet+0] onto MessageId (leftover field) |
PROVEN | 59fde69 / Frontend_attach_0xE5_is_slot_0x14_0059B5D7_not_type10_walk |
Keep [ui+84] slots 0x14 and 0x17 across menu switch. 00596763 switches current screen; it does not drop the map. 00595A06 overwrites existing key 0 with Main Menu. Stop AttachFrontendTree from clearing the slot map. Host current _frontendWidgets is still the switched screen (input leftover) |
PROVEN | 84a8350 / Frontend_ui84_keeps_slot_0x14_and_0x17_after_main_menu |
Walk every resident [ui+84] slot on tick and draw. 00595222 vtbl+8 and 0059A0C4 vtbl+4 are the same in-order map walk; they do not filter to the current screen. Keep _frontendWidgets as the switched tree for input |
PROVEN | b4a2c89 / Frontend_tick_and_draw_walk_resident_ui84_slots (FrontendResidentSlots) |
Write +332 via SelectState(6) on slot switch; construct world in Init World. 0052CF40 stores vtbl+192 arg at +332. 004A67D0/004A6E30 belong inside "Init World" 0041735A, before "Init Display Engine" 00417418. CreatePlayers runs at the named 004166A8 stage |
PROVEN | b8a2b21 / Frontend_attach_0xE5_is_slot_0x14_0059B5D7_not_type10_walk (kept.State == 6, Note +332=6) / Init_World_004A67D0_runs_inside_0041735A_before_00417418 |
+332 SelectState(6) is a +302 hide |
DISPROVEN | 0052CF40 stores vtbl+192 arg at +332 (b8a2b21) |
Run Init Fonts after Graphics and select +332=5 on the new current. 004168DC looks up ENG_ARIAL_18 via 009E2C80 and stores it at game+90444. That is not frontend type-6 ENG_ARIAL_16/ENG_ARIAL_24. 0059A119 applies vtbl+192(5) to the incoming slot after the old current got vtbl+192(6) |
PROVEN | 9901d3b / Init_Fonts_004168DC_stores_ENG_ARIAL_18_at_game_plus90444 |
Ensure the 0xE0 [0x13B879C] singleton before Thing Components. 0044C6B6 is a present-check; first-seen miss constructs 0044C6C2 / 0044C71F. Init frontend 005952C3 applies vtbl+192(5) to Press Start |
PROVEN | 6ae001f / Init_Game_0044C6B6_ensures_0xE0_singleton_before_Thing_Components |
0044C6B0 is the 0xE0 singleton ctor |
DISPROVEN | 0044C6B0 remains the later getter (6ae001f) |
Register Data\Defs\misc_def_types.h into [0x13B8A54] at Init Subtitled. 004CDB10 via 00A39010. Not Speak. 00A38E50 payload UNREAD |
PROVEN | 540e30c / Init_Subtitled_004CDB10_registers_00A39010_at_13B8A54 |
Bind STANDARD_TALK and CONVERSATION names at Init Conversation Attitude. 004CD670 via 0099EFE0 (18/12/12). Not Speak. Later Thing Components Notes Add Def Class for CHeroMorphDef then CHighlightItemDef / CSmokeGeneratorDef / CTimeAppearanceFadeDef / CCreatureNavigationDef / CInventoryItemDef / CLookDef / CReadableDef / CVillageDef / CVillageMemberDef / CBuyableHouseDef / CBuyHouseDef / CWifeDef / CDoorDef / CLightDef / CSpotLightDef / CClockDef / CHeroDef; MATCH is Note-only + *DefClassRegistered flag, not a live constructed object |
PROVEN | fe6c09c / Init_Conversation_004CD670_binds_STANDARD_TALK_tables |
Store the 44-byte player owner at game+28 during Init Player Manager. 0041732A: 00BFEA1A(44) / 0044C6B0 / 0044A3B0 vtbl 01231CD0 size 44 / 004193A0 [game+28]. Not Create Players (004166A8). Hero swap names hero_swap_1.tng…_4.tng belong on this owner |
PROVEN | 4a03969 / Init_Player_Manager_0041732A_stores_44byte_owner_at_game_plus28 |
Host ctor note of 0044A3B0 under Init Player Interface |
DISPROVEN | moved to Init Player Manager (4a03969) |
+24=0 write on the player owner |
DISPROVEN | 4a03969 / same owner test |
Add CHeroMorphDef against the live +40 cap during Init Thing Components. 004EE337 / 0044C6B0 / 009B0AC0 / factory 004E4219 / 009AD6E0 / 009FC4F0 [this+40]=0x80000. Host Note-only + FirstDefClassRegistered. MATCH is Notes+flag, not a live object. LoadDef field walk stays PARTIAL. Do not invent 00A38E50 |
PROVEN | b7f4c34 / Init_Thing_Components_004EE23F_adds_CHeroMorphDef_against_plus40 |
Prepare the definition manager via vtbl+8 0044C72B and 009ACB10. Host PrepareDefinitionManager() Notes 0044C6B0 / 0044C72B [vtbl+8] / 009ACB10 / 009E5250 and sets DefinitionManagerPrepared. dest 0044C72B as [01232C24+8] is not rdata-locked (sibling proofs/00416005-def-manager dest UNREAD). Leave #42 open. Do not call dest PROVEN. Not a game.bin parse. Different object from later Subtitled [0x13B8A54] |
PROVEN | 587baae / Init_Definition_Manager_00416005_resets_plus88_via_vtbl8 |
Add CHighlightItemDef after CHeroMorphDef during Init Thing Components. Site 004EE565 / dest 009B0AC0 / factory 004D8671 size 72 vtbl 0123BD14. Note-only + SecondDefClassRegistered. MATCH is Notes+flag, not a 72-byte object |
PROVEN | acfe46f / Init_Thing_Components_004EE565_adds_CHighlightItemDef |
Add CSmokeGeneratorDef after CHighlightItemDef. Site 004EE62B (0044C6B0), dest 009B0AC0 at 004EE632, factory 004DA82B size 48 vtbl 0123E924, name CSmokeGeneratorDef. Host Note-only + ThirdDefClassRegistered. MATCH is Notes+flag, not a live 48-byte object |
PROVEN | 100e5cf / Init_Thing_Components_004EE632_adds_CSmokeGeneratorDef |
CTCSmokeGenerator 004EE588 is the next 009B0AC0 / Add Def Class |
DISPROVEN | CTC row, not Add Def Class (100e5cf / Init_Thing_Components_004EE632_adds_CSmokeGeneratorDef) |
Add CTimeAppearanceFadeDef after CSmokeGeneratorDef. Site 004EE6FD (0044C6B0), dest 009B0AC0 at 004EE704, factory 004D84C8 size 56 vtbl 0123B7CC, name CTimeAppearanceFadeDef. Host Note-only + FourthDefClassRegistered. MATCH is Notes+flag, not a live 56-byte object |
PROVEN | 1a4c51d / Init_Thing_Components_004EE704_adds_CTimeAppearanceFadeDef |
CTCTimeAppearanceFade 004EE64E is the next 009B0AC0 / Add Def Class |
DISPROVEN | CTC row, not Add Def Class (1a4c51d / Init_Thing_Components_004EE704_adds_CTimeAppearanceFadeDef) |
Add CCreatureNavigationDef after CTimeAppearanceFadeDef. Site 004EE92B / dest 009B0AC0 at 004EE932 / factory 004DA871 size 56 vtbl 0123E98C. Host Note-only + FifthDefClassRegistered. MATCH is Notes+flag, not a live 56-byte object |
PROVEN | ee08490 / Init_Thing_Components_004EE932_adds_CCreatureNavigationDef |
CTC physics/nav rows (CTCPhysicsLight / CTCPhysicsStandard / CTCPhysicsControlled / CTCCreatureNavigation) are the next 009B0AC0 / Add Def Class |
DISPROVEN | CTC rows, not Add Def Class (ee08490 / Init_Thing_Components_004EE932_adds_CCreatureNavigationDef) |
Add CInventoryItemDef after CCreatureNavigationDef. Site 004EF23D / dest 009B0AC0 at 004EF244 / factory 0044F644 jmp 0044C108 size 112 vtbl 01231DBC. Host Note-only + SixthDefClassRegistered. MATCH is Notes+flag, not a live 112-byte object. Also started proofs/github-issues-verify (index only at that SHA). Do not close issues from Note-only |
PROVEN | 3a7b594 / Init_Thing_Components_004EF244_adds_CInventoryItemDef |
Add CLookDef after CInventoryItemDef. Site 004EF37F / dest 009B0AC0 at 004EF386 / factory 004D80E4 ctor 0044C0C0 size 88 vtbl 0123AE14. Host Note-only + SeventhDefClassRegistered. MATCH is Notes+flag, not a live 88-byte object. Type-6 leftover 16×16 is gone; leftover204 is widget +204 (0 first-seen). Type-6 dest is a point at remapped origin (512,384), not ctor 0,0,0,0. UI_TITLE_01 dest still from texture FrameWidth 256. Host Notes 009DA9F0(1) [+16020] empty / skip DIP: DisplayFlushShouldDip(0, 0) is always false; host never stores [this+16020]. That empty Note is stand-in, not a recovered queue read. FrontendEnqueueRan still true on nonempty dest / PRESS START. EnqueuesDisplayQueue still false. No E8 009DB700. Draw path is still 00BAE2D0 / 00BAD8A0. Leave #36 open |
PROVEN | b1d6877 / Init_Thing_Components_004EF386_adds_CLookDef / Type6_leftover204_is_widget_plus204_not_dest_width / Press_Start_type6_dest_is_a_point / Frontend_PRESS_START_is_type_10_with_text_child / Press_Start_first_seen_dest_table_matches_0041AFA0 / Nonempty_dest_draws_via_00BAE2D0_not_009DB700 |
CTCCreatureExpression / CTCLook are the next 009B0AC0 / Add Def Class |
DISPROVEN | CTC rows, not Add Def Class (b1d6877 / Init_Thing_Components_004EF386_adds_CLookDef) |
Add CReadableDef after CLookDef. Site 004EF5AD / dest 009B0AC0 at 004EF5B4 / factory 004DAA0E ctor 0044C0C0 size 38 vtbl 0123E9F4. Host Note-only + EighthDefClassRegistered. MATCH is Notes+flag, not a live object. Size 38 is thin (no factory dump) |
PROVEN | 113a514 / Init_Thing_Components_004EF5B4_adds_CReadableDef |
CTCActionUseTorch / CTCActionUseReadable are the next 009B0AC0 / Add Def Class |
DISPROVEN | CTC rows, not Add Def Class (113a514 / Init_Thing_Components_004EF5B4_adds_CReadableDef) |
Type-6 host Notes 00543910 / 0x27 size 64; add CVillageDef after CReadableDef. Site 004F0171 / dest 009B0AC0 at 004F0178 / factory 004E213B pack 0042DAE0 ctor 004DFF04 size 0x10C vtbl 01241DDC. Host Note-only + NinthDefClassRegistered. MATCH is Notes+flag, not a live object. Type-6 0x27 is the host packer Note vs old 0x22 host pack (Type6_widget_packs_00543910_type_27_not_0041BEB0). Last present packer stays 0041BEB0 / 0x22. EnqueuesDisplayQueue still false. No native pack into +16020. Host still Notes 009DA9F0(1) [+16020] empty. Leave #36 open |
PROVEN | a141c27 / Init_Thing_Components_004F0178_adds_CVillageDef / Type6_widget_packs_00543910_type_27_not_0041BEB0 |
CTCActionUseSearch is the next 009B0AC0 / Add Def Class |
DISPROVEN | CTC row, not Add Def Class (a141c27 / Init_Thing_Components_004F0178_adds_CVillageDef) |
Recover 0041AC20 leftover +204 from GraphicIndex (index 0 → leftover 0); dest still invented 512,384,512,384 through 0xE5 leave; add CVillageMemberDef after CVillageDef. Site 004F0227 / dest 009B0AC0 at 004F022E / factory 004DA7AD ctor 0044C0C0 size 38 vtbl 0123E854. Host Note-only + TenthDefClassRegistered. MATCH is Notes+flag, not a live object. DIP still DisplayFlushShouldDip(0, 0) always-empty stand-in. Leave #36 open |
PROVEN | 76edbbd / Init_Thing_Components_004F022E_adds_CVillageMemberDef / Leftover204_is_0041AC20_graphic_index_not_persist_size / Frontend_0041AC20_dest_and_0xE5_new_profile_0x126_main_menu_15 |
Add CBuyableHouseDef after CVillageMemberDef. Site 004F02DD / dest 009B0AC0 at 004F02E4 / factory 004E0148 ctor 004DDB2C size 76 vtbl 0124131C. Host Note-only + EleventhDefClassRegistered. MATCH is Notes+flag, not a live object. proofs/frontend-no-screen-draw-fork is a host grep labeled PROVEN, not a native dest lock. Quiet leftover; do not file a new issue |
PROVEN | 91564bd / Init_Thing_Components_004F02E4_adds_CBuyableHouseDef |
Dump three frontend screens after AVI skip; add CBuyHouseDef after CBuyableHouseDef. Site 004F0393 / dest 009B0AC0 at 004F039A / factory 004D7B5B ctor 0044C0C0 size 38 vtbl 0123A61C. Host Note-only + TwelfthDefClassRegistered. MATCH is Notes+flag, not a live object. Optional FABLE_SKIP_STARTUP_AVI is host FinishStartupVideo, not native DIK skip. Screen dumps re-lock invented dest. proofs/frontend-screens-vs-native dest MATCH oversell restates #36. Leave #36 open. Do not treat the AVI skip env as a 3D Draw fix (leave #20 open) |
PROVEN | f30c099 / Init_Thing_Components_004F039A_adds_CBuyHouseDef / Frontend_dumps_press_start_new_profile_main_menu_after_avi_skip |
Present type-16/18 persist child 0; add CWifeDef after CBuyHouseDef. Site 004F04B4 / dest 009B0AC0 at 004F04BB / factory 004D7BA1 ctor 0044C0C0 size 44 vtbl 0123A69C. Host Note-only + ThirteenthDefClassRegistered. MATCH is Notes+flag, not a live object. Type 16 CTextSlider vtbl+8 is 00530260. First-seen +348=0 keeps ARROWS/NORMAL. Type-6 dest stays a POINT (512,384,512,384). At this SHA host DrawContainerWalk / IsPresented exclusive-walked kids[ActiveChild] for SelectsChild. Proof proofs/type16-18-present-child DISPROVES 00530260 exclusive-walk (native walks every +176 child, skip vtbl+400 / +420). Unused ApplySelectState maps one state onto all type 16/18. Filed issue #46. Later 88a9ab8 dropped exclusive-walk; native skip vtbl+400 (+504) still unused. Leave #46 open. Dest still invented. Leave #36 open |
PROVEN | 71ae66e / Init_Thing_Components_004F04BB_adds_CWifeDef / Factory_builds_press_start_then_main_menu_from_the_same_walk |
Present skip from listing (constants + proof only); add CDoorDef after CWifeDef. Site 004F0640 / dest 009B0AC0 at 004F0647 / factory 004D7BE7 ctor 0044C0C0 size 60 vtbl 0123A714. Host Note-only + FourteenthDefClassRegistered. MATCH is Notes+flag, not a live object. Test Init_Thing_Components_004F0647_adds_CDoorDef. 405b1e8 also fixes the thirteenth early-return (if (!ThirteenthDefClassRegistered) then fourteenth) so CWifeDef and CDoorDef both register — a real host fix. Shape-2 pack 0042DAE0. FrontendWidgetType constants: BorrowedVisibleFn 0052F180 ([+300]>>7, persist def+504), ClipBitFn 0052F1D0 ([+302]&1, persist def+392, CRC UNREAD), ForwardSelectFn 0041C5A0, TextSliderIndexOffset 348. Those VAs are never read by DrawContainerWalk or IsPresented. At this SHA host exclusive-walked kids[ActiveChild] for SelectsChild. Later 88a9ab8 dropped exclusive-walk; native skip vtbl+400 (+504) still unused. Frontend_dumps_press_start_new_profile_main_menu_after_avi_skip now asserts FrontendResidentSlots keep 0 / 0x14 / 0x17. Proof proofs/listing-present-skip: 00530260 walks every +176 then +188; skip is vtbl+400 / vtbl+420. Native 00530260 does NOT exclusive-walk. Host SelectsChild + Visible=false on k!=0 is still the first-seen present set (forest_1 / ARROWS / NORMAL). Do not treat skip as recovered in the host walk. Leave #46 open. Dest still invented 512,384,512,384. Leave #36 open. Next leftover (not an issue): CLightDef 004F06F6 / 004D7C73 size 92 vtbl 0123A814 |
PROVEN | 405b1e8 / Init_Thing_Components_004F0647_adds_CDoorDef / Factory_builds_press_start_then_main_menu_from_the_same_walk / Frontend_dumps_press_start_new_profile_main_menu_after_avi_skip |
Forward SelectState +332 via 0041C5A0; add CLightDef after CDoorDef. Site 004F06F6 / dest 009B0AC0 at 004F06FD / factory 004D7C73 / ctor 0044C0C0 / size 92 / vtbl 0123A814. Host Note-only + FifteenthDefClassRegistered. MATCH is Note-only + *DefClassRegistered flag, not a live constructed object. SelectFrontendState now ForwardSelectState: writes +332 and Notes 0041C5A0 to persist +176 children. Not ActiveChild, not Visible=false, not current-slot-only draw. Tests lock CLightDef Notes plus leftover Press Start State=6 / UI_PRESS_START_TEXT Visible / FORREST_1_1 Visible / 0041C5A0 Note. Later 88a9ab8 dropped exclusive-walk; native skip vtbl+400 (+504) still unused. Leave #46 open. Dest still invented. Leave #36 open |
PROVEN | 46663e3 / Init_Thing_Components_004F06FD_adds_CLightDef / Factory_builds_press_start_then_main_menu_from_the_same_walk / Frontend_dumps_press_start_new_profile_main_menu_after_avi_skip |
Skip leaf DIP when packed alpha is 0; add CSpotLightDef after CLightDef. Site 004F07AC / dest 009B0AC0 / factory 004D7CB9 / ctor 0044C0C0 / size 68 / vtbl 0123A88C. Host Note-only + SixteenthDefClassRegistered. MATCH is Note-only + *DefClassRegistered flag, not a live constructed object. 0041AFA0 and 0054EF00 skip 0041BEB0 when +151==0. Dest-zero already skips sprites. Not current-slot-only draw. LeafDipSkipped is a real CompositeFrontendPresent gate, but PackPersistColour(0,0,0,0) returns 0xFFFFFFFF so unread/ctor colour never skips. Tests lock CSpotLightDef Notes and LeafPresentFn 0041AFA0 / Type6PresentFn 0054EF00 / LeafDipSkipped helper, not leftover-slot actual +151. Style-6 persist flags remain UNREAD and are not applied. Later 88a9ab8 dropped exclusive-walk; native skip vtbl+400 (+504) still unused. Do not file style-6 UNREAD. Leave #46 #36 open |
PROVEN | db3899a / Init_Thing_Components_004F07B3_adds_CSpotLightDef / Factory_builds_press_start_then_main_menu_from_the_same_walk |
Add CClockDef after CSpotLightDef; name 0052C7E0 style-tick flags. Site 004F0862 / dest 009B0AC0 / factory 004E4477 / ctor 004E380E / size 56 / vtbl 01242C34. Host Note-only + SeventeenthDefClassRegistered. MATCH is Note-only + *DefClassRegistered flag, not a live constructed object. Style-tick dword0 bits 0x10/0x20/0x40 are named from StyleTickFn 0x0052C7E0. They are not applied. Persist style-6 dword0 remains UNREAD. StyleFlagsZeroDest comment misnames native 0x20 (zeros +76/+80 parent-local, not dest) — do not file that comment as a leftover. Later 88a9ab8 dropped exclusive-walk; dest still invented. Native skip vtbl+400 (+504) still unused. Leave #46 #36 open |
PROVEN | 065eb28 / Init_Thing_Components_004F0869_adds_CClockDef / Factory_builds_press_start_then_main_menu_from_the_same_walk |
Add CHeroDef after CClockDef; name 0052CEB0 style lookup +20. Site 004F0918 / dest 009B0AC0 / factory 004D7CFF / ctor 0044C0C0 / size 48 / vtbl 0123A904. Host Note-only + EighteenthDefClassRegistered. MATCH is Note-only + *DefClassRegistered flag, not a live constructed object. 00631C60 persist of CUIDef+64 is 00632E00 stride 124; 00433FE0 starts at style +60. StyleLookupFn 0x0052CEB0 returns map node +20. Named only, not applied. Persist style-6 dword0 is UNREAD and is not applied. Next leftover CCreatureModeDef 004F0D26 / 004E0B4B is not shipped — do not file. Later 88a9ab8 dropped exclusive-walk; dest still invented. Native skip vtbl+400 (+504) still unused. Leave #46 #36 open |
PROVEN | 6577614 / Init_Thing_Components_004F091F_adds_CHeroDef / Factory_builds_press_start_then_main_menu_from_the_same_walk |
Recover New Profile frontend layout and hit-test from exe. Not an Add-Def-Class MATCH. This is a recover commit. Persist parse of type-12 UI_NEW_PROFILE_MENU +326=30 (CRC 0xD7495328) and Sprites (key, defIndex) / Plus96 CRC 0x38BB7ED4 is real file recover. Layout writes authored Y index * 30 into PersistY. Type-2 leftover +204/+208 claimed as persist W/H (00551340); UI_BUTTON_OPTIONS_LEFT leftover (180, 0). PlaceTableCell claimed 00551EA0 when +96 bit 0; count==3 invents left/right leftover W and a middle fill. ExpandTableDests sets table DestY1 from children when dest height is 0. Hit-test: new FrontendHitTest claimed 0055B8F0 / 0055BF10; dest AABB if area else union of presented descendants; smallest-area reverse-walk. Type6 maps MessageFromPlus228List. Empty space does not Accept. Client maps LMB to dest space (fb / BackBuffer, else 1024×768). Enter still queues TypeKey (AVI skip), not New Game. No Key.N / ActivateNewGame in Program.cs. Press Start dest table unchanged: type-6 still remapped point 512,384,512,384. DIP path not touched (DisplayFlushShouldDip(0,0) still false; no [this+16020]). Later 88a9ab8 dropped exclusive-walk (IsPresented no longer kids[ActiveChild]). Native skip vtbl+400 (+504) still unused. Style-6 still UNREAD. Tests do not lock dest numbers: they assert ≥4 distinct live DestY0, Apply/Cancel hits disjoint, empty-space no Accept, Apply ClickNamed → Main Menu, tautology VAs. Oversell: “from exe” pins 00551EA0 / 0055B8F0 / 00551340 onto host heuristics. Filed #48. Leave #14 #20 #36 #42 #46 #48 open. leave #14 open on ClickNamed |
PROVEN | b075dd3 / New_Profile_type12_rows_use_persist_plus326_not_equal_Y / New_Profile_apply_cancel_hit_rects_are_disjoint / New_Profile_empty_space_Type4_Type6_does_not_accept / New_Profile_Apply_hit_posts_0x126_Cancel_does_not |
Pack type-12 rows so persist X=-100 is not dest X=-45. Persist Plus322 CRC 0xA04E63BE. ListChildAuthoredPos packs children; persist X=-100 discarded. Stopped writing packed Y back onto PersistY (partial #48 item 4). Added ExpandControlDests (type-16/37 dest grown from rightmost type-2 — invented dest). Tests lock host pack formula and “has area”, not dest numbers. Press Start dest table unchanged: type-6 still remapped point 512,384,512,384. DIP (0,0) stand-in. Later 88a9ab8 dropped exclusive-walk; native skip vtbl+400 (+504) still unused. Style-6 still named-only. #48 stays open. Leave #14 #20 #36 #42 #46 #48 open |
PROVEN | 43b1cf2 / New_Profile_type12_rows_use_persist_plus326_not_equal_Y |
Hit New Profile widgets from dest, not leftover unions. UnionDescendants deleted. HitRect = dest AABB only. Point dests miss. Dest writers unchanged (ExpandControlDests, PlaceTableCell n==3, ExpandTableDests). #48 stays open (union stop is item 2 only). Press Start dest table unchanged. DIP (0,0) stand-in. Later 88a9ab8 dropped exclusive-walk; native skip vtbl+400 (+504) still unused. Leave #14 #20 #36 #42 #46 #48 open |
PROVEN | 6e76ac5 / New_Profile_per_control_LMB_uses_dest_not_empty_space / New_Profile_apply_cancel_hit_rects_are_disjoint |
Tile type-2 leftover cells and keep type-16 dest a point. ExpandControlDests deleted. Type-16/37 dest is a point again (honest undo of 43b1cf2 size invent). PlaceTableCell n==3 fill is NOT gone — first/last sibling leftover W as caps. BindEditBoxSeed / SpritesThenGlyphs claimed 00851770 / 0054EF00 — oversell. Tests: slider/edit dest is a point; live cells tile-the-bar, not dest tuples. #5 grok-goal dump still written — do not re-file. #48 stays open. Press Start dest table unchanged. DIP (0,0) stand-in. Later 88a9ab8 dropped exclusive-walk; native skip vtbl+400 (+504) still unused. Leave #14 #20 #36 #42 #46 #48 open |
PROVEN | 68eb1c5 / New_Profile_persist_child_order_and_layers / New_Profile_type12_rows_use_persist_plus326_not_equal_Y |
Pair type-2 sprite keys as left/right caps and stretch. Persist Sprites sorted by key → clone order L, R, M. SpriteKeys == [0,1,4] MATCH persist. PlaceTableCell index 1 is now right cap; n==3 leftover fill still invented. TryChromeHit: if dest is a point, hit = dest origin + rightmost type-2 table dest size. Claimed 0055B8F0. Regresses 6e76ac5 “hit dest AABB only” for type-16/37. SpritesThenGlyphs now per [ui+84] tree (0054EF00 oversell). Tests lock tiling / nonempty chrome hit / click (700,300), not dest numbers. Persist leftover LEFT still (180, 0); helper uses 288×32. #48 stays open. Press Start dest table unchanged. DIP (0,0) stand-in. Later 88a9ab8 dropped exclusive-walk; native skip vtbl+400 (+504) still unused. Leave #14 #20 #36 #42 #46 #48 open |
PROVEN | 069c6a9 / New_Profile_persist_child_order_and_layers / New_Profile_apply_cancel_hit_rects_are_disjoint |
New Game TNG load + menu cap slice. TNG: LoadGlobalThingsFile now breaks on the first LoadedOnPlayerProximity map, Notes LoadGlobalThingsPerMap (004FDBC0) as "004FBF60 " + lookout.ScriptName + ".tng", loads that one TNG, sets GlobalThingMapsLoaded = 1. Does not look up map.Index == 1 or name LookoutPoint; takes first proximity map in WLD parse order. Comment claims 004FDBC0 ebx=1 skips dummy slot 0 and first 004FBF60 is LookoutPoint (NewMap 1); later maps stay closed until 00501450 / ContainsMap. Real reason in code: parsing every proximity .tng OOMs the New Game pump. Menu slice: Type-2 PlaceTableCell only when persistW == 0 && persistH == 0. Persist-size kids (mouse-area) skip the table helper and fall through to generic dest / inherit-scale 005339B0. PlaceTableCell body unchanged from 069c6a9 (count==3 host L/R/mid fill claimed as 00551EA0). AttachSpriteCells still attaches every SpriteDefIndices entry. Tests: New_Game_004FDBC0_opens_LookoutPoint_only locks GlobalThingMapsLoaded == 1 + LookoutPoint in the Note, no Bowerstone Note. Does not lock NewMap index, ebx=1, 004FBF60 callee, or 00501450. Main_Menu_button_slices_are_sprite_keys_not_mouse_area locks SpriteKeys == [0,1,4], mouse-area persist W>0 / alpha 0, kids[1..3] tile the table dest. Host dest tiling, no native dest tuple. Filed leftover #50: host first-proximity TNG / OOM workaround sold as recovered 004FDBC0 NewMap 1. Do not fold #50 into #4 (ledgers vs TNG pump). Persist-size skip is #48 family, not a new leftover. Press Start dest table unchanged. DIP (0,0) stand-in. Later 88a9ab8 dropped exclusive-walk; native skip vtbl+400 (+504) still unused. CompositeFrontendPresent still BuildBatch(..., 0, 0, width, height). Leave #14 #20 #36 #42 #46 #48 #50 open |
PROVEN | d628952 / New_Game_004FDBC0_opens_LookoutPoint_only / Main_Menu_button_slices_are_sprite_keys_not_mouse_area |
Recover 0055BF10 hover so Accept LMB posts 0x126. Host HitIndex + Hovered. HoverSelectFn == 0x0055BF10 is a tautology. No +352 byte. Later rewritten by e3208eb. dest still invented. DIP (0,0) stand-in. leave #14 #20 #36 #42 #46 #48 #50 open |
PROVEN | 681620d / New_Profile_hover_0055BF10_swaps_type38_on_off |
Present frontend as 0042DF9E 2D only; skip State-6 DIP. Host gate _frontendReady && !playAviOnly skips mesh/gizmos in VulkanLineRenderer.Record. window.Render still always host.Draw. Not a recovered 0042DF9E walk (no BeginScene / 00595222 / EndScene / 009BEEB0). CompositeFrontendPresent State-6 tree skip was host and was REMOVED in e3208eb. Present 0042DF9E still Note. DisplayFlushShouldDip(0,0) still false. dest still 512,384,512,384. New Game still not locked (Enter is PlayAVI skip). leave #14 open. PlayAVI still host.Draw. leave #20 open. Leave #14 #20 #36 #42 #46 #48 #50 open |
PROVEN | dd0a0f0 |
Dump type 11/38 vtbls; drop leftover hover hacks. DrawsChildList now includes type 11 and 38 (comment dumps 01249554+8 / 0124B04C+8 as 00530260). Table[11].Vtbl is still 0; dump is comment-only. Tests lock ContainerDrawFn == 0x00530260 tautology. Hover is host Contains||HitIndex on type 11/38 when TypeMouse is in Applied. Hovered stand-in for +352 on Arm. Dropped TryMouseAreaDest dest copy, ON/OFF colour/texture swap, type-32 pointer dest, State-6 present skip. Test New_Profile_hover_0055BF10_swaps_type38_on_off no longer checks ON/OFF colour swap. dest still a point. leave #14 #20 #36 #42 #46 #48 #50 open |
PROVEN | e3208eb / New_Profile_hover_0055BF10_swaps_type38_on_off |
Parse persist clip/align/style ColourA and drop leftover sibling hide. Wire persist +392 Clip (vtbl+420), +504 CRC parsed but NOT applied to vtbl+400 skip, +508 type-6 align (tests lock arrows Plus508=1 and Flag302 centre bit). 00530260 walks every child: DrawContainerWalk / IsPresented no longer exclusive-walk kids[ActiveChild]; ApplyFirstSeenState no longer Visible=false on siblings. Type-18 inactive forest tiles now Visible dest 410x410 opaque (dump batchDraws 193→223). Sampler D3D POINT locked (Dx9VulkanParityTests Sampler_and_blend_translations MagFilter Nearest). StyleFlagsZeroDest 0x20 still unused. dest still invented. Native skip via vtbl+400 (+504) still unused; type-18 inactive siblings present. leave #46 open. Leave #14 #20 #36 #42 #46 #48 #50 open |
PROVEN | 88a9ab8 / Factory_builds_press_start_then_main_menu_from_the_same_walk / Sampler_and_blend_translations |
First-seen colour is persist style 0 (005339B0 packs style 0 into +132). Type-16 child 0 StyleIndex=3 because vtbl+176 0041C5C0 is style-exists; present colour stays style 0. Unselected siblings stay StyleIndex 0. ChildrenOf by parent index, not name (duplicate persist names no longer steal DrawContainerWalk / ForwardSelectState). Dropped StyleFlagsForceOpaque pack. Tests: Factory_builds_press_start_then_main_menu_from_the_same_walk locks arrows Visible + StyleIndex TextSliderFirstSeenSelect (3), wasd Visible + StyleIndex FirstSeenState (0), arrows.Colour == wasd.Colour, both LeafDipSkipped. EngineLifecycleTests.Frontend_dumps_press_start_new_profile_main_menu_after_avi_skip locks the same StyleIndex + LeafDipSkipped on ARROWS/WASD. VA tautologies StyleExistsFn 0x0041C5C0 and InheritPackedColourFn 0x0052E930. dest still invented 512,384,512,384; DIP (0,0); BuildBatch(..., 0, 0, width, height). Present 0042DF9E still Note. Native skip via vtbl+400 (+504) still unused. leave #14 #20 #36 #42 #46 #48 #50 open |
PROVEN | b216990 / Factory_builds_press_start_then_main_menu_from_the_same_walk / Frontend_dumps_press_start_new_profile_main_menu_after_avi_skip |
Walk Bootstrap from dumped PE entry. Host starts at assembly listing 00401067 (CRT, WinMain 00403480, 00402510), not a live Fable.exe attach. Setup Language loads Data\lang\English\lang_settings.txt through 004045C0 into the three bootstrap bools, then Notes 009BC890/009BC8A0. Tests already on the page: Pe_entry_is_crt_not_new_game, Assembly_dump_pe_entry_is_crt_then_winmain, Bootstrap_first_seen_matches_assembly_pe_entry. dest still invented. leave #14 and #20 open |
PROVEN | 6314dad / Pe_entry_is_crt_not_new_game / Assembly_dump_pe_entry_is_crt_then_winmain / Bootstrap_first_seen_matches_assembly_pe_entry |
Route first frontend Present through IDirect3DDevice9. Split bootstrap at CreateDevice so the Vulkan DX9 device exists before 0042EFF7/0042DF9E. Frontend Present is Clear/Begin/End/Present on that device, not EngineFrame. Honor DeviceWindowed; FABLE_FORCE_WINDOWED is opt-in. Typed DX9 records and writable locks. Sprite DIP on dest 0,0,0,0 stays UNREAD. This SHA briefly used NativeSemantic attach; be8d987 reversed attach to Shadow; 131e34d then owns Present for real. dest still invented. leave #14 and #20 open |
PROVEN | e9af3a8 |
| Start windowed and toggle fullscreen with Alt+Enter. Host Silk window defaults Normal. Alt+Enter toggles Fullscreen. Native DeviceWindowed remains the D3D flag. Alt+Enter does not queue Enter as AVI skip. dest still invented. leave #14 and #20 open | PROVEN | 70709c1 |
Keep compatibility frontend Present and shadow-record recovered draws. Device attach is Shadow, not NativeSemantic. FrontendBatch and host.Draw stay active. Record recovered 00A0AEA0 DIPUP and 00A0ABE0 glyph verts between BeginScene and EndScene. Zero dest still skips. VulkanDx9Device does not consume the swapchain. dest still invented. leave #14 and #20 open |
PROVEN | be8d987 |
Own frontend Present and recover NativeSemantic sprite and glyph draws. Live client sets sprite+glyph capabilities and OwnsSwapchainPresent. VulkanDx9Device batches DIPUP and glyph UP then presents. 3D stays Compatibility host.Draw after Leave. Startup AVI is 006286F0 blit only; F2 fly is Game-only. WM_CHAR is type 15; Press Start / New Profile / New Game are LMB type 4/6. Type-10 packet is widget +352, not MessageId. Exclusive ActiveChild walk is STALE: DrawContainerWalk foreach ChildrenOf, IsPresented parent-chain Visible/Clip, ApplyFirstSeenState Visible=true on every widget. Test FrontendUiDefTests.Factory_builds_press_start_then_main_menu_from_the_same_walk locks ContainerDrawWalksEveryChild, ExclusiveWalkSelectsChild == false, Leftover46ExclusiveWalkIsStale, type-18 FORREST_1 and FORREST_2 Visible, type-16 ARROWS/WASD and NORMAL/INVERTED Visible. Extra landscape strips, XSEQ time-to-key, Thing Component factories, and leftover dest/Present/Oakvale intro proofs. Constants: FrontendPresentBodyIsLive = true, DisplayFlushQueueIsNoteOnly = true, Leftover14OpenForDestPresentNotes stays true. Tests also cited by leftover-14 proof: Frontend_0042EC7C_frame_is_input_then_0042DF9E_Present, Native_semantic_frontend_present_builds_device_batch. Skip VAs 0052F180/0052F1D0 stay named constants (SkipVtblsAreMethodCalls == false); that is not exclusive-walk. dest still invented 512,384,512,384; DIP (0,0) stand-in; DisplayFlushShouldDip(0, 0) always false; 009DA9F0 flush is still Note-only. Point dest still skips DIPUP (00BADB36). Type4 apply is still host dest AABB hover, not recovered current-inner 0055CB10. leave #14 open. FrontendPresentBodyIsLive means Clear/Begin/recovered DIPUP/Present when Device is set — it does not dest-lock #14. Startup AVI client Present is blit-only 006286F0 MATCH (Draw(default) / playAviOnly). Remaining leftover #20 is Game-stage: PumpGame still walks 00435530 because 006286F0 does not own that pump. leave #20 open. dest 0044C72B as [01232C24+8] is not rdata-locked. leave #42 open. New Profile dest/hit is host stand-in (TryChromeHit invents type-16/37 hit). leave #48 open. First-proximity TNG is host OOM workaround, not locked 004FDBC0 NewMap 1. leave #50 open. dest invented 512,384,512,384. leave #36 open. Exclusive-walk leftover is STALE (tracker already done). Do not collapse no-save first region LookoutPoint vs first-scene Oakvale intro view. #5 grok-goal dump still written. Do not re-file. MATCH named-stage Add Def Class is still Note-only + *DefClassRegistered flag |
PROVEN | 131e34d / Factory_builds_press_start_then_main_menu_from_the_same_walk / Frontend_0042EC7C_frame_is_input_then_0042DF9E_Present / Native_semantic_frontend_present_builds_device_batch |
Fix frontend menu parity and custom cursor. Silk cursor Hidden on frontend; CursorDest arithmetic; type-6 LayoutFormatted wrap/centre at draw; FontFile.GlyphAt null-page fix. Tests lock helper math + pointer fields (Type6_setter_centres_press_start_and_wraps_legal_notice, Type32_cursor_preserves_size_at_live_input_position). FrontendDisplayCursorRan stays false; leftover+204 stays 0. Comments pin 0041A980 / 0054FBC0 / 0054F8E0 on host helpers (same pattern as leftover #36 — do not file a leftover). dest still invented. leave #14 and #20 open |
PROVEN | b03756c / Type6_setter_centres_press_start_and_wraps_legal_notice / Type32_cursor_preserves_size_at_live_input_position |
Fix frontend colors and text underlay. TextureFile / FrontendTextDraw / LineShaders / Dx9VulkanFrontend. Tests that landed here: Frontend_ps_keeps_clock_sprites_white_and_applies_glyph_diffuse, Type6_text_has_native_black_underlay_and_colour_pass, A8R8G8B8_surface_bytes_are_decoded_from_bgra_to_rgba. dest still invented. leave #14 and #20 open |
PROVEN | e7eac64 / Frontend_ps_keeps_clock_sprites_white_and_applies_glyph_diffuse / Type6_text_has_native_black_underlay_and_colour_pass / A8R8G8B8_surface_bytes_are_decoded_from_bgra_to_rgba |
Fix frontend compositing and upload stalls. VulkanLineRenderer.Frontend/Textures + FrontendWidgetFactory. Test that landed here: Frontend_texture_sets_reuse_cached_pixel_storage. dest still invented. leave #14 and #20 open |
PROVEN | 32588e0 / Frontend_texture_sets_reuse_cached_pixel_storage |
Match native frontend animation and text rendering. Type-18 swap dwell (Frontend_type18_primes_then_cycles_zero_dwell_forest_states); type-6 black underlay then colour pass with Type6OriginPad, mouse last in Frontend_PRESS_START_is_type_10_with_text_child; vsync FIFO when window.VSync; live client trace opt-in FABLE_LIFECYCLE_TRACE. Also Press_Start_type18_lists_match_00547500. VA comments on 00547380 / 0052CF40 / 0054EF00 are host helpers — do not file leftover. dest still invented. leave #14 and #20 open |
PROVEN | 7b2d2ab / Frontend_type18_primes_then_cycles_zero_dwell_forest_states / Frontend_PRESS_START_is_type_10_with_text_child / Press_Start_type18_lists_match_00547500 |
Recover complete frontend UI schema and parity behavior. New FrontendUiFieldCatalog.cs + FrontendUiSchema.cs. Cite only tests that exist: FrontendUiDefTests (Every_frontend_UI_entry_matches_the_complete_native_CUIDef_schema, Complete_CUIDef_catalog_uses_original_names_and_matching_file_CRCs), FrontendLayoutTests, FrontendInputTests. NativeDestTupleUnread stays true at HEAD. dest still invented. leave #14 and #20 open |
PROVEN | 0374d7b / FrontendUiDefTests / FrontendLayoutTests / FrontendInputTests |
Map frontend states to recovered UI fields. Hovered / LeftClicked / RightClicked persist CRCs and widget copies. No new test method; assertions landed in FrontendUiDefTests. dest still invented. leave #14 and #20 open |
PROVEN | b9d37c8 / FrontendUiDefTests |
Map frontend UI controls from native definitions. Hit-test still host: HEAD FrontendLayoutTests still TryChromeHitIsNativeHit == false, PlaceTableCellCount3IsNative == false. Tests that landed: Silk_backspace_is_queued_as_the_native_type15_character, Frontend_batch_reuses_exact_size_arrays_between_frames, New_profile_sliders_construct_persisted_arrow_controls_and_ranges. dest still invented. leave #14 and #20 open |
PROVEN | 168317a / FrontendLayoutTests / New_profile_sliders_construct_persisted_arrow_controls_and_ranges |
Fix frontend hover stalls and UI field parity. Sprite2DFlag persist +548 → widget +372; LayerIndependant; persist Angle; dual linear/point frontend samplers (Dx9VulkanParityTests.Sampler_and_blend_translations locks FrontendType22(2) Linear vs FrontendType22(0) Point and PreservesPerFrameFilter). Resident texture set to avoid DeviceWaitIdle on hover. BindDefaultNewProfileValues hardcodes 0.5 camera sensitivity (host). FirstSeenState now 0 not a magic style. dest still invented. leave #14 and #20 open |
PROVEN | e852b52 / Sampler_and_blend_translations / Persist_quarter_turn_rotates_sprite_corners_without_allocating_geometry |
Restore authored frontend controls and audio. Host NAudio FrontendAudioPlayer plays Sound/Intro.ogg + Frontend.lug RIFF CS_GUI_1/2. This does not lock leftover #15 (Init Sound 00417A58) or leftover #9 (WmvPlayer IBasicAudio). Tests: New_Profile_name_hover_reaches_nested_authored_panel_styles, New_Profile_Apply_and_Cancel_follow_their_authored_messages. dest still invented. leave #14 and #20 open |
PROVEN | 16cf83b / New_Profile_name_hover_reaches_nested_authored_panel_styles / New_Profile_Apply_and_Cancel_follow_their_authored_messages |
Eliminate frontend hover stalls. HoveredState on the button (not first child); GRAPHIC-name hit AABB fallback is host heuristic (same family as leftover #48). Independent layer -1024 later reverted. Test: New_Profile_arrow_hover_uses_button_state_and_authored_graphic_bounds. dest still invented. leave #14 and #20 open |
PROVEN | 094478b / New_Profile_arrow_hover_uses_button_state_and_authored_graphic_bounds |
Restore visible frontend rendering. Reverts style-texture residency and independent-layer offset so logos draw (Native_semantic_frontend_present_builds_device_batch locks 256×128 logo textures). Does not re-enable world Draw under frontend/AVI. dest still invented. leave #14 and #20 open |
PROVEN | 86b8ff4 / Native_semantic_frontend_present_builds_device_batch |
Apply frontend sprite rotation in live path. DestCorners used by FrontendDx9Submit FillSpriteVertices and BuildDx9Quad; Y-down sign flip. Persist_quarter_turn_rotates_sprite_corners_without_allocating_geometry locks live quad (15,-5)/(15,15)/(5,-5). Dest rects themselves still from layout. dest still invented. leave #14 and #20 open |
PROVEN | 29c88e9 / Persist_quarter_turn_rotates_sprite_corners_without_allocating_geometry |
Eliminate profile hover texture rebuilds. Hover broadcasts only to immediate children (New_Profile_name_hover_updates_authored_components_without_replacing_nested_sprites). Comments pin 0055AEB0/0055AEF0 on host helpers — do not file leftover. dest still invented 512,384,512,384 in Press_Start_first_seen_dest_table_matches_0041AFA0; NativeDestTupleUnread == true. DIP (0,0) stand-in: Empty_dest_does_not_issue_dipup; DisplayFlushQueueIsNoteOnly == true; FrontendPresentBodyIsLive == true (Clear/Begin/recovered DIPUP/Present when Device set — does not dest-lock leftover #14). Device_does_not_own_game_host_present; 3D stays Compatibility host.Draw after Leave. Startup AVI blit-only; leftover #20 Game-stage PumpGame 00435530 remains. grok-goal dump still written in FrontendLayoutTests (leftover #5 — do not re-file). GRAPHIC-name AABB is host (leftover #48). Host frontend audio does not lock leftover #15 or leftover #9. leave #14 open. Startup AVI client Present is blit-only 006286F0 MATCH (Draw(default) / playAviOnly). Remaining leftover #20 is Game-stage: PumpGame still walks 00435530 because 006286F0 does not own that pump. leave #20 open. dest 0044C72B as [01232C24+8] is not rdata-locked. leave #42 open. New Profile dest/hit is host stand-in (TryChromeHit invents type-16/37 hit; GRAPHIC-name AABB is also host). HEAD FrontendLayoutTests still TryChromeHitIsNativeHit == false, PlaceTableCellCount3IsNative == false. leave #48 open. First-proximity TNG is host OOM workaround, not locked 004FDBC0 NewMap 1. leave #50 open. dest invented 512,384,512,384. leave #36 open. Exclusive-walk leftover is STALE (tracker already done). Skip VAs 0052F180/0052F1D0 stay named constants. Do not collapse no-save first region LookoutPoint vs first-scene Oakvale intro view. #5 grok-goal dump still written. Do not re-file. MATCH named-stage Add Def Class is still Note-only + *DefClassRegistered flag |
PROVEN | 4f1819d / New_Profile_name_hover_updates_authored_components_without_replacing_nested_sprites |
ExeIndex evidence exporters + persist Layer recover. Click UI_FRONTEND_BUTTON_NEW_GAME → RetailNewGameFlag + Game. Exporters are not dest/DIP recovery. dest still invented. NativeDestTupleUnread stays true. leave #14 and #20 open |
PROVEN | 951b7f2 |
scene-capture tool. LoadGlobalThingsHostBreaksAfterFirstProx=false / retain-first-parsed-map. 151-slot census is not locked 004FDBC0 NewMap 1. Keep Lookout (no-save first region) vs Oakvale intro view separate. dest still invented. leave #14 and #20 open. leave #50 open |
PROVEN | fa79419 |
authored intro dialogue/audio. Spawn CREATURE_HERO_CHILD only on StartOakVale + intro quest. SetFrontendBatch can record world verts under frontend — leftover already #14, do not file a new issue. dest still invented. leave #14 and #20 open |
PROVEN | e004fe3 |
UpdateAtClock + live actor MeshDraw refresh. This commit added no tests. dest still invented. leave #14 and #20 open |
PROVEN | b6923a3 |
intro-father parent continuation order 00DB88FD; mesh concat sortDraws:false; Vulkan present semaphore per image. Does not lock #14 dest/Present. dest still invented. leave #14 and #20 open |
PROVEN | a02ab21 |
Game_PlayAVI_006286F0_polls_the_retail_skip_scan (in-game skip). Startup still Draw(default). Does not lock #20. dest still invented. leave #14 and #20 open |
PROVEN | 41e97c9 / Game_PlayAVI_006286F0_polls_the_retail_skip_scan |
QuestLifecycleRuntime / S_QNOVI post-cutscene map (CHEERING journal, HUD, scripted-Thing 3/4). Oakvale intro after the father cutscene, not Lookout. dest still invented. leave #14 and #20 open |
PROVEN | 12118bd |
[node+20] is 0041DB1D/0041D21B type0 0041B800 vtbl 0122F5D4; draw 0041AFA0 not 0052D900 |
DISPROVEN | PRESS_START Type=10. Type 0 is UI_FRONTEND_BUTTON. |
00A09F20 miss: [bank].vtbl+4 is 009D56C0 Open Bank File Async then 009A7F80 on [0x13CA79C] |
PROVEN | bbee903 / Pe_entry_is_crt_not_new_game / Install_banks_and_startup_videos_exist (MeshBank.OpenVtbl4) |
00404C00 first-seen [0x13B7CD8+8]==0 skip; 0041AFA0 packs 0041BEB0 type 0x22 (not sibling 0041BF60) dest [edx+92] this+0x15C size 0xC0 |
PROVEN | c612ad5 / same frontend test (Frontend2dLastPacker=0041BEB0, FrontendDisplayFlag=false). Type-0 stays 0041BEB0 / 0x22; type-6 host Notes 00543910 / 0x27 (a141c27 / Type6_widget_packs_00543910_type_27_not_0041BEB0). Dest leftover +204 is widget +204 (b1d6877). leave #14 open. |
00418289 dump: 00416296/00490A22 frontend+GUI gate; 009E1BC0 → [game+90544]; fade/player 004AEBA0; world 0049D9E0; vtbl+24 00416E78; 0041726D WorldFrame. START_INITIAL_QUESTS factories 00CDE2F0/00F01760/00CDBD20/00CB8690 (vtbls 012C3000/012F72D0). 006B3FF0 seed PROVEN (208); 006B63C0 bank copy 6×0x1F4 PROVEN (91). Pose leftover 006B8640/008889C0 stay UNREAD; 006B2CA0 later PROVEN (204a214). Host SeedAt(1.6m) later DISPROVEN as live New Game (204a214). FOV 72 is SHOT2 leftover; Lookout helper FOV later 70 (be3339e). Do not StartCutscene(S_PSM) from the factory ctor. |
PROVEN | 18ef09b / FORWARD_TREE.md §11 |
006B3FF0 +68 → 006B2CA0 pose (not invented SeedAt 1.6 m eye). First-seen V2/V3 (1,0,0), V4 (-1,0,0). 00A14440 normalize. Host SeedAt(1.6m) is not the New Game path |
PROVEN | 204a214 / World_camera_006B4900_slots_lerp_into_ScriptedCamera / Camera_004164E0_runs_on_install_after_WorldFrame / Load_single_thing_0051FD80_spawns_hero_at_LookoutPoint (PoseComputed, WorldCamera.PoseFn). Do not reopen #6 |
004A5A40 type-1 tick pumps 004B4490 [0x13B89FC] → 00CB8220 / 00CB7C40 / 00CB8170. First-seen QuestVtbl24Calls=0 (+41==0 takes vtbl+4 start). 006B3030 V0 spring: Weight0 stays ctor 0.2; V0 stays (1,0,0) (no invented V0). 004978A0 LCG seed UNREAD; 00A14260 yaw/pitch not applied first-seen |
PROVEN | 52e26bc / Camera_004164E0_runs_on_install_after_WorldFrame (QuestPumpRan, QuestPumpWalked>=6, FollowSpringRan, SubjectFillNoted). FORWARD_TREE §11 |
First-seen 006B3B80 skip (+460=0, qword +24 = −1.0 from [0x1236700], fcomp [0x122ED70]=0 → ret). No V0 write. Fiber +41 setter 00CB78D0 (mov al,[esp+4]; mov [ecx+41],al; ret 4). 00CB7950 clears +41 after update; first-seen stays 0. Not in factory vtbls 012C3000 / 012F72D0 / 012C3688 / 0129B938 / 012C1648 / 012C2748 |
PROVEN | fab17be / World_camera_006B4900_slots_lerp_into_ScriptedCamera (CameraTickSkipped, CameraTickTimer=-1.0, PoseTickFn) / Camera_004164E0_runs_on_install_after_WorldFrame (FiberUpdateFlagSetter) |
009DA9F0(1) first-seen empty → 009DB6E6 skip DIP. Nonempty would be 00A058C0 then [device+88].vtbl+332. No cmp …,0x22. Type-0x22 DIP is vtbl+332, not a 0x22 switch. 009D9C80 first 250: dirty-list only. Queue begin +16020. Later b1d6877 host Notes 009DA9F0(1) [+16020] empty / skip DIP: DisplayFlushShouldDip(0, 0) is always false; host never stores [this+16020]. That is stand-in, not a recovered queue read. FrontendEnqueueRan can still be true. Frontend2dDipIssued=false. Leave #36 open |
PROVEN | 6493c77 / b1d6877 / Frontend_present_runs_on_install_after_videos / Frontend_009DA9F0_first_seen_is_empty_skip_not_type_22 (DisplayQueueBeginOffset=16020, DrawIndexedPrimitiveVtbl=332, DisplayPrimitiveFn=00A058C0). leave #14 open |
0042E204 Init Engine: 00B26340 alloc 0x178 ctor 00B260B0 vtbl 012A0F3C at retail+88. 0041AFA0 [012A0F3C+92] = 00B23BC0 → 00B324A0([0x1436E80], widget+0x15C, rec, 0xC0, 0). Type [rec]=0x22 → [0x1436E84]+16+0x22*4. dest+4=0 first-seen. Handler vtbl+20 UNREAD (not memcpy +16020) |
PROVEN | d6821b8 / Frontend_0042EC7C_frame_is_input_then_0042DF9E_Present (FrontendSubmitFn=00B23BC0, FrontendSubmitDispatchFn=00B324A0, FrontendEngineVtbl=012A0F3C, FrontendEngineObjectSize=0x178). leave #14 open |
First-seen WorldCamera +6296 is the ctor axis, not the eye (IsCtorAxis). 00B314E0 consumes helper from the hero (look 006B2CA0 V4, up (0,0,1) FirstSeenCameraUp, FOV 70 from 00A0C130 / 0x3E471B48 turns). Letterbox 1024×768 (00B30B50 camera +176/+180). AABB-cull neighbour STB before height parse (00BDC2D0 / 00BF6F80). textures.h resolve cached (LevelLibrary.LandscapeEnums). Skip SetMesh/SetTextures when payload unchanged |
PROVEN | be3339e / Load_single_thing_0051FD80_spawns_hero_at_LookoutPoint / Install_banks_and_startup_videos_exist (RendererHelperBound, GameCamera.FirstSeenFovDegrees) / CameraProjectionTests (ApplyRendererHelper, LandscapeFrustum.CameraUpdate=00B314E0) / World_submit_is_stable_between_frames / BuildFrame_reuses_texture_array / Texture_decode_is_cached / Lookout_tile_origin_is_region_local / MeshBank_does_not_reparse_c3d / Native_draw_order_is_begin_layers_end_present. Do not reopen #6 / #13 |
Landscape 00BF4570 cells as persistent draws. Each STB 16 m tile is one LandscapeCell (cached on LevelLibrary). Submit builds per-cell MeshDraws; landscape and C3D on separate VBs. Concat stays a test rollup. Print LoadTiming on first New Game submit |
PROVEN | 3dba4a1 / Lookout_cells_match_stb_tiles / World_submit_is_stable_between_frames (SubmittedLandscapeCells, LastLoadTiming). First commit submitted bits 0x4/0x40; cell DIP later 0x40 only (40037b1) |
Static C3D: preserve native instance transform. C3D verts stay file-local. MeshDraw.World is the ObjectTransform 3x4 (009881F0 wrapper+496). Draw multiplies W*VP. No per-triangle bake |
PROVEN | 5e57e64 / Instance_world_is_009881f0_not_baked_verts |
Sky: submit 0x2000 midday dome on New Game. CEngineSkyRenderer GRAPHIC_ATMOSPHERIC_SKY_MIDDAY after static C3D (layer order 0x4/0x40/0x20/0x2000 at this commit). Uses SkyViewProjection |
PROVEN | 63336fd / Install_banks_and_startup_videos_exist (PassBit == 0x2000) / Native_draw_order_is_begin_layers_end_present / ScenePassTests.Registration_is_34_layers_and_walks_landscape_before_sky. PALSKIN 0x100 later (676bf63) |
PALSKIN: drain on layer 0x100 before sky. 00B33010 type-0/1 first slots use bit 0x100 (registration index 7), after static 0x20 and before sky 0x2000. 0x80/0x200 after sky later (f4a1efc) |
PROVEN | 676bf63 / Game_00435530_Presents_009BEEB0_and_pumps_input (SubmittedLayerBits) / Native_draw_order_is_begin_layers_end_present / ScenePassTests.Registration_is_34_layers_and_walks_landscape_before_sky / Instance_world_is_009881f0_not_baked_verts (static stays 0x20) |
Resources: unload region patches; one WAD for TNG. 00B40000 / 00B3EF40 release map-slot LEV/STB/cells. Banks and WAD handle stay process-lifetime |
PROVEN | 7c93828 / LevelLibrary_unload_map_drops_region_not_wad / Install_banks_and_startup_videos_exist (HasCachedCells, sky 0x2000) |
Landscape: 00BF4570 cell DIP is layer 0x40 only. Bit 0x4 is 00BF71D0 tessellator background, not the stored cell mesh |
PROVEN | 40037b1 / Lookout_cells_match_stb_tiles (LayerForeground; no LayerBackground) |
Resources: cache game.bin and meshdata.h at process lifetime. 009AD410-style: one def table, not a per-map GameBin open |
PROVEN | cf0ee50 / Install_banks_and_startup_videos_exist / LevelLibrary_reuses_lev_and_height_parses. LevelLibrary.Defs / MeshEnums |
Camera: lock 00A0C130 ctor helper and 00988A50 WVP numbers. 00A0C130 is a packer. GameCamera ctor look is +Z, up (1,1,1). 006B42F0 tail 008857E0 is bank lerp; vtbl+244 is colour-filter. Does not change the consumed first-Present helper (still UNREAD) |
PROVEN | a6f939a / CameraMatrixParityTests.GameCamera_ctor_look_default_is_plus_z / WorldCamera_tail_is_colour_filter_not_helper / GameCamera_ctor_helper_wvp_at_1024x768 / Projection_numbers_match_009883F0. Do not reopen #6 / #13 |
PALSKIN: submit file dest triangles, print load timing. MeshFile.Triangles already apply 00A9E1E0 × IBM. First-seen does not re-skin on the CPU. Hero 4299 stays on layer 0x100 |
PROVEN | cb22533 / Palskin_submit_uses_file_triangles_not_repose / Install_banks_and_startup_videos_exist (SubmittedPalskinMeshIds 4299) / World_submit_is_stable_between_frames (LastLoadTiming) |
Static C3D: one file-local VB per mesh, instance W on the draw. 00BB2540 copies locals once (shl idx,4, no matrix). 009881F0 owns the 3x4 per instance. Repeated Lookout lamps no longer duplicate the C3D soup |
PROVEN | 306e83c / Instance_world_is_009881f0_not_baked_verts (shared verts, distinct Worlds) |
Environment: bind REGION.EnvironmentTheme name, not lighting. Lookout RegionDef is ENVIRONMENT_THEME1 #2346 (same as Oakvale intro), not ENVIRONMENT_OAKVALE. Live first-seen lights stay 00B482A0 record 0 (c19/c20/c35, fog 1000/2000, packed count 0). Seven Lookout streetlamps are C3D 4978, not 2LIGHTS |
PROVEN | 4429113 / Install_banks_and_startup_videos_exist / GameBinFormatTests (AuthoredEnvironmentTheme, FirstSeenPackedLightCount) |
Scene: drain PALSKIN 0x80/0x200 after sky. 00B33010 walks slots 8+10 on bit 0x100, then sky 0x2000, then slot 14 on 0x80 and Flag1 slot 9 on 0x200. Static 0x18 stays slot 0 on 0x20. PALSKIN geometry still submits on 0x100 until type1/Flag1 routing is wired (leftover research, not a new issue) |
PROVEN | f4a1efc / Dx9VulkanParityTests / EngineLifecycleTests / ScenePassTests / WorldPipelineTests |
Hero: copy GuildArrivalHSP RHSet axes on 006AC910 spawn. Lookout start marker faces +X / +Z. #18 done. Exist set 465/465; primary C3Ds 193/193 |
PROVEN | ff808b1 / Install_banks_and_startup_videos_exist (hero ObjectTransform forward +X) |
Resources: skip unused 1 m height grid on 00BF4570 cell load. Native draw is stored STB tiles, not bilinear FineHeights. LevelLibrary reuses WLD already parsed at Init World. Open/Present records primary Graphic handles only |
PROVEN | 8bfbf39 |
PALSKIN: bind adult Hero as the script/move/draw Thing. BindScene no longer only accepts CREATURE_HERO_CHILD. 006AC910 spawn binds HERO/Hero and seeds World.Positions. PlayLoopingAnim 00CC186C now ApplyInner so ClipKey is set. Thing XYZ writable so WalkTo writes back. c38 dest upload is later GPU path (do not file). leave #19 open |
PROVEN | 27cb7ee / Install_banks_and_startup_videos_exist (Resolve HERO/Hero same as life.Hero) / PlayLoopingAnim_is_vtbl80_not_PlayAnimation (ClipKey, InnerApplied) |
Render: INNER_SKY does not write oFog. VSHADER_INNER_SKY is dp4 oPos + mov oD0, v1. D3D default oFog is 1. Applying 1000/2000 land plane to the 6500 dome made native brightness path black. Land leftover c3 unchanged. No invented ambient or extra x2 |
PROVEN | d7615a6 / GpuTextureTests / ShaderFormatTests / WorldGeometryTests |
Landscape: INDEX16 strip on the 00BFE050 mesh, DrawIndexed. 00BF4570 DIPs mesh+52/+56 (vtbl+328, type 5, prims+2), not the 72-byte cell. Bit 0x4 is still 00BF71D0, not this IB. Host unwinds strip to a list; verts unique per cell. W = I on region-local STB |
PROVEN | 35f3d20 / WorldGeometryTests |
PlayAVI: native 00628B79 dest and clear leftover frames. Scale to viewport width, center leftover height. Recreate video image when height changes so 640×400/480/360 do not share leftover rows. Clear one frame between startup videos. #11 done. leave #20 open |
PROVEN | 98c4acc / PlayAVI_00628B79_resizes_to_viewport_width_and_centers / PlayAvi_rewrites_xmv_to_installed_wmv_and_blocks |
WaitPlayAnimation 00CC18E0 plays via vtbl+72 (or vtbl+76 if IsTrue arg3) then leftover vtbl+104 |
PROVEN | 1eec3bc / WaitPlayAnimation_plays_then_polls_vtbl104 |
FORWARD_TREE PE→WinMain→no-save New Game. Mesh bank MBANK_ALLMESHES at 0049E620 / 00A09F20 / 00A27030 / 004BBFD0. Engine owns map open/close 00B40000 / 00B42750. Client must not open a second graphics.big dump |
PROVEN | f0fb184 / Pe_entry_is_crt_not_new_game / Install_banks_and_startup_videos_exist |
Game vtbl+32 00416953 is Loading world (no-save [+90588] empty skips 004A3200 Loading save). Then 004A1840 WLD/quests. 00B3E820 current handle LookoutPoint; 00B41E50 neighbours (PicnicArea); 00B420F0 name table; 00BDF010 neighbour patch. 00B42530 is STB-miss fallback only |
PROVEN | fc8b261 / same install test + Pe_entry constants |
00416953 no-save tail: path +90576 FinalAlbion.wld (Leave 0042F44D / 00415E17); 0x122EE14 updatedscenic.wld is fallback only. 004A1840 then [0x13B8648]==0 → 0049F180 / 004B4A10; 004BBC00 is ret 4. Not a region |
PROVEN | LoadWorld_00416953_no_save_is_004A1840_then_0049F180 |
004184BD after vtbl+32: 0049BA70 / 00416392 / 004AE9D0 / default_user.ini miss / user.ini 009EC890 / seed 004167DA++90592. Not first pump or region |
PROVEN | InitGame_004184BD_after_00416953_reserves_then_user_ini |
user.ini ActivateQuest("Gameflow"): 00419CE0 [world+56] 006E7740 vtbl 01260F0C+1104 00892E80 → 004B4A10 → 00CB5AD0 |
PROVEN | UserIni_009EC890_RunScript_joystick_is_00999230_miss. Direct 00CB5AD0 from user.ini DISPROVEN. |
[0x1375454]=1 .data; 004B3CE0 constructs. Gameflow 00CE6CF0/00CE75B0 Main watcher. S_GF cutscene at activate DISPROVEN. 00501450 not reached |
PROVEN | Gameflow_00CE75B0_is_Main_watcher_not_S_GF |
Type-1 00CB8220 Main 00A44880 → 00CE7670 state 0 yields on Q_NewOakValeIntro. Same walk 00CEF3B0/00CEF550 yield. No Oakvale/trader activate. 004167DA not called |
PROVEN | Type1_00CB8220_Gameflow_state0_yields_on_Q_NewOakValeIntro |
After parked watchers: [esi+56] Gameflow last; 006874B0 7×00687540(55,50) skip fire ([0x13B89BC]+50). Empty-list DISPROVEN |
PROVEN | same type-1 test |
After 006874B0: 006BB990 1/15 time; 004C5E90 ret; 006E60F0/0051F070/006E37D0 empty; 006BDC60 miss; 0043A080; 006B2260 |
PROVEN | same type-1 test |
First 00416E78 with 0049D870>1: 004457F0 then empty 00446A30 (00446330 miss, 00446220 +168=0, no 0041649C). Prefix 009A57B0 always. 00416E78 runs before 004A5E10 |
PROVEN | After_WorldFrame_gt_1_00416E78_is_004457F0_then_00446A30 |
First 00417001 WorldFrame>1: [0x13B8630]=0 → 0041707E/0049E080. 004AEA70=0 and [0x13B8688]=0 skip 00435F70. Always-Present leftover DISPROVEN |
PROVEN | After_WorldFrame_gt_1_00417001_is_0041707E_then_004AEA70_skip |
Later 004AEA70=1: Pump(0)×5 after skip then 00435F70/009BEEB0. WorldSubmitted Present gate DISPROVEN. No region |
PROVEN | After_004AEA70_eq_1_00417001_is_00435F70_Present |
First-seen 00435530 dest empty: 00434CD0→009D8250 ret; 00435000/00435070 miss; 009DA9F0 empty no DIP. Invented layer bits DISPROVEN |
PROVEN | same Present test |
Later type-1 00CB8220: 00A44880 resume, 00893610 still 0, yield. Parked-skip DISPROVEN. No Oakvale activate |
PROVEN | Type1_resume_00CB8220_is_00A44880_then_00893610_yield |
No-save does not activate Q_NewOakValeIntro. 00CD6E27 bind-only; WLD/+90584/004B5080/AddTestQuest/00896A30 are not the activator |
PROVEN | No_save_does_not_activate_Q_NewOakValeIntro |
First 004189C2 after dummy record: 0040D2A0/0040BC80/00B239A0(12,20)/009F2660. Not a region |
PROVEN | First_pump_004189C2_is_0040D2A0_then_00B239A0_not_a_region |
009A8150 names-only (RegisterRetailBankTable does not open graphics.big/textures.big). LevelLibrary caches LEV/STB/TNG parses |
PROVEN | 253126e / Install_banks_and_startup_videos_exist / LevelLibrary_reuses_lev_and_height_parses |
PresentWorld opens instances + LEV/STB headers only (expandGeometry false). 00B3EFA0 PeekMapHeader 48-byte LEV + STB size. 009AD410 handles; C3D parse is later at submit/draw. CurrentCompiledLev/CurrentHeightField null at open |
PROVEN | 17908c3 / Install_banks_and_startup_videos_exist PresentWorld asserts / Open_records_instances_without_c3d_or_tiles / PeekMapHeader_is_00b3efa0_not_full_parse |
Game pump / first region is 00DBDE40 / StartOakVale setup |
DISPROVEN | tests above |
No-save writes [record+36] |
DISPROVEN | recover-record36 text in Camera_004164E0_runs_on_install_after_WorldFrame; null still loads |
WorldMap+156 is the index field.
No-save New Game’s first real write is 1 = LookoutPoint.
No-save first rendered scene is that map’s
RegionThings plus 006B3FF0 hero camera.
First-scene intro view is still
StartOakValeWest / HerosOldHouse /
CAM_OVIF_SHOT2 / kid
(FIRST_SCENE_* — do not collapse into Lookout).
Persist name StartOakVale is index 4.
The retail New Game click/message is now
PROVEN
(0059A238 / [retail+41]).
Who writes persist PlayerRegionName is still
UNREAD.
[esi+42] load/save is
UNREAD.
00521AE0 is per-map TNG, not global-things apply.
Dependency order. Reorder only if a ledger or test disagrees.
Keep locking today’s exe facts. Do not invent an Oakvale write on the no-save path.
| Left | Status | Notes |
|---|---|---|
First non-null [NewRegion record+36] writer |
UNREAD | Null is the native no-save state |
[0x13B8630] catchup-tick writers |
UNREAD | 3 immediate sites; default 0 |
0041714D when world+164 != 0 |
UNREAD | Default New Game is world+164==0 |
Slot fields beyond +6296/+6312/+6328 (weights / +6340/+6352) |
UNREAD | Lerp into ScriptedCamera is PROVEN; first-seen Weight0 ctor 0.2 is locked (52e26bc). Leftover slot bodies are not |
00435530 overlay 00435000 / interface 00435070 bodies |
PARTIAL | Present + 009DA9F0 layer bits PROVEN; overlay/interface still Note |
Frontend 00595222 widget DIP body |
DISPROVEN as DIP | 00595222 calls [node+20].vtbl+8. Types 5/10/11/12/16/18/38 are 00530260 DrawsChildList (7adf621 / later e3208eb type 11/38). Tick/draw walk every resident [ui+84] slot (b4a2c89 / Frontend_tick_and_draw_walk_resident_ui84_slots). Resident slots 0 / 0x14 / 0x17 still MATCH 00595222 (405b1e8 / Frontend_dumps_press_start_new_profile_main_menu_after_avi_skip). Exclusive-walk leftover is STALE (tracker already done): DrawContainerWalk foreach ChildrenOf, IsPresented parent-chain Visible/Clip, ApplyFirstSeenState Visible=true on every widget (131e34d / Factory_builds_press_start_then_main_menu_from_the_same_walk locks ContainerDrawWalksEveryChild, ExclusiveWalkSelectsChild == false, Leftover46ExclusiveWalkIsStale). Skip VAs 0052F180 / 0052F1D0 stay named constants (SkipVtblsAreMethodCalls == false); that is not exclusive-walk. Do not invent DrawContainerWalk calls of those VAs. Do not file a new leftover for that unread gap. FrontendPresentBodyIsLive = true means Clear/Begin/recovered DIPUP/Present when Device is set — it does not dest-lock #14 (Native_semantic_frontend_present_builds_device_batch). 009DA9F0 flush is still Note-only (DisplayFlushQueueIsNoteOnly). dest still invented 512,384,512,384; DIP (0,0) stand-in; DisplayFlushShouldDip(0, 0) always false. Point dest still skips DIPUP (00BADB36). Type4 apply is still host dest AABB hover, not recovered current-inner 0055CB10. Clicks now exist (ClickNamed / host hit midpoint). New Profile dest/hit is host stand-in (TryChromeHit invents type-16/37 hit; GRAPHIC-name AABB is also host; leave #48 open). NativeDestTupleUnread stays true. 3D stays Compatibility host.Draw after Leave. leave #14 open. |
00B324A0 type-0x22 handler vtbl+20 |
PARTIAL | dest+4=0 only while dest is 0. Nonempty dest draw path is still 00BAE2D0 / 00BAD8A0. EnqueuesDisplayQueue still false. No E8 009DB700 (1a08cc0 / Nonempty_dest_draws_via_00BAE2D0_not_009DB700). Host Notes 009DA9F0(1) [+16020] empty stand-in (b1d6877); DisplayFlushShouldDip(0, 0) always false; host never stores [this+16020]. Type-6 host Notes 00543910 / 0x27 size 64, not 0041BEB0 / 0x22 (a141c27 / Type6_widget_packs_00543910_type_27_not_0041BEB0). Type-0 stays 0041BEB0 / 0x22. Type-6 Font 26051 is a names.bin offset that resolves to ENG_ARIAL_24, not the 0054F4B0 ENG_ARIAL_16 helper (db36334). Init Fonts ENG_ARIAL_18 at game+90444 is a different object (9901d3b). leave #36 open. |
0041AC20 dest rect from +204/+248 |
PROVEN ctor 0,0,0,0; type-6 dest (512,384,512,384) | leftover+204 GraphicIndex gate recovered (76edbbd / Leftover204_is_0041AC20_graphic_index_not_persist_size): index 0 → leftover 0. dest still invented 512,384,512,384; tests lock that dest (Frontend_0041AC20_dest_and_0xE5_new_profile_0x126_main_menu_15). Leftover +204 is widget +204, not dest width (b1d6877 / Type6_leftover204_is_widget_plus204_not_dest_width). Type-6 leftover 16×16 is gone (0 first-seen). Type-6 dest is a point at remapped origin (512,384,512,384), not ctor 0,0,0,0 (Press_Start_type6_dest_is_a_point / Frontend_PRESS_START_is_type_10_with_text_child). UI_TITLE_01 dest still from texture FrameWidth 256 (Press_Start_first_seen_dest_table_matches_0041AFA0). Leftover +204/+208 only when GraphicIndex != 0 (1a08cc0). New Profile type-2 leftover (180,0) and PlaceTableCell n==3 fill are host heuristics, not dest lock; persist-size skip / TryChromeHit / GRAPHIC-name AABB are #48 family (leave #48 open). NativeDestTupleUnread stays true (Press_Start_first_seen_dest_table_matches_0041AFA0 still 512,384,512,384). DisplayFlushShouldDip(0, 0) stand-in. leave #36 open. |
| New Game keyboard N/Enter (host stand-in) | PARTIAL | WM_CHAR is type 15; Press Start / New Profile / New Game are LMB type 4/6. Type-10 packet is widget +352, not MessageId. Type4 apply is still host dest AABB hover, not recovered current-inner 0055CB10. dest still invented 512,384,512,384 (leave #48 open). FrontendPresentBodyIsLive means Clear/Begin/recovered DIPUP/Present when Device is set — it does not dest-lock #14. Leftover14OpenForDestPresentNotes stays true. Client still has no Key.N / ActivateNewGame. Alt+Enter does not queue Enter as AVI skip (70709c1). Host current _frontendWidgets is still the switched screen (input leftover) (84a8350). New Game still not dest-locked. a02ab21 does not lock #14 dest/Present. e004fe3 SetFrontendBatch can record world verts under frontend — leftover already #14, do not file a new issue. Frontend 0042DF9E / 00595222 still Note-only. leave #14 open. |
006B8640 / 008889C0 leftover (do not write V0 first-seen) |
UNREAD | 006B2CA0 pose is PROVEN (204a214). Host SeedAt(1.6m) is DISPROVEN as live New Game. Lookout helper FOV 70 from 00A0C130 (be3339e). 00A0C130 is a packer (a6f939a); ctor look +Z, up (1,1,1). SHOT2 FOV 72 is intro-view leftover — do not collapse into Lookout. Do not reopen #6 / #13 |
| Consumed first-Present helper | UNREAD | a6f939a locks ctor packer / 00988A50 WVP / bank lerp 008857E0 / vtbl+244 colour-filter. Does not change the consumed first-Present helper. Do not reopen #6 / #13 |
004978A0 LCG seed for 006B3030 |
UNREAD | Spring ran; Weight0/V0 first-seen locked (52e26bc). Seed unread |
0055CB10 frontend player-move listener |
UNREAD | Actions 0–5 / 20–21 recorded; no recovered listener. Type4 apply is still host dest AABB hover, not recovered current-inner 0055CB10. leave #14 open. |
Game input poll 00446462 / 004963E6 |
UNREAD | e7b3c76 recover note (separate from 00446A30) |
Who writes persist PlayerRegionName on New Game |
UNREAD | Click/message path is PROVEN; persist HEADER writer is not |
[esi+42] load/save |
UNREAD | recover-00595582; [esi+41] Leave is PROVEN |
Global-things use after 004FDBC0 / .gtg parse |
UNREAD | Load switch is PROVEN; 00521AE0 is per-map TNG, not this apply |
| GTNG file body | N/A on TLC | Missing skip is PROVEN |
MiniMap 0082BA00 / villages 005064C0 bodies |
UNREAD | Named from SetRegionAsLoaded; not claimed as runtime. Loading world vtbl+32 00416953 is PROVEN (fc8b261); leftover is MiniMap/villages bodies only |
Wire persist-Oakvale (or a proven New Game region write) to FirstSceneWorld |
UNREAD | Host first-scene lists are a separate reconstructed path |
PALSKIN type1/Flag1 routing (slot 14 0x80 / Flag1 slot 9 0x200) |
UNREAD | leftover research (f4a1efc); geometry still submits on 0x100. Not a new issue |
| PALSKIN c38 dest upload | later | 27cb7ee — later GPU path; do not file |
Init Definition Manager dest [01232C24+8] |
dest UNREAD | Host Notes 0044C6B0 / 0044C72B [vtbl+8] / 009ACB10 / 009E5250 + DefinitionManagerPrepared are locked (587baae / Init_Definition_Manager_00416005_resets_plus88_via_vtbl8). dest 0044C72B as [01232C24+8] is not rdata-locked (sibling proofs/00416005-def-manager dest UNREAD). Leave #42 open. Do not call dest PROVEN. Different object from later Subtitled [0x13B8A54]. Do not invent a game.bin parser. |
| Init Thing Components further Add Def Class | leftover Note-only | Thing Components now Notes Add Def Class for CHeroMorphDef then CHighlightItemDef / CSmokeGeneratorDef / CTimeAppearanceFadeDef / CCreatureNavigationDef / CInventoryItemDef / CLookDef / CReadableDef / CVillageDef / CVillageMemberDef / CBuyableHouseDef / CBuyHouseDef / CWifeDef / CDoorDef / CLightDef / CSpotLightDef / CClockDef / CHeroDef (b7f4c34 / acfe46f / 100e5cf / 1a4c51d / ee08490 / 3a7b594 / b1d6877 / 113a514 / a141c27 / 76edbbd / 91564bd / f30c099 / 71ae66e / 405b1e8 / 46663e3 / db3899a / 065eb28 / 6577614). MATCH is Note-only + *DefClassRegistered flag, not live constructed. LoadDef field walk stays PARTIAL. Do not invent a live object. |
| Lookout/GuildArrival vs Oakvale intro view (#4) | leftover #4 | No-save first region / first rendered scene is LookoutPoint (RegionThings + 006B3FF0 / GuildArrivalHSP). First-scene intro view is still StartOakValeWest / HerosOldHouse / CAM_OVIF_SHOT2 (FIRST_SCENE_*). Do not collapse those ledgers. Do not fold first-proximity TNG (#50) into this leftover. Leave #4 open. |
| New Profile dest/hit (#48) | leftover #48 | New Profile dest/hit is host stand-in (TryChromeHit invents type-16/37 hit; GRAPHIC-name AABB is also host). dest still not dest-locked (b075dd3 … 12118bd). HEAD FrontendLayoutTests still TryChromeHitIsNativeHit == false, PlaceTableCellCount3IsNative == false. NativeDestTupleUnread stays true. Persist parse of type-12 +326=30 / Sprites / SpriteKeys == [0,1,4] is real file recover. PlaceTableCell n==3 leftover fill still host. Persist-size skip is extra host heuristic on the same helper — #48 family, not a new leftover. leave #48 open. |
| First-proximity TNG pump (#50) | leftover #50 | LoadGlobalThingsHostBreaksAfterFirstProx=false / retain-first-parsed-map. 151-slot census is not locked 004FDBC0 NewMap 1. Keep Lookout (no-save first region) vs Oakvale intro view separate. Do not fold #50 into #4. leave #50 open. |
| Exclusive-walk leftover | STALE | Exclusive-walk leftover is STALE (tracker already done). DrawContainerWalk foreach ChildrenOf, IsPresented parent-chain Visible/Clip, ApplyFirstSeenState Visible=true on every widget. Test FrontendUiDefTests.Factory_builds_press_start_then_main_menu_from_the_same_walk locks ContainerDrawWalksEveryChild, ExclusiveWalkSelectsChild == false, Leftover46ExclusiveWalkIsStale, type-18 FORREST_1 and FORREST_2 Visible, type-16 ARROWS/WASD and NORMAL/INVERTED Visible. Skip VAs 0052F180/0052F1D0 stay named constants (SkipVtblsAreMethodCalls == false); that is not exclusive-walk. Do not invent DrawContainerWalk calls of those VAs. Do not file a new leftover for that unread gap. |
Init Player Interface leftover Register(ActionInputListener) / 00488D20 notes |
leftover | Not a function; factory is Create Players. Host ctor note of 0044A3B0 under Init Player Interface is DISPROVEN (moved to Init Player Manager, 4a03969). Do not file a new issue. |
No-save WorldFrame now ticks after Create Players
(+9826=1). The Oakvale intro fiber still needs a
proven region write (persist PlayerRegionName writer
stays UNREAD) — do not invent
one on the no-save Lookout path.
Script-layer walk of CS_OAKVALE_INTRO_FATHER is already
Finished def+60. Leftover is apply/runtime, not
“map the next unread opcode.” Last persist-vector-0 command:
Hero.SneakTo MK_OVIF_HERO5,0.0,TRUE
(RegionTravel.IntroCutsceneLastCommand).
| Leftover on this fiber | Status | Where |
|---|---|---|
PlayAnimation runtime / clip sample (vtbl+72 004C7470 walk; +68 00686920 accept; 00662A00 table; 0070C050+0070D580 inner). Apply is PROVEN; first-key XSEQ sample is in PaletteForPose. Leftover is time interp 00AA0090. FirstSeenPlayAnimationAppliesPose=false |
PARTIAL | COMMAND_MAP, PARITY 0b; XSeqFormatTests |
WaitPlayAnimation leftover vtbl+104 poll (apply 00CC18E0 is PROVEN; not unread apply) |
PARTIAL | 1eec3bc / COMMAND_MAP |
Create 008A9100 / Remove 004C9B80 mesh |
UNREAD | PARITY 0b “next unread” |
| Skip-key bodies / vector 1 | UNREAD | first-seen skip does not fire |
Who writes [quest+80] / AttackOver after vtbl+2584(12) + HerosOldHouse |
UNREAD | not a mov in 00DBDE00–00DBF000 |
LookToThing / LookInDirection heading bodies |
PARTIAL | record + yield / no yaw write |
MuteSounds apply; DoCameraPreloading vtbl+1560/1568 |
PARTIAL | |
Dialogue UI (Speak / InteractiveSpeak / DialogSpeak) |
PARTIAL | one yield; no invented UI |
SneakTo / WalkTo mesh move (004C72B0 stub) |
PARTIAL | FirstSeenSneakToAppliesMove=false. Dest via 006A9960 / World.Positions is PROVEN (666df8f); Thing XYZ writable so WalkTo writes back (27cb7ee); mesh body is not. |
PlayCombatAnimation pose |
PARTIAL | vtbl+76 does not read the name |
call [vtbl+8] resume site; vtbl+28 yield body; Main 00CDD440 |
UNREAD | PARITY 0b |
Startup AVI client Present is blit-only 006286F0 MATCH |
PARTIAL | leftover #20. Unload 00A3B380/00A3BC20 before next slot is recovered (0ace433 / PlayAvi_rewrites_xmv_to_installed_wmv_and_blocks). Startup AVI client Present is blit-only 006286F0 MATCH (Draw(default) / playAviOnly). Remaining leftover #20 is Game-stage: PumpGame still walks 00435530 because 006286F0 does not own that pump. 41e97c9 is in-game skip (Game_PlayAVI_006286F0_polls_the_retail_skip_scan). Startup still Draw(default). Does not lock #20. Do not treat FABLE_SKIP_STARTUP_AVI as a 3D Draw fix. leave #20 open. |
WmvPlayer never QIs IBasicAudio (native 00A3B9D0 does) |
PARTIAL | leftover #9. Host NAudio FrontendAudioPlayer (Intro.ogg / Frontend.lug CS_GUI_1/2) does not lock leftover #9 or leftover #15 (Init Sound 00417A58) |
DoScriptFrame / PlayAVI / cameras / fades are
PROVEN at the script layer.
PlayAVI dest vs 1600×900 (#8) is done. Native
00628B79 dest + recreate-on-height (#11) is done
(98c4acc). Unload
00A3B380/00A3BC20 before the next slot is now
recovered (0ace433). Startup AVI client Present is
blit-only 006286F0 MATCH (Draw(default) /
playAviOnly). Remaining leftover #20 is Game-stage:
PumpGame still walks 00435530 because
006286F0 does not own that pump. 41e97c9
is in-game skip
(Game_PlayAVI_006286F0_polls_the_retail_skip_scan).
Startup still Draw(default). Does not lock #20.
Do not treat
FABLE_SKIP_STARTUP_AVI as a 3D Draw fix. leave #20
open. IBasicAudio (#9) stays a
PARTIAL leftover. Host
frontend audio (Intro.ogg / Frontend.lug)
does not lock leftover #9 or leftover #15. Do not invent
fade/AVI/wake playback beyond those bodies.
Only items already listed. No visual guesses. From FIRST_SCENE_AUDIT.md “UNREAD leftover (do not invent)” and the contract STATE table:
ALPHATESTENABLE / ALPHAREF / ALPHAFUNCFILLMODE / COLORWRITEENABLE first-seen writesZENABLE / ZWRITE SetRenderState sitec0/c1/c2 bank values and quality bit0x400000 sky (not submitted)
TEMPORARY stand-ins
(LINEAR/REPEAT, MaxLod=1, Z test+write on) stay classified.
PlayAVI script apply is PROVEN; dest vs
Silk.WindowOptions.DefaultVulkan 1600×900 (#8) is done.
Native 00628B79 dest + recreate-on-height (#11) is done
(98c4acc). Unload-before-next-slot is recovered. Startup AVI
client Present is blit-only 006286F0 MATCH
(Draw(default) / playAviOnly). Remaining leftover #20 is
Game-stage: PumpGame still walks 00435530
because 006286F0 does not own that pump.
41e97c9 is in-game skip
(Game_PlayAVI_006286F0_polls_the_retail_skip_scan).
Startup still Draw(default). Does not lock #20. Do not treat
FABLE_SKIP_STARTUP_AVI as a 3D Draw fix. leave #20 open.
IBasicAudio (#9) stays a PARTIAL leftover.
Host frontend audio (Intro.ogg /
Frontend.lug) does not lock leftover #9 or
leftover #15.
Steam timing is PARITY Open item 0, not a first-scene 3D invent.
README item 1, after a ticking world. First-seen wake lines
(CS_WAKING_UP_*) need the clock; create still has
FirstSeenPlaysAnim=false.
| Left | Status |
|---|---|
| Animation resource lookup | UNREAD / PARTIAL |
| Clip first-key sample | in PaletteForPose (00A999B0 / 00AA4680 / 00A4C5E0); leftover is time interp 00AA0090 |
| Skeletal pose | UNREAD (FirstSeenPlayAnimationAppliesPose=false) |
| PALSKIN dest beyond file triangles | first-seen dest is MeshFile.Triangles (00A9E1E0 × IBM, cb22533); no CPU re-skin. Play-anim product is not. Type1/Flag1 routing stays UNREAD (f4a1efc). c38 dest upload is later GPU path (27cb7ee; do not file) |
| # | Area | Status |
|---|---|---|
| 2 | Movement / navigation / entity task completion | PARTIAL (dest+gait recovered; vtbl+20 stub) |
| 3 | Dialogue / voice / audio lifecycle | PARTIAL (session recorded; UI/voice unread) |
| 4 | Generic quest lifecycle beyond S_QNOVI | PARTIAL |
| 5 | Create / remove ownership | PARTIAL (script record; mesh unread) |
| 6 | Runtime effects / lights / state → Vulkan | PARTIAL |
| 7 | Remaining world / shader / state | see phase 3 |
PlayAVILadyGreyIntro / boss UNREAD tokensThe boot-first sequence holds. Corrections from the repo:
RegionThings
+ 006B3FF0 hero camera). Oakvale is persist-name
index 4 or the first-scene intro view contract
(StartOakValeWest / HerosOldHouse /
CAM_OVIF_SHOT2 / kid). Do not collapse that into
Lookout. New Game click is PROVEN; persist
PlayerRegionName writer is not.
006B2CA0 first-seen pose is now PROVEN
(204a214); invented SeedAt(1.6m) is
not the New Game path. Lookout helper FOV is 70 from
00A0C130 (be3339e);
00A0C130 is a packer (a6f939a).
Consumed first-Present helper stays UNREAD — do not reopen
#6 / #13. SHOT2 FOV 72 stays intro-view leftover.
006B8640/008889C0 leftover UNREAD.
Frontend 00595222 is the resident-slot
vtbl+8 DrawsChildList walk (7adf621 /
b4a2c89).
FrontendPresentBodyIsLive means
Clear/Begin/recovered DIPUP/Present when Device is
set — it does not dest-lock #14. WM_CHAR is type 15;
Press Start / New Profile / New Game are LMB type
4/6. Type-10 packet is widget +352, not MessageId.
Type4 apply is still host dest AABB hover, not
recovered current-inner 0055CB10. leave #14
open. Host current _frontendWidgets is
still the switched screen (input leftover)
(84a8350). 3D stays Compatibility
host.Draw after Leave. F2 fly is Game-only.
Press Start 0xE5 is slot
0x14 0059B5D7
(59fde69). [ui+84] keeps
0x14/0x17 across switch
(84a8350). +332 via
SelectState(6) is not a +302 hide
(b8a2b21). Init World 004A67D0
/ 004A6E30 run inside 0041735A
before 00417418.
Recent commits 951b7f2 …
12118bd lock ExeIndex evidence
exporters + persist Layer recover, scene-capture
tool / retain-first-parsed-map, authored intro
dialogue/audio + kid spawn on StartOakVale,
UpdateAtClock + live actor MeshDraw refresh,
intro-father parent continuation +
sortDraws:false + present semaphore, in-game
PlayAVI skip, and QuestLifecycleRuntime /
S_QNOVI post-cutscene map. MATCH for named-stage Add Def Class is still
Note-only + *DefClassRegistered flag, not a
live constructed object. dest 0044C72B as
[01232C24+8] is not rdata-locked. leave #42
open. Different object from later Subtitled
[0x13B8A54]. Init Player Interface still
leftover Register(ActionInputListener) /
00488D20 notes. Host ctor note of
0044A3B0 under Init Player Interface is
DISPROVEN (moved). dest still invented
512,384,512,384; DIP (0,0) stand-in;
DisplayFlushShouldDip(0, 0) always false;
009DA9F0 flush is still Note-only
(DisplayFlushQueueIsNoteOnly). Point dest
still skips DIPUP (00BADB36).
Exclusive-walk leftover is STALE (tracker already
done). Skip VAs 0052F180 /
0052F1D0 stay named constants
(SkipVtblsAreMethodCalls == false); that
is not exclusive-walk. New Profile dest/hit is host
stand-in (TryChromeHit invents type-16/37
hit; GRAPHIC-name AABB is also host).
NativeDestTupleUnread stays true. Host
frontend audio does not lock leftover #15 or leftover
#9. leave #48 open.
LoadGlobalThingsHostBreaksAfterFirstProx=false
/ retain-first-parsed-map. 151-slot census is not
locked 004FDBC0 NewMap 1. leave #50 open.
Do not collapse no-save first
region LookoutPoint vs first-scene Oakvale intro view
(leave #4 open). dest invented 512,384,512,384. leave
#36 open. #5 grok-goal dump still written. Do not
re-file. Startup AVI client Present is blit-only
006286F0 MATCH (Draw(default)
/ playAviOnly). Remaining leftover #20 is Game-stage:
PumpGame still walks 00435530
because 006286F0 does not own that pump.
41e97c9 is in-game skip
(Game_PlayAVI_006286F0_polls_the_retail_skip_scan).
Startup still Draw(default). Does not lock
#20. Do not treat FABLE_SKIP_STARTUP_AVI as a
3D Draw fix. leave #20 open. a02ab21
does not lock #14 dest/Present. e004fe3
SetFrontendBatch can record world verts
under frontend — leftover already #14, do not file a
new issue. Frontend 0042DF9E /
00595222 still Note-only.
FrontendDisplayCursorRan stays false.
leave #14 and #20 open
(also leave #36 #42 #48 #50 open). Also leave leftover
#4 #5 #9 #12 #15 #17 #19 open. Do not reopen #8. Do
not reopen #46.
New Game submit now walks
0x4/0x40/0x20/0x100/0x2000
(676bf63); cell DIP is 0x40 only
(40037b1).
#11 done (98c4acc recreate-on-height +
00628B79 dest). #18 done
(ff808b1 RHSet +X). Lookout EnvironmentTheme is
ENVIRONMENT_THEME1 #2346, not
ENVIRONMENT_OAKVALE. Do not collapse Oakvale intro
view into Lookout.
00521AE0 loads the current map .tng.
LoadGlobalThingsHostBreaksAfterFirstProx=false /
retain-first-parsed-map. 151-slot census is not locked
004FDBC0 NewMap 1. leftover #50 stays open and
is not folded into #4.
Remaining UNREAD is global-things use
after 004FDBC0 / .gtg parse, plus
[record+36] and catchup-tick writers.
When this page and a ledger disagree, the ledger wins.