New strict exact:
ai/actor_type_flood :: _actor_type_flood_desire_shamble 1296 (object now 2/2)
units/vehicles :: _update_human_plane_physics 928
ai/path_smoothing :: _find_tangent_point 336 (object now 6/6)
OWNER ADMISSION (2026-09-21), quoted: "Sufficient: admit the class. Require a
genuine shared-header __inline, byte-identical COMDAT, strict-exact caller, full
ownership/build sweep, and zero regressions. No hand expansions."
Each landing newly emits ONE header-inline COMDAT that January's split credits
to another object. Conditions verified per landing by scratch/orch/admit_check.py:
_real_random_range 32 B math/real_math.h January owner ai/action_alert byte-identical
_interpolate_scalar 64 B math/real_math.h January owner game/player_control byte-identical
_set_real_point2d 32 B math/real_math.h January owner ai/path_obstacles byte-identical
All three callers are strict exact; no hand expansion is used anywhere in them.
The evidence the owner accepted:
(1) Compiler (scratch/orch/inline_lab.py): VC7 13.00.9254 with the campaign's
real flags (/O2 /Oy- /DDEBUG /Dxbox) emits the out-of-line COMDAT for a
non-static __inline whose EVERY call site inlined, and emits nothing when
the inline is unused - so emission implies use in that TU.
(2) January's own image (scratch/orch/inline_owner_census.py): of 104
header-inline COMDATs, 65 are owned - per January's PDB section
contributions - by an object that holds ZERO references to them (e.g.
_cross_product2d in actor_combat.obj). Owners cluster at the earliest
link-order TUs, as "folded survivor = first emitter" predicts. The split's
single definition is therefore a link-fold artifact, not evidence that the
other TUs did not emit the COMDAT.
Source evidence (all read from the first-party /Od build first, then confirmed
in January's bytes):
- _actor_type_flood_desire_shamble: result/switching flags zeroed at the top, all
six `result = FALSE` arms, chain-assigned counters, `--timer == 0`, per-arm
two-argument helper calls, MAX with double evaluation; `< 15.0f` confirmed by
January's `test ah,5`. real_random_range is byte-REQUIRED (a hand expansion
measures 1280 != 1296; January shows the inlined parameter temporaries).
- _update_human_plane_physics: uses the real interpolate_scalar helper.
- _find_tangent_point: every call is a real real_math.h helper including
set_real_point2d; store-by-store spellings are residual and worse than baseline.
Held alongside (NOT landed): _update_alien_fighter_physics_new (1,088, exact in
scratch) - needs a NEW 3D->2D view cast whose site is not /Od-attested; owner:
"keep the fighter held".
Config: config/parked.json - _actor_type_flood_desire_shamble entry removed
(now exact). Parks 173 / 0 / 0. No header, symbols.json, flag or tool change.
Verification: full ninja all_source progress semantic_progress pass (Code
1451421 -> 1453966, 7306 -> 7309). stable_verdicts vs the FROZEN baseline:
gained 18 / 10128 bytes, regressions 0. All 11,060 function and 1,706 section
report rows: 0 lost 100%, 0 missing. Guard, fake scan, line endings and the
new-punning-cast screen clean. git diff --check clean.
Reviewer: independent adversarial agents confirmed each body EXACT and credible
and held them ONLY on the ownership question the owner has now ruled on.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Halo 1 decompilation

This is a work-in-progress decompilation of Halo: Combat Evolved build 2342 (cachebeta.exe, sha256 4cc87b45f721270392a96f1674ed2b5cd4a7bb4355faeab4531d1cf1884d9520).
Agent quick references
- Current campaign house rules and batch/treemap cadence
- Common constants, types, float patterns, tag IDs, and flag conventions
- Shared assertion macros and byte-matching examples
- Supplied CE source maps, recovered names, and next reconstruction packets
- Matching methodology and source-credibility rules
Build instructions
You must source the Halo 1 PAL debug build and the August 2001 Xbox SDK yourself. You also need ninja-build on your PATH.
Extract the XDK/xbox folder from the installer into the repository root such that xbox/{bin,include} are valid paths. Place cachebeta.exe from the Halo 1 build into your repository root. Navigate to the repository and run configure.py in the terminal.
Then, use ninja build to compile the game and report progress statistics, or open the cachebeta.sln VS2022 project under projects on Windows.
Where's all the type information?
We use debug symbols from later Halo games to help map structures, enums, type definitions, function signatures and some variable names. You should obtain a copy of the Halo CEA beta and run it through pdb-decompiler to obtain debug info for yourself. Note that CEA is based off of Halo PC and has its own modifications which make it not 100% accurate to the original Xbox title.