diff --git a/config/config.json b/config/config.json index 17a78fca..b928f182 100644 --- a/config/config.json +++ b/config/config.json @@ -383,7 +383,7 @@ { "name": "source/sound/sound_scenery_group.c", "index": 8, "status": "Matching" }, { "name": "source/sound/sound_scenery.c", "index": 9, "status": "Matching" }, { "name": "source/sound/sound_preferences.c", "index": 10, "status": "Matching" }, - { "name": "source/sound/sound_manager.c", "index": 11, "status": "NonMatching" }, + { "name": "source/sound/sound_manager.c", "index": 11, "status": "Matching" }, { "name": "source/sound/sound_environment_definitions.c", "index": 12, "status": "Matching" }, { "name": "source/sound/sound_dsound_xbox.c", "index": 13, "status": "Matching" }, { "name": "source/sound/sound_definitions.c", "index": 14, "status": "Matching" }, @@ -404,18 +404,18 @@ { "name": "source/cache/xbox_sound_cache.c", "index": 29, "status": "NonMatching" }, { "name": "source/cache/predicted_resources.c", "index": 30, "status": "Matching" }, { "name": "source/cache/physical_memory_map.c", "index": 31, "status": "Matching" }, - { "name": "source/cache/cache_files_windows.c", "index": 32, "status": "NonMatching" }, + { "name": "source/cache/cache_files_windows.c", "index": 32, "status": "Matching" }, { "name": "source/cache/cache_files_decompress_windows.c", "index": 33, "status": "Matching" }, { "name": "source/cache/cache_files.c", "index": 34, "status": "Matching" }, { "name": "source/units/vehicles.c", "index": 35, "status": "NonMatching" }, { "name": "source/units/vehicle_definitions.c", "index": 36, "status": "Matching" }, - { "name": "source/units/units.c", "index": 37, "status": "NonMatching" }, + { "name": "source/units/units.c", "index": 37, "status": "Matching" }, { "name": "source/units/unit_scripting_commands.c", "index": 38, "status": "Matching" }, { "name": "source/units/unit_dialogue.c", "index": 39, "status": "Matching" }, { "name": "source/units/unit_definitions.c", "index": 40, "status": "Matching" }, { "name": "source/units/dialogue_definitions.c", "index": 41, "status": "Matching" }, { "name": "source/units/bipeds.c", "index": 42, "status": "NonMatching" }, - { "name": "source/units/biped_limp_noodle.c", "index": 43, "status": "NonMatching" }, + { "name": "source/units/biped_limp_noodle.c", "index": 43, "status": "Matching" }, { "name": "source/units/biped_definitions.c", "index": 44, "status": "Matching" }, { "name": "source/text/unicode.c", "index": 45, "status": "Matching" }, { "name": "source/text/text_group.c", "index": 46, "status": "Matching" }, @@ -425,7 +425,7 @@ { "name": "source/tag_files/tag_groups.c", "index": 50, "status": "Matching" }, { "name": "source/tag_files/tag_files_xbox.c", "index": 51, "status": "Matching" }, { "name": "source/tag_files/tag_files.c", "index": 52, "status": "Matching" }, - { "name": "source/tag_files/files_windows.c", "index": 53, "status": "NonMatching" }, + { "name": "source/tag_files/files_windows.c", "index": 53, "status": "Matching" }, { "name": "source/tag_files/files.c", "index": 54, "status": "Matching" }, { "name": "source/structures/structures.c", "index": 55, "status": "NonMatching" }, { "name": "source/structures/structure_visibility.c", "index": 56, "status": "Matching" }, @@ -434,7 +434,7 @@ { "name": "source/structures/structure_lens_flares.c", "index": 59, "status": "NonMatching" }, { "name": "source/structures/structure_detail_objects.c", "index": 60, "status": "Matching" }, { "name": "source/structures/structure_bsp_definitions.c", "index": 61, "status": "Matching" }, - { "name": "source/structures/leaf_map.c", "index": 62, "status": "NonMatching" }, + { "name": "source/structures/leaf_map.c", "index": 62, "status": "Matching" }, { "name": "source/structures/detail_object_definitions.c", "index": 63, "status": "Matching" }, { "name": "source/structures/cluster_partitions.c", "index": 64, "status": "Matching" }, { "name": "source/structures/radiosity/radiosity_io.c", "index": 65, "status": "Matching" }, @@ -456,7 +456,7 @@ { "name": "source/render/render_sprite.c", "index": 81, "status": "NonMatching" }, { "name": "source/render/render_sky.c", "index": 82, "status": "Matching" }, { "name": "source/render/render_particles.c", "index": 83, "status": "Matching" }, - { "name": "source/render/render_objects.c", "index": 84, "status": "NonMatching" }, + { "name": "source/render/render_objects.c", "index": 84, "status": "Matching" }, { "name": "source/render/render_media.c", "index": 85, "status": "Matching" }, { "name": "source/render/render_detail_objects.c", "index": 86, "status": "Matching" }, { "name": "source/render/render_debug.c", "index": 87, "status": "NonMatching" }, @@ -482,7 +482,7 @@ { "name": "source/rasterizer/xbox/rasterizer_xbox_vertex_shaders.c", "index": 107, "status": "Matching" }, { "name": "source/rasterizer/xbox/rasterizer_xbox_transparent_geometry.c", "index": 108, "status": "Matching" }, { "name": "source/rasterizer/xbox/rasterizer_xbox_text.c", "index": 109, "status": "Matching" }, - { "name": "source/rasterizer/xbox/rasterizer_xbox_shadows.c", "index": 110, "status": "NonMatching" }, + { "name": "source/rasterizer/xbox/rasterizer_xbox_shadows.c", "index": 110, "status": "Matching" }, { "name": "source/rasterizer/xbox/rasterizer_xbox_screen_effect.c", "index": 111, "status": "Matching" }, { "name": "source/rasterizer/xbox/rasterizer_xbox_profile.c", "index": 112, "status": "NonMatching" }, { "name": "source/rasterizer/xbox/rasterizer_xbox_plasma_energy.c", "index": 113, "status": "Matching" }, @@ -512,7 +512,7 @@ { "name": "source/physics/collision_models.c", "index": 137, "status": "Matching" }, { "name": "source/physics/collision_model_definitions.c", "index": 138, "status": "Matching" }, { "name": "source/physics/collision_features.c", "index": 139, "status": "NonMatching" }, - { "name": "source/physics/collision_debug.c", "index": 140, "status": "NonMatching" }, + { "name": "source/physics/collision_debug.c", "index": 140, "status": "Matching" }, { "name": "source/physics/collision_bsp_definitions.c", "index": 141, "status": "Matching" }, { "name": "source/physics/collision_bsp.c", "index": 142, "status": "NonMatching" }, { "name": "source/physics/bsp3d.c", "index": 143, "status": "Matching" }, @@ -521,7 +521,7 @@ { "name": "source/objects/scenery_group.c", "index": 146, "status": "Matching" }, { "name": "source/objects/scenery.c", "index": 147, "status": "Matching" }, { "name": "source/objects/placeholder_definitions.c", "index": 148, "status": "Matching" }, - { "name": "source/objects/objects.c", "index": 149, "status": "NonMatching" }, + { "name": "source/objects/objects.c", "index": 149, "status": "Matching" }, { "name": "source/objects/object_types.c", "index": 150, "status": "Matching" }, { "name": "source/objects/object_shadows.c", "index": 151, "status": "Matching" }, { "name": "source/objects/object_lights.c", "index": 152, "status": "NonMatching" }, @@ -533,7 +533,7 @@ { "name": "source/objects/widgets/widgets.c", "index": 158, "status": "Matching" }, { "name": "source/objects/widgets/lightning_definitions.c", "index": 159, "status": "Matching" }, { "name": "source/objects/widgets/lightning.c", "index": 160, "status": "NonMatching" }, - { "name": "source/objects/widgets/light_volumes.c", "index": 161, "status": "NonMatching" }, + { "name": "source/objects/widgets/light_volumes.c", "index": 161, "status": "Matching" }, { "name": "source/objects/widgets/light_volume_definitions.c", "index": 162, "status": "Matching" }, { "name": "source/objects/widgets/glow_definitions.c", "index": 163, "status": "Matching" }, { "name": "source/objects/widgets/glow.c", "index": 164, "status": "NonMatching" }, @@ -557,7 +557,7 @@ { "name": "source/networking/network_client_manager.c", "index": 182, "status": "Matching" }, { "name": "source/models/models.c", "index": 183, "status": "Matching" }, { "name": "source/models/model_definitions.c", "index": 184, "status": "Matching" }, - { "name": "source/models/model_animations.c", "index": 185, "status": "NonMatching" }, + { "name": "source/models/model_animations.c", "index": 185, "status": "Matching" }, { "name": "source/models/model_animation_definitions.c", "index": 186, "status": "Matching" }, { "name": "source/memory/texture_page.c", "index": 187, "status": "Matching" }, { "name": "source/memory/stack_memory_pool.c", "index": 188, "status": "Matching" }, @@ -626,7 +626,7 @@ { "name": "source/interface/ui_widget.c", "index": 251, "status": "NonMatching" }, { "name": "source/interface/terminal.c", "index": 252, "status": "Matching" }, { "name": "source/interface/progress_bar.c", "index": 253, "status": "NonMatching" }, - { "name": "source/interface/player_ui.c", "index": 254, "status": "NonMatching" }, + { "name": "source/interface/player_ui.c", "index": 254, "status": "Matching" }, { "name": "source/interface/overhead_map.c", "index": 255, "status": "Matching" }, { "name": "source/interface/meters.c", "index": 256, "status": "Matching" }, { "name": "source/interface/meter_definitions.c", "index": 257, "status": "Matching" }, @@ -641,7 +641,7 @@ { "name": "source/interface/unit_hud_interface_definition.c", "index": 266, "status": "Matching" }, { "name": "source/interface/motion_sensor.c", "index": 267, "status": "NonMatching" }, { "name": "source/interface/hud_weapon.c", "index": 268, "status": "NonMatching" }, - { "name": "source/interface/hud_unit.c", "index": 269, "status": "NonMatching" }, + { "name": "source/interface/hud_unit.c", "index": 269, "status": "Matching" }, { "name": "source/interface/hud_sounds.c", "index": 270, "status": "Matching" }, { "name": "source/interface/hud_nav_points.c", "index": 271, "status": "NonMatching" }, { "name": "source/interface/hud_messaging_definitions.c", "index": 272, "status": "Matching" }, @@ -738,7 +738,7 @@ { "name": "source/camera/following_camera.c", "index": 363, "status": "Matching" }, { "name": "source/camera/flying_camera.c", "index": 364, "status": "Matching" }, { "name": "source/camera/first_person_camera.c", "index": 365, "status": "Matching" }, - { "name": "source/camera/editor_flying_camera.c", "index": 366, "status": "NonMatching" }, + { "name": "source/camera/editor_flying_camera.c", "index": 366, "status": "Matching" }, { "name": "source/camera/director.c", "index": 367, "status": "Matching" }, { "name": "source/camera/dead_camera.c", "index": 368, "status": "NonMatching" }, { "name": "source/camera/camera_track_definitions.c", "index": 369, "status": "Matching" }, @@ -802,7 +802,7 @@ { "name": "source/ai/path_smoothing.c", "index": 427, "status": "NonMatching" }, { "name": "source/ai/path_obstacles.c", "index": 428, "status": "NonMatching" }, { "name": "source/ai/path_obstacle_avoidance.c", "index": 429, "status": "NonMatching" }, - { "name": "source/ai/path.c", "index": 430, "status": "NonMatching" }, + { "name": "source/ai/path.c", "index": 430, "status": "Matching" }, { "name": "source/ai/encounters.c", "index": 431, "status": "Matching" }, { "name": "source/ai/ai_script.c", "index": 432, "status": "Matching" }, { "name": "source/ai/ai_scenario_definitions.c", "index": 433, "status": "Matching" }, @@ -828,7 +828,7 @@ { "name": "source/ai/actor_perception.c", "index": 453, "status": "NonMatching" }, { "name": "source/ai/actor_moving.c", "index": 454, "status": "NonMatching" }, { "name": "source/ai/actor_looking.c", "index": 455, "status": "NonMatching" }, - { "name": "source/ai/actor_firing_position.c", "index": 456, "status": "NonMatching" }, + { "name": "source/ai/actor_firing_position.c", "index": 456, "status": "Matching" }, { "name": "source/ai/actor_definitions.c", "index": 457, "status": "Matching" }, { "name": "source/ai/actor_combat.c", "index": 458, "status": "NonMatching" }, { "name": "source/ai/actions.c", "index": 459, "status": "NonMatching" }, diff --git a/config/object_admission_rejections.json b/config/object_admission_rejections.json index be086318..4d7a4f8a 100644 --- a/config/object_admission_rejections.json +++ b/config/object_admission_rejections.json @@ -1,30 +1,6 @@ { "version": 1, "entries": [ - { - "unit": "source/objects/objects", - "class": "candidate-only-comdat-owner", - "symbol": "_point_in_sphere, _real_random, _signed_angular_difference, _valid_real_vector3d, _valid_real_vector3d_axes2", - "reason": "All January target functions and owned data now match, but five candidate-only shared helpers conflict with hand-written no-duplicates providers in path_obstacles, action_charge, player_control and bored_camera. Exact target bytes and the corrected private symbols do not establish safe whole-object linkage.", - "evidence": "docs/object_matching_logs/claude_data_ownership_closeout_20260924.md", - "reopen": "Replace the conflicting hand-written providers with genuine shared-header uses, retain every exact caller, and prove compatible ordinary provider links in both orders before admitting the object. Do not credit the candidate-only copies." - }, - { - "unit": "source/structures/leaf_map", - "class": "candidate-only-comdat-owner", - "symbol": "_distance3d", - "reason": "All 25 target functions and target-owned data sections are exact, including two newly closed callers. But the real shared-header distance3d use emits a candidate-only 64-byte SELECT_ANY copy whose instruction SHA differs from January's selected ActionVehicle NODUP copy. Ordinary LeafMap/ActionVehicle links fail with LNK2005 in both orders. A global source-body correction makes the copies identical but loses two inherited exact functions and stales a parked function, so it was rejected. The exact callers and verified data retain their separate credit; whole-object completion does not.", - "evidence": "docs/object_matching_logs/claude_object_closure_canonical_reconciliation_20260924.md#distance3d-provider-conflict", - "reopen": "Recover a genuine shared distance3d source/header spelling and inline schedule that yields January's selected COMDAT without any exact sibling loss or stale park; verify all real_math.h consumers and ordinary links. Do not suppress emission, force inline, or attribute candidate-only helper bytes to LeafMap." - }, - { - "unit": "source/units/biped_limp_noodle", - "class": "candidate-only-comdat-owner", - "symbol": "_distance3d", - "reason": "All six target functions remain strict exact, but this Matching label also emitted the same candidate-only 64-byte SELECT_ANY distance3d copy that differs from January's selected ActionVehicle NODUP provider. Ordinary link compatibility is not established; the global real_math.h correction fails the whole-board no-regression and parked-function gates. Function credit remains; whole-object completion is held.", - "evidence": "docs/object_matching_logs/claude_object_closure_canonical_reconciliation_20260924.md#distance3d-provider-conflict", - "reopen": "Use the same authentic, board-wide no-regression provider repair as LeafMap and prove ordinary selected-provider links in both orders before restoring Matching." - }, { "unit": "source/rasterizer/xbox/rasterizer_xbox_profile", "class": "candidate-only-comdat-owner", @@ -49,30 +25,6 @@ "evidence": "docs/object_matching_logs/hud_draw_obj_two_exact_leaves_integration_20260904.md#complete-owner-boundary", "reopen": "Require authentic source topology or an ordinary base/base link with an authenticated compatible canonical selected helper before clearing this veto. Do not force inline, manually expand math, alter target/COMDAT metadata, invent a discard pass, or credit candidate-only helper bytes. All remaining HUD Draw functions/data/linkage/source checks must independently pass before whole-object Matching." }, - { - "unit": "source/interface/hud_unit", - "class": "candidate-only-comdat-owner", - "symbol": "_fast_ftol", - "reason": "The new source-authentic renderer naturally emits an unreferenced select-any32-byte fast_ftol copy absent from January HUD Unit. Its body equals January's selected Actor Combat helper, but that selected owner is no-duplicates and the prior ordinary XDK link test rejects the duplicate. Genuine initializer/data credit and the honest renderer park remain valid; identical helper bytes do not prove whole-object ownership.", - "evidence": "docs/object_matching_logs/hud_unit_obj_renderer_integration_20260904.md#honest-residual-and-complete-owner-boundary", - "reopen": "Remove only after authentic source topology preserves the January helper schedule without extra emission, or an ordinary base/base link proves a compatible authenticated canonical selected owner can coalesce the copy. Do not force inline, manually expand the helper, alter comparator/selection metadata, invent a discard pass, or count another object's selected bytes. The renderer must independently become strict and all other source/data/linkage checks must pass before Matching admission." - }, - { - "unit": "source/interface/player_ui", - "class": "source-layout-incomplete", - "symbol": "struct playlist_profile", - "reason": "All42 target functions and target data are strict exact, but the public playlist_profile is only forward-declared by its owner header while Player UI defines a local partial view with an opaque0x47-byte middle misleadingly called unused. Those bytes hold real January variant state; the complete authentic January public layout is not yet recovered. Exact code/data alone cannot certify this source as a completed object. The reviewed ordinary typed-loop, enum/macro and game_variant storage cleanups remain valid and receive independent function credit.", - "evidence": "docs/object_matching_logs/player_ui_obj_owner_house_rule_reconciliation_20260904.md#remaining-source-boundary-and-reopen-condition", - "reopen": "Authenticate the full January playlist-profile layout and place shared declarations in their genuine owner without opaque fake padding or transplantation of the incompatible later152-byte format. Preserve inherited exact functions across affected callers and finish the documented natural select-any string ownership/coalescing audit before whole-object admission. Do not debit valid target-function progress for this separate source-layout veto." - }, - { - "unit": "source/units/units", - "class": "candidate-only-comdat-owner", - "symbol": "_point_from_line3d", - "reason": "The rebuilt translation unit emits a 48-byte select-any _point_from_line3d COMDAT absent from the January units split, while January's selected action_charge owner is no-duplicates. All 189 January units functions remain strict exact, including the two authentic external calls from _unit_cause_continuous_melee_damage; the surplus owner is a separate whole-object admission failure under the explicit no-emission house rule.", - "evidence": "docs/object_matching_logs/shared_inline_helper_admission_audit_20260904.md#units-point_from_line3d-owner", - "reopen": "Remove only after source-authentic header/declaration topology preserves all 189 exact target functions and the two January external calls while preventing units.obj from emitting _point_from_line3d. Linker discard alone does not waive the explicit no-emission house rule; do not expand the two external calls or use forced inline/noinline, pragmas, assembly, or byte-shaping." - }, { "unit": "source/effects/decals", "class": "candidate-only-comdat-owner", diff --git a/config/parked.json b/config/parked.json index 23b56797..7b799f37 100644 --- a/config/parked.json +++ b/config/parked.json @@ -128,11 +128,11 @@ "base": { "size": 384, "relocation_count": 27, - "normalized_sha256": "839937d5e05bba8840732fd3c229c8f0829b7b35c43bcf2391c459165baaf3c0" + "normalized_sha256": "bbb652e083aadc92e51e4445f93d49d41941e7c53f50cc1883658c355aa579cb" }, - "objdiff_percent": 88.40708 + "objdiff_percent": 88.451324 }, - "evidence": "Best currently integrated house-rule-compliant reconstruction from the 2026-09-07 PlayerProfile/S3TC reconciliation batch. Keep the genuine thread callback, mutex/file/checksum/metadata lifecycle and typed 512-byte file block, with initialized padding rather than serializing stack bytes. See docs/object_matching_logs/player_profile_s3tc_batch_reconciliation_20260907.md for donor provenance, raw-target limits, full-batch review and research pointers. Zero exact credit; retain for future evidence-driven work without source-pressure tuning." + "evidence": "Best currently integrated house-rule-compliant reconstruction from the 2026-09-07 PlayerProfile/S3TC reconciliation batch. Keep the genuine thread callback, mutex/file/checksum/metadata lifecycle and typed 512-byte file block, with initialized padding rather than serializing stack bytes. See docs/object_matching_logs/player_profile_s3tc_batch_reconciliation_20260907.md for donor provenance, raw-target limits, full-batch review and research pointers. Zero exact credit; retain for future evidence-driven work without source-pressure tuning. 2026-09-24 (fifty-objects lane batch 4b): re-baselined after the reviewed zero-credit packet; see docs/object_matching_logs/claude_fifty_objects_20260925.md." }, { "unit": "source/saved games/player_profile", @@ -262,25 +262,6 @@ "objdiff_percent": 98.53933 } }, - { - "unit": "source/tag_files/files_windows", - "function": "_file_get_size", - "class": "unclassified", - "evidence": "Complete typed path/attribute lookup, low-size return and natural file_error call. Same padded size and relocation count; info-pointer lifetime/register differences remain. No proven narrow compiler recipe, allocation search, fake operations, raw offsets, assembly or forced inline. Reopen on authentic source or family API evidence. See docs/object_matching_logs/files_windows_obj_small_family_wave_20260904.md.", - "measurements": { - "target": { - "size": 224, - "relocation_count": 13, - "normalized_sha256": "3e237cfe3e76e06d034d1b64effb416e37dfb3694bfa56ca1d16cd16cfba958f" - }, - "base": { - "size": 224, - "relocation_count": 13, - "normalized_sha256": "d26fde60720be6198f891f7f8e4688b9a5617339aa8b8f4d1d314522ece62a27" - }, - "objdiff_percent": 85.75325 - } - }, { "unit": "source/effects/player_effects", "function": "_player_effect_get_camera_effect_matrix", @@ -436,25 +417,6 @@ "objdiff_percent": 99.43569 } }, - { - "unit": "source/objects/widgets/light_volumes", - "function": "_light_volume_render", - "class": "tu-context-optimization", - "evidence": "Fuzzy-parked under the current house rule after the complete source-history and worktree census, the authenticated HCEA renderer/interpolator/type records at commit 570c83fd9c365dad6f2a3e7041705d5b84c7847c, the January disassembly, and the recorded bounded legal-C experiment families were rechecked from canonical ec4ae894a. The retained typed C implements the complete marker, view-angle, distance-fade, object-function, sprite-count, exponent, color-interpolation, and rasterizer path without fake steering. January emits a 912-byte function with a 0xA4 frame; VC7 emits 928 bytes with a 0xA8 frame. Both have 47 relocation types and destinations in the same semantic order. The remaining structural boundary is January's immediate 1.0f distance-fade store interleaved with the marker delta and its compact x87-valued inlined pow1 joins, while the available compiler materializes an earlier distance-fade local and memory phis for the later exponent results. Statement-position, scope, helper-edge, conditional-expression, direct-consumption, loop-count/divisor, HCEA-topology, compiler-version, and donor-branch families either reproduce this fixed point or lose the proven frame/relocation topology. No volatile access, register hint, barrier, assembly, raw offset, representation cast, undefined behavior, fake dependency, or nonsensical branch is retained. Reopen only for authoritative January source/local records, a natural same-compiler donor that distinguishes the x87 lifetime, or a genuinely distinct authentic VC7/QFE compiler.", - "measurements": { - "target": { - "size": 912, - "relocation_count": 47, - "normalized_sha256": "2e43dbc111ad125565ead94aff803117a92a3bb3215d18254e28281e204d0031" - }, - "base": { - "size": 928, - "relocation_count": 47, - "normalized_sha256": "a4e273c7939882fcf1dadf774289b21742f1f88e718136216c33eaf04d55a94f" - }, - "objdiff_percent": 75.711266 - } - }, { "unit": "source/structures/structure_lens_flares", "function": "_build_structure_lens_flares", @@ -797,25 +759,6 @@ "objdiff_percent": 51.18261 } }, - { - "unit": "source/cache/cache_files_windows", - "function": "_cache_files_open_cache_files", - "class": "unclassified", - "evidence": "Fuzzy-parked under the current house rule with the full cache-file startup loop retained as ordinary typed C. January's 47-relocation call graph, file/API constants, assertions, diagnostic strings, cache-file layout, and the surrounding HaloCEA cache subsystem establish the behavior: delete the sentinel slot, open each cache file, preserve correctly sized existing files, rewrite stale files asynchronously, truncate them to the configured size, install the handle, validate cached headers against the DVD checksum/build, and clear invalid slots. Target and candidate share the 752-byte padded envelope and all 47 relocation identities; objdiff reports 83.333336 percent similarity. The residual is broad VC7 basic-block and register scheduling, especially cold CreateFile/setup-failure placement and the post-open validation path, without evidence for a unique source rewrite. No goto reshaping, raw offsets, volatile/register forcing beyond the real asynchronous completion flag, barrier, pragma, assembly, fake dependency, forced inline, or nonsensical success path is retained. Reopen for authoritative January source/local records or a natural same-compiler donor that explains the cold-block layout. Re-measured 2026-09-16: the exact static helper cached_map_block_on_async_request now snapshots the completion flag, reproducing January's double volatile load at this inlined wait tail (0x17a/0x17d); the body is otherwise unchanged and still non-exact (752 bytes / 47 relocations; alndiff 48 -> 36 differing target instructions; the CreateFileA-failure vassert placement remains).", - "measurements": { - "target": { - "size": 752, - "relocation_count": 47, - "normalized_sha256": "f1c88310c585856cc88840f5dfa06dfa579231bca2e1f57c06cf7d00803c7a3f" - }, - "base": { - "size": 752, - "relocation_count": 47, - "normalized_sha256": "54553053bda7f8841b99fe7fffbc35e44c8f97490433028ff6256b33840d2abd" - }, - "objdiff_percent": 85.32895 - } - }, { "unit": "source/rasterizer/xbox/rasterizer_xbox_lights", "function": "_rasterizer_sun_glow_draw", @@ -854,25 +797,6 @@ "objdiff_percent": 96.43883 } }, - { - "unit": "source/rasterizer/xbox/rasterizer_xbox_shadows", - "function": "__rasterizer_environment_shadow_model_draw", - "class": "instruction-scheduling", - "evidence": "Fuzzy-parked with the complete typed January model-shadow draw path reconstructed from target disassembly and relocations, January's shader/debug/statistics fields, and the independently corresponding HaloCEA shader-model behavior. The retained routine verifies model shaders and geometry, chooses culling and alpha-test texture state from named flags, evaluates the texture animation with the cached model parameters, uploads the three vertex constants, draws the complete static triangle buffer, and updates model-shadow statistics. Target and candidate both occupy 688 padded bytes with all 48 relocation types and destinations, and objdiff reports 97.95 percent similarity. The remaining difference is two dependency-independent scheduling transpositions around one fld/fmul pair and the neighboring constant-buffer address materialization; no behavior or call is absent. Bounded natural declaration, initialization, and include-set probes did not change that scheduler fixed point. No volatile/register forcing, barrier, pragma, assembly, fake dependency, raw offset, forced inline, or nonsensical control flow is retained. Reopen only for authoritative January source/local records or a natural compatible-compiler donor explaining those two independent instruction placements.", - "measurements": { - "target": { - "size": 688, - "relocation_count": 48, - "normalized_sha256": "366f4471c47176709d6d1469a6ef998e1b248296a375b8cb8e8192c734341c9c" - }, - "base": { - "size": 688, - "relocation_count": 48, - "normalized_sha256": "c81ae7e554a892d0f30600ed846a2585dbd904d74b628c472219ed77a5fb6489" - }, - "objdiff_percent": 97.948715 - } - }, { "unit": "source/hs/hs_runtime", "function": "_hs_evaluate_begin_random", @@ -1006,25 +930,6 @@ "objdiff_percent": 95.47282 } }, - { - "unit": "source/objects/damage", - "function": "_object_damage_body", - "class": "unclassified", - "evidence": "Fuzzy-parked under the current house rule after reconstructing the complete body-damage stage in ordinary typed C. January COFF is the byte and ABI authority; independent HCEA source and Stian's PC lift corroborate occupied-only damage, falling-damage difficulty handling, friendly resistance, headshots, regional damage and destruction, deathless-player child traversal, body thresholds, localized and area effects, and output multipliers. The named material fields preserve the authenticated 0x48 layout and exact +0x28/+0x2C/+0x3C offsets; region flags and damage categories use genuine enum constants, and typed tag/object access macros own all subsystem retrieval. The target occupies 1360 padded / 1347 meaningful bytes with 43 relocations; the retained house-rule candidate occupies 1392 padded / 1389 meaningful bytes with 44 relocations and objdiff reports 88.00236 percent similarity. The extra lookup/relocation is the honest typed unit_get boundary after a generic child object type check. Fable's 1360-byte 98.31-percent probe used a repeated raw object_get downcast to unit_datum; it is explicitly rejected under the typed-access house rule and receives no exact credit. The separately reconstructed private helpers damage_effect_new_at_location and object_destroy_region are strict exact under their exact-tier symbol aliases. No fake matching, raw offset, false prototype, volatile/register forcing, barrier, optimizer pragma, assembly, undefined behavior, nonsensical branch, or fake context is retained. Reopen for authoritative January source/local records or a natural owner-safe accessor arrangement that improves code generation without violating typed access.", - "measurements": { - "target": { - "size": 1360, - "relocation_count": 43, - "normalized_sha256": "15116626eee783a53894c24ec0e9cb3cf2ad2a5734d7c3de99a15e2df4aa460e" - }, - "base": { - "size": 1392, - "relocation_count": 44, - "normalized_sha256": "9e29dfe9abf1237a6bea6282926123f9fa15d7140977f2cfa1dedd6c68960412" - }, - "objdiff_percent": 88.00236 - } - }, { "unit": "source/physics/collision_bsp", "function": "_collision_surface_test_sphere", @@ -1101,25 +1006,6 @@ "objdiff_percent": 98.3871 } }, - { - "unit": "source/cache/xbox_texture_cache", - "function": "_texture_cache_steal_memory", - "class": "unclassified", - "evidence": "Fuzzy-parked under the current house rule after restoring the complete public texture-cache memory-steal path in ordinary typed C. The retained function uses the owning texture_cache.h prototype, signed long page arithmetic independently confirmed by January's cdq/and/add/sar sequence, named page/guard constants, the genuine operational xbox_texture_cache_globals fields, the real XDK XPhysicalProtect declaration and PAGE_READWRITE/PAGE_READONLY constants, and explicit return. January and later HCEA/Pastudan/Stian semantic lifts corroborate the two guards, LRU resize, protection sequence, stolen flag, and returned writable range. Target and candidate are both 224 padded / 209 meaningful bytes with the same 16 relocation offsets, types and identities; objdiff reports 96.95652 percent. The only aligned emitted-code difference is January retaining the returned guard pointer in ESI while VC7 selects EDI for the natural candidate, plus the corresponding pop/move order. The fail-closed classifier returns UNKNOWN, so no recipe or exact credit is claimed. No declaration-order search, register/volatile forcing, pragma, barrier, assembly, raw offset, fake dependency, forced inline, undefined behavior, extra helper, COMMON owner, or point_from_line3d COMDAT is retained. Reopen only for authoritative January source/local records or a natural compatible-compiler donor explaining this final pointer-register allocation.", - "measurements": { - "target": { - "size": 224, - "relocation_count": 16, - "normalized_sha256": "7ffbda42b22d2c8bae6f2604509e6b0e39ae275fe38c011febed6f55e1d4620e" - }, - "base": { - "size": 224, - "relocation_count": 16, - "normalized_sha256": "37670ded23c6273a3a573265fe14a008f6abb5fc2799c821368c77f7710cf076" - }, - "objdiff_percent": 96.95652 - } - }, { "unit": "source/bink/bink_playback", "function": "_bink_query_analog_controller_buttons", @@ -1238,28 +1124,6 @@ "objdiff_percent": 84.64924 } }, - { - "unit": "source/sound/sound_manager", - "function": "_update_channel_for_looping_sound", - "class": "unclassified", - "evidence": "Complete typed looping-channel update reconstructed from January code/relocations and HCEA semantics. It covers properties, cache transitions, linked permutations, definition changes and crossfades. January is 1,360 padded bytes with 61 relocations; canonical is 1,376 with 61. No unique source-level mechanism explains the residual, so it receives zero exact credit. No compiler steering, raw offset, fake dependency, undefined behavior or nonsensical branch is retained. See docs/object_matching_logs/sound_manager_obj_idle_channel_spine_20260908.md. 2026-09-15 (next-150K lane wave n3a): re-baselined at ZERO strict credit and strictly closer than 1376/61. Size and relocation count are now both January-exact (1360/61); the residual is [sha] only. The row stays parked and fuzzy.", - "measurements": { - "target": { "size": 1360, "relocation_count": 61, "normalized_sha256": "457d122269e7e06c8b4a557f80eef434e3eb925aa8aaaa73d9e69bce635a6d78" }, - "base": { "size": 1360, "relocation_count": 61, "normalized_sha256": "cb7925e4a26b946436b50b7c0f3172fdc975c1e48f7f9780f0d6d1cc8bc12f10" }, - "objdiff_percent": 99.19809 - } - }, - { - "unit": "source/sound/sound_manager", - "function": "_sound_set_definition_end", - "class": "unclassified", - "evidence": "Complete queued-end-definition transition retained under its corrected semantic target name. January and canonical are both 208 padded bytes with all nine relocations; the code hash remains different. It uses the now-exact bounded channel-summary builder and the typed instance-limit flow. No compiler steering, raw offset, fake dependency, undefined behavior or nonsensical branch is retained. Zero exact credit. See docs/object_matching_logs/sound_manager_obj_idle_channel_spine_20260908.md.", - "measurements": { - "target": { "size": 208, "relocation_count": 9, "normalized_sha256": "06f507e27039b2a39192271221e6c7b703aee4d5ae45becdac84f3543095ec13" }, - "base": { "size": 208, "relocation_count": 9, "normalized_sha256": "4f5a03ed0532981c792521f1ce7cdcc47eef5a3ee2d038caf65f57b1987675d9" }, - "objdiff_percent": 91.884056 - } - }, { "unit": "source/rasterizer/rasterizer_lights", "function": "_rasterizer_lens_flares_draw", @@ -1275,11 +1139,11 @@ "unit": "source/ai/ai", "function": "_ai_test_line_of_sight", "class": "instruction-scheduling", - "evidence": "Complete typed PVS, collision, fog, expanded-source, and expanded-target visibility classifier reconstructed from January code/relocations and HCEA semantics. It preserves January's external helper schedule without emitting point_from_line3d. The retained source initializes collision_fraction before the fog path so no execution can read an indeterminate value. January is 1,008 padded bytes and candidate is 1,040, both with 50 relocations. Remaining differences are compiler-local frame/register scheduling. No fake dependency, raw offset, forced inline, undefined read, or nonsensical logic is retained. Zero exact credit. See docs/object_matching_logs/ai_obj_large_visibility_spatial_packet_20260909.md.", + "evidence": "Complete typed PVS, collision, fog, expanded-source, and expanded-target visibility classifier reconstructed from January code/relocations and HCEA semantics. It preserves January's external helper schedule without emitting point_from_line3d. The retained source initializes collision_fraction before the fog path so no execution can read an indeterminate value. January is 1,008 padded bytes and candidate is 1,040, both with 50 relocations. Remaining differences are compiler-local frame/register scheduling. No fake dependency, raw offset, forced inline, undefined read, or nonsensical logic is retained. Zero exact credit. See docs/object_matching_logs/ai_obj_large_visibility_spatial_packet_20260909.md. Remeasured 2026-09-25 after the /Od-attested real_math.h distance3d body correction (claude_fifty_objects_20260925.md, batch 2); size and relocations unchanged.", "measurements": { "target": { "size": 1008, "relocation_count": 50, "normalized_sha256": "aecb662c1c4868e27cbd680dba829bdedc994fc2f91911172ad86ecdfdec9b86" }, - "base": { "size": 1040, "relocation_count": 50, "normalized_sha256": "61a3ce7f829fcafe2bf34705e9d6e2a0bb2be0d80257c1921cc134edb6eb0488" }, - "objdiff_percent": 97.97885 + "base": { "size": 1040, "relocation_count": 50, "normalized_sha256": "c524fe19529bfd4a72e95be52a875925bcc929d347b37471eb16b75bd393da78" }, + "objdiff_percent": 97.91843 } }, { @@ -1352,22 +1216,22 @@ "unit": "source/main/main", "function": "_main_frame_rate_debug", "class": "unclassified", - "evidence": "Complete natural frame-rate diagnostic state machine retained from the 2026-09-09 Main packet. It uses the authenticated Main state, project types, and ordinary file/time APIs. The candidate is 528 padded bytes with 51 relocations versus January's 544 bytes and 52 relocations; the remaining code-generation difference is explicitly fuzzy. No barrier, volatile carrier, fake dependency, raw address, or exact-only branch is retained. Zero exact credit. See docs/object_matching_logs/main_obj_natural_state_and_render_packet_20260909.md. 2026-09-22: two January-attested corrections landed. The sample-index wrap is a SIGNED modulo in January (movsx/and 0x80000007/jns fixup), so NUMBEROF (size_t) was wrong and the divisor is a signed 8; this closed the whole 16-byte size gap and the candidate is now 544 padded bytes, exactly January's size. The slow-frame threshold literal is 0.036000000000000004 (__real@3fa26e978d4fdf3c), one ULP above the decimal 0.036 we had, so January's source folds an expression rather than writing the decimal; spelled 1.08/TICKS_PER_SECOND, which reproduces the constant exactly. The remaining residual is one duplicated framerate_sample_index load that January's jump-threading emits on the debug-true edge (51 vs 52 relocations) plus the register assignment that follows from it.", + "evidence": "Complete natural frame-rate diagnostic state machine retained from the 2026-09-09 Main packet. It uses the authenticated Main state, project types, and ordinary file/time APIs. The candidate is 528 padded bytes with 51 relocations versus January's 544 bytes and 52 relocations; the remaining code-generation difference is explicitly fuzzy. No barrier, volatile carrier, fake dependency, raw address, or exact-only branch is retained. Zero exact credit. See docs/object_matching_logs/main_obj_natural_state_and_render_packet_20260909.md. 2026-09-22: two January-attested corrections landed. The sample-index wrap is a SIGNED modulo in January (movsx/and 0x80000007/jns fixup), so NUMBEROF (size_t) was wrong and the divisor is a signed 8; this closed the whole 16-byte size gap and the candidate is now 544 padded bytes, exactly January's size. The slow-frame threshold literal is 0.036000000000000004 (__real@3fa26e978d4fdf3c), one ULP above the decimal 0.036 we had, so January's source folds an expression rather than writing the decimal; spelled 1.08/TICKS_PER_SECOND, which reproduces the constant exactly. The remaining residual is one duplicated framerate_sample_index load that January's jump-threading emits on the debug-true edge (51 vs 52 relocations) plus the register assignment that follows from it. 2026-09-24 (fifty-objects lane batch 4b): re-baselined after the reviewed zero-credit packet; see docs/object_matching_logs/claude_fifty_objects_20260925.md.", "measurements": { "target": { "size": 544, "relocation_count": 52, "normalized_sha256": "17546b1f02410f30e6fc728300d275c40d65bf6cb6a35a096a8d735f96512d83" }, - "base": { "size": 544, "relocation_count": 51, "normalized_sha256": "c2c8fd8f775a01fc893be42b6223733665e2bf7845312f06a1725aa626af419b" }, - "objdiff_percent": 94.51923 + "base": { "size": 544, "relocation_count": 51, "normalized_sha256": "3c132f904203944a7f5f7c3b746a7458964f073c1fc4374aba0988bb5f3db4ff" }, + "objdiff_percent": 98.65385 } }, { "unit": "source/main/main", "function": "_main_update_time", "class": "unclassified", - "evidence": "Complete natural Main timing and vblank-throttle reconstruction retained from the 2026-09-09 packet. It uses named fields in the authenticated rasterizer/Main state and the genuine profiler APIs. Target and candidate are both 1,440 padded bytes, but January has 117 relocations and the candidate has 118 with different normalized code. The rejected compiler-barrier experiment is not retained. Zero exact credit. See docs/object_matching_logs/main_obj_natural_state_and_render_packet_20260909.md.", + "evidence": "Complete natural Main timing and vblank-throttle reconstruction retained from the 2026-09-09 packet. It uses named fields in the authenticated rasterizer/Main state and the genuine profiler APIs. Target and candidate are both 1,440 padded bytes, but January has 117 relocations and the candidate has 118 with different normalized code. The rejected compiler-barrier experiment is not retained. Zero exact credit. See docs/object_matching_logs/main_obj_natural_state_and_render_packet_20260909.md. 2026-09-24 (fifty-objects lane batch 4b): re-baselined after the reviewed zero-credit packet; see docs/object_matching_logs/claude_fifty_objects_20260925.md.", "measurements": { "target": { "size": 1440, "relocation_count": 117, "normalized_sha256": "b32677fb6c4cc6bcd664b98bfc5cc962b68bdf65228a31759b52574becdf200b" }, - "base": { "size": 1440, "relocation_count": 118, "normalized_sha256": "f4d7bb79a5351f50f1d0000d2b51234c1eb7d2abc44116032c537fd5f47cf3f1" }, - "objdiff_percent": 62.637814 + "base": { "size": 1440, "relocation_count": 117, "normalized_sha256": "ad56536c5eb119b981a9d0b89feb8bc57be3d72a21b4fcdfac4b4939db97ccdc" }, + "objdiff_percent": 98.986336 } }, { @@ -1427,17 +1291,6 @@ "objdiff_percent": 76.04444 } }, - { - "unit": "source/camera/editor_flying_camera", - "function": "_editor_camera_set_position_and_roll", - "class": "unclassified", - "evidence": "Complete January/HCEA-authenticated editor-camera reconstruction with the HCEX-attested file-static state split. It uses correctly typed Euler storage and copying instead of representation-pointer punning; the house-rule-compliant shape remains 464 versus 432 padded bytes and receives zero credit. Three x87 operand-load-order blocks remain (cross-product i term and two dot-product terms); no source-level lever is proven. See docs/object_matching_logs/editor_flying_camera_obj_opus5_150k_w3_20260914.md and docs/object_matching_logs/editor_flying_camera_static_split_recovery_20260923.md.", - "measurements": { - "target": { "size": 432, "relocation_count": 30, "normalized_sha256": "a209aa201db09ef8600e6aa329e259b552acb2fe89532ea3bc18f4c007912b82" }, - "base": { "size": 464, "relocation_count": 30, "normalized_sha256": "2115d1bd30c95e6bd4c50d82e32480e2b8760bcae21ced47946bfef4706ee9fa" }, - "objdiff_percent": 79.92618 - } - }, { "unit": "source/camera/observer", "function": "_observer_update_positions", @@ -1453,22 +1306,11 @@ "unit": "source/interface/first_person_weapons", "function": "_first_person_weapon_update", "class": "unclassified", - "evidence": "Complete HCEA-corroborated first-person weapon state machine retained from the 2026-09-12 update cluster. It has the real callers, typed accessors, and four-player January loop, but the current production inline schedule remains non-exact and emits one extra relocation; no forced-inline or source-pressure device is admitted. This body and its non-owned helper schedule receive zero credit. See docs/object_matching_logs/first_person_weapons_obj_update_cluster_reconciliation_20260912.md.", + "evidence": "Complete HCEA-corroborated first-person weapon state machine with the four-player January loop. Wave 2 of claude/fifty-objects-20260925 applied three /Od-attested corrections. First, a key-frame result no longer advances the state: January @0x13c jumps past next_state on _animation_key_frame, and /Od 0x61fb2e has an empty then-arm. Second, both animation updates call the TU wrapper animation_update_render_only (/Od 0x61fb22/0x61fc59); no other January object references the wrapper, so it was inlined here. Third, turning is a real_vector2d aggregate (/Od RTC descriptor turning, 8 bytes). With the null guards removed and magnitude3d inlined, the function is strictly exact (scratch/w/first_person_weapons/final_exact.c). January omits both null tests after count ? TAG_BLOCK_GET_ELEMENT(...) : NULL, and the later /Od build omits them too. That is an authentic unguarded dereference and is owner-gated. The retained defined-behaviour body keeps both guards and keeps magnitude3d out of line, so no helper COMDAT is emitted while the caller is non-exact. Zero credit. Reopen on an owner ruling admitting the unguarded dereference. See scratch/w/first_person_weapons/LEDGER.md.", "measurements": { "target": { "size": 1536, "relocation_count": 59, "normalized_sha256": "912d95683f14ff39699c4a1056af92441a20ceeec0584007512ce26b5d70478d" }, - "base": { "size": 1520, "relocation_count": 60, "normalized_sha256": "a112cf32c0e3baf805bd69c440b5beadbe51394f6a7f3161f61d4c470ea88292" }, - "objdiff_percent": 93.48387 - } - }, - { - "unit": "source/math/geometry", - "function": "_convex_hull2d_perimeter", - "class": "unclassified", - "evidence": "Complete natural convex-hull perimeter reconstruction retained from the reconciled Fable geometry packet. Target and candidate share a 96-byte extent with no relocations but have different normalized streams; earlier exact-looking expression/helper variants had unresolved provenance and are not used as credit. The retained ordinary project-type body receives zero credit. See docs/object_matching_logs/geometry_obj_fable_clean_pair_independent_intake_20260906.md.", - "measurements": { - "target": { "size": 96, "relocation_count": 0, "normalized_sha256": "71292feb41a8e5d57e328751240458cb0b9678237d26b7f8be4ba7abab7f4b0e" }, - "base": { "size": 96, "relocation_count": 0, "normalized_sha256": "22c6d46416fece30ca43252116be4b7f30369b3c2df152ea46ef045b031d073d" }, - "objdiff_percent": 91.5 + "base": { "size": 1520, "relocation_count": 60, "normalized_sha256": "ba39884c90f2ef0afbac711db26225e2b41d4fc0719a2afbe0a600883e2bf8ff" }, + "objdiff_percent": 95.21506 } }, { diff --git a/config/semantic_data_matches.json b/config/semantic_data_matches.json index c4c246ae..77814b3d 100644 --- a/config/semantic_data_matches.json +++ b/config/semantic_data_matches.json @@ -92,7 +92,7 @@ "group": "camera-static-sections", "allow_incomplete_unit": true, "credit_raw_size": true, - "reason": "January and the rebuilt object have identical 124-byte private .bss and 52-byte .data payloads, flags, alignments, and owner storage. The nine .data relocations resolve to the same image destinations. HCEX names the separate file statics and their definition order; the January .bss offsets corroborate their exact layout. Objdiff undercredits the two sections after the authentic private-state split. Credit raw sizes because its report scores .bss as 124 bytes, not the 128-byte alignment-derived padded extent. The remaining camera code function stays residual.", + "reason": "January and the rebuilt object have identical 124-byte private .bss and 52-byte .data payloads, flags, alignments, and owner storage. The nine .data relocations resolve to the same image destinations. HCEX names the separate file statics and their definition order; the January .bss offsets corroborate their exact layout. Objdiff undercredits the two sections after the authentic private-state split. Credit raw sizes because its report scores .bss as 124 bytes, not the 128-byte alignment-derived padded extent.", "members": [ { "symbol": "_is_scripted", @@ -118,13 +118,13 @@ "section": ".data", "size": 52, "padded_size": 52, "flags": 3224371264, "relocation_count": 9, "normalized_sha256": "22486dfe6b955caf557fcbca418621432912c2d3012afd4e6031fe22b880d07b", - "owner": { "value": 0, "type": 0, "storage": 2 } + "owner": { "value": 0, "type": 0, "storage": 3 } }, "base": { "section": ".data", "size": 52, "padded_size": 52, "flags": 3224371264, "relocation_count": 9, "normalized_sha256": "22486dfe6b955caf557fcbca418621432912c2d3012afd4e6031fe22b880d07b", - "owner": { "value": 0, "type": 0, "storage": 2 } + "owner": { "value": 0, "type": 0, "storage": 3 } } } } @@ -480,5 +480,25 @@ "relocation_count": 228, "normalized_sha256": "c1040d667c392fd772fab34335ade456dac49ae864a8200c4560df63cec186fd" } + }, + { + "unit": "source/objects/objects", + "symbol": "?section@?1??objects_update@@9@9", + "reason": "objects_update's function-static section table: January and the rebuilt object have identical 1,530-byte .data, relocation site/type and independently resolved string destination; objdiff 3.3.1's '$'-literal relocation-name defect undercredits it despite exact COFF section comparison. Whole object admitted after the Layer 1 provider repairs (action_charge, player_control, bored_camera, path_obstacles, decals) replaced hand-written NODUP helper copies with the genuine real_math.h inlines: all 121 functions strict exact, 225 symbols match storage/offsets and cachebeta.pdb publics, 26 candidate-only helper COMDATs byte-identical to January's selected copies and pair-linking in both orders.", + "measurements": { + "size": 1530, + "relocation_count": 1, + "normalized_sha256": "e94bb79478c95dce11c4a1f720a07ccbaa3a8d18b84acbe5605472d6f8635b74" + } + }, + { + "unit": "source/units/units", + "symbol": "_magic_base_animation_seat_index", + "reason": "units' writable .data section (magic_base_animation_seat_index, unit_update_section, unit_update's last_time and base_seat_labels): January and the rebuilt object have identical 1,564-byte payload, 7 relocation sites/types and independently resolved string destinations (5 of the 7 base_seat_labels strings are selected in other January objects and pair-link cleanly); objdiff 3.3.1's '$'-literal relocation-name defect undercredits it despite exact COFF section comparison. Whole object admitted: all 189 functions strict exact; the 25 code_ placeholders carry their first-party names (HCEX_Release.pdb units compiland, Sept-2001 map, January atlas) and all 50 file-statics carry static storage per cachebeta.pdb publics, so 321 symbols match storage/offsets; 97 candidate-only surplus definitions (31 helper COMDATs byte-identical to January's selected copies, SDK tables, literals) pair-link with their selected providers in both orders; _point_from_line3d is referenced out of line by January's units.obj (owner ruling 20260921 #1).", + "measurements": { + "size": 1564, + "relocation_count": 7, + "normalized_sha256": "6ed61c39a648905cf23b12b916e2adadfe97b6e5aa492c29a14c7265809ef1a7" + } } ] diff --git a/config/symbols.json b/config/symbols.json index a77ef6c5..e3580876 100644 --- a/config/symbols.json +++ b/config/symbols.json @@ -247,33 +247,33 @@ { "file_offset": 69968, "flags": 32, "name": "_actor_combat_retarget_grenade", "static": true }, { "file_offset": 70064, "flags": 32, "name": "_actor_aim_grenade" }, { "file_offset": 70608, "flags": 32, "name": "_actor_combat_update" }, -{ "file_offset": 75280, "flags": 32, "name": "_firing_position_store_evaluation_debug" }, -{ "file_offset": 75360, "flags": 32, "name": "_firing_position_reject" }, -{ "file_offset": 75376, "flags": 32, "name": "_pre_evaluator_guard" }, -{ "file_offset": 75584, "flags": 32, "name": "_pre_evaluator_combatmove" }, -{ "file_offset": 76160, "flags": 32, "name": "_post_evaluator_global" }, -{ "file_offset": 76384, "flags": 32, "name": "_post_evaluator_pursuit" }, -{ "file_offset": 76768, "flags": 32, "name": "_post_evaluator_hide" }, -{ "file_offset": 76992, "flags": 32, "name": "_post_evaluator_uncover" }, -{ "file_offset": 77184, "flags": 32, "name": "_post_evaluator_attack" }, +{ "file_offset": 75280, "flags": 32, "name": "_firing_position_store_evaluation_debug", "static": true }, +{ "file_offset": 75360, "flags": 32, "name": "_firing_position_reject", "static": true }, +{ "file_offset": 75376, "flags": 32, "name": "_pre_evaluator_guard", "static": true }, +{ "file_offset": 75584, "flags": 32, "name": "_pre_evaluator_combatmove", "static": true }, +{ "file_offset": 76160, "flags": 32, "name": "_post_evaluator_global", "static": true }, +{ "file_offset": 76384, "flags": 32, "name": "_post_evaluator_pursuit", "static": true }, +{ "file_offset": 76768, "flags": 32, "name": "_post_evaluator_hide", "static": true }, +{ "file_offset": 76992, "flags": 32, "name": "_post_evaluator_uncover", "static": true }, +{ "file_offset": 77184, "flags": 32, "name": "_post_evaluator_attack", "static": true }, { "file_offset": 77408, "flags": 32, "name": "_firing_position_pre_evaluate", "static": true }, { "file_offset": 77472, "flags": 32, "name": "_firing_position_post_evaluate", "static": true }, { "file_offset": 77584, "flags": 32, "name": "_firing_positions_get_post_evaluation_bound", "static": true }, -{ "file_offset": 77664, "flags": 32, "name": "_firing_position_compare" }, +{ "file_offset": 77664, "flags": 32, "name": "_firing_position_compare", "static": true }, { "file_offset": 77936, "flags": 32, "name": "_actor_get_firing_position_group" }, { "file_offset": 78224, "flags": 32, "name": "_actor_clear_discarded_firing_positions" }, { "file_offset": 78320, "flags": 32, "name": "_actor_discard_firing_position" }, { "file_offset": 78512, "flags": 32, "name": "_actor_firing_position_discarded" }, -{ "file_offset": 78592, "flags": 32, "name": "_pre_evaluator_global" }, -{ "file_offset": 80208, "flags": 32, "name": "_pre_evaluator_pursuit" }, -{ "file_offset": 80672, "flags": 32, "name": "_pre_evaluator_panic" }, +{ "file_offset": 78592, "flags": 32, "name": "_pre_evaluator_global", "static": true }, +{ "file_offset": 80208, "flags": 32, "name": "_pre_evaluator_pursuit", "static": true }, +{ "file_offset": 80672, "flags": 32, "name": "_pre_evaluator_panic", "static": true }, { "file_offset": 81328, "flags": 32, "name": "_firing_position_compute_line_of_sight", "static": true }, { "file_offset": 81792, "flags": 32, "name": "_firing_position_forced_evaluation", "static": true }, { "file_offset": 81936, "flags": 32, "name": "_actor_nearby_firing_positions" }, { "file_offset": 82464, "flags": 32, "name": "_actor_select_firing_position" }, { "file_offset": 87712, "flags": 32, "name": "_actor_active_select_firing_position" }, { "file_offset": 88288, "flags": 32, "name": "_actor_change_firing_position" }, -{ "file_offset": 88608, "flags": 32, "name": "_pre_evaluator_attack" }, +{ "file_offset": 88608, "flags": 32, "name": "_pre_evaluator_attack", "static": true }, { "file_offset": 89728, "flags": 32, "name": "_actor_look_secondary_stop" }, { "file_offset": 89840, "flags": 32, "name": "_actor_look_compute_prop_interest" }, { "file_offset": 90144, "flags": 32, "name": "_actor_look_get_looking_definition", "static": true }, @@ -329,7 +329,7 @@ { "file_offset": 121024, "flags": 32, "name": "_actor_perception_acknowledge" }, { "file_offset": 121232, "flags": 32, "name": "_actor_get_perception_knowledge" }, { "file_offset": 121472, "flags": 32, "name": "_actor_get_vision_distances" }, -{ "file_offset": 121792, "flags": 32, "name": "_actor_perception_qsort_compare_optional_props" }, +{ "file_offset": 121792, "flags": 32, "name": "_actor_perception_qsort_compare_optional_props", "static": true }, { "file_offset": 121856, "flags": 32, "name": "_actor_perception_assess_suicide_danger", "static": true }, { "file_offset": 122096, "flags": 32, "name": "_actor_perception_desire_prop" }, { "file_offset": 122656, "flags": 32, "name": "_actor_perception_find_prop_pathfinding_location" }, @@ -349,7 +349,7 @@ { "file_offset": 127776, "flags": 32, "name": "_actor_emotion_flee_with_friends" }, { "file_offset": 128112, "flags": 32, "name": "_actor_emotion_get_unopposable_enemy", "static": true }, { "file_offset": 128240, "flags": 32, "name": "_actor_emotion_assess_unopposable_danger", "static": true }, -{ "file_offset": 128352, "flags": 32, "name": "_actor_emotion_unopposable_retreat" }, +{ "file_offset": 128352, "flags": 32, "name": "_actor_emotion_unopposable_retreat", "static": true }, { "file_offset": 129616, "flags": 32, "name": "_actor_berserk" }, { "file_offset": 129792, "flags": 32, "name": "_actor_visibility_at_point" }, { "file_offset": 130656, "flags": 32, "name": "_actor_audibility_at_point" }, @@ -366,9 +366,9 @@ { "file_offset": 135872, "flags": 32, "name": "_actor_emotion_update" }, { "file_offset": 137536, "flags": 32, "name": "_actor_perception_become_acknowledged" }, { "file_offset": 137808, "flags": 32, "name": "_prop_status_refresh" }, -{ "file_offset": 141488, "flags": 32, "name": "_actor_perception_refresh_test_object" }, +{ "file_offset": 141488, "flags": 32, "name": "_actor_perception_refresh_test_object", "static": true }, { "file_offset": 143232, "flags": 32, "name": "_actor_perception_create_orphan_from_friend" }, -{ "file_offset": 144016, "flags": 32, "name": "_actor_perception_refresh" }, +{ "file_offset": 144016, "flags": 32, "name": "_actor_perception_refresh", "static": true }, { "file_offset": 146432, "flags": 32, "name": "_actor_perception_update" }, { "file_offset": 151152, "flags": 32, "name": "_actor_stimulus_clear" }, { "file_offset": 151200, "flags": 32, "name": "_actor_stimulus_combat", "static": true }, @@ -1393,7 +1393,7 @@ { "file_offset": 463424, "flags": 32, "name": "_transport_client_start" }, { "file_offset": 463616, "flags": 32, "name": "_connection_thread_list_add", "static": true }, { "file_offset": 463712, "flags": 32, "name": "_connection_thread_list_mark_for_disposal", "static": true }, -{ "file_offset": 463776, "flags": 32, "name": "_connection_thread_list_maintenance" }, +{ "file_offset": 463776, "flags": 32, "name": "_connection_thread_list_maintenance", "static": true }, { "file_offset": 463840, "flags": 32, "name": "_create_transport_endpoint" }, { "file_offset": 463968, "flags": 32, "name": "_get_endpoint_type" }, { "file_offset": 464064, "flags": 32, "name": "_read_endpoint" }, @@ -1627,7 +1627,7 @@ { "file_offset": 516560, "flags": 32, "name": "_profile_frame_build_string", "static": true }, { "file_offset": 518112, "flags": 32, "name": "_profile_timer_start_at", "static": true }, { "file_offset": 518128, "flags": 32, "name": "_profile_timer_end_at", "static": true }, -{ "file_offset": 518208, "flags": 32, "name": "_compare_profile_sections", "static": true }, +{ "file_offset": 518208, "flags": 32, "name": "_compare_profile_sections" }, { "file_offset": 518496, "flags": 32, "name": "_profile_dump" }, { "file_offset": 519360, "flags": 32, "name": "_profile_dump_to_file" }, { "file_offset": 519488, "flags": 32, "name": "_profile_frame_dump", "static": true }, @@ -2101,7 +2101,7 @@ { "file_offset": 617376, "flags": 32, "name": "_drawline", "static": true }, { "file_offset": 617488, "flags": 32, "name": "_get_selected_color", "static": true }, { "file_offset": 617520, "flags": 32, "name": "_get_postgame_hilite_colors" }, -{ "file_offset": 617600, "flags": 32, "name": "_find_closest_player_callback" }, +{ "file_offset": 617600, "flags": 32, "name": "_find_closest_player_callback", "static": true }, { "file_offset": 617696, "flags": 32, "name": "_game_engine_post_rasterize_objects" }, { "file_offset": 617728, "flags": 32, "name": "_can_delete_item", "static": true }, { "file_offset": 617776, "flags": 32, "name": "_game_engine_update_purge", "static": true }, @@ -2123,7 +2123,7 @@ { "file_offset": 619760, "flags": 32, "name": "_game_engine_can_score" }, { "file_offset": 619792, "flags": 32, "name": "_game_engine_force_single_screen" }, { "file_offset": 619824, "flags": 32, "name": "_get_blink_alpha" }, -{ "file_offset": 619872, "flags": 32, "name": "_game_engine_press_start_to_begin" }, +{ "file_offset": 619872, "flags": 32, "name": "_game_engine_press_start_to_begin", "static": true }, { "file_offset": 619888, "flags": 32, "name": "_nearby_vehicle", "static": true }, { "file_offset": 620128, "flags": 32, "name": "_game_engine_rasterize_message" }, { "file_offset": 620384, "flags": 32, "name": "_game_engine_picking_up" }, @@ -2211,13 +2211,13 @@ { "file_offset": 631728, "flags": 32, "name": "_game_engine_get_player_place", "static": true }, { "file_offset": 631856, "flags": 32, "name": "_postgame_statistic_get_rating" }, { "file_offset": 631952, "flags": 32, "name": "_select_players_to_display", "static": true }, -{ "file_offset": 632448, "flags": 32, "name": "_find_closest_player_index" }, +{ "file_offset": 632448, "flags": 32, "name": "_find_closest_player_index", "static": true }, { "file_offset": 632896, "flags": 32, "name": "_internal_rasterize_target_name", "static": true }, { "file_offset": 633152, "flags": 32, "name": "_internal_rasterize_score", "static": true }, { "file_offset": 635488, "flags": 32, "name": "_random_item", "static": true }, { "file_offset": 635616, "flags": 32, "name": "_game_engine_get_type", "static": true }, { "file_offset": 635648, "flags": 32, "name": "_match_game_type" }, -{ "file_offset": 635808, "flags": 32, "name": "_game_engine_update_item_spawn" }, +{ "file_offset": 635808, "flags": 32, "name": "_game_engine_update_item_spawn", "static": true }, { "file_offset": 636144, "flags": 32, "name": "_game_engine_update_player_no_shield", "static": true }, { "file_offset": 636256, "flags": 32, "name": "_game_engine_update_player_always_invis" }, { "file_offset": 636352, "flags": 32, "name": "_game_engine_update_non_deterministic" }, @@ -2595,7 +2595,7 @@ { "file_offset": 696192, "flags": 32, "name": "_unit_create_starting_weapon", "static": true }, { "file_offset": 696304, "flags": 32, "name": "_players_compute_combined_pvs", "static": true }, { "file_offset": 696672, "flags": 32, "name": "_players_compute_local_player_count", "static": true }, -{ "file_offset": 696704, "flags": 32, "name": "_player_examine_nearby_unit" }, +{ "file_offset": 696704, "flags": 32, "name": "_player_examine_nearby_unit", "static": true }, { "file_offset": 696720, "flags": 32, "name": "_unit_should_autopick_weapon" }, { "file_offset": 696864, "flags": 32, "name": "_player_reset_action_result", "static": true }, { "file_offset": 696896, "flags": 32, "name": "_player_handle_weapon_swap", "static": true }, @@ -2632,397 +2632,397 @@ { "file_offset": 707408, "flags": 32, "name": "_player_examine_nearby_item", "static": true }, { "file_offset": 708208, "flags": 32, "name": "_player_examine_nearby_objects", "static": true }, { "file_offset": 708448, "flags": 32, "name": "_players_update_after_game" }, -{ "file_offset": 709264, "flags": 32, "name": "_hs_not_evaluate" }, -{ "file_offset": 709344, "flags": 32, "name": "_hs_print_evaluate" }, -{ "file_offset": 709408, "flags": 32, "name": "_hs_players_evaluate" }, -{ "file_offset": 709440, "flags": 32, "name": "_hs_teleport_players_not_in_trigger_volume_evaluate" }, -{ "file_offset": 709504, "flags": 32, "name": "_scenario_trigger_volume_test_object_evaluate" }, -{ "file_offset": 709584, "flags": 32, "name": "_hs_trigger_volume_test_objects_any_evaluate" }, -{ "file_offset": 709664, "flags": 32, "name": "_hs_trigger_volume_test_objects_all_evaluate" }, -{ "file_offset": 709744, "flags": 32, "name": "_hs_object_create_evaluate" }, -{ "file_offset": 709808, "flags": 32, "name": "_hs_object_destroy_evaluate" }, -{ "file_offset": 709872, "flags": 32, "name": "_hs_object_create_anew_evaluate" }, -{ "file_offset": 709936, "flags": 32, "name": "_hs_object_create_containing_evaluate" }, -{ "file_offset": 710000, "flags": 32, "name": "_hs_object_create_anew_containing_evaluate" }, -{ "file_offset": 710064, "flags": 32, "name": "_hs_object_destroy_containing_evaluate" }, -{ "file_offset": 710128, "flags": 32, "name": "_hs_object_destroy_all_evaluate" }, -{ "file_offset": 710160, "flags": 32, "name": "_hs_object_teleport_evaluate" }, -{ "file_offset": 710224, "flags": 32, "name": "_hs_object_set_facing_evaluate" }, -{ "file_offset": 710288, "flags": 32, "name": "_hs_object_set_shield_evaluate" }, -{ "file_offset": 710352, "flags": 32, "name": "_hs_object_set_permutation_evaluate" }, -{ "file_offset": 710416, "flags": 32, "name": "_hs_object_list_get_element_evaluate" }, -{ "file_offset": 710480, "flags": 32, "name": "_object_list_count_evaluate" }, -{ "file_offset": 710560, "flags": 32, "name": "_hs_effect_new_evaluate" }, -{ "file_offset": 710624, "flags": 32, "name": "_hs_effect_new_from_object_marker_evaluate" }, -{ "file_offset": 710688, "flags": 32, "name": "_hs_damage_new_evaluate" }, -{ "file_offset": 710752, "flags": 32, "name": "_hs_damage_object_evaluate" }, -{ "file_offset": 710816, "flags": 32, "name": "_hs_objects_can_see_object_evaluate" }, -{ "file_offset": 710896, "flags": 32, "name": "_hs_objects_can_see_flag_evaluate" }, -{ "file_offset": 710976, "flags": 32, "name": "_hs_objects_delete_by_definition_evaluate" }, -{ "file_offset": 711040, "flags": 32, "name": "_hs_sound_set_gain_evaluate" }, -{ "file_offset": 711104, "flags": 32, "name": "_hs_sound_get_gain_evaluate" }, -{ "file_offset": 711168, "flags": 32, "name": "_numeric_countdown_timer_set_evaluate" }, -{ "file_offset": 711232, "flags": 32, "name": "_numeric_countdown_timer_get_evaluate" }, -{ "file_offset": 711312, "flags": 32, "name": "_numeric_countdown_timer_stop_evaluate" }, -{ "file_offset": 711344, "flags": 32, "name": "_numeric_countdown_timer_restart_evaluate" }, -{ "file_offset": 711376, "flags": 32, "name": "_breakable_surfaces_enable_evaluate" }, -{ "file_offset": 711440, "flags": 32, "name": "_recorded_animation_play_evaluate" }, -{ "file_offset": 711520, "flags": 32, "name": "_recorded_animation_play_and_delete_evaluate" }, -{ "file_offset": 711600, "flags": 32, "name": "_recorded_animation_play_and_hover_evaluate" }, -{ "file_offset": 711680, "flags": 32, "name": "_recorded_animation_kill_evaluate" }, -{ "file_offset": 711744, "flags": 32, "name": "_recorded_animation_get_time_left_evaluate" }, -{ "file_offset": 711824, "flags": 32, "name": "_object_set_ranged_attack_inhibited_evaluate" }, -{ "file_offset": 711888, "flags": 32, "name": "_object_set_melee_attack_inhibited_evaluate" }, -{ "file_offset": 711952, "flags": 32, "name": "_objects_dump_memory_evaluate" }, -{ "file_offset": 711984, "flags": 32, "name": "_object_scripting_set_collideable_evaluate" }, -{ "file_offset": 712048, "flags": 32, "name": "_objects_scripting_set_scale_evaluate" }, -{ "file_offset": 712112, "flags": 32, "name": "_objects_scripting_attach_evaluate" }, -{ "file_offset": 712176, "flags": 32, "name": "_objects_scripting_detach_evaluate" }, -{ "file_offset": 712240, "flags": 32, "name": "_garbage_collect_now_evaluate" }, -{ "file_offset": 712272, "flags": 32, "name": "_object_cannot_take_damage_evaluate" }, -{ "file_offset": 712336, "flags": 32, "name": "_object_can_take_damage_evaluate" }, -{ "file_offset": 712400, "flags": 32, "name": "_object_beautify_evaluate" }, -{ "file_offset": 712464, "flags": 32, "name": "_hs_objects_predict_evaluate" }, -{ "file_offset": 712528, "flags": 32, "name": "_object_definition_predict_evaluate" }, -{ "file_offset": 712592, "flags": 32, "name": "_object_pvs_set_object_evaluate" }, -{ "file_offset": 712656, "flags": 32, "name": "_object_pvs_set_camera_point_evaluate" }, -{ "file_offset": 712720, "flags": 32, "name": "_object_pvs_clear_evaluate" }, -{ "file_offset": 712752, "flags": 32, "name": "_object_pvs_activate_evaluate" }, -{ "file_offset": 712816, "flags": 32, "name": "_lights_enable_evaluate" }, -{ "file_offset": 712896, "flags": 32, "name": "_scenery_get_animation_time_evaluate" }, -{ "file_offset": 712976, "flags": 32, "name": "_scenery_animation_start_evaluate" }, -{ "file_offset": 713040, "flags": 32, "name": "_scenery_animation_start_at_frame_evaluate" }, -{ "file_offset": 713120, "flags": 32, "name": "_render_effects_evaluate" }, -{ "file_offset": 713184, "flags": 32, "name": "_unit_scripting_can_blink_evaluate" }, -{ "file_offset": 713248, "flags": 32, "name": "_unit_open_evaluate" }, -{ "file_offset": 713312, "flags": 32, "name": "_unit_close_evaluate" }, -{ "file_offset": 713376, "flags": 32, "name": "_unit_kill_evaluate" }, -{ "file_offset": 713440, "flags": 32, "name": "_unit_kill_silent_evaluate" }, -{ "file_offset": 713504, "flags": 32, "name": "_unit_get_custom_animation_time_evaluate" }, -{ "file_offset": 713584, "flags": 32, "name": "_unit_stop_custom_animation_evaluate" }, -{ "file_offset": 713648, "flags": 32, "name": "_unit_start_user_animation_evaluate" }, -{ "file_offset": 713728, "flags": 32, "name": "_unit_scripting_start_user_animation_list_evaluate" }, -{ "file_offset": 713808, "flags": 32, "name": "_unit_custom_animation_at_frame_evaluate" }, -{ "file_offset": 713904, "flags": 32, "name": "_unit_is_playing_custom_animation_evaluate" }, -{ "file_offset": 713984, "flags": 32, "name": "_unit_aim_without_turning_evaluate" }, -{ "file_offset": 714048, "flags": 32, "name": "_unit_set_emotion_evaluate" }, -{ "file_offset": 714112, "flags": 32, "name": "_unit_set_enterable_by_player_evaluate" }, -{ "file_offset": 714176, "flags": 32, "name": "_unit_scripting_enter_vehicle_evaluate" }, -{ "file_offset": 714240, "flags": 32, "name": "_unit_scripting_vehicle_test_seat_list_evaluate" }, -{ "file_offset": 714320, "flags": 32, "name": "_unit_scripting_vehicle_test_seat_evaluate" }, -{ "file_offset": 714400, "flags": 32, "name": "_unit_scripting_set_emotion_animation_evaluate" }, -{ "file_offset": 714464, "flags": 32, "name": "_unit_scripting_exit_vehicle_evaluate" }, -{ "file_offset": 714528, "flags": 32, "name": "_unit_scripting_set_maximum_vitality_evaluate" }, -{ "file_offset": 714608, "flags": 32, "name": "_units_scripting_set_maximum_vitality_evaluate" }, -{ "file_offset": 714688, "flags": 32, "name": "_unit_scripting_set_current_vitality_evaluate" }, -{ "file_offset": 714768, "flags": 32, "name": "_units_scripting_set_current_vitality_evaluate" }, -{ "file_offset": 714848, "flags": 32, "name": "_vehicle_scripting_load_magic_evaluate" }, -{ "file_offset": 714928, "flags": 32, "name": "_vehicle_scripting_unload_evaluate" }, -{ "file_offset": 715008, "flags": 32, "name": "_scripting_set_magic_base_seat_evaluate" }, -{ "file_offset": 715072, "flags": 32, "name": "_unit_scripting_set_seat_evaluate" }, -{ "file_offset": 715136, "flags": 32, "name": "_scripting_magic_melee_attack_evaluate" }, -{ "file_offset": 715168, "flags": 32, "name": "_unit_scripting_unit_riders_evaluate" }, -{ "file_offset": 715232, "flags": 32, "name": "_unit_scripting_unit_driver_evaluate" }, -{ "file_offset": 715296, "flags": 32, "name": "_unit_scripting_unit_gunner_evaluate" }, -{ "file_offset": 715360, "flags": 32, "name": "_unit_scripting_get_health_evaluate" }, -{ "file_offset": 715424, "flags": 32, "name": "_unit_scripting_get_shield_evaluate" }, -{ "file_offset": 715488, "flags": 32, "name": "_unit_scripting_get_grenade_count_evaluate" }, -{ "file_offset": 715568, "flags": 32, "name": "_unit_scripting_has_weapon_evaluate" }, -{ "file_offset": 715648, "flags": 32, "name": "_unit_scripting_has_weapon_readied_evaluate" }, -{ "file_offset": 715728, "flags": 32, "name": "_unit_scripting_doesnt_drop_items_evaluate" }, -{ "file_offset": 715792, "flags": 32, "name": "_unit_scripting_impervious_evaluate" }, -{ "file_offset": 715856, "flags": 32, "name": "_unit_scripting_suspended_evaluate" }, -{ "file_offset": 715920, "flags": 32, "name": "_unit_solo_player_integrated_night_vision_is_active_evaluate" }, -{ "file_offset": 715968, "flags": 32, "name": "_units_set_desired_flashlight_state_evaluate" }, -{ "file_offset": 716032, "flags": 32, "name": "_unit_set_desired_flashlight_state_evaluate" }, -{ "file_offset": 716096, "flags": 32, "name": "_unit_get_current_flashlight_state_evaluate" }, -{ "file_offset": 716176, "flags": 32, "name": "_device_set_never_appears_locked_evaluate" }, -{ "file_offset": 716240, "flags": 32, "name": "_device_set_power_evaluate" }, -{ "file_offset": 716304, "flags": 32, "name": "_device_get_power_evaluate" }, -{ "file_offset": 716368, "flags": 32, "name": "_device_set_desired_position_evaluate" }, -{ "file_offset": 716448, "flags": 32, "name": "_device_get_position_evaluate" }, -{ "file_offset": 716512, "flags": 32, "name": "_device_set_actual_position_evaluate" }, -{ "file_offset": 716576, "flags": 32, "name": "_device_group_get_value_evaluate" }, -{ "file_offset": 716640, "flags": 32, "name": "_device_group_set_desired_value_evaluate" }, -{ "file_offset": 716720, "flags": 32, "name": "_device_group_set_actual_value_evaluate" }, -{ "file_offset": 716784, "flags": 32, "name": "_device_one_sided_set_evaluate" }, -{ "file_offset": 716848, "flags": 32, "name": "_device_operates_automatically_set_evaluate" }, -{ "file_offset": 716912, "flags": 32, "name": "_device_group_change_only_once_more_set_evaluate" }, -{ "file_offset": 716976, "flags": 32, "name": "_breakable_surfaces_reset_evaluate" }, -{ "file_offset": 717008, "flags": 32, "name": "_cheat_all_powerups_evaluate" }, -{ "file_offset": 717040, "flags": 32, "name": "_cheat_all_weapons_evaluate" }, -{ "file_offset": 717072, "flags": 32, "name": "_cheat_all_vehicles_evaluate" }, -{ "file_offset": 717104, "flags": 32, "name": "_cheat_teleport_to_camera_evaluate" }, -{ "file_offset": 717136, "flags": 32, "name": "_cheat_active_camouflage_evaluate" }, -{ "file_offset": 717168, "flags": 32, "name": "_cheat_active_camouflage_local_player_evaluate" }, -{ "file_offset": 717232, "flags": 32, "name": "_cheats_load_evaluate" }, -{ "file_offset": 717264, "flags": 32, "name": "_ai_globals_ai_active_evaluate" }, -{ "file_offset": 717328, "flags": 32, "name": "_ai_globals_dialogue_triggers_enabled_evaluate" }, -{ "file_offset": 717392, "flags": 32, "name": "_ai_globals_grenades_enabled_evaluate" }, -{ "file_offset": 717456, "flags": 32, "name": "_ai_scripting_free_evaluate" }, -{ "file_offset": 717520, "flags": 32, "name": "_ai_scripting_free_units_evaluate" }, -{ "file_offset": 717584, "flags": 32, "name": "_ai_scripting_attach_unit_evaluate" }, -{ "file_offset": 717648, "flags": 32, "name": "_ai_scripting_attach_units_evaluate" }, -{ "file_offset": 717712, "flags": 32, "name": "_ai_scripting_attach_free_evaluate" }, -{ "file_offset": 717776, "flags": 32, "name": "_ai_scripting_detach_unit_evaluate" }, -{ "file_offset": 717840, "flags": 32, "name": "_ai_scripting_detach_units_evaluate" }, -{ "file_offset": 717904, "flags": 32, "name": "_ai_scripting_place_evaluate" }, -{ "file_offset": 717968, "flags": 32, "name": "_ai_scripting_kill_evaluate" }, -{ "file_offset": 718032, "flags": 32, "name": "_ai_scripting_kill_silent_evaluate" }, -{ "file_offset": 718096, "flags": 32, "name": "_ai_scripting_erase_evaluate" }, -{ "file_offset": 718160, "flags": 32, "name": "_ai_scripting_erase_all_evaluate" }, -{ "file_offset": 718192, "flags": 32, "name": "_ai_scripting_select_evaluate" }, -{ "file_offset": 718256, "flags": 32, "name": "_ai_scripting_deselect_evaluate" }, -{ "file_offset": 718288, "flags": 32, "name": "_ai_scripting_spawn_actor_evaluate" }, -{ "file_offset": 718352, "flags": 32, "name": "_ai_scripting_set_respawn_evaluate" }, -{ "file_offset": 718416, "flags": 32, "name": "_ai_scripting_set_deaf_evaluate" }, -{ "file_offset": 718480, "flags": 32, "name": "_ai_scripting_set_blind_evaluate" }, -{ "file_offset": 718544, "flags": 32, "name": "_ai_scripting_magically_see_encounter_evaluate" }, -{ "file_offset": 718608, "flags": 32, "name": "_ai_scripting_magically_see_players_evaluate" }, -{ "file_offset": 718672, "flags": 32, "name": "_ai_scripting_magically_see_unit_evaluate" }, -{ "file_offset": 718736, "flags": 32, "name": "_ai_scripting_magically_see_units_evaluate" }, -{ "file_offset": 718800, "flags": 32, "name": "_ai_scripting_timer_start_evaluate" }, -{ "file_offset": 718864, "flags": 32, "name": "_ai_scripting_timer_expire_evaluate" }, -{ "file_offset": 718928, "flags": 32, "name": "_ai_scripting_attack_evaluate" }, -{ "file_offset": 718992, "flags": 32, "name": "_ai_scripting_defend_evaluate" }, -{ "file_offset": 719056, "flags": 32, "name": "_ai_scripting_retreat_evaluate" }, -{ "file_offset": 719120, "flags": 32, "name": "_ai_scripting_maneuver_evaluate" }, -{ "file_offset": 719184, "flags": 32, "name": "_ai_scripting_maneuver_enable_evaluate" }, -{ "file_offset": 719248, "flags": 32, "name": "_ai_scripting_migrate_evaluate" }, -{ "file_offset": 719312, "flags": 32, "name": "_ai_scripting_migrate_and_speak_evaluate" }, -{ "file_offset": 719376, "flags": 32, "name": "_ai_scripting_migrate_by_unit_evaluate" }, -{ "file_offset": 719440, "flags": 32, "name": "_ai_scripting_allegiance_evaluate" }, -{ "file_offset": 719504, "flags": 32, "name": "_ai_scripting_allegiance_remove_evaluate" }, -{ "file_offset": 719568, "flags": 32, "name": "_ai_scripting_go_to_vehicle_evaluate" }, -{ "file_offset": 719632, "flags": 32, "name": "_ai_scripting_go_to_vehicle_override_evaluate" }, -{ "file_offset": 719696, "flags": 32, "name": "_ai_scripting_exit_vehicle_evaluate" }, -{ "file_offset": 719760, "flags": 32, "name": "_ai_scripting_braindead_evaluate" }, -{ "file_offset": 719824, "flags": 32, "name": "_ai_scripting_braindead_by_unit_evaluate" }, -{ "file_offset": 719888, "flags": 32, "name": "_ai_scripting_ignore_evaluate" }, -{ "file_offset": 719952, "flags": 32, "name": "_ai_scripting_prefer_target_evaluate" }, -{ "file_offset": 720016, "flags": 32, "name": "_ai_scripting_teleport_starting_location_evaluate" }, -{ "file_offset": 720080, "flags": 32, "name": "_ai_scripting_teleport_starting_location_if_unsupported_evaluate" }, -{ "file_offset": 720144, "flags": 32, "name": "_ai_scripting_renew_evaluate" }, -{ "file_offset": 720208, "flags": 32, "name": "_ai_scripting_try_to_fight_nothing_evaluate" }, -{ "file_offset": 720272, "flags": 32, "name": "_ai_scripting_try_to_fight_evaluate" }, -{ "file_offset": 720336, "flags": 32, "name": "_ai_scripting_try_to_fight_player_evaluate" }, -{ "file_offset": 720400, "flags": 32, "name": "_ai_scripting_command_list_evaluate" }, -{ "file_offset": 720464, "flags": 32, "name": "_ai_scripting_command_list_by_unit_evaluate" }, -{ "file_offset": 720528, "flags": 32, "name": "_ai_scripting_command_list_advance_evaluate" }, -{ "file_offset": 720592, "flags": 32, "name": "_ai_scripting_command_list_advance_by_unit_evaluate" }, -{ "file_offset": 720656, "flags": 32, "name": "_ai_scripting_force_active_evaluate" }, -{ "file_offset": 720720, "flags": 32, "name": "_ai_scripting_force_active_by_unit_evaluate" }, -{ "file_offset": 720784, "flags": 32, "name": "_ai_scripting_set_return_state_evaluate" }, -{ "file_offset": 720848, "flags": 32, "name": "_ai_scripting_set_current_state_evaluate" }, -{ "file_offset": 720912, "flags": 32, "name": "_ai_scripting_playfight_evaluate" }, -{ "file_offset": 720976, "flags": 32, "name": "_ai_scripting_reconnect_evaluate" }, -{ "file_offset": 721008, "flags": 32, "name": "_ai_scripting_vehicle_encounter_evaluate" }, -{ "file_offset": 721072, "flags": 32, "name": "_ai_scripting_vehicle_enterable_distance_evaluate" }, -{ "file_offset": 721136, "flags": 32, "name": "_ai_scripting_vehicle_enterable_team_evaluate" }, -{ "file_offset": 721200, "flags": 32, "name": "_ai_scripting_vehicle_enterable_actor_type_evaluate" }, -{ "file_offset": 721264, "flags": 32, "name": "_ai_scripting_vehicle_enterable_actors_evaluate" }, -{ "file_offset": 721328, "flags": 32, "name": "_ai_scripting_vehicle_enterable_disable_evaluate" }, -{ "file_offset": 721392, "flags": 32, "name": "_ai_scripting_look_at_object_evaluate" }, -{ "file_offset": 721456, "flags": 32, "name": "_ai_scripting_stop_looking_evaluate" }, -{ "file_offset": 721520, "flags": 32, "name": "_ai_scripting_automatic_migration_target_evaluate" }, -{ "file_offset": 721584, "flags": 32, "name": "_ai_scripting_follow_target_disable_evaluate" }, -{ "file_offset": 721648, "flags": 32, "name": "_ai_scripting_follow_target_players_evaluate" }, -{ "file_offset": 721712, "flags": 32, "name": "_ai_scripting_follow_target_unit_evaluate" }, -{ "file_offset": 721776, "flags": 32, "name": "_ai_scripting_follow_target_ai_evaluate" }, -{ "file_offset": 721840, "flags": 32, "name": "_ai_scripting_follow_distance_evaluate" }, -{ "file_offset": 721904, "flags": 32, "name": "_ai_scripting_conversation_stop_evaluate" }, -{ "file_offset": 721968, "flags": 32, "name": "_ai_scripting_conversation_advance_evaluate" }, -{ "file_offset": 722032, "flags": 32, "name": "_ai_scripting_link_activation_evaluate" }, -{ "file_offset": 722096, "flags": 32, "name": "_ai_scripting_berserk_evaluate" }, -{ "file_offset": 722160, "flags": 32, "name": "_ai_scripting_set_team_evaluate" }, -{ "file_offset": 722224, "flags": 32, "name": "_ai_scripting_allow_charge_evaluate" }, -{ "file_offset": 722288, "flags": 32, "name": "_ai_scripting_allow_dormant_evaluate" }, -{ "file_offset": 722352, "flags": 32, "name": "_ai_scripting_is_attacking_evaluate" }, -{ "file_offset": 722432, "flags": 32, "name": "_ai_scripting_command_list_status_evaluate" }, -{ "file_offset": 722512, "flags": 32, "name": "_ai_scripting_going_to_vehicle_evaluate" }, -{ "file_offset": 722592, "flags": 32, "name": "_ai_scripting_living_count_evaluate" }, -{ "file_offset": 722672, "flags": 32, "name": "_ai_scripting_living_fraction_evaluate" }, -{ "file_offset": 722736, "flags": 32, "name": "_ai_scripting_strength_evaluate" }, -{ "file_offset": 722800, "flags": 32, "name": "_ai_scripting_swarm_count_evaluate" }, -{ "file_offset": 722880, "flags": 32, "name": "_ai_scripting_nonswarm_count_evaluate" }, -{ "file_offset": 722960, "flags": 32, "name": "_object_list_from_ai_reference_evaluate" }, -{ "file_offset": 723024, "flags": 32, "name": "_ai_scripting_status_evaluate" }, -{ "file_offset": 723104, "flags": 32, "name": "_ai_scripting_conversation_evaluate" }, -{ "file_offset": 723184, "flags": 32, "name": "_ai_scripting_conversation_line_evaluate" }, -{ "file_offset": 723264, "flags": 32, "name": "_ai_scripting_conversation_status_evaluate" }, -{ "file_offset": 723344, "flags": 32, "name": "_ai_scripting_allegiance_broken_evaluate" }, -{ "file_offset": 723424, "flags": 32, "name": "_director_script_camera_evaluate" }, -{ "file_offset": 723488, "flags": 32, "name": "_scripted_camera_set_absolute_evaluate" }, -{ "file_offset": 723552, "flags": 32, "name": "_scripted_camera_set_evaluate" }, -{ "file_offset": 723616, "flags": 32, "name": "_scripted_camera_set_animation_evaluate" }, -{ "file_offset": 723680, "flags": 32, "name": "_scripted_camera_set_first_person_evaluate" }, -{ "file_offset": 723744, "flags": 32, "name": "_scripted_camera_set_dead_evaluate" }, -{ "file_offset": 723808, "flags": 32, "name": "_scripted_camera_time_evaluate" }, -{ "file_offset": 723856, "flags": 32, "name": "_director_save_camera_evaluate" }, -{ "file_offset": 723888, "flags": 32, "name": "_director_load_camera_evaluate" }, -{ "file_offset": 723920, "flags": 32, "name": "_game_time_set_speed_evaluate" }, -{ "file_offset": 723984, "flags": 32, "name": "_game_set_game_variant_from_name_evaluate" }, -{ "file_offset": 724048, "flags": 32, "name": "_game_time_get_evaluate" }, -{ "file_offset": 724080, "flags": 32, "name": "_game_difficulty_level_get_ignore_easy_evaluate" }, -{ "file_offset": 724128, "flags": 32, "name": "_game_difficulty_level_get_evaluate" }, -{ "file_offset": 724176, "flags": 32, "name": "_players_unzoom_all_evaluate" }, -{ "file_offset": 724208, "flags": 32, "name": "_player_input_enable_evaluate" }, -{ "file_offset": 724272, "flags": 32, "name": "_scripted_player_control_set_camera_control_evaluate" }, -{ "file_offset": 724352, "flags": 32, "name": "_player_control_action_test_reset_evaluate" }, -{ "file_offset": 724384, "flags": 32, "name": "_player_control_action_test_jump_evaluate" }, -{ "file_offset": 724432, "flags": 32, "name": "_player_control_action_test_primary_trigger_evaluate" }, -{ "file_offset": 724480, "flags": 32, "name": "_player_control_action_test_grenade_trigger_evaluate" }, -{ "file_offset": 724528, "flags": 32, "name": "_player_control_action_test_zoom_evaluate" }, -{ "file_offset": 724576, "flags": 32, "name": "_player_control_action_test_action_evaluate" }, -{ "file_offset": 724624, "flags": 32, "name": "_player_control_action_test_accept_evaluate" }, -{ "file_offset": 724672, "flags": 32, "name": "_player_control_action_test_back_evaluate" }, -{ "file_offset": 724720, "flags": 32, "name": "_player_control_action_test_look_relative_up_evaluate" }, -{ "file_offset": 724768, "flags": 32, "name": "_player_control_action_test_look_relative_down_evaluate" }, -{ "file_offset": 724816, "flags": 32, "name": "_player_control_action_test_look_relative_left_evaluate" }, -{ "file_offset": 724864, "flags": 32, "name": "_player_control_action_test_look_relative_right_evaluate" }, -{ "file_offset": 724912, "flags": 32, "name": "_player_control_action_test_look_relative_all_directions_evaluate" }, -{ "file_offset": 724960, "flags": 32, "name": "_player_control_action_test_move_relative_all_directions_evaluate" }, -{ "file_offset": 725008, "flags": 32, "name": "_player_add_equipment_evaluate" }, -{ "file_offset": 725072, "flags": 32, "name": "_debug_player_teleport_evaluate" }, -{ "file_offset": 725136, "flags": 32, "name": "_main_reset_map_evaluate" }, -{ "file_offset": 725168, "flags": 32, "name": "_main_set_map_name_evaluate" }, -{ "file_offset": 725232, "flags": 32, "name": "_main_set_multiplayer_map_name_evaluate" }, -{ "file_offset": 725296, "flags": 32, "name": "_main_set_difficulty_evaluate" }, -{ "file_offset": 725360, "flags": 32, "name": "_main_crash_evaluate" }, -{ "file_offset": 725424, "flags": 32, "name": "_scenario_switch_structure_bsp_evaluate" }, -{ "file_offset": 725488, "flags": 32, "name": "_global_structure_bsp_index_get_evaluate" }, -{ "file_offset": 725536, "flags": 32, "name": "_main_print_version_evaluate" }, -{ "file_offset": 725568, "flags": 32, "name": "_main_set_game_connection_to_film_playback_evaluate" }, -{ "file_offset": 725600, "flags": 32, "name": "_texture_cache_flush_evaluate" }, -{ "file_offset": 725632, "flags": 32, "name": "_sound_cache_flush_evaluate" }, -{ "file_offset": 725664, "flags": 32, "name": "_debug_dump_memory_evaluate" }, -{ "file_offset": 725696, "flags": 32, "name": "_debug_dump_memory_by_file_evaluate" }, -{ "file_offset": 725728, "flags": 32, "name": "_debug_dump_memory_for_file_evaluate" }, -{ "file_offset": 725792, "flags": 32, "name": "_tag_groups_dump_memory_evaluate" }, -{ "file_offset": 725824, "flags": 32, "name": "_profile_initialize_evaluate" }, -{ "file_offset": 725856, "flags": 32, "name": "_profile_dump_to_file_evaluate" }, -{ "file_offset": 725920, "flags": 32, "name": "_profile_sections_activate_evaluate" }, -{ "file_offset": 725984, "flags": 32, "name": "_profile_sections_deactivate_evaluate" }, -{ "file_offset": 726048, "flags": 32, "name": "_profile_graph_toggle_evaluate" }, -{ "file_offset": 726112, "flags": 32, "name": "_debug_pvs_evaluate" }, -{ "file_offset": 726176, "flags": 32, "name": "_radiosity_start_evaluate" }, -{ "file_offset": 726208, "flags": 32, "name": "_radiosity_save_evaluate" }, -{ "file_offset": 726240, "flags": 32, "name": "_radiosity_debug_point_evaluate" }, -{ "file_offset": 726272, "flags": 32, "name": "_ai_profile_change_render_spray_evaluate" }, -{ "file_offset": 726304, "flags": 32, "name": "_ai_debug_sound_point_set_evaluate" }, -{ "file_offset": 726336, "flags": 32, "name": "_ai_debug_vocalize_evaluate" }, -{ "file_offset": 726400, "flags": 32, "name": "_ai_debug_teleport_to_evaluate" }, -{ "file_offset": 726464, "flags": 32, "name": "_ai_debug_speak_evaluate" }, -{ "file_offset": 726528, "flags": 32, "name": "_ai_debug_speak_list_evaluate" }, -{ "file_offset": 726592, "flags": 32, "name": "_player_effect_screen_fade_in_evaluate" }, -{ "file_offset": 726672, "flags": 32, "name": "_player_effect_screen_fade_out_evaluate" }, -{ "file_offset": 726752, "flags": 32, "name": "_cinematic_start_evaluate" }, -{ "file_offset": 726784, "flags": 32, "name": "_cinematic_stop_evaluate" }, -{ "file_offset": 726816, "flags": 32, "name": "_cinematic_skip_start_evaluate" }, -{ "file_offset": 726848, "flags": 32, "name": "_cinematic_skip_stop_evaluate" }, -{ "file_offset": 726880, "flags": 32, "name": "_cinematic_show_letterbox_evaluate" }, -{ "file_offset": 726944, "flags": 32, "name": "_cinematic_set_title_evaluate" }, -{ "file_offset": 727008, "flags": 32, "name": "_cinematic_set_title_delayed_evaluate" }, -{ "file_offset": 727072, "flags": 32, "name": "_cinematic_suppress_bsp_object_creation_evaluate" }, -{ "file_offset": 727136, "flags": 32, "name": "_attract_mode_start_evaluate" }, -{ "file_offset": 727168, "flags": 32, "name": "_main_won_map_evaluate" }, -{ "file_offset": 727200, "flags": 32, "name": "_main_lost_map_evaluate" }, -{ "file_offset": 727232, "flags": 32, "name": "_game_safe_to_save_evaluate" }, -{ "file_offset": 727280, "flags": 32, "name": "_game_all_quiet_evaluate" }, -{ "file_offset": 727328, "flags": 32, "name": "_game_safe_to_speak_evaluate" }, -{ "file_offset": 727376, "flags": 32, "name": "_game_is_cooperative_evaluate" }, -{ "file_offset": 727424, "flags": 32, "name": "_main_save_map_safe_evaluate" }, -{ "file_offset": 727456, "flags": 32, "name": "_main_save_cancel_evaluate" }, -{ "file_offset": 727488, "flags": 32, "name": "_main_save_map_no_timeout_evaluate" }, -{ "file_offset": 727520, "flags": 32, "name": "_main_save_map_nonsafe_evaluate" }, -{ "file_offset": 727552, "flags": 32, "name": "_main_saving_map_evaluate" }, -{ "file_offset": 727600, "flags": 32, "name": "_main_revert_map_evaluate" }, -{ "file_offset": 727632, "flags": 32, "name": "_main_load_core_evaluate" }, -{ "file_offset": 727664, "flags": 32, "name": "_main_load_core_at_startup_evaluate" }, -{ "file_offset": 727696, "flags": 32, "name": "_main_load_core_name_evaluate" }, -{ "file_offset": 727760, "flags": 32, "name": "_main_load_core_name_at_startup_evaluate" }, -{ "file_offset": 727824, "flags": 32, "name": "_main_save_core_evaluate" }, -{ "file_offset": 727856, "flags": 32, "name": "_main_save_core_name_evaluate" }, -{ "file_offset": 727920, "flags": 32, "name": "_main_skip_evaluate" }, -{ "file_offset": 727984, "flags": 32, "name": "_game_state_reverted_evaluate" }, -{ "file_offset": 728032, "flags": 32, "name": "_scripted_sound_new_evaluate" }, -{ "file_offset": 728096, "flags": 32, "name": "_scripted_sound_time_evaluate" }, -{ "file_offset": 728160, "flags": 32, "name": "_scripted_sound_stop_evaluate" }, -{ "file_offset": 728224, "flags": 32, "name": "_scripted_foley_predict_evaluate" }, -{ "file_offset": 728288, "flags": 32, "name": "_scripted_looping_sound_start_evaluate" }, -{ "file_offset": 728352, "flags": 32, "name": "_scripted_looping_sound_stop_evaluate" }, -{ "file_offset": 728416, "flags": 32, "name": "_scripted_looping_sound_set_scale_evaluate" }, -{ "file_offset": 728480, "flags": 32, "name": "_scripted_looping_sound_set_alternate_evaluate" }, -{ "file_offset": 728544, "flags": 32, "name": "_debug_sound_classes_enable_evaluate" }, -{ "file_offset": 728608, "flags": 32, "name": "_debug_sound_classes_set_distances_evaluate" }, -{ "file_offset": 728688, "flags": 32, "name": "_debug_sound_classes_set_wet_evaluate" }, -{ "file_offset": 728752, "flags": 32, "name": "_sound_class_set_gain_evaluate" }, -{ "file_offset": 728816, "flags": 32, "name": "_sound_enable_evaluate" }, -{ "file_offset": 728880, "flags": 32, "name": "_vehicle_hover_evaluate" }, -{ "file_offset": 728944, "flags": 32, "name": "_scripted_show_hud_evaluate" }, -{ "file_offset": 729024, "flags": 32, "name": "_scripted_show_hud_help_text_evaluate" }, -{ "file_offset": 729104, "flags": 32, "name": "_scripted_hud_set_flashing_state_evaluate" }, -{ "file_offset": 729168, "flags": 32, "name": "_scripted_hud_restart_flashing_evaluate" }, -{ "file_offset": 729200, "flags": 32, "name": "_hud_unit_activate_nav_point_with_flag_evaluate" }, -{ "file_offset": 729280, "flags": 32, "name": "_hud_unit_activate_nav_point_with_object_evaluate" }, -{ "file_offset": 729360, "flags": 32, "name": "_hud_activate_team_nav_point_with_flag_evaluate" }, -{ "file_offset": 729440, "flags": 32, "name": "_hud_activate_team_nav_point_with_object_evaluate" }, -{ "file_offset": 729520, "flags": 32, "name": "_hud_unit_deactivate_nav_point_with_flag_evaluate" }, -{ "file_offset": 729584, "flags": 32, "name": "_hud_unit_deactivate_nav_point_with_object_evaluate" }, -{ "file_offset": 729648, "flags": 32, "name": "_hud_deactivate_team_nav_point_with_flag_evaluate" }, -{ "file_offset": 729712, "flags": 32, "name": "_hud_deactivate_team_nav_point_with_object_evaluate" }, -{ "file_offset": 729776, "flags": 32, "name": "_terminal_clear_evaluate" }, -{ "file_offset": 729808, "flags": 32, "name": "_errors_overflow_suppression_enable_evaluate" }, -{ "file_offset": 729872, "flags": 32, "name": "_structure_lens_flares_place_evaluate" }, -{ "file_offset": 729904, "flags": 32, "name": "_scripted_player_effect_set_translation_evaluate" }, -{ "file_offset": 729984, "flags": 32, "name": "_scripted_player_effect_set_rotation_evaluate" }, -{ "file_offset": 730064, "flags": 32, "name": "_scripted_player_effect_set_rumble_evaluate" }, -{ "file_offset": 730128, "flags": 32, "name": "_scripted_player_effect_start_evaluate" }, -{ "file_offset": 730192, "flags": 32, "name": "_scripted_player_effect_stop_evaluate" }, -{ "file_offset": 730256, "flags": 32, "name": "_scripted_hud_show_health_evaluate" }, -{ "file_offset": 730320, "flags": 32, "name": "_scripted_hud_blink_health_evaluate" }, -{ "file_offset": 730384, "flags": 32, "name": "_scripted_hud_show_shield_evaluate" }, -{ "file_offset": 730448, "flags": 32, "name": "_scripted_hud_blink_shield_evaluate" }, -{ "file_offset": 730512, "flags": 32, "name": "_scripted_hud_show_motion_sensor_evaluate" }, -{ "file_offset": 730576, "flags": 32, "name": "_scripted_hud_blink_motion_sensor_evaluate" }, -{ "file_offset": 730640, "flags": 32, "name": "_scripted_hud_show_crosshair_evaluate" }, -{ "file_offset": 730704, "flags": 32, "name": "_scripted_hud_messages_clear_evaluate" }, -{ "file_offset": 730736, "flags": 32, "name": "_scripted_hud_set_state_message_evaluate" }, -{ "file_offset": 730800, "flags": 32, "name": "_scripted_hud_set_objective_evaluate" }, -{ "file_offset": 730864, "flags": 32, "name": "_scripted_hud_set_timer_time_evaluate" }, -{ "file_offset": 730928, "flags": 32, "name": "_scripted_hud_set_timer_warning_cutoff_evaluate" }, -{ "file_offset": 730992, "flags": 32, "name": "_scripted_hud_set_timer_position_evaluate" }, -{ "file_offset": 731072, "flags": 32, "name": "_scripted_hud_show_timer_evaluate" }, -{ "file_offset": 731136, "flags": 32, "name": "_scripted_hud_pause_timer_evaluate" }, -{ "file_offset": 731200, "flags": 32, "name": "_scripted_hud_get_timer_ticks_evaluate" }, -{ "file_offset": 731248, "flags": 32, "name": "_scripted_hud_time_code_show_evaluate" }, -{ "file_offset": 731312, "flags": 32, "name": "_scripted_hud_time_code_start_evaluate" }, -{ "file_offset": 731376, "flags": 32, "name": "_scripted_hud_time_code_reset_evaluate" }, -{ "file_offset": 731408, "flags": 32, "name": "_rasterizer_decals_flush_evaluate" }, -{ "file_offset": 731440, "flags": 32, "name": "_rasterizer_fps_accumulate_evaluate" }, -{ "file_offset": 731472, "flags": 32, "name": "_rasterizer_model_ambient_reflection_tint_evaluate" }, -{ "file_offset": 731552, "flags": 32, "name": "_rasterizer_lights_reset_for_new_map_evaluate" }, -{ "file_offset": 731584, "flags": 32, "name": "_rasterizer_script_screen_effect_set_value_evaluate" }, -{ "file_offset": 731648, "flags": 32, "name": "_rasterizer_screen_effect_start_evaluate" }, -{ "file_offset": 731712, "flags": 32, "name": "_rasterizer_screen_effect_set_convolution_evaluate" }, -{ "file_offset": 731808, "flags": 32, "name": "_rasterizer_screen_effect_set_filter_evaluate" }, -{ "file_offset": 731904, "flags": 32, "name": "_rasterizer_screen_effect_set_filter_desaturation_tint_evaluate" }, -{ "file_offset": 731984, "flags": 32, "name": "_rasterizer_screen_effect_set_video_evaluate" }, -{ "file_offset": 732048, "flags": 32, "name": "_rasterizer_screen_effect_stop_evaluate" }, -{ "file_offset": 732080, "flags": 32, "name": "_rasterizer_set_near_clip_distance_evaluate" }, -{ "file_offset": 732144, "flags": 32, "name": "_enumerate_memory_units_test_evaluate" }, -{ "file_offset": 732176, "flags": 32, "name": "_saved_game_files_delete_all_custom_profiles_evaluate" }, -{ "file_offset": 732208, "flags": 32, "name": "_player_ui_fast_setup_network_server_evaluate" }, -{ "file_offset": 732240, "flags": 32, "name": "_player_ui_activate_all_solo_levels_evaluate" }, -{ "file_offset": 732272, "flags": 32, "name": "_player0_look_invert_pitch_evaluate" }, -{ "file_offset": 732336, "flags": 32, "name": "_player0_look_pitch_is_inverted_evaluate" }, -{ "file_offset": 732384, "flags": 32, "name": "_player0_joystick_set_is_normal_evaluate" }, -{ "file_offset": 732432, "flags": 32, "name": "_ui_widget_debug_show_path_evaluate" }, -{ "file_offset": 732496, "flags": 32, "name": "_display_scenario_help_evaluate" }, -{ "file_offset": 732560, "flags": 32, "name": "_network_game_client_request_immediate_start_evaluate" }, -{ "file_offset": 732592, "flags": 32, "name": "_xbox_set_machine_name_evaluate" }, +{ "file_offset": 709264, "flags": 32, "name": "_hs_not_evaluate", "static": true }, +{ "file_offset": 709344, "flags": 32, "name": "_hs_print_evaluate", "static": true }, +{ "file_offset": 709408, "flags": 32, "name": "_hs_players_evaluate", "static": true }, +{ "file_offset": 709440, "flags": 32, "name": "_hs_teleport_players_not_in_trigger_volume_evaluate", "static": true }, +{ "file_offset": 709504, "flags": 32, "name": "_scenario_trigger_volume_test_object_evaluate", "static": true }, +{ "file_offset": 709584, "flags": 32, "name": "_hs_trigger_volume_test_objects_any_evaluate", "static": true }, +{ "file_offset": 709664, "flags": 32, "name": "_hs_trigger_volume_test_objects_all_evaluate", "static": true }, +{ "file_offset": 709744, "flags": 32, "name": "_hs_object_create_evaluate", "static": true }, +{ "file_offset": 709808, "flags": 32, "name": "_hs_object_destroy_evaluate", "static": true }, +{ "file_offset": 709872, "flags": 32, "name": "_hs_object_create_anew_evaluate", "static": true }, +{ "file_offset": 709936, "flags": 32, "name": "_hs_object_create_containing_evaluate", "static": true }, +{ "file_offset": 710000, "flags": 32, "name": "_hs_object_create_anew_containing_evaluate", "static": true }, +{ "file_offset": 710064, "flags": 32, "name": "_hs_object_destroy_containing_evaluate", "static": true }, +{ "file_offset": 710128, "flags": 32, "name": "_hs_object_destroy_all_evaluate", "static": true }, +{ "file_offset": 710160, "flags": 32, "name": "_hs_object_teleport_evaluate", "static": true }, +{ "file_offset": 710224, "flags": 32, "name": "_hs_object_set_facing_evaluate", "static": true }, +{ "file_offset": 710288, "flags": 32, "name": "_hs_object_set_shield_evaluate", "static": true }, +{ "file_offset": 710352, "flags": 32, "name": "_hs_object_set_permutation_evaluate", "static": true }, +{ "file_offset": 710416, "flags": 32, "name": "_hs_object_list_get_element_evaluate", "static": true }, +{ "file_offset": 710480, "flags": 32, "name": "_object_list_count_evaluate", "static": true }, +{ "file_offset": 710560, "flags": 32, "name": "_hs_effect_new_evaluate", "static": true }, +{ "file_offset": 710624, "flags": 32, "name": "_hs_effect_new_from_object_marker_evaluate", "static": true }, +{ "file_offset": 710688, "flags": 32, "name": "_hs_damage_new_evaluate", "static": true }, +{ "file_offset": 710752, "flags": 32, "name": "_hs_damage_object_evaluate", "static": true }, +{ "file_offset": 710816, "flags": 32, "name": "_hs_objects_can_see_object_evaluate", "static": true }, +{ "file_offset": 710896, "flags": 32, "name": "_hs_objects_can_see_flag_evaluate", "static": true }, +{ "file_offset": 710976, "flags": 32, "name": "_hs_objects_delete_by_definition_evaluate", "static": true }, +{ "file_offset": 711040, "flags": 32, "name": "_hs_sound_set_gain_evaluate", "static": true }, +{ "file_offset": 711104, "flags": 32, "name": "_hs_sound_get_gain_evaluate", "static": true }, +{ "file_offset": 711168, "flags": 32, "name": "_numeric_countdown_timer_set_evaluate", "static": true }, +{ "file_offset": 711232, "flags": 32, "name": "_numeric_countdown_timer_get_evaluate", "static": true }, +{ "file_offset": 711312, "flags": 32, "name": "_numeric_countdown_timer_stop_evaluate", "static": true }, +{ "file_offset": 711344, "flags": 32, "name": "_numeric_countdown_timer_restart_evaluate", "static": true }, +{ "file_offset": 711376, "flags": 32, "name": "_breakable_surfaces_enable_evaluate", "static": true }, +{ "file_offset": 711440, "flags": 32, "name": "_recorded_animation_play_evaluate", "static": true }, +{ "file_offset": 711520, "flags": 32, "name": "_recorded_animation_play_and_delete_evaluate", "static": true }, +{ "file_offset": 711600, "flags": 32, "name": "_recorded_animation_play_and_hover_evaluate", "static": true }, +{ "file_offset": 711680, "flags": 32, "name": "_recorded_animation_kill_evaluate", "static": true }, +{ "file_offset": 711744, "flags": 32, "name": "_recorded_animation_get_time_left_evaluate", "static": true }, +{ "file_offset": 711824, "flags": 32, "name": "_object_set_ranged_attack_inhibited_evaluate", "static": true }, +{ "file_offset": 711888, "flags": 32, "name": "_object_set_melee_attack_inhibited_evaluate", "static": true }, +{ "file_offset": 711952, "flags": 32, "name": "_objects_dump_memory_evaluate", "static": true }, +{ "file_offset": 711984, "flags": 32, "name": "_object_scripting_set_collideable_evaluate", "static": true }, +{ "file_offset": 712048, "flags": 32, "name": "_objects_scripting_set_scale_evaluate", "static": true }, +{ "file_offset": 712112, "flags": 32, "name": "_objects_scripting_attach_evaluate", "static": true }, +{ "file_offset": 712176, "flags": 32, "name": "_objects_scripting_detach_evaluate", "static": true }, +{ "file_offset": 712240, "flags": 32, "name": "_garbage_collect_now_evaluate", "static": true }, +{ "file_offset": 712272, "flags": 32, "name": "_object_cannot_take_damage_evaluate", "static": true }, +{ "file_offset": 712336, "flags": 32, "name": "_object_can_take_damage_evaluate", "static": true }, +{ "file_offset": 712400, "flags": 32, "name": "_object_beautify_evaluate", "static": true }, +{ "file_offset": 712464, "flags": 32, "name": "_hs_objects_predict_evaluate", "static": true }, +{ "file_offset": 712528, "flags": 32, "name": "_object_definition_predict_evaluate", "static": true }, +{ "file_offset": 712592, "flags": 32, "name": "_object_pvs_set_object_evaluate", "static": true }, +{ "file_offset": 712656, "flags": 32, "name": "_object_pvs_set_camera_point_evaluate", "static": true }, +{ "file_offset": 712720, "flags": 32, "name": "_object_pvs_clear_evaluate", "static": true }, +{ "file_offset": 712752, "flags": 32, "name": "_object_pvs_activate_evaluate", "static": true }, +{ "file_offset": 712816, "flags": 32, "name": "_lights_enable_evaluate", "static": true }, +{ "file_offset": 712896, "flags": 32, "name": "_scenery_get_animation_time_evaluate", "static": true }, +{ "file_offset": 712976, "flags": 32, "name": "_scenery_animation_start_evaluate", "static": true }, +{ "file_offset": 713040, "flags": 32, "name": "_scenery_animation_start_at_frame_evaluate", "static": true }, +{ "file_offset": 713120, "flags": 32, "name": "_render_effects_evaluate", "static": true }, +{ "file_offset": 713184, "flags": 32, "name": "_unit_scripting_can_blink_evaluate", "static": true }, +{ "file_offset": 713248, "flags": 32, "name": "_unit_open_evaluate", "static": true }, +{ "file_offset": 713312, "flags": 32, "name": "_unit_close_evaluate", "static": true }, +{ "file_offset": 713376, "flags": 32, "name": "_unit_kill_evaluate", "static": true }, +{ "file_offset": 713440, "flags": 32, "name": "_unit_kill_silent_evaluate", "static": true }, +{ "file_offset": 713504, "flags": 32, "name": "_unit_get_custom_animation_time_evaluate", "static": true }, +{ "file_offset": 713584, "flags": 32, "name": "_unit_stop_custom_animation_evaluate", "static": true }, +{ "file_offset": 713648, "flags": 32, "name": "_unit_start_user_animation_evaluate", "static": true }, +{ "file_offset": 713728, "flags": 32, "name": "_unit_scripting_start_user_animation_list_evaluate", "static": true }, +{ "file_offset": 713808, "flags": 32, "name": "_unit_custom_animation_at_frame_evaluate", "static": true }, +{ "file_offset": 713904, "flags": 32, "name": "_unit_is_playing_custom_animation_evaluate", "static": true }, +{ "file_offset": 713984, "flags": 32, "name": "_unit_aim_without_turning_evaluate", "static": true }, +{ "file_offset": 714048, "flags": 32, "name": "_unit_set_emotion_evaluate", "static": true }, +{ "file_offset": 714112, "flags": 32, "name": "_unit_set_enterable_by_player_evaluate", "static": true }, +{ "file_offset": 714176, "flags": 32, "name": "_unit_scripting_enter_vehicle_evaluate", "static": true }, +{ "file_offset": 714240, "flags": 32, "name": "_unit_scripting_vehicle_test_seat_list_evaluate", "static": true }, +{ "file_offset": 714320, "flags": 32, "name": "_unit_scripting_vehicle_test_seat_evaluate", "static": true }, +{ "file_offset": 714400, "flags": 32, "name": "_unit_scripting_set_emotion_animation_evaluate", "static": true }, +{ "file_offset": 714464, "flags": 32, "name": "_unit_scripting_exit_vehicle_evaluate", "static": true }, +{ "file_offset": 714528, "flags": 32, "name": "_unit_scripting_set_maximum_vitality_evaluate", "static": true }, +{ "file_offset": 714608, "flags": 32, "name": "_units_scripting_set_maximum_vitality_evaluate", "static": true }, +{ "file_offset": 714688, "flags": 32, "name": "_unit_scripting_set_current_vitality_evaluate", "static": true }, +{ "file_offset": 714768, "flags": 32, "name": "_units_scripting_set_current_vitality_evaluate", "static": true }, +{ "file_offset": 714848, "flags": 32, "name": "_vehicle_scripting_load_magic_evaluate", "static": true }, +{ "file_offset": 714928, "flags": 32, "name": "_vehicle_scripting_unload_evaluate", "static": true }, +{ "file_offset": 715008, "flags": 32, "name": "_scripting_set_magic_base_seat_evaluate", "static": true }, +{ "file_offset": 715072, "flags": 32, "name": "_unit_scripting_set_seat_evaluate", "static": true }, +{ "file_offset": 715136, "flags": 32, "name": "_scripting_magic_melee_attack_evaluate", "static": true }, +{ "file_offset": 715168, "flags": 32, "name": "_unit_scripting_unit_riders_evaluate", "static": true }, +{ "file_offset": 715232, "flags": 32, "name": "_unit_scripting_unit_driver_evaluate", "static": true }, +{ "file_offset": 715296, "flags": 32, "name": "_unit_scripting_unit_gunner_evaluate", "static": true }, +{ "file_offset": 715360, "flags": 32, "name": "_unit_scripting_get_health_evaluate", "static": true }, +{ "file_offset": 715424, "flags": 32, "name": "_unit_scripting_get_shield_evaluate", "static": true }, +{ "file_offset": 715488, "flags": 32, "name": "_unit_scripting_get_grenade_count_evaluate", "static": true }, +{ "file_offset": 715568, "flags": 32, "name": "_unit_scripting_has_weapon_evaluate", "static": true }, +{ "file_offset": 715648, "flags": 32, "name": "_unit_scripting_has_weapon_readied_evaluate", "static": true }, +{ "file_offset": 715728, "flags": 32, "name": "_unit_scripting_doesnt_drop_items_evaluate", "static": true }, +{ "file_offset": 715792, "flags": 32, "name": "_unit_scripting_impervious_evaluate", "static": true }, +{ "file_offset": 715856, "flags": 32, "name": "_unit_scripting_suspended_evaluate", "static": true }, +{ "file_offset": 715920, "flags": 32, "name": "_unit_solo_player_integrated_night_vision_is_active_evaluate", "static": true }, +{ "file_offset": 715968, "flags": 32, "name": "_units_set_desired_flashlight_state_evaluate", "static": true }, +{ "file_offset": 716032, "flags": 32, "name": "_unit_set_desired_flashlight_state_evaluate", "static": true }, +{ "file_offset": 716096, "flags": 32, "name": "_unit_get_current_flashlight_state_evaluate", "static": true }, +{ "file_offset": 716176, "flags": 32, "name": "_device_set_never_appears_locked_evaluate", "static": true }, +{ "file_offset": 716240, "flags": 32, "name": "_device_set_power_evaluate", "static": true }, +{ "file_offset": 716304, "flags": 32, "name": "_device_get_power_evaluate", "static": true }, +{ "file_offset": 716368, "flags": 32, "name": "_device_set_desired_position_evaluate", "static": true }, +{ "file_offset": 716448, "flags": 32, "name": "_device_get_position_evaluate", "static": true }, +{ "file_offset": 716512, "flags": 32, "name": "_device_set_actual_position_evaluate", "static": true }, +{ "file_offset": 716576, "flags": 32, "name": "_device_group_get_value_evaluate", "static": true }, +{ "file_offset": 716640, "flags": 32, "name": "_device_group_set_desired_value_evaluate", "static": true }, +{ "file_offset": 716720, "flags": 32, "name": "_device_group_set_actual_value_evaluate", "static": true }, +{ "file_offset": 716784, "flags": 32, "name": "_device_one_sided_set_evaluate", "static": true }, +{ "file_offset": 716848, "flags": 32, "name": "_device_operates_automatically_set_evaluate", "static": true }, +{ "file_offset": 716912, "flags": 32, "name": "_device_group_change_only_once_more_set_evaluate", "static": true }, +{ "file_offset": 716976, "flags": 32, "name": "_breakable_surfaces_reset_evaluate", "static": true }, +{ "file_offset": 717008, "flags": 32, "name": "_cheat_all_powerups_evaluate", "static": true }, +{ "file_offset": 717040, "flags": 32, "name": "_cheat_all_weapons_evaluate", "static": true }, +{ "file_offset": 717072, "flags": 32, "name": "_cheat_all_vehicles_evaluate", "static": true }, +{ "file_offset": 717104, "flags": 32, "name": "_cheat_teleport_to_camera_evaluate", "static": true }, +{ "file_offset": 717136, "flags": 32, "name": "_cheat_active_camouflage_evaluate", "static": true }, +{ "file_offset": 717168, "flags": 32, "name": "_cheat_active_camouflage_local_player_evaluate", "static": true }, +{ "file_offset": 717232, "flags": 32, "name": "_cheats_load_evaluate", "static": true }, +{ "file_offset": 717264, "flags": 32, "name": "_ai_globals_ai_active_evaluate", "static": true }, +{ "file_offset": 717328, "flags": 32, "name": "_ai_globals_dialogue_triggers_enabled_evaluate", "static": true }, +{ "file_offset": 717392, "flags": 32, "name": "_ai_globals_grenades_enabled_evaluate", "static": true }, +{ "file_offset": 717456, "flags": 32, "name": "_ai_scripting_free_evaluate", "static": true }, +{ "file_offset": 717520, "flags": 32, "name": "_ai_scripting_free_units_evaluate", "static": true }, +{ "file_offset": 717584, "flags": 32, "name": "_ai_scripting_attach_unit_evaluate", "static": true }, +{ "file_offset": 717648, "flags": 32, "name": "_ai_scripting_attach_units_evaluate", "static": true }, +{ "file_offset": 717712, "flags": 32, "name": "_ai_scripting_attach_free_evaluate", "static": true }, +{ "file_offset": 717776, "flags": 32, "name": "_ai_scripting_detach_unit_evaluate", "static": true }, +{ "file_offset": 717840, "flags": 32, "name": "_ai_scripting_detach_units_evaluate", "static": true }, +{ "file_offset": 717904, "flags": 32, "name": "_ai_scripting_place_evaluate", "static": true }, +{ "file_offset": 717968, "flags": 32, "name": "_ai_scripting_kill_evaluate", "static": true }, +{ "file_offset": 718032, "flags": 32, "name": "_ai_scripting_kill_silent_evaluate", "static": true }, +{ "file_offset": 718096, "flags": 32, "name": "_ai_scripting_erase_evaluate", "static": true }, +{ "file_offset": 718160, "flags": 32, "name": "_ai_scripting_erase_all_evaluate", "static": true }, +{ "file_offset": 718192, "flags": 32, "name": "_ai_scripting_select_evaluate", "static": true }, +{ "file_offset": 718256, "flags": 32, "name": "_ai_scripting_deselect_evaluate", "static": true }, +{ "file_offset": 718288, "flags": 32, "name": "_ai_scripting_spawn_actor_evaluate", "static": true }, +{ "file_offset": 718352, "flags": 32, "name": "_ai_scripting_set_respawn_evaluate", "static": true }, +{ "file_offset": 718416, "flags": 32, "name": "_ai_scripting_set_deaf_evaluate", "static": true }, +{ "file_offset": 718480, "flags": 32, "name": "_ai_scripting_set_blind_evaluate", "static": true }, +{ "file_offset": 718544, "flags": 32, "name": "_ai_scripting_magically_see_encounter_evaluate", "static": true }, +{ "file_offset": 718608, "flags": 32, "name": "_ai_scripting_magically_see_players_evaluate", "static": true }, +{ "file_offset": 718672, "flags": 32, "name": "_ai_scripting_magically_see_unit_evaluate", "static": true }, +{ "file_offset": 718736, "flags": 32, "name": "_ai_scripting_magically_see_units_evaluate", "static": true }, +{ "file_offset": 718800, "flags": 32, "name": "_ai_scripting_timer_start_evaluate", "static": true }, +{ "file_offset": 718864, "flags": 32, "name": "_ai_scripting_timer_expire_evaluate", "static": true }, +{ "file_offset": 718928, "flags": 32, "name": "_ai_scripting_attack_evaluate", "static": true }, +{ "file_offset": 718992, "flags": 32, "name": "_ai_scripting_defend_evaluate", "static": true }, +{ "file_offset": 719056, "flags": 32, "name": "_ai_scripting_retreat_evaluate", "static": true }, +{ "file_offset": 719120, "flags": 32, "name": "_ai_scripting_maneuver_evaluate", "static": true }, +{ "file_offset": 719184, "flags": 32, "name": "_ai_scripting_maneuver_enable_evaluate", "static": true }, +{ "file_offset": 719248, "flags": 32, "name": "_ai_scripting_migrate_evaluate", "static": true }, +{ "file_offset": 719312, "flags": 32, "name": "_ai_scripting_migrate_and_speak_evaluate", "static": true }, +{ "file_offset": 719376, "flags": 32, "name": "_ai_scripting_migrate_by_unit_evaluate", "static": true }, +{ "file_offset": 719440, "flags": 32, "name": "_ai_scripting_allegiance_evaluate", "static": true }, +{ "file_offset": 719504, "flags": 32, "name": "_ai_scripting_allegiance_remove_evaluate", "static": true }, +{ "file_offset": 719568, "flags": 32, "name": "_ai_scripting_go_to_vehicle_evaluate", "static": true }, +{ "file_offset": 719632, "flags": 32, "name": "_ai_scripting_go_to_vehicle_override_evaluate", "static": true }, +{ "file_offset": 719696, "flags": 32, "name": "_ai_scripting_exit_vehicle_evaluate", "static": true }, +{ "file_offset": 719760, "flags": 32, "name": "_ai_scripting_braindead_evaluate", "static": true }, +{ "file_offset": 719824, "flags": 32, "name": "_ai_scripting_braindead_by_unit_evaluate", "static": true }, +{ "file_offset": 719888, "flags": 32, "name": "_ai_scripting_ignore_evaluate", "static": true }, +{ "file_offset": 719952, "flags": 32, "name": "_ai_scripting_prefer_target_evaluate", "static": true }, +{ "file_offset": 720016, "flags": 32, "name": "_ai_scripting_teleport_starting_location_evaluate", "static": true }, +{ "file_offset": 720080, "flags": 32, "name": "_ai_scripting_teleport_starting_location_if_unsupported_evaluate", "static": true }, +{ "file_offset": 720144, "flags": 32, "name": "_ai_scripting_renew_evaluate", "static": true }, +{ "file_offset": 720208, "flags": 32, "name": "_ai_scripting_try_to_fight_nothing_evaluate", "static": true }, +{ "file_offset": 720272, "flags": 32, "name": "_ai_scripting_try_to_fight_evaluate", "static": true }, +{ "file_offset": 720336, "flags": 32, "name": "_ai_scripting_try_to_fight_player_evaluate", "static": true }, +{ "file_offset": 720400, "flags": 32, "name": "_ai_scripting_command_list_evaluate", "static": true }, +{ "file_offset": 720464, "flags": 32, "name": "_ai_scripting_command_list_by_unit_evaluate", "static": true }, +{ "file_offset": 720528, "flags": 32, "name": "_ai_scripting_command_list_advance_evaluate", "static": true }, +{ "file_offset": 720592, "flags": 32, "name": "_ai_scripting_command_list_advance_by_unit_evaluate", "static": true }, +{ "file_offset": 720656, "flags": 32, "name": "_ai_scripting_force_active_evaluate", "static": true }, +{ "file_offset": 720720, "flags": 32, "name": "_ai_scripting_force_active_by_unit_evaluate", "static": true }, +{ "file_offset": 720784, "flags": 32, "name": "_ai_scripting_set_return_state_evaluate", "static": true }, +{ "file_offset": 720848, "flags": 32, "name": "_ai_scripting_set_current_state_evaluate", "static": true }, +{ "file_offset": 720912, "flags": 32, "name": "_ai_scripting_playfight_evaluate", "static": true }, +{ "file_offset": 720976, "flags": 32, "name": "_ai_scripting_reconnect_evaluate", "static": true }, +{ "file_offset": 721008, "flags": 32, "name": "_ai_scripting_vehicle_encounter_evaluate", "static": true }, +{ "file_offset": 721072, "flags": 32, "name": "_ai_scripting_vehicle_enterable_distance_evaluate", "static": true }, +{ "file_offset": 721136, "flags": 32, "name": "_ai_scripting_vehicle_enterable_team_evaluate", "static": true }, +{ "file_offset": 721200, "flags": 32, "name": "_ai_scripting_vehicle_enterable_actor_type_evaluate", "static": true }, +{ "file_offset": 721264, "flags": 32, "name": "_ai_scripting_vehicle_enterable_actors_evaluate", "static": true }, +{ "file_offset": 721328, "flags": 32, "name": "_ai_scripting_vehicle_enterable_disable_evaluate", "static": true }, +{ "file_offset": 721392, "flags": 32, "name": "_ai_scripting_look_at_object_evaluate", "static": true }, +{ "file_offset": 721456, "flags": 32, "name": "_ai_scripting_stop_looking_evaluate", "static": true }, +{ "file_offset": 721520, "flags": 32, "name": "_ai_scripting_automatic_migration_target_evaluate", "static": true }, +{ "file_offset": 721584, "flags": 32, "name": "_ai_scripting_follow_target_disable_evaluate", "static": true }, +{ "file_offset": 721648, "flags": 32, "name": "_ai_scripting_follow_target_players_evaluate", "static": true }, +{ "file_offset": 721712, "flags": 32, "name": "_ai_scripting_follow_target_unit_evaluate", "static": true }, +{ "file_offset": 721776, "flags": 32, "name": "_ai_scripting_follow_target_ai_evaluate", "static": true }, +{ "file_offset": 721840, "flags": 32, "name": "_ai_scripting_follow_distance_evaluate", "static": true }, +{ "file_offset": 721904, "flags": 32, "name": "_ai_scripting_conversation_stop_evaluate", "static": true }, +{ "file_offset": 721968, "flags": 32, "name": "_ai_scripting_conversation_advance_evaluate", "static": true }, +{ "file_offset": 722032, "flags": 32, "name": "_ai_scripting_link_activation_evaluate", "static": true }, +{ "file_offset": 722096, "flags": 32, "name": "_ai_scripting_berserk_evaluate", "static": true }, +{ "file_offset": 722160, "flags": 32, "name": "_ai_scripting_set_team_evaluate", "static": true }, +{ "file_offset": 722224, "flags": 32, "name": "_ai_scripting_allow_charge_evaluate", "static": true }, +{ "file_offset": 722288, "flags": 32, "name": "_ai_scripting_allow_dormant_evaluate", "static": true }, +{ "file_offset": 722352, "flags": 32, "name": "_ai_scripting_is_attacking_evaluate", "static": true }, +{ "file_offset": 722432, "flags": 32, "name": "_ai_scripting_command_list_status_evaluate", "static": true }, +{ "file_offset": 722512, "flags": 32, "name": "_ai_scripting_going_to_vehicle_evaluate", "static": true }, +{ "file_offset": 722592, "flags": 32, "name": "_ai_scripting_living_count_evaluate", "static": true }, +{ "file_offset": 722672, "flags": 32, "name": "_ai_scripting_living_fraction_evaluate", "static": true }, +{ "file_offset": 722736, "flags": 32, "name": "_ai_scripting_strength_evaluate", "static": true }, +{ "file_offset": 722800, "flags": 32, "name": "_ai_scripting_swarm_count_evaluate", "static": true }, +{ "file_offset": 722880, "flags": 32, "name": "_ai_scripting_nonswarm_count_evaluate", "static": true }, +{ "file_offset": 722960, "flags": 32, "name": "_object_list_from_ai_reference_evaluate", "static": true }, +{ "file_offset": 723024, "flags": 32, "name": "_ai_scripting_status_evaluate", "static": true }, +{ "file_offset": 723104, "flags": 32, "name": "_ai_scripting_conversation_evaluate", "static": true }, +{ "file_offset": 723184, "flags": 32, "name": "_ai_scripting_conversation_line_evaluate", "static": true }, +{ "file_offset": 723264, "flags": 32, "name": "_ai_scripting_conversation_status_evaluate", "static": true }, +{ "file_offset": 723344, "flags": 32, "name": "_ai_scripting_allegiance_broken_evaluate", "static": true }, +{ "file_offset": 723424, "flags": 32, "name": "_director_script_camera_evaluate", "static": true }, +{ "file_offset": 723488, "flags": 32, "name": "_scripted_camera_set_absolute_evaluate", "static": true }, +{ "file_offset": 723552, "flags": 32, "name": "_scripted_camera_set_evaluate", "static": true }, +{ "file_offset": 723616, "flags": 32, "name": "_scripted_camera_set_animation_evaluate", "static": true }, +{ "file_offset": 723680, "flags": 32, "name": "_scripted_camera_set_first_person_evaluate", "static": true }, +{ "file_offset": 723744, "flags": 32, "name": "_scripted_camera_set_dead_evaluate", "static": true }, +{ "file_offset": 723808, "flags": 32, "name": "_scripted_camera_time_evaluate", "static": true }, +{ "file_offset": 723856, "flags": 32, "name": "_director_save_camera_evaluate", "static": true }, +{ "file_offset": 723888, "flags": 32, "name": "_director_load_camera_evaluate", "static": true }, +{ "file_offset": 723920, "flags": 32, "name": "_game_time_set_speed_evaluate", "static": true }, +{ "file_offset": 723984, "flags": 32, "name": "_game_set_game_variant_from_name_evaluate", "static": true }, +{ "file_offset": 724048, "flags": 32, "name": "_game_time_get_evaluate", "static": true }, +{ "file_offset": 724080, "flags": 32, "name": "_game_difficulty_level_get_ignore_easy_evaluate", "static": true }, +{ "file_offset": 724128, "flags": 32, "name": "_game_difficulty_level_get_evaluate", "static": true }, +{ "file_offset": 724176, "flags": 32, "name": "_players_unzoom_all_evaluate", "static": true }, +{ "file_offset": 724208, "flags": 32, "name": "_player_input_enable_evaluate", "static": true }, +{ "file_offset": 724272, "flags": 32, "name": "_scripted_player_control_set_camera_control_evaluate", "static": true }, +{ "file_offset": 724352, "flags": 32, "name": "_player_control_action_test_reset_evaluate", "static": true }, +{ "file_offset": 724384, "flags": 32, "name": "_player_control_action_test_jump_evaluate", "static": true }, +{ "file_offset": 724432, "flags": 32, "name": "_player_control_action_test_primary_trigger_evaluate", "static": true }, +{ "file_offset": 724480, "flags": 32, "name": "_player_control_action_test_grenade_trigger_evaluate", "static": true }, +{ "file_offset": 724528, "flags": 32, "name": "_player_control_action_test_zoom_evaluate", "static": true }, +{ "file_offset": 724576, "flags": 32, "name": "_player_control_action_test_action_evaluate", "static": true }, +{ "file_offset": 724624, "flags": 32, "name": "_player_control_action_test_accept_evaluate", "static": true }, +{ "file_offset": 724672, "flags": 32, "name": "_player_control_action_test_back_evaluate", "static": true }, +{ "file_offset": 724720, "flags": 32, "name": "_player_control_action_test_look_relative_up_evaluate", "static": true }, +{ "file_offset": 724768, "flags": 32, "name": "_player_control_action_test_look_relative_down_evaluate", "static": true }, +{ "file_offset": 724816, "flags": 32, "name": "_player_control_action_test_look_relative_left_evaluate", "static": true }, +{ "file_offset": 724864, "flags": 32, "name": "_player_control_action_test_look_relative_right_evaluate", "static": true }, +{ "file_offset": 724912, "flags": 32, "name": "_player_control_action_test_look_relative_all_directions_evaluate", "static": true }, +{ "file_offset": 724960, "flags": 32, "name": "_player_control_action_test_move_relative_all_directions_evaluate", "static": true }, +{ "file_offset": 725008, "flags": 32, "name": "_player_add_equipment_evaluate", "static": true }, +{ "file_offset": 725072, "flags": 32, "name": "_debug_player_teleport_evaluate", "static": true }, +{ "file_offset": 725136, "flags": 32, "name": "_main_reset_map_evaluate", "static": true }, +{ "file_offset": 725168, "flags": 32, "name": "_main_set_map_name_evaluate", "static": true }, +{ "file_offset": 725232, "flags": 32, "name": "_main_set_multiplayer_map_name_evaluate", "static": true }, +{ "file_offset": 725296, "flags": 32, "name": "_main_set_difficulty_evaluate", "static": true }, +{ "file_offset": 725360, "flags": 32, "name": "_main_crash_evaluate", "static": true }, +{ "file_offset": 725424, "flags": 32, "name": "_scenario_switch_structure_bsp_evaluate", "static": true }, +{ "file_offset": 725488, "flags": 32, "name": "_global_structure_bsp_index_get_evaluate", "static": true }, +{ "file_offset": 725536, "flags": 32, "name": "_main_print_version_evaluate", "static": true }, +{ "file_offset": 725568, "flags": 32, "name": "_main_set_game_connection_to_film_playback_evaluate", "static": true }, +{ "file_offset": 725600, "flags": 32, "name": "_texture_cache_flush_evaluate", "static": true }, +{ "file_offset": 725632, "flags": 32, "name": "_sound_cache_flush_evaluate", "static": true }, +{ "file_offset": 725664, "flags": 32, "name": "_debug_dump_memory_evaluate", "static": true }, +{ "file_offset": 725696, "flags": 32, "name": "_debug_dump_memory_by_file_evaluate", "static": true }, +{ "file_offset": 725728, "flags": 32, "name": "_debug_dump_memory_for_file_evaluate", "static": true }, +{ "file_offset": 725792, "flags": 32, "name": "_tag_groups_dump_memory_evaluate", "static": true }, +{ "file_offset": 725824, "flags": 32, "name": "_profile_initialize_evaluate", "static": true }, +{ "file_offset": 725856, "flags": 32, "name": "_profile_dump_to_file_evaluate", "static": true }, +{ "file_offset": 725920, "flags": 32, "name": "_profile_sections_activate_evaluate", "static": true }, +{ "file_offset": 725984, "flags": 32, "name": "_profile_sections_deactivate_evaluate", "static": true }, +{ "file_offset": 726048, "flags": 32, "name": "_profile_graph_toggle_evaluate", "static": true }, +{ "file_offset": 726112, "flags": 32, "name": "_debug_pvs_evaluate", "static": true }, +{ "file_offset": 726176, "flags": 32, "name": "_radiosity_start_evaluate", "static": true }, +{ "file_offset": 726208, "flags": 32, "name": "_radiosity_save_evaluate", "static": true }, +{ "file_offset": 726240, "flags": 32, "name": "_radiosity_debug_point_evaluate", "static": true }, +{ "file_offset": 726272, "flags": 32, "name": "_ai_profile_change_render_spray_evaluate", "static": true }, +{ "file_offset": 726304, "flags": 32, "name": "_ai_debug_sound_point_set_evaluate", "static": true }, +{ "file_offset": 726336, "flags": 32, "name": "_ai_debug_vocalize_evaluate", "static": true }, +{ "file_offset": 726400, "flags": 32, "name": "_ai_debug_teleport_to_evaluate", "static": true }, +{ "file_offset": 726464, "flags": 32, "name": "_ai_debug_speak_evaluate", "static": true }, +{ "file_offset": 726528, "flags": 32, "name": "_ai_debug_speak_list_evaluate", "static": true }, +{ "file_offset": 726592, "flags": 32, "name": "_player_effect_screen_fade_in_evaluate", "static": true }, +{ "file_offset": 726672, "flags": 32, "name": "_player_effect_screen_fade_out_evaluate", "static": true }, +{ "file_offset": 726752, "flags": 32, "name": "_cinematic_start_evaluate", "static": true }, +{ "file_offset": 726784, "flags": 32, "name": "_cinematic_stop_evaluate", "static": true }, +{ "file_offset": 726816, "flags": 32, "name": "_cinematic_skip_start_evaluate", "static": true }, +{ "file_offset": 726848, "flags": 32, "name": "_cinematic_skip_stop_evaluate", "static": true }, +{ "file_offset": 726880, "flags": 32, "name": "_cinematic_show_letterbox_evaluate", "static": true }, +{ "file_offset": 726944, "flags": 32, "name": "_cinematic_set_title_evaluate", "static": true }, +{ "file_offset": 727008, "flags": 32, "name": "_cinematic_set_title_delayed_evaluate", "static": true }, +{ "file_offset": 727072, "flags": 32, "name": "_cinematic_suppress_bsp_object_creation_evaluate", "static": true }, +{ "file_offset": 727136, "flags": 32, "name": "_attract_mode_start_evaluate", "static": true }, +{ "file_offset": 727168, "flags": 32, "name": "_main_won_map_evaluate", "static": true }, +{ "file_offset": 727200, "flags": 32, "name": "_main_lost_map_evaluate", "static": true }, +{ "file_offset": 727232, "flags": 32, "name": "_game_safe_to_save_evaluate", "static": true }, +{ "file_offset": 727280, "flags": 32, "name": "_game_all_quiet_evaluate", "static": true }, +{ "file_offset": 727328, "flags": 32, "name": "_game_safe_to_speak_evaluate", "static": true }, +{ "file_offset": 727376, "flags": 32, "name": "_game_is_cooperative_evaluate", "static": true }, +{ "file_offset": 727424, "flags": 32, "name": "_main_save_map_safe_evaluate", "static": true }, +{ "file_offset": 727456, "flags": 32, "name": "_main_save_cancel_evaluate", "static": true }, +{ "file_offset": 727488, "flags": 32, "name": "_main_save_map_no_timeout_evaluate", "static": true }, +{ "file_offset": 727520, "flags": 32, "name": "_main_save_map_nonsafe_evaluate", "static": true }, +{ "file_offset": 727552, "flags": 32, "name": "_main_saving_map_evaluate", "static": true }, +{ "file_offset": 727600, "flags": 32, "name": "_main_revert_map_evaluate", "static": true }, +{ "file_offset": 727632, "flags": 32, "name": "_main_load_core_evaluate", "static": true }, +{ "file_offset": 727664, "flags": 32, "name": "_main_load_core_at_startup_evaluate", "static": true }, +{ "file_offset": 727696, "flags": 32, "name": "_main_load_core_name_evaluate", "static": true }, +{ "file_offset": 727760, "flags": 32, "name": "_main_load_core_name_at_startup_evaluate", "static": true }, +{ "file_offset": 727824, "flags": 32, "name": "_main_save_core_evaluate", "static": true }, +{ "file_offset": 727856, "flags": 32, "name": "_main_save_core_name_evaluate", "static": true }, +{ "file_offset": 727920, "flags": 32, "name": "_main_skip_evaluate", "static": true }, +{ "file_offset": 727984, "flags": 32, "name": "_game_state_reverted_evaluate", "static": true }, +{ "file_offset": 728032, "flags": 32, "name": "_scripted_sound_new_evaluate", "static": true }, +{ "file_offset": 728096, "flags": 32, "name": "_scripted_sound_time_evaluate", "static": true }, +{ "file_offset": 728160, "flags": 32, "name": "_scripted_sound_stop_evaluate", "static": true }, +{ "file_offset": 728224, "flags": 32, "name": "_scripted_foley_predict_evaluate", "static": true }, +{ "file_offset": 728288, "flags": 32, "name": "_scripted_looping_sound_start_evaluate", "static": true }, +{ "file_offset": 728352, "flags": 32, "name": "_scripted_looping_sound_stop_evaluate", "static": true }, +{ "file_offset": 728416, "flags": 32, "name": "_scripted_looping_sound_set_scale_evaluate", "static": true }, +{ "file_offset": 728480, "flags": 32, "name": "_scripted_looping_sound_set_alternate_evaluate", "static": true }, +{ "file_offset": 728544, "flags": 32, "name": "_debug_sound_classes_enable_evaluate", "static": true }, +{ "file_offset": 728608, "flags": 32, "name": "_debug_sound_classes_set_distances_evaluate", "static": true }, +{ "file_offset": 728688, "flags": 32, "name": "_debug_sound_classes_set_wet_evaluate", "static": true }, +{ "file_offset": 728752, "flags": 32, "name": "_sound_class_set_gain_evaluate", "static": true }, +{ "file_offset": 728816, "flags": 32, "name": "_sound_enable_evaluate", "static": true }, +{ "file_offset": 728880, "flags": 32, "name": "_vehicle_hover_evaluate", "static": true }, +{ "file_offset": 728944, "flags": 32, "name": "_scripted_show_hud_evaluate", "static": true }, +{ "file_offset": 729024, "flags": 32, "name": "_scripted_show_hud_help_text_evaluate", "static": true }, +{ "file_offset": 729104, "flags": 32, "name": "_scripted_hud_set_flashing_state_evaluate", "static": true }, +{ "file_offset": 729168, "flags": 32, "name": "_scripted_hud_restart_flashing_evaluate", "static": true }, +{ "file_offset": 729200, "flags": 32, "name": "_hud_unit_activate_nav_point_with_flag_evaluate", "static": true }, +{ "file_offset": 729280, "flags": 32, "name": "_hud_unit_activate_nav_point_with_object_evaluate", "static": true }, +{ "file_offset": 729360, "flags": 32, "name": "_hud_activate_team_nav_point_with_flag_evaluate", "static": true }, +{ "file_offset": 729440, "flags": 32, "name": "_hud_activate_team_nav_point_with_object_evaluate", "static": true }, +{ "file_offset": 729520, "flags": 32, "name": "_hud_unit_deactivate_nav_point_with_flag_evaluate", "static": true }, +{ "file_offset": 729584, "flags": 32, "name": "_hud_unit_deactivate_nav_point_with_object_evaluate", "static": true }, +{ "file_offset": 729648, "flags": 32, "name": "_hud_deactivate_team_nav_point_with_flag_evaluate", "static": true }, +{ "file_offset": 729712, "flags": 32, "name": "_hud_deactivate_team_nav_point_with_object_evaluate", "static": true }, +{ "file_offset": 729776, "flags": 32, "name": "_terminal_clear_evaluate", "static": true }, +{ "file_offset": 729808, "flags": 32, "name": "_errors_overflow_suppression_enable_evaluate", "static": true }, +{ "file_offset": 729872, "flags": 32, "name": "_structure_lens_flares_place_evaluate", "static": true }, +{ "file_offset": 729904, "flags": 32, "name": "_scripted_player_effect_set_translation_evaluate", "static": true }, +{ "file_offset": 729984, "flags": 32, "name": "_scripted_player_effect_set_rotation_evaluate", "static": true }, +{ "file_offset": 730064, "flags": 32, "name": "_scripted_player_effect_set_rumble_evaluate", "static": true }, +{ "file_offset": 730128, "flags": 32, "name": "_scripted_player_effect_start_evaluate", "static": true }, +{ "file_offset": 730192, "flags": 32, "name": "_scripted_player_effect_stop_evaluate", "static": true }, +{ "file_offset": 730256, "flags": 32, "name": "_scripted_hud_show_health_evaluate", "static": true }, +{ "file_offset": 730320, "flags": 32, "name": "_scripted_hud_blink_health_evaluate", "static": true }, +{ "file_offset": 730384, "flags": 32, "name": "_scripted_hud_show_shield_evaluate", "static": true }, +{ "file_offset": 730448, "flags": 32, "name": "_scripted_hud_blink_shield_evaluate", "static": true }, +{ "file_offset": 730512, "flags": 32, "name": "_scripted_hud_show_motion_sensor_evaluate", "static": true }, +{ "file_offset": 730576, "flags": 32, "name": "_scripted_hud_blink_motion_sensor_evaluate", "static": true }, +{ "file_offset": 730640, "flags": 32, "name": "_scripted_hud_show_crosshair_evaluate", "static": true }, +{ "file_offset": 730704, "flags": 32, "name": "_scripted_hud_messages_clear_evaluate", "static": true }, +{ "file_offset": 730736, "flags": 32, "name": "_scripted_hud_set_state_message_evaluate", "static": true }, +{ "file_offset": 730800, "flags": 32, "name": "_scripted_hud_set_objective_evaluate", "static": true }, +{ "file_offset": 730864, "flags": 32, "name": "_scripted_hud_set_timer_time_evaluate", "static": true }, +{ "file_offset": 730928, "flags": 32, "name": "_scripted_hud_set_timer_warning_cutoff_evaluate", "static": true }, +{ "file_offset": 730992, "flags": 32, "name": "_scripted_hud_set_timer_position_evaluate", "static": true }, +{ "file_offset": 731072, "flags": 32, "name": "_scripted_hud_show_timer_evaluate", "static": true }, +{ "file_offset": 731136, "flags": 32, "name": "_scripted_hud_pause_timer_evaluate", "static": true }, +{ "file_offset": 731200, "flags": 32, "name": "_scripted_hud_get_timer_ticks_evaluate", "static": true }, +{ "file_offset": 731248, "flags": 32, "name": "_scripted_hud_time_code_show_evaluate", "static": true }, +{ "file_offset": 731312, "flags": 32, "name": "_scripted_hud_time_code_start_evaluate", "static": true }, +{ "file_offset": 731376, "flags": 32, "name": "_scripted_hud_time_code_reset_evaluate", "static": true }, +{ "file_offset": 731408, "flags": 32, "name": "_rasterizer_decals_flush_evaluate", "static": true }, +{ "file_offset": 731440, "flags": 32, "name": "_rasterizer_fps_accumulate_evaluate", "static": true }, +{ "file_offset": 731472, "flags": 32, "name": "_rasterizer_model_ambient_reflection_tint_evaluate", "static": true }, +{ "file_offset": 731552, "flags": 32, "name": "_rasterizer_lights_reset_for_new_map_evaluate", "static": true }, +{ "file_offset": 731584, "flags": 32, "name": "_rasterizer_script_screen_effect_set_value_evaluate", "static": true }, +{ "file_offset": 731648, "flags": 32, "name": "_rasterizer_screen_effect_start_evaluate", "static": true }, +{ "file_offset": 731712, "flags": 32, "name": "_rasterizer_screen_effect_set_convolution_evaluate", "static": true }, +{ "file_offset": 731808, "flags": 32, "name": "_rasterizer_screen_effect_set_filter_evaluate", "static": true }, +{ "file_offset": 731904, "flags": 32, "name": "_rasterizer_screen_effect_set_filter_desaturation_tint_evaluate", "static": true }, +{ "file_offset": 731984, "flags": 32, "name": "_rasterizer_screen_effect_set_video_evaluate", "static": true }, +{ "file_offset": 732048, "flags": 32, "name": "_rasterizer_screen_effect_stop_evaluate", "static": true }, +{ "file_offset": 732080, "flags": 32, "name": "_rasterizer_set_near_clip_distance_evaluate", "static": true }, +{ "file_offset": 732144, "flags": 32, "name": "_enumerate_memory_units_test_evaluate", "static": true }, +{ "file_offset": 732176, "flags": 32, "name": "_saved_game_files_delete_all_custom_profiles_evaluate", "static": true }, +{ "file_offset": 732208, "flags": 32, "name": "_player_ui_fast_setup_network_server_evaluate", "static": true }, +{ "file_offset": 732240, "flags": 32, "name": "_player_ui_activate_all_solo_levels_evaluate", "static": true }, +{ "file_offset": 732272, "flags": 32, "name": "_player0_look_invert_pitch_evaluate", "static": true }, +{ "file_offset": 732336, "flags": 32, "name": "_player0_look_pitch_is_inverted_evaluate", "static": true }, +{ "file_offset": 732384, "flags": 32, "name": "_player0_joystick_set_is_normal_evaluate", "static": true }, +{ "file_offset": 732432, "flags": 32, "name": "_ui_widget_debug_show_path_evaluate", "static": true }, +{ "file_offset": 732496, "flags": 32, "name": "_display_scenario_help_evaluate", "static": true }, +{ "file_offset": 732560, "flags": 32, "name": "_network_game_client_request_immediate_start_evaluate", "static": true }, +{ "file_offset": 732592, "flags": 32, "name": "_xbox_set_machine_name_evaluate", "static": true }, { "file_offset": 732656, "flags": 32, "name": "_hs_scenario_merge" }, -{ "file_offset": 732928, "flags": 32, "name": "_hs_allocate" }, +{ "file_offset": 732928, "flags": 32, "name": "_hs_allocate", "static": true }, { "file_offset": 733136, "flags": 32, "name": "_hs_dispose" }, { "file_offset": 733152, "flags": 32, "name": "_hs_recompile" }, { "file_offset": 733168, "flags": 32, "name": "_hs_update" }, @@ -3035,49 +3035,49 @@ { "file_offset": 733760, "flags": 32, "name": "_hs_global_get_name" }, { "file_offset": 733824, "flags": 32, "name": "_hs_find_global_by_name" }, { "file_offset": 734048, "flags": 32, "name": "_hs_find_function_by_name" }, -{ "file_offset": 734128, "flags": 32, "name": "_alphabetize" }, +{ "file_offset": 734128, "flags": 32, "name": "_alphabetize", "static": true }, { "file_offset": 734160, "flags": 32, "name": "_hs_tokens_enumerate_add_string", "static": true }, { "file_offset": 734288, "flags": 32, "name": "_hs_enumerate_from_string_list", "static": true }, { "file_offset": 734352, "flags": 32, "name": "_hs_enumerate_block_data", "static": true }, -{ "file_offset": 734416, "flags": 32, "name": "_hs_enumerate_scenario_data" }, -{ "file_offset": 734464, "flags": 32, "name": "_hs_enumerate_special_form_names" }, -{ "file_offset": 734496, "flags": 32, "name": "_hs_enumerate_script_type_names" }, -{ "file_offset": 734544, "flags": 32, "name": "_hs_enumerate_type_names" }, -{ "file_offset": 734592, "flags": 32, "name": "_hs_enumerate_function_names" }, -{ "file_offset": 734688, "flags": 32, "name": "_hs_enumerate_script_names" }, -{ "file_offset": 734736, "flags": 32, "name": "_hs_enumerate_variable_names" }, -{ "file_offset": 734912, "flags": 32, "name": "_hs_enumerate_ai_names" }, -{ "file_offset": 734960, "flags": 32, "name": "_hs_enumerate_ai_command_list_names" }, -{ "file_offset": 735008, "flags": 32, "name": "_hs_enumerate_starting_profile_names" }, -{ "file_offset": 735056, "flags": 32, "name": "_hs_enumerate_conversation_names" }, -{ "file_offset": 735104, "flags": 32, "name": "_hs_enumerate_object_names" }, -{ "file_offset": 735152, "flags": 32, "name": "_hs_enumerate_trigger_volume_names" }, -{ "file_offset": 735200, "flags": 32, "name": "_hs_enumerate_cutscene_flag_names" }, -{ "file_offset": 735248, "flags": 32, "name": "_hs_enumerate_cutscene_camera_point_names" }, -{ "file_offset": 735296, "flags": 32, "name": "_hs_enumerate_cutscene_title_names" }, -{ "file_offset": 735344, "flags": 32, "name": "_hs_enumerate_cutscene_recording_names" }, -{ "file_offset": 735392, "flags": 32, "name": "_hs_enumerate_navpoints" }, -{ "file_offset": 735456, "flags": 32, "name": "_hs_enumerate_hud_messages" }, +{ "file_offset": 734416, "flags": 32, "name": "_hs_enumerate_scenario_data", "static": true }, +{ "file_offset": 734464, "flags": 32, "name": "_hs_enumerate_special_form_names", "static": true }, +{ "file_offset": 734496, "flags": 32, "name": "_hs_enumerate_script_type_names", "static": true }, +{ "file_offset": 734544, "flags": 32, "name": "_hs_enumerate_type_names", "static": true }, +{ "file_offset": 734592, "flags": 32, "name": "_hs_enumerate_function_names", "static": true }, +{ "file_offset": 734688, "flags": 32, "name": "_hs_enumerate_script_names", "static": true }, +{ "file_offset": 734736, "flags": 32, "name": "_hs_enumerate_variable_names", "static": true }, +{ "file_offset": 734912, "flags": 32, "name": "_hs_enumerate_ai_names", "static": true }, +{ "file_offset": 734960, "flags": 32, "name": "_hs_enumerate_ai_command_list_names", "static": true }, +{ "file_offset": 735008, "flags": 32, "name": "_hs_enumerate_starting_profile_names", "static": true }, +{ "file_offset": 735056, "flags": 32, "name": "_hs_enumerate_conversation_names", "static": true }, +{ "file_offset": 735104, "flags": 32, "name": "_hs_enumerate_object_names", "static": true }, +{ "file_offset": 735152, "flags": 32, "name": "_hs_enumerate_trigger_volume_names", "static": true }, +{ "file_offset": 735200, "flags": 32, "name": "_hs_enumerate_cutscene_flag_names", "static": true }, +{ "file_offset": 735248, "flags": 32, "name": "_hs_enumerate_cutscene_camera_point_names", "static": true }, +{ "file_offset": 735296, "flags": 32, "name": "_hs_enumerate_cutscene_title_names", "static": true }, +{ "file_offset": 735344, "flags": 32, "name": "_hs_enumerate_cutscene_recording_names", "static": true }, +{ "file_offset": 735392, "flags": 32, "name": "_hs_enumerate_navpoints", "static": true }, +{ "file_offset": 735456, "flags": 32, "name": "_hs_enumerate_hud_messages", "static": true }, { "file_offset": 735520, "flags": 32, "name": "_hs_tokens_enumerate" }, { "file_offset": 735744, "flags": 32, "name": "_hs_rebuild_source_file", "static": true }, -{ "file_offset": 736016, "flags": 32, "name": "_alphabetize_file_references" }, -{ "file_offset": 736096, "flags": 32, "name": "_hs_rebuild_source" }, +{ "file_offset": 736016, "flags": 32, "name": "_alphabetize_file_references", "static": true }, +{ "file_offset": 736096, "flags": 32, "name": "_hs_rebuild_source", "static": true }, { "file_offset": 736416, "flags": 32, "name": "_hs_compile_source_error", "static": true }, -{ "file_offset": 736528, "flags": 32, "name": "_hs_compile_source" }, +{ "file_offset": 736528, "flags": 32, "name": "_hs_compile_source", "static": true }, { "file_offset": 736736, "flags": 32, "name": "_hs_get_function_parameters_string", "static": true }, { "file_offset": 736896, "flags": 32, "name": "_hs_get_function_documentation_string", "static": true }, { "file_offset": 736928, "flags": 32, "name": "_hs_evaluate_by_name" }, -{ "file_offset": 736992, "flags": 32, "name": "_hs_recompile_evaluate" }, -{ "file_offset": 737024, "flags": 32, "name": "_random_range_evaluate" }, -{ "file_offset": 737104, "flags": 32, "name": "_real_random_range_evaluate" }, +{ "file_offset": 736992, "flags": 32, "name": "_hs_recompile_evaluate", "static": true }, +{ "file_offset": 737024, "flags": 32, "name": "_random_range_evaluate", "static": true }, +{ "file_offset": 737104, "flags": 32, "name": "_real_random_range_evaluate", "static": true }, { "file_offset": 737200, "flags": 32, "name": "_hs_scenario_postprocess" }, { "file_offset": 737584, "flags": 32, "name": "_hs_initialize_for_new_map" }, { "file_offset": 737648, "flags": 32, "name": "_hs_dispose_from_old_map" }, { "file_offset": 737728, "flags": 32, "name": "_hs_help" }, { "file_offset": 737840, "flags": 32, "name": "_hs_doc" }, { "file_offset": 738096, "flags": 32, "name": "_hs_hack" }, -{ "file_offset": 738192, "flags": 32, "name": "_hs_doc_evaluate" }, -{ "file_offset": 738224, "flags": 32, "name": "_hs_help_evaluate" }, +{ "file_offset": 738192, "flags": 32, "name": "_hs_doc_evaluate", "static": true }, +{ "file_offset": 738224, "flags": 32, "name": "_hs_help_evaluate", "static": true }, { "file_offset": 738288, "flags": 32, "name": "_hs_initialize" }, { "file_offset": 738400, "flags": 32, "name": "_hs_compile_and_evaluate" }, { "file_offset": 738992, "flags": 32, "name": "_hs_parse_cond_recursive", "static": true }, @@ -3419,14 +3419,14 @@ { "file_offset": 809168, "flags": 32, "name": "_hud_get_nav_point_render_type" }, { "file_offset": 809440, "flags": 32, "name": "_custom_render_nav_point" }, { "file_offset": 811072, "flags": 32, "name": "_hud_render_nav_points" }, -{ "file_offset": 811472, "flags": 32, "name": "_hud_update_nav_point_local_player" }, +{ "file_offset": 811472, "flags": 32, "name": "_hud_update_nav_point_local_player", "static": true }, { "file_offset": 812032, "flags": 32, "name": "_hud_update_nav_points" }, { "file_offset": 812080, "flags": 32, "name": "_hud_play_sound" }, -{ "file_offset": 812432, "flags": 32, "name": "_code_000c6590" }, -{ "file_offset": 812448, "flags": 32, "name": "_code_000c65a0" }, +{ "file_offset": 812432, "flags": 32, "name": "_unit_hud_outline_mapper_tick", "static": true }, +{ "file_offset": 812448, "flags": 32, "name": "_unit_hud_shield_meter_mapper_tick", "static": true }, { "file_offset": 812464, "flags": 32, "name": "_unit_hud_shield_meter_mapper_init" }, { "file_offset": 812480, "flags": 32, "name": "_initialize_hud_state", "static": true }, -{ "file_offset": 812544, "flags": 32, "name": "_get_hud_state" }, +{ "file_offset": 812544, "flags": 32, "name": "_get_hud_state", "static": true }, { "file_offset": 812656, "flags": 32, "name": "_hud_initialize_unit_interface" }, { "file_offset": 812720, "flags": 32, "name": "_hud_initialize_unit_interface_for_new_map" }, { "file_offset": 812960, "flags": 32, "name": "_hud_dispose_unit_interface_from_old_map" }, @@ -3439,7 +3439,7 @@ { "file_offset": 813232, "flags": 32, "name": "_scripted_hud_blink_motion_sensor" }, { "file_offset": 813280, "flags": 32, "name": "_hud_play_unit_sounds" }, { "file_offset": 813824, "flags": 32, "name": "_hud_fix_unit_data" }, -{ "file_offset": 813952, "flags": 32, "name": "_hud_update_unit_local_player" }, +{ "file_offset": 813952, "flags": 32, "name": "_hud_update_unit_local_player", "static": true }, { "file_offset": 814496, "flags": 32, "name": "_hud_render_damage_indicators" }, { "file_offset": 815184, "flags": 32, "name": "_hud_tick_shield" }, { "file_offset": 815248, "flags": 32, "name": "_hud_update_unit" }, @@ -3520,7 +3520,7 @@ { "file_offset": 839936, "flags": 32, "name": "_first_person_weapon_set_state", "static": true }, { "file_offset": 840624, "flags": 32, "name": "_first_person_weapon_switch_weapons", "static": true }, { "file_offset": 841232, "flags": 32, "name": "_first_person_weapon_new_unit", "static": true }, -{ "file_offset": 841328, "flags": 32, "name": "_first_person_weapon_message" }, +{ "file_offset": 841328, "flags": 32, "name": "_first_person_weapon_message", "static": true }, { "file_offset": 841872, "flags": 32, "name": "_first_person_weapon_message_from_unit" }, { "file_offset": 841952, "flags": 32, "name": "_first_person_weapon_message_from_weapon" }, { "file_offset": 842016, "flags": 32, "name": "_first_person_weapon_next_state", "static": true }, @@ -4104,8 +4104,8 @@ { "file_offset": 981088, "flags": 32, "name": "_main_get_multiplayer_map_name" }, { "file_offset": 981104, "flags": 32, "name": "_main_set_difficulty" }, { "file_offset": 981136, "flags": 32, "name": "_main_get_difficulty" }, -{ "file_offset": 981152, "flags": 32, "name": "_sort_controllers_ascending" }, -{ "file_offset": 981216, "flags": 32, "name": "_create_local_players" }, +{ "file_offset": 981152, "flags": 32, "name": "_sort_controllers_ascending", "static": true }, +{ "file_offset": 981216, "flags": 32, "name": "_create_local_players", "static": true }, { "file_offset": 981680, "flags": 32, "name": "_main_reset_map" }, { "file_offset": 981712, "flags": 32, "name": "_main_revert_map" }, { "file_offset": 981744, "flags": 32, "name": "_main_skip_cinematic" }, @@ -4125,7 +4125,7 @@ { "file_offset": 982288, "flags": 32, "name": "_main_switch_structure_bsp" }, { "file_offset": 982384, "flags": 32, "name": "_main_skip" }, { "file_offset": 982432, "flags": 32, "name": "_main_queue_map_name" }, -{ "file_offset": 982496, "flags": 32, "name": "_main_queue_map_private" }, +{ "file_offset": 982496, "flags": 32, "name": "_main_queue_map_private", "static": true }, { "file_offset": 982576, "flags": 32, "name": "_main_goto_main_menu" }, { "file_offset": 982608, "flags": 32, "name": "_main_menu_precache_resources" }, { "file_offset": 982688, "flags": 32, "name": "_main_menu_unload" }, @@ -4140,26 +4140,26 @@ { "file_offset": 983216, "flags": 32, "name": "_compute_subframe_counts", "static": true }, { "file_offset": 983328, "flags": 32, "name": "_compute_window_bounds" }, { "file_offset": 983824, "flags": 32, "name": "_main_get_window_count" }, -{ "file_offset": 983888, "flags": 32, "name": "_main_new_map" }, -{ "file_offset": 984096, "flags": 32, "name": "_main_change_map_name" }, -{ "file_offset": 984480, "flags": 32, "name": "_main_revert_map_private" }, -{ "file_offset": 984512, "flags": 32, "name": "_main_skip_cinematic_private" }, -{ "file_offset": 984560, "flags": 32, "name": "_main_skip_private" }, -{ "file_offset": 984736, "flags": 32, "name": "_main_saving_map_private" }, -{ "file_offset": 984768, "flags": 32, "name": "_main_save_map_private" }, -{ "file_offset": 984992, "flags": 32, "name": "_main_switch_to_structure_bsp_private" }, -{ "file_offset": 985040, "flags": 32, "name": "_main_lost_map_private" }, -{ "file_offset": 985104, "flags": 32, "name": "_main_respawn_private" }, -{ "file_offset": 985168, "flags": 32, "name": "_main_won_map_private" }, -{ "file_offset": 985264, "flags": 32, "name": "_main_load_core_private" }, -{ "file_offset": 985296, "flags": 32, "name": "_main_save_core_private" }, -{ "file_offset": 985328, "flags": 32, "name": "_main_reset_map_private" }, -{ "file_offset": 985392, "flags": 32, "name": "_main_run_demos_private" }, -{ "file_offset": 985408, "flags": 32, "name": "_main_frame_rate_debug" }, -{ "file_offset": 985952, "flags": 32, "name": "_main_exit" }, -{ "file_offset": 986032, "flags": 32, "name": "_main_reset_time" }, -{ "file_offset": 986080, "flags": 32, "name": "_main_framerate_throttle_enabled" }, -{ "file_offset": 986096, "flags": 32, "name": "_main_update_time" }, +{ "file_offset": 983888, "flags": 32, "name": "_main_new_map", "static": true }, +{ "file_offset": 984096, "flags": 32, "name": "_main_change_map_name", "static": true }, +{ "file_offset": 984480, "flags": 32, "name": "_main_revert_map_private", "static": true }, +{ "file_offset": 984512, "flags": 32, "name": "_main_skip_cinematic_private", "static": true }, +{ "file_offset": 984560, "flags": 32, "name": "_main_skip_private", "static": true }, +{ "file_offset": 984736, "flags": 32, "name": "_main_saving_map_private", "static": true }, +{ "file_offset": 984768, "flags": 32, "name": "_main_save_map_private", "static": true }, +{ "file_offset": 984992, "flags": 32, "name": "_main_switch_to_structure_bsp_private", "static": true }, +{ "file_offset": 985040, "flags": 32, "name": "_main_lost_map_private", "static": true }, +{ "file_offset": 985104, "flags": 32, "name": "_main_respawn_private", "static": true }, +{ "file_offset": 985168, "flags": 32, "name": "_main_won_map_private", "static": true }, +{ "file_offset": 985264, "flags": 32, "name": "_main_load_core_private", "static": true }, +{ "file_offset": 985296, "flags": 32, "name": "_main_save_core_private", "static": true }, +{ "file_offset": 985328, "flags": 32, "name": "_main_reset_map_private", "static": true }, +{ "file_offset": 985392, "flags": 32, "name": "_main_run_demos_private", "static": true }, +{ "file_offset": 985408, "flags": 32, "name": "_main_frame_rate_debug", "static": true }, +{ "file_offset": 985952, "flags": 32, "name": "_main_exit", "static": true }, +{ "file_offset": 986032, "flags": 32, "name": "_main_reset_time", "static": true }, +{ "file_offset": 986080, "flags": 32, "name": "_main_framerate_throttle_enabled", "static": true }, +{ "file_offset": 986096, "flags": 32, "name": "_main_update_time", "static": true }, { "file_offset": 987536, "flags": 32, "name": "_main_rasterizer_throttle" }, { "file_offset": 988064, "flags": 32, "name": "_screenshot_record", "static": true }, { "file_offset": 988096, "flags": 32, "name": "_main_taking_screenshot" }, @@ -4179,8 +4179,8 @@ { "file_offset": 989360, "flags": 32, "name": "_main_pregame_render" }, { "file_offset": 989664, "flags": 32, "name": "_set_window_camera_values" }, { "file_offset": 990096, "flags": 32, "name": "_main_present_frame" }, -{ "file_offset": 990240, "flags": 32, "name": "_main_setup_connection" }, -{ "file_offset": 990432, "flags": 32, "name": "_main_initialize_time" }, +{ "file_offset": 990240, "flags": 32, "name": "_main_setup_connection", "static": true }, +{ "file_offset": 990432, "flags": 32, "name": "_main_initialize_time", "static": true }, { "file_offset": 990512, "flags": 32, "name": "_screenshot_render", "static": true }, { "file_offset": 991008, "flags": 32, "name": "_main_framerate_render" }, { "file_offset": 991680, "flags": 32, "name": "_halt_and_catch_fire" }, @@ -4731,7 +4731,7 @@ { "file_offset": 1113664, "flags": 32, "name": "_animation_loop_frame_index" }, { "file_offset": 1113680, "flags": 32, "name": "_animation_second_key_frame_index" }, { "file_offset": 1113696, "flags": 32, "name": "_animation_sound_frame_index" }, -{ "file_offset": 1113712, "flags": 32, "name": "_animation_is_compressed" }, +{ "file_offset": 1113712, "flags": 32, "name": "_animation_is_compressed", "static": true }, { "file_offset": 1113792, "flags": 32, "name": "_build_damage_animation_index" }, { "file_offset": 1113952, "flags": 32, "name": "_animation_get_x_offsets" }, { "file_offset": 1114080, "flags": 32, "name": "_animation_set_frame_size" }, @@ -4743,13 +4743,13 @@ { "file_offset": 1114768, "flags": 32, "name": "_animation_graph_node_matrices_from_orientations" }, { "file_offset": 1115120, "flags": 32, "name": "_interpolate_node_orientations" }, { "file_offset": 1115392, "flags": 32, "name": "_animation_graph_get_animation_by_name" }, -{ "file_offset": 1115488, "flags": 32, "name": "_animation_keyframe_search" }, +{ "file_offset": 1115488, "flags": 32, "name": "_animation_keyframe_search", "static": true }, { "file_offset": 1115952, "flags": 32, "name": "_animation_frame_get_xy_translation" }, { "file_offset": 1116016, "flags": 32, "name": "_animation_choose_random_permutation_internal" }, { "file_offset": 1116192, "flags": 32, "name": "_inverse_kinematics_adjust_matrices" }, -{ "file_offset": 1117056, "flags": 32, "name": "_animation_get_keyframe_rotation" }, -{ "file_offset": 1117840, "flags": 32, "name": "_animation_get_keyframe_translation" }, -{ "file_offset": 1118608, "flags": 32, "name": "_animation_get_keyframe_scale" }, +{ "file_offset": 1117056, "flags": 32, "name": "_animation_get_keyframe_rotation", "static": true }, +{ "file_offset": 1117840, "flags": 32, "name": "_animation_get_keyframe_translation", "static": true }, +{ "file_offset": 1118608, "flags": 32, "name": "_animation_get_keyframe_scale", "static": true }, { "file_offset": 1119360, "flags": 32, "name": "_animation_update_internal" }, { "file_offset": 1119664, "flags": 32, "name": "_animation_get_node_orientations" }, { "file_offset": 1120432, "flags": 32, "name": "_replacement_animation_apply" }, @@ -5105,7 +5105,7 @@ { "file_offset": 1204128, "flags": 32, "name": "_damage_data_new" }, { "file_offset": 1204192, "flags": 32, "name": "_object_restore_body" }, { "file_offset": 1204272, "flags": 32, "name": "_object_double_charge_shield" }, -{ "file_offset": 1204368, "flags": 32, "name": "_object_destroy_notify_children" }, +{ "file_offset": 1204368, "flags": 32, "name": "_object_destroy_notify_children", "static": true }, { "file_offset": 1204448, "flags": 32, "name": "_get_player_index_from_object_or_parents", "static": true }, { "file_offset": 1204528, "flags": 32, "name": "_object_can_take_damage" }, { "file_offset": 1204608, "flags": 32, "name": "_object_cannot_take_damage" }, @@ -5123,10 +5123,10 @@ { "file_offset": 1207696, "flags": 32, "name": "_object_deplete_body" }, { "file_offset": 1207920, "flags": 32, "name": "_object_destroy" }, { "file_offset": 1208032, "flags": 32, "name": "_object_destroy_region", "static": true }, -{ "file_offset": 1208352, "flags": 32, "name": "_object_damage_body" }, +{ "file_offset": 1208352, "flags": 32, "name": "_object_damage_body", "static": true }, { "file_offset": 1209712, "flags": 32, "name": "_object_cause_damage" }, { "file_offset": 1211696, "flags": 32, "name": "_object_damage_update" }, -{ "file_offset": 1212752, "flags": 32, "name": "_area_of_effect_cause_damage_to_object" }, +{ "file_offset": 1212752, "flags": 32, "name": "_area_of_effect_cause_damage_to_object", "static": true }, { "file_offset": 1214080, "flags": 32, "name": "_area_of_effect_cause_damage" }, { "file_offset": 1214208, "flags": 32, "name": "_object_deleted_procs_call" }, { "file_offset": 1214256, "flags": 32, "name": "_texture_cache_bitmap_load" }, @@ -5841,12 +5841,12 @@ { "file_offset": 1412896, "flags": 32, "name": "_rasterizer_sun_glow_copy_source", "static": true }, { "file_offset": 1413792, "flags": 32, "name": "_rasterizer_sun_glow_convolve", "static": true }, { "file_offset": 1415200, "flags": 32, "name": "_rasterizer_sun_glow_draw" }, -{ "file_offset": 1417552, "flags": 32, "name": "_D3DDevice_SetRenderState" }, -{ "file_offset": 1417984, "flags": 32, "name": "_D3DDevice_SetTextureStageState" }, +{ "file_offset": 1417552, "flags": 32, "name": "_D3DDevice_SetRenderState", "static": true }, +{ "file_offset": 1417984, "flags": 32, "name": "_D3DDevice_SetTextureStageState", "static": true }, { "file_offset": 1418064, "flags": 32, "name": "_set_environment_shader_pixel_shader", "static": true }, -{ "file_offset": 1419072, "flags": 32, "name": "_IDirect3DDevice8_SetRenderState@12" }, -{ "file_offset": 1419616, "flags": 32, "name": "_IDirect3DDevice8_SetTextureStageState@16" }, -{ "file_offset": 1419712, "flags": 32, "name": "_IDirect3DDevice8_SetVertexShaderConstant@16" }, +{ "file_offset": 1419072, "flags": 32, "name": "_IDirect3DDevice8_SetRenderState@12", "static": true }, +{ "file_offset": 1419616, "flags": 32, "name": "_IDirect3DDevice8_SetTextureStageState@16", "static": true }, +{ "file_offset": 1419712, "flags": 32, "name": "_IDirect3DDevice8_SetVertexShaderConstant@16", "static": true }, { "file_offset": 1419728, "flags": 32, "name": "__rasterizer_models_begin" }, { "file_offset": 1419792, "flags": 32, "name": "__rasterizer_model_end" }, { "file_offset": 1419920, "flags": 32, "name": "__rasterizer_models_end" }, @@ -5903,18 +5903,18 @@ { "file_offset": 1440912, "flags": 32, "name": "_rasterizer_screen_effect_set_texture_transforms", "static": true }, { "file_offset": 1443040, "flags": 32, "name": "__rasterizer_screen_effect" }, { "file_offset": 1446928, "flags": 32, "name": "__rasterizer_screen_flash" }, -{ "file_offset": 1448272, "flags": 32, "name": "_D3DDevice_SetRenderState" }, -{ "file_offset": 1448704, "flags": 32, "name": "_D3DDevice_SetTextureStageState" }, -{ "file_offset": 1448784, "flags": 32, "name": "_IDirect3DDevice8_SetRenderState@12" }, +{ "file_offset": 1448272, "flags": 32, "name": "_D3DDevice_SetRenderState", "static": true }, +{ "file_offset": 1448704, "flags": 32, "name": "_D3DDevice_SetTextureStageState", "static": true }, +{ "file_offset": 1448784, "flags": 32, "name": "_IDirect3DDevice8_SetRenderState@12", "static": true }, { "file_offset": 1449328, "flags": 32, "name": "__rasterizer_environment_shadows_begin" }, -{ "file_offset": 1449344, "flags": 32, "name": "_IDirect3DDevice8_SetTextureStageState@16" }, -{ "file_offset": 1449440, "flags": 32, "name": "_IDirect3DDevice8_SetVertexShaderConstant@16" }, +{ "file_offset": 1449344, "flags": 32, "name": "_IDirect3DDevice8_SetTextureStageState@16", "static": true }, +{ "file_offset": 1449440, "flags": 32, "name": "_IDirect3DDevice8_SetVertexShaderConstant@16", "static": true }, { "file_offset": 1449456, "flags": 32, "name": "__rasterizer_environment_shadow_model_begin" }, { "file_offset": 1449616, "flags": 32, "name": "__rasterizer_environment_shadow_model_end" }, -{ "file_offset": 1449632, "flags": 32, "name": "_IDirect3DDevice8_SetVertexData2f@16" }, -{ "file_offset": 1449664, "flags": 32, "name": "_IDirect3DDevice8_SetVertexData2s@16" }, -{ "file_offset": 1449680, "flags": 32, "name": "_IDirect3DDevice8_Begin@8" }, -{ "file_offset": 1449696, "flags": 32, "name": "_IDirect3DDevice8_End@4" }, +{ "file_offset": 1449632, "flags": 32, "name": "_IDirect3DDevice8_SetVertexData2f@16", "static": true }, +{ "file_offset": 1449664, "flags": 32, "name": "_IDirect3DDevice8_SetVertexData2s@16", "static": true }, +{ "file_offset": 1449680, "flags": 32, "name": "_IDirect3DDevice8_Begin@8", "static": true }, +{ "file_offset": 1449696, "flags": 32, "name": "_IDirect3DDevice8_End@4", "static": true }, { "file_offset": 1449712, "flags": 32, "name": "__rasterizer_environment_shadow_end" }, { "file_offset": 1449840, "flags": 32, "name": "__rasterizer_environment_shadows_end" }, { "file_offset": 1449856, "flags": 32, "name": "_rasterizer_shadow_convolve", "static": true }, @@ -6210,7 +6210,7 @@ { "file_offset": 1510144, "flags": 32, "name": "_rasterizer_lights_begin" }, { "file_offset": 1510160, "flags": 32, "name": "_rasterizer_light_submit" }, { "file_offset": 1510496, "flags": 32, "name": "_rasterizer_lights_end" }, -{ "file_offset": 1510512, "flags": 32, "name": "_lens_flare_evaluate_corona_rotation_function" }, +{ "file_offset": 1510512, "flags": 32, "name": "_lens_flare_evaluate_corona_rotation_function", "static": true }, { "file_offset": 1511104, "flags": 32, "name": "_rasterizer_lens_flare_submit" }, { "file_offset": 1511760, "flags": 32, "name": "_rasterizer_lens_flare_submit_for_cluster" }, { "file_offset": 1512160, "flags": 32, "name": "_rasterizer_lens_flares_submit_occlusion_tests" }, @@ -6861,22 +6861,22 @@ { "file_offset": 1669856, "flags": 32, "name": "_unit_get_seat_entrance_point" }, { "file_offset": 1670336, "flags": 32, "name": "_unit_get_melee_range_and_ticks" }, { "file_offset": 1670560, "flags": 32, "name": "_unit_get_animation_frames_remaining" }, -{ "file_offset": 1670704, "flags": 32, "name": "_code_00197e30" }, +{ "file_offset": 1670704, "flags": 32, "name": "_unit_euler_axis_doplan", "static": true }, { "file_offset": 1671024, "flags": 32, "name": "_unit_get_zoom_level" }, -{ "file_offset": 1671056, "flags": 32, "name": "_code_00197f90" }, -{ "file_offset": 1671184, "flags": 32, "name": "_unit_animation_busy" }, +{ "file_offset": 1671056, "flags": 32, "name": "_unit_animation_state_interruptable", "static": true }, +{ "file_offset": 1671184, "flags": 32, "name": "_unit_animation_busy", "static": true }, { "file_offset": 1671216, "flags": 32, "name": "$L7451" }, { "file_offset": 1671224, "flags": 32, "name": "$L7450" }, -{ "file_offset": 1671248, "flags": 32, "name": "_code_00198050" }, -{ "file_offset": 1671280, "flags": 32, "name": "_code_00198070" }, -{ "file_offset": 1671376, "flags": 32, "name": "_code_001980d0" }, -{ "file_offset": 1671472, "flags": 32, "name": "_code_00198130" }, -{ "file_offset": 1671536, "flags": 32, "name": "_code_00198170" }, -{ "file_offset": 1671568, "flags": 32, "name": "_code_00198190" }, -{ "file_offset": 1671664, "flags": 32, "name": "_code_001981f0" }, -{ "file_offset": 1671728, "flags": 32, "name": "_code_00198230" }, +{ "file_offset": 1671248, "flags": 32, "name": "_unit_animation_overlay_action_loops", "static": true }, +{ "file_offset": 1671280, "flags": 32, "name": "_unit_animation_state_loops", "static": true }, +{ "file_offset": 1671376, "flags": 32, "name": "_unit_animation_weapon_ik", "static": true }, +{ "file_offset": 1671472, "flags": 32, "name": "_unit_animation_vehicle_ik", "static": true }, +{ "file_offset": 1671536, "flags": 32, "name": "_unit_animation_aiming_screen", "static": true }, +{ "file_offset": 1671568, "flags": 32, "name": "_unit_animation_state_get_aiming_screen_index", "static": true }, +{ "file_offset": 1671664, "flags": 32, "name": "_unit_animation_state_can_be_entered_without_animation", "static": true }, +{ "file_offset": 1671728, "flags": 32, "name": "_unit_animation_compute_interpolation_frame_count", "static": true }, { "file_offset": 1671792, "flags": 32, "name": "_unit_animation_start_action" }, -{ "file_offset": 1672192, "flags": 32, "name": "_code_00198400" }, +{ "file_offset": 1672192, "flags": 32, "name": "_unit_animation_start_overlay_action", "static": true }, { "file_offset": 1672640, "flags": 32, "name": "_unit_can_enter_seat" }, { "file_offset": 1672832, "flags": 32, "name": "_unit_impulse" }, { "file_offset": 1672944, "flags": 32, "name": "_unit_handle_weapon_state_change" }, @@ -6887,8 +6887,8 @@ { "file_offset": 1674016, "flags": 32, "name": "_unit_get_camera_position" }, { "file_offset": 1674432, "flags": 32, "name": "_unit_estimate_position" }, { "file_offset": 1674752, "flags": 32, "name": "_unit_get_center_of_mass" }, -{ "file_offset": 1674816, "flags": 32, "name": "_code_00198e40" }, -{ "file_offset": 1675216, "flags": 32, "name": "_unit_can_play_animation_impulse" }, +{ "file_offset": 1674816, "flags": 32, "name": "_unit_animation_impulse_get_index", "static": true }, +{ "file_offset": 1675216, "flags": 32, "name": "_unit_can_play_animation_impulse", "static": true }, { "file_offset": 1675424, "flags": 32, "name": "_unit_test_animation_impulse" }, { "file_offset": 1675616, "flags": 32, "name": "_unit_get_aiming_unit_index" }, { "file_offset": 1675744, "flags": 32, "name": "_unit_get_aiming_vector" }, @@ -6924,7 +6924,7 @@ { "file_offset": 1679440, "flags": 32, "name": "_unit_seat_is_driver" }, { "file_offset": 1679536, "flags": 32, "name": "_unit_seat_is_gunner" }, { "file_offset": 1679632, "flags": 32, "name": "_unit_seat_allow_noncombatants" }, -{ "file_offset": 1679728, "flags": 32, "name": "_code_0019a170" }, +{ "file_offset": 1679728, "flags": 32, "name": "_unit_update_driver_and_gunner", "static": true }, { "file_offset": 1679952, "flags": 32, "name": "_unit_get_current_equipment" }, { "file_offset": 1679984, "flags": 32, "name": "_unit_add_grenade_to_inventory" }, { "file_offset": 1680240, "flags": 32, "name": "_unit_add_grenade_type_to_inventory" }, @@ -6932,27 +6932,27 @@ { "file_offset": 1680672, "flags": 32, "name": "_unit_delete_current_equipment" }, { "file_offset": 1680736, "flags": 32, "name": "_unit_delete_all_weapons" }, { "file_offset": 1680864, "flags": 32, "name": "_unit_has_weapon_definition_index" }, -{ "file_offset": 1680960, "flags": 32, "name": "_code_0019a640" }, +{ "file_offset": 1680960, "flags": 32, "name": "_unit_first_free_weapon_index", "static": true }, { "file_offset": 1681008, "flags": 32, "name": "_unit_get_weapon_count" }, { "file_offset": 1681120, "flags": 32, "name": "_unit_approve_weapon_pickup" }, { "file_offset": 1681232, "flags": 32, "name": "_unit_get_grenade_count" }, { "file_offset": 1681344, "flags": 32, "name": "_unit_get_current_grenade_type" }, -{ "file_offset": 1681440, "flags": 32, "name": "_unit_throw_grenade_move_to_hand" }, -{ "file_offset": 1681904, "flags": 32, "name": "_unit_throw_grenade_release" }, -{ "file_offset": 1682688, "flags": 32, "name": "_unit_seat_update" }, -{ "file_offset": 1683408, "flags": 32, "name": "_base_seat_label_get" }, -{ "file_offset": 1683488, "flags": 32, "name": "_seat_label_to_base_seat_index" }, -{ "file_offset": 1683552, "flags": 32, "name": "_base_weapon_label_get" }, -{ "file_offset": 1683632, "flags": 32, "name": "_code_0019b0b0" }, -{ "file_offset": 1683808, "flags": 32, "name": "_code_0019b160" }, -{ "file_offset": 1683888, "flags": 32, "name": "_unit_refresh_illumination" }, -{ "file_offset": 1684016, "flags": 32, "name": "_unit_get_weapon" }, -{ "file_offset": 1684096, "flags": 32, "name": "_unit_drop_item" }, -{ "file_offset": 1684496, "flags": 32, "name": "_code_0019b410" }, +{ "file_offset": 1681440, "flags": 32, "name": "_unit_throw_grenade_move_to_hand", "static": true }, +{ "file_offset": 1681904, "flags": 32, "name": "_unit_throw_grenade_release", "static": true }, +{ "file_offset": 1682688, "flags": 32, "name": "_unit_seat_update", "static": true }, +{ "file_offset": 1683408, "flags": 32, "name": "_base_seat_label_get", "static": true }, +{ "file_offset": 1683488, "flags": 32, "name": "_seat_label_to_base_seat_index", "static": true }, +{ "file_offset": 1683552, "flags": 32, "name": "_base_weapon_label_get", "static": true }, +{ "file_offset": 1683632, "flags": 32, "name": "_unit_set_animation", "static": true }, +{ "file_offset": 1683808, "flags": 32, "name": "_unit_animation_update", "static": true }, +{ "file_offset": 1683888, "flags": 32, "name": "_unit_refresh_illumination", "static": true }, +{ "file_offset": 1684016, "flags": 32, "name": "_unit_get_weapon", "static": true }, +{ "file_offset": 1684096, "flags": 32, "name": "_unit_drop_item", "static": true }, +{ "file_offset": 1684496, "flags": 32, "name": "_unit_drop_grenades", "static": true }, { "file_offset": 1684672, "flags": 32, "name": "_unit_drop_inventory_weapons", "static": true }, { "file_offset": 1684928, "flags": 32, "name": "_unit_handle_region_destroyed" }, -{ "file_offset": 1684992, "flags": 32, "name": "_code_0019b600" }, -{ "file_offset": 1685120, "flags": 32, "name": "_unit_cause_continuous_melee_damage" }, +{ "file_offset": 1684992, "flags": 32, "name": "_unit_melee_sound", "static": true }, +{ "file_offset": 1685120, "flags": 32, "name": "_unit_cause_continuous_melee_damage", "static": true }, { "file_offset": 1685792, "flags": 32, "name": "_unit_set_enterable_by_player" }, { "file_offset": 1685856, "flags": 32, "name": "_unit_set_emotion" }, { "file_offset": 1685904, "flags": 32, "name": "_unit_aim_without_turning" }, @@ -6967,12 +6967,12 @@ { "file_offset": 1687056, "flags": 32, "name": "_unit_stop_running_blindly" }, { "file_offset": 1687104, "flags": 32, "name": "_unit_flame_to_death" }, { "file_offset": 1687360, "flags": 32, "name": "_unit_flying_through_air" }, -{ "file_offset": 1687408, "flags": 32, "name": "_code_0019bf70" }, -{ "file_offset": 1688672, "flags": 32, "name": "_code_0019c460" }, -{ "file_offset": 1689184, "flags": 32, "name": "_unit_set_or_test_seat_and_weapon_label" }, +{ "file_offset": 1687408, "flags": 32, "name": "_unit_euler_axis_buildplan", "static": true }, +{ "file_offset": 1688672, "flags": 32, "name": "_unit_euler_axis_couple", "static": true }, +{ "file_offset": 1689184, "flags": 32, "name": "_unit_set_or_test_seat_and_weapon_label", "static": true }, { "file_offset": 1689728, "flags": 32, "name": "_unit_adjust_projectile_ray" }, { "file_offset": 1689936, "flags": 32, "name": "_unit_render_debug" }, -{ "file_offset": 1690448, "flags": 32, "name": "_unit_animation_set_state" }, +{ "file_offset": 1690448, "flags": 32, "name": "_unit_animation_set_state", "static": true }, { "file_offset": 1691856, "flags": 32, "name": "_unit_abort_animation" }, { "file_offset": 1691888, "flags": 32, "name": "_unit_find_nearby_seat" }, { "file_offset": 1692544, "flags": 32, "name": "_unit_clip_to_aiming_bounds" }, @@ -6984,13 +6984,13 @@ { "file_offset": 1694352, "flags": 32, "name": "_unit_overcharged" }, { "file_offset": 1694416, "flags": 32, "name": "_unit_set_seat" }, { "file_offset": 1694464, "flags": 32, "name": "_units_set_desired_flashlight_state" }, -{ "file_offset": 1694592, "flags": 32, "name": "_unit_get_seat_label" }, +{ "file_offset": 1694592, "flags": 32, "name": "_unit_get_seat_label", "static": true }, { "file_offset": 1694752, "flags": 32, "name": "_unit_drop_current_equipment" }, { "file_offset": 1694816, "flags": 32, "name": "_unit_can_use_weapon" }, { "file_offset": 1694896, "flags": 32, "name": "_unit_approve_weapon_swap" }, -{ "file_offset": 1695104, "flags": 32, "name": "_unit_weapon_next_index" }, +{ "file_offset": 1695104, "flags": 32, "name": "_unit_weapon_next_index", "static": true }, { "file_offset": 1695472, "flags": 32, "name": "_unit_drop_current_weapon" }, -{ "file_offset": 1695728, "flags": 32, "name": "_code_0019dff0" }, +{ "file_offset": 1695728, "flags": 32, "name": "_unit_get_current_weapon_label", "static": true }, { "file_offset": 1695776, "flags": 32, "name": "_scripting_set_magic_base_seat" }, { "file_offset": 1695808, "flags": 32, "name": "_unit_scripting_set_seat" }, { "file_offset": 1695856, "flags": 32, "name": "_unit_handle_deleted_object" }, @@ -6998,11 +6998,11 @@ { "file_offset": 1696640, "flags": 32, "name": "_unit_cause_player_melee_damage" }, { "file_offset": 1698240, "flags": 32, "name": "_unit_stop_custom_animation" }, { "file_offset": 1698288, "flags": 32, "name": "_unit_custom_animation_at_frame" }, -{ "file_offset": 1698416, "flags": 32, "name": "_code_0019ea70" }, +{ "file_offset": 1698416, "flags": 32, "name": "_unit_align_facing", "static": true }, { "file_offset": 1698704, "flags": 32, "name": "_unit_start_flaming_to_death" }, -{ "file_offset": 1698864, "flags": 32, "name": "_unit_running_blind" }, -{ "file_offset": 1699600, "flags": 32, "name": "_unit_verify_inventory" }, -{ "file_offset": 1699744, "flags": 32, "name": "_unit_verify_vectors" }, +{ "file_offset": 1698864, "flags": 32, "name": "_unit_running_blind", "static": true }, +{ "file_offset": 1699600, "flags": 32, "name": "_unit_vectors_are_valid", "static": true }, +{ "file_offset": 1699744, "flags": 32, "name": "_unit_verify_vectors", "static": true }, { "file_offset": 1700480, "flags": 32, "name": "_unit_control" }, { "file_offset": 1701408, "flags": 32, "name": "_unit_preprocess_node_orientations" }, { "file_offset": 1703328, "flags": 32, "name": "_unit_postprocess_node_matrices" }, @@ -7011,22 +7011,22 @@ { "file_offset": 1705600, "flags": 32, "name": "_unit_update_animation" }, { "file_offset": 1706880, "flags": 32, "name": "_unit_unzoom" }, { "file_offset": 1707072, "flags": 32, "name": "_unit_get_zoom_magnification" }, -{ "file_offset": 1707152, "flags": 32, "name": "_unit_integrated_night_vision_is_active" }, -{ "file_offset": 1707248, "flags": 32, "name": "_code_001a0cf0" }, +{ "file_offset": 1707152, "flags": 32, "name": "_unit_integrated_night_vision_is_active", "static": true }, +{ "file_offset": 1707248, "flags": 32, "name": "_unit_ping_animation", "static": true }, { "file_offset": 1708816, "flags": 32, "name": "_unit_start_animation_impulse" }, { "file_offset": 1709104, "flags": 32, "name": "_unit_inventory_next_weapon" }, { "file_offset": 1709136, "flags": 32, "name": "_unit_melee_attack_begin" }, { "file_offset": 1709408, "flags": 32, "name": "_unit_leap_begin" }, { "file_offset": 1709552, "flags": 32, "name": "_unit_unsuspecting" }, { "file_offset": 1709728, "flags": 32, "name": "_unit_add_weapon_to_inventory" }, -{ "file_offset": 1710032, "flags": 32, "name": "_unit_ready_desired_weapon" }, +{ "file_offset": 1710032, "flags": 32, "name": "_unit_ready_desired_weapon", "static": true }, { "file_offset": 1710464, "flags": 32, "name": "_unit_throw_grenade_begin" }, { "file_offset": 1710928, "flags": 32, "name": "_scripting_magic_melee_attack" }, { "file_offset": 1710976, "flags": 32, "name": "_unit_impact_melee_damage" }, { "file_offset": 1711552, "flags": 32, "name": "_unit_place" }, { "file_offset": 1711872, "flags": 32, "name": "_unit_solo_player_integrated_night_vision_is_active" }, -{ "file_offset": 1711952, "flags": 32, "name": "_code_001a1f50" }, -{ "file_offset": 1712176, "flags": 32, "name": "_code_001a2030" }, +{ "file_offset": 1711952, "flags": 32, "name": "_unit_add_initial_weapons", "static": true }, +{ "file_offset": 1712176, "flags": 32, "name": "_unit_adjust_for_seat_change", "static": true }, { "file_offset": 1712240, "flags": 32, "name": "_unit_new" }, { "file_offset": 1713264, "flags": 32, "name": "_unit_enter_seat" }, { "file_offset": 1713856, "flags": 32, "name": "_unit_exit_seat_end" }, @@ -7515,57 +7515,57 @@ { "file_offset": 1815664, "flags": 32, "name": "_sound_enable" }, { "file_offset": 1815680, "flags": 32, "name": "_sound_scripted_dialog_is_playing" }, { "file_offset": 1815712, "flags": 32, "name": "_sound_manager_set_sound_environment" }, -{ "file_offset": 1815744, "flags": 32, "name": "_sound_update_time" }, -{ "file_offset": 1815792, "flags": 32, "name": "_sound_scale_value" }, -{ "file_offset": 1815824, "flags": 32, "name": "_sound_definition_is_playable" }, -{ "file_offset": 1815920, "flags": 32, "name": "_channel_get" }, -{ "file_offset": 1815984, "flags": 32, "name": "_listener_get" }, -{ "file_offset": 1816048, "flags": 32, "name": "_sound_definition_promote" }, -{ "file_offset": 1816208, "flags": 32, "name": "_sound_manager_master_gain" }, -{ "file_offset": 1816256, "flags": 32, "name": "_sound_delete" }, -{ "file_offset": 1816336, "flags": 32, "name": "_sound_travel_milliseconds" }, -{ "file_offset": 1816368, "flags": 32, "name": "_refresh_sound" }, -{ "file_offset": 1816608, "flags": 32, "name": "_sound_channel_summary_build" }, -{ "file_offset": 1817120, "flags": 32, "name": "_channel_queue_sound" }, -{ "file_offset": 1817248, "flags": 32, "name": "_channel_set_properties_hardware" }, -{ "file_offset": 1817408, "flags": 32, "name": "_channel_get_state" }, -{ "file_offset": 1817648, "flags": 32, "name": "_channel_stop" }, -{ "file_offset": 1817776, "flags": 32, "name": "_track_loop_track_sound" }, -{ "file_offset": 1817840, "flags": 32, "name": "_track_loop_impulse_sound" }, -{ "file_offset": 1818080, "flags": 32, "name": "_sound_set_definition_begin" }, -{ "file_offset": 1818112, "flags": 32, "name": "_sound_calculate_fade" }, -{ "file_offset": 1818416, "flags": 32, "name": "_looping_sound_find" }, -{ "file_offset": 1818496, "flags": 32, "name": "_limit_pitch" }, -{ "file_offset": 1818592, "flags": 32, "name": "_render_debug_sound" }, -{ "file_offset": 1818784, "flags": 32, "name": "_render_debug_looping_sound" }, +{ "file_offset": 1815744, "flags": 32, "name": "_sound_update_time", "static": true }, +{ "file_offset": 1815792, "flags": 32, "name": "_sound_scale_value", "static": true }, +{ "file_offset": 1815824, "flags": 32, "name": "_sound_definition_is_playable", "static": true }, +{ "file_offset": 1815920, "flags": 32, "name": "_channel_get", "static": true }, +{ "file_offset": 1815984, "flags": 32, "name": "_listener_get", "static": true }, +{ "file_offset": 1816048, "flags": 32, "name": "_sound_definition_promote", "static": true }, +{ "file_offset": 1816208, "flags": 32, "name": "_sound_manager_master_gain", "static": true }, +{ "file_offset": 1816256, "flags": 32, "name": "_sound_delete", "static": true }, +{ "file_offset": 1816336, "flags": 32, "name": "_sound_travel_milliseconds", "static": true }, +{ "file_offset": 1816368, "flags": 32, "name": "_refresh_sound", "static": true }, +{ "file_offset": 1816608, "flags": 32, "name": "_sound_channel_summary_build", "static": true }, +{ "file_offset": 1817120, "flags": 32, "name": "_channel_queue_sound", "static": true }, +{ "file_offset": 1817248, "flags": 32, "name": "_channel_set_properties_hardware", "static": true }, +{ "file_offset": 1817408, "flags": 32, "name": "_channel_get_state", "static": true }, +{ "file_offset": 1817648, "flags": 32, "name": "_channel_stop", "static": true }, +{ "file_offset": 1817776, "flags": 32, "name": "_track_loop_track_sound", "static": true }, +{ "file_offset": 1817840, "flags": 32, "name": "_track_loop_impulse_sound", "static": true }, +{ "file_offset": 1818080, "flags": 32, "name": "_sound_set_definition_begin", "static": true }, +{ "file_offset": 1818112, "flags": 32, "name": "_sound_calculate_fade", "static": true }, +{ "file_offset": 1818416, "flags": 32, "name": "_looping_sound_find", "static": true }, +{ "file_offset": 1818496, "flags": 32, "name": "_limit_pitch", "static": true }, +{ "file_offset": 1818592, "flags": 32, "name": "_render_debug_sound", "static": true }, +{ "file_offset": 1818784, "flags": 32, "name": "_render_debug_looping_sound", "static": true }, { "file_offset": 1819136, "flags": 32, "name": "_sound_initialize" }, -{ "file_offset": 1819568, "flags": 32, "name": "_sound_scale_random_value" }, -{ "file_offset": 1819616, "flags": 32, "name": "_sound_start_fade" }, -{ "file_offset": 1819984, "flags": 32, "name": "_sound_stop" }, -{ "file_offset": 1820368, "flags": 32, "name": "_source_distance_squared" }, -{ "file_offset": 1820560, "flags": 32, "name": "_source_distance" }, -{ "file_offset": 1820768, "flags": 32, "name": "_sound_find_like_channel" }, -{ "file_offset": 1821040, "flags": 32, "name": "_sound_preempts_sound" }, -{ "file_offset": 1821296, "flags": 32, "name": "_update_channel_for_impulse_sound" }, -{ "file_offset": 1821824, "flags": 32, "name": "_looping_sound_new" }, -{ "file_offset": 1822128, "flags": 32, "name": "_sound_set_definition_end" }, -{ "file_offset": 1822336, "flags": 32, "name": "_detail_sound_random_offset" }, +{ "file_offset": 1819568, "flags": 32, "name": "_sound_scale_random_value", "static": true }, +{ "file_offset": 1819616, "flags": 32, "name": "_sound_start_fade", "static": true }, +{ "file_offset": 1819984, "flags": 32, "name": "_sound_stop", "static": true }, +{ "file_offset": 1820368, "flags": 32, "name": "_source_distance_squared", "static": true }, +{ "file_offset": 1820560, "flags": 32, "name": "_source_distance", "static": true }, +{ "file_offset": 1820768, "flags": 32, "name": "_sound_find_like_channel", "static": true }, +{ "file_offset": 1821040, "flags": 32, "name": "_sound_preempts_sound", "static": true }, +{ "file_offset": 1821296, "flags": 32, "name": "_update_channel_for_impulse_sound", "static": true }, +{ "file_offset": 1821824, "flags": 32, "name": "_looping_sound_new", "static": true }, +{ "file_offset": 1822128, "flags": 32, "name": "_sound_set_definition_end", "static": true }, +{ "file_offset": 1822336, "flags": 32, "name": "_detail_sound_random_offset", "static": true }, { "file_offset": 1822528, "flags": 32, "name": "_sound_stop_impulse" }, { "file_offset": 1822656, "flags": 32, "name": "_sound_stop_impulse_by_source_and_definition" }, { "file_offset": 1822768, "flags": 32, "name": "_sound_stop_all" }, -{ "file_offset": 1822864, "flags": 32, "name": "_source_audible" }, -{ "file_offset": 1823104, "flags": 32, "name": "_refresh_sounds" }, -{ "file_offset": 1823648, "flags": 32, "name": "_sound_find_best_channel" }, -{ "file_offset": 1824064, "flags": 32, "name": "_update_potentially_audible_looping_sound" }, -{ "file_offset": 1824544, "flags": 32, "name": "_update_channel_for_looping_sound" }, +{ "file_offset": 1822864, "flags": 32, "name": "_source_audible", "static": true }, +{ "file_offset": 1823104, "flags": 32, "name": "_refresh_sounds", "static": true }, +{ "file_offset": 1823648, "flags": 32, "name": "_sound_find_best_channel", "static": true }, +{ "file_offset": 1824064, "flags": 32, "name": "_update_potentially_audible_looping_sound", "static": true }, +{ "file_offset": 1824544, "flags": 32, "name": "_update_channel_for_looping_sound", "static": true }, { "file_offset": 1825904, "flags": 32, "name": "_sound_new_impulse" }, { "file_offset": 1826880, "flags": 32, "name": "_sound_refresh_looping" }, -{ "file_offset": 1828016, "flags": 32, "name": "_refresh_listener" }, -{ "file_offset": 1828512, "flags": 32, "name": "_sound_find_channel" }, -{ "file_offset": 1829008, "flags": 32, "name": "_update_channels" }, -{ "file_offset": 1829872, "flags": 32, "name": "_process_looping_sounds" }, +{ "file_offset": 1828016, "flags": 32, "name": "_refresh_listener", "static": true }, +{ "file_offset": 1828512, "flags": 32, "name": "_sound_find_channel", "static": true }, +{ "file_offset": 1829008, "flags": 32, "name": "_update_channels", "static": true }, +{ "file_offset": 1829872, "flags": 32, "name": "_process_looping_sounds", "static": true }, { "file_offset": 1830368, "flags": 32, "name": "_sound_idle" }, -{ "file_offset": 1830480, "flags": 32, "name": "_prioritize_sounds" }, +{ "file_offset": 1830480, "flags": 32, "name": "_prioritize_sounds", "static": true }, { "file_offset": 1831216, "flags": 32, "name": "_sound_dispose_from_old_map" }, { "file_offset": 1831456, "flags": 32, "name": "_sound_render" }, { "file_offset": 1831696, "flags": 32, "name": "_read_sound_preferences" }, @@ -13111,6 +13111,7 @@ { "file_offset": 2419692, "flags": 0, "name": "??_C@_09LCGCKCI@raw_steps?$AA@" }, { "file_offset": 2419704, "flags": 0, "name": "??_C@_0BD@DLANHJEI@raw_step_count?5?$DO?50?$AA@" }, { "file_offset": 2419724, "flags": 0, "name": "_quantized_pathfinding_surface_widths", "static": true }, +{ "file_offset": 2419756, "flags": 0, "name": "_quantized_pathfinding_surface_heights", "static": true }, { "file_offset": 2419788, "flags": 0, "name": "??_C@_0CH@JLKIDLBA@c?3?2halo?2SOURCE?2ai?2path_structure@" }, { "file_offset": 2419832, "flags": 0, "name": "__real@3fa99999a0000000" }, { "file_offset": 2419840, "flags": 0, "name": "__real@3c000000" }, @@ -14060,7 +14061,7 @@ { "file_offset": 2452052, "flags": 0, "name": "??_C@_0CF@KEFAILDC@c?3?2halo?2SOURCE?2camera?2bored_came@" }, { "file_offset": 2452092, "flags": 0, "name": "??_C@_0DN@JNLEKBID@cannot?5set?5first?5person?5camera?5o@" }, { "file_offset": 2452156, "flags": 0, "name": "??_C@_0CJ@GLCFCHKA@c?3?2halo?2SOURCE?2camera?2camera_scr@" }, -{ "file_offset": 2452200, "flags": 0, "name": "_dead_camera_constants" }, +{ "file_offset": 2452200, "flags": 0, "name": "_dead_camera_constants", "static": true }, { "file_offset": 2452212, "flags": 0, "name": "??_C@_0CE@LCNMEPOD@c?3?2halo?2SOURCE?2camera?2dead_camer@" }, { "file_offset": 2452248, "flags": 0, "name": "_director_game_camera_modes" }, { "file_offset": 2452256, "flags": 0, "name": "_director_script_camera_record_camera_modes" }, @@ -14086,7 +14087,7 @@ { "file_offset": 2452568, "flags": 0, "name": "__real@3851b717" }, { "file_offset": 2452572, "flags": 0, "name": "__real@37a4b5be" }, { "file_offset": 2452576, "flags": 0, "name": "__real@b824b5be" }, -{ "file_offset": 2452580, "flags": 0, "name": "_editor_camera_speed_steps" }, +{ "file_offset": 2452580, "flags": 0, "name": "_editor_camera_speed_steps", "static": true }, { "file_offset": 2452600, "flags": 0, "name": "_orbiting_camera_field_of_view", "static": true }, { "file_offset": 2452604, "flags": 0, "name": "_orbiting_camera_scale", "static": true }, { "file_offset": 2452608, "flags": 0, "name": "_orbiting_camera_timer", "static": true }, @@ -14921,427 +14922,427 @@ { "file_offset": 2480220, "flags": 0, "name": "__hs_type_weapon_default" }, { "file_offset": 2480224, "flags": 0, "name": "__hs_type_device_default" }, { "file_offset": 2480228, "flags": 0, "name": "__hs_type_scenery_default" }, -{ "file_offset": 2480232, "flags": 0, "name": "_hs_begin_definition" }, -{ "file_offset": 2480260, "flags": 0, "name": "_hs_begin_random_definition" }, -{ "file_offset": 2480288, "flags": 0, "name": "_hs_if_definition" }, -{ "file_offset": 2480316, "flags": 0, "name": "_hs_cond_definition" }, -{ "file_offset": 2480344, "flags": 0, "name": "_hs_set_definition" }, -{ "file_offset": 2480372, "flags": 0, "name": "_hs_and_definition" }, -{ "file_offset": 2480400, "flags": 0, "name": "_hs_or_definition" }, -{ "file_offset": 2480428, "flags": 0, "name": "_hs_plus_definition" }, -{ "file_offset": 2480456, "flags": 0, "name": "_hs_minus_definition" }, -{ "file_offset": 2480484, "flags": 0, "name": "_hs_times_definition" }, -{ "file_offset": 2480512, "flags": 0, "name": "_hs_divide_definition" }, -{ "file_offset": 2480540, "flags": 0, "name": "_hs_min_definition" }, -{ "file_offset": 2480568, "flags": 0, "name": "_hs_max_definition" }, -{ "file_offset": 2480596, "flags": 0, "name": "_hs_equal_definition" }, -{ "file_offset": 2480624, "flags": 0, "name": "_hs_not_equal_definition" }, -{ "file_offset": 2480652, "flags": 0, "name": "_hs_gt_definition" }, -{ "file_offset": 2480680, "flags": 0, "name": "_hs_lt_definition" }, -{ "file_offset": 2480708, "flags": 0, "name": "_hs_gte_definition" }, -{ "file_offset": 2480736, "flags": 0, "name": "_hs_lte_definition" }, -{ "file_offset": 2480764, "flags": 0, "name": "_hs_sleep_definition" }, -{ "file_offset": 2480792, "flags": 0, "name": "_hs_sleep_until_definition" }, -{ "file_offset": 2480820, "flags": 0, "name": "_hs_wake_definition" }, -{ "file_offset": 2480848, "flags": 0, "name": "_hs_inspect_definition" }, -{ "file_offset": 2480876, "flags": 0, "name": "_hs_unit_definition" }, -{ "file_offset": 2480904, "flags": 0, "name": "_hs_ai_debug_communication_suppress_definition" }, -{ "file_offset": 2480932, "flags": 0, "name": "_hs_ai_debug_communication_ignore_definition" }, -{ "file_offset": 2480960, "flags": 0, "name": "_hs_ai_debug_communication_focus_definition" }, -{ "file_offset": 2480988, "flags": 0, "name": "_hs_not_definition" }, -{ "file_offset": 2481020, "flags": 0, "name": "_hs_print_definition" }, -{ "file_offset": 2481052, "flags": 0, "name": "_hs_players_definition" }, -{ "file_offset": 2481080, "flags": 0, "name": "_hs_volume_teleport_players_not_inside_definition" }, -{ "file_offset": 2481112, "flags": 0, "name": "_hs_volume_test_object_definition" }, -{ "file_offset": 2481144, "flags": 0, "name": "_hs_volume_test_objects_definition" }, -{ "file_offset": 2481176, "flags": 0, "name": "_hs_volume_test_objects_all_definition" }, -{ "file_offset": 2481208, "flags": 0, "name": "_hs_object_create_definition" }, -{ "file_offset": 2481240, "flags": 0, "name": "_hs_object_destroy_definition" }, -{ "file_offset": 2481272, "flags": 0, "name": "_hs_object_create_anew_definition" }, -{ "file_offset": 2481304, "flags": 0, "name": "_hs_object_create_containing_definition" }, -{ "file_offset": 2481336, "flags": 0, "name": "_hs_object_create_anew_containing_definition" }, -{ "file_offset": 2481368, "flags": 0, "name": "_hs_object_destroy_containing_definition" }, -{ "file_offset": 2481400, "flags": 0, "name": "_hs_object_destroy_all_definition" }, -{ "file_offset": 2481428, "flags": 0, "name": "_hs_object_teleport_definition" }, -{ "file_offset": 2481460, "flags": 0, "name": "_hs_object_set_facing_definition" }, -{ "file_offset": 2481492, "flags": 0, "name": "_hs_object_set_shield_definition" }, -{ "file_offset": 2481524, "flags": 0, "name": "_hs_object_set_permutation_definition" }, -{ "file_offset": 2481560, "flags": 0, "name": "_hs_list_get_definition" }, -{ "file_offset": 2481592, "flags": 0, "name": "_hs_list_count_definition" }, -{ "file_offset": 2481624, "flags": 0, "name": "_hs_effect_new_definition" }, -{ "file_offset": 2481656, "flags": 0, "name": "_hs_effect_new_on_object_marker_definition" }, -{ "file_offset": 2481692, "flags": 0, "name": "_hs_damage_new_definition" }, -{ "file_offset": 2481724, "flags": 0, "name": "_hs_damage_object_definition" }, -{ "file_offset": 2481756, "flags": 0, "name": "_hs_objects_can_see_object_definition" }, -{ "file_offset": 2481792, "flags": 0, "name": "_hs_objects_can_see_flag_definition" }, -{ "file_offset": 2481828, "flags": 0, "name": "_hs_objects_delete_by_definition_definition" }, -{ "file_offset": 2481860, "flags": 0, "name": "_hs_sound_set_gain_definition" }, -{ "file_offset": 2481892, "flags": 0, "name": "_hs_sound_get_gain_definition" }, -{ "file_offset": 2481924, "flags": 0, "name": "_hs_script_recompile_definition" }, -{ "file_offset": 2481952, "flags": 0, "name": "_hs_script_doc_definition" }, -{ "file_offset": 2481980, "flags": 0, "name": "_hs_help_definition" }, -{ "file_offset": 2482012, "flags": 0, "name": "_hs_random_range_definition" }, -{ "file_offset": 2482044, "flags": 0, "name": "_hs_real_random_range_definition" }, -{ "file_offset": 2482076, "flags": 0, "name": "_hs_numeric_countdown_timer_set_definition" }, -{ "file_offset": 2482108, "flags": 0, "name": "_hs_numeric_countdown_timer_get_definition" }, -{ "file_offset": 2482140, "flags": 0, "name": "_hs_numeric_countdown_timer_stop_definition" }, -{ "file_offset": 2482168, "flags": 0, "name": "_hs_numeric_countdown_timer_restart_definition" }, -{ "file_offset": 2482196, "flags": 0, "name": "_hs_breakable_surfaces_enable_definition" }, -{ "file_offset": 2482228, "flags": 0, "name": "_hs_recording_play_definition" }, -{ "file_offset": 2482260, "flags": 0, "name": "_hs_recording_play_and_delete_definition" }, -{ "file_offset": 2482292, "flags": 0, "name": "_hs_recording_play_and_hover_definition" }, -{ "file_offset": 2482324, "flags": 0, "name": "_hs_recording_kill_definition" }, -{ "file_offset": 2482356, "flags": 0, "name": "_hs_recording_time_definition" }, -{ "file_offset": 2482388, "flags": 0, "name": "_hs_object_set_ranged_attack_inhibited_definition" }, -{ "file_offset": 2482420, "flags": 0, "name": "_hs_object_set_melee_attack_inhibited_definition" }, -{ "file_offset": 2482452, "flags": 0, "name": "_hs_objects_dump_memory_definition" }, -{ "file_offset": 2482480, "flags": 0, "name": "_hs_object_set_collideable_definition" }, -{ "file_offset": 2482512, "flags": 0, "name": "_hs_object_set_scale_definition" }, -{ "file_offset": 2482548, "flags": 0, "name": "_hs_objects_attach_definition" }, -{ "file_offset": 2482584, "flags": 0, "name": "_hs_objects_detach_definition" }, -{ "file_offset": 2482616, "flags": 0, "name": "_hs_garbage_collect_now_definition" }, -{ "file_offset": 2482644, "flags": 0, "name": "_hs_object_cannot_take_damage_definition" }, -{ "file_offset": 2482676, "flags": 0, "name": "_hs_object_can_take_damage_definition" }, -{ "file_offset": 2482708, "flags": 0, "name": "_hs_object_beautify_definition" }, -{ "file_offset": 2482740, "flags": 0, "name": "_hs_objects_predict_definition" }, -{ "file_offset": 2482772, "flags": 0, "name": "_hs_object_type_predict_definition" }, -{ "file_offset": 2482804, "flags": 0, "name": "_hs_object_pvs_set_object_definition" }, -{ "file_offset": 2482836, "flags": 0, "name": "_hs_object_pvs_set_camera_definition" }, -{ "file_offset": 2482868, "flags": 0, "name": "_hs_object_pvs_clear_definition" }, -{ "file_offset": 2482896, "flags": 0, "name": "_hs_object_pvs_activate_definition" }, -{ "file_offset": 2482928, "flags": 0, "name": "_hs_render_lights_definition" }, -{ "file_offset": 2482960, "flags": 0, "name": "_hs_scenery_get_animation_time_definition" }, -{ "file_offset": 2482992, "flags": 0, "name": "_hs_scenery_animation_start_definition" }, -{ "file_offset": 2483028, "flags": 0, "name": "_hs_scenery_animation_start_at_frame_definition" }, -{ "file_offset": 2483064, "flags": 0, "name": "_hs_render_effects_definition" }, -{ "file_offset": 2483096, "flags": 0, "name": "_hs_unit_can_blink_definition" }, -{ "file_offset": 2483128, "flags": 0, "name": "_hs_unit_open_definition" }, -{ "file_offset": 2483160, "flags": 0, "name": "_hs_unit_close_definition" }, -{ "file_offset": 2483192, "flags": 0, "name": "_hs_unit_kill_definition" }, -{ "file_offset": 2483224, "flags": 0, "name": "_hs_unit_kill_silent_definition" }, -{ "file_offset": 2483256, "flags": 0, "name": "_hs_unit_get_custom_animation_time_definition" }, -{ "file_offset": 2483288, "flags": 0, "name": "_hs_unit_stop_custom_animation_definition" }, -{ "file_offset": 2483320, "flags": 0, "name": "_hs_custom_animation_definition" }, -{ "file_offset": 2483356, "flags": 0, "name": "_hs_custom_animation_list_definition" }, -{ "file_offset": 2483392, "flags": 0, "name": "_hs_unit_custom_animation_at_frame_definition" }, -{ "file_offset": 2483432, "flags": 0, "name": "_hs_unit_is_playing_custom_animation_definition" }, -{ "file_offset": 2483464, "flags": 0, "name": "_hs_unit_aim_without_turning_definition" }, -{ "file_offset": 2483496, "flags": 0, "name": "_hs_unit_set_emotion_definition" }, -{ "file_offset": 2483528, "flags": 0, "name": "_hs_unit_set_enterable_by_player_definition" }, -{ "file_offset": 2483560, "flags": 0, "name": "_hs_unit_enter_vehicle_definition" }, -{ "file_offset": 2483596, "flags": 0, "name": "_hs_vehicle_test_seat_list_definition" }, -{ "file_offset": 2483632, "flags": 0, "name": "_hs_vehicle_test_seat_definition" }, -{ "file_offset": 2483668, "flags": 0, "name": "_hs_unit_set_emotion_animation_definition" }, -{ "file_offset": 2483700, "flags": 0, "name": "_hs_unit_exit_vehicle_definition" }, -{ "file_offset": 2483732, "flags": 0, "name": "_hs_unit_set_maximum_vitality_definition" }, -{ "file_offset": 2483768, "flags": 0, "name": "_hs_units_set_maximum_vitality_definition" }, -{ "file_offset": 2483804, "flags": 0, "name": "_hs_unit_set_current_vitality_definition" }, -{ "file_offset": 2483840, "flags": 0, "name": "_hs_units_set_current_vitality_definition" }, -{ "file_offset": 2483876, "flags": 0, "name": "_hs_vehicle_load_magic_definition" }, -{ "file_offset": 2483912, "flags": 0, "name": "_hs_vehicle_unload_definition" }, -{ "file_offset": 2483944, "flags": 0, "name": "_hs_magic_seat_name_definition" }, -{ "file_offset": 2483976, "flags": 0, "name": "_hs_unit_set_seat_definition" }, -{ "file_offset": 2484008, "flags": 0, "name": "_hs_magic_melee_attack_definition" }, -{ "file_offset": 2484036, "flags": 0, "name": "_hs_vehicle_riders_definition" }, -{ "file_offset": 2484068, "flags": 0, "name": "_hs_vehicle_driver_definition" }, -{ "file_offset": 2484100, "flags": 0, "name": "_hs_vehicle_gunner_definition" }, -{ "file_offset": 2484132, "flags": 0, "name": "_hs_unit_get_health_definition" }, -{ "file_offset": 2484164, "flags": 0, "name": "_hs_unit_get_shield_definition" }, -{ "file_offset": 2484196, "flags": 0, "name": "_hs_unit_get_total_grenade_count_definition" }, -{ "file_offset": 2484228, "flags": 0, "name": "_hs_unit_has_weapon_definition" }, -{ "file_offset": 2484260, "flags": 0, "name": "_hs_unit_has_weapon_readied_definition" }, -{ "file_offset": 2484292, "flags": 0, "name": "_hs_unit_doesnt_drop_items_definition" }, -{ "file_offset": 2484324, "flags": 0, "name": "_hs_unit_impervious_definition" }, -{ "file_offset": 2484356, "flags": 0, "name": "_hs_unit_suspended_definition" }, -{ "file_offset": 2484388, "flags": 0, "name": "_hs_unit_solo_player_integrated_night_vision_is_active_definition" }, -{ "file_offset": 2484416, "flags": 0, "name": "_hs_units_set_desired_flashlight_state_definition" }, -{ "file_offset": 2484448, "flags": 0, "name": "_hs_unit_set_desired_flashlight_state_definition" }, -{ "file_offset": 2484480, "flags": 0, "name": "_hs_unit_get_current_flashlight_state_definition" }, -{ "file_offset": 2484512, "flags": 0, "name": "_hs_device_set_never_appears_locked_definition" }, -{ "file_offset": 2484544, "flags": 0, "name": "_hs_device_set_power_definition" }, -{ "file_offset": 2484576, "flags": 0, "name": "_hs_device_get_power_definition" }, -{ "file_offset": 2484608, "flags": 0, "name": "_hs_device_set_position_definition" }, -{ "file_offset": 2484640, "flags": 0, "name": "_hs_device_get_position_definition" }, -{ "file_offset": 2484672, "flags": 0, "name": "_hs_device_set_position_immediate_definition" }, -{ "file_offset": 2484704, "flags": 0, "name": "_hs_device_group_get_definition" }, -{ "file_offset": 2484736, "flags": 0, "name": "_hs_device_group_set_definition" }, -{ "file_offset": 2484768, "flags": 0, "name": "_hs_device_group_set_immediate_definition" }, -{ "file_offset": 2484800, "flags": 0, "name": "_hs_device_one_sided_set_definition" }, -{ "file_offset": 2484832, "flags": 0, "name": "_hs_device_operates_automatically_set_definition" }, -{ "file_offset": 2484864, "flags": 0, "name": "_hs_device_group_change_only_once_more_set_definition" }, -{ "file_offset": 2484896, "flags": 0, "name": "_hs_breakable_surfaces_reset_definition" }, -{ "file_offset": 2484924, "flags": 0, "name": "_hs_cheat_all_powerups_definition" }, -{ "file_offset": 2484952, "flags": 0, "name": "_hs_cheat_all_weapons_definition" }, -{ "file_offset": 2484980, "flags": 0, "name": "_hs_cheat_all_vehicles_definition" }, -{ "file_offset": 2485008, "flags": 0, "name": "_hs_cheat_teleport_to_camera_definition" }, -{ "file_offset": 2485036, "flags": 0, "name": "_hs_cheat_active_camouflage_definition" }, -{ "file_offset": 2485064, "flags": 0, "name": "_hs_cheat_active_camouflage_local_player_definition" }, -{ "file_offset": 2485096, "flags": 0, "name": "_hs_cheats_load_definition" }, -{ "file_offset": 2485124, "flags": 0, "name": "_hs_ai_definition" }, -{ "file_offset": 2485156, "flags": 0, "name": "_hs_ai_dialogue_triggers_definition" }, -{ "file_offset": 2485188, "flags": 0, "name": "_hs_ai_grenades_definition" }, -{ "file_offset": 2485220, "flags": 0, "name": "_hs_ai_free_definition" }, -{ "file_offset": 2485252, "flags": 0, "name": "_hs_ai_free_units_definition" }, -{ "file_offset": 2485284, "flags": 0, "name": "_hs_ai_attach_definition" }, -{ "file_offset": 2485316, "flags": 0, "name": "_hs_ai_attach_units_definition" }, -{ "file_offset": 2485348, "flags": 0, "name": "_hs_ai_attach_free_definition" }, -{ "file_offset": 2485380, "flags": 0, "name": "_hs_ai_detach_definition" }, -{ "file_offset": 2485412, "flags": 0, "name": "_hs_ai_detach_units_definition" }, -{ "file_offset": 2485444, "flags": 0, "name": "_hs_ai_place_definition" }, -{ "file_offset": 2485476, "flags": 0, "name": "_hs_ai_kill_definition" }, -{ "file_offset": 2485508, "flags": 0, "name": "_hs_ai_kill_silent_definition" }, -{ "file_offset": 2485540, "flags": 0, "name": "_hs_ai_erase_definition" }, -{ "file_offset": 2485572, "flags": 0, "name": "_hs_ai_erase_all_definition" }, -{ "file_offset": 2485600, "flags": 0, "name": "_hs_ai_select_definition" }, -{ "file_offset": 2485632, "flags": 0, "name": "_hs_ai_deselect_definition" }, -{ "file_offset": 2485660, "flags": 0, "name": "_hs_ai_spawn_actor_definition" }, -{ "file_offset": 2485692, "flags": 0, "name": "_hs_ai_set_respawn_definition" }, -{ "file_offset": 2485724, "flags": 0, "name": "_hs_ai_set_deaf_definition" }, -{ "file_offset": 2485756, "flags": 0, "name": "_hs_ai_set_blind_definition" }, -{ "file_offset": 2485788, "flags": 0, "name": "_hs_ai_magically_see_encounter_definition" }, -{ "file_offset": 2485820, "flags": 0, "name": "_hs_ai_magically_see_players_definition" }, -{ "file_offset": 2485852, "flags": 0, "name": "_hs_ai_magically_see_unit_definition" }, -{ "file_offset": 2485884, "flags": 0, "name": "_hs_ai_magically_see_units_definition" }, -{ "file_offset": 2485916, "flags": 0, "name": "_hs_ai_timer_start_definition" }, -{ "file_offset": 2485948, "flags": 0, "name": "_hs_ai_timer_expire_definition" }, -{ "file_offset": 2485980, "flags": 0, "name": "_hs_ai_attack_definition" }, -{ "file_offset": 2486012, "flags": 0, "name": "_hs_ai_defend_definition" }, -{ "file_offset": 2486044, "flags": 0, "name": "_hs_ai_retreat_definition" }, -{ "file_offset": 2486076, "flags": 0, "name": "_hs_ai_maneuver_definition" }, -{ "file_offset": 2486108, "flags": 0, "name": "_hs_ai_maneuver_enable_definition" }, -{ "file_offset": 2486140, "flags": 0, "name": "_hs_ai_migrate_definition" }, -{ "file_offset": 2486172, "flags": 0, "name": "_hs_ai_migrate_and_speak_definition" }, -{ "file_offset": 2486208, "flags": 0, "name": "_hs_ai_migrate_by_unit_definition" }, -{ "file_offset": 2486240, "flags": 0, "name": "_hs_ai_allegiance_definition" }, -{ "file_offset": 2486272, "flags": 0, "name": "_hs_ai_allegiance_remove_definition" }, -{ "file_offset": 2486304, "flags": 0, "name": "_hs_ai_go_to_vehicle_definition" }, -{ "file_offset": 2486340, "flags": 0, "name": "_hs_ai_go_to_vehicle_override_definition" }, -{ "file_offset": 2486376, "flags": 0, "name": "_hs_ai_exit_vehicle_definition" }, -{ "file_offset": 2486408, "flags": 0, "name": "_hs_ai_braindead_definition" }, -{ "file_offset": 2486440, "flags": 0, "name": "_hs_ai_braindead_by_unit_definition" }, -{ "file_offset": 2486472, "flags": 0, "name": "_hs_ai_disregard_definition" }, -{ "file_offset": 2486504, "flags": 0, "name": "_hs_ai_prefer_target_definition" }, -{ "file_offset": 2486536, "flags": 0, "name": "_hs_ai_teleport_to_starting_location_definition" }, -{ "file_offset": 2486568, "flags": 0, "name": "_hs_ai_teleport_to_starting_location_if_unsupported_definition" }, -{ "file_offset": 2486600, "flags": 0, "name": "_hs_ai_renew_definition" }, -{ "file_offset": 2486632, "flags": 0, "name": "_hs_ai_try_to_fight_nothing_definition" }, -{ "file_offset": 2486664, "flags": 0, "name": "_hs_ai_try_to_fight_definition" }, -{ "file_offset": 2486696, "flags": 0, "name": "_hs_ai_try_to_fight_player_definition" }, -{ "file_offset": 2486728, "flags": 0, "name": "_hs_ai_command_list_definition" }, -{ "file_offset": 2486760, "flags": 0, "name": "_hs_ai_command_list_by_unit_definition" }, -{ "file_offset": 2486792, "flags": 0, "name": "_hs_ai_command_list_advance_definition" }, -{ "file_offset": 2486824, "flags": 0, "name": "_hs_ai_command_list_advance_by_unit_definition" }, -{ "file_offset": 2486856, "flags": 0, "name": "_hs_ai_force_active_definition" }, -{ "file_offset": 2486888, "flags": 0, "name": "_hs_ai_force_active_by_unit_definition" }, -{ "file_offset": 2486920, "flags": 0, "name": "_hs_ai_set_return_state_definition" }, -{ "file_offset": 2486952, "flags": 0, "name": "_hs_ai_set_current_state_definition" }, -{ "file_offset": 2486984, "flags": 0, "name": "_hs_ai_playfight_definition" }, -{ "file_offset": 2487016, "flags": 0, "name": "_hs_ai_reconnect_definition" }, -{ "file_offset": 2487044, "flags": 0, "name": "_hs_ai_vehicle_encounter_definition" }, -{ "file_offset": 2487076, "flags": 0, "name": "_hs_ai_vehicle_enterable_distance_definition" }, -{ "file_offset": 2487108, "flags": 0, "name": "_hs_ai_vehicle_enterable_team_definition" }, -{ "file_offset": 2487140, "flags": 0, "name": "_hs_ai_vehicle_enterable_actor_type_definition" }, -{ "file_offset": 2487172, "flags": 0, "name": "_hs_ai_vehicle_enterable_actors_definition" }, -{ "file_offset": 2487204, "flags": 0, "name": "_hs_ai_vehicle_enterable_disable_definition" }, -{ "file_offset": 2487236, "flags": 0, "name": "_hs_ai_look_at_object_definition" }, -{ "file_offset": 2487268, "flags": 0, "name": "_hs_ai_stop_looking_definition" }, -{ "file_offset": 2487300, "flags": 0, "name": "_hs_ai_automatic_migration_target_definition" }, -{ "file_offset": 2487332, "flags": 0, "name": "_hs_ai_follow_target_disable_definition" }, -{ "file_offset": 2487364, "flags": 0, "name": "_hs_ai_follow_target_players_definition" }, -{ "file_offset": 2487396, "flags": 0, "name": "_hs_ai_follow_target_unit_definition" }, -{ "file_offset": 2487428, "flags": 0, "name": "_hs_ai_follow_target_ai_definition" }, -{ "file_offset": 2487460, "flags": 0, "name": "_hs_ai_follow_distance_definition" }, -{ "file_offset": 2487492, "flags": 0, "name": "_hs_ai_conversation_stop_definition" }, -{ "file_offset": 2487524, "flags": 0, "name": "_hs_ai_conversation_advance_definition" }, -{ "file_offset": 2487556, "flags": 0, "name": "_hs_ai_link_activation_definition" }, -{ "file_offset": 2487588, "flags": 0, "name": "_hs_ai_berserk_definition" }, -{ "file_offset": 2487620, "flags": 0, "name": "_hs_ai_set_team_definition" }, -{ "file_offset": 2487652, "flags": 0, "name": "_hs_ai_allow_charge_definition" }, -{ "file_offset": 2487684, "flags": 0, "name": "_hs_ai_allow_dormant_definition" }, -{ "file_offset": 2487716, "flags": 0, "name": "_hs_ai_is_attacking_definition" }, -{ "file_offset": 2487748, "flags": 0, "name": "_hs_ai_command_list_status_definition" }, -{ "file_offset": 2487780, "flags": 0, "name": "_hs_ai_going_to_vehicle_definition" }, -{ "file_offset": 2487812, "flags": 0, "name": "_hs_ai_living_count_definition" }, -{ "file_offset": 2487844, "flags": 0, "name": "_hs_ai_living_fraction_definition" }, -{ "file_offset": 2487876, "flags": 0, "name": "_hs_ai_strength_definition" }, -{ "file_offset": 2487908, "flags": 0, "name": "_hs_ai_swarm_count_definition" }, -{ "file_offset": 2487940, "flags": 0, "name": "_hs_ai_nonswarm_count_definition" }, -{ "file_offset": 2487972, "flags": 0, "name": "_hs_ai_actors_definition" }, -{ "file_offset": 2488004, "flags": 0, "name": "_hs_ai_status_definition" }, -{ "file_offset": 2488036, "flags": 0, "name": "_hs_ai_conversation_definition" }, -{ "file_offset": 2488068, "flags": 0, "name": "_hs_ai_conversation_line_definition" }, -{ "file_offset": 2488100, "flags": 0, "name": "_hs_ai_conversation_status_definition" }, -{ "file_offset": 2488132, "flags": 0, "name": "_hs_ai_allegiance_broken_definition" }, -{ "file_offset": 2488164, "flags": 0, "name": "_hs_camera_control_definition" }, -{ "file_offset": 2488196, "flags": 0, "name": "_hs_camera_set_definition" }, -{ "file_offset": 2488228, "flags": 0, "name": "_hs_camera_set_relative_definition" }, -{ "file_offset": 2488264, "flags": 0, "name": "_hs_camera_set_animation_definition" }, -{ "file_offset": 2488296, "flags": 0, "name": "_hs_camera_set_first_person_definition" }, -{ "file_offset": 2488328, "flags": 0, "name": "_hs_camera_set_dead_definition" }, -{ "file_offset": 2488360, "flags": 0, "name": "_hs_camera_time_definition" }, -{ "file_offset": 2488388, "flags": 0, "name": "_hs_debug_camera_save_definition" }, -{ "file_offset": 2488416, "flags": 0, "name": "_hs_debug_camera_load_definition" }, -{ "file_offset": 2488444, "flags": 0, "name": "_hs_game_speed_definition" }, -{ "file_offset": 2488476, "flags": 0, "name": "_hs_game_variant_definition" }, -{ "file_offset": 2488508, "flags": 0, "name": "_hs_game_time_definition" }, -{ "file_offset": 2488536, "flags": 0, "name": "_hs_game_difficulty_get_definition" }, -{ "file_offset": 2488564, "flags": 0, "name": "_hs_game_difficulty_get_real_definition" }, -{ "file_offset": 2488592, "flags": 0, "name": "_hs_players_unzoom_all_definition" }, -{ "file_offset": 2488620, "flags": 0, "name": "_hs_player_enable_input_definition" }, -{ "file_offset": 2488652, "flags": 0, "name": "_hs_player_camera_control_definition" }, -{ "file_offset": 2488684, "flags": 0, "name": "_hs_player_action_test_reset_definition" }, -{ "file_offset": 2488712, "flags": 0, "name": "_hs_player_action_test_jump_definition" }, -{ "file_offset": 2488740, "flags": 0, "name": "_hs_player_action_test_primary_trigger_definition" }, -{ "file_offset": 2488768, "flags": 0, "name": "_hs_player_action_test_grenade_trigger_definition" }, -{ "file_offset": 2488796, "flags": 0, "name": "_hs_player_action_test_zoom_definition" }, -{ "file_offset": 2488824, "flags": 0, "name": "_hs_player_action_test_action_definition" }, -{ "file_offset": 2488852, "flags": 0, "name": "_hs_player_action_test_accept_definition" }, -{ "file_offset": 2488880, "flags": 0, "name": "_hs_player_action_test_back_definition" }, -{ "file_offset": 2488908, "flags": 0, "name": "_hs_player_action_test_look_relative_up_definition" }, -{ "file_offset": 2488936, "flags": 0, "name": "_hs_player_action_test_look_relative_down_definition" }, -{ "file_offset": 2488964, "flags": 0, "name": "_hs_player_action_test_look_relative_left_definition" }, -{ "file_offset": 2488992, "flags": 0, "name": "_hs_player_action_test_look_relative_right_definition" }, -{ "file_offset": 2489020, "flags": 0, "name": "_hs_player_action_test_look_relative_all_directions_definition" }, -{ "file_offset": 2489048, "flags": 0, "name": "_hs_player_action_test_move_relative_all_directions_definition" }, -{ "file_offset": 2489076, "flags": 0, "name": "_hs_player_add_equipment_definition" }, -{ "file_offset": 2489112, "flags": 0, "name": "_hs_debug_teleport_player_definition" }, -{ "file_offset": 2489144, "flags": 0, "name": "_hs_map_reset_definition" }, -{ "file_offset": 2489172, "flags": 0, "name": "_hs_map_name_definition" }, -{ "file_offset": 2489204, "flags": 0, "name": "_hs_multiplayer_map_name_definition" }, -{ "file_offset": 2489236, "flags": 0, "name": "_hs_game_difficulty_set_definition" }, -{ "file_offset": 2489268, "flags": 0, "name": "_hs_crash_definition" }, -{ "file_offset": 2489300, "flags": 0, "name": "_hs_switch_bsp_definition" }, -{ "file_offset": 2489332, "flags": 0, "name": "_hs_structure_bsp_index_definition" }, -{ "file_offset": 2489360, "flags": 0, "name": "_hs_version_definition" }, -{ "file_offset": 2489388, "flags": 0, "name": "_hs_playback_definition" }, -{ "file_offset": 2489416, "flags": 0, "name": "_hs_texture_cache_flush_definition" }, -{ "file_offset": 2489444, "flags": 0, "name": "_hs_sound_cache_flush_definition" }, -{ "file_offset": 2489472, "flags": 0, "name": "_hs_debug_memory_definition" }, -{ "file_offset": 2489500, "flags": 0, "name": "_hs_debug_memory_by_file_definition" }, -{ "file_offset": 2489528, "flags": 0, "name": "_hs_debug_memory_for_file_definition" }, -{ "file_offset": 2489560, "flags": 0, "name": "_hs_debug_tags_definition" }, -{ "file_offset": 2489588, "flags": 0, "name": "_hs_profile_reset_definition" }, -{ "file_offset": 2489616, "flags": 0, "name": "_hs_profile_dump_definition" }, -{ "file_offset": 2489648, "flags": 0, "name": "_hs_profile_activate_definition" }, -{ "file_offset": 2489680, "flags": 0, "name": "_hs_profile_deactivate_definition" }, -{ "file_offset": 2489712, "flags": 0, "name": "_hs_profile_graph_toggle_definition" }, -{ "file_offset": 2489744, "flags": 0, "name": "_hs_debug_pvs_definition" }, -{ "file_offset": 2489776, "flags": 0, "name": "_hs_radiosity_start_definition" }, -{ "file_offset": 2489804, "flags": 0, "name": "_hs_radiosity_save_definition" }, -{ "file_offset": 2489832, "flags": 0, "name": "_hs_radiosity_debug_point_definition" }, -{ "file_offset": 2489860, "flags": 0, "name": "_hs_ai_lines_definition" }, -{ "file_offset": 2489888, "flags": 0, "name": "_hs_ai_debug_sound_point_set_definition" }, -{ "file_offset": 2489916, "flags": 0, "name": "_hs_ai_debug_vocalize_definition" }, -{ "file_offset": 2489948, "flags": 0, "name": "_hs_ai_debug_teleport_to_definition" }, -{ "file_offset": 2489980, "flags": 0, "name": "_hs_ai_debug_speak_definition" }, -{ "file_offset": 2490012, "flags": 0, "name": "_hs_ai_debug_speak_list_definition" }, -{ "file_offset": 2490044, "flags": 0, "name": "_hs_fade_in_definition" }, -{ "file_offset": 2490080, "flags": 0, "name": "_hs_fade_out_definition" }, -{ "file_offset": 2490116, "flags": 0, "name": "_hs_cinematic_start_definition" }, -{ "file_offset": 2490144, "flags": 0, "name": "_hs_cinematic_stop_definition" }, -{ "file_offset": 2490172, "flags": 0, "name": "_hs_cinematic_skip_start_internal_definition" }, -{ "file_offset": 2490200, "flags": 0, "name": "_hs_cinematic_skip_stop_internal_definition" }, -{ "file_offset": 2490228, "flags": 0, "name": "_hs_cinematic_show_letterbox_definition" }, -{ "file_offset": 2490260, "flags": 0, "name": "_hs_cinematic_set_title_definition" }, -{ "file_offset": 2490292, "flags": 0, "name": "_hs_cinematic_set_title_delayed_definition" }, -{ "file_offset": 2490324, "flags": 0, "name": "_hs_cinematic_suppress_bsp_object_creation_definition" }, -{ "file_offset": 2490356, "flags": 0, "name": "_hs_attract_mode_start_definition" }, -{ "file_offset": 2490384, "flags": 0, "name": "_hs_game_won_definition" }, -{ "file_offset": 2490412, "flags": 0, "name": "_hs_game_lost_definition" }, -{ "file_offset": 2490440, "flags": 0, "name": "_hs_game_safe_to_save_definition" }, -{ "file_offset": 2490468, "flags": 0, "name": "_hs_game_all_quiet_definition" }, -{ "file_offset": 2490496, "flags": 0, "name": "_hs_game_safe_to_speak_definition" }, -{ "file_offset": 2490524, "flags": 0, "name": "_hs_game_is_cooperative_definition" }, -{ "file_offset": 2490552, "flags": 0, "name": "_hs_game_save_definition" }, -{ "file_offset": 2490580, "flags": 0, "name": "_hs_game_save_cancel_definition" }, -{ "file_offset": 2490608, "flags": 0, "name": "_hs_game_save_no_timeout_definition" }, -{ "file_offset": 2490636, "flags": 0, "name": "_hs_game_save_totally_unsafe_definition" }, -{ "file_offset": 2490664, "flags": 0, "name": "_hs_game_saving_definition" }, -{ "file_offset": 2490692, "flags": 0, "name": "_hs_game_revert_definition" }, -{ "file_offset": 2490720, "flags": 0, "name": "_hs_core_load_definition" }, -{ "file_offset": 2490748, "flags": 0, "name": "_hs_core_load_at_startup_definition" }, -{ "file_offset": 2490776, "flags": 0, "name": "_hs_core_load_name_definition" }, -{ "file_offset": 2490808, "flags": 0, "name": "_hs_core_load_name_at_startup_definition" }, -{ "file_offset": 2490840, "flags": 0, "name": "_hs_core_save_definition" }, -{ "file_offset": 2490868, "flags": 0, "name": "_hs_core_save_name_definition" }, -{ "file_offset": 2490900, "flags": 0, "name": "_hs_game_skip_ticks_definition" }, -{ "file_offset": 2490932, "flags": 0, "name": "_hs_game_reverted_definition" }, -{ "file_offset": 2490960, "flags": 0, "name": "_hs_sound_impulse_start_definition" }, -{ "file_offset": 2490996, "flags": 0, "name": "_hs_sound_impulse_time_definition" }, -{ "file_offset": 2491028, "flags": 0, "name": "_hs_sound_impulse_stop_definition" }, -{ "file_offset": 2491060, "flags": 0, "name": "_hs_sound_looping_predict_definition" }, -{ "file_offset": 2491092, "flags": 0, "name": "_hs_sound_looping_start_definition" }, -{ "file_offset": 2491128, "flags": 0, "name": "_hs_sound_looping_stop_definition" }, -{ "file_offset": 2491160, "flags": 0, "name": "_hs_sound_looping_set_scale_definition" }, -{ "file_offset": 2491192, "flags": 0, "name": "_hs_sound_looping_set_alternate_definition" }, -{ "file_offset": 2491224, "flags": 0, "name": "_hs_debug_sounds_enable_definition" }, -{ "file_offset": 2491256, "flags": 0, "name": "_hs_debug_sounds_distances_definition" }, -{ "file_offset": 2491292, "flags": 0, "name": "_hs_debug_sounds_wet_definition" }, -{ "file_offset": 2491324, "flags": 0, "name": "_hs_sound_class_set_gain_definition" }, -{ "file_offset": 2491360, "flags": 0, "name": "_hs_sound_enable_definition" }, -{ "file_offset": 2491392, "flags": 0, "name": "_hs_vehicle_hover_definition" }, -{ "file_offset": 2491424, "flags": 0, "name": "_hs_show_hud_definition" }, -{ "file_offset": 2491456, "flags": 0, "name": "_hs_show_hud_help_text_definition" }, -{ "file_offset": 2491488, "flags": 0, "name": "_hs_enable_hud_help_flash_definition" }, -{ "file_offset": 2491520, "flags": 0, "name": "_hs_hud_help_flash_restart_definition" }, -{ "file_offset": 2491548, "flags": 0, "name": "_hs_activate_nav_point_flag_definition" }, -{ "file_offset": 2491584, "flags": 0, "name": "_hs_activate_nav_point_object_definition" }, -{ "file_offset": 2491620, "flags": 0, "name": "_hs_activate_team_nav_point_flag_definition" }, -{ "file_offset": 2491656, "flags": 0, "name": "_hs_activate_team_nav_point_object_definition" }, -{ "file_offset": 2491692, "flags": 0, "name": "_hs_deactivate_nav_point_flag_definition" }, -{ "file_offset": 2491724, "flags": 0, "name": "_hs_deactivate_nav_point_object_definition" }, -{ "file_offset": 2491756, "flags": 0, "name": "_hs_deactivate_team_nav_point_flag_definition" }, -{ "file_offset": 2491788, "flags": 0, "name": "_hs_deactivate_team_nav_point_object_definition" }, -{ "file_offset": 2491820, "flags": 0, "name": "_hs_cls_definition" }, -{ "file_offset": 2491848, "flags": 0, "name": "_hs_error_overflow_suppression_definition" }, -{ "file_offset": 2491880, "flags": 0, "name": "_hs_structure_lens_flares_place_definition" }, -{ "file_offset": 2491908, "flags": 0, "name": "_hs_player_effect_set_max_translation_definition" }, -{ "file_offset": 2491944, "flags": 0, "name": "_hs_player_effect_set_max_rotation_definition" }, -{ "file_offset": 2491980, "flags": 0, "name": "_hs_player_effect_set_max_rumble_definition" }, -{ "file_offset": 2492012, "flags": 0, "name": "_hs_player_effect_start_definition" }, -{ "file_offset": 2492044, "flags": 0, "name": "_hs_player_effect_stop_definition" }, -{ "file_offset": 2492076, "flags": 0, "name": "_hs_hud_show_health_definition" }, -{ "file_offset": 2492108, "flags": 0, "name": "_hs_hud_blink_health_definition" }, -{ "file_offset": 2492140, "flags": 0, "name": "_hs_hud_show_shield_definition" }, -{ "file_offset": 2492172, "flags": 0, "name": "_hs_hud_blink_shield_definition" }, -{ "file_offset": 2492204, "flags": 0, "name": "_hs_hud_show_motion_sensor_definition" }, -{ "file_offset": 2492236, "flags": 0, "name": "_hs_hud_blink_motion_sensor_definition" }, -{ "file_offset": 2492268, "flags": 0, "name": "_hs_hud_show_crosshair_definition" }, -{ "file_offset": 2492300, "flags": 0, "name": "_hs_hud_clear_messages_definition" }, -{ "file_offset": 2492328, "flags": 0, "name": "_hs_hud_set_help_text_definition" }, -{ "file_offset": 2492360, "flags": 0, "name": "_hs_hud_set_objective_text_definition" }, -{ "file_offset": 2492392, "flags": 0, "name": "_hs_hud_set_timer_time_definition" }, -{ "file_offset": 2492424, "flags": 0, "name": "_hs_hud_set_timer_warning_time_definition" }, -{ "file_offset": 2492456, "flags": 0, "name": "_hs_hud_set_timer_position_definition" }, -{ "file_offset": 2492492, "flags": 0, "name": "_hs_show_hud_timer_definition" }, -{ "file_offset": 2492524, "flags": 0, "name": "_hs_pause_hud_timer_definition" }, -{ "file_offset": 2492556, "flags": 0, "name": "_hs_hud_get_timer_ticks_definition" }, -{ "file_offset": 2492584, "flags": 0, "name": "_hs_time_code_show_definition" }, -{ "file_offset": 2492616, "flags": 0, "name": "_hs_time_code_start_definition" }, -{ "file_offset": 2492648, "flags": 0, "name": "_hs_time_code_reset_definition" }, -{ "file_offset": 2492676, "flags": 0, "name": "_hs_rasterizer_decals_flush_definition" }, -{ "file_offset": 2492704, "flags": 0, "name": "_hs_rasterizer_fps_accumulate_definition" }, -{ "file_offset": 2492732, "flags": 0, "name": "_hs_rasterizer_model_ambient_reflection_tint_definition" }, -{ "file_offset": 2492768, "flags": 0, "name": "_hs_rasterizer_lights_reset_for_new_map_definition" }, -{ "file_offset": 2492796, "flags": 0, "name": "_hs_script_screen_effect_set_value_definition" }, -{ "file_offset": 2492828, "flags": 0, "name": "_hs_cinematic_screen_effect_start_definition" }, -{ "file_offset": 2492860, "flags": 0, "name": "_hs_cinematic_screen_effect_set_convolution_definition" }, -{ "file_offset": 2492900, "flags": 0, "name": "_hs_cinematic_screen_effect_set_filter_definition" }, -{ "file_offset": 2492940, "flags": 0, "name": "_hs_cinematic_screen_effect_set_filter_desaturation_tint_definition" }, -{ "file_offset": 2492976, "flags": 0, "name": "_hs_cinematic_screen_effect_set_video_definition" }, -{ "file_offset": 2493008, "flags": 0, "name": "_hs_cinematic_screen_effect_stop_definition" }, -{ "file_offset": 2493036, "flags": 0, "name": "_hs_cinematic_set_near_clip_distance_definition" }, -{ "file_offset": 2493068, "flags": 0, "name": "_hs_enumerate_memory_units_definition" }, -{ "file_offset": 2493096, "flags": 0, "name": "_hs_delete_save_game_files_definition" }, -{ "file_offset": 2493124, "flags": 0, "name": "_hs_fast_setup_network_server_definition" }, -{ "file_offset": 2493152, "flags": 0, "name": "_hs_profile_unlock_solo_levels_definition" }, -{ "file_offset": 2493180, "flags": 0, "name": "_hs_player0_look_invert_pitch_definition" }, -{ "file_offset": 2493212, "flags": 0, "name": "_hs_player0_look_pitch_is_inverted_definition" }, -{ "file_offset": 2493240, "flags": 0, "name": "_hs_player0_joystick_set_is_normal_definition" }, -{ "file_offset": 2493268, "flags": 0, "name": "_hs_ui_widget_show_path_definition" }, -{ "file_offset": 2493300, "flags": 0, "name": "_hs_display_scenario_help_definition" }, -{ "file_offset": 2493332, "flags": 0, "name": "_hs_network_game_start_now_definition" }, -{ "file_offset": 2493360, "flags": 0, "name": "_hs_xbox_set_machine_name_definition" }, +{ "file_offset": 2480232, "flags": 0, "name": "_hs_begin_definition", "static": true }, +{ "file_offset": 2480260, "flags": 0, "name": "_hs_begin_random_definition", "static": true }, +{ "file_offset": 2480288, "flags": 0, "name": "_hs_if_definition", "static": true }, +{ "file_offset": 2480316, "flags": 0, "name": "_hs_cond_definition", "static": true }, +{ "file_offset": 2480344, "flags": 0, "name": "_hs_set_definition", "static": true }, +{ "file_offset": 2480372, "flags": 0, "name": "_hs_and_definition", "static": true }, +{ "file_offset": 2480400, "flags": 0, "name": "_hs_or_definition", "static": true }, +{ "file_offset": 2480428, "flags": 0, "name": "_hs_plus_definition", "static": true }, +{ "file_offset": 2480456, "flags": 0, "name": "_hs_minus_definition", "static": true }, +{ "file_offset": 2480484, "flags": 0, "name": "_hs_times_definition", "static": true }, +{ "file_offset": 2480512, "flags": 0, "name": "_hs_divide_definition", "static": true }, +{ "file_offset": 2480540, "flags": 0, "name": "_hs_min_definition", "static": true }, +{ "file_offset": 2480568, "flags": 0, "name": "_hs_max_definition", "static": true }, +{ "file_offset": 2480596, "flags": 0, "name": "_hs_equal_definition", "static": true }, +{ "file_offset": 2480624, "flags": 0, "name": "_hs_not_equal_definition", "static": true }, +{ "file_offset": 2480652, "flags": 0, "name": "_hs_gt_definition", "static": true }, +{ "file_offset": 2480680, "flags": 0, "name": "_hs_lt_definition", "static": true }, +{ "file_offset": 2480708, "flags": 0, "name": "_hs_gte_definition", "static": true }, +{ "file_offset": 2480736, "flags": 0, "name": "_hs_lte_definition", "static": true }, +{ "file_offset": 2480764, "flags": 0, "name": "_hs_sleep_definition", "static": true }, +{ "file_offset": 2480792, "flags": 0, "name": "_hs_sleep_until_definition", "static": true }, +{ "file_offset": 2480820, "flags": 0, "name": "_hs_wake_definition", "static": true }, +{ "file_offset": 2480848, "flags": 0, "name": "_hs_inspect_definition", "static": true }, +{ "file_offset": 2480876, "flags": 0, "name": "_hs_unit_definition", "static": true }, +{ "file_offset": 2480904, "flags": 0, "name": "_hs_ai_debug_communication_suppress_definition", "static": true }, +{ "file_offset": 2480932, "flags": 0, "name": "_hs_ai_debug_communication_ignore_definition", "static": true }, +{ "file_offset": 2480960, "flags": 0, "name": "_hs_ai_debug_communication_focus_definition", "static": true }, +{ "file_offset": 2480988, "flags": 0, "name": "_hs_not_definition", "static": true }, +{ "file_offset": 2481020, "flags": 0, "name": "_hs_print_definition", "static": true }, +{ "file_offset": 2481052, "flags": 0, "name": "_hs_players_definition", "static": true }, +{ "file_offset": 2481080, "flags": 0, "name": "_hs_volume_teleport_players_not_inside_definition", "static": true }, +{ "file_offset": 2481112, "flags": 0, "name": "_hs_volume_test_object_definition", "static": true }, +{ "file_offset": 2481144, "flags": 0, "name": "_hs_volume_test_objects_definition", "static": true }, +{ "file_offset": 2481176, "flags": 0, "name": "_hs_volume_test_objects_all_definition", "static": true }, +{ "file_offset": 2481208, "flags": 0, "name": "_hs_object_create_definition", "static": true }, +{ "file_offset": 2481240, "flags": 0, "name": "_hs_object_destroy_definition", "static": true }, +{ "file_offset": 2481272, "flags": 0, "name": "_hs_object_create_anew_definition", "static": true }, +{ "file_offset": 2481304, "flags": 0, "name": "_hs_object_create_containing_definition", "static": true }, +{ "file_offset": 2481336, "flags": 0, "name": "_hs_object_create_anew_containing_definition", "static": true }, +{ "file_offset": 2481368, "flags": 0, "name": "_hs_object_destroy_containing_definition", "static": true }, +{ "file_offset": 2481400, "flags": 0, "name": "_hs_object_destroy_all_definition", "static": true }, +{ "file_offset": 2481428, "flags": 0, "name": "_hs_object_teleport_definition", "static": true }, +{ "file_offset": 2481460, "flags": 0, "name": "_hs_object_set_facing_definition", "static": true }, +{ "file_offset": 2481492, "flags": 0, "name": "_hs_object_set_shield_definition", "static": true }, +{ "file_offset": 2481524, "flags": 0, "name": "_hs_object_set_permutation_definition", "static": true }, +{ "file_offset": 2481560, "flags": 0, "name": "_hs_list_get_definition", "static": true }, +{ "file_offset": 2481592, "flags": 0, "name": "_hs_list_count_definition", "static": true }, +{ "file_offset": 2481624, "flags": 0, "name": "_hs_effect_new_definition", "static": true }, +{ "file_offset": 2481656, "flags": 0, "name": "_hs_effect_new_on_object_marker_definition", "static": true }, +{ "file_offset": 2481692, "flags": 0, "name": "_hs_damage_new_definition", "static": true }, +{ "file_offset": 2481724, "flags": 0, "name": "_hs_damage_object_definition", "static": true }, +{ "file_offset": 2481756, "flags": 0, "name": "_hs_objects_can_see_object_definition", "static": true }, +{ "file_offset": 2481792, "flags": 0, "name": "_hs_objects_can_see_flag_definition", "static": true }, +{ "file_offset": 2481828, "flags": 0, "name": "_hs_objects_delete_by_definition_definition", "static": true }, +{ "file_offset": 2481860, "flags": 0, "name": "_hs_sound_set_gain_definition", "static": true }, +{ "file_offset": 2481892, "flags": 0, "name": "_hs_sound_get_gain_definition", "static": true }, +{ "file_offset": 2481924, "flags": 0, "name": "_hs_script_recompile_definition", "static": true }, +{ "file_offset": 2481952, "flags": 0, "name": "_hs_script_doc_definition", "static": true }, +{ "file_offset": 2481980, "flags": 0, "name": "_hs_help_definition", "static": true }, +{ "file_offset": 2482012, "flags": 0, "name": "_hs_random_range_definition", "static": true }, +{ "file_offset": 2482044, "flags": 0, "name": "_hs_real_random_range_definition", "static": true }, +{ "file_offset": 2482076, "flags": 0, "name": "_hs_numeric_countdown_timer_set_definition", "static": true }, +{ "file_offset": 2482108, "flags": 0, "name": "_hs_numeric_countdown_timer_get_definition", "static": true }, +{ "file_offset": 2482140, "flags": 0, "name": "_hs_numeric_countdown_timer_stop_definition", "static": true }, +{ "file_offset": 2482168, "flags": 0, "name": "_hs_numeric_countdown_timer_restart_definition", "static": true }, +{ "file_offset": 2482196, "flags": 0, "name": "_hs_breakable_surfaces_enable_definition", "static": true }, +{ "file_offset": 2482228, "flags": 0, "name": "_hs_recording_play_definition", "static": true }, +{ "file_offset": 2482260, "flags": 0, "name": "_hs_recording_play_and_delete_definition", "static": true }, +{ "file_offset": 2482292, "flags": 0, "name": "_hs_recording_play_and_hover_definition", "static": true }, +{ "file_offset": 2482324, "flags": 0, "name": "_hs_recording_kill_definition", "static": true }, +{ "file_offset": 2482356, "flags": 0, "name": "_hs_recording_time_definition", "static": true }, +{ "file_offset": 2482388, "flags": 0, "name": "_hs_object_set_ranged_attack_inhibited_definition", "static": true }, +{ "file_offset": 2482420, "flags": 0, "name": "_hs_object_set_melee_attack_inhibited_definition", "static": true }, +{ "file_offset": 2482452, "flags": 0, "name": "_hs_objects_dump_memory_definition", "static": true }, +{ "file_offset": 2482480, "flags": 0, "name": "_hs_object_set_collideable_definition", "static": true }, +{ "file_offset": 2482512, "flags": 0, "name": "_hs_object_set_scale_definition", "static": true }, +{ "file_offset": 2482548, "flags": 0, "name": "_hs_objects_attach_definition", "static": true }, +{ "file_offset": 2482584, "flags": 0, "name": "_hs_objects_detach_definition", "static": true }, +{ "file_offset": 2482616, "flags": 0, "name": "_hs_garbage_collect_now_definition", "static": true }, +{ "file_offset": 2482644, "flags": 0, "name": "_hs_object_cannot_take_damage_definition", "static": true }, +{ "file_offset": 2482676, "flags": 0, "name": "_hs_object_can_take_damage_definition", "static": true }, +{ "file_offset": 2482708, "flags": 0, "name": "_hs_object_beautify_definition", "static": true }, +{ "file_offset": 2482740, "flags": 0, "name": "_hs_objects_predict_definition", "static": true }, +{ "file_offset": 2482772, "flags": 0, "name": "_hs_object_type_predict_definition", "static": true }, +{ "file_offset": 2482804, "flags": 0, "name": "_hs_object_pvs_set_object_definition", "static": true }, +{ "file_offset": 2482836, "flags": 0, "name": "_hs_object_pvs_set_camera_definition", "static": true }, +{ "file_offset": 2482868, "flags": 0, "name": "_hs_object_pvs_clear_definition", "static": true }, +{ "file_offset": 2482896, "flags": 0, "name": "_hs_object_pvs_activate_definition", "static": true }, +{ "file_offset": 2482928, "flags": 0, "name": "_hs_render_lights_definition", "static": true }, +{ "file_offset": 2482960, "flags": 0, "name": "_hs_scenery_get_animation_time_definition", "static": true }, +{ "file_offset": 2482992, "flags": 0, "name": "_hs_scenery_animation_start_definition", "static": true }, +{ "file_offset": 2483028, "flags": 0, "name": "_hs_scenery_animation_start_at_frame_definition", "static": true }, +{ "file_offset": 2483064, "flags": 0, "name": "_hs_render_effects_definition", "static": true }, +{ "file_offset": 2483096, "flags": 0, "name": "_hs_unit_can_blink_definition", "static": true }, +{ "file_offset": 2483128, "flags": 0, "name": "_hs_unit_open_definition", "static": true }, +{ "file_offset": 2483160, "flags": 0, "name": "_hs_unit_close_definition", "static": true }, +{ "file_offset": 2483192, "flags": 0, "name": "_hs_unit_kill_definition", "static": true }, +{ "file_offset": 2483224, "flags": 0, "name": "_hs_unit_kill_silent_definition", "static": true }, +{ "file_offset": 2483256, "flags": 0, "name": "_hs_unit_get_custom_animation_time_definition", "static": true }, +{ "file_offset": 2483288, "flags": 0, "name": "_hs_unit_stop_custom_animation_definition", "static": true }, +{ "file_offset": 2483320, "flags": 0, "name": "_hs_custom_animation_definition", "static": true }, +{ "file_offset": 2483356, "flags": 0, "name": "_hs_custom_animation_list_definition", "static": true }, +{ "file_offset": 2483392, "flags": 0, "name": "_hs_unit_custom_animation_at_frame_definition", "static": true }, +{ "file_offset": 2483432, "flags": 0, "name": "_hs_unit_is_playing_custom_animation_definition", "static": true }, +{ "file_offset": 2483464, "flags": 0, "name": "_hs_unit_aim_without_turning_definition", "static": true }, +{ "file_offset": 2483496, "flags": 0, "name": "_hs_unit_set_emotion_definition", "static": true }, +{ "file_offset": 2483528, "flags": 0, "name": "_hs_unit_set_enterable_by_player_definition", "static": true }, +{ "file_offset": 2483560, "flags": 0, "name": "_hs_unit_enter_vehicle_definition", "static": true }, +{ "file_offset": 2483596, "flags": 0, "name": "_hs_vehicle_test_seat_list_definition", "static": true }, +{ "file_offset": 2483632, "flags": 0, "name": "_hs_vehicle_test_seat_definition", "static": true }, +{ "file_offset": 2483668, "flags": 0, "name": "_hs_unit_set_emotion_animation_definition", "static": true }, +{ "file_offset": 2483700, "flags": 0, "name": "_hs_unit_exit_vehicle_definition", "static": true }, +{ "file_offset": 2483732, "flags": 0, "name": "_hs_unit_set_maximum_vitality_definition", "static": true }, +{ "file_offset": 2483768, "flags": 0, "name": "_hs_units_set_maximum_vitality_definition", "static": true }, +{ "file_offset": 2483804, "flags": 0, "name": "_hs_unit_set_current_vitality_definition", "static": true }, +{ "file_offset": 2483840, "flags": 0, "name": "_hs_units_set_current_vitality_definition", "static": true }, +{ "file_offset": 2483876, "flags": 0, "name": "_hs_vehicle_load_magic_definition", "static": true }, +{ "file_offset": 2483912, "flags": 0, "name": "_hs_vehicle_unload_definition", "static": true }, +{ "file_offset": 2483944, "flags": 0, "name": "_hs_magic_seat_name_definition", "static": true }, +{ "file_offset": 2483976, "flags": 0, "name": "_hs_unit_set_seat_definition", "static": true }, +{ "file_offset": 2484008, "flags": 0, "name": "_hs_magic_melee_attack_definition", "static": true }, +{ "file_offset": 2484036, "flags": 0, "name": "_hs_vehicle_riders_definition", "static": true }, +{ "file_offset": 2484068, "flags": 0, "name": "_hs_vehicle_driver_definition", "static": true }, +{ "file_offset": 2484100, "flags": 0, "name": "_hs_vehicle_gunner_definition", "static": true }, +{ "file_offset": 2484132, "flags": 0, "name": "_hs_unit_get_health_definition", "static": true }, +{ "file_offset": 2484164, "flags": 0, "name": "_hs_unit_get_shield_definition", "static": true }, +{ "file_offset": 2484196, "flags": 0, "name": "_hs_unit_get_total_grenade_count_definition", "static": true }, +{ "file_offset": 2484228, "flags": 0, "name": "_hs_unit_has_weapon_definition", "static": true }, +{ "file_offset": 2484260, "flags": 0, "name": "_hs_unit_has_weapon_readied_definition", "static": true }, +{ "file_offset": 2484292, "flags": 0, "name": "_hs_unit_doesnt_drop_items_definition", "static": true }, +{ "file_offset": 2484324, "flags": 0, "name": "_hs_unit_impervious_definition", "static": true }, +{ "file_offset": 2484356, "flags": 0, "name": "_hs_unit_suspended_definition", "static": true }, +{ "file_offset": 2484388, "flags": 0, "name": "_hs_unit_solo_player_integrated_night_vision_is_active_definition", "static": true }, +{ "file_offset": 2484416, "flags": 0, "name": "_hs_units_set_desired_flashlight_state_definition", "static": true }, +{ "file_offset": 2484448, "flags": 0, "name": "_hs_unit_set_desired_flashlight_state_definition", "static": true }, +{ "file_offset": 2484480, "flags": 0, "name": "_hs_unit_get_current_flashlight_state_definition", "static": true }, +{ "file_offset": 2484512, "flags": 0, "name": "_hs_device_set_never_appears_locked_definition", "static": true }, +{ "file_offset": 2484544, "flags": 0, "name": "_hs_device_set_power_definition", "static": true }, +{ "file_offset": 2484576, "flags": 0, "name": "_hs_device_get_power_definition", "static": true }, +{ "file_offset": 2484608, "flags": 0, "name": "_hs_device_set_position_definition", "static": true }, +{ "file_offset": 2484640, "flags": 0, "name": "_hs_device_get_position_definition", "static": true }, +{ "file_offset": 2484672, "flags": 0, "name": "_hs_device_set_position_immediate_definition", "static": true }, +{ "file_offset": 2484704, "flags": 0, "name": "_hs_device_group_get_definition", "static": true }, +{ "file_offset": 2484736, "flags": 0, "name": "_hs_device_group_set_definition", "static": true }, +{ "file_offset": 2484768, "flags": 0, "name": "_hs_device_group_set_immediate_definition", "static": true }, +{ "file_offset": 2484800, "flags": 0, "name": "_hs_device_one_sided_set_definition", "static": true }, +{ "file_offset": 2484832, "flags": 0, "name": "_hs_device_operates_automatically_set_definition", "static": true }, +{ "file_offset": 2484864, "flags": 0, "name": "_hs_device_group_change_only_once_more_set_definition", "static": true }, +{ "file_offset": 2484896, "flags": 0, "name": "_hs_breakable_surfaces_reset_definition", "static": true }, +{ "file_offset": 2484924, "flags": 0, "name": "_hs_cheat_all_powerups_definition", "static": true }, +{ "file_offset": 2484952, "flags": 0, "name": "_hs_cheat_all_weapons_definition", "static": true }, +{ "file_offset": 2484980, "flags": 0, "name": "_hs_cheat_all_vehicles_definition", "static": true }, +{ "file_offset": 2485008, "flags": 0, "name": "_hs_cheat_teleport_to_camera_definition", "static": true }, +{ "file_offset": 2485036, "flags": 0, "name": "_hs_cheat_active_camouflage_definition", "static": true }, +{ "file_offset": 2485064, "flags": 0, "name": "_hs_cheat_active_camouflage_local_player_definition", "static": true }, +{ "file_offset": 2485096, "flags": 0, "name": "_hs_cheats_load_definition", "static": true }, +{ "file_offset": 2485124, "flags": 0, "name": "_hs_ai_definition", "static": true }, +{ "file_offset": 2485156, "flags": 0, "name": "_hs_ai_dialogue_triggers_definition", "static": true }, +{ "file_offset": 2485188, "flags": 0, "name": "_hs_ai_grenades_definition", "static": true }, +{ "file_offset": 2485220, "flags": 0, "name": "_hs_ai_free_definition", "static": true }, +{ "file_offset": 2485252, "flags": 0, "name": "_hs_ai_free_units_definition", "static": true }, +{ "file_offset": 2485284, "flags": 0, "name": "_hs_ai_attach_definition", "static": true }, +{ "file_offset": 2485316, "flags": 0, "name": "_hs_ai_attach_units_definition", "static": true }, +{ "file_offset": 2485348, "flags": 0, "name": "_hs_ai_attach_free_definition", "static": true }, +{ "file_offset": 2485380, "flags": 0, "name": "_hs_ai_detach_definition", "static": true }, +{ "file_offset": 2485412, "flags": 0, "name": "_hs_ai_detach_units_definition", "static": true }, +{ "file_offset": 2485444, "flags": 0, "name": "_hs_ai_place_definition", "static": true }, +{ "file_offset": 2485476, "flags": 0, "name": "_hs_ai_kill_definition", "static": true }, +{ "file_offset": 2485508, "flags": 0, "name": "_hs_ai_kill_silent_definition", "static": true }, +{ "file_offset": 2485540, "flags": 0, "name": "_hs_ai_erase_definition", "static": true }, +{ "file_offset": 2485572, "flags": 0, "name": "_hs_ai_erase_all_definition", "static": true }, +{ "file_offset": 2485600, "flags": 0, "name": "_hs_ai_select_definition", "static": true }, +{ "file_offset": 2485632, "flags": 0, "name": "_hs_ai_deselect_definition", "static": true }, +{ "file_offset": 2485660, "flags": 0, "name": "_hs_ai_spawn_actor_definition", "static": true }, +{ "file_offset": 2485692, "flags": 0, "name": "_hs_ai_set_respawn_definition", "static": true }, +{ "file_offset": 2485724, "flags": 0, "name": "_hs_ai_set_deaf_definition", "static": true }, +{ "file_offset": 2485756, "flags": 0, "name": "_hs_ai_set_blind_definition", "static": true }, +{ "file_offset": 2485788, "flags": 0, "name": "_hs_ai_magically_see_encounter_definition", "static": true }, +{ "file_offset": 2485820, "flags": 0, "name": "_hs_ai_magically_see_players_definition", "static": true }, +{ "file_offset": 2485852, "flags": 0, "name": "_hs_ai_magically_see_unit_definition", "static": true }, +{ "file_offset": 2485884, "flags": 0, "name": "_hs_ai_magically_see_units_definition", "static": true }, +{ "file_offset": 2485916, "flags": 0, "name": "_hs_ai_timer_start_definition", "static": true }, +{ "file_offset": 2485948, "flags": 0, "name": "_hs_ai_timer_expire_definition", "static": true }, +{ "file_offset": 2485980, "flags": 0, "name": "_hs_ai_attack_definition", "static": true }, +{ "file_offset": 2486012, "flags": 0, "name": "_hs_ai_defend_definition", "static": true }, +{ "file_offset": 2486044, "flags": 0, "name": "_hs_ai_retreat_definition", "static": true }, +{ "file_offset": 2486076, "flags": 0, "name": "_hs_ai_maneuver_definition", "static": true }, +{ "file_offset": 2486108, "flags": 0, "name": "_hs_ai_maneuver_enable_definition", "static": true }, +{ "file_offset": 2486140, "flags": 0, "name": "_hs_ai_migrate_definition", "static": true }, +{ "file_offset": 2486172, "flags": 0, "name": "_hs_ai_migrate_and_speak_definition", "static": true }, +{ "file_offset": 2486208, "flags": 0, "name": "_hs_ai_migrate_by_unit_definition", "static": true }, +{ "file_offset": 2486240, "flags": 0, "name": "_hs_ai_allegiance_definition", "static": true }, +{ "file_offset": 2486272, "flags": 0, "name": "_hs_ai_allegiance_remove_definition", "static": true }, +{ "file_offset": 2486304, "flags": 0, "name": "_hs_ai_go_to_vehicle_definition", "static": true }, +{ "file_offset": 2486340, "flags": 0, "name": "_hs_ai_go_to_vehicle_override_definition", "static": true }, +{ "file_offset": 2486376, "flags": 0, "name": "_hs_ai_exit_vehicle_definition", "static": true }, +{ "file_offset": 2486408, "flags": 0, "name": "_hs_ai_braindead_definition", "static": true }, +{ "file_offset": 2486440, "flags": 0, "name": "_hs_ai_braindead_by_unit_definition", "static": true }, +{ "file_offset": 2486472, "flags": 0, "name": "_hs_ai_disregard_definition", "static": true }, +{ "file_offset": 2486504, "flags": 0, "name": "_hs_ai_prefer_target_definition", "static": true }, +{ "file_offset": 2486536, "flags": 0, "name": "_hs_ai_teleport_to_starting_location_definition", "static": true }, +{ "file_offset": 2486568, "flags": 0, "name": "_hs_ai_teleport_to_starting_location_if_unsupported_definition", "static": true }, +{ "file_offset": 2486600, "flags": 0, "name": "_hs_ai_renew_definition", "static": true }, +{ "file_offset": 2486632, "flags": 0, "name": "_hs_ai_try_to_fight_nothing_definition", "static": true }, +{ "file_offset": 2486664, "flags": 0, "name": "_hs_ai_try_to_fight_definition", "static": true }, +{ "file_offset": 2486696, "flags": 0, "name": "_hs_ai_try_to_fight_player_definition", "static": true }, +{ "file_offset": 2486728, "flags": 0, "name": "_hs_ai_command_list_definition", "static": true }, +{ "file_offset": 2486760, "flags": 0, "name": "_hs_ai_command_list_by_unit_definition", "static": true }, +{ "file_offset": 2486792, "flags": 0, "name": "_hs_ai_command_list_advance_definition", "static": true }, +{ "file_offset": 2486824, "flags": 0, "name": "_hs_ai_command_list_advance_by_unit_definition", "static": true }, +{ "file_offset": 2486856, "flags": 0, "name": "_hs_ai_force_active_definition", "static": true }, +{ "file_offset": 2486888, "flags": 0, "name": "_hs_ai_force_active_by_unit_definition", "static": true }, +{ "file_offset": 2486920, "flags": 0, "name": "_hs_ai_set_return_state_definition", "static": true }, +{ "file_offset": 2486952, "flags": 0, "name": "_hs_ai_set_current_state_definition", "static": true }, +{ "file_offset": 2486984, "flags": 0, "name": "_hs_ai_playfight_definition", "static": true }, +{ "file_offset": 2487016, "flags": 0, "name": "_hs_ai_reconnect_definition", "static": true }, +{ "file_offset": 2487044, "flags": 0, "name": "_hs_ai_vehicle_encounter_definition", "static": true }, +{ "file_offset": 2487076, "flags": 0, "name": "_hs_ai_vehicle_enterable_distance_definition", "static": true }, +{ "file_offset": 2487108, "flags": 0, "name": "_hs_ai_vehicle_enterable_team_definition", "static": true }, +{ "file_offset": 2487140, "flags": 0, "name": "_hs_ai_vehicle_enterable_actor_type_definition", "static": true }, +{ "file_offset": 2487172, "flags": 0, "name": "_hs_ai_vehicle_enterable_actors_definition", "static": true }, +{ "file_offset": 2487204, "flags": 0, "name": "_hs_ai_vehicle_enterable_disable_definition", "static": true }, +{ "file_offset": 2487236, "flags": 0, "name": "_hs_ai_look_at_object_definition", "static": true }, +{ "file_offset": 2487268, "flags": 0, "name": "_hs_ai_stop_looking_definition", "static": true }, +{ "file_offset": 2487300, "flags": 0, "name": "_hs_ai_automatic_migration_target_definition", "static": true }, +{ "file_offset": 2487332, "flags": 0, "name": "_hs_ai_follow_target_disable_definition", "static": true }, +{ "file_offset": 2487364, "flags": 0, "name": "_hs_ai_follow_target_players_definition", "static": true }, +{ "file_offset": 2487396, "flags": 0, "name": "_hs_ai_follow_target_unit_definition", "static": true }, +{ "file_offset": 2487428, "flags": 0, "name": "_hs_ai_follow_target_ai_definition", "static": true }, +{ "file_offset": 2487460, "flags": 0, "name": "_hs_ai_follow_distance_definition", "static": true }, +{ "file_offset": 2487492, "flags": 0, "name": "_hs_ai_conversation_stop_definition", "static": true }, +{ "file_offset": 2487524, "flags": 0, "name": "_hs_ai_conversation_advance_definition", "static": true }, +{ "file_offset": 2487556, "flags": 0, "name": "_hs_ai_link_activation_definition", "static": true }, +{ "file_offset": 2487588, "flags": 0, "name": "_hs_ai_berserk_definition", "static": true }, +{ "file_offset": 2487620, "flags": 0, "name": "_hs_ai_set_team_definition", "static": true }, +{ "file_offset": 2487652, "flags": 0, "name": "_hs_ai_allow_charge_definition", "static": true }, +{ "file_offset": 2487684, "flags": 0, "name": "_hs_ai_allow_dormant_definition", "static": true }, +{ "file_offset": 2487716, "flags": 0, "name": "_hs_ai_is_attacking_definition", "static": true }, +{ "file_offset": 2487748, "flags": 0, "name": "_hs_ai_command_list_status_definition", "static": true }, +{ "file_offset": 2487780, "flags": 0, "name": "_hs_ai_going_to_vehicle_definition", "static": true }, +{ "file_offset": 2487812, "flags": 0, "name": "_hs_ai_living_count_definition", "static": true }, +{ "file_offset": 2487844, "flags": 0, "name": "_hs_ai_living_fraction_definition", "static": true }, +{ "file_offset": 2487876, "flags": 0, "name": "_hs_ai_strength_definition", "static": true }, +{ "file_offset": 2487908, "flags": 0, "name": "_hs_ai_swarm_count_definition", "static": true }, +{ "file_offset": 2487940, "flags": 0, "name": "_hs_ai_nonswarm_count_definition", "static": true }, +{ "file_offset": 2487972, "flags": 0, "name": "_hs_ai_actors_definition", "static": true }, +{ "file_offset": 2488004, "flags": 0, "name": "_hs_ai_status_definition", "static": true }, +{ "file_offset": 2488036, "flags": 0, "name": "_hs_ai_conversation_definition", "static": true }, +{ "file_offset": 2488068, "flags": 0, "name": "_hs_ai_conversation_line_definition", "static": true }, +{ "file_offset": 2488100, "flags": 0, "name": "_hs_ai_conversation_status_definition", "static": true }, +{ "file_offset": 2488132, "flags": 0, "name": "_hs_ai_allegiance_broken_definition", "static": true }, +{ "file_offset": 2488164, "flags": 0, "name": "_hs_camera_control_definition", "static": true }, +{ "file_offset": 2488196, "flags": 0, "name": "_hs_camera_set_definition", "static": true }, +{ "file_offset": 2488228, "flags": 0, "name": "_hs_camera_set_relative_definition", "static": true }, +{ "file_offset": 2488264, "flags": 0, "name": "_hs_camera_set_animation_definition", "static": true }, +{ "file_offset": 2488296, "flags": 0, "name": "_hs_camera_set_first_person_definition", "static": true }, +{ "file_offset": 2488328, "flags": 0, "name": "_hs_camera_set_dead_definition", "static": true }, +{ "file_offset": 2488360, "flags": 0, "name": "_hs_camera_time_definition", "static": true }, +{ "file_offset": 2488388, "flags": 0, "name": "_hs_debug_camera_save_definition", "static": true }, +{ "file_offset": 2488416, "flags": 0, "name": "_hs_debug_camera_load_definition", "static": true }, +{ "file_offset": 2488444, "flags": 0, "name": "_hs_game_speed_definition", "static": true }, +{ "file_offset": 2488476, "flags": 0, "name": "_hs_game_variant_definition", "static": true }, +{ "file_offset": 2488508, "flags": 0, "name": "_hs_game_time_definition", "static": true }, +{ "file_offset": 2488536, "flags": 0, "name": "_hs_game_difficulty_get_definition", "static": true }, +{ "file_offset": 2488564, "flags": 0, "name": "_hs_game_difficulty_get_real_definition", "static": true }, +{ "file_offset": 2488592, "flags": 0, "name": "_hs_players_unzoom_all_definition", "static": true }, +{ "file_offset": 2488620, "flags": 0, "name": "_hs_player_enable_input_definition", "static": true }, +{ "file_offset": 2488652, "flags": 0, "name": "_hs_player_camera_control_definition", "static": true }, +{ "file_offset": 2488684, "flags": 0, "name": "_hs_player_action_test_reset_definition", "static": true }, +{ "file_offset": 2488712, "flags": 0, "name": "_hs_player_action_test_jump_definition", "static": true }, +{ "file_offset": 2488740, "flags": 0, "name": "_hs_player_action_test_primary_trigger_definition", "static": true }, +{ "file_offset": 2488768, "flags": 0, "name": "_hs_player_action_test_grenade_trigger_definition", "static": true }, +{ "file_offset": 2488796, "flags": 0, "name": "_hs_player_action_test_zoom_definition", "static": true }, +{ "file_offset": 2488824, "flags": 0, "name": "_hs_player_action_test_action_definition", "static": true }, +{ "file_offset": 2488852, "flags": 0, "name": "_hs_player_action_test_accept_definition", "static": true }, +{ "file_offset": 2488880, "flags": 0, "name": "_hs_player_action_test_back_definition", "static": true }, +{ "file_offset": 2488908, "flags": 0, "name": "_hs_player_action_test_look_relative_up_definition", "static": true }, +{ "file_offset": 2488936, "flags": 0, "name": "_hs_player_action_test_look_relative_down_definition", "static": true }, +{ "file_offset": 2488964, "flags": 0, "name": "_hs_player_action_test_look_relative_left_definition", "static": true }, +{ "file_offset": 2488992, "flags": 0, "name": "_hs_player_action_test_look_relative_right_definition", "static": true }, +{ "file_offset": 2489020, "flags": 0, "name": "_hs_player_action_test_look_relative_all_directions_definition", "static": true }, +{ "file_offset": 2489048, "flags": 0, "name": "_hs_player_action_test_move_relative_all_directions_definition", "static": true }, +{ "file_offset": 2489076, "flags": 0, "name": "_hs_player_add_equipment_definition", "static": true }, +{ "file_offset": 2489112, "flags": 0, "name": "_hs_debug_teleport_player_definition", "static": true }, +{ "file_offset": 2489144, "flags": 0, "name": "_hs_map_reset_definition", "static": true }, +{ "file_offset": 2489172, "flags": 0, "name": "_hs_map_name_definition", "static": true }, +{ "file_offset": 2489204, "flags": 0, "name": "_hs_multiplayer_map_name_definition", "static": true }, +{ "file_offset": 2489236, "flags": 0, "name": "_hs_game_difficulty_set_definition", "static": true }, +{ "file_offset": 2489268, "flags": 0, "name": "_hs_crash_definition", "static": true }, +{ "file_offset": 2489300, "flags": 0, "name": "_hs_switch_bsp_definition", "static": true }, +{ "file_offset": 2489332, "flags": 0, "name": "_hs_structure_bsp_index_definition", "static": true }, +{ "file_offset": 2489360, "flags": 0, "name": "_hs_version_definition", "static": true }, +{ "file_offset": 2489388, "flags": 0, "name": "_hs_playback_definition", "static": true }, +{ "file_offset": 2489416, "flags": 0, "name": "_hs_texture_cache_flush_definition", "static": true }, +{ "file_offset": 2489444, "flags": 0, "name": "_hs_sound_cache_flush_definition", "static": true }, +{ "file_offset": 2489472, "flags": 0, "name": "_hs_debug_memory_definition", "static": true }, +{ "file_offset": 2489500, "flags": 0, "name": "_hs_debug_memory_by_file_definition", "static": true }, +{ "file_offset": 2489528, "flags": 0, "name": "_hs_debug_memory_for_file_definition", "static": true }, +{ "file_offset": 2489560, "flags": 0, "name": "_hs_debug_tags_definition", "static": true }, +{ "file_offset": 2489588, "flags": 0, "name": "_hs_profile_reset_definition", "static": true }, +{ "file_offset": 2489616, "flags": 0, "name": "_hs_profile_dump_definition", "static": true }, +{ "file_offset": 2489648, "flags": 0, "name": "_hs_profile_activate_definition", "static": true }, +{ "file_offset": 2489680, "flags": 0, "name": "_hs_profile_deactivate_definition", "static": true }, +{ "file_offset": 2489712, "flags": 0, "name": "_hs_profile_graph_toggle_definition", "static": true }, +{ "file_offset": 2489744, "flags": 0, "name": "_hs_debug_pvs_definition", "static": true }, +{ "file_offset": 2489776, "flags": 0, "name": "_hs_radiosity_start_definition", "static": true }, +{ "file_offset": 2489804, "flags": 0, "name": "_hs_radiosity_save_definition", "static": true }, +{ "file_offset": 2489832, "flags": 0, "name": "_hs_radiosity_debug_point_definition", "static": true }, +{ "file_offset": 2489860, "flags": 0, "name": "_hs_ai_lines_definition", "static": true }, +{ "file_offset": 2489888, "flags": 0, "name": "_hs_ai_debug_sound_point_set_definition", "static": true }, +{ "file_offset": 2489916, "flags": 0, "name": "_hs_ai_debug_vocalize_definition", "static": true }, +{ "file_offset": 2489948, "flags": 0, "name": "_hs_ai_debug_teleport_to_definition", "static": true }, +{ "file_offset": 2489980, "flags": 0, "name": "_hs_ai_debug_speak_definition", "static": true }, +{ "file_offset": 2490012, "flags": 0, "name": "_hs_ai_debug_speak_list_definition", "static": true }, +{ "file_offset": 2490044, "flags": 0, "name": "_hs_fade_in_definition", "static": true }, +{ "file_offset": 2490080, "flags": 0, "name": "_hs_fade_out_definition", "static": true }, +{ "file_offset": 2490116, "flags": 0, "name": "_hs_cinematic_start_definition", "static": true }, +{ "file_offset": 2490144, "flags": 0, "name": "_hs_cinematic_stop_definition", "static": true }, +{ "file_offset": 2490172, "flags": 0, "name": "_hs_cinematic_skip_start_internal_definition", "static": true }, +{ "file_offset": 2490200, "flags": 0, "name": "_hs_cinematic_skip_stop_internal_definition", "static": true }, +{ "file_offset": 2490228, "flags": 0, "name": "_hs_cinematic_show_letterbox_definition", "static": true }, +{ "file_offset": 2490260, "flags": 0, "name": "_hs_cinematic_set_title_definition", "static": true }, +{ "file_offset": 2490292, "flags": 0, "name": "_hs_cinematic_set_title_delayed_definition", "static": true }, +{ "file_offset": 2490324, "flags": 0, "name": "_hs_cinematic_suppress_bsp_object_creation_definition", "static": true }, +{ "file_offset": 2490356, "flags": 0, "name": "_hs_attract_mode_start_definition", "static": true }, +{ "file_offset": 2490384, "flags": 0, "name": "_hs_game_won_definition", "static": true }, +{ "file_offset": 2490412, "flags": 0, "name": "_hs_game_lost_definition", "static": true }, +{ "file_offset": 2490440, "flags": 0, "name": "_hs_game_safe_to_save_definition", "static": true }, +{ "file_offset": 2490468, "flags": 0, "name": "_hs_game_all_quiet_definition", "static": true }, +{ "file_offset": 2490496, "flags": 0, "name": "_hs_game_safe_to_speak_definition", "static": true }, +{ "file_offset": 2490524, "flags": 0, "name": "_hs_game_is_cooperative_definition", "static": true }, +{ "file_offset": 2490552, "flags": 0, "name": "_hs_game_save_definition", "static": true }, +{ "file_offset": 2490580, "flags": 0, "name": "_hs_game_save_cancel_definition", "static": true }, +{ "file_offset": 2490608, "flags": 0, "name": "_hs_game_save_no_timeout_definition", "static": true }, +{ "file_offset": 2490636, "flags": 0, "name": "_hs_game_save_totally_unsafe_definition", "static": true }, +{ "file_offset": 2490664, "flags": 0, "name": "_hs_game_saving_definition", "static": true }, +{ "file_offset": 2490692, "flags": 0, "name": "_hs_game_revert_definition", "static": true }, +{ "file_offset": 2490720, "flags": 0, "name": "_hs_core_load_definition", "static": true }, +{ "file_offset": 2490748, "flags": 0, "name": "_hs_core_load_at_startup_definition", "static": true }, +{ "file_offset": 2490776, "flags": 0, "name": "_hs_core_load_name_definition", "static": true }, +{ "file_offset": 2490808, "flags": 0, "name": "_hs_core_load_name_at_startup_definition", "static": true }, +{ "file_offset": 2490840, "flags": 0, "name": "_hs_core_save_definition", "static": true }, +{ "file_offset": 2490868, "flags": 0, "name": "_hs_core_save_name_definition", "static": true }, +{ "file_offset": 2490900, "flags": 0, "name": "_hs_game_skip_ticks_definition", "static": true }, +{ "file_offset": 2490932, "flags": 0, "name": "_hs_game_reverted_definition", "static": true }, +{ "file_offset": 2490960, "flags": 0, "name": "_hs_sound_impulse_start_definition", "static": true }, +{ "file_offset": 2490996, "flags": 0, "name": "_hs_sound_impulse_time_definition", "static": true }, +{ "file_offset": 2491028, "flags": 0, "name": "_hs_sound_impulse_stop_definition", "static": true }, +{ "file_offset": 2491060, "flags": 0, "name": "_hs_sound_looping_predict_definition", "static": true }, +{ "file_offset": 2491092, "flags": 0, "name": "_hs_sound_looping_start_definition", "static": true }, +{ "file_offset": 2491128, "flags": 0, "name": "_hs_sound_looping_stop_definition", "static": true }, +{ "file_offset": 2491160, "flags": 0, "name": "_hs_sound_looping_set_scale_definition", "static": true }, +{ "file_offset": 2491192, "flags": 0, "name": "_hs_sound_looping_set_alternate_definition", "static": true }, +{ "file_offset": 2491224, "flags": 0, "name": "_hs_debug_sounds_enable_definition", "static": true }, +{ "file_offset": 2491256, "flags": 0, "name": "_hs_debug_sounds_distances_definition", "static": true }, +{ "file_offset": 2491292, "flags": 0, "name": "_hs_debug_sounds_wet_definition", "static": true }, +{ "file_offset": 2491324, "flags": 0, "name": "_hs_sound_class_set_gain_definition", "static": true }, +{ "file_offset": 2491360, "flags": 0, "name": "_hs_sound_enable_definition", "static": true }, +{ "file_offset": 2491392, "flags": 0, "name": "_hs_vehicle_hover_definition", "static": true }, +{ "file_offset": 2491424, "flags": 0, "name": "_hs_show_hud_definition", "static": true }, +{ "file_offset": 2491456, "flags": 0, "name": "_hs_show_hud_help_text_definition", "static": true }, +{ "file_offset": 2491488, "flags": 0, "name": "_hs_enable_hud_help_flash_definition", "static": true }, +{ "file_offset": 2491520, "flags": 0, "name": "_hs_hud_help_flash_restart_definition", "static": true }, +{ "file_offset": 2491548, "flags": 0, "name": "_hs_activate_nav_point_flag_definition", "static": true }, +{ "file_offset": 2491584, "flags": 0, "name": "_hs_activate_nav_point_object_definition", "static": true }, +{ "file_offset": 2491620, "flags": 0, "name": "_hs_activate_team_nav_point_flag_definition", "static": true }, +{ "file_offset": 2491656, "flags": 0, "name": "_hs_activate_team_nav_point_object_definition", "static": true }, +{ "file_offset": 2491692, "flags": 0, "name": "_hs_deactivate_nav_point_flag_definition", "static": true }, +{ "file_offset": 2491724, "flags": 0, "name": "_hs_deactivate_nav_point_object_definition", "static": true }, +{ "file_offset": 2491756, "flags": 0, "name": "_hs_deactivate_team_nav_point_flag_definition", "static": true }, +{ "file_offset": 2491788, "flags": 0, "name": "_hs_deactivate_team_nav_point_object_definition", "static": true }, +{ "file_offset": 2491820, "flags": 0, "name": "_hs_cls_definition", "static": true }, +{ "file_offset": 2491848, "flags": 0, "name": "_hs_error_overflow_suppression_definition", "static": true }, +{ "file_offset": 2491880, "flags": 0, "name": "_hs_structure_lens_flares_place_definition", "static": true }, +{ "file_offset": 2491908, "flags": 0, "name": "_hs_player_effect_set_max_translation_definition", "static": true }, +{ "file_offset": 2491944, "flags": 0, "name": "_hs_player_effect_set_max_rotation_definition", "static": true }, +{ "file_offset": 2491980, "flags": 0, "name": "_hs_player_effect_set_max_rumble_definition", "static": true }, +{ "file_offset": 2492012, "flags": 0, "name": "_hs_player_effect_start_definition", "static": true }, +{ "file_offset": 2492044, "flags": 0, "name": "_hs_player_effect_stop_definition", "static": true }, +{ "file_offset": 2492076, "flags": 0, "name": "_hs_hud_show_health_definition", "static": true }, +{ "file_offset": 2492108, "flags": 0, "name": "_hs_hud_blink_health_definition", "static": true }, +{ "file_offset": 2492140, "flags": 0, "name": "_hs_hud_show_shield_definition", "static": true }, +{ "file_offset": 2492172, "flags": 0, "name": "_hs_hud_blink_shield_definition", "static": true }, +{ "file_offset": 2492204, "flags": 0, "name": "_hs_hud_show_motion_sensor_definition", "static": true }, +{ "file_offset": 2492236, "flags": 0, "name": "_hs_hud_blink_motion_sensor_definition", "static": true }, +{ "file_offset": 2492268, "flags": 0, "name": "_hs_hud_show_crosshair_definition", "static": true }, +{ "file_offset": 2492300, "flags": 0, "name": "_hs_hud_clear_messages_definition", "static": true }, +{ "file_offset": 2492328, "flags": 0, "name": "_hs_hud_set_help_text_definition", "static": true }, +{ "file_offset": 2492360, "flags": 0, "name": "_hs_hud_set_objective_text_definition", "static": true }, +{ "file_offset": 2492392, "flags": 0, "name": "_hs_hud_set_timer_time_definition", "static": true }, +{ "file_offset": 2492424, "flags": 0, "name": "_hs_hud_set_timer_warning_time_definition", "static": true }, +{ "file_offset": 2492456, "flags": 0, "name": "_hs_hud_set_timer_position_definition", "static": true }, +{ "file_offset": 2492492, "flags": 0, "name": "_hs_show_hud_timer_definition", "static": true }, +{ "file_offset": 2492524, "flags": 0, "name": "_hs_pause_hud_timer_definition", "static": true }, +{ "file_offset": 2492556, "flags": 0, "name": "_hs_hud_get_timer_ticks_definition", "static": true }, +{ "file_offset": 2492584, "flags": 0, "name": "_hs_time_code_show_definition", "static": true }, +{ "file_offset": 2492616, "flags": 0, "name": "_hs_time_code_start_definition", "static": true }, +{ "file_offset": 2492648, "flags": 0, "name": "_hs_time_code_reset_definition", "static": true }, +{ "file_offset": 2492676, "flags": 0, "name": "_hs_rasterizer_decals_flush_definition", "static": true }, +{ "file_offset": 2492704, "flags": 0, "name": "_hs_rasterizer_fps_accumulate_definition", "static": true }, +{ "file_offset": 2492732, "flags": 0, "name": "_hs_rasterizer_model_ambient_reflection_tint_definition", "static": true }, +{ "file_offset": 2492768, "flags": 0, "name": "_hs_rasterizer_lights_reset_for_new_map_definition", "static": true }, +{ "file_offset": 2492796, "flags": 0, "name": "_hs_script_screen_effect_set_value_definition", "static": true }, +{ "file_offset": 2492828, "flags": 0, "name": "_hs_cinematic_screen_effect_start_definition", "static": true }, +{ "file_offset": 2492860, "flags": 0, "name": "_hs_cinematic_screen_effect_set_convolution_definition", "static": true }, +{ "file_offset": 2492900, "flags": 0, "name": "_hs_cinematic_screen_effect_set_filter_definition", "static": true }, +{ "file_offset": 2492940, "flags": 0, "name": "_hs_cinematic_screen_effect_set_filter_desaturation_tint_definition", "static": true }, +{ "file_offset": 2492976, "flags": 0, "name": "_hs_cinematic_screen_effect_set_video_definition", "static": true }, +{ "file_offset": 2493008, "flags": 0, "name": "_hs_cinematic_screen_effect_stop_definition", "static": true }, +{ "file_offset": 2493036, "flags": 0, "name": "_hs_cinematic_set_near_clip_distance_definition", "static": true }, +{ "file_offset": 2493068, "flags": 0, "name": "_hs_enumerate_memory_units_definition", "static": true }, +{ "file_offset": 2493096, "flags": 0, "name": "_hs_delete_save_game_files_definition", "static": true }, +{ "file_offset": 2493124, "flags": 0, "name": "_hs_fast_setup_network_server_definition", "static": true }, +{ "file_offset": 2493152, "flags": 0, "name": "_hs_profile_unlock_solo_levels_definition", "static": true }, +{ "file_offset": 2493180, "flags": 0, "name": "_hs_player0_look_invert_pitch_definition", "static": true }, +{ "file_offset": 2493212, "flags": 0, "name": "_hs_player0_look_pitch_is_inverted_definition", "static": true }, +{ "file_offset": 2493240, "flags": 0, "name": "_hs_player0_joystick_set_is_normal_definition", "static": true }, +{ "file_offset": 2493268, "flags": 0, "name": "_hs_ui_widget_show_path_definition", "static": true }, +{ "file_offset": 2493300, "flags": 0, "name": "_hs_display_scenario_help_definition", "static": true }, +{ "file_offset": 2493332, "flags": 0, "name": "_hs_network_game_start_now_definition", "static": true }, +{ "file_offset": 2493360, "flags": 0, "name": "_hs_xbox_set_machine_name_definition", "static": true }, { "file_offset": 2493392, "flags": 0, "name": "_hs_function_table_count" }, { "file_offset": 2493396, "flags": 0, "name": "_hs_enum_table" }, { "file_offset": 2493436, "flags": 0, "name": "??_C@_07CEEMMIOB@YAHSFFZ?$AA@" }, @@ -18154,7 +18155,10 @@ { "file_offset": 2600740, "flags": 0, "name": "??_C@_0BL@CJPMPDBB@random_direction_geosphere?$AA@" }, { "file_offset": 2600768, "flags": 0, "name": "??_C@_0EC@LPLKDAPN@index?$DO?$DN0?5?$CG?$CG?5index?$DMrandom_math_gl@" }, { "file_offset": 2600836, "flags": 0, "name": "??_C@_0CL@KJMLMACI@random_math_globals?4random_direc@" }, -{ "file_offset": 2600880, "flags": 0, "name": "_real_math_constants", "static": true }, +{ "file_offset": 2600880, "flags": 0, "name": "_private_identity4x3", "static": true }, +{ "file_offset": 2600932, "flags": 0, "name": "_private_negative_identity4x3", "static": true }, +{ "file_offset": 2600984, "flags": 0, "name": "_private_identity_quaternion", "static": true }, +{ "file_offset": 2601000, "flags": 0, "name": "_private_null_rectangle", "static": true }, { "file_offset": 2601024, "flags": 0, "name": "_global_projection3d_mappings" }, { "file_offset": 2601048, "flags": 0, "name": "??_C@_02HNLLPFKA@up?$AA@" }, { "file_offset": 2601052, "flags": 0, "name": "??_C@_07CJMBKHEI@forward?$AA@" }, @@ -19558,7 +19562,7 @@ { "file_offset": 2667140, "flags": 0, "name": "??_C@_06KPBBCEKF@plane?$CK?$AA@" }, { "file_offset": 2667148, "flags": 0, "name": "??_C@_0L@BABJHHJN@bsp3d?5node?$AA@" }, { "file_offset": 2667160, "flags": 0, "name": "??_C@_0N@DDFCBKPA@bsp3d?5nodes?$CK?$AA@" }, -{ "file_offset": 2667176, "flags": 0, "name": "_collision_debug_cube_vertices" }, +{ "file_offset": 2667176, "flags": 0, "name": "_collision_debug_cube_vertices", "static": true }, { "file_offset": 2667272, "flags": 0, "name": "??_C@_09PCOGIILP@count?$DM?$DN14?$AA@" }, { "file_offset": 2667284, "flags": 0, "name": "??_C@_0DB@EBGLDBDO@plane?5?$CD?$CFd?$CFs?$HMnsurface?5?$CD?$CFd?$CFs?$CFs?$CFs?$CFs@" }, { "file_offset": 2667336, "flags": 0, "name": "__real@42652ee0" }, @@ -22315,7 +22319,7 @@ { "file_offset": 2845372, "flags": 0, "name": "___xt_a" }, { "file_offset": 2845376, "flags": 0, "name": "___xt_z" }, { "file_offset": 2845392, "flags": 0, "name": "_global_actor_mode_names" }, -{ "file_offset": 2845408, "flags": 0, "name": "_last_refresh_overflow_warning_time" }, +{ "file_offset": 2845408, "flags": 0, "name": "_last_refresh_overflow_warning_time", "static": true }, { "file_offset": 2845412, "flags": 0, "name": "_actor_type_carrier" }, { "file_offset": 2845444, "flags": 0, "name": "_actor_type_crew" }, { "file_offset": 2845476, "flags": 0, "name": "_actor_type_elite" }, @@ -22437,7 +22441,7 @@ { "file_offset": 3001184, "flags": 0, "name": "_data_002dcb60" }, { "file_offset": 3001248, "flags": 0, "name": "_director_camera_mode_names" }, { "file_offset": 3001272, "flags": 0, "name": "_variables" }, -{ "file_offset": 3001384, "flags": 0, "name": "_editor_camera_speed" }, +{ "file_offset": 3001384, "flags": 0, "name": "_editor_camera_speed", "static": true }, { "file_offset": 3001392, "flags": 0, "name": "_editor_custom_render" }, { "file_offset": 3001436, "flags": 0, "name": "_following_camera_zoom_levels" }, { "file_offset": 3001452, "flags": 0, "name": "_observer_parameter_real_counts", "static": true }, @@ -22478,8 +22482,8 @@ { "file_offset": 3001608, "flags": 0, "name": "_global_real_rgb_violet" }, { "file_offset": 3001612, "flags": 0, "name": "_debug_memory_globals" }, { "file_offset": 3001644, "flags": 0, "name": "_data_002dcd2c" }, -{ "file_offset": 3001648, "flags": 0, "name": "_header_strings", "static": true }, -{ "file_offset": 3001656, "flags": 0, "name": "_format_strings", "static": true }, +{ "file_offset": 3001648, "flags": 0, "name": "_header_strings" }, +{ "file_offset": 3001656, "flags": 0, "name": "_format_strings" }, { "file_offset": 3001664, "flags": 0, "name": "_stack_walk_globals" }, { "file_offset": 3001688, "flags": 0, "name": "_recorded_animation_event_stream_data" }, { "file_offset": 3001824, "flags": 0, "name": "_recorded_animation_block" }, @@ -22514,7 +22518,7 @@ { "file_offset": 3008521, "flags": 0, "name": "_player_magnetism_flag" }, { "file_offset": 3008522, "flags": 0, "name": "_controls_swapped" }, { "file_offset": 3008524, "flags": 0, "name": "_player_look_zoomed_scale" }, -{ "file_offset": 3010056, "flags": 0, "name": "_players_static_data" }, +{ "file_offset": 3010056, "flags": 0, "name": "_players_static_data", "static": true }, { "file_offset": 3013152, "flags": 0, "name": "_hs_type_names" }, { "file_offset": 3013348, "flags": 0, "name": "_hs_script_type_names" }, { "file_offset": 3013368, "flags": 0, "name": "__hs_type_string_default" }, @@ -22773,8 +22777,8 @@ { "file_offset": 3233104, "flags": 0, "name": "_dialogue_vocalization_type_name" }, { "file_offset": 3234776, "flags": 0, "name": "_global_speech_priority_names" }, { "file_offset": 3234824, "flags": 0, "name": "_magic_base_animation_seat_index" }, -{ "file_offset": 3234832, "flags": 0, "name": "_unit_update_section" }, -{ "file_offset": 3236360, "flags": 0, "name": "?last_time@?HC@??unit_update@@9@9" }, +{ "file_offset": 3234832, "flags": 0, "name": "_unit_update_section", "static": true }, +{ "file_offset": 3236360, "flags": 0, "name": "?last_time@?HC@??unit_update@@9@9", "static": true }, { "file_offset": 3236364, "flags": 0, "name": "_base_seat_labels" }, { "file_offset": 3236392, "flags": 0, "name": "_vehicle_update_section", "static": true }, { "file_offset": 3237920, "flags": 0, "name": "_data_00316820" }, @@ -22783,7 +22787,7 @@ { "file_offset": 3237952, "flags": 0, "name": "_before_save_procs" }, { "file_offset": 3237956, "flags": 0, "name": "_before_load_procs" }, { "file_offset": 3237960, "flags": 0, "name": "_after_load_procs" }, -{ "file_offset": 3238016, "flags": 0, "name": "_player_profile_primary_colors" }, +{ "file_offset": 3238016, "flags": 0, "name": "_profile_color_table", "static": true }, { "file_offset": 3238088, "flags": 0, "name": "_playlist_profile_default_data" }, { "file_offset": 3238196, "flags": 0, "name": "_memory_unit_root_path", "static": true }, { "file_offset": 3238200, "flags": 0, "name": "_memory_unit_mapfile_path", "static": true }, @@ -22940,7 +22944,7 @@ { "file_offset": 3264048, "flags": 0, "name": "_transport_initialized" }, { "file_offset": 3264049, "flags": 0, "name": "_global_client_active" }, { "file_offset": 3264052, "flags": 0, "name": "_global_key_depth" }, -{ "file_offset": 3264056, "flags": 0, "name": "_transport_endpoint_globals" }, +{ "file_offset": 3264056, "flags": 0, "name": "_transport_endpoint_globals", "static": true }, { "file_offset": 3264584, "flags": 0, "name": "_director_globals" }, { "file_offset": 3265584, "flags": 0, "name": "_director_camera_switch_fast" }, { "file_offset": 3265585, "flags": 0, "name": "_hyper_key_down", "static": true }, @@ -22949,7 +22953,7 @@ { "file_offset": 3268396, "flags": 0, "name": "_bss_0031df2c" }, { "file_offset": 3268404, "flags": 0, "name": "_find_all_fucked_up_shit" }, { "file_offset": 3268408, "flags": 0, "name": "_fucked_up_shit_count" }, -{ "file_offset": 3268416, "flags": 0, "name": "_profile_globals" }, +{ "file_offset": 3268416, "flags": 0, "name": "_profile_globals", "static": true }, { "file_offset": 4398224, "flags": 0, "name": "_profile_timebase_ticks" }, { "file_offset": 4398225, "flags": 0, "name": "_profile_global_enable" }, { "file_offset": 4398226, "flags": 0, "name": "_profile_dump_frames" }, @@ -23007,7 +23011,7 @@ { "file_offset": 4451936, "flags": 0, "name": "_update_server_globals", "static": true }, { "file_offset": 4468592, "flags": 0, "name": "_update_client_globals", "static": true }, { "file_offset": 4535300, "flags": 0, "name": "_rumble_globals", "static": true }, -{ "file_offset": 4535304, "flags": 0, "name": "_machine_to_player_table" }, +{ "file_offset": 4535304, "flags": 0, "name": "_machine_to_player_table", "static": true }, { "file_offset": 4535368, "flags": 0, "name": "_players_lost_map_started", "static": true }, { "file_offset": 4535372, "flags": 0, "name": "_over_shield_screen_flash_fade_function", "static": true }, { "file_offset": 4535376, "flags": 0, "name": "_over_shield_screen_flash_alpha", "static": true }, @@ -23032,7 +23036,7 @@ { "file_offset": 4537008, "flags": 0, "name": "_hud_scripted_globals" }, { "file_offset": 4537012, "flags": 0, "name": "?theta@?L@??hud_draw_multitexture_overlay@@9@9", "static": true }, { "file_offset": 4537016, "flags": 0, "name": "_hud_messaging_globals", "static": true }, -{ "file_offset": 4537020, "flags": 0, "name": "_nav_point_data" }, +{ "file_offset": 4537020, "flags": 0, "name": "_nav_point_data", "static": true }, { "file_offset": 4537024, "flags": 0, "name": "_unit_hud_globals", "static": true }, { "file_offset": 4537028, "flags": 0, "name": "_weapon_hud_globals", "static": true }, { "file_offset": 4537032, "flags": 0, "name": "_next_vertex_index" }, @@ -23046,6 +23050,7 @@ { "file_offset": 4537548, "flags": 0, "name": "_demos_available", "static": true }, { "file_offset": 4537552, "flags": 0, "name": "_bss_00453cd0" }, { "file_offset": 4537600, "flags": 0, "name": "_player_ui_globals" }, +{ "file_offset": 4538160, "flags": 0, "name": "_player1_profile_path", "static": true }, { "file_offset": 4538416, "flags": 0, "name": "_progress_bar_globals", "static": true }, { "file_offset": 4538888, "flags": 0, "name": "_progress_bar_mode" }, { "file_offset": 4538908, "flags": 0, "name": "_last_t" }, @@ -23099,9 +23104,9 @@ { "file_offset": 4549876, "flags": 0, "name": "_network_game_server_memory_do_not_use_directly_in_use" }, { "file_offset": 4549880, "flags": 0, "name": "_network_game_server_next_team_index", "static": true }, { "file_offset": 4549888, "flags": 0, "name": "_telnet_console_globals" }, -{ "file_offset": 4550032, "flags": 0, "name": "_light_volume_globals" }, +{ "file_offset": 4550032, "flags": 0, "name": "_light_volume_globals", "static": true }, { "file_offset": 4550212, "flags": 0, "name": "_lightning_globals" }, -{ "file_offset": 4550216, "flags": 0, "name": "_damage_globals" }, +{ "file_offset": 4550216, "flags": 0, "name": "_damage_globals", "static": true }, { "file_offset": 4550292, "flags": 0, "name": "_lights_game_globals" }, { "file_offset": 4550296, "flags": 0, "name": "_processed_bsp_flags", "static": true }, { "file_offset": 4550300, "flags": 0, "name": "_object_name_list", "static": true }, @@ -23109,7 +23114,7 @@ { "file_offset": 4550308, "flags": 0, "name": "_object_globals", "static": true }, { "file_offset": 4550312, "flags": 0, "name": "_debug_objects_position_velocity" }, { "file_offset": 4550316, "flags": 0, "name": "_globals" }, -{ "file_offset": 4550320, "flags": 0, "name": "_collision_bsp_usage_times" }, +{ "file_offset": 4550320, "flags": 0, "name": "_collision_bsp_usage_times", "static": true }, { "file_offset": 4550336, "flags": 0, "name": "_collision_debug_spray_normals", "static": true }, { "file_offset": 4564736, "flags": 0, "name": "_collision_debug_spray_points", "static": true }, { "file_offset": 4579136, "flags": 0, "name": "_collision_debug_spray_hit_flags", "static": true }, @@ -23154,7 +23159,7 @@ { "file_offset": 4610576, "flags": 0, "name": "_aux_dynamic_unlit_vb", "static": true }, { "file_offset": 4610580, "flags": 0, "name": "_dynamic_triangles_overflow_warning", "static": true }, { "file_offset": 4610581, "flags": 0, "name": "_dynamic_vertices_overflow_warning", "static": true }, -{ "file_offset": 4610582, "flags": 0, "name": "_reported_too_many_transparent_geometry_groups" }, +{ "file_offset": 4610582, "flags": 0, "name": "?warned@?1??_rasterizer_dynamic_unlit_geometry_draw@@9@9", "static": true }, { "file_offset": 4610584, "flags": 0, "name": "_rasterizer_environment_globals", "static": true }, { "file_offset": 4610764, "flags": 0, "name": "_warned", "static": true }, { "file_offset": 4610768, "flags": 0, "name": "_cached_node_matrix_count", "static": true }, @@ -23200,7 +23205,10 @@ { "file_offset": 4612728, "flags": 0, "name": "_local_profile_enable", "static": true }, { "file_offset": 4612732, "flags": 0, "name": "_rasterizer_profile_state", "static": true }, { "file_offset": 4612744, "flags": 0, "name": "_rasterizer_profile_error_count", "static": true }, -{ "file_offset": 4612748, "flags": 0, "name": "_rasterizer_environment_shadows_globals", "static": true }, +{ "file_offset": 4612748, "flags": 0, "name": "_local_shadow_color", "static": true }, +{ "file_offset": 4612760, "flags": 0, "name": "_local_object_bounding_radius", "static": true }, +{ "file_offset": 4612764, "flags": 0, "name": "_local_shadow_matrix", "static": true }, +{ "file_offset": 4612816, "flags": 0, "name": "_local_parameters", "static": true }, { "file_offset": 4612820, "flags": 0, "name": "_shadow_setup", "static": true }, { "file_offset": 4612821, "flags": 0, "name": "_shadow_used", "static": true }, { "file_offset": 4612824, "flags": 0, "name": "_rasterizer_xbox_transparent_geometry_globals", "static": true }, @@ -23216,11 +23224,11 @@ { "file_offset": 4615028, "flags": 0, "name": "_profile_accumulation_index", "static": true }, { "file_offset": 4615032, "flags": 0, "name": "_profile_accumulated_time", "static": true }, { "file_offset": 4615036, "flags": 0, "name": "_profile_accumulated_pushbuffer_size", "static": true }, -{ "file_offset": 4615040, "flags": 0, "name": "_local_lens_flare_occlusion_test_results2" }, -{ "file_offset": 4877216, "flags": 0, "name": "_local_lens_flare_occlusion_test_results" }, -{ "file_offset": 4907680, "flags": 0, "name": "_local_lens_flare_parameters" }, -{ "file_offset": 4948640, "flags": 0, "name": "_local_lens_flare_count" }, -{ "file_offset": 4948644, "flags": 0, "name": "_local_lens_flare_error_printed" }, +{ "file_offset": 4615040, "flags": 0, "name": "_local_lens_flare_occlusion_test_results2", "static": true }, +{ "file_offset": 4877216, "flags": 0, "name": "_local_lens_flare_occlusion_test_results", "static": true }, +{ "file_offset": 4907680, "flags": 0, "name": "_local_lens_flare_parameters", "static": true }, +{ "file_offset": 4948640, "flags": 0, "name": "_local_lens_flare_count", "static": true }, +{ "file_offset": 4948644, "flags": 0, "name": "?warned@?1??rasterizer_lens_flare_submit@@9@9", "static": true }, { "file_offset": 4948648, "flags": 0, "name": "_global_memory_pool" }, { "file_offset": 4948652, "flags": 0, "name": "_global_memory_index" }, { "file_offset": 4948656, "flags": 0, "name": "_rasterizer_swizzle_z_mask", "static": true }, @@ -23245,7 +23253,7 @@ { "file_offset": 4951098, "flags": 0, "name": "_render_camera_debug_this_fucking_frustum" }, { "file_offset": 4951104, "flags": 0, "name": "_render_debug_globals", "static": true }, { "file_offset": 4980812, "flags": 0, "name": "_bss_004c004c" }, -{ "file_offset": 4980856, "flags": 0, "name": "_lighting_storage" }, +{ "file_offset": 4980856, "flags": 0, "name": "?lighting_storage@?1??object_get_cached_render_lighting@@9@9", "static": true }, { "file_offset": 4980976, "flags": 0, "name": "_render_object_globals", "static": true }, { "file_offset": 4982004, "flags": 0, "name": "_debug_inactive_objects" }, { "file_offset": 4982005, "flags": 0, "name": "_reported_rendered_object_overflow", "static": true }, @@ -23271,13 +23279,14 @@ { "file_offset": 4987144, "flags": 0, "name": "_draw_string_globals" }, { "file_offset": 4987392, "flags": 0, "name": "_global_language_code" }, { "file_offset": 4987400, "flags": 0, "name": "_bss_004c1a08" }, -{ "file_offset": 4987912, "flags": 0, "name": "_biped_limp_noodle_globals", "static": true }, +{ "file_offset": 4987912, "flags": 0, "name": "_features", "static": true }, +{ "file_offset": 5031952, "flags": 0, "name": "_last_positions", "static": true }, { "file_offset": 5032720, "flags": 0, "name": "_debug_biped_physics" }, { "file_offset": 5032721, "flags": 0, "name": "_debug_biped_skip_update" }, { "file_offset": 5032722, "flags": 0, "name": "_debug_biped_skip_collision" }, { "file_offset": 5032723, "flags": 0, "name": "_debug_biped_limp_body_disable" }, { "file_offset": 5032724, "flags": 0, "name": "_sequential_counter", "static": true }, -{ "file_offset": 5032728, "flags": 0, "name": "_unit_globals" }, +{ "file_offset": 5032728, "flags": 0, "name": "_unit_globals", "static": true }, { "file_offset": 5032736, "flags": 0, "name": "_cache_file_globals" }, { "file_offset": 5034800, "flags": 0, "name": "_decompressor_globals", "static": true }, { "file_offset": 5038064, "flags": 0, "name": "_decompressor_print_timing", "static": true }, @@ -23303,7 +23312,7 @@ { "file_offset": 5057400, "flags": 0, "name": "_bink_globals" }, { "file_offset": 5057616, "flags": 0, "name": "_bink_pointer_block_count" }, { "file_offset": 5057624, "flags": 0, "name": "_dsound_error_string", "static": true }, -{ "file_offset": 5057888, "flags": 0, "name": "_sound_manager_globals" }, +{ "file_offset": 5057888, "flags": 0, "name": "_sound_manager_globals", "static": true }, { "file_offset": 5058264, "flags": 0, "name": "?MU_DriverExtension@@3UMU_DRIVER_EXTENSION@@A" }, { "file_offset": 5070568, "flags": 0, "name": "?XID_Globals@@3U_XID_GLOBALS@@A" }, { "file_offset": 5070728, "flags": 0, "name": "_XapiMuInfo" }, diff --git a/docs/object_matching_logs/claude_fifty_objects_20260925.md b/docs/object_matching_logs/claude_fifty_objects_20260925.md new file mode 100644 index 00000000..27b7bc96 --- /dev/null +++ b/docs/object_matching_logs/claude_fifty_objects_20260925.md @@ -0,0 +1,542 @@ +# Fifty-object campaign lane (2026-09-25) + +- **Worktree:** `C:\halo-worktrees\claude-fifty-objects-20260925` +- **Branch:** `claude/fifty-objects-20260925` +- **Base:** canonical `jonas/exact-pilots` **e9e62b78** (`git ls-remote` tip; the local + `origin/jonas/exact-pilots` ref was stale at 5361eeae and was not used). +- **Scorer frozen:** objdiff-cli **3.3.1** (sha1 3130e428). A fresh worktree silently + re-downloads the pinned 3.6.0 on its first ninja run. Under 3.6.0, this tip's `progress` + fails on the 3.3.1-authored `editor_flying_camera` grouped data entry. That is a + scorer-only effect and none of this lane's numbers use it. +- **Commits:** local only, never pushed. Canonical was not edited. + +## Frozen baseline (e9e62b78, objdiff 3.3.1, full ninja) + +| Measure | Value | +|---|---| +| Halo objects complete | 361 / 468 (All 479 / 833) | +| Halo meaningful code | 1,564,286 / 1,770,166 (7,425 / 7,574 functions) | +| Halo data | 2,572,828 | +| Board strict functions (stable snapshot) | 7,596 / 8,245 | +| Parks | 96 active, 0 stale, 0 invalid | +| Admission audit | 14 candidates, 0 contradicted, 7 rejected, 0 revoked | +| fake_match_scan | 25 review leads | +| pytest | 1,157 passed, 5 skipped, 26 subtests | + +## Method + +Eight-lane agent workflow. Each worker owned one `.c` (or one audit or provider task) and +worked only in `scratch/w//` through `gate.py --source`. Each worker had to state an +evidence-backed hypothesis before each probe, citing January bytes and relocations, the +later /Od+RTC build, HCEX.pdb, cachebeta.pdb publics, or a decoded compiler law. Every +proposed function gain or object completion then went to an independent adversarial +reviewer, who re-ran the gates, the strip tests and the house-rule review. The integrator +applies only reviewed packets and runs the full chain for every batch: full ninja, +progress, the rename-stable 8,245-function diff, parks, admission audit, fake scan, +pytest and `git diff --check`. + +## Batch 1 + +Result: Halo objects **361 -> 363**. Meaningful code **+2,769** (1,567,055). +Functions **+5** (7,430). Data **+1,530** (2,574,358). Stable diff +5 / 2,816 padded, +**0 regressions**. Parks 94 / 0 / 0. Admission 15 / 0 / 7 / 0. Fake leads 25 (unchanged). +pytest 1,157 / 5 / 26. + +### Objects admitted (2) + +| Object | Work | Evidence | +|---|---|---| +| tag_files/files_windows | new code: `_file_get_size` (224 padded) | /Od 0x8aef00 single-exit `result` and /Od 0x8ae8f0 named `GetLastError()` local in static `file_error`. Both are load-bearing; strip tests and a name-count sweep (0..40, plus unused-declaration controls) are negative. A C2 priority trace shows the inlined helper's extra web raises the error block's weight, which flips the ESI/EBX colouring to January's. Caveat: in the later build `error_code` is also used by FormatMessage. object_audit PASS; 0 PDB disagreements; provider link PASS. Park retired. | +| objects/objects | ownership: provider repair plus data entry | All 121 functions were already exact. The object was held by five hand-written NODUP helper copies in January's selected providers. **Layer 1 provider repair** removes the `#define x x_inline` renames and hand copies so the genuine real_math.h inline is used: `real_random` (action_charge), `signed_angular_difference` + `interpolate_scalar` (player_control), `valid_real_vector3d_axes2` + `valid_real_normal3d` (bored_camera), `point_in_sphere` (path_obstacles), and in decals `plane3d_from_point_and_normal`, `plane3d_negate`, `projection_sign_from_vector3d` and `triple_product3d`. Every provider row is unchanged, and each emitted COMDAT is byte-identical to January's selected section. Pair links pass in both orders. A board link census moves 250 -> 260 of 288 code-exact units to link-clean with 0 regressions, including six already-Matching cameras, items and scenario, which carried latent LNK2005s. The '$'-defect data entry pins the 1,530-byte `objects_update` section table. The `objects` rejection is retired. | + +### Function gains, objects still incomplete (4) + +| Function | Bytes | Source fact | Object blocker | +|---|---:|---|---| +| dead_camera `_dead_camera_new` | 288 | `dead_camera_constants` is file-static (absent from cachebeta publics). A static const aggregate's load is hoisted above pointer stores, and the /Od build fixes the pitch-before-timer statement order and the single-store unit phi. `static` is load-bearing and independently PDB-proven. | `_dead_camera_update` reproduces January's uninitialised `next_unit_index` read (the /Od build shows the later fix). Owner ruling, section 4. | +| actor_perception `_actor_perception_refresh_danger_zone` | 1,472 | The TU-private `REAL_MATH_EXTERNAL_POINT_FROM_LINE3D` rename is removed. The knowledge function uses the single-result form. Storage classes follow cachebeta publics. `_point_from_line3d` is emitted under ruling 20260921 #1 (January references it out of line here); the copy is byte-identical and passes the provider link. | blockage view-copy (owner packet section 5); `distance3d` / `distance_squared2d` provider | +| actor_looking `_actor_look_idle_find_prop` | 608 | `cos`/`sin` are spelled through the genuine real_math.h `cosine()`/`sine()` helpers. The newly emitted `_cosine`/`_sine` copies are identical to January's selected actor_combat copies and pair-link in both orders. | `_actor_look_update` register/slot residual | +| xbox_texture_cache `_texture_cache_steal_memory` | 224 | A named `stolen_address` local, used twice. An unused-local control stays residual. | texture_cache header / prototype / bitmap-schema debt (review items a-e) | + +### Zero-credit ownership corrections (verified; no bytes move) + +- **profile:** `compare_profile_sections`, `header_strings` and `format_strings` are external + and `profile_globals` is static, per cachebeta publics. +- **transport_endpoint_winsock:** `connection_thread_list_maintenance` and + `transport_endpoint_globals` are file-static. +- **actor_firing_position:** 14 file-static functions; the evaluator tables and sort globals are external. +- **game_engine:** 12 functions made static. The three hand-inlined copies of + `game_engine_get_type` become calls, and the /Od-attested + `game_engine_press_start_to_begin()` call is restored in `nonplayer_post_rasterize` + (/Od 0x5a1600). +- **real_math:** the invented `real_math_constants` aggregate becomes four genuine file + statics (HCEX real_math compiland). +- **model_animations:** five keyframe helpers are static. + +These four objects (actor_firing_position, game_engine, real_math, model_animations) were function- +and data-exact after batch 1. The `distance3d` provider (fixed by Layer 2) and, for real_math, the +actor_combat `cross_product2d` copy kept them from admission. Batch 3 admits actor_firing_position +and model_animations. game_engine and real_math stay held (see below). + +## Layer 2 (931ed8dc): shared real_math.h packet (owner ruling pending on one part) + +**Landed and verified:** + +- real_math.h `distance2d`/`distance3d` are `return square_root(distance_squared*(a, b));`, as in + the /Od build (no local). +- `project_point2d` uses short mapping locals and one `?:` store. It is /Od-attested and equal to + January's selected copy. +- action_vehicle, path_obstacles and decals drop their `#define x x_inline` renames and NODUP + hand copies. +- object_lights and players use the /Od caller spellings. +- Every emitted helper copy is byte-identical to January's selected section. Every provider row is + unchanged. The adversarial review (research `w/review_layer2/LEDGER.md`) reproduced the board + sweep exactly. + +**Pending owner ruling: the lock/unlock_global_random_seed prototype move.** + +The move takes these two prototypes from random_math.h, a 2026-09-04 reconstruction header, into +real_math.h's existing RANDOM_MATH.C section. The evidence for that placement: + +- real_math.h already has that section. +- The supplied genuine random_math.c includes real_math.h and not random_math.h. +- main.c shows C4013 for both functions without it. + +But the move is also declared-name-count compensation. The corrected helper bodies remove 4 +declared names from every real_math.h consumer, and the move adds 2 back. The bytes decide only +that count, not which prototypes move: + +- **Strip test (R6 V1).** The landed header without the move loses `_bitmap_copy`, + `_rasterizer_frame_statistics_draw` and `_get_edge_vertex` (7,376 B, all exact at base). It also + changes `_collision_move_point` (already residual). +- **Count-only subset (R10 V5/V6).** Moving {lock, get_random_seed} or {unlock, get_random_seed} + gives the same result. +- **The evidence-equal full move (R6 V2)** takes lock, unlock, get_random_seed and + random_seed_debug_log, and regresses 4 other exact functions: `_bitmap_2d_alpha_bleed`, + `_decals_delete_permanent_from_cluster`, `_rasterizer_frame_statistics_draw` and + `__rasterizer_model_transparent_geometry_submit`. +- get_random_seed still raises C4013 in network_client_manager.c. + +**If the owner rejects the move, reverting the two prototype lines alone is wrong,** because it +regresses the three functions above. Batch 3 admissions now depend on the Layer 2 bodies: + +- leaf_map and biped_limp_noodle (their `_distance3d` rejections were retired); +- actor_firing_position, path and model_animations (distance3d provider). + +The review's fallback diff (`w/review_layer2/fallback_revert_except_players.diff`) no longer +applies after batch 3. A rejection therefore means choosing between two costs: + +- lose the three count-tied functions (7,376 B); or +- revert Layer 2 and revoke those admissions, `_convex_hull2d_perimeter` and + `_player_set_action_result`. + +**Reopen criterion:** move get_random_seed and random_seed_debug_log too, and retire +random_math.h, once the other declared-name gaps in real_math.h are recovered. Its +nonuniform_cubic_spline bodies are known decompiler output (v9..v20 locals), so the header's +count is already known to be off. + +## Batch 3 (b807f9f6 header prerequisites, then the admission batch) + +Result: Halo objects **363 -> 375** (+12). Stable diff: 4 new strict functions, 2,784 padded +(2,765 meaningful), **0 regressions**. Parks 89 / 0 / 0. Admission 11 / 0 / 5 / 0. + +- **Fake scan: 26 leads.** The new lead is first_person_weapons' empty key-frame then-arm. It is + kept because the /Od build has the empty-then `jne; jmp` and January's bytes have the `cmp ax,1`. + It sits in a zero-credit, still-parked function. +- pytest 1,157 / 5 / 26; `git diff --check` clean. +- **Data +200** (path_structure_bsp tables) **+1,564** (units '$'-defect entry). +- **Scorer-only (not counted):** marking objects and units complete makes objdiff credit + +147 code / +7 functions for their internal `$L` labels. + +**Header prerequisite commit b807f9f6 (consumer sweep: full ninja, 0 moved rows):** + +- **objects.h.** Both bounding-sphere inline assertions report `OBJECTS_H_FILE`. It defaults to + January's relative `..\objects\objects.h`; object_lights defines the absolute spelling first. + January's string census has the relative string defined by action_vehicle (and referenced by + render_objects), and the absolute one defined by object_lights. action_vehicle loses its NODUP + hand copy. render_objects' `lighting_storage` becomes HCEX's static local of + `object_get_cached_render_lighting`. +- **path.h.** The opaque `__unknown140A0[0x5C]` span is HCEX's `struct path_result result`. The + punning store in path.c is gone. The 53 path.h consumers show 0 section differences. + +### Objects admitted (12) + +| Object | Work | Evidence (research `w//`) | +|---|---|---| +| units/units | ownership | 189/189 already exact. 25 `code_` placeholders get first-party names (January atlas exact tier, Sept-2001 maps, HCEX_Release). The worker's `unit_verify_inventory` was wrong: the reviewer found it is `unit_vectors_are_valid`, so the amended patch is used. 49 static flags from cachebeta publics. The '$'-defect data entry is `_magic_base_animation_seat_index` (1,564 B). The `_point_from_line3d` rejection is retired under ruling 20260921 #1. `units_ownership`, `review2_units` | +| physics/collision_debug | house-rule fix | The hand-expanded helpers become the /Od-attested `magnitude3d`/`arccosine` calls. `_collision_debug_cube_vertices` is static. 8 surplus COMDATs, 3 D3D tables and 11 literals are identical and pair-link. `collision_debug` | +| render/render_objects | provider packet (b807f9f6) | Already 22/22 and data 100%. The object is admitted once the bounding-sphere provider and the static-local storage are fixed. `bounding_sphere` | +| camera/editor_flying_camera | new code + storage | `_editor_camera_set_position_and_roll` (432) uses the /Od RTC locals in declaration order. The /Od-attested dead `left` pair is kept, and the in-source comment says it is never read. The reviewer ruled it admissible: the /Od build has the same RTC name and statement pair, the assert anchors show zero drift, the effect depends on content, and a count-only control (R4) is not exact. The first euler3d->euler2d view cast has per-site /Od pass-through, a byte-inert strip test and a strictly exact caller. `editor_camera_speed(_steps)` are static per cachebeta; the grouped entry is re-pinned. `editor_flying_camera`, `review2_editor_flying_camera` | +| rasterizer/xbox/rasterizer_xbox_shadows | new code + storage | `__rasterizer_environment_shadow_model_draw` (688). The model_draw bare block is load-bearing and independently attested: the camo precedent cfa20176 and the same scheduling signature at rasterizer_xbox_models +0x12bd. The gap statics have descriptive names (disclosed) and are split as the align-4 .bss and HCEX's loose statics suggest. `rasterizer_xbox_shadows` | +| cache/cache_files_windows | new code | `_cache_files_open_cache_files` (752). The trailing cleanup follows the CreateFile/resize idiom of /Od 0x857520. That is an analog from game_state_pc.c, disclosed as analog evidence. The plain spelling needs no decoration, and equivalent spellings also match. `cache_files_windows` | +| objects/widgets/light_volumes | new code + storage | `_light_volume_render` (912). This is the reviewer's amended st6b: its declaration order follows the /Od frame, and only `external_scale` (address reaches an out-of-line call) is block-scoped. `light_volumes`, `review2_light_volumes` | +| ai/actor_firing_position | admission | Already function- and data-exact. The batch-1 storage packet is verified against cachebeta publics. The two view casts are /Od-attested (0x45bd00, 0x456860). `review_admit2` | +| ai/path | admission + header | path.h HCEX field (b807f9f6). 32/32, audit PASS, 10/10 surplus identical. `review_admit2` | +| units/biped_limp_noodle | storage | The invented `biped_limp_noodle_globals` aggregate becomes HCEX's `features` and `last_positions`, as file-scope statics. Static locals were refuted: they put `last_positions` first in .bss. The `_distance3d` rejection is retired. Advisory, not added: move_relax returns early twice without popping a collision user (authentic; no BUG comment). `review_admit2` | +| structures/leaf_map | house-rule fix | `normalize_three_dee` calls `magnitude3d` + `scale_vector3d`, as /Od 0x89fc90 does. The `_distance3d` rejection is retired. `review_admit2` | +| models/model_animations | house-rule fix | `animation_get_root_velocity` calls `vector_from_points3d`, as /Od 0x708160 does. `review_admit2` | + +### Verified zero-credit or data corrections landed with batch 3 + +- **path_structure_bsp:** HCEX-named file-static `quantized_pathfinding_surface_widths/heights` + tables, +200 data. The object still needs the actor_combat `cross_product2d` ruling. +- **hud_nav_points:** `hud_update_nav_point_local_player` and `nav_point_data` are static per + cachebeta. The bounding-sphere blocker is now resolved; only `_custom_render_nav_point` remains. +- **first_person_weapons patch A:** + - `first_person_weapon_message` is static, with its prototype moved from the header into the + TU's private block. + - A genuine key-frame fix: the old `||` advanced the state on key frames. + - The TU `animation_update_render_only` wrapper is used; `real_vector2d turning`; + `sound_definition_index`. + - The `_first_person_weapon_update` park is re-baselined (95.21506). + +## Batch 4 (f7cd2e72 header packets, 6e3e2d35 admissions and storage) + +Result: Halo objects **375 -> 378** (+3). Stable diff: 3 new strict functions, 2,928 padded +(2,911 meaningful), **0 regressions**. Parks 86 / 0 / 0. Admission 11 / 0 / 3 / 0. Fake scan 26 +(unchanged). pytest 1,157 / 5 / 26. `git diff --check` clean. + +### Objects admitted (3) + +| Object | Work | Evidence (research `w//`) | +|---|---|---| +| interface/player_ui | shared-header layout recovery | Two edits in the header commit f7cd2e72. (1) `game_engine.h`'s opaque `game_variant` view becomes the recovered January layout: universal/ctf/slayer/oddball/king/race variant members, with HCEX names only where January's offsets attest the field. The game engines, network managers and playlist_profile use the new member names. (2) `player_ui_get_edit_playlist_profile` returns `struct game_variant *`. The reviewer found two C4133 warnings in ui_widget_game_data_input_functions that the worker missed; the reviewer's patch 07 fixes them. Sweep: 46 header consumers, 0 moved rows. `player_ui`, `review3_player_ui` | +| sound/sound_manager | new code + shared header | `_update_channel_for_looping_sound` (1,360) and `_sound_set_definition_end` (208) are exact. The shared header `sound_definitions.h` now declares HCEX's `short old_range_index`, landed together with the /Od 0x877810 single-exit definition; this avoids the prototype/definition mismatch the owner rejected earlier. The redundant `channel_state == _sound_channel_queued &&` term is load-bearing and /Od-attested verbatim (0x89a5a1). 45 statics per cachebeta publics. Sweep: 18 consumers. `sound_manager`, `review3_sound_manager` | +| rasterizer/xbox/rasterizer_xbox_dynavobgeom | view removal + storage | Genuine shared declarations replace the caller-local debug-options, window and pixel-shader views. The unlit draw uses the /Od-attested `vector_from_points3d`/`dot_product3d` calls and HCEX's `forward`/`zero_plane` locals. The HCEX function-static `warned` latch is not public in cachebeta. `MAX()` reproduces the /Od `?:` store. Nine D3DINLINE wrappers are static. The surplus `real_*_to_pixel32` COMDATs and SDK tables are identical to January's selected copies and link in both orders. January's own object has UNDEF references to them, so its TU emitted them. `dynavobgeom`, `review3_rasterizer_xbox_dynavobgeom` | + +### Function gains and zero-credit packets landed in batch 4 + +- **damage:** `_object_damage_body` is exact (1,360; reviewer patch B+). Patch A would newly emit + the `collision_test_line`/`real_random` header COMDATs from a non-exact caller, so it is held (P1 + class). +- **players:** + - Storage for three rows. + - COMMON tentative definitions of `players_globals`/`team_data`. January's `linker_common` + records 154-156 are players.c's, and HCEX has them as DataIsGlobal. +- **hs:** + - 839 January-static storage flags. + - The /Od-attested static helper `hs_enumerate_scenario_data` replaces 11 hand expansions (the + reviewer's amendment; its PDB storage disagreement goes to 0). + - The worker's `real_random_range` cleanup is held (P1 class). +- **hs_scenario_definitions:** first-party `static byte_swap_script_syntax_data` (the reviewer's + fallback). The 9-name data split stays held. +- **player_profile:** HCEX `profile_color_table`; the write-thread park is re-baselined + (88.40708 -> 88.451324). +- **main:** + - `main_exit` in the /Od 0x6aff90 shape, and 25 statics. + - January-resolved corrections: strict `>`, dead `requested_rate` store dropped, and + `best_interval` as the `" des %d"` argument. + - Parks re-baselined: `_main_update_time` 62.637814 -> 98.986336, `_main_frame_rate_debug` + 94.51923 -> 98.65385. + +### Process incidents in wave 3 (repaired, no tracked change) + +Both happened inside reviewer agents, and both were repaired byte-exact before integration: + +- A broken `&&` chain ran `rm -rf .git` in the worktree root. The reviewer restored the + worktree pointer file. +- `tools/campaign/volatile_scan.py --help` ran its hard-coded scan, because the script has no + argparse. The scan rewrote `source/hs/hs.c` to LF; the reviewer restored it from backup. + +The integrator verified that the tree was clean and hs.c all-CRLF before batch 4. The worker +brief now forbids destructive commands outside a worker's slug and running unread repo scripts. + +## Batch 5 (466698b8 hud_unit, cdc8ebd3 hygiene) + +Result: Halo objects **378 -> 379** (+1). The stable diff is unchanged (0 moved rows) and there are +**0 regressions**. Parks 86 / 0 / 0. Admission 11 / 0 / 2 / 0. pytest 1,157 / 5 / 26. + +| Object | Work | Evidence | +|---|---|---| +| interface/hud_unit | header inline + house-rule fix | January's 26 stack-sentinel sites across hud_draw, hud_unit, hud_nav_points, hud_weapon and motion_sensor share one inlined shape. Both asserts at each site carry one line literal, so it is a macro. January's 48-byte `_check_stack_buffer` has no relocations anywhere. The Sept-2001 map flags the helper as an inline COMDAT (`i hud_draw.obj`). `hud_draw.h` now carries the unchanged body as a header `__inline` plus the sentinel macro (`match_assert_stack_frame`; descriptive name, since neither /Od nor HCEX has the sentinel). That removes hud_unit's invented gotos. hud_nav_points and hud_weapon use it too; their callers are exact. motion_sensor keeps its copy, because its sentinel callers are residual (rule i). Also: the reviewer-amended names and storage, and retirement of the `_fast_ftol` rejection (identical copy; pair links pass both ways). `hud_stack_check`, `review4_hud_unit`, `review4_hud_draw` | + +**Disclosed, pending owner ruling (P7).** The packet drops rasterizer_xbox_models' `#include +"interface/hud_draw.h"`: + +- The include is genuinely dead: it was added by project commit 635bd83d, and the file uses no name + from the header. Removing it is raw- and warning-inert. +- It is load-bearing only as declared-name shielding. The inline adds about 9 names, which would + flip `__rasterizer_model_transparent_geometry_submit` (1,296 B). +- It is not the held add-declarations class (Layer 2, main header_swap), but it is a count effect + and is disclosed as one. +- If the owner rejects it, revert 466698b8. That loses the hud_unit admission; nothing else was + exact because of it. + +Zero-credit hygiene in cdc8ebd3: + +- geometry drops its NODUP `plane2d_distance_to_point` copy, which removes a latent + collision_bsp<->geometry LNK2005; +- collision_bsp `collision_bsp_usage_times` is static; +- rasterizer_lights P1: HCEX file statics with January's .bss layout; +- motion_sensor .bss symbol layout is fixed; +- rasterizer_xbox_models: five D3D wrapper rows are static. + +Wave 4 found no new strict function. Every remaining residual in those lanes falls into one of +three groups: + +- the authentic-bug owner class: crosshairs_draw, hud_update_weapon_local_player, + motion_sensor_update, rasterizer_lights_reset_for_new_map; +- the P1 class, where a new header COMDAT would come from a non-exact caller; +- scheduler/allocator ties where the stop rule fired (evidence in `results/wave4/`). + +## Running tallies (vs frozen base e9e62b78, objdiff 3.3.1; at cdc8ebd3) + +| Tally | Value | +|---|---| +| 1. Net newly COMPLETE Halo objects | **18** (361 -> 379); checkpoints: 10 at b9a8d587 | +| 2. New strict functions | **14** (stable diff; 0 regressions) | +| 3. New meaningful exact bytes | **8,775** | +| 4. New padded exact bytes | **8,864** | +| 5. New verified data bytes / admission-only closures | **3,294** data (1,530 + 1,564 + 200); 12 admission-only closures (objects, units, render_objects, actor_firing_position, path, biped_limp_noodle, leaf_map, model_animations, collision_debug, player_ui, rasterizer_xbox_dynavobgeom, hud_unit) | +| 6. Fuzzy improvements at zero credit | `_main_update_time` 62.64 -> 98.99; `_main_frame_rate_debug` 94.52 -> 98.65; `_player_profile_write_thread_proc@4` 88.41 -> 88.45; first_person_weapons A (95.21506); plus the FUZZY_IMPROVED rows in the research results | +| Scorer-only effects | +147 code / +7 functions (`$L` label credit from status flips). NOT taken: objdiff 3.6.0 would credit hs's 54,780 data bytes and actions' 2,404 at zero source cost | +| Regressions / revocations | 0 / 0 | + +Contingent on the Layer 2 ruling: `_convex_hull2d_perimeter` (96), `_player_set_action_result` +(240), and the leaf_map, biped_limp_noodle, actor_firing_position, path and model_animations +admissions (see the Layer 2 section). Contingent on the P7 ruling: the hud_unit admission (see batch 5). + +## Held for owner rulings (not landed; evidence preserved) + +Every item's evidence is under `research/fifty_objects_20260925/` (`w//` for worker and +review ledgers and patches, `results/wave*/` for the structured results). + +| Item | Would unlock | Ruling needed | Reopen criterion | Evidence | +|---|---|---|---|---| +| actor_combat P1: remove the NODUP `cross_product2d` hand copy and restore the /Od-attested call in `_actor_aim_grenade` | **5 objects**: path_obstacle_avoidance, path_smoothing, real_math, collision_features, path_structure_bsp | Admit a January-owned header COMDAT, and a byte-inert /Od-attested view cast, whose caller is not yet strictly exact. The edit is byte-inert on all 81 sections (NODUP -> ANY only). | Owner admits P1, or `_actor_aim_grenade` goes strict-exact with the /Od helper calls | `w/cross_product2d/` | +| Layer 2 prototype move (landed) | keeps 3 count-tied functions | name-count compensation in a genuine owner header | see the Layer 2 section | `w/review_layer2/` | +| game_engine_king | 1 object | reproduces January's uninitialised `[ebp-4]` read in `_find_next_hill` (authentic bug class) | owner admits the BUG-commented read | `w/king/`, `results/wave2/REVIEW__source_game_game_engine_king.md` | +| glow `_get_particle_world_position` | 1 object | two authentic uninitialised array reads (also in the /Od build); ruling 20260920 may already allow them | owner admits the BUG comments | `w/glow/` | +| first_person_weapons patch B | 1 object (34/34) | authentic unguarded NULL dereference (January, /Od, HCEA 2011) | owner admits the BUG comment | `w/first_person_weapons/owner_gated_exact.patch` | +| dead_camera `_dead_camera_update` | 1 object | authentic uninitialised `next_unit_index` read | owner admits the BUG comment | batch-1 ledger | +| object_lights | 1 object | a surplus `_object_get_bounding_sphere` copy that differs from the selected copy only in its January-proven per-TU `__FILE__` literal; also needs data_gap's packet | owner ruling | `w/bounding_sphere/`, `w/data_gap/` | +| rasterizer_xbox | 1 object | a .bss split that adds 9 descriptive (non-first-party) static names | owner policy ruling | `w/rasterizer_xbox_audit/` | +| rasterizer_xbox_hardware_geometry | 1 object | choose `IDirect3DResource8_MoveResourceMemory` or `D3DVertexBuffer_MoveResourceMemory` for the no-op wrapper at 0x158460 (byte-identical) | owner picks A or B, or first-party evidence | `w/hardware_geometry/` | +| network_connection connect form | 2 functions | already under owner review; the reviewer recommends rejecting it (`success = TRUE;` steering) | owner packet | `w/network_connection/` | +| breakable_surfaces B1 | 1 object | the genuine `real_local_random` body adds one declared name board-wide and flips two fragile ties | declared-name gap recovery, or owner ruling | `w/breakable_surfaces_audit2/` | +| actions grouped data entry | +2,404 data | tools change to `semantic_progress.py` for grouped extents (scorer change; not taken in this lane) | owner or integrator accepts the verifier fix, or the scorer moves to 3.6.0 | `w/actions/verifier_combined_extent.diff` | +| render_debug | 1 object | an invented `render_debug_globals_definition` aggregate whose separate-static names are unrecoverable, plus six consumer-local `extern boolean debug_*` with no definer | owner ruling or new naming evidence; the helper/vehicle patch (a)-(c) is ready at zero credit | `w/review_admit2/patches/render_debug_genuine_helpers_and_vehicle.patch` | +| bitmap_drawing | 1 object | the unnamed 16-byte static stays held under the 2026-09-20 ruling | first-party name and type | `results/wave1/` | +| hud_unit | 1 object (+ hud_weapon/motion_sensor/hud_nav_points hygiene) | the stack-sentinel code is a hand-copied `check_stack_buffer` with two invented gotos (held class); January's asserts share one line (a macro), and the Sept-2001 map tags the helpers as inlines | a `hud_draw.h` `__inline check_stack_buffer` packet (wave 4), or an owner ruling; the reviewer-amended 01R + 02-04 are ready | `w/review3_hud_unit/` | +| rasterizer_xbox_profile | 1 object | invented TU-private aggregates (pad members; loose statics need new descriptive .bss names = held class), a /Od-attested `%s`-with-NONE crash path (BUG class), three load-bearing `volatile`s | owner rulings on names, BUG and volatile | `w/rasterizer_xbox_profile/`, `w/review3_rasterizer_xbox_profile/` | +| hs_scenario_definitions data split | 1 object | 9 file-static data names with no first-party attestation (1 invented) | owner ruling on descriptive names | `w/hs_scenario_definitions/`, `w/review3_hs_scenario_definitions/` | +| models .bss | 1 object | the only exact form is file-scope `= {0}` statics in reverse use order, contradicting the first-party static-local form; 3 of 4 names are lost | owner ruling or first-party names | `w/models_bss/` | +| transport_endpoint_set_winsock `net_startup_debug();` | storage only | a call needed only to make VC7 emit the static; its arity contradicts the 2001 `@net_startup_debug@4` evidence | owner ruling (+ signature) | `w/transport_endpoint_set_winsock/`, reviewer slug | +| player_profile R1-R3 | 3 functions | authentic defects: uninitialised serialised block, file left open, close after delete (BUG comments ready) | owner ruling (authentic-bug class) | `w/player_profile/production_owner_gated.patch` | +| main header_swap / main_crash | 1 function | declared-name-count compensation (Layer 2 class) / authentic NULL write | owner ruling | `w/review3_main/` | +| damage patch A / hs real_random_range cleanup | 0 (house-clean) | new header COMDAT emitted from a non-exact caller (P1 class) | same as P1 | `w/damage/`, `w/review3_storage_packet_/` | + +## Research material + +`research/fifty_objects_20260925/` is regenerated from the ignored `scratch/` by +`scratch/campaign/curate.py`. It holds every worker and reviewer ledger, the patches, and the +best non-exact candidates as `*.vs_tree.diff` against this tree. `.obj` files, split copies and +symbols.json copies are excluded, and the folder is exempt from EOL and whitespace conversion so +the patches stay byte-exact. + +## Final handoff + +- **Branch:** `claude/fifty-objects-20260925`. Local only; never pushed; canonical never edited. +- **Base:** e9e62b78, the `git ls-remote` tip of `jonas/exact-pilots` at lane start. +- **Tip:** the commit that adds this section. The last code commit is cdc8ebd3. +- **Scorer:** objdiff-cli **3.3.1** (sha1 3130e428) for every number. Not upgraded; 3.6.0 figures appear only where marked scorer-only. + +### Commit order + +| Commit | Content | +|---|---| +| bf937aac | Batch 1: files_windows, objects; 5 exact functions; ownership corrections | +| 931ed8dc | Layer 2: real_math.h helper bodies, provider hand-copy removal (**lock/unlock prototype move pending owner ruling**) | +| b807f9f6 | Header prerequisites: objects.h `OBJECTS_H_FILE`, path.h HCEX field | +| b9a8d587 | Batch 3: 12 objects, 4 exact functions | +| 954eebd2 | Research evidence (waves 1-2) | +| f7cd2e72 | Batch 4a: player_ui (game_engine.h/player_ui.h), sound_manager (sound_definitions.h) | +| 6e3e2d35 | Batch 4b: dynavobgeom; damage `_object_damage_body`; storage packets | +| 16542e46 | Ledger + wave-3 evidence | +| 466698b8 | Batch 5a: hud_unit via the hud_draw.h `check_stack_buffer` inline (**P7 pending owner ruling**) | +| cdc8ebd3 | Batch 5b: zero-credit storage and provider hygiene | +| eb33baec | Ledger: batch 5 | +| (this commit) | Owner queue, final handoff, wave-4/5 evidence | + +Changed paths, excluding `research/`, as of eb33baec: 75 files, +3,717 / -4,304 lines. This commit adds the owner-queue doc. + +- **config (5):** config.json, object_admission_rejections.json, parked.json, + semantic_data_matches.json, symbols.json. +- **Shared headers (10):** real_math.h, random_math.h, objects.h, path.h, game_engine.h, + player_ui.h, sound_definitions.h, hud_draw.h, first_person_weapons.h, light_volumes.h. +- **Source (59 .c files)** and **docs (2):** this ledger and the owner queue. + +### Target vs result + +**Target: 50 new complete Halo objects. Verified: 18** (361 -> 379). The evidence cannot support +50 without owner rulings. The measured owner queue +(`claude_fifty_objects_20260925_owner_queue.md`) adds 16 more on an all-yes, excluding the two +items canonical already superseded. That gives 34, still short of 50. Every remaining +self-landable residual in the pool is a documented tie, where the stop rule fired, or an +owner-gated form. + +| # | Object | Kind of work | +|---:|---|---| +| 1 | tag_files/files_windows | new code (file_get_size) | +| 2 | objects/objects | provider repair (Layer 1) + data entry | +| 3 | units/units | ownership: first-party names, storage, data entry | +| 4 | physics/collision_debug | house-rule fix (/Od helper calls) + storage | +| 5 | render/render_objects | provider packet (objects.h) + static-local storage | +| 6 | camera/editor_flying_camera | new code + storage | +| 7 | rasterizer/xbox/rasterizer_xbox_shadows | new code + storage | +| 8 | cache/cache_files_windows | new code | +| 9 | objects/widgets/light_volumes | new code + storage | +| 10 | ai/actor_firing_position | admission (storage packet verified) | +| 11 | ai/path | admission + path.h HCEX field | +| 12 | units/biped_limp_noodle | storage (HCEX file statics) | +| 13 | structures/leaf_map | house-rule fix (/Od helper calls) | +| 14 | models/model_animations | house-rule fix (/Od helper call) | +| 15 | interface/player_ui | shared-header layout recovery (game_variant) | +| 16 | sound/sound_manager | new code + shared header | +| 17 | rasterizer/xbox/rasterizer_xbox_dynavobgeom | view removal + storage (**see policy conflict below**) | +| 18 | interface/hud_unit | header inline + house-rule fix (**P7 disclosure**) | + +Checkpoints: 10 objects at b9a8d587. 20/30/40/50 were not reached. No 10,000-meaningful-byte +checkpoint was reached either: the total is 8,775. + +### Tallies (vs e9e62b78, objdiff 3.3.1) + +| Tally | Value | +|---|---| +| 1. Net newly complete Halo objects | **18** | +| 2. New strict functions | **14** (stable 8,245-function diff; 0 regressions) | +| 3. New meaningful exact bytes | **8,775** | +| 4. New padded exact bytes | **8,864** | +| 5. New verified data bytes / admission-only closures | **3,294** / **12** | +| 6. Fuzzy improvements at zero credit | `_main_update_time` 62.64 -> 98.99, `_main_frame_rate_debug` 94.52 -> 98.65, `_player_profile_write_thread_proc@4` 88.41 -> 88.45, first_person_weapons A 95.21506; more in `research/.../results/` | +| Scorer-only (not counted) | +147 code / +7 functions (`$L` label credit on status flips); objdiff 3.6.0 would add hs 54,780 and actions 2,404 data bytes at zero source cost | +| Regressions / revocations | **0 / 0** | + +**Contingent credits:** + +- Layer 2 ruling: `_convex_hull2d_perimeter`, `_player_set_action_result`, and the leaf_map, + biped_limp_noodle, actor_firing_position, path and model_animations admissions. +- P7 ruling: the hud_unit admission. + +### House-rule review (source, headers, COMDATs, providers) + +**Source.** + +- Every landed packet passed an independent adversarial reviewer. Each reviewer checked house + rules 1-22 and the strip test, ran /Od declaration-order checks for any new scope, and verified + storage claims against cachebeta publics. +- Where a reviewer issued an amendment, the amendment is what landed: + - units (unit_vectors_are_valid); + - light_volumes (/Od declaration order); + - dynavobgeom (MAX); + - hs (`hs_enumerate_scenario_data`, no cleanup COMDAT); + - main (`main_exit` /Od shape); + - damage (B+, not A); + - player_ui (patch 07); + - hud_unit (01RS; P6 dropped). +- The fake-match lead count went 25 -> 26. The new lead is the /Od-attested empty then-arm in + the still-parked first_person_weapons update. + +**Headers.** Every shared-header edit landed with a full ninja and stable diff, with 0 regressions: + +- real_math.h/random_math.h; +- objects.h, path.h; +- game_engine.h, player_ui.h, sound_definitions.h; +- hud_draw.h; +- first_person_weapons.h. + +Count-sensitive edits are disclosed (Layer 2 move, P7). No filler declarations landed. + +**COMDATs.** Newly emitted header-inline COMDATs come only from strictly exact callers (rule i). +Each is identical to January's selected copy and passes provider links in both orders. + +**Providers.** Four sets of NODUP hand copies were removed: + +- Layers 1 and 2: 17 helpers; +- action_vehicle `object_get_bounding_sphere`; +- geometry `plane2d_distance_to_point`; +- hud_draw `check_stack_buffer`. + +Known remaining NODUP conflicts: + +- actor_combat `cross_product2d` (owner item P1); +- effects `real_local_random`; +- player_control `limit2d`; +- decals `plane2d_from_points`; +- items `object_get_type`. + +**Disclosed judgement calls:** + +- the Layer 2 prototype move and P7 (count effects, pending rulings); +- editor_flying_camera's /Od-attested dead `left` pair; +- the descriptive names of rasterizer_xbox_shadows' gap statics and of the + `match_assert_stack_frame` macro; +- cache_files_windows' analog evidence; +- rasterizer_lights' load-bearing `= {0}`. Canonical a595bbc2 later landed the same idiom for + models. + +### Held and rejected items + +Every held item has an apply-ready packet, a ruling question and measured unlocks in +`claude_fifty_objects_20260925_owner_queue.md`. The items with no object at stake are in the +held-items table above. Evidence for each is under `research/fifty_objects_20260925/`. + +Items that are not to be retried without new evidence: + +- the brief's do-not-reopen list (decals/physics, path_obstacles parenthesis, aim_grenade goto, hud_draw pragma, s3tc, render_sprite, incompatible providers, flags `x * height`); +- periodic_functions' DAG tie (~150 respellings); +- the residuals whose stop rule fired, listed in `results/wave3` and `results/wave4`. + +### Process incidents + +Both happened in wave 3, inside reviewer agents, and both were repaired byte-exact before +integration: + +- `rm -rf .git` in the worktree root; +- a hs.c rewrite by `volatile_scan.py`. + +No tracked change resulted. The worker brief now forbids both patterns. + +### Expected integration conflicts (trial `git merge-tree` against canonical dbcea3d6) + +Canonical gained 9 commits after e9e62b78. The two lanes' new Matching sets are disjoint: +canonical added models, hs_scenario_definitions and hs_globals_external. A resolved merge +therefore expects **382** Halo objects, subject to a full gate. Five files conflict: + +| File | Resolution guidance | +|---|---| +| `source/ai/path_structure_bsp.c` | Both lanes added the same HCEX tables (canonical e208c87b). Take canonical's spelling `static real const ...[8]`, drop this lane's comment, and re-gate (bytes expected identical). | +| `source/hs/hs_scenario_definitions.c` | Take canonical's separate data definitions (Matching upstream). This lane's static `byte_swap_script_syntax_data` rename (6e3e2d35) is subsumed if canonical has it; keep canonical's symbols.json rows. | +| `source/rasterizer/xbox/rasterizer_xbox_dynavobgeom.c` | Both lanes replaced the local views with genuine owner types. This lane also has the /Od helper calls, HCEX locals, the `warned` latch and MAX, and admits the object. Canonical 641e1466 keeps a narrowed rejection instead. **Policy conflict, needs an owner decision:** see below. | +| `config/symbols.json` | Line-level overlaps on the dynavobgeom wrapper rows, the path_structure_bsp tables and the hs rows. Take the union; the rows are identical where both edited. Never re-serialise. | +| `config/object_admission_rejections.json` | Take the union of retirements. This lane retired objects, leaf_map, biped_limp_noodle, units, the hud_unit `_fast_ftol` rejection and dynavobgeom. Canonical retired hs_scenario_definitions, hs_globals_external and models. Canonical's new narrowed dynavobgeom entry follows the policy decision below. | + +Canonical also changed `tools/campaign/gate.py`, `stable_verdicts.py` and `verdicts.py`, which +now identify functions by COFF type 0x20, so fastcall functions count. Re-take the stable +snapshot after merging before comparing function counts. + +**Dynavobgeom and SDK-table policy conflict.** Canonical 641e1466 declined to admit dynavobgeom +for two reasons: + +- the unreconciled `global_window_parameters` extern; +- selected-provider links "not a complete ordinary program link" for the three stock D3D SDK + tables every D3D8.h TU emits. + +This lane admitted objects under the brief's criterion: identical to January's selected copy, +plus pair links passing in both orders. A census on this tree (built objects vs build/split) finds: + +- **55 objects canonical already lists as Matching emit the same three surplus D3D SDK tables.** +- **9 of this lane's 18 admissions emit them too:** files_windows, objects, units, + collision_debug, rasterizer_xbox_shadows, cache_files_windows, biped_limp_noodle, + sound_manager and rasterizer_xbox_dynavobgeom. +- Seven Matching objects declare `global_window_parameters` the same consumer-local way as + dynavobgeom. + +Two outcomes: + +- If the owner applies canonical's stricter standard uniformly, those 64 objects need revisiting, + not only this lane's. +- If the owner keeps the brief's standard, canonical's narrowed dynavobgeom rejection should be + retired at reconciliation. + +This conflict was found at handoff, after all admissions landed. diff --git a/docs/object_matching_logs/claude_fifty_objects_20260925_owner_queue.md b/docs/object_matching_logs/claude_fifty_objects_20260925_owner_queue.md new file mode 100644 index 00000000..732a0166 --- /dev/null +++ b/docs/object_matching_logs/claude_fifty_objects_20260925_owner_queue.md @@ -0,0 +1,502 @@ +# Fifty-object lane: owner ruling queue (measured at cdc8ebd3) + +Every item below is a packet that is ready to apply to cdc8ebd3 and has been measured. The worker ledger for each item recorded its gate, whole-object audit, provider-link and data measurements. None of these packets has landed. Each item is one yes/no (or pick) question. The "Would complete" column lists every object that becomes COMPLETE on a yes. The integrator then applies the packet in APPLY_ORDER and runs the full batch gate: ninja, the stable 8,245-function diff, parks, admission, fake scan, pytest and diff-check. + +If every item were a yes, **18** more Halo objects would complete (379 -> 397; +36 over the lane base, before any regression the full gate might show). + +Packets and evidence: `research/fifty_objects_20260925/w/owner_queue//` (patches/, APPLY_ORDER, RULING.md, MEASURED.md, LEDGER.md). The integrator kit is in `research/fifty_objects_20260925/integrator_kit/`. + +**Canonical moved during the lane.** `jonas/exact-pilots` is now at dbcea3d6, 9 commits past this lane's base e9e62b78. It independently admitted models (a595bbc2, file-scope `= { 0 }` statics, the same form as item "models .bss" option P1), hs_scenario_definitions (c5fe0f40/d99a8658, separate data definitions) and hs_globals_external (3da50d63). **The models and hs_scenario_definitions items below are therefore SUPERSEDED by canonical**: take canonical's version at reconciliation and drop this lane's packets. Excluding them, a yes on every remaining item completes 16 objects. + +| # | Item | Would complete | Functions gained | Apply-ready | +|---:|---|---|---|---| +| 1 | actor_combat P1 | ai/path_obstacle_avoidance, ai/path_smoothing, math/real_math, physics/collision_features, ai/path_structure_bsp | - | yes | +| 2 | rasterizer_xbox .bss split with 9 descriptive static names (whole-object admission) | rasterizer/xbox/rasterizer_xbox | - | yes | +| 3 | hs_scenario_definitions data split with 9 descriptive static names (whole-object admission, rejection retirement) **(SUPERSEDED by canonical)** | hs/hs_scenario_definitions | - | yes | +| 4 | object_lights | objects/object_lights | - | yes | +| 5 | render_debug | render/render_debug | - | yes | +| 6 | game_engine admission pick | game/game_engine | - | yes | +| 7 | rasterizer_xbox_hardware_geometry | rasterizer/xbox/rasterizer_xbox_hardware_geometry | - | yes | +| 8 | models .bss **(SUPERSEDED by canonical)** | models/models | - | yes | +| 9 | dead_camera _dead_camera_update | camera/dead_camera | _dead_camera_update | yes | +| 10 | saved_game_files _saved_game_files_enumerate_available_to_local_player_index | saved games/saved_game_files | _saved_game_files_enumerate_available_to_local_player_index | yes | +| 11 | first_person_weapons patch B (authentic unguarded NULL dereference of first_person_weapon_animations; rebased onto cdc8ebd3 after patch A landed in b9a8d587) | interface/first_person_weapons | _first_person_weapon_update | yes | +| 12 | player_profile R1-R3 (uninitialised serialised 512-byte block; seek failure skips file_close; close(&file, NONE) after delete-while-open), rebased onto cdc8ebd3 after zero-credit packet A landed in 6e3e2d35; R3 BUG comment amended | saved games/player_profile | _player_profile_create_default_profiles_on_disk, _player_profile_write_thread_proc@4, _player_profile_new | yes | +| 13 | game_engine_king | game/game_engine_king | - | yes | +| 14 | glow _get_particle_world_position | objects/widgets/glow | _get_particle_world_position | yes | + +Items landed but pending a ruling, which are not in the table above: + +- **Layer 2** (931ed8dc): the lock/unlock_global_random_seed prototype move. +- **P7** (466698b8): the dead hud_draw.h include in rasterizer_xbox_models. + +Both are described in the main ledger, with their revert costs. + +Held items with no object at stake are listed in the main ledger's held-items table: + +- main header_swap and main_crash; +- transport `net_startup_debug();`; +- the damage A and hs cleanup COMDATs; +- actions grouped data; +- breakable_surfaces B1; +- network_connection; +- rasterizer_xbox_profile; +- bitmap_drawing. + +## 1. actor_combat P1: cross_product2d (remove the NODUP hand copy and restore the /Od-attested call in _actor_aim_grenade) + +- **Question:** Should patch 01 be admitted while _actor_aim_grenade is still not strict exact (576 bytes vs January's 544)? Patch 01 deletes actor_combat.c's hand-written NODUP cross_product2d copy and its #define/#undef cross_product2d_inline rename, so the genuine real_math.h __inline emits January's actor_combat-owned _cross_product2d section. It also spells the /Od-attested call as cross_product2d((real_vector2d const *)&actor->input.facing_vector, &aim_vector2d) > 0.0f. All 88 actor_combat sections stay byte-identical; the only change is the _cross_product2d COMDAT selection, NODUPLICATES -> ANY. If YES, patches 02 and 03 (or 03b) also apply, and 5 objects are admitted (Halo 379 -> 384). +- **Would complete:** source/ai/path_obstacle_avoidance; source/ai/path_smoothing; source/math/real_math; source/physics/collision_features; source/ai/path_structure_bsp +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/p1_cross_product2d` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** 1. /Od fn 0x44ebb0 is _actor_aim_grenade (from its RTC names). At 0x44ed38-0x44ed45 it pushes &horizontal_aim_vector and actor+0x140 (facing_vector, a real_vector3d), then calls cross_product2d (fn 0x455250). That is a real call with the 3D facing vector as the 2D operand, and it is the only cross_product2d caller in the actor_combat range. +2. January's own bytes bind &facing_vector once (lea ecx,[edi+0x174] at 0xe4) and read both inlined 2D products through that register. This is the pointer-parameter signature. h.j*f.i-h.i*f.j at 0x105-0x120 is the only 2D cross product in the whole object. +3. January selected actor_combat's _cross_product2d. The genuine header inline emits a byte-identical copy, so P1 adds NO surplus. It removes a Rule-6 hand copy of the same class as the 17 removed by the Layer 1/2 repairs. +4. The only known EXACT diagnostic of aim_grenade (G1) is built on the /Od helper-call list, with _cross_product2d coming from the header. +5. The same cast expression is already landed in Matching objects: action_obey:2593 and :1259, and action_vehicle:395. +6. Status-quo cost: 10 objects carry an LNK2005 on _cross_product2d, and 5 of them are otherwise complete. + +**Evidence against.** 1. The caller _actor_aim_grenade is not strict exact (576 vs 544, the held declaration-scope/goto residual). Both law (i) and the view-cast rule require a strictly exact caller, and byte exactness cannot tell the call apart from the hand expansion at this site. +2. The /Od build is a later revision; January's scope for horizontal_aim_vector differed from it (frame 0x24 vs 0x28). +3. P1 restores only cross_product2d. The adjacent /Od-attested dot_product2d(&facing,&h) stays hand-expanded, because restoring it would newly emit a _dot_product2d COMDAT from the non-exact caller. +4. Precedent risk: admitting a byte-inert header-COMDAT respelling in a non-exact caller. The proposal limits this to sections the same object already owns in January's split, with no new surplus. + +**Still blocked / integrator notes.** Nothing in the packet is blocked. The integrator still owes the full batch gate: ninja, stable_verdicts sweep, parks, admission audit, fake scan and pytest. Workers may not run these, but since only actor_combat.c changes and it is byte-identical apart from the COMDAT selection, a zero-regression result is expected. + +actor_combat itself stays NonMatching: aim_grenade and plan_grenade_trajectory are residual, and it has 4 pre-existing _actor_combat_*_inline externals with no January provider. + +These objects lose the cross_product2d failure but remain incomplete: +- decals: 2 residuals; patch 03b optionally retires its now-premise-less _cross_product2d rejection +- collision_bsp: 3 residuals +- actor_looking: _actor_look_update +- geometry: 3 residuals plus a _plane2d_from_points conflict +- bipeds: 9 residuals plus an _object_get_type conflict + +**Measured.** All measured at cdc8ebd3; the tree was clean before and after. + +Patches: the wave-2 patch applies unchanged, because actor_combat.c did not change between 931ed8dc and cdc8ebd3. The patched file is byte-identical to wave-2 p1.c. git apply --check is clean for 01, 02 and 03 each, for 01+02+03 together, and for 01+02+03b together. A sandbox apply on the cdc8ebd3 blobs gives 497 -> 502 Matching statuses and 8 -> 7 rejections. + +actor_combat gate --all: production, P1 and P1-strip all give 32 EXACT plus the same 2 residuals (_actor_aim_grenade 576/544 sha e9bba5b0; parked _actor_combat_plan_grenade_trajectory 288/5 sha ff9a7477, which equals the park base). A keyed raw-COFF diff over 88 sections finds exactly 1 difference between production and P1: _cross_product2d NODUP -> ANY. P1 against P1-strip: 0 differences, so the view cast is byte-inert. object_audit output is identical for production and P1: FAIL(2), the two residuals only, 0 of 60 symbols differ. /W3 warnings are the same 17 for P1; the strip adds only C4133. The fake scan finds 0 leads in either version. + +The five objects (tree source, no change; each gate object is keyed-identical to build/base): +- path_obstacle_avoidance: 24/24 EXACT, audit PASS (52 symbols, 0 differ), PDB 0, surplus 0 of 11 not identical +- path_smoothing: 6/6, PASS (15), PDB 0, 0 of 10 +- real_math: 84/84, PASS (134), PDB 0, 0 of 35 +- collision_features: 20/20, PASS (30), PDB 0, 0 of 29; _projection_from_vector3d is IDENTICAL to January's decals copy and links PASS, so its rejection is stale +- path_structure_bsp: 6/6, PASS (13), PDB 0, 0 of 10; the HCEX tables are already landed and the split is current + +provider_link against production actor_combat: each of the five is FAIL(1), on _cross_product2d only. Against P1 (provlink2 --subst=source/ai/actor_combat:P1 obj, both orders): all PASS, every row. objdiff 3.3.1 report shows all five at 100% code, functions and data. The admission audit, emulated with the five marked complete and the rejection from patch 03 removed, reports 0 contradicted and 0 revoked. + +Board census: there are 11 _cross_product2d definers. All 10 non-actor_combat copies are SELECT_ANY and section_infos_equal to January's copy. All 10 FAIL the pair link against production and PASS against P1. After P1: +- actor_looking, decals and collision_bsp have no link failures left, but still have function residuals (15/16, 31/33, 27/30). +- geometry still fails on _plane2d_from_points and has 27/30 functions. +- bipeds still fails on _object_get_type and has 42/51 functions. + +No symbols.json, header, parked.json or semantic_*.json change is needed. + +## 2. rasterizer_xbox .bss split with 9 descriptive static names (whole-object admission) + +- **Question:** Should rasterizer_xbox be admitted as Matching? The invented rasterizer_xbox_d3d_globals aggregate and its 23 #define redirects become 23 '= 0' file statics. 14 of the names are bare in January's IDirect3D*() strings. The 9 below are not first-party: - node_matrix_constants (+0x000): INVENTED. - bitmap_dimensions_non_blocking (+0x840): HCEX-convention stem (HCEX static-local 'dimensions'; the HCEX scope form is refuted for January's .bss order). - bitmap_dimensions (+0x844): HCEX-convention stem, same as above. - global_d3d_texture_render_primary[2] (+0x84C): convention stem (January global_d3d_{texture,surface}_ pattern plus the HCEX/Od _rasterizer_target_render_primary enum). - global_d3d_surface_render_primary (+0x854): convention stem; January attests the sibling _render_primary_z. - global_d3d_texture_render_secondary_z (+0x860): convention stem (render_secondary and the _z suffix are attested). - global_d3d_surface_render_secondary_z (+0x868): convention stem, same as above. - global_d3d_texture_render_primary_copy (+0x8A0): INVENTED '_copy' suffix. - global_d3d_surface_render_primary_copy (+0x8A4): INVENTED '_copy' suffix. Yes = apply patches 01-05. No = nothing lands; the object stays NonMatching with object_audit FAIL(22). +- **Would complete:** source/rasterizer/xbox/rasterizer_xbox +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/names_xbox_hs_scen` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** - Fake-stringification: January's strings name 14 of the globals bare, and no string contains 'rasterizer_xbox_d3d_globals', so the aggregate is invented. +- '= 0' declaration order reproduces January's .bss exactly. The strip test fails the audit on 23 rows, so the initialisers are layout-attested. +- There is no cachebeta public in 0x45E028..0x45E8CF, so every name is static. +- Every other audit row is first-party: HCEX static-local srcblend/destblend/blendop_table; the filthy_bitmap_defaults_initialize rename (atlas, 2001 map, HCEX); d3d_palette strings; January's D3DDevice_ flicker relocations. +- Counter-precedents: rasterizer_xbox_shadows was admitted with 2 disclosed descriptive gap statics; collision_debug's descriptive split landed for function credit; eb33baec landed the descriptive macro name match_assert_stack_frame. + +**Evidence against.** - The 2026-09-15 owner ruling prefers no descriptive or invented static names in symbols.json; it held the env_fog (21) and models (13) .bss splits. +- The 2026-09-24 canonical held path_obstacle_avoidance because its 'BSS relabel lacks authenticated private identities'. +- 3 of the 9 names are invented outright (node_matrix_constants and the two _copy names). +- The packet's block comment says the error strings name 'these globals' bare, which overstates it for the 9. RULING.md proposes an optional byte-inert disclosure comment; it is not in the patch. + +**Still blocked / integrator notes.** Only the owner's policy ruling on the 9 names. There is no technical blocker. + +Rebase note: a NEW required config change at cdc8ebd3. 05_parked.json.patch re-baselines __rasterizer_model_draw, because models.c lost its hud_draw.h include and patch 02's prototype removal now flips a declaration-count tie in that parked fuzzy body. It has no strict effect and needs no source change. + +Independent and not name-gated: the reviewer-approved rasterizer_xbox_debug static-wrapper symbols patch (object_audit FAIL(8) -> PASS, gate 18/18, split radius 1) is included under patches/independent/. + +**Measured.** At cdc8ebd3 (HEAD later moved to eb33baec, a docs-only commit; patches re-checked clean there). + +Apply checks: +- All 4 wave-2 patches apply as-is. I regenerated them with zero offsets as 01-04. +- The post-image .c equals the worker's cand_L.c, and the header equals the worker's header. + +Split and gate: +- csplit with the patched config: of 833 objects, only rasterizer_xbox.obj changes. The control split equals build/split. +- gate, candidate plus patched header (shadow; the #error control proves it is used) vs the emulated split: 95/95 EXACT, and the _point_from_line3d guard passes. + +Audits: +- object_audit (split override): PASS. 188 sections ok (.bss 2230 8-align, blend .rdata 108 4-align, .data 6) and 216/216 symbols. Production is FAIL(22). +- provider_link: PASS 15/15 in both orders. +- Storage vs cachebeta: 216/0 disagreements (production has 25). +- /W3 warnings identical to production; fake_match_scan 0. + +Data: objdiff 3.3.1 identical for production and candidate: data 9048/9048, code 91/95 raw with the same 4 pre-existing under-credits. + +Header blast radius (7 includers): +- 6 objects are byte-identical. +- rasterizer_xbox_models: the PARKED __rasterizer_model_draw moves (sha 89b0d7ea -> cbfa8585 at the same 5168 bytes / 348 relocs; objdiff 95.08453 -> 95.07629; strict status unchanged at 12/2). +- tools.parked_functions reports STALE 1 without a re-baseline, and active 2 / stale 0 with the new 05_parked.json.patch. + +Names are load-bearing: reverting only the .bss rows gives gate 86/95 (9 reloc-identity residuals) and audit FAIL(15). + +Combined application with item 2 (either route) is clean, and the post-images are cmp-identical when applied outside the repo. + +## 3. hs_scenario_definitions data split with 9 descriptive static names (whole-object admission, rejection retirement) (SUPERSEDED by canonical; see top) + +- **Question:** Should hs_scenario_definitions be admitted as Matching? The invented wrapper structs, #pragma pack, 11 __declspec(align(4)) and the field_table_alignment padding member become 18 separate January data definitions. This retires the source-layout-incomplete rejection and adds 9 non-first-party static names: - hs_scripts_block_fields (+0x018): HCEX-convention stem; _fields plus January's public block name. - hs_globals_block_fields (+0x090): HCEX-convention stem. - hs_references_block_reference (+0x110): INVENTED; no convention exists for a TU-local any-tag tag_reference_definition. - hs_references_block_fields (+0x11C): HCEX-convention stem. - hs_source_files_block_fields (+0x17C): HCEX-convention stem. - data_array_header_bs_codes (+0x1CC): HCEX-convention stem; _bs_codes plus January's own string 'data_array_header'. - data_array_header_bs_definition (+0x204): HCEX-convention stem. - syntax_node_bs_codes (+0x218): HCEX-convention stem; stem is January's string 'syntax_node'. - syntax_node_bs_definition (+0x240): HCEX-convention stem. Yes = route A (A01-A04) or route C (C01-C03 + A02-A04; C adds HCEX's MAXIMUM_HS_*_PER_SCENARIO enum to the shared header). No = nothing lands; the rejection stays; data stays 484/1112. +- **Would complete:** source/hs/hs_scenario_definitions +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/names_xbox_hs_scen` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** - It retires every objection the rejection cites: invented aggregates, pack/align directives and the padding member. +- .data alignment 8 arises naturally from the two field arrays of 64 bytes or more; the 0x8C..0x90 gap is VC7's per-object alignment pad. +- The candidate's .rdata literal order equals January's. This attests the block-before-fields definition order, and January's leaf_map shows the same idiom. +- The data credit is native, with no semantic_data_matches entry. +- 8 of the 9 names come mechanically from January's own names (public block names, byte_swap_definition name strings) via HCEX-attested Bungie conventions: 10 *_block_fields and 23 *_bs_definition in HCEX. +- Route C's enum is HCEX's exact enum, and January's hs_compile assert text attests it. + +**Evidence against.** - The 2026-09-15 owner ruling prefers no descriptive or invented static names in symbols.json. +- hs_globals_external was rejected because a later build does not authenticate its names; here HCEX has no hs_scenario_definitions compiland at all, so no build authenticates these names. +- hs_references_block_reference is invented. +- The packet has no disclosure comment for the names; RULING.md offers an optional byte-inert one. +- Two new C4090 warnings, caused by the reconstructed tag_groups.h 'char **names' member type. + +**Still blocked / integrator notes.** Only the owner's policy ruling on the 9 names; there is no technical blocker. The owner may rename any single name, for example #3, as a pure rename in A01+A02. + +The function rename (the reviewer fallback) already landed in 6e3e2d35, so no fallback remains. A no leaves the object at the current rejection with 484/1112 data. + +**Measured.** Rebase at cdc8ebd3: +- The worker's A, B and C2 no longer applied, because 6e3e2d35 landed the static byte_swap_script_syntax_data rename. +- A01 and C03 are the worker's final post-images (cand1.c/cand2.c, CRLF) diffed against the tree; they carry only the data split. +- A02 is the 9 inserted static rows only. +- D is split into A03 (config.json) and A04 (rejection removal). +- C1 is reproduced as C01 (header) + C02 (hs.c). +- Every patch passes git apply --check, alone and per route, and together with item 1. Post-images applied outside the repo are cmp-identical. + +Split: csplit with the edited config changes only hs_scenario_definitions.obj (833 compared). + +Gate, audit and storage: +- gate vs the emulated split: EXACT 224 _byte_swap_script_syntax_data 1/1 for both routes (route C with the shadow header and an #error control), guard passed. +- object_audit: PASS for both routes. 23 sections ok, including .data 628/628 with align 4/4 (January's 8-byte alignment), and 40/40 symbols. Production is FAIL(1) on alignment. +- Storage: 40/0; none of the 9 names is a cachebeta public. +- provider_link: nothing to link, PASS. + +Data: +- objdiff 3.3.1: 1112/1112 native, +628 data bytes (production 484/1112, .data 92.773094). +- Without the 9 symbols.json rows, .data is 48.931007%, so the rows are load-bearing. + +Route C consumer sweep (re-run because hs.c changed heavily in 6e3e2d35): +- hs 447/1 (1410 sections, 0 differ), hs_compile 61/3 (0 differ), hs_runtime 64/2 (0 section diffs; 64 $L names shift only). +- objdiff per-function maps are identical to build/base. + +Other checks: /W3 adds 2 C4090 (byte-inert, disclosed); fake_match_scan 0. No parks involved. + +## 4. object_lights: the surplus _object_get_bounding_sphere copy that carries its per-TU __FILE__ literal, plus data_gap's packet (4 statics, the should_render_lights call, the _lights_section entry) + +- **Question:** Should we admit object_lights' surplus _object_get_bounding_sphere COMDAT as it is? It matches January's selected action_vehicle copy in size (144), normalized bytes, all 9 relocation sites/types and 7 of 9 targets. Only its two __FILE__ DIR32 targets differ: they point to "c:\halo\source\objects\objects.h", which is January object_lights' own 33-byte .rdata literal, instead of "..\objects\objects.h". Rule 6 as written ('byte-identical to the selected provider') cannot be met by any source, because object_audit requires that January-owned literal and VC7 emits it only when this COMDAT references it. YES: apply 01, 02, 03_YES, 04_YES and object_lights becomes Matching. NO: 01 and 02 can still land at zero credit, and optionally 03_NO_ALT (+1,541 data under allow_incomplete_unit). +- **Would complete:** source/objects/object_lights +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/objlights_render_debug` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** The January string census gives one owner per spelling. The c:\ objects.h literal is defined only in object_lights, and no relocation anywhere references it. The ..\ literal is defined by action_vehicle and imported by render_objects. _object_get_bounding_sphere is defined by action_vehicle and imported (UNDEF) by the other 8 users, object_lights included. NEW: of 9,420 January literals across all 833 split objects, exactly one has no referrer, and it is this literal, so its only possible referrer is object_lights' own discarded COMDAT copy. The /Od build asserts in 0x443f50 (object_get_bounding_sphere) with "D:\P4\Halo1\source\objects/objects.h", which shows the header used plain __FILE__. Link order is consistent: the image is in descending module order and action_vehicle (module 461) precedes object_lights (152), so a pick-first link keeps the ..\ copy January selected. The P2 control (a single-spelling header) loses the January-owned .rdata: the audit reports it MISSING and data credit drops by 1,100. + +**Evidence against.** The rule 6 text is not met literally, so this is a new exception class: an authentic non-identical surplus COMDAT, proven by an orphan January literal. A whole-program relink that put object_lights first would select the c:\ copy. That cannot happen with January's link order and changes no January-owned section. + +**Still blocked / integrator notes.** Nothing, once the owner answers yes. Advisory: object_lights also carries 5 consumer-local externs with no definer: debug_lights, debug_object_lights, light_data, light_cluster_partition, debug_rasterizer_light_count. They are the same class as render_debug (e). Precedent does not treat that class as a blocker (render_objects and scenario are Matching with such externs). Optional patch 07 resolves them as tentative definitions: byte-inert, and links clean against January's linker_common in both orders. + +**Measured.** Every patch applies at cdc8ebd3. `git apply --check` is clean for each patch alone and for the YES set, the YES+(e) set, the NO set and 01-08 together. The patches are LF; applied one at a time in a throwaway repo with core.autocrlf=true, they reproduce the measured trees byte for byte. The data_gap object_lights.patch rebased unchanged (every hunk offset +4 by the landed OBJECTS_H_FILE define). symbols.json needs 4 in-place "static": true rows; the edited copy is ./symbols.json. Control: csplit with an unmodified config copy reproduced build/split 833/833. With the 4 rows (cfg_OL), only object_lights.obj changes. object_lights is 43/43 EXACT against the emulated split. object_audit PASS: 71 January symbols, 0 differ. The production object against the same split FAILs on exactly the 4 storage rows. pdb_storage: 0 disagreements. The other object_lights_rendering.h includers (render 13/13, render_objects 22/22) are objcmp-IDENTICAL to build/base. surplus: 12 candidate-only COMDATs, 11 identical; the only different one is _object_get_bounding_sphere (only the DIR32 rows at +37/+76 differ). provider_link PASS in both orders for all 33 surplus names. Mini objdiff 3.3.1: code 12294/12294, 43/43, data 1104/2645. Running tools.semantic_progress.apply_semantic_data_matches on the entry credits +1541 (2645/2645) for both the YES entry (unit complete) and the NO_ALT entry (allow_incomplete_unit). The negative control fails closed as expected. fake_match_scan: 0 leads. /W3: only the pre-existing C4133 and C4244 warnings. The full tree built from the patch files only (treeFINAL) gives the same rows: action_vehicle 17/17 and every includer identical. + +## 5. render_debug: helper/vehicle patch (a)-(c), plus the held (d) invented render_debug_globals_definition aggregate and (e) six consumer-local extern boolean debug_* + +- **Question:** (d) How should render_debug's 29,708-byte cache state be spelled? D1: seven separate zero-initialised file statics in the aggregate's member order, with descriptive names render_debug_cache_{strings,entries,game_time,entry_count,string_offset,entry_overflow_reported,string_overflow_reported}. This needs a symbols.json rename plus 6 static rows (lab/D1_OPTION_*.patch). D0: admit the existing aggregate, with its two opaque pad arrays, as it is. Or HOLD. Either yes, with 05 (+06) and 08, makes render_debug Matching. (e) is answerable without a ruling: January's definer is render_debug.c itself (tentative definitions the linker pooled into COMMON). The integrator only needs to confirm optional patch 06, bare `boolean debug_bsp;` etc., the same form as the objects.c precedent. +- **Would complete:** source/render/render_debug +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/objlights_render_debug` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** (e): The six are January linker_common COMMON records 50-55 (1 byte each), referenced only by render_debug.obj and hs_globals_external.obj. Pool oracle over all 242 records: 102 of 105 single-referencer records follow module order. hs_globals_external references 81 pool records and is the position-admissible owner of none of them. The six sit between render_objects' cluster and render's _render, and render_debug (module 87) is the only referencer in that range. The 2001 Bungie linker maps show the six exist exactly when render_debug.obj is linked: 08-15 beta has 5 toggles and no render_debug_structure_decals; 09-25 beta adds debug_permanent_decals together with its only user, render_debug_structure_decals; 09-25 retail has no render_debug.obj and none of the six, while render_objects/render records and other hs toggles remain. The later /Od build interleaves the six byte by byte with render_debug's own cache variables (0xf0afb0-0xf0afc0), which only one object's .bss can do. (d): January's short/gap/short/gap/short/bool/bool layout equals separate `= 0` statics; the aggregate needs pad members (the law (j) signature of an invented aggregate). In the /Od build, hs toggles sit inside the cache-variable span, so it was not a struct there. + +**Evidence against.** (d): No first-party names exist anywhere (cachebeta publics, HCEX.pdb, the 2001 maps, the atlas), so D1 adds 7 descriptive .bss names, an already-held class. The zero initialisers are layout-evidenced, not text-attested. (e): The 2026-09-22 canonical reconciliation excluded a 116-definition COMMON wave because pool adjacency cannot prove TU ownership (rasterizer_frame_statistics counterexample). This packet uses per-symbol evidence (map presence/absence and /Od interleaving), but the /Od build is a later revision, so the integrator should confirm the evidence standard. Advisory: render_debug has 6 C4013 implicit declarations (ai_debug_render and collision_debug_render lack their header includes; 4 callees have no header prototype at all). Production has them too; render.c is Matching with 2 C4013. + +**Still blocked / integrator notes.** (d) needs the owner's choice between D1 and D0 (the naming class). Without it render_debug stays NonMatching, though 05 and 06 can land at zero credit. The C4013 debt is a reviewer advisory that needs owner-header edits with a declaration-count sweep; it was not touched here. + +**Measured.** The review_admit2 (a)-(c) patch (05) applies unchanged at cdc8ebd3; render_debug.c and vehicle_datum.h have not changed since 931ed8dc. render_debug: 36/36 EXACT, object_audit PASS (63/0), pdb_storage 0. surplus: 12 COMDATs, 0 not identical; the new _point_from_line3d is identical to action_charge's selected copy, and its callers are strictly exact. provider_link PASS in both orders. vehicle_datum.h is included only by actor_moving (31/36), physics (13/17) and vehicles (37/39), all objcmp-IDENTICAL to build/base; no header includes it. Mini objdiff 3.3.1 matches production: code 8235/9448, 34/36 on the known hidden_exact under-credit rows, data 30236/30236. (e) patch 06: 36/36, objcmp IDENTICAL; the only change is 6 external symbols UNDEF(0) -> COMMON(1). It links with January's linker_common.obj and with base hs_globals_external in both orders: 0 LNK2005/LNK1169, all six resolved (production leaves 12 unresolved lines). (d) lab (never lands): zero-initialised separate statics reproduce January's .bss exactly (0/0x400/0x7400/0x7404/0x7408/0x740A/0x740B, 29708 B). The whole-TU D1 lab is 36/36 and passes object_audit (69/0) against a lab split. Uninitialised statics give name-hash order and FAIL the audit, so the initialisers are load-bearing and layout-proven. 08 (status flip) applies cleanly. The treeFINAL rebuild from patch files gives the same rows. fake_match_scan: 0 leads. + +## 6. game_engine admission pick: the motion-sensor copy in game_engine_player_get_custom_motion_sensor_positions. (A) the in-loop alias `struct netgame_goal *goal = &global_goal[goal_index];` vs (B) F07's /Od-attested `positions[count] = *(real_point2d *)&global_goal[goal_index].position;`. Each is packaged as a complete admission packet: the review4 house-clean (F01R/F01RB, F02, F03aR, F03b, F04) plus the status flip. There is also a variant without the one-consumer focused headers. + +- **Question:** Q1: game_engine is 180/180 strict exact and passes the whole-object audit either way, and A and B give byte-identical objects. Do you admit (A) the in-loop alias, which the /Od frame at 0x5a20e0 does not have and which is load-bearing, or (B) the /Od-attested view copy, which is load-bearing and so fails the byte-inert condition of your rule-24 narrow admission? Or neither, and game_engine stays held? Q2 (only if Q1 is yes): the 2026-09-21 'do not invent a one-consumer header' ruling applies to F02. Do you take F02 as is (4 new headers), or the variant_no_single_consumer_headers packet? The variant puts the hudg, itmc and netgame layouts back in game_engine.c, their only consumer, and is byte-identical in all 447 TUs. It keeps hud_nav_points.h (one non-owner consumer), because moving the nav-point trio into the genuine hud.h breaks _populate_statistic_buffer through a declared-name-count tie. Q3 (disclosure): admitting game_engine also admits the pre-existing debug_player_color anonymous aggregate with `word pad` members, and the descriptive .bss names _game_engine_teleport_message_ticks and _game_engine_teleport_flash_fade_function. HCEX has these values as static locals of game_engine_update_teleporter. Do you accept them, or are they the held invented-aggregate / descriptive-static class? +- **Would complete:** source/game/game_engine +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/pick_game_engine` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** For B: /Od 0x5a20e0 does one 8-byte aggregate copy. The index is computed once (shl ecx,5) and x and y move as an integer mov pair; this build uses integer movs for struct copies (get_goal_position at 0x59d5b9) and movss for float scalars. The frame is only count, player and goal_index. real_point2d is a layout prefix of real_point3d, and HCEX's real_point3d has no 2D member. The caller is strictly exact. January's assert strings stringify Bungie view casts in actors, actor_looking, actor_moving and observer. For A: plain C, no cast. The same alias idiom is first-party in this TU: /Od goal_matches_player at 0x5b23c0 keeps a goal pointer slot [ebp-8] = &global_goal[i]. + +**Evidence against.** Against A: the /Od frame has no goal pointer slot and copies an aggregate rather than components. The alias is load-bearing (strip -> RESIDUAL). That makes it a non-/Od-attested, load-bearing named local: an owner-gated class, which review3 listed as blocking OBJECT_COMPLETE. Against B: rule-24 narrow admission requires a byte-inert cast, and this one is load-bearing: its strip gives the same RESIDUAL. Ruling 2 of 2026-09-21 keeps rule 24 strict for new punning casts. Both options also inherit the Q3 construct, which the owner has not ruled on: an anonymous debug_player_color aggregate with word pad members. HCEX has those values as static locals red/green/blue/duration of game_engine_update_teleporter. The 2020 /Od build puts unrelated globals between debug_player_color and the flash values. + +**Still blocked / integrator notes.** Needs the owner's pick for Q1 (or hold). The focused-header ruling (Q2) must be settled: F02 as is, or the TU-local variant, which still needs hud_nav_points.h. The debug_player_color / descriptive-static disclosure (Q3) must be settled too. Whoever lands this must re-sweep it together with any concurrent owner-queue packet that edits game_engine.h, player_control.h, hud_messaging.h, sound_classes.h, hud.h or game_engine_king.c. F06 (optional, not packaged) edits game_engine_king.c, a separately held item, and does not fit the NP variant. Full ninja plus stable_verdicts remain the official gate. Nit, not changed: the dead local local_player_count shadows the public function local_player_count(). + +**Measured.** All at cdc8ebd3; the tree was clean before and after. git apply --check is clean for all 19 patch files alone, and for each packet's full set in one call: optionA, optionB, NP-alias and NP-view-copy. F07 alone does not --check at cdc8ebd3, so optionB ships a standalone F01RB (= F01R + F07, byte-checked). Rebuilding each packet from a HEAD export gives exactly the shadow that was measured. Compiles use the production cflags, cwd = shadow root, and coff_compare.section_infos_equal: optionA, optionB and both NP variants are 180/180 EXACT with 0/302 sections changed vs build/base; the control is 180/180. The optionA and optionB objects are identical: same order and no content difference. Full 447-TU sweep with canonical COFF: control head vs build/base is 447/447 SAME. optionA and optionB each give 446 SAME plus game_engine. game_engine differs only in three ways, all EXACT: always_invis is emitted later; the csplit alias `_global_goal+0x400` replaces `_global_variant+0` at 2 relocations; and $L numbering changes. NP vs optionA: 447/447 SAME. The 37 game_engine.h consumers all fall inside the sweep. Admission battery (every candidate): object_audit PASS with text identical to production; pdb_storage 0/269 disagreements; surplus 11 COMDATs, all identical; provider_link PASS, both orders, 39 surplus externals. objdiff 3.3.1 mini project: 27922/32397 code, 173/180 functions, 3792/3792 data, 0 deltas vs prod. audit_semantic_matches accepts 180/180, with the same 7 semantic-coff-only functions as production. tools/audit_object_admission already lists game_engine as a candidate with 0/0 gaps, so the status flip will not be revoked: Halo objects 379 -> 380. /W3: no new warnings. The C4013 console_printf warning and two long->short warnings are gone. Strip test (lab): with neither the alias nor the cast, the function is RESIDUAL, because the induction-variable base shifts to position.y (+4). Both spellings are load-bearing. Ruling variants: the three single-consumer layouts TU-local (vTUnp) are byte-identical everywhere. The genuine broad headers all fail. item_definitions.h moves hud_weapon's _render_weapon_hud. scenario_definitions.h plus the F06 siblings is a strict regression in ai_communication (_ai_communication_update_speech_timers) and makes the parked _ai_test_ballistic_line_of_fire stale. hud.h costs game_engine.c 23 names and flips _populate_statistic_buffer (count oracle, lab only: K=8-12 flips it). hudg cannot move without rewriting 7 HUD TUs. + +## 7. rasterizer_xbox_hardware_geometry: spelling of the no-op MoveResourceMemory wrapper at 0x158460 (A = IDirect3DResource8_MoveResourceMemory vs B = D3DVertexBuffer_MoveResourceMemory) + +- **Question:** January emits two static no-op wrappers: 0x158450 = _D3DResource_MoveResourceMemory@8, and 0x158460 = one directly called MoveResourceMemory forwarder. Which spelling should rasterizer_vertex_buffer_new use for that one call? A: IDirect3DResource8_MoveResourceMemory((D3DResource *)d3d_vertex_buffer, D3DMEM_VIDEO), with 0x158460 named _IDirect3DResource8_MoveResourceMemory@8. B: D3DVertexBuffer_MoveResourceMemory(d3d_vertex_buffer, D3DMEM_VIDEO), with 0x158460 named _D3DVertexBuffer_MoveResourceMemory@8. The argument and the position after the vertex-buffer Unlock block are byte-inert, and a 3-line comment in the source says so. Either A or B completes the object; if you reject both, the hg0 fallback is zero-credit hygiene only. +- **Would complete:** source/rasterizer/xbox/rasterizer_xbox_hardware_geometry +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/pick_hwgeom_models/patches` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** Both options: January's emitted static wrappers prove the call exists (static-COMDAT law, whole-image ret-8 census). The d3d8.h emission order excludes every other forwarder spelling. A only (style census, not byte proof): all 33 of January's Halo-side resource lib calls go through IDirect3D*8_ compat wrappers, with 0 native resource-level spellings. January emits _IDirect3DResource8_Release@4 in progress_bar, and the tree has IDirect3DResource8_Release((D3DResource *)...) at progress_bar.c:1812. This TU already uses typed compat names. B: needs no cast. + +**Evidence against.** No first-party evidence names the spelling. The /Od build is the PC DX9 port, HCEX links no hardware_geometry code, and the October 2001 beta has the same pair without names. D3DMEM_VIDEO and the call position are chosen and byte-inert; the comment discloses that. A needs an XDK-convention (D3DResource *) cast; it is byte-inert, since B produces the same bytes without it. + +**Still blocked / integrator notes.** Nothing, once the owner picks A or B. If neither, the object stays NonMatching: the two _code_ placeholder stubs remain (house rule 7 names; external where January is static). + +**Measured.** Rebase: the source file is unchanged at cdc8ebd3 (blob c2bb9095) and symbols.json rows 5813-5825 are unchanged. The wave-2 patches apply clean. Only the symbols patch index line was refreshed, and a config.json status flip (NonMatching -> Matching) was added. No real change was needed. csplit: split_ctl == build/split (833/833); split_hgA and split_hgB each change only rasterizer_xbox_hardware_geometry.obj. A vs split_hgA: gate --all 17/17 EXACT (_point_from_line3d guard passed); object_audit PASS (25 symbols, 0 differ); pdb storage 0 disagreements (production has 13); 0 candidate-only code COMDATs; provider_link PASS in both orders (6 pre-existing rows: 3 pooled literals + 3 SDK tables); fake_match_scan 0. B vs split_hgB: identical results. cand_A and cand_B have byte-identical Halo sections (vertex_buffer_new 5442bf32, triangle_buffer_new e90e066b) and both 0x158460 bodies are sha 2a2f950f; only the name differs. objdiff 3.3.1 mini report: 898/898 code, 584/584 data for production, A and B, so there is no credit change. hg0 fallback vs split_hg0: 17/17, audit PASS, link PASS, but pdb shows 2 disagreements (the external _code_00158450/460 stubs), so it is not admissible. verify_apply.py: every packet passes git apply --check in the repo and sequential scratch application, and the post-images equal the measured files byte for byte. This also holds stacked with each models packet. + +## 8. models .bss: file-scope `= {0}` statics in January (reverse-use) order (P1; variant P2 with fv as the HCEX static local) vs the first-party in-block static-local form (SL) (SUPERSEDED by canonical; see top) + +- **Question:** Do you admit models.obj with load-bearing `= {0}` initialisers on the render_model defaults, declared in January's .bss order? There are two forms. P1: four file-scope statics fv, change_colors, effect, region, each `= {0}`. P2: default_function_values as an uninitialised static local at render_model function scope (as HCEX records it), plus the other three as `= {0}` file statics. Both contradict the later first-party form: HCEX -lines and the /Od build declare all four uninitialised inside their if (!param) blocks. The strip test fails: without `= {0}` the layout falls back to hash order. YES (P1 or P2) completes models and retires the bss-symbol-layout-mismatch rejection. NO means landing models_C1 (zero-credit storage fix) or models_optSL (first-party form, measured FAIL(4)); the object then stays blocked until first-party names for the three other defaults are found. +- **Would complete:** source/models/models +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/pick_hwgeom_models/patches` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** Measured VC7 law: uninitialised statics are laid out in decorated-name hash order, then `= {0}` statics in declaration order. P1 and P2 are the only name-independent exact forms. Project precedents for a load-bearing `= {0}` that fixes .bss layout: rasterizer_lights (cdc8ebd3), and the player_ui player1_profile_path `= { 0 }` (f7cd2e72); source/ has 69 column-0 static `= {0}` definitions. P1 adds no new names, and program semantics are unchanged. P2 keeps HCEX's first-party static-local storage for default_function_values. + +**Evidence against.** HCEX.pdb and HCEX_Release.pdb record default_function_values as a Static Local of render_model, not a file static. HCEX -lines (the +2-line gaps at 124/128..154/158) and the /Od profile-scope sizes show all four declared inside their if-blocks, uninitialised. The P1/P2 declaration order is the exact reverse of the use and in-block order, with no first-party support. The strip test fails (the redundant-zero-initialiser class). The standing rejection's reopen clause forbids matching-only constructs. Three of the four names are third-party (halocea). + +**Still blocked / integrator notes.** If the owner says NO: models stays NonMatching. The first-party SL form gives offsets 32/48/96/0 vs January's 0/16/64/104, because January's order depends on the decorated-name hash of three lost names, and hash-steering names are forbidden. Not built in this wave (it would be a new form): P2 with fv inside its if-block, which by the law should lay out identically. + +**Measured.** Rebase: models.c/h are unchanged since 954eebd2. The wave-3 C1 patches apply clean and reproduce new/models.{c,h}; OWNER_OPTION_P1 reproduces new/models_owner_option_P1.c. No real change was needed. The packets were rebuilt as standalone per-file patches, because a stacked models.c pair fails `git apply --check` in-repo under core.autocrlf. SL and P2 are the wave-3 lab L1 and P2 forms rebased on C1 (the diff vs the labs is the C1 hunks only). csplit: split_mC1, split_mSL and split_mP2 each change only models.obj. Gate --all is 12/12 EXACT for every candidate; render_model is identical in all four (2144 B, sha bb666c87, 98 relocs). object_audit: production FAIL(4) (offsets 72/88/32/0); C1 FAIL(4); P1 PASS 30/0 (0/16/64/104); P2 PASS 30/0 (0/16/64/104); SL FAIL(4) (32/48/96/0). pdb storage is 0 for C1, P1, P2 and SL (production has 2). surplus_identity: _negate_vector3d and _set_real_point3d are IDENTICAL and pre-existing. provider_link PASS (11 rows) and fake scan 0 for every candidate. models.h shared-header sweep (shadow header, #error control failed every compile, so the shadow was used): first_person_weapons 33/34 (same residual), model_animations 32/32, objects 121/121, render_objects 22/22, render_sky 1/1, all IDENTICAL between the current and C1 headers. objdiff 3.3.1 mini report: 5038/5038 code and 2368/2368 data for every candidate (credit-neutral). The combined hwgeom+models symbols.json changes are independent (csplit), and verify_apply.py passes ALL OK. + +## 9. dead_camera _dead_camera_update: authentic uninitialised next_unit_index read (source/camera/dead_camera.c) + +- **Question:** Can source/camera/dead_camera.c declare `long next_unit_index;` with no initialiser and no else arm, under the original-bug policy? That deletes the current defined stand-in `else { next_unit_index = (long)result; }` and its comment. When no next player is found, the test then reads the indeterminate local. The methodology-template BUG comment in RULING.md would be added. YES/NO. +- **Would complete:** source/camera/dead_camera (4/4 strict, 6/6 sections, 6/6 symbols, PDB storage 0, surplus identical, provider_link PASS 19/19, data 100%) +- **Functions gained:** _dead_camera_update (1,248 padded / 1,235 meaningful) +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/ub_dead_camera_saved_game` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** - January +0x176 `mov eax,[ebp+0x10]` is the fallback of the phi, and the slot is never written before it. Production's defined stand-in differs by exactly this one instruction (`mov eax,esi`). +- n1 20260915: every defined initialiser costs an extra store that VC7 never elides. +- The later /Od build (0x522c90) adds `= NONE` (mov [ebp-8],-1) at the top of the block with no else arm, i.e. the fix was an initialiser. The HCEA donor also uses -1. +- /W4 C4701 on the candidate. +- Landed precedent: ai_communication.c:2527 (7a1d0d91) leaves cause_point uninitialised under the same BUG template. +- The whole-object audit is clean. + +**Evidence against.** - Earlier decisions rejected this exact read: dead_camera_obj_codex_checkpoint ('Recreating the uninitialized read is forbidden'), legacy_residual_donor_truth_audit_20260913 (rejected the 1,235-byte donor), and opus5_150k_w1 (skipped as UB). They were taken under briefs that forbade UB, not as owner rulings under the original-bug policy. +- The read is formally undefined C. The current stand-in is defined and has the same January runtime value. +- There is no _RTC_UninitUse attestation, because the /Od build contains the fix. +- House rules 20 and 21 and the source-credibility gate allow only the narrow original-bug exception. + +**Still blocked / integrator notes.** Nothing technical. Only the owner ruling is outstanding. The integrator must run a full ninja and the stable sweep (workers may not run ninja), then flip config.json:743 to Matching. There is no park to retire. + +**Measured.** Patch 01 (CRLF form, plus an index_lf form) passes `git apply --check`, alone and together with 02/03, in worktree and --cached modes, at both cdc8ebd3 and eb33baec. Applied outside the repo, it reproduces landing.c byte for byte. + +The code change is the same as the held owner_update_bug.patch. Only the comment moves to the methodology BUG template, and it is byte-inert: 26/26 sections and all symbols are identical to the held form. + +- Gate --all: production 3/1/0; candidate EXACT 4/4 (new 288, update 1248, next_player 176, has_allies 112). +- head.obj equals build/base. The candidate differs only in the _dead_camera_update section. +- object_audit against the current split: PASS. No symbols.json change is needed; the _dead_camera_constants static landed in batch 1 and the split already has storage 3. +- pdb_storage: 0 disagreements. +- surplus_identity: 8 COMDATs, all identical to January's selected copies. All are already emitted by production. +- provider_link: PASS 19/19 in both orders. The wave-1 _valid_real_vector3d_axes2 FAIL is gone. +- Data: .rdata 48/48. fake_match_scan: 0 leads. /W3: clean. +- /W4: exactly one new warning, C4701 on next_unit_index (the compiler confirms the disclosed path). +- January bytes: [ebp+0x10] is only read before +0x176, so January deterministically uses the caller's result pointer. + +## 10. saved_game_files _saved_game_files_enumerate_available_to_local_player_index: indeterminate count stored on saved-game-files mutex failure (source/saved games/saved_game_files.c) + +- **Question:** Can number_of_available_profiles be declared without an initialiser and zeroed only after count_enumerated_profiles_in_mapfile(), inside the successful general-mutex branch? On mutex failure, *number_of_profiles then receives an indeterminate value (January stores the low word of the caller's player_index). The held BUG comment would be added, and this reverses the 20260904/20260908 rejection recorded in the parked.json park. YES/NO. (Patch 02 is a zero-credit storage fix that needs no ruling.) +- **Would complete:** source/saved games/saved_game_files: strictly exact 46/46 and audit-exact against the emulated split. Clean completion is CONDITIONAL: 3 PDB-storage disagreements remain unless the lab helper-storage follow-up is reviewed and landed, or the owner accepts the three functions as external. +- **Functions gained:** _saved_game_files_enumerate_available_to_local_player_index (368 padded / 359 meaningful) +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/ub_dead_camera_saved_game` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** - January bytes show the count zeroed only after the count call, inside the success branch. The failure tail stores the untouched player_index home. +- The /Od 0x8646c0 build zeroes the accumulator twice: at the declaration (the later fix) and after the count, which is January's position. +- Every defined alternative was already refuted from the bytes (checkpoint 20260908, n1 20260915, Lane D 20260922). The only defined source that matches would reuse player_index as the counter, which contradicts /Od and makes no sense as code. +- /W4 C4701. +- ai_communication.c:2527 precedent. +- Clean gate, audit and link results. Header blast radius 0. + +**Evidence against.** - The config/parked.json park explicitly records 'reproducing that undefined behavior is rejected even though it makes the section strict exact'. The same position appears in claude_fable_opus_reconciliation_checkpoint_20260908 and saved_game_files_obj_opus_reconciliation_20260904. +- The indeterminate value escapes through an out-parameter the caller can see, which is harder to defend than dead_camera's internal read. +- Rule 17 (combine declaration and initialisation) is locally reversed. /Od attests only the late zeroing position. +- There is no _RTC_UninitUse attestation, because the /Od build contains the fix. + +**Still blocked / integrator notes.** 1. The owner ruling on 03. Patch 02 can land without a ruling. +2. Whole-object COMPLETE under brief section 4, step 3: 3 PDB-storage disagreements remain (_saved_game_files_take_mapfile_mutex, _saved_game_files_release_mapfile_mutex, _saved_game_files_enumerate_default_files). + - /Od attests the mapfile-helper calls at the 6 hand-expanded sites. + - enumerate_default_files has no /Od call-site attestation. + - The fix is a real source change, preserved as lab/LAB_ONLY_saved_game_files_helper_storage_on_top_of_03.diff. It needs its own review. Alternatively, the owner accepts the three as external. +3. Do not flip config.json:398 to Matching on the ruling alone. +4. The integrator must run a full ninja and the stable sweep, then retire the enumerate_available park via tools.campaign.unpark. + +**Measured.** Source is unchanged since wave 1. Patches 02 (storage; its +/- lines equal the held production_storage.patch) and 03 (the held production_bug.patch rebased onto 02) pass --check in both EOL forms, alone and together, at cdc8ebd3 and eb33baec. Applied sequentially outside the repo, they reproduce the candidate .c, the header and symbols.json byte for byte. + +- Gate --all: production 45/1; 02 only 45/1 (storage flip only); 03 only 46/46; 02+03 46/46. Shadow headers were verified with an #error probe. +- csplit emulation: the control run reproduces 833/833 split objects. The edited symbols.json (line 7376, in place) changes only saved_game_files.obj, and only the storage of _enumerate_memory_units. +- object_audit, candidate against the emulated split: PASS (152 symbols, 0 differ). +- surplus: 0 code COMDATs. provider_link: PASS 11/11 in both orders. Data 100% (.bss 540, .data 8, .rdata 5608). +- Header blast radius on 6 includers (game, player_ui, ui_widget, virtual_keyboard, player_profile, playlist_profile): identical gate rows, sections and symbols. +- fake_match_scan: 0 leads. /W3: unchanged at 33. /W4: one new C4701 on number_of_available_profiles. +- January bytes re-verified: +0x91 spill, +0x94 xor edi, and the +0x156 `mov dx,[ebp+8]` failure tail. +- pdb_storage: 3 disagreements remain (take/release_mapfile_mutex, enumerate_default_files). The wave-1 'proven external' dismissal is refuted by law (h). +- LAB variant (static helpers called at the hand-expanded sites): 46/46, sections identical, PDB storage 0, audit PASS against a lab split, link PASS, blast radius 0. + +## 11. first_person_weapons patch B (authentic unguarded NULL dereference of first_person_weapon_animations; rebased onto cdc8ebd3 after patch A landed in b9a8d587) + +- **Question:** May _first_person_weapon_update read first_person_weapon_animations->animations.count without a NULL test at two sites (moving animation and overcharged jitter)? The pointer comes from `count ? TAG_BLOCK_GET_ELEMENT(...,0,...) : NULL`. The patch also drops REAL_MATH_EXTERNAL_{SQUARE_ROOT,MAGNITUDE_SQUARED3D,MAGNITUDE3D}, so magnitude3d inlines as in January and the TU emits three header __inline COMDATs from a strictly exact caller. The rule-6 exception conditions hold. +- **Would complete:** source/interface/first_person_weapons +- **Functions gained:** _first_person_weapon_update (1,533 meaningful / 1,536 padded) +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/ub_fpw_player_profile` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** January bytes: `xor eax,eax; jmp`, then `cmp dword [eax+0x10],3/0xf` with no test, at both sites. The later /Od build (0x61fcea and 0x61fd99) also reads without a NULL test. The HCEA 2011 decompiled source (first_person_weapon_update.c, around lines 138-145) has the same unguarded read. With the guards restored, the only difference from January is 4 inserted instructions, so no defined spelling can match. The path is latent: switch_weapons commits weapon_index only when first_person_weapon_animations.count is nonzero. BUG-commented authentic defects already exist in 18 source files, including uninitialised reads. + +**Evidence against.** The source dereferences a pointer that the statement before it may set to NULL, so house rule 21 ('undefined/nonsensical logic') applies literally even though the path is unreachable. The defined-behaviour body is already in the tree at zero credit (park 95.21506). Refusing costs one function. + +**Still blocked / integrator notes.** Nothing technical. The item needs only the owner's yes on the authentic-defect class. The integrator must then run the full ninja build and the stable sweep; only this TU changes. + +**Measured.** Patches 01_fpw_B_source, 02_fpw_B_retire_park and 03_fpw_B_status_matching pass git apply --check at cdc8ebd3 (and on eb33baec, a docs-only commit that landed during the run). Tree: gate 33/1. With B: gate --all 34 exact / 0 residual / 0 unwritten, _point_from_line3d guard passed. No split regeneration is needed: a control csplit from cdc8ebd3 config matches build/split on all 833 objects. object_audit against the emulated split PASSES, with 45 January symbols and 0 differences. The only new surplus is _magnitude3d, _magnitude_squared3d and _square_root. All three are IDENTICAL to January's selected copies (action_charge, action_alert) and have 0 NODUP definers; provider_link passes both orders for all 12 surplus symbols. pdb_storage: 0 disagreements. Data 536/536. objdiff 3.3.1 against the emulated split: 29/34, with update at 100 (tree 28/34, update 95.21506). The other 5 functions are objdiff 3.3.1 false negatives already credited by semantic_matches.json or the accepted_ledger, and all 5 are gate-EXACT, so the strict view is 34/34. fake_match_scan finds the same single authenticated lead as the tree. /W3 shows 0 TU-local warnings; the one extra line is the existing real_math.h(810) warning. No header is touched, so there is no blast radius. January bytes confirm both unguarded reads (0x23e/0x255 and 0x28d/0x2a5). The BUG comment's claim that the path is unreachable was checked in switch_weapons. + +## 12. player_profile R1-R3 (uninitialised serialised 512-byte block; seek failure skips file_close; close(&file, NONE) after delete-while-open), rebased onto cdc8ebd3 after zero-credit packet A landed in 6e3e2d35; R3 BUG comment amended + +- **Question:** Does the owner reverse the 2026-09-09 saved-game rejection and admit all three January failure-path defects with BUG comments? R1: the `union player_profile_block block;` in write_thread_proc and create_default has no initialiser, so 444 stack bytes are written to disk. R2: create_default folds file_set_position into the open condition, so a failed seek leaks the file. R3: player_profile_new deletes the file while it is still open, sets the index to NONE, then calls saved_game_file_close(&profile_file, NONE), which fails its assertions. All three are required for the object. +- **Would complete:** source/saved games/player_profile +- **Functions gained:** _player_profile_create_default_profiles_on_disk (275/288); _player_profile_write_thread_proc@4 (349/352); _player_profile_new (456/464) +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/ub_fpw_player_profile` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** Since the 2026-09-09 rejection, all three shapes have first-party /Od attestation. R1: 0x8596d0 and 0x85acf0 have no initialiser on block. R2: 0x85ae02 has the seek inside the open condition. R3: 0x85d1fa sets NONE, then 0x85d20c runs the shared close. HCEX.pdb gives the union player_profile_block type and the profile_file/full_path local names. No defined spelling can reproduce the bytes; earlier waves measured the alternatives. BUG-commented authentic defects already exist in the tree, for example the uninitialised cause_point read in ai_communication (7a1d0d91). + +**Evidence against.** The owner already rejected exactly these three shapes on 2026-09-09. R1 discloses 444 stack bytes into a saved file. The /Od build attests only the missing initialiser: in the later format the block is fully overwritten, so the disclosure is January-format-specific. R3 passes NONE to an asserted API and deletes a file that is still open. R2 leaks a handle on seek failure. House rule 21 applies. + +**Still blocked / integrator notes.** Nothing technical. The object needs yes on all three of R1, R2 and R3; with a partial yes it stays incomplete (R1 blocks write_thread and create_default, R2 blocks create_default, R3 blocks new). Disclosed non-blockers: read and get_from_path keep `byte block[512]`, although HCEX types read's local as the union; the globals type names stay descriptive unless optional 04a is used. The integrator must then run the full ninja build and the stable sweep. + +**Measured.** The old owner_gated_over_production.patch still applies at cdc8ebd3 and reproduces final_og.c exactly. The R3 BUG comment was amended to state the delete-while-open; this is comment-only and changes 0 of 60 sections. Patches 04_pp_R1R3_source, 05_pp_retire_parks and 06_pp_status_matching pass git apply --check, individually and together with 01-03. Tree: gate 19/3. Candidate: gate --all 22 exact / 0 residual / 0 unwritten, guard passed, with no split regeneration needed. object_audit PASSES, with 51 January symbols and 0 differences. The surplus list is identical to the tree's (no new surplus, 0 code COMDATs), and provider_link passes both orders for all 8 surplus symbols. pdb_storage: 0 disagreements. Data 1644/1644. objdiff 3.3.1: 100.0, code 4119/4119, 22/22 (tree 95.34539). fake_match_scan: 0 leads. /W3 is identical to the tree, with 0 TU-local warnings. No header is touched. January bytes were re-read: R3 at 0x151 delete, 0x159 `or esi,-1`, 0x164 close(&file, esi); R2 at 0xa3 `je 0xec`, which skips file_close; R1 has no fill before file_write(0x200). There is also an optional variant with the byte-inert HCEX type names advised by reviewer 3: optional/04a, then 04b, applied as two separate git apply commands. It gates 22/22 and all 60 sections are identical. + +## 13. game_engine_king: _find_next_hill keeps January's uninitialised no-candidate return (next_hill), plus the cachebeta storage fix, for whole-object admission + +- **Question:** Do you admit game_engine_king.obj as a complete object when _find_next_hill keeps January's uninitialised no-candidate return, disclosed by the policy-form 'BUG (preserved for exact matching)' comment? If yes, which spelling: 01, the review2 packet's early-return form, or 01A, the /Od 0x5bd630 single-exit form (`next_hill = king_engine_hills[hill_index]; break;` then one `return next_hill;`)? The two produce byte-identical objects. A NO applies only if_declined/king_source_storage_only.patch + 02 at zero credit, but it leaves open whether the function credit production already takes for this read (_find_next_hill, 112 B, since 2026-09-02) should stand. +- **Would complete:** source/game/game_engine_king +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/ub_king_glow/king` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** January bytes: at +03, push ecx reserves [ebp-4], which is never written; at +52, mov eax,[ebp-4] returns it on the loop-exhausted path. + +The later first-party /Od build (0x5bd630) sets its RTC init flag only on the found path, then calls _RTC_UninitUse with the string "next_hill". So the local's name and the read are both in the later source. The function is single-exit there. + +Playbook 'Original bugs' gate: January proves the read, an independent build corroborates it, and every defined form measured is 28/29 (5 at 931ed8dc, 1 at cdc8ebd3). + +The function and the whole object reach strict exact with a clean section-4 audit. + +Owner precedents (2026-09-20): +- ai_script.c is Matching and carries an owner-admitted read of an unset stack slot: a missing vsprintf argument makes it read the saved-EDI home (ai_script.c:2765). +- _actor_emotion_update: an out-of-bounds read admitted at 8e4309dd. + +The read has been in production since 2026-09-02; the ruling certifies it, it adds no behaviour. + +**Evidence against.** Brief sections 2 and 7 make this class owner-gated, and dead_camera is still held on the same class. + +On 2026-09-20 the owner excluded the uninitialised-read donors _dead_camera_update and _compare_profile_sections (astra rejected-hypotheses, item 8). Those were not /Od-authenticated, but the class is the same. + +King would be the first Matching object with a load-bearing C4700. + +In the packet form (01), next_hill is never assigned, so a reviewer could read it as a local whose only role is the match. The /Od single-exit form (01A) answers this: it is byte-identical and raises no C4700. + +Behaviour: on a map with one distinct hill and moving hills enabled, January stores garbage in king_globals.hill_id. The corrected build keeps the current hill. + +**Still blocked / integrator notes.** Only the owner ruling. On a YES the integrator still has to run the full ninja, the stable function diff, parks, the admission audit and pytest. The header edit reaches only king.c. Nothing technical is open. + +**Measured.** Tree: HEAD eb33baec, which is cdc8ebd3 plus one ledger-only commit; clean before and after. + +Rebase: the review2 OWNER_GATED source patch applied unchanged. The result is review2's owner_bug_comment.c plus exactly the two f7cd2e72 game_variant renames. The semantic_data_matches patch failed (b9a8d587 had appended entries), so I regenerated it. All patches are regenerated as canonical git patches 01-05, plus alt/01A and if_declined/. + +Apply checks: git apply --check passes on each patch, on 01-05 combined, and on king + glow combined. --whitespace=error-all is clean. Trial-applying onto tip copies reproduces king/new byte-for-byte (CRLF), and the JSON parses. + +Gates (shadow patched header; a #error probe proved the patched header is the one used): +- 01: 29/29 EXACT against build/split and against the emulated split (csplit with the edited symbols.json). The emulated split differs from build/split only in game_engine_king.obj. +- 01A and storage-only: also 29/29. Their objects have 59 sections, 0 section differences and 0 symbol-row differences against 01. +- Only warning: C4700 next_hill. The /Od single-exit form raises none. +- Defined result in the /Od shape (next_hill = hill_id): 28/29, so the read stays load-bearing. + +Audit and linkage: +- object_audit against the emulated split: PASS, 39/39 January symbols, .data 136/136 and .bss 560/560. The controls FAIL(23) on storage, as expected. +- pdb_storage: 0 disagreements (production has 23). +- Surplus: 22 sections, all identical to January's copies. provider_link: 22 rows, PASS in both orders. 0 NODUP definers. +- 0 UNDEF references to the 23 re-storaged names in build/base (621 objects) or build/split (833). +- The header is included only by king.c. fake_match_scan: 0 leads. +- The _king_engine data entry measures 136 / 23 / 4009f5b6... with target == base in 8 of 8 combinations. + +Emulated chain (objdiff 3.3.1; the control mini row equals the production row): +- Halo complete units 379 -> 380; complete_code +4,865; complete_data +876; matched_data +136. +- The data credit validates without allow_incomplete_unit. The .bss ownership snapshot validates. +- Revoked []; parks 86/0/0; admission 11/0/2/0 with 0 contradicted. +- With glow also applied: 381. + +## 14. glow _get_particle_world_position: two uninitialised stack-array reads (traversal_left_vectors never built on the 2- and 3-marker paths; traversal_time_indices[1] never set on 3-marker interval 1) + +- **Question:** Do you admit glow.obj as a complete object when get_particle_world_position reproduces January's two uninitialised stack-array reads? The first is that the 2- and 3-marker paths never build traversal_left_vectors, which spline 3 reads. The second is that 3-marker interval 1 writes its midpoint knot into [2], so [1] is read unset. Each carries a policy-form BUG comment. These are in-bounds reads of automatic arrays with no struct-layout dependency, so do you also waive the compile-time layout assertion that the 2026-09-20 ruling attached to _actor_emotion_update? On a NO nothing is applied and the current defined-C park (2528/55, 49.07%) stays; review2 rejected the only defined fallback. +- **Would complete:** source/objects/widgets/glow +- **Functions gained:** _get_particle_world_position (1,744 padded / 1,729 objdiff bytes) +- **Packet:** `research/fifty_objects_20260925/w/owner_queue/ub_king_glow/glow` +- **Apply-ready at cdc8ebd3:** yes + +**Evidence for.** Both defects are target-proven by January's control flow. The later first-party /Od build (0x798de0) contains both verbatim: +- Its RTC descriptor names traversal_left_vectors [ebp-0xa8], which only the default loop's cross_product3d writes. +- In case 1, both the time_indices stores (0x799533 and 0x799639) go to [2]. + +HCEX.pdb gives the same local names. + +The bounded defined search fails: n3a v3 is +592 B, P8 has 71 REAL regions, and this wave's single-defect repairs are each 24/1. + +The function and the object become strict exact with a clean section-4 audit. + +Owner precedents (2026-09-20): Matching ai_script.c has an admitted unset-stack-slot read, and _actor_emotion_update's out-of-bounds read was admitted at 8e4309dd. + +The reads have no layout dependency, so no assertion is meaningful. + +**Evidence against.** The class is owner-gated (brief sections 2 and 7), dead_camera is held on the same class, and the owner refused the 2026-09-20 uninitialised donors (dead_camera, compare_profile_sections). + +The behaviour is real and visible: glows with 2 or 3 markers use stack garbage for the left offset (v*cosine), and on 3-marker interval 1 the second spline knot is garbage. + +The packet adds point<->vector view casts. They meet the brief's rule (/Od-attested per site, compatible layout, byte-inert strip, strictly exact caller, disclosed) but still need to be admitted. + +Byte-inert nits: NUMBEROF vs the /Od signed literal 4; the locals sine/cosine shadow the real_math.h inlines; the BUG comment's range is end-exclusive (correct as written). + +**Still blocked / integrator notes.** Only the owner ruling, including the layout-assertion waiver. On a YES, 01, 02 and 03 must land together, followed by the integrator's full ninja, stable diff, parks, admission audit and pytest. Only glow.c changes; no header. + +**Measured.** Rebase: +- glow.c/.h are untouched since e9e62b78. The glow.c and parked.json parts of wave-2 production.patch apply unchanged. +- The rebased glow.c == scratch/w/glow/cand_final.c byte-for-byte. +- The config.json hunk failed (b9a8d587 flipped light_volumes.c two lines above), so I regenerated it as a one-line status flip. +- Patches 01-03 are canonical git patches. git apply --check passes on each, on 01-03 combined, and on king + glow combined. --whitespace=error-all is clean. Trial-applying reproduces glow/new byte-for-byte. + +Gates (gate.py --all --forbid-emitted-symbol _point_from_line3d): +- Packet: 25/25 EXACT; _get_particle_world_position EXACT 1744. +- Tip control: 24/1, [size 2528!=1744, relocs 55!=43, sha]. +- 0 TU-local /W3 warnings. +- objcmp tip vs packet: 1 of 56 sections differs (this function); 0 symbol-row differences. + +Strip tests at cdc8ebd3: +- Knot repaired only: 24/1 [sha]. +- Left vectors = {0} only: 24/1 [size 1776!=1744, sha]. Each defect is therefore independently load-bearing. +- index < 4: 25/25 (byte-inert). +- review2's no-casts variant: 25/25, but raises C4133, so the casts are type correctness, not decoration. + +Audit and linkage: +- object_audit: PASS, 36/36 symbols; the surplus list is identical to production's. +- Surplus: 20 sections, all identical to January's copies. provider_link: 20 rows, PASS in both orders. 0 NODUP definers. +- pdb_storage: 0 disagreements. Data .rdata 392/392; no data entry is needed. +- January bytes re-read: left vectors live at [ebp-0xc4, ebp-0x94). They are written only by the default loop (+0x21b/+0x23e/+0x259) and read by the spline-3 leas (+0x637..+0x64c). Case 1 jumps to +0x5c6, which stores [ebp-8]; +0x5d2 then reads [ebp-0xc] unwritten. +- /Od RTC names confirmed. + +Emulated chain: +- Halo complete units 379 -> 380; complete_code +6,987; complete_data +392; matched_code +1,729; matched functions +1. +- Parks 86 -> 85 (0 stale or invalid); revoked []; admission 11/0/2/0. +- Applying 01 without 02 fails progress with 'parked-function evidence is stale or invalid'. +- With king also applied: 381. diff --git a/docs/object_matching_logs/claude_fifty_objects_canonical_reconciliation.md b/docs/object_matching_logs/claude_fifty_objects_canonical_reconciliation.md new file mode 100644 index 00000000..a0bf5bab --- /dev/null +++ b/docs/object_matching_logs/claude_fifty_objects_canonical_reconciliation.md @@ -0,0 +1,76 @@ +# Claude fifty-object lane: canonical reconciliation + +The donor is `claude/fifty-objects-20260925` at `4e84c212`, based on +`e9e62b78`. The receiving canonical base is `jonas/exact-pilots` at +`dbcea3d6`. This integration used the existing objdiff 3.3.1 binary on +both sides; `configure.py`'s 3.6.0 pin was not used to re-score the lane. + +## Measured result against current canonical + +| Measure | Before | Reconciled | Net | +| --- | ---: | ---: | ---: | +| Halo objects marked Matching | 364 / 468 | 381 / 468 | +17 | +| Strict-exact functions, stable 8,252-row sweep | 7,600 | 7,614 | +14, 0 lost | +| Newly exact meaningful function bytes | | | +8,775 | +| Newly exact padded function bytes | | | +8,864 | +| Halo credited code bytes, including status/scorer effects | 1,564,286 | 1,573,109 | +8,823 | +| Halo credited data bytes | 2,580,532 | 2,583,826 | +3,294 | +| Valid active parks | 96 | 86 | 0 stale, 0 invalid | + +The meaningful/padded function totals are the 14 gained section identities +from the stable sweep cross-checked against `semantic_report.json`. The +net credited-code delta is **not** substituted for newly exact function +credit: object-status/scorer effects account for its extra 48 bytes. + +## Conflict and policy resolution + +- `path_structure_bsp.c`: retained canonical's explicit eight-element + `real const` arrays. The second table's authenticated symbol entry is + present once in `symbols.json`. +- `hs_scenario_definitions.c`: retained canonical's separately defined, + already-Matching data and private `hs_syntax_data_byte_swap` name. The + source pointer and `symbols.json` name agree. +- `symbols.json`: kept the union of nonoverlapping donor names and canonical + data rows; no JSON reserialization or descending-address insertion. +- `object_admission_rejections.json`: removed only rejections resolved by + the merged source/provider repairs or by canonical's earlier independent + work. The dynavobgeom rejection remains. +- `rasterizer_xbox_dynavobgeom.c`: retained the genuine type/layout assertions + and the donor's source improvements, but did **not** mark the object Matching. + Its 17 target functions and owned data remain exact. The stock SDK-table + coalescing criterion conflicts with canonical's existing ruling, and + `global_window_parameters` still has consumer-local declarations. No + whole-object credit is granted pending a uniform policy/owner audit. +- Layer 2's two random-seed lock prototypes remain in `real_math.h`'s + `RANDOM_MATH.C` section. The supplied first-party `random_math.c` includes + `real_math.h`, not the reconstructed `random_math.h`, and `main.c` needs + these declarations. Their simultaneous declaration-count effect is + disclosed; byte evidence alone does not identify the exact original + header placement. The newly moved no-argument prototypes were reformatted + with `void` on its own line. A future full random-math header consolidation + must retain the same whole-board no-regression gate. +- P7's removal of the unused `hud_draw.h` include from + `rasterizer_xbox_models.c` remains. The include has no direct object-byte + effect; its declaration-count interaction is disclosed, and the removal + is an ordinary dependency cleanup rather than a filler declaration. + +The donor's held owner queue and fuzzy experiments remain in +`research/fifty_objects_20260925/`. No January-bug candidates or the +five-object actor-combat provider packet were silently admitted. + +## Gates + +- Full Ninja build: passed with objdiff 3.3.1. +- Stable exact-function diff: 14 gained, zero regressions. +- Parks: 86 active, zero stale/invalid. +- Admission audit: zero contradicted, zero revoked; dynavobgeom is explicitly + rejected, not silently admitted. +- `python -m pytest -q tools`: 1,159 passed, 5 skipped, 26 subtests. +- Production-path `git diff --check` (`config source docs tools`): passed. +- Fake-match scan: one new **zero-credit** lead in the parked + `first_person_weapon_update` body, an empty then-arm attested in the + donor's `/Od` evidence. No new lead in newly credited exact bodies. + +The donor's raw research tree contains captured patch/diff examples with +intentional trailing whitespace. It is retained as evidence, not production +source, and is excluded from the production-path whitespace assertion. diff --git a/research/fifty_objects_20260925/.gitattributes b/research/fifty_objects_20260925/.gitattributes new file mode 100644 index 00000000..43fa68bb --- /dev/null +++ b/research/fifty_objects_20260925/.gitattributes @@ -0,0 +1,2 @@ +# evidence copies are kept byte-for-byte (patches must still apply) and are not style-checked +* -text -whitespace diff --git a/research/fifty_objects_20260925/SKIPPED.txt b/research/fifty_objects_20260925/SKIPPED.txt new file mode 100644 index 00000000..ced26a1b --- /dev/null +++ b/research/fifty_objects_20260925/SKIPPED.txt @@ -0,0 +1,23 @@ +Files over 409600 bytes left in scratch (not copied): +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\bounding_sphere\final\action_vehicle.c (diff vs source/render/render_objects.c is 60811 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\bounding_sphere\final\object_lights.c (diff vs source/render/render_objects.c is 103329 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\collisions\final\matrix_math.c (diff vs source/physics/collisions.c is 76828 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\game_engine_clean\final\source\game\game_engine.c (diff vs source/game/game_engine.c is 80693 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\game_engine_clean\final\source\interface\hud_nav_points.c (diff vs source/game/game_engine.c is 229480 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\game_engine_finish\final\source\game\game_engine.c (diff vs source/game/game_engine.c is 155153 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\game_engine_finish\final\source\interface\hud_nav_points.c (diff vs source/game/game_engine.c is 229482 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\path_audit\lab\cand_av_dist.c (diff vs source/ai/path.c is 76483 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\path_audit\lab\cand_av_ogbs.c (diff vs source/render/render_objects.c is 61655 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\path_audit\lab\cand_decals_pp2d.c (diff vs source/render/render_debug.c is 129147 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\path_audit\lab\cand_ol_nolocal.c (diff vs source/ai/path.c is 118294 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\provider\action_charge\cand1.c (diff vs source/objects/objects.c is 174687 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\provider\action_vehicle\cand1.c (diff vs source/structures/leaf_map.c is 64043 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\provider\bored_camera\cand1.c (diff vs source/objects/objects.c is 151552 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\provider\object_lights\cand1.c (diff vs source/structures/leaf_map.c is 106196 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\provider\path_obstacles\cand2.c (diff vs source/objects/objects.c is 162670 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\provider\player_control\cand1.c (diff vs source/objects/objects.c is 197248 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\provider\players\cand1.c (diff vs source/math/geometry.c is 158783 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\rasterizer_xbox_profile\candidate_files\source\rasterizer\rasterizer.c (diff vs source/rasterizer/xbox/rasterizer_xbox_profile.c is 76410 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\sound_manager\final\sound_definitions.c (diff vs source/sound/sound_manager.c is 107261 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\weapons\final\action_charge.c (diff vs source/items/weapons.c is 130496 bytes; wrong mapping or whole-file rewrite) +C:\halo-worktrees\claude-fifty-objects-20260925\scratch\w\weapons\final\object_types.c (diff vs source/items/weapons.c is 140633 bytes; wrong mapping or whole-file rewrite) diff --git a/research/fifty_objects_20260925/integrator_kit/WORKER_BRIEF.md b/research/fifty_objects_20260925/integrator_kit/WORKER_BRIEF.md new file mode 100644 index 00000000..c02aeaf7 --- /dev/null +++ b/research/fifty_objects_20260925/integrator_kit/WORKER_BRIEF.md @@ -0,0 +1,230 @@ +# Worker brief - Halo January 50-object campaign (lane claude/fifty-objects-20260925) + +Worktree (shared by all workers): `C:\halo-worktrees\claude-fifty-objects-20260925` +Base: canonical jonas/exact-pilots `e9e62b78`. Scorer frozen: objdiff **3.3.1** (never replace it). + +## 0. Hard rules for workers (violations corrupt everyone's work) + +- **Never edit any tracked file** (source/, config/, tools/, docs/, headers, symbols.json, + parked.json, config.json). Never run `ninja`, `configure.py`, `git add/commit/checkout/reset/stash`. + The integrator applies every change. You work ONLY under `scratch/w//`. +- Compile candidates with `python tools/campaign/gate.py source/ --source scratch/w//cand.c --all --out scratch/w//cand.obj` + (PID-isolated; safe in parallel). `--source` may be anywhere; the unit's directory is on /I. +- The January target object is `build/split/.obj`; the current production build is + `build/base/.obj`. Treat both as read-only. +- Analyze leaked/first-party executables as DATA only. Never execute them. +- Append findings to `scratch/w//LEDGER.md` AS YOU GO (a cut-off run keeps nothing else). + +## 1. What counts + +Strict exact = `coff_compare.section_infos_equal` (size, normalized bytes, relocation count, +type, address, target, addend). gate.py prints `EXACT` rows. Fuzzy %, instruction counts or a +coincidental SHA are not exactness. An object is COMPLETE only when every January-owned function +AND data/BSS section, every symbol (name, storage class, section, offset), and all surplus +emissions (COMDAT helpers, literals, SDK tables) are admissible - see section 4. + +Never count: scorer-version effects, status edits, already-identical bytes, fuzzy gains. + +## 2. House rules (all changed source) - docs/campaign_house_rules.md is authoritative + +void on its own line for empty params; one parameter per line; explicit `return;` / valid +return values; typed tag/object access macros; prototypes in genuine owner headers (never a +consumer-local prototype for another file's function); `real` not `float`; cseries.h macros +(TEST_FLAG/SET_FLAG/FLAG/PIN/MIN/MAX/NUMBEROF...) over hand bit twiddling; correct enum constants +(also in switch tables); combine declaration+initialisation where natural; authentic or +descriptive names (never code_/bss_+address); assertions via the lazy project macros +(match_assert/match_vassert/... with the right predicate sense; see docs/assertions.md). + +Rule 6: never hand-expand or hand-copy point_from_line3d or any header helper. A shared-header +`__inline` may emit a COMDAT ONLY if the copy is byte-identical to January's selected provider, +the caller is strictly exact, the full sweep has zero regressions and ordinary provider links +pass in BOTH orders (scratch/tools/provider_link.py). No blanket COMDAT permission. + +Rejected as fake matching (the STRIP TEST: remove the decoration; if the plain spelling no longer +matches, the decoration IS the fake): decoration-only parentheses, redundant zero stores without +independent evidence, filler declarations/dummy locals (they are the name-count ORACLE, never a +landing), do{}while(FALSE) or one-trip loops to buy inline budget, volatile/aliasing tricks, +pragmas, forced inline, inline asm as a general lever, invented UB. A new 3D-to-2D (or other +representation) view cast needs per-site first-party /Od attestation, compatible prefix layout, +a byte-inert strip test, a strictly exact caller and ledger disclosure. Reproducing an authentic +January bug needs target+layout proof, a BUG comment and owner approval - report, don't land. + +Held items you must NOT retry: path_obstacles bare-parenthesis match, actor_aim_grenade invented +goto, hud_draw optimizer pragma, s3tc live out-of-bounds behaviour, render_sprite memory +corruption, flags `x * height` with x just set to zero, any incompatible helper provider. +decals.c / physics.c are closed for this lane unless you hold NEW evidence for the specific +load/slot/x87 residuals recorded in docs/object_matching_logs/claude_decals_physics_20260924.md. + +## 3. Evidence sources and tools (use these before guessing) + +- January bytes/relocs: `python tools/campaign/tinfo.py source/ [--fn F] [--data]`, + `python tools/campaign/alndiff.py source/ --ours-object ` (aligned diff; never + trust gate.py --disas index pairing), `python tools/campaign/relocdiff.py source/ [obj]`, + `python tools/campaign/real_regions.py source/ --ours-object `. +- Lane helpers in scratch/tools/: `sbs.py` (side-by-side range), `dis_range.py`, + `reloc_segments.py` (instruction census between relocation anchors), `slot_census.py` and + `slot_refs.py` (frame slots), `leafswaps.py` (classify alndiff blocks LEAF/SLOT/REG/OTHER). +- Later first-party **/Od+/RTC build** (statement order, real calls vs expressions, named locals as + frame slots, RTC descriptors naming every address-taken aggregate, assert LINE numbers): + `python scratch/tools/odbuild.py str ""`, `... callers 0xADDR`, `... fn 0xADDR --out f.txt`. + odbuild misses aligned-frame prologues (`push ebx; mov ebx,esp; and esp,-8`): then use + `python scratch/tools/od_linear.py 0xSTART 0xEND out.txt`. It is a LATER revision - evidence for + names/types/shape only; every fact must be double-attested against January's own bytes. +- **HCEX.pdb** (2011 PPC SHIP build; real names/types of params and stack locals, file statics): + `"C:/Users/isabe/Documents/Codex/2026-07-13/i-w/research/tools/DIA2Dump/x64/Release/DIA2Dump.exe" -sym "C:/Users/isabe/Documents/Codex/2026-07-13/i-w/research/hcea_jun2011_prototype/payload/Halo CE Anniversary (Jun 24 2011)/HCEX.pdb"` + (enregistered scalars are absent; layouts/offsets do not transfer). +- cachebeta.pdb publics (January storage truth: public = external, absent = file-static): + `scratch/tools/cachebeta_publics.txt`, checked by `python scratch/tools/pdb_storage.py source/`. +- Halo CE symbol atlas / Marathon source / Bungie fragments: names and idioms, not byte proof. +- Ghidra 12.1.2 headless: `C:/Users/isabe/Documents/Codex/halo-tools/apps/ghidra_12.1.2_PUBLIC` + (support/analyzeHeadless.bat); IDA Free 9.4 is GUI-only. Record exactly what a tool established; + a decompiler rendering is not original source. +- Existing ledgers: `docs/object_matching_logs/**`, parks in `config/parked.json` + (`python -B -m tools.parked_functions`), rejections in `config/object_admission_rejections.json`. + READ THE NEGATIVE EXPERIMENTS before probing; do not repeat recorded inert spellings. + +## 4. Whole-object admission audit (for any object you claim complete) + +1. `python tools/campaign/gate.py source/ --source --all --out `: every row EXACT. +2. `python scratch/tools/object_audit.py source/ `: every January-owned section and + symbol (storage, section, offset) matches; lists candidate-only surplus. +3. `python scratch/tools/pdb_storage.py source/` (on the production build; for a candidate + reason from its symbols): storage vs cachebeta publics. +4. Surplus: `python scratch/tools/surplus_identity.py source/` and + `python scratch/tools/provider_link.py source/ ` - every surplus COMDAT must be + byte-identical to January's selected copy and pair-link (no LNK2005/LNK1169) in both orders. + Known conflicts: NODUP hand copies (`python scratch/tools/nodup_census.py _sym ...`). +5. Data: `python tools/campaign/tinfo.py source/ --data` vs `--base`; objdiff 3.3.1 has a + known '$'-literal relocation-name defect - a data section that is byte+relocation identical + under coff_compare but <100% in build/report.json is a scorer defect, handled by a pinned + config/semantic_data_matches.json entry (integrator applies; single-section entries only). +6. Check config/object_admission_rejections.json and parks for the unit. + +## 5. Decoded compiler laws (use as hypothesis generators; each has a ledger) + +- Frame-size mismatch (`sub esp,N`, see scratch/baseline/frame_census.txt) is STRUCTURAL: a + different set/scope/type of homed locals, never a tie. Slot sharing is gated by declaration + SCOPE (an object may merge into another's slot only if neither scope encloses the other); + address-taken locals conflict until the end of their declaration scope. Below 0x80 total the + frame order is size-ascending + per-reference bubble-up; above 0x80 a quicksort on + (1000*refs)/size. A partly homed aggregate costs its whole extent. +- Single-exit law: January usually returns ONCE at the bottom (result/valid flag), not early + returns; count return statements. Fixing it on a static cascades to callers (private ABI). +- /Od readout first: named locals (count user-area frame slots, not only RTC aggregates), statement + order, which helpers are real calls, loop-counter scoping, argument order of helper calls. +- Inline gating: per call SITE, callee cost vs block-weight budget; each extra if/&&/|| level on + the path lowers the budget; an early return costs one step for the rest of the function; a + `= {0}` aggregate initialiser and a match_assert in the helper raise cost. Measure the boundary + with lab copies of the call placed along the path (lab only). +- M8: x87 operand order of inlined helpers follows IL-local ordinals mod 8 of their parameters; + helper ARGUMENT order matters, bare source operand order of `a*b` is inert. +- Store/call order: a store through a pointer cannot cross a call, so its position relative to a + call IS January's statement order. Post-increment inside a call argument vs a separate + statement changes whether the increment precedes the call. +- LAW Z: "January pins a zero register and we don't" is a SOURCE defect (a surplus long-lived + value/alias, declaration order of zero-initialised locals), not a tie. +- Accessor binding: `&accessor(...)->field` inline folds destructively; binding to a local gives + the non-destructive lea - read the bytes per site. +- VC7 unrolls small constant-trip for/while but not do..while; NUMBEROF is size_t (unsigned + compare); `and 80000007h` proves a signed divisor; a float literal 1 ULP off proves a folded + expression. +- Warnings as detectors: `CL /Zs /W3` C4013 implicit declarations push real args as doubles. +- Name-count / declaration-count ties: dummy declarations flip distant ties - use ONLY as an + oracle to locate genuinely missing January declarations; never land fillers. +- Methodology stop rule: after ~5 evidence-based source shapes with only an interchangeable + register / dependency-free order left, stop, preserve the best credible candidate at zero + credit, record reopen criteria. + +## 6. Reporting + +Your final answer must be the structured result requested by the orchestrator. Keep full +evidence in `scratch/w//` (candidate .c, gate rows before/after, alndiff excerpts, +LEDGER.md with every probe: hypothesis -> evidence -> change -> measured result). + +## 7. Wave-2 state and new findings (base commit 931ed8dc) + +- LANDED: Layer 1 + Layer 2 helper-provider repairs. These hand-written NODUP copies are GONE + (the genuine real_math.h inline now emits byte-identical SELECT_ANY copies): real_random, + signed_angular_difference, interpolate_scalar, valid_real_vector3d_axes2, valid_real_normal3d, + point_in_sphere, rotate_vector2d, project_point3d, point_in_circle, distance_squared2d/3d, + distance2d/3d, negate_vector2d, plane3d_from_point_and_normal, plane3d_negate, + projection_sign_from_vector3d, triple_product3d, project_point2d. real_math.h's distance2d/3d + and project_point2d bodies now equal January's selected copies. Remaining known conflicts: + actor_combat `_cross_product2d` (NODUP hand copy; its genuine use is in the held aim_grenade), + action_vehicle `_object_get_bounding_sphere` (assert-string differs: "..\objects\objects.h"), + effects `_real_local_random`, player_control `limit2d`, plus any found by provider_link.py. +- Owner-gated classes (report with evidence, never self-land): reproducing authentic January + uninitialised reads / NULL dereferences; new representation view casts or aggregate view + copies that are load-bearing (not byte-inert); header edits that regress declaration-count + canaries or keep an extern prototype over a static definition; dead or unattested named + locals whose only role is the match (they fail the strip test); non-/Od-attested staging temps. +- Decoded in wave 1: (a) C2 compiles functions in definition order except a function calling a + not-yet-defined TU function is deferred to the end - recovers January's definition order from + emission order; (b) allocator block weight = number of webs referenced in the block, so an + inlined helper's named local can flip caller colouring; (c) a load from a FILE-STATIC const + aggregate whose address is never taken is hoisted above pointer stores, an external one is not + - check cachebeta publics for any const global in an emission-order residual. +- Git Bash rewrites `gate.py --cflag /X` into a Windows path; prefix with MSYS_NO_PATHCONV=1. +- Wave-1 worker dirs scratch/w// still exist; resume from their LEDGER.md when re-tasked. + +## 8. Wave-3 state (base commit 954eebd2; Halo objects 375) + +- LANDED since 931ed8dc: b807f9f6 objects.h OBJECTS_H_FILE (bounding-sphere inline assertions + report January's per-TU __FILE__; default "..\objects\objects.h", object_lights defines the + absolute spelling first) + action_vehicle bounding-sphere hand copy removed; path.h HCEX field + `struct path_result result`. b9a8d587 admitted units, collision_debug, render_objects, + editor_flying_camera, rasterizer_xbox_shadows, cache_files_windows, light_volumes, + actor_firing_position, path, biped_limp_noodle, leaf_map, model_animations. +- `_object_get_bounding_sphere` is NO LONGER a provider conflict for non-objects/ units. +- Held owner items (do not self-land; do not re-probe unless you have NEW evidence): actor_combat + P1 cross_product2d (w/cross_product2d), king/glow/fpw-B/dead_camera authentic-bug class, + object_lights __FILE__ surplus, rasterizer_xbox .bss names, hardware_geometry A/B wrapper, + network_connection connect form, breakable_surfaces real_local_random count, actions grouped + data verifier, render_debug invented aggregate, bitmap_drawing unnamed static. +- Wave-2 laws: (d) reviewers REJECT scope/block groupings that contradict the /Od frame's + DECLARATION order even when exact - check /Od declaration order before proposing any block; + (e) the escape law: only a local whose address reaches an out-of-line call needs a scope; + (f) /Od RTC names + same statement pair + zero assert-anchor drift authenticated a dead + statement pair (editor_flying_camera) - a dead statement WITHOUT /Od attestation is a filler; + (g) caller-local struct views with opaque spans, consumer-local prototypes of other files' + functions, hand-expanded header helpers and `float` for `real` all block admission even when + every byte matches - scan for them before claiming OBJECT_COMPLETE_CANDIDATE. +- Every earlier wave's ledgers are also in research/fifty_objects_20260925/ (tracked copies). + +## 9. Wave-4 state and INCIDENT RULES (base commit 16542e46; Halo objects 378) + +INCIDENTS in wave 3 (both repaired): a reviewer's broken `&&` chain ran `rm -rf .git` in the +worktree ROOT (deleting the worktree pointer), and `tools/campaign/volatile_scan.py --help` (no +argparse) ran a hard-coded scan that REWROTE source/hs/hs.c. Therefore: +- NEVER run rm/mv/cp/sed -i/redirects whose target is not under YOUR scratch/w//. Always use + absolute slug paths for destructive commands; never `cd` then `rm -rf` in one chain. +- NEVER touch `.git`, build/, config/, source/ or tools/ files (read only). +- Before running ANY repo script you have not run before, READ its source; do not assume --help + is safe. If a script writes files, copy it into your slug and point its outputs there. +- If you see the tree modified by someone else (git status not clean), STOP and report it. + +LANDED since 954eebd2: f7cd2e72 player_ui (game_engine.h game_variant layout with HCEX member +names + member renames across game engines; player_ui.h) and sound_manager (sound_definitions.h +short old_range_index). Batch 4b: dynavobgeom admission, damage _object_damage_body, players +storage + COMMON definitions, player_profile/main zero-credit packets, hs storage (839 statics + +hs_enumerate_scenario_data helper), hs_scenario_definitions static rename. +Wave-3 laws: (h) an unreferenced non-public STATIC function is still emitted if the source USES +it (148 Halo examples) - storage cannot be inferred from "unreferenced"; (i) a newly emitted header +__inline COMDAT is admissible only if its caller is strictly exact (the damage patch A and hs cleanup +were rejected on this; P1 class); (j) VC7 /O2 pads every file-scope static to 4 bytes, so pad members +in a TU-private struct are the signature of an INVENTED aggregate. + +## 10. Wave-5: OWNER-QUEUE VERIFICATION (base commit cdc8ebd3; Halo objects 379) + +Nothing in this wave lands. Each lane takes one or two HELD owner items (ledger held-items table) +and makes them APPLY-READY on the current tip: rebase every patch onto cdc8ebd3 (the tree moved: +f7cd2e72 renamed game_variant members in game_engine*.c incl. king; b807f9f6 objects.h; 466698b8 +hud_draw.h), re-measure, and write everything under scratch/w/owner_queue//: +- patches/ (git apply --check clean at cdc8ebd3, in apply order, plus an APPLY_ORDER.txt), +- the edited symbols.json copy if needed (in-place edits, based on cdc8ebd3), +- MEASURED.md: gate --all (every January function of every affected object), object_audit against + an emulated split, provider_link both orders, data status, and the exact list of objects that + become COMPLETE if the owner says yes (and those that still would not, with why), +- RULING.md: the precise yes/no question for the owner, the first-party evidence for and against, + the BUG/disclosure comments exactly as they would land, and the house-rule classes touched. +Obey sections 0 and 9 (incident rules) strictly. diff --git a/research/fifty_objects_20260925/integrator_kit/admit.py b/research/fifty_objects_20260925/integrator_kit/admit.py new file mode 100644 index 00000000..18e03861 --- /dev/null +++ b/research/fifty_objects_20260925/integrator_kit/admit.py @@ -0,0 +1,71 @@ +"""Integrator admission helper: flip config.json statuses, append semantic data entries, drop rejections. + + python scratch/campaign/admit.py --match source/x/y.c [...] [--unmatch source/..c] + [--data-entry entry.json ...] [--drop-rejection ] ... +All edits are textual and in place (no JSON re-serialisation of config.json / rejections). +""" +import json +import re +import sys + +args = sys.argv[1:] +match, unmatch, entries, drops = [], [], [], [] +i = 0 +while i < len(args): + a = args[i] + if a == '--match': + match.append(args[i + 1]); i += 2 + elif a == '--unmatch': + unmatch.append(args[i + 1]); i += 2 + elif a == '--data-entry': + entries.append(args[i + 1]); i += 2 + elif a == '--drop-rejection': + drops.append((args[i + 1], args[i + 2])); i += 3 + else: + sys.exit('bad arg ' + a) + + +def edit_status(names, new): + p = 'config/config.json' + raw = open(p, 'rb').read().decode('utf-8') + for n in names: + pat = re.compile(r'(\{ "name": "%s", "index": \d+, "status": ")(\w+)(" \})' % re.escape(n)) + hits = pat.findall(raw) + if len(hits) != 1: + sys.exit('status: %d hits for %s' % (len(hits), n)) + raw = pat.sub(lambda m: m.group(1) + new + m.group(3), raw) + print('status', n, hits[0][1], '->', new) + open(p, 'wb').write(raw.encode('utf-8')) + + +if match: + edit_status(match, 'Matching') +if unmatch: + edit_status(unmatch, 'NonMatching') + +if entries: + p = 'config/semantic_data_matches.json' + raw = open(p, 'rb').read().decode('utf-8') + nl = '\r\n' if '\r\n' in raw else '\n' + body = raw.rstrip() + assert body.endswith(']'), 'unexpected end' + body = body[:-1].rstrip() + for e in entries: + obj = json.load(open(e)) + txt = json.dumps(obj, indent=2).replace('\n', nl) + txt = nl.join(' ' + l for l in txt.split(nl)) + body += ',' + nl + txt + print('data entry', obj['unit'], obj.get('symbol')) + open(p, 'wb').write((body + nl + ']' + nl).encode('utf-8')) + json.load(open(p)) + +if drops: + p = 'config/object_admission_rejections.json' + d = json.load(open(p)) + before = len(d['entries']) + for unit, sym in drops: + d['entries'] = [e for e in d['entries'] if not (e['unit'] == unit and e['symbol'].startswith(sym))] + print('rejections', before, '->', len(d['entries'])) + raw = open(p, 'rb').read().decode('utf-8') + nl = '\r\n' if '\r\n' in raw else '\n' + open(p, 'wb').write((json.dumps(d, indent=2, ensure_ascii=False).replace('\n', nl) + nl).encode('utf-8')) diff --git a/research/fifty_objects_20260925/integrator_kit/audit_battery.py b/research/fifty_objects_20260925/integrator_kit/audit_battery.py new file mode 100644 index 00000000..4a883ba8 --- /dev/null +++ b/research/fifty_objects_20260925/integrator_kit/audit_battery.py @@ -0,0 +1,35 @@ +"""Run the whole-object admission battery on production build/base for a list of units. + + python scratch/campaign/audit_battery.py [ ...] (units like ai/path) +Prints per unit: gate totals, object_audit verdict (+ failing lines), PDB disagreements, +surplus identity, provider-link verdict (+ failing symbols), report data %. +""" +import json +import subprocess +import sys + +rep = {u['name']: u for u in json.load(open('build/report.json'))['units']} + + +def run(cmd): + r = subprocess.run(cmd, capture_output=True, text=True) + return (r.stdout + r.stderr).strip().splitlines() + + +for u in sys.argv[1:]: + unit = 'source/' + u + g = run([sys.executable, 'tools/campaign/gate.py', unit, '--all']) + oa = run([sys.executable, 'scratch/tools/object_audit.py', unit]) + pdb = run([sys.executable, 'scratch/tools/pdb_storage.py', unit]) + si = run([sys.executable, 'scratch/tools/surplus_identity.py', unit]) + pl = run([sys.executable, 'scratch/tools/provider_link.py', unit]) + m = rep.get(unit, {}).get('measures', {}) + print('=' * 20, u) + print(' gate :', g[-1] if g else '?') + bad = [l for l in oa if 'DIFF' in l or 'MISSING' in l or 'storage' in l.lower() and '!=' in l] + print(' audit :', oa[-1] if oa else '?', '|', ' ; '.join(x.strip() for x in bad[:6])) + print(' pdb :', pdb[-1] if pdb else '?') + print(' surplus:', si[-1] if si else '?', '|', ' ; '.join(x.strip() for x in si if 'DIFFERENT' in x)[:300]) + fails = [l.split()[0] for l in pl if l.rstrip().endswith('FAIL') or 'NO JANUARY PROVIDER' in l] + print(' link :', pl[-1] if pl else '?', fails) + print(' data : %s/%s' % (m.get('matched_data'), m.get('total_data'))) diff --git a/research/fifty_objects_20260925/integrator_kit/batch_gate.py b/research/fifty_objects_20260925/integrator_kit/batch_gate.py new file mode 100644 index 00000000..6479be2c --- /dev/null +++ b/research/fifty_objects_20260925/integrator_kit/batch_gate.py @@ -0,0 +1,88 @@ +"""Integrator batch gate: run the full verification chain and summarise against the frozen baseline. + + python scratch/campaign/batch_gate.py