Commit Graph
196 Commits
Author SHA1 Message Date
Jonas Volman a752a2c276 Harden Fable backlog admission metadata 2026-09-02 18:16:34 -07:00
Jonas Volman 1ad3149426 Recover small rasterizer environment functions 2026-09-02 18:09:18 -07:00
Jonas Volman 77cee5677c Reconcile Fable models exact wave 2026-09-02 15:15:36 -07:00
Jonas Volman 9ab48c9f6c Reconcile Fable frame statistics wave 2026-09-02 10:33:39 -07:00
Jonas Volman 83684c1e23 Snapshot Fable frame statistics wave for salvage 2026-09-02 10:32:58 -07:00
Jonas Volman 60957d0cb2 Recover remaining small HUD frontier 2026-09-02 04:42:30 -07:00
Jonas Volman 0bf42e4377 Correct lightning color prototype ownership 2026-09-02 03:47:23 -07:00
Jonas Volman 93d9f9687b Reconstruct and park lightning renderer 2026-09-02 03:47:23 -07:00
Jonas Volman faaa1a93f9 Recover small object lights functions 2026-09-02 02:17:22 -07:00
Jonas Volman ea987520fc Reconstruct structure detail objects 2026-09-01 23:45:22 -07:00
Jonas Volman ccc148aa99 Reconstruct tiny Main geometry and input routines 2026-09-01 18:18:07 -07:00
Jonas Volman c59115611b Reconcile rasterizer geometry closeout 2026-09-01 16:34:34 -07:00
Jonas VolmanandClaude Fable 5 7185b5997f Match rasterizer_geometry compress/uncompress_vertices and the vertex structs
Both bulk converters are strict exact first landing: compress_vertices
736/736 and uncompress_vertices 1088/1088. The object now has ZERO unwritten
functions - 16/19 strict exact plus the 3 parked scheduling ties - up from
9/19 at the start of the session. Board 4,827 -> 4,829 functions and
668,055 -> 669,879 strict code bytes; no other object moved.

Four vertex structs are recovered from the indexing and the stride table:
environment_vertex_uncompressed (56), environment_lightmap_vertex_
uncompressed (20), model_vertex_uncompressed (68) and
model_vertex_compressed (32). The switch uses the _rasterizer_vertex_type_*
enum constants, and prototypes for both functions now live in
rasterizer_geometry.h.

Records a PRESERVED ORIGINAL BUG rather than shipping it silently: the model
node weight is stored by compress with compress_real_to_int16_clamp as a
full 16-bit value (mov word ptr [edi+0xe], ax) but read back by uncompress
as its low byte only (movzx edx, byte ptr [edi+0xe]) and rescaled by 1/255,
so the round trip does not recover the stored weight. Verified against
January's bytes on both sides before concluding it was original rather than
a reconstruction error, and annotated in source with the corrected-build
alternative.

Only extra COMDAT versus January is _fast_ftol; no function is missing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 13:17:05 -07:00
Jonas VolmanandClaude Fable 5 0ec8e6d3a3 Reconstruct uncompress_int32_to_real_vector3d; park three scheduling ties
uncompress_int32_to_real_vector3d is now written: 144/144 padded bytes, 9/9
relocations with identical destinations, 49/49 instructions. The sole
divergence is one dependency-free transposition - January emits
fadd __real@3f800000 before shl eax,0x16 and we emit them swapped, which
also shifts that relocation's address by three bytes.

The shape that got the frame right was a local real_vector3d copied out
through *result, not three scalar reals: sub esp,0xc is the vector, and
naming three scalars lets VC7 fold them away (112 bytes). Bit fields are
11/11/10 with 2^-20 and 2^-21 pre-scales and 1/2047 and 1/1023 scales,
reached by destructive shifts so the shr sequence matches.

Per the new house rule - fuzzy match and park when easy byte matching is not
achievable - this function and the two vector3d compressors are now parked
as instruction-scheduling ties. All three meet the parking standard: exact
padded size, relocation count and destinations, full instruction-count
parity, a precisely classified single divergence, and an exhausted set of
legal-C controls recorded in each entry. Fuzzy: 95.0, 96.35, 94.8.

Parked audit 15 active / 0 stale / 0 invalid; the build gates on parked
evidence and passes. Board unchanged for every other object.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 13:16:54 -07:00
Jonas Volman a7018e7464 Use the real type in rasterizer geometry 2026-09-01 13:16:49 -07:00
Jonas VolmanandClaude Fable 5 c4e2e783f5 Reconstruct the rasterizer_geometry vector3d compress pair
compress_real_vector3d_to_int32 (544) and _clamp (512) are now written and
measure size exact, relocations exact 38/38 address-for-address, 181/181 and
164/164 instructions, differing only by one transposition. NOT exact, no
credit claimed.

Recovered from January's bytes: 11/11/10-bit fields with 1023.5f/511.5f
scales and 0x7ff/0x3ff masks; pack ((k << 11) | j) << 11 | i; a
SELF-REFERENCING round-trip copy through one local (&v2 in, *result back
into v2); the assert message goes through the global temporary with a format
that is exactly 36 bytes including NUL, which is what pins 0x%x%x%x rather
than a spaced form. The clamp twin folds PIN into the same multiply.

Two spellings bracket the target: one local gives the correct sub esp,0x10
frame but an interleaved copy (10 insns off), while a separate decompressed
local gives the correct grouped aliasing-safe copy but a 12-byte-too-large
frame (2 bytes off). January needs both. The one-local form is landed
because a frame-size mismatch is structural under the campaign's
frame-layout law, so the byte-closer variant is the wrong reconstruction.

Copy-schedule variants measured inert: named pointer, inner-scoped pointer,
declaration order, and combinations. Naming the packed value regresses to
528 bytes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 13:16:00 -07:00
Jonas VolmanandClaude Fable 5 992a24d674 Match the rasterizer_geometry compress_real_to_intN family
Four previously unwritten functions strict exact on first compile:
compress_real_to_int8 (96B), _int8_clamp (80B), _int16 (112B), _int16_clamp
(96B). Object 9/19 -> 13/19; board 4,822 -> 4,826 functions and 667,591 ->
667,975 strict code bytes, with no previously exact function changed.

These are the oracles the fast_ftol attribution predicted - each ends in
fld <param>; fistp <local>, which no ordinary C conversion emits under this
compiler - so they were unreachable until the helper was admitted today.
January pins two details: the scaled value is reassigned into the PARAMETER
rather than a fresh local, and the clamp variants fold PIN into the same
multiply-and-store statement. The int16 pair round through
(real)floor(z * 32767.5f).

get_vertex_size is blocked by a header disagreement, recorded rather than
forced: January asserts type < 12 and indexes a 12-entry table, while the
repository enum has 18 members after importing six later types. The
recovered table is in the ledger for whoever corrects the enum under a full
board rebuild.

uncompress_int32_to_real_vector3d is fully decoded but left unwritten: two
spellings give 128 and 112 bytes against January's 144, which stages results
through float locals. Not landed non-exact.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-01 13:15:52 -07:00
Jonas Volman 0428bdbb36 Reconstruct transparent geometry lifecycle 2026-08-31 22:56:36 -07:00
Jonas Volman 40a912a2fa Reconstruct uncover and cinematic functions 2026-08-31 22:03:12 -07:00
Jonas Volman 9f74e9937f Import 909 authenticated January and HCEA symbol names 2026-08-31 16:11:03 -07:00
Jonas Volman f708e2e183 Recover bitmap format bit depth lookup 2026-08-31 05:10:02 -07:00
Jonas Volman 37947362e4 Remove fake Active Camouflage wrapper matches 2026-08-30 22:14:36 -07:00
Jonas Volman b2a9a060fe Park Chicago shader preprocessing without fake matching 2026-08-30 21:58:15 -07:00
Jonas Volman 0b86790bfa Recover Xbox hardware bitmap upload cluster 2026-08-30 15:14:23 -07:00
Jonas Volman fb894613df Match rasterizer widget z-buffer state 2026-08-30 02:09:52 -07:00
Jonas Volman 0564e17a46 Match rasterizer decals flush 2026-08-30 01:49:18 -07:00
Jonas Volman de927b7202 Match rasterizer decal vertex delete 2026-08-30 01:42:27 -07:00
Jonas Volman cb56786803 Match rasterizer profile debug gate 2026-08-29 21:12:22 -07:00
Jonas Volman 556d4658c4 Match rasterizer profile enable 2026-08-29 20:55:15 -07:00
Jonas Volman 06b8664f28 Match cinematic screen-effect parameter getter 2026-08-29 14:16:56 -07:00
Jonas Volman 74eeadef77 ai: reconstruct AI debug exact checkpoint 2026-08-29 11:00:04 -07:00
Jonas Volman 6a1c13bb60 Recover rasterizer model begin 2026-08-29 07:59:42 -07:00
Jonas Volman 391a1e19c6 Recover rasterizer model end 2026-08-29 07:49:38 -07:00
Jonas Volman 9117b690d7 Recover rasterizer models lifecycle 2026-08-29 07:45:18 -07:00
Jonas Volman d19b85a3fb Recover rasterizer FPS accumulation 2026-08-29 07:29:40 -07:00
Jonas Volman a35ebf2050 Recover rasterizer screen effect start 2026-08-29 07:19:25 -07:00
Jonas Volman 023471de05 Recover rasterizer cinematics time and allocator 2026-08-29 07:15:56 -07:00
Jonas Volman cd2b8f1fe5 Recover rasterizer near clip getter 2026-08-29 07:04:30 -07:00
Jonas Volman f7d0acb137 Complete detail object XDK wrapper closure 2026-08-29 05:31:31 -07:00
Jonas Volman bc5abdda3a Recover detail object draw path 2026-08-29 05:19:19 -07:00
Jonas Volman 198c77a61e Recover detail object begin and rebuild path 2026-08-29 04:31:17 -07:00
Jonas Volman 18a4680f0a Match Xbox decal disposer 2026-08-29 01:02:27 -07:00
Jonas Volman 1c7eda8c3f Match Xbox detail-object lifecycle 2026-08-29 00:43:58 -07:00
Jonas Volman d8c2433265 Match rasterizer ambient reflection tint 2026-08-28 23:43:45 -07:00
Jonas Volman 9121ff09ac Match three rasterizer and camera leaves 2026-08-28 23:26:26 -07:00
Jonas Volman d1e66d0c60 Match transparent geometry successor lookup 2026-08-28 23:09:43 -07:00
Jonas Volman c8c40b2cea Advance three objects with exact public leaves 2026-08-28 17:34:21 -07:00
Jonas Volman c89a3f3086 Recover transparent geometry next group 2026-08-27 07:09:54 -07:00
Jonas Volman aef287edab Recover transparent geometry auxiliary disposal 2026-08-27 03:17:08 -07:00
Jonas Volman 12a9f9840e Recover transparent geometry vector offset 2026-08-27 03:14:04 -07:00