17 KiB
breakable_surfaces.obj exact-match strategy log
Scope and provenance
- Source TU:
source/physics/breakable_surfaces.c - Target object:
source/physics/breakable_surfaces.obj - Target build: Halo January 2002 Xbox build
- Compiler: XDK 3911 Microsoft C/C++ 13.00.9254.1
- Flags:
/O2 /Oy- /Ow /QIfist /DDEBUG /Dxbox - Comparator: hardened COFF function and section comparison
- Status: rigorously fuzzy-parked at the current natural-source frontier; no strict matching credit has been granted
The rough October source at
C:\Users\isabe\Downloads\halo-main (1)\halo-main\src\halo\physics\breakable_surfaces.c
is a topology hint only. January machine code, relocations, and data ownership
remain authoritative.
Current validated state
- Functions:
11/12strict exact. - Only residual:
_breakable_surface_effect. - Target/current padded size:
0xFC0/0xFC0(4032/4032). - Target/current relocations:
117/117, with the same semantic destinations. - Target/current frame:
0x1240/0x1240. - Target normalized SHA-256:
510486a7d0a1f2fc1dfb8f0c47990c57f83ce1030ef5e4db8dfc42943dc56bfa - Current normalized SHA-256:
678a8125d160643a9f1226240128c662bcbb85e7f968f8fd3ed0f0b411f77797 - All 11 protected sibling functions remain strict exact.
The current source is the 2026-08-31 Claude reconstruction reconciled against the current shared headers and September house rules. It supersedes the E09 traversal/audio scratch union checkpoint described below. The older experiment ledger remains here because it is still useful negative evidence.
Historical checkpoint controls (superseded)
E09 and E18 were legitimate intermediate evidence, but they are no longer the
production source shape. The final reconciliation recovered the later natural
block lifetimes and the same rectangle2d field meanings without retaining the
scratch union.
E09: traversal/audio scratch union
January reuses one 0x58-byte region for traversal scratch and the later
sound_location. The retained C89 union models the measured layout:
- traversal
s_offset,t_offset, two projected points, and eight 2D vertices; - audio view with
sound_locationat union offset0x2C; - both views end at the same byte.
This is defined lifetime-based storage reuse, not aliasing or byte padding.
E18: rectangle2d grid bounds
Replacing four unrelated short locals with rectangle2d grid_bounds moved
the candidate from 0xF90 to the exact target size 0xFC0 while preserving
117/117 relocations and every exact sibling.
The native structure layout is exactly the order proved by January:
| Structure field | January meaning | January home |
|---|---|---|
grid_bounds.y0 |
t_min |
-0x5C |
grid_bounds.x0 |
s_min |
-0x5A |
grid_bounds.y1 |
t_max |
-0x58 |
grid_bounds.x1 |
s_max |
-0x56 |
This is an evidence-backed type recovery and remains in production even though the function is not yet exact.
Current stack/codegen finding
E18 makes every large aggregate start exactly 16 bytes above the January home:
| Region | Target | E18 |
|---|---|---|
surface_queue[1024] |
-0x1240 |
-0x1230 |
surface_vertices3d[8] |
-0x240 |
-0x230 |
| traversal/audio scratch | -0x1E0 |
-0x1D0 |
new_particle_data |
-0x188 |
-0x178 |
The missing 16 bytes are four January dword integer-conversion homes. For each grid bound January emits:
call _ceil/_floor
fstp dword ptr [ebp-real_home]
add esp, 8
fld dword ptr [ebp-real_home]
fistp dword ptr [ebp-distinct_integer_home]
mov r16, word ptr [ebp-distinct_integer_home]
mov word ptr [ebp-grid_bound], r16
E18 instead emits fistp qword to one shared compiler temporary. The target
therefore rounds through single precision and owns four distinct dword
conversion homes; the present compiler forwards through every normal
readable-C spelling tested.
Experiment matrix
Every reverted experiment preserved all 11 exact siblings unless explicitly noted.
| ID | Source or compiler experiment | Result | Decision |
|---|---|---|---|
| E01 | Move position and position_2d_test inward |
byte-neutral | reverted |
| E02 | Move both vertex arrays into the while scope |
byte-neutral | reverted |
| E03 | Declare the 2D vertex array later | byte-neutral | reverted |
| E04 | Remove the duplicate queue-read shadow | byte-neutral | reverted |
| E05 | Hoist random offsets to function scope | byte-neutral | reverted |
| E06 | One named real between ceil/floor and cast |
byte-neutral; store forwarded | reverted |
| E07 | Group grid bounds and loop indices | byte-neutral | reverted |
| E08 | True sibling traversal/audio scopes | frame 0x1228; proved lifetime reuse |
superseded by E09 |
| E09 | Meaningful 0x58 C89 scratch union |
size 0xF90, frame 0x122C |
retained |
| E10 | Remove explicit long from the grid casts |
byte-neutral | reverted |
| E11 | Static grid-index helper | caller byte-neutral; unwanted helper COMDAT | reverted |
| E12 | Named real plus four named long homes |
optimizer eliminated homes | reverted |
| E13 | Aggregate containing rounding/conversion fields | optimizer eliminated homes | reverted |
| E14 | Address escape / compiler-barrier shape | did not produce target chain | reverted |
| E15 | Conversion-home array plus barrier | did not produce target chain | reverted |
| E16 | Pointer helper plus barrier | did not produce target chain | reverted |
| E17 | __forceinline float ceil/floor wrappers |
caller byte-neutral; two unwanted COMDATs | reverted |
| E18 | Native rectangle2d grid_bounds |
exact 0xFC0, 117/117; correct bound layout |
retained |
| E19 | real_rectangle2d staging plus E18 |
byte-identical to E18 | reverted |
| E20 | Four named long homes plus E18 | byte-identical to E18 | reverted |
| E21 | Historical function-scope bounds plus long loop indices |
regressed to 0xF70; hash f32f3d8f... |
reverted |
| E22 | Move only rectangle2d grid_bounds to function scope |
byte-identical to E18 | reverted |
| E23 | Change only the two grid loop indices to long |
same 0xF70 regression as E21 |
reverted |
| A01 | Compile E18 as C++ (/TP) |
function byte-neutral; decorated symbols | analysis only |
| A02 | /TP with explicit ceilf/floorf |
unwanted helpers; caller byte-neutral | analysis only |
| A03 | Remove /Ow |
byte-neutral | analysis only |
| A04 | Enable /Op |
4320 bytes, 114 relocs; broad regression |
rejected |
| A05 | Minimal direct/named/four-value float-to-short fixtures | every form collapsed to shared fistp qword; no target motif |
analysis only |
| A06 | Four legal union-backed long/short conversion objects | also collapsed to shared fistp qword |
analysis only |
Corpus and compiler audits
- A relocation-aware scan of all 833 January split objects found the complete
float-home conversion motif only eight times: four here and four in
nonexact
_build_structure_lens_flares. - A scan of 467 rebuilt base objects found zero occurrences.
_build_structure_lens_flaresis not a reconstructed-C donor: target/base is4336/4000bytes and156/157relocations.- All locally available compatible compiler sets are byte-identical VC7 13.00.9254.1 binaries. No alternate compatible compiler/QFE is locally available.
- Upstream history commit
95e6477328dd7742175074de5eab0a20c3e7bde0provided a real source-shape lead: function-scope bounds andlonggrid indices. E21-E23 showed that bound scope is neutral and the historicallongindex type causes the same0xF70regression, so it is not the January topology. - The reproducible
round_probe.cfixture proves that direct, named-real, named-long, four-output, and four-longs-first forms all lower through one sharedfistp qwordhome under the campaign compiler.
Reproducible evidence is under
research/breakable_surfaces_closeout/, especially
STACK_SLOT_LIFETIME_MAP.md and donor_census/REPORT.md.
Do not repeat
- E01-E17 and E19-E23, including cosmetic variations with equivalent lifetimes.
- C++ mode,
ceilfwrappers,/Owremoval, or/Op. - Adding guessed padding merely to force the missing 16 frame bytes.
- Treating
_build_structure_lens_flaresas an exact donor. - Inline assembly,
volatilebyte forcing, undefined behavior, object-byte patches, or compiler-flag changes.
2026-07-28 provenance audit: January PDB, HCEX PDB, and local source corpus
A second provenance pass found a strong source-semantics lead but no new legal-C code-generation lever.
January PDB negative result
C:\Users\isabe\Downloads\Halo Combat Evolved (Jan 14, 2002 prototype)\cachebeta.pdb
names \halo\objects\halobetacache\breakable_surfaces.obj as module stream
154. The complete module stream is only 132 bytes: one S_OBJNAME record,
one compiler record (Microsoft (R) Optimizing Compiler), and four zero tail
bytes. It contains no function, local, type, or line records, so it cannot
recover the grid-bound declarations, any rounded real, or the four
conversion homes. The raw compiler record must not be treated as proof of an
unrecorded precision flag.
HCEX source-line and code-generation evidence
The later debug and release symbol files are:
C:\Users\isabe\Documents\Codex\2026-07-13\i-w\research\hcea_jun2011_prototype\payload\Halo CE Anniversary (Jun 24 2011)\HCEX.pdbC:\Users\isabe\Documents\Codex\2026-07-13\i-w\research\hcea_jun2011_prototype\payload\Halo CE Anniversary (Jun 24 2011)\HCEX_Release.pdb
They identify breakable_surface_effect as source
d:\projects\code\hcex\sources\physics\breakable_surfaces.c, source MD5
CEACA3EE6F74879855CD2005D8B6C1AC. Debug RVA/length/frame are
0x00D0C1A0/0xE68/0x1360; release RVA is 0x01743190 with the same
length/frame. Neither PDB contains injected source.
DIA line records map the four bounds to four consecutive source statements:
lines 423-426 are the two ceil assignments followed by the two floor
assignments; line 421 is the nonzero-density test and line 440 begins the
grid loop. There are no intervening source lines for a separate named-real
assignment/conversion pair. The surviving named-local records also contain
no rounded-real/grid aggregate or scalar grid-bound names, although
optimized-away locals cannot be ruled out from that absence alone.
PowerPC disassembly of the decoded debug image at flat RVA 0xD0C924 is
stronger semantic evidence. Each libm result is immediately rounded from
double to float with frsp (first at 0xD0C954), then converted with
fctiwz/stfd and sign-extended to a short; the four results remain scalar
GPR values. This is consistent with four direct
(short)(real)ceil/floor(...) assignments and inconsistent with a required
separate named real statement. PowerPC cannot distinguish the optional
intermediate (long) because both int and long are 32-bit there.
Source-corpus and macro negatives
A hash census of 747 local breakable_surfaces.c files found 11 unique
contents and no copy matching HCEX MD5
CEACA3EE6F74879855CD2005D8B6C1AC. Repository history contains
reconstruction commits only, not an authentic Bungie source blob. The
October file at
C:\Users\isabe\Downloads\halo-main (1)\halo-main\src\halo\physics\breakable_surfaces.c
is a decompiler reconstruction: it defines replacement breakable_floor and
breakable_ceil functions and has grid comments/order inconsistent with the
machine-code topology, so its named float val is not provenance.
The active type and macro audit found typedef float real in
source/math/real_math.h and ordinary ternary PIN in
source/cseries/cseries.h; no real-to-short rounding macro exists in the
recovered source. The closest source sibling,
source/structures/structure_lens_flares.c, spells all four bounds directly
as (short)(real)ceil/floor(PIN(...)), and its January target has the same
float-home conversion motif, but that function is itself nonexact and cannot
serve as a strict donor.
Verdict and do-not-repeat expansion
The highest-likelihood original spelling is four direct scalar assignments
with an explicit (real) cast, probably without the reconstruction-only
(long). That spelling, named-real forms, named-long homes,
aggregates/arrays, address escapes, helpers/wrappers, scope changes, C++
mode, and precision-flag probes have already been measured and do not make
the campaign VC7 emit January's chain. No genuinely untried legal-C
hypothesis now satisfies the reopen criterion. Do not repeat the
January-PDB private-record search, HCEX injected-source/source-hash search,
October-source audit, macro/type audit, or local source-hash census; reopen
only if an authentic source blob, a distinct compatible compiler/QFE, or a
strict donor artifact appears.
Residual classification
Compiler-precision/provenance fixed point. Size, call set, relocation count, recovered grid type, and large aggregate layout are strongly supported. January has a repeated single-precision rounding and four-home conversion topology that the current VC7 binary does not emit from any tested legal-C shape. This is not strict exactness and receives no completion credit.
Reopen/continuation criteria
Reopen only with evidence for one of:
- an original October/January/HCEX source or debug topology that explains
the intermediate
realmaterialization; - a strict reconstructed-C donor for the complete conversion motif;
- a genuinely new legal-C dataflow that predicts both the
fstp/fldsingle-precision round trip and four distinct dword homes.
Disposition
NonMatching / rigorously parked at 11/12 exact functions. E09 and E18 were
evidence-backed improvement checkpoints, not object completion. The newer
reconciliation below is authoritative. Do not mark the object complete or
grant credit from equal size or semantic plausibility.
2026-09-01 Claude-frontier and house-rule reconciliation
Corpus audit
The closeout reviewed all 1,648 registered worktrees and reduced their
breakable_surfaces.c files to twelve distinct source variants. The unique
complete frontier was the history on claude/breakable-surfaces-20260830, in
particular commits 7fbe2a94d, a324c519b, 39207d9ec, a5af3125d,
ba1109b49, and 230dc0af0. It was checked against the separate
exact-breakable-surfaces-closeout lane, the canonical/object log history,
research/breakable_surfaces_closeout/, the January target, the HCEX PDB and
PowerPC implementation, the HCEA donor, the October reconstruction, and the
local same-compiler donor census. No worktree contained a later credible
frontier.
The retained source recovers the complete surface traversal and projection,
particle-grid generation, outward/forward impulse shaping, particle tint and
alpha evaluation, and optional break sound. It also retains the evidence-backed
natural block scopes, rectangle2d grid bounds, real_point3d vertex lvalues,
semantic private helper names, grouped j/k plane-distance association, and the
target alpha multiplication order. The old duplicate TU-local conversion
helper was removed: all four conversions now use the authenticated shared
fast_ftol in source/cseries/cseries.h. That two-instruction x87 helper is
independently corroborated by the HCEX PDB and January's
actor_combat.obj, and is within the house rule allowing sparse assembly in a
math/helper primitive.
Inline ownership
Calling the shared header point_from_line3d directly leaves a candidate-only
COMDAT even though January owns none in this object. The production source
therefore uses a transparent, coordinate-for-coordinate scalar expansion of
that header body. Its semantic local bindings model the inline function's
parameters, preserve the exact 0x1240 frame and 0xFC0 padded envelope, and
emit no _point_from_line3d symbol or COMDAT. Plain direct statements also
remove the COMDAT, but make VC7 collapse the function to 0xFB0; that less
faithful schedule was rejected. No forced-inline/noinline attribute, pragma,
volatile access, barrier, assembly in the effect routine, or fake dependency
is retained.
Final measurements and residual
- Strict gate:
11 exact / 1 residual / 0 unwritten. _breakable_surface_effect: target/current padded size4032/4032.- Frame: target/current
0x1240/0x1240. - Relocations:
117/117; relocation types and symbolic destinations occur in the same sequence. - Freshly regenerated campaign-report fuzzy similarity:
99.8042%. - Target normalized SHA-256:
510486a7d0a1f2fc1dfb8f0c47990c57f83ce1030ef5e4db8dfc42943dc56bfa. - Candidate normalized SHA-256:
678a8125d160643a9f1226240128c662bcbb85e7f968f8fd3ed0f0b411f77797. - All eleven sibling functions and the object's owned data remain strict exact.
The aligned 1,156-target/1,155-candidate instruction diff reduces the genuine
code differences to two small x87 regions: commutative operand-role selection
in one cross_product3d expansion around target offsets 0x37B-0x392, and
an equivalent fxch/load/pop stack schedule in the first scalar-expanded grid
offset around 0x97D-0x9B1. More than seventy ordinary-C declaration, scope,
association, helper, operand-order, and compiler-shape probes either returned
to this fixed point or degraded broader code. Relocation-name differences shown
by the historical aligned-diff utility are annotation artifacts; the hardened
COFF comparison resolves their symbolic destinations.
Final disposition
This is the most complete authentic, house-rule-compliant source currently
available, but it is not byte exact and earns no strict completion credit. It
is evidence-parked as instruction-scheduling. Reopen only for authoritative
January source/local records, an authenticated compatible compiler/QFE, or a
natural same-compiler donor that explains the remaining x87 operand and stack
choices.