Reconcile approved Halo fidelity packets and bounded data credit

Recover transparent geometry submit (+1,285 meaningful code, zero exact losses); reconcile COMMON ownership and Q10 85+EXT1 credit, actions/main data, and separately disclosed denominator corrections. Preserve canonical-only repairs and all held research. C09 is ordinary disclosed cleanup, not a claim of proven scaffolding intent. Clean rebuild, 1,663 tests, parks, audits, provider links and independent EXT1 check pass. Local reconciliation only.
This commit is contained in:
Jonas Volman committed 2026-09-29 13:52:37 -07:00
1 parent f3aadeab98
commit 6bfd956737
108 files changed
+14234 -2014

No files matched your search

+783
View File
@@ -0,0 +1,783 @@
{
"schema": "common-pool-credit/1",
"unit": "source/linker_common",
"category": "halobetacache",
"extent_model": "objdiff-3.3.1-combined",
"unit_total_data": 1272664,
"verifier": {
"path": "tools/common_pool_verify.py",
"sha256_lf": "6ca08d007b3a95608e449b4e44a06a5d792a710349c32513a8366a17b044c8be"
},
"reader": {
"path": "tools/coff_compare.py",
"sha256_lf": "df0004d83c548ed82cd4afe66306ccf9dafbc83e6998fafe23047c3a82ecedd7"
},
"ledger": {
"path": "research/remaining_frontier_20260926/q10/common_pool_ledger.json",
"sha256_lf": "da1c65de445aac977ed4c14257d929d9c1ada1a1c40e88a573d8688c33300e7f"
},
"xdk_manifest": {
"path": "research/remaining_frontier_20260926/q10/xdk3911_lib_manifest.json",
"sha256_lf": "1b8a8350bd456bd61efea345970b793ca7ae8b554f9f63d5a0111571a47ebe3b"
},
"xdk_lib_dir": "C:/tmp/xdk3911_extract/XDK/xbox/lib",
"linked_libraries_not_in_extract": [
"binkxbox.lib",
"dsstrmh.lib"
],
"credit": {
"records": 93,
"raw": 660645,
"padding": 367,
"total": 661012
},
"reason": "Owner ruling Q10 FINAL (2026-09-28): 'Approve all 85 PASS records - as bounded, per-record COMMON storage credit.' Approved as FULL + v1.4 with the owner's four required additions (Q10 additions): the COFF reader tools/coff_compare.py pinned and bound into the receipt; bytes by tag, raw versus padding and the largest record's share in progress; the binkxbox/dsstrmh list in the credit receipt; L1 trust root 8; and the string-only verifier wording re-pin. The reviewed 85-record allowlist is frozen: records that pass later earn nothing until a separate approval lists them (the four CV-B' records, which passed but were unlisted at Q10 FINAL, are listed by EXT1 below). January's linker pools every COMMON (tentative) record into one '* Linker *' contribution (cachebeta.pdb module 847), which the split exposes as source/linker_common; objdiff has no rebuilt object for it and credits none of its data. tools/common_pool_verify.py (RF-DM, reviewed by RF-DP and RF-DX), run on every progress with --xdk-lib-dir and its pinned XDK manifest (OQ-DM2), reports these 85 Halo records PASS: January's name, size, pool slot and COMMON class equal exactly one tentative definition in our objects, and that definer is the ledger's evidence owner; provenance tag inferred (60) or probable (25), never January-proven. Each earns its objdiff-3.3.1-combined extent share: 657,245 raw + 311 objdiff padding = 657,556 halobetacache data bytes, split into 8,444 inferred (8,220 raw + 224 padding) and 649,112 probable (649,025 raw + 87 padding); one probable record, _render, is 643,744 of it (643,732 raw + 12 padding). PASS-OWNER-UNRESOLVED, FAIL, unlisted PASS, vendor and linker records earn nothing; vendor and linker records keep the categories 38f82c59 gave them. source/linker_common stays MISSING: no whole-pool Matching claim and no function, object, completion or denominator change. OQ-DM1: binkxbox.lib and dsstrmh.lib, linked by January but absent from the XDK 3911 extract, cannot be scanned (accepted, disclosed; carried in every credit receipt). Allowlist extension EXT1 (owner ruling Q-EV1, 2026-09-29: 'approve EXT1 + the proposed wording, conditional on an independent check and fresh full gates at the landing HEAD'; packet research/remaining_frontier_20260926/workers/RF-EV/PACKET_ALLOWLIST_EXT.md; independent check RF-EY, verdict LAND): 8 records that became qualifying PASS after the Q10 FINAL review through zero-credit landings follow the frozen 85 in pool order: _sound_class_data (CP-T B1 6d1040e6, inferred); _debug_sound_cache (CV-B' 0dcdf006, probable); _assertion_count (CV-B' 0dcdf006, probable); _debug_sound_reference_counts (CV-B' 0dcdf006, probable); _wind_globals (CP-T B2 cfe97640, inferred); _build_sprite_globals (CP-T B4 16a33aad, inferred); _light_data (CV-B' 0dcdf006, probable); _glow_globals (CP-T B5 b6d60163, inferred). They earn their objdiff-3.3.1-combined shares under the same verifier, reader, ledger and manifest pins: +3,456 = 3,400 raw + 56 padding (inferred 3,440 = 3,392 raw + 48 padding; probable 16 = 8 raw + 8 padding). The entry now credits 93 records: 660,645 raw + 367 objdiff padding = 661,012 halobetacache data bytes, split into 11,884 inferred (11,612 raw + 272 padding) and 649,128 probable (649,033 raw + 95 padding); _render is 643,744 of it (97.4%). Two records that pass stay unlisted by their own rulings and earn nothing: _debug_sound_channels (Q-B2: 'Keep it outside Q10's credit allowlist') and _director_camera_scripted (B7: 'remain outside the Q10 allowlist'; Q-EV2: 'Standing exclusion, until explicitly revisited').",
"scope": "This lifts Q10 only for those 85 records and the 8 records of allowlist extension EXT1 under this verification contract. It does not certify January ownership, complete pool layout, or a matching executable link.",
"limitation": "L1: pinning prevents unnoticed changes to reviewed assumptions; it does not prove those assumptions or January ownership. The ledger's readout provenance and the XDK manifest are trust roots checked only by their pinned hashes; the verifier checks our tree against January and the libraries, never January's owner. Pins are not protection against a compromised execution environment: the Python interpreter, its module search path and bytecode cache, the unpinned progress code and the generated build outputs are trust roots too (L1 trust root 8).",
"records": [
{
"symbol": "_debug_looping_sound",
"rva": "0x4e41a1",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/sound/sound_manager.c"
},
{
"symbol": "_debug_sound",
"rva": "0x4e41a2",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/sound/sound_manager.c"
},
{
"symbol": "_loud_dialog_hack",
"rva": "0x4e41a3",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/sound/sound_manager.c"
},
{
"symbol": "_sound_channels",
"rva": "0x4e41c0",
"size": 6144,
"share": 6160,
"tag": "inferred",
"owner": "source/sound/sound_manager.c"
},
{
"symbol": "_looping_sound_data",
"rva": "0x4e59c0",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/sound/sound_manager.c"
},
{
"symbol": "_sound_data",
"rva": "0x4e59c4",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/sound/sound_manager.c"
},
{
"symbol": "_combined_pas",
"rva": "0x4ed2c0",
"size": 64,
"share": 92,
"tag": "inferred",
"owner": "source/sound/game_sound.c"
},
{
"symbol": "_game_sound_globals",
"rva": "0x4ed300",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/sound/game_sound.c"
},
{
"symbol": "_game_looping_sound_data",
"rva": "0x4ed304",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/sound/game_sound.c"
},
{
"symbol": "_recover_saved_games_hack",
"rva": "0x4ed308",
"size": 1,
"share": 4,
"tag": "probable",
"owner": "source/saved games/game_state.c"
},
{
"symbol": "_stun_enable",
"rva": "0x4ed318",
"size": 1,
"share": 4,
"tag": "probable",
"owner": "source/units/units.c"
},
{
"symbol": "_debug_damage_taken",
"rva": "0x4ed319",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/units/units.c"
},
{
"symbol": "_debug_unit_illumination",
"rva": "0x4ed31a",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/units/units.c"
},
{
"symbol": "_debug_unit_animations",
"rva": "0x4ed31b",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/units/units.c"
},
{
"symbol": "_debug_unit_all_animations",
"rva": "0x4ed31c",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/units/units.c"
},
{
"symbol": "_file_location_volume_names",
"rva": "0x4ed320",
"size": 512,
"share": 536,
"tag": "probable",
"owner": "source/tag_files/files.c"
},
{
"symbol": "_debug_fog_planes",
"rva": "0x4ed520",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/structures/structures.c"
},
{
"symbol": "_structures_use_pvs_for_vs",
"rva": "0x4ed521",
"size": 1,
"share": 4,
"tag": "probable",
"owner": "source/structures/structure_visibility.c"
},
{
"symbol": "_debug_portals",
"rva": "0x4ed522",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/structures/structure_visibility.c"
},
{
"symbol": "_debug_leaf_portals",
"rva": "0x4ed523",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/structures/structure_render.c"
},
{
"symbol": "_global_game_globals",
"rva": "0x4ee2f4",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/scenario/scenario.c"
},
{
"symbol": "_global_bsp3d",
"rva": "0x4ee2f8",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/scenario/scenario.c"
},
{
"symbol": "_global_collision_bsp",
"rva": "0x4ee2fc",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/scenario/scenario.c"
},
{
"symbol": "_global_structure_bsp",
"rva": "0x4ee300",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/scenario/scenario.c"
},
{
"symbol": "_global_scenario",
"rva": "0x4ee304",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/scenario/scenario.c"
},
{
"symbol": "_debug_sprites",
"rva": "0x4ee308",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/render/render_sprite.c"
},
{
"symbol": "_cached_object_render_states",
"rva": "0x4ee34c",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/render/render_objects.c"
},
{
"symbol": "_debug_input",
"rva": "0x4ee351",
"size": 1,
"share": 4,
"tag": "probable",
"owner": "source/render/render_debug.c"
},
{
"symbol": "_debug_bsp",
"rva": "0x4ee352",
"size": 1,
"share": 4,
"tag": "probable",
"owner": "source/render/render_debug.c"
},
{
"symbol": "_render",
"rva": "0x4ee360",
"size": 643732,
"share": 643744,
"tag": "probable",
"owner": "source/render/render.c"
},
{
"symbol": "_debug_point_physics",
"rva": "0x58dc40",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/physics/point_physics.c"
},
{
"symbol": "_node_count",
"rva": "0x590b40",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/physics/bsp3d.c"
},
{
"symbol": "_global_object_marker",
"rva": "0x590b48",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/objects/objects.c"
},
{
"symbol": "_noncollideable_object_cluster_partition",
"rva": "0x590b50",
"size": 12,
"share": 24,
"tag": "inferred",
"owner": "source/objects/objects.c"
},
{
"symbol": "_collideable_object_cluster_partition",
"rva": "0x590b60",
"size": 12,
"share": 16,
"tag": "inferred",
"owner": "source/objects/objects.c"
},
{
"symbol": "_object_header_data",
"rva": "0x590b70",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/objects/objects.c"
},
{
"symbol": "_first_object_type_definition",
"rva": "0x590b74",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/objects/object_types.c"
},
{
"symbol": "_debug_lights",
"rva": "0x590b78",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/objects/object_lights.c"
},
{
"symbol": "_debug_object_lights",
"rva": "0x590b79",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/objects/object_lights.c"
},
{
"symbol": "_debug_rasterizer_light_count",
"rva": "0x590b7a",
"size": 2,
"share": 4,
"tag": "inferred",
"owner": "source/objects/object_lights.c"
},
{
"symbol": "_lights_globals",
"rva": "0x590b80",
"size": 848,
"share": 872,
"tag": "inferred",
"owner": "source/objects/object_lights.c"
},
{
"symbol": "_light_cluster_partition",
"rva": "0x590ed0",
"size": 12,
"share": 16,
"tag": "inferred",
"owner": "source/objects/object_lights.c"
},
{
"symbol": "_debug_damage",
"rva": "0x590ee0",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/objects/damage.c"
},
{
"symbol": "_widget_data",
"rva": "0x590ee4",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/objects/widgets/widgets.c"
},
{
"symbol": "_flag_data",
"rva": "0x590ef0",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/objects/widgets/flags.c"
},
{
"symbol": "_antenna_data",
"rva": "0x590ef4",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/objects/widgets/antenna.c"
},
{
"symbol": "_network_game_server_memory_do_not_use_directly",
"rva": "0x590f00",
"size": 1212,
"share": 1232,
"tag": "probable",
"owner": "source/networking/network_server_manager.c"
},
{
"symbol": "_network_game_client_dont_use_directly",
"rva": "0x5913c0",
"size": 3248,
"share": 3264,
"tag": "probable",
"owner": "source/networking/network_client_manager.c"
},
{
"symbol": "_debug_render_freeze",
"rva": "0x592075",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/main/main.c"
},
{
"symbol": "_local_player_index_for_draw_string_and_hack_in_icons",
"rva": "0x59227c",
"size": 2,
"share": 4,
"tag": "inferred",
"owner": "source/interface/ui_widget.c"
},
{
"symbol": "_ui_plasma_effect_color",
"rva": "0x592280",
"size": 16,
"share": 28,
"tag": "inferred",
"owner": "source/interface/ui_widget.c"
},
{
"symbol": "_blip_player_index",
"rva": "0x592496",
"size": 2,
"share": 4,
"tag": "inferred",
"owner": "source/interface/motion_sensor.c"
},
{
"symbol": "_center_point",
"rva": "0x5924a0",
"size": 8,
"share": 8,
"tag": "inferred",
"owner": "source/interface/motion_sensor.c"
},
{
"symbol": "_hud_msg_def",
"rva": "0x5924ac",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/interface/hud_messaging.c"
},
{
"symbol": "_temporary_hud",
"rva": "0x5924b0",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/interface/hud.c"
},
{
"symbol": "_object_list_data",
"rva": "0x5924b4",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/hs/object_lists.c"
},
{
"symbol": "_object_list_header_data",
"rva": "0x5924b8",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/hs/object_lists.c"
},
{
"symbol": "_debug_trigger_volumes",
"rva": "0x5924bc",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/hs/hs_runtime.c"
},
{
"symbol": "_debug_scripting",
"rva": "0x5924bd",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/hs/hs_runtime.c"
},
{
"symbol": "_hs_global_data",
"rva": "0x5924e0",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/hs/hs_runtime.c"
},
{
"symbol": "_hs_thread_data",
"rva": "0x5924e4",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/hs/hs_runtime.c"
},
{
"symbol": "_hs_syntax_data",
"rva": "0x5924e8",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/hs/hs.c"
},
{
"symbol": "_players_globals",
"rva": "0x5924ec",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/game/players.c"
},
{
"symbol": "_team_data",
"rva": "0x5924f0",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/game/players.c"
},
{
"symbol": "_player_data",
"rva": "0x5924f4",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/game/players.c"
},
{
"symbol": "_global_default_animation_colors",
"rva": "0x592500",
"size": 48,
"share": 72,
"tag": "inferred",
"owner": "source/game/game_engine_king.c"
},
{
"symbol": "_global_default_animation_values",
"rva": "0x592530",
"size": 16,
"share": 16,
"tag": "inferred",
"owner": "source/game/game_engine_king.c"
},
{
"symbol": "_weather_particle_data",
"rva": "0x5926bc",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/effects/weather_particle_systems.c"
},
{
"symbol": "_system_particles",
"rva": "0x5926c4",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/effects/particle_systems.c"
},
{
"symbol": "_particle_systems",
"rva": "0x5926c8",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/effects/particle_systems.c"
},
{
"symbol": "_effect_location_data",
"rva": "0x5926cc",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/effects/effects.c"
},
{
"symbol": "_debug_decals",
"rva": "0x5926d4",
"size": 1,
"share": 4,
"tag": "inferred",
"owner": "source/effects/decals.c"
},
{
"symbol": "_temporary",
"rva": "0x592f20",
"size": 256,
"share": 256,
"tag": "probable",
"owner": "source/cseries/cseries.c"
},
{
"symbol": "_pursuit_data",
"rva": "0x59308c",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/ai/encounters.c"
},
{
"symbol": "_encounter_data",
"rva": "0x593090",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/ai/encounters.c"
},
{
"symbol": "_platoon_array",
"rva": "0x593094",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/ai/encounters.c"
},
{
"symbol": "_squad_array",
"rva": "0x593098",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/ai/encounters.c"
},
{
"symbol": "_global_communication_table_indices",
"rva": "0x61a320",
"size": 114,
"share": 124,
"tag": "inferred",
"owner": "source/ai/ai_communication.c"
},
{
"symbol": "_swarm_component_data",
"rva": "0x61a3bc",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/ai/actors.c"
},
{
"symbol": "_swarm_data",
"rva": "0x61a3c0",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/ai/actors.c"
},
{
"symbol": "_actor_data",
"rva": "0x61a3c4",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/ai/actors.c"
},
{
"symbol": "_avoidance_rays",
"rva": "0x61a3e0",
"size": 448,
"share": 468,
"tag": "inferred",
"owner": "source/ai/actor_moving.c"
},
{
"symbol": "_avoidance_directions",
"rva": "0x61a5a0",
"size": 96,
"share": 96,
"tag": "inferred",
"owner": "source/ai/actor_moving.c"
},
{
"symbol": "_sense_rays",
"rva": "0x61a600",
"size": 252,
"share": 256,
"tag": "inferred",
"owner": "source/ai/actor_moving.c"
},
{
"symbol": "_global_temporary_render_color",
"rva": "0x61a700",
"size": 16,
"share": 16,
"tag": "inferred",
"owner": "source/ai/actions.c"
},
{
"symbol": "_sound_class_data",
"rva": "0x4ed2ac",
"size": 4,
"share": 4,
"tag": "inferred",
"owner": "source/sound/sound_classes.c"
},
{
"symbol": "_debug_sound_cache",
"rva": "0x4ed309",
"size": 1,
"share": 4,
"tag": "probable",
"owner": "source/cache/xbox_sound_cache.c"
},
{
"symbol": "_assertion_count",
"rva": "0x4ed30a",
"size": 2,
"share": 4,
"tag": "probable",
"owner": "source/cache/xbox_sound_cache.c"
},
{
"symbol": "_debug_sound_reference_counts",
"rva": "0x4ed30c",
"size": 1,
"share": 4,
"tag": "probable",
"owner": "source/cache/xbox_sound_cache.c"
},
{
"symbol": "_wind_globals",
"rva": "0x4ed5e0",
"size": 3340,
"share": 3360,
"tag": "inferred",
"owner": "source/scenario/wind.c"
},
{
"symbol": "_build_sprite_globals",
"rva": "0x4ee320",
"size": 40,
"share": 64,
"tag": "inferred",
"owner": "source/render/render_sprite.c"
},
{
"symbol": "_light_data",
"rva": "0x590edc",
"size": 4,
"share": 4,
"tag": "probable",
"owner": "source/objects/object_lights.c"
},
{
"symbol": "_glow_globals",
"rva": "0x590ee8",
"size": 8,
"share": 12,
"tag": "inferred",
"owner": "source/objects/widgets/glow.c"
}
]
}
+228
View File
@@ -0,0 +1,228 @@
{
"categories": [
{
"id": "linker",
"name": "linker"
}
],
"entries": [
{
"unit": "source/linker_common",
"from_category": "halobetacache",
"extent_model": "objdiff-3.3.1-combined",
"unit_total_data": 1272664,
"moved": {
"dsound": 4,
"libcmt": 880,
"linker": 96,
"xapilib": 308
},
"reason": "Accounting correction only, not matching progress (owner ruling 2026-09-27, 'Denominator correction'). January's linker pools every COMMON record and two linker-generated .rdata records into one '* Linker *' contribution (PDB module 847), which config lists as the Halo unit source/linker_common. 27 of its records are vendor COMMON (their XDK library members define them COMMON and January links those members) and 2 are the linker's debug directory and CodeView record; this moves their objdiff-3.3.1 extents (1,125 + 88 raw bytes, 1,192 + 96 as objdiff sizes them) out of the Halo data denominator. Halo COMMON (213 records) stays in halobetacache; the All denominator, matched bytes, functions, units and verdicts are unchanged. Q10 remains held: this entry earns and removes no credit.",
"records": [
{
"symbol": "_rdata_00242ed0",
"section": ".rdata",
"size": 28,
"to_category": "linker",
"evidence": "linker-generated: IMAGE_DEBUG_DIRECTORY (PE data directory 6, type 2 CODEVIEW)"
},
{
"symbol": "_rdata_002b6a2c",
"section": ".rdata$debug",
"size": 60,
"to_category": "linker",
"evidence": "linker-generated: CodeView NB10 record (c:\\halo\\objects\\halobetacache\\cachebeta.pdb)"
},
{
"symbol": "_OHCD_GlobalPool",
"section": ".bss",
"size": 48,
"to_category": "xapilib",
"evidence": "vendor COMMON: XDK 3911 xapilib.lib member pool.obj defines it COMMON 48 B; January links that member (PDB module 495, xapilib.lib)"
},
{
"symbol": "_OHCD_InterruptObject",
"section": ".bss",
"size": 112,
"to_category": "xapilib",
"evidence": "vendor COMMON: XDK 3911 xapilib.lib member ohcd.obj defines it COMMON 112 B; January links that member (PDB module 494, xapilib.lib)"
},
{
"symbol": "_XapiAutoPowerDownGlobals",
"section": ".bss",
"size": 80,
"to_category": "xapilib",
"evidence": "vendor COMMON: XDK 3911 xapilib.lib member powerdwn.obj defines it COMMON 80 B; January links that member (PDB module 510, xapilib.lib)"
},
{
"symbol": "_CheckHeapFillPattern",
"section": ".bss",
"size": 16,
"to_category": "xapilib",
"evidence": "vendor COMMON: XDK 3911 xapilib.lib member heap.obj defines it COMMON 16 B; January links that member (PDB module 531, xapilib.lib)"
},
{
"symbol": "_NtGlobalFlag",
"section": ".bss",
"size": 4,
"to_category": "xapilib",
"evidence": "vendor COMMON: XDK 3911 xapilib.lib member heap.obj defines it COMMON 4 B; January links that member (PDB module 531, xapilib.lib)"
},
{
"symbol": "___@@_PchSym_@00@UcylcRurmzouivUkirezgvUmglhUczkrUpDCUoryUlyqUrDIGUyzhvwooOlyq@Xapi_k32",
"section": ".bss",
"size": 4,
"to_category": "xapilib",
"evidence": "vendor COMMON: XDK 3911 xapilib.lib member basedll.obj defines it COMMON 4 B; January links that member (PDB module 5, xapilib.lib)"
},
{
"symbol": "_XapiProcessHeap",
"section": ".bss",
"size": 4,
"to_category": "xapilib",
"evidence": "vendor COMMON: XDK 3911 xapilib.lib member xapiheap.obj defines it COMMON 4 B; January links that member (PDB module 504, xapilib.lib)"
},
{
"symbol": "_XapiCurrentTopLevelFilter",
"section": ".bss",
"size": 4,
"to_category": "xapilib",
"evidence": "vendor COMMON: XDK 3911 xapilib.lib member thread.obj defines it COMMON 4 B; January links that member (PDB module 507, xapilib.lib)"
},
{
"symbol": "_XapiTlsSize",
"section": ".bss",
"size": 4,
"to_category": "xapilib",
"evidence": "vendor COMMON: XDK 3911 xapilib.lib member thread.obj defines it COMMON 4 B; January links that member (PDB module 507, xapilib.lib)"
},
{
"symbol": "___@@_PchSym_@00@UcylcRurmzouivUkirezgvUdrmwldhUwrivxgcUwhlfmwUwhlfmwUlyqUrDIGUwhlfmwrOlyq@dsound",
"section": ".bss",
"size": 4,
"to_category": "dsound",
"evidence": "vendor COMMON: XDK 3911 dsound.lib member dsoundi.obj defines it COMMON 4 B; January links that member (PDB module 1, dsound.lib)"
},
{
"symbol": "___mblcid",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member mbctype.obj defines it COMMON 4 B; January links that member (PDB module 776, LIBCMT.lib)"
},
{
"symbol": "___ptmbcinfo",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member mbctype.obj defines it COMMON 4 B; January links that member (PDB module 776, LIBCMT.lib)"
},
{
"symbol": "___ismbcodepage",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member mbctype.obj defines it COMMON 4 B; January links that member (PDB module 776, LIBCMT.lib)"
},
{
"symbol": "__mbctype",
"section": ".bss",
"size": 257,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member mbctype.obj defines it COMMON 257 B; January links that member (PDB module 776, LIBCMT.lib)"
},
{
"symbol": "___mbcodepage",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member mbctype.obj defines it COMMON 4 B; January links that member (PDB module 776, LIBCMT.lib)"
},
{
"symbol": "___mbulinfo",
"section": ".bss",
"size": 24,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member mbctype.obj defines it COMMON 24 B; January links that member (PDB module 776, LIBCMT.lib)"
},
{
"symbol": "__mbcasemap",
"section": ".bss",
"size": 256,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member mbctype.obj defines it COMMON 256 B; January links that member (PDB module 776, LIBCMT.lib)"
},
{
"symbol": "___active_heap",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member heapinit.obj defines it COMMON 4 B; January links that member (PDB module 803, LIBCMT.lib)"
},
{
"symbol": "___ptd_glob",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member tidtable.obj defines it COMMON 4 B; January links that member (PDB module 750, LIBCMT.lib)"
},
{
"symbol": "__nhandle",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member ioinit.obj defines it COMMON 4 B; January links that member (PDB module 780, LIBCMT.lib)"
},
{
"symbol": "___pioinfo",
"section": ".bss",
"size": 256,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member ioinit.obj defines it COMMON 256 B; January links that member (PDB module 780, LIBCMT.lib)"
},
{
"symbol": "___piob",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member _file.obj defines it COMMON 4 B; January links that member (PDB module 741, LIBCMT.lib)"
},
{
"symbol": "__nstream",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member _file.obj defines it COMMON 4 B; January links that member (PDB module 741, LIBCMT.lib)"
},
{
"symbol": "___env_initialized",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member crt0dat.obj defines it COMMON 4 B; January links that member (PDB module 756, LIBCMT.lib)"
},
{
"symbol": "___onexitend",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member crt0dat.obj defines it COMMON 4 B; January links that member (PDB module 756, LIBCMT.lib)"
},
{
"symbol": "___onexitbegin",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member crt0dat.obj defines it COMMON 4 B; January links that member (PDB module 756, LIBCMT.lib)"
},
{
"symbol": "___mbctype_initialized",
"section": ".bss",
"size": 4,
"to_category": "libcmt",
"evidence": "vendor COMMON: XDK 3911 libcmt.lib member crt0dat.obj defines it COMMON 4 B; January links that member (PDB module 756, LIBCMT.lib)"
}
]
}
]
}
+10 -10
View File
@@ -23,8 +23,8 @@
{
"unit": "source/units/bipeds",
"function": "_biped_check_discard",
"class": "instruction-scheduling",
"evidence": "Best complete typed ordinary-C discard check retained from January control flow, relocation topology, diagnostic strings and HCEA semantic corroboration. Target and candidate share the 176-byte padded envelope and all 10 relocation identities; the remaining normalized-code difference is the formatted diagnostic argument evaluation order. No barrier, volatile/register forcing, pragma, assembly, fake dependency or nonsensical branch is retained. This is zero-credit fuzzy source. Reopen only with authoritative January source/local records or a natural same-compiler donor explaining that evaluation order. See docs/object_matching_logs/bipeds_obj_batch7_exact_and_fuzzy_20260912.md.",
"class": "unclassified",
"evidence": "Park reason corrected 2026-09-29 (owner ruling Q-EU1): original varargs argument position; reachable, unbounded formatting. January passes the actor description as the last argument of error(2, format, name, x, y, z, description) while the format expects it second in \"(%s)\" (January 0x5903a0; the Sept-25 and Oct-12-2001 debug builds; /Od 0x8bdd20). The remaining difference is that argument position, not evaluation order or instruction scheduling, so the class is corrected from instruction-scheduling to unclassified (no codegen mechanism is claimed). Our source keeps the correct order: January's order makes an unbounded vsprintf read the low dword of (double)x as a string pointer on a reachable gameplay path, and _error_silent continues, so it falls outside the bounded or halting original-bug exceptions. RF-EU's exact form A1 (+176 B, 0 losses) is preserved as research only, zero credit (research/remaining_frontier_20260926/workers/RF-EU). Earlier evidence: Best complete typed ordinary-C discard check retained from January control flow, relocation topology, diagnostic strings and HCEA semantic corroboration. Target and candidate share the 176-byte padded envelope and all 10 relocation identities; the remaining normalized-code difference is the formatted diagnostic argument evaluation order. No barrier, volatile/register forcing, pragma, assembly, fake dependency or nonsensical branch is retained. This is zero-credit fuzzy source. Reopen only with authoritative January source/local records or a natural same-compiler donor explaining that evaluation order. See docs/object_matching_logs/bipeds_obj_batch7_exact_and_fuzzy_20260912.md.",
"measurements": {
"target": {
"size": 176,
@@ -217,7 +217,7 @@
"unit": "source/bungie_net/network/transport_endpoint_set_winsock",
"function": "_poll_endpoint_set",
"class": "unclassified",
"evidence": "Complete natural January endpoint-set poll reconstructed with its real typed comparator: compact holes, rebuild stock XDK fd_set, clear cached readability, select with word timeout times MILLISECONDS_PER_SECOND, and mark ready endpoints. Correct owner headers provide the endpoint layout and Winsock error API. January's negative select-result branch is preserved without manufacturing its redundant subsequent comparison; its unguarded all-NULL tail compaction is target-proven and explicitly documented as an original defect, not claimed safe. Established short return ABI is retained. Target560B/16relocs versus candidate512B/16; natural allocation/control-flow differences remain. All inherited exact owners and nonce park unchanged, no extra code/COMMON/no point_from_line3d. No compiler controls, false types, fake branches or spelling search. Reopen only for authentic source/type/compiler-context evidence. See docs/object_matching_logs/transport_endpoint_set_winsock_obj_set_operations_cluster_20260904.md. Re-measured 2026-09-23 (Lane D refresh): single-exit result local and per-use set->ep_array[endpoint_index] reloads (the shape January uses in add_endpoint_to_set) bring the body to the target's 560-byte size; the remaining difference is the SOCKET_ERROR tail compare (13 spellings tried, none exact). No /Od body exists for this Xbox path.",
"evidence": "Complete natural January endpoint-set poll reconstructed with its real typed comparator: compact holes, rebuild stock XDK fd_set, clear cached readability, select with word timeout times MILLISECONDS_PER_SECOND, and mark ready endpoints. Correct owner headers provide the endpoint layout and Winsock error API. January's negative select-result branch is preserved without manufacturing its redundant subsequent comparison; its unguarded all-NULL tail compaction is target-proven and explicitly documented as an original defect, not claimed safe. Established short return ABI is retained. Target560B/16relocs versus candidate512B/16; natural allocation/control-flow differences remain. All inherited exact owners and nonce park unchanged, no extra code/COMMON/no point_from_line3d. No compiler controls, false types, fake branches or spelling search. Reopen only for authentic source/type/compiler-context evidence. See docs/object_matching_logs/transport_endpoint_set_winsock_obj_set_operations_cluster_20260904.md. Re-measured 2026-09-23 (Lane D refresh): single-exit result local and per-use set->ep_array[endpoint_index] reloads (the shape January uses in add_endpoint_to_set) bring the body to the target's 560-byte size; the remaining difference is the SOCKET_ERROR tail compare (13 spellings tried, none exact). No /Od body exists for this Xbox path. 2026-09-29 (owner ruling Q-EU2): RF-EU's staging-boolean form s7 is exact (+560 B, 0 losses; it matches the Oct-12-2001 2276P and Sept-25 retail builds) but stays held under AB #9: the immediately tested boolean encodes no test order, and the cross-build matches and IL trace do not independently establish that staging local. It is preserved as research only, zero credit (research/remaining_frontier_20260926/workers/RF-EU); the earlier 'none exact' note is superseded by this sentence.",
"measurements": {
"target": {"size": 560, "relocation_count": 16, "normalized_sha256": "4a0375522c8a3ff103c5dad92342325f3a41658e90dead5cdcd60d92a8f79f4b"},
"base": {"size": 560, "relocation_count": 16, "normalized_sha256": "9d3107ab7fad24e0717363451d4934edf5df22eb6cd360f0a3b7ab1b1f45ed61"},
@@ -448,7 +448,7 @@
"unit": "source/cache/xbox_sound_cache",
"function": "_sound_cache_debug_render",
"class": "tu-context-optimization",
"evidence": "Fuzzy-parked under the current house rule with the complete debug page-usage renderer retained in ordinary typed C. Target and candidate share the 368-byte padded envelope and all 14 relocation identities in semantic order. Moving the four debug colors under the debug predicate naturally recovered January's flag/color prefix; the remaining packet is the nested-loop local/register schedule and the equivalent private render helper ECX/EDX allocation. Declaration and scope permutations either reproduce this fixed point or worsen the broader stream. No volatile/register forcing, barrier, pragma, forced inline, assembly, fake dependency, undefined behavior, or nonsensical control flow is retained. Reopen only for authoritative January source/local records, an authenticated compiler/QFE difference, or a natural same-compiler donor that explains the private-helper ABI and nested-loop lifetimes together. Re-measured 2026-09-16: the static helper render_inverse_transform_screen_point became strict exact (add_vectors3d origin), which restores January's private register convention at this caller's call site; the caller body is unchanged and still non-exact (368 bytes / 14 relocations).",
"evidence": "Fuzzy-parked under the current house rule with the complete debug page-usage renderer retained in ordinary typed C. Target and candidate share the 368-byte padded envelope and all 14 relocation identities in semantic order. Moving the four debug colors under the debug predicate naturally recovered January's flag/color prefix; the remaining packet is the nested-loop local/register schedule and the equivalent private render helper ECX/EDX allocation. Declaration and scope permutations either reproduce this fixed point or worsen the broader stream. No volatile/register forcing, barrier, pragma, forced inline, assembly, fake dependency, undefined behavior, or nonsensical control flow is retained. Reopen only for authoritative January source/local records, an authenticated compiler/QFE difference, or a natural same-compiler donor that explains the private-helper ABI and nested-loop lifetimes together. Re-measured 2026-09-16: the static helper render_inverse_transform_screen_point became strict exact (add_vectors3d origin), which restores January's private register convention at this caller's call site; the caller body is unchanged and still non-exact (368 bytes / 14 relocations). 2026-09-27 P-S2 rebaseline (owner-approved, zero credit): the /Od-shaped body (fifty-objects od2; /Od 0x51c780 helper calls already landed as P-S1) replaces the previous body: 116/119 instructions aligned (was 61/119); size 368 and 14 relocations unchanged; base 8ae719b831e3e4705e309f751bbe7567e5ba96cb62d0dbc23278205dc7ccb5d3 / objdiff 86.260506 -> 6b7a4944 / 98.9916. Still residual: the dot product's k-term needs exactly +4 zero-code class-4 records before vec.j's field descriptor, which no first-party source names (RF-DJ); none invented. `short page_index = rows * x` narrows long->short as the /Od imul + 16-bit store shows (C4244 disclosed, no cast); scalar names descriptive, aggregate names /Od RTC-attested.",
"measurements": {
"target": {
"size": 368,
@@ -458,9 +458,9 @@
"base": {
"size": 368,
"relocation_count": 14,
"normalized_sha256": "8ae719b831e3e4705e309f751bbe7567e5ba96cb62d0dbc23278205dc7ccb5d3"
"normalized_sha256": "6b7a4944931a17255b7a7ffaa1f740c07eeab4344bd478ef2cb460a2aa5e2d88"
},
"objdiff_percent": 86.260506
"objdiff_percent": 98.9916
}
},
{
@@ -543,7 +543,7 @@
"unit": "source/rasterizer/xbox/rasterizer_xbox_environment",
"function": "_rasterizer_environment_specular_spot_light_begin",
"class": "register-allocation",
"evidence": "Fuzzy-parked after retaining the complete HCEA-backed spot-light vector and cross-product implementation in ordinary C. January is 960 padded bytes and the candidate 944, with all 64 relocations shared and objdiff at 82.64557 percent. The remaining difference is compiler vector/local allocation and scheduling, not absent renderer behavior; bounded helper and declaration-shape probes did not close it. The source uses project real/vector types and existing math helpers and preserves the January inline schedule without emitting point_from_line3d. No forced inline/noinline, volatile steering, barrier, pragma, assembly, fake arithmetic, raw address, or undefined behavior is retained. Reopen only for authoritative January source/local records or a natural same-compiler donor that explains the vector lifetime schedule.",
"evidence": "Fuzzy-parked after retaining the complete HCEA-backed spot-light vector and cross-product implementation in ordinary C. January is 960 padded bytes and the candidate 944, with all 64 relocations shared and objdiff at 82.64557 percent. The remaining difference is compiler vector/local allocation and scheduling, not absent renderer behavior; bounded helper and declaration-shape probes did not close it. The source uses project real/vector types and existing math helpers and preserves the January inline schedule without emitting point_from_line3d. No forced inline/noinline, volatile steering, barrier, pragma, assembly, fake arithmetic, raw address, or undefined behavior is retained. Reopen only for authoritative January source/local records or a natural same-compiler donor that explains the vector lifetime schedule. 2026-09-27 DA_P1 rebaseline (owner-approved, zero credit): the Aug-15-2001 build (same compiler) compiles this function instruction-for-instruction as the /Od-shaped body with the TU's REAL_MATH_EXTERNAL_SCALE_VECTOR3D define removed (248/248; RF-DA); landed that form. Base moves 944 B / d103843e / objdiff 84.097046 -> 960 B (January's size and frame) / 5099673942f1... / 98.48101, relocations 64 unchanged. Still residual: six x87 products of the inlined cross_product3d need the inline parameter records at IDs == 0 / 7 (mod 8) (today 6 / 5), an Aug->Sept source edit with no other footprint. Reopen on first-party evidence of that edit.",
"measurements": {
"target": {
"size": 960,
@@ -551,11 +551,11 @@
"normalized_sha256": "e0331f6b94a74f9c4b4cc2fbed6d8a0cf3d0e3b8d65c487daeac0b7a0e4ab7af"
},
"base": {
"size": 944,
"size": 960,
"relocation_count": 64,
"normalized_sha256": "d103843ee5f01bad8837e5f3476a8be4de753efdfac7295730c4f47f337533ba"
"normalized_sha256": "5099673942f195f1d208c1c5ee664c9e0e7825418be7c25fd5003bfdba51494e"
},
"objdiff_percent": 84.097046
"objdiff_percent": 98.48101
}
},
{
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -648,7 +648,6 @@
{ "file_offset": 240592, "flags": 32, "name": "_ai_debug_render_path_storage", "static": true },
{ "file_offset": 241408, "flags": 32, "name": "_ai_debug_render_path", "static": true },
{ "file_offset": 241552, "flags": 32, "name": "_ai_debug_render_actor", "static": true },
{ "file_offset": 266128, "flags": 32, "name": "_ai_debug_render_actor_jmptable" },
{ "file_offset": 266528, "flags": 32, "name": "_ai_debug_render_paths_failed", "static": true },
{ "file_offset": 266704, "flags": 32, "name": "_ai_debug_render_all_actors", "static": true },
{ "file_offset": 266784, "flags": 32, "name": "_ai_debug_render_encounter", "static": true },
@@ -22596,6 +22595,7 @@
{ "file_offset": 3176476, "flags": 0, "name": "_player_spawn_count" },
{ "file_offset": 3176478, "flags": 0, "name": "_global_frame_rate_throttle" },
{ "file_offset": 3176480, "flags": 0, "name": "_global_screenshot_size" },
{ "file_offset": 3176484, "flags": 0, "name": "_scenario_paths", "static": true },
{ "file_offset": 3176528, "flags": 0, "name": "_error_geometry_globals", "static": true },
{ "file_offset": 3176644, "flags": 0, "name": "_global_convex_hull3d_delta" },
{ "file_offset": 3176648, "flags": 0, "name": "_global_convex_hull3d_epsilon" },
@@ -0,0 +1,166 @@
# Data and fidelity reconciliation — 2026-09-29
Canonical base: `f3aadeab984b09739d80aacfa877cb5aea51a145`,
`jonas/exact-pilots`. Donor production inputs are pinned to
`1940c840afed190756f9f456301c99aed418bab4`, not its moving branch tip.
This reconciles the Sep-29 addendum and its still-unreconciled Sep-28
prerequisites. The user asked for reconciliation, not a new publication;
these commits are local. Donor trees, the existing README edit and unrelated
untracked research were not changed.
## Result, measured against canonical
| Measure | Before | After | Classification |
| --- | ---: | ---: | --- |
| Halo credited code / 1,770,166 | 1,596,429 | 1,597,714 | +1,285 meaningful, recovered debit |
| Halo exact functions | 7,472 / 7,574 | 7,473 / 7,573 | +1 match; separately −1 phantom denominator row |
| Halo credited data | 2,648,123 / 3,923,451 | 3,311,591 / 3,922,163 | +663,468 credit; separately −1,288 denominator |
| Complete Halo objects / 468 | 396 | 396 | No status flips |
| Stable strict owners / 8,252 | 7,645 | 7,646 | One gain, zero regressions |
| Active valid parks | 68 | 68 | No stale/invalid entries |
The only exact-function gain is
`__rasterizer_model_transparent_geometry_submit`: 1,285 meaningful / 1,296
padded bytes. K048r2 (`23c8082b`) recovers an approved B3 debit through VC7
compiler numbering. It is not a new source-body reconstruction. The diagnostic
37-name filler did not land. `_bitmap_copy` remains the unrecovered B3 debit.
Data credit is separately attributable:
| Packet | Raw | Padding | Credited |
| --- | ---: | ---: | ---: |
| Original Q10 85 records | 657,245 | 311 | 657,556 |
| Q10 EXT1 eight records | 3,400 | 56 | 3,456 |
| actions extent entry | 2,338 | 66 | 2,404 |
| main single-section entry | 52 | 0 | 52 |
| **Total increase** | **663,035** | **433** | **663,468** |
The already-credited hs 54,780 bytes and main .rdata are not claimed again.
The data percentage becomes 84.43%; code is 90.26%. All-category totals are
1,664,450 / 2,198,102 code and 3,317,905 / 4,176,062 data. Vendor code gains: zero.
## Bounded source and storage intake
- Corrected F_ALLH_R (`b008c540`), T01 (`9fb39730`), C06b (`162474a9`)
and C07 (`4320e7db`): later-build names/types retain their evidence limits.
The corrected 144-name packet includes eight single-PDB names, three also
supported by /Od; five lack that second witness. No January-name claim.
- K031/K059/K060/K061 (`daaa1fdb`) stay one coherent packet. Their joint
ballistic-park fingerprint is unchanged; no speculative refresh was made.
- K048r2 retains the shared unsigned `byte nodes[2]` and January's existing
signed consumer view. No yield-selected filler or alternative header placement.
- P-S1 (`8b7e1d1c`) replaces hand-expanded math with the attested helpers;
P-S2 (`03fc26b6`) retains the closer sound-cache residual and its park history.
- T1 (`c094b6dc`) restores the real `ui_widgets_active` call and the attested
body. T1b's optional initializer was not taken.
- DA_P1 (`773f9f8b`) retains the August-attested spot body and removes the
TU-local scale helper suppression. Spot remains non-exact; Q5 lightmap stays
held. January's four lightmap references authenticate the selected scale
provider under this packet's specific approval, not a generalized
non-exact-caller exception.
- set_random_seed S (`085475b6`) takes both attested call sites together.
Game's former NODUP copy becomes ANY; periodic_functions emits an identical
ANY copy. The reconstructed January split's NODUP selection is not treated
as proof that the original source used a non-inline definition.
- C05 (`c217c735`) keeps three explicit perceptions initializers and an
implicit zero fourth. C09 (`1940c840`) removes redundant product parentheses.
**C09 is admitted as ordinary cleanup under the user's explicit clarification.**
History establishes reconstruction origin, not that they were inserted as
scaffolding. Render-actor remains non-exact and earns zero credit.
- COMMON: CV-A′, CV-S, P-HS′, CV-B′, Q-B2 and CP-T B1/B2/B4/B5/B7,
from `a548d62d`, `2bf71228`, `90f77761`, `0dcdf006`, `c7698d7f`,
`6d1040e6`, `cfe97640`, `16a33aad`, `b6d60163`, `d23568d5`.
These produce 52 new tentative definitions relative to canonical, with no
initialized storage or section-byte changes from the definitions themselves.
Ownership remains inferred under the narrow rulings; it is not certified
January ownership. B7's literal allocation size and label renumbering remain
disclosed. B7 and debug_sound_channels remain outside Q10 credit.
- `_scenario_paths` split name (`55829429`) and phantom jump-table row
removal (`8220b041`) are metadata/accounting, not new source-byte matches.
- The biped-discard and endpoint-poll park text corrections preserve the holds
and measurements. They do not admit the held exact variants.
Canonical's virtual-keyboard helper/call and static symbol row, both ordered
physics water-depth predicates, and the two canonical physics park histories
are preserved. The unrelated donor libtiff self-alias macros are excluded.
The source intake therefore is not a blind donor-tree replacement.
## Data verifier and accounting boundary
The reviewed actions surplus-helper rule (`a448602a`) and entry (`4b9fc69d`)
require January's own import and a unique authenticated provider, identical
helper/constant contents, valid relocation addends, select-any storage, no
weak/alternate aliases and the retained guard. Only January-owned data is
credited, not surplus helper code/constants. Main's 52-byte entry is `aa8129c0`.
Q10 production is `9ab48dc8` with EXT1 `4551c4e9` and wording `a3d84118`.
The four LF-normalized pins are unchanged: verifier, COFF reader, provenance
ledger and XDK library manifest. The complete mutation catalogue/harness is
preserved, rather than silently letting missing-fixture tests skip.
Required scope, verbatim: "This lifts Q10 only for those 85 records and the 8
records of allowlist extension EXT1 under this verification contract. It does
not certify January ownership, complete pool layout, or a matching executable
link."
Q10 credits 93 records: 660,645 raw + 367 padding = 661,012. By tag:
64 inferred records / 11,884 bytes; 29 probable records / 649,128 bytes.
`_render`, tagged probable, contributes 643,744 bytes (97.4%). Its later-build
type drift remains disclosed; this is bounded COMMON storage credit, not
proof of the whole record's January source type or initialization behavior.
24 owner-unresolved records, 94 FAIL records, the two unlisted PASS records,
27 vendor records and two linker records remain uncredited by Q10.
`source/linker_common` stays MISSING.
The denominator packet (`38f82c59`) reassigns 29 non-Halo pool records:
libcmt +880, xapilib +308, dsound +4, linker +96. Halo decreases 1,288;
the all-category denominator stays 4,176,062. This is accounting only.
Limitations are intentionally not silently repaired:
- `binkxbox.lib` and `dsstrmh.lib` are not in the authenticated XDK extract.
- The current entry expects `C:/tmp/xdk3911_extract/XDK/xbox/lib`; all 38
manifest libraries were freshly size/hash verified. Another machine needs
those private prerequisites or a separately reviewed path adaptation.
- The hook trusts the freshly invoked pinned verifier. A substituted runner
can still replay a compatible stale PASS against different built objects;
direct receipt-to-current-object binding is the held RF-EZ hardening work.
The ordinary pipeline deletes prior outputs and reruns the verifier.
- Pins do not secure a compromised Python/import environment, unpinned hook
or generated outputs. Provenance is a reviewed trust root, not rediscovered
by the verifier. The frozen allowlist is enforced by its tests and review.
## Independent verification
- Source-only checkpoint, complete tooling checkpoint and a clean rebuild
after `ninja -t clean -r cl`: same single strict gain and zero exact losses.
Cold/current sections and COMMON inventories agree in all 467 Halo objects.
- Baseline/current section census: only six units change sections (ai_debug,
xbox_sound_cache, ui_widget, periodic_functions, xbox_environment,
xbox_models). Game additionally changes set_random_seed selection metadata.
- All 56 surplus helper/literal/table copies in sound/environment/game/periodic,
plus game's owned set_random_seed, match January and current providers.
38 provider pairs / 76 orders: expected unresolved-only exits, no duplicate
or unexpected diagnostics; no images emitted. Periodic object audit PASS;
other differences are precisely their documented residuals.
- Whole-board diagnostic link: unresolved names 471 -> 419, exactly the 52
new COMMON definitions; no new unresolved or duplicate names. One inherited
duplicate remains. Both attempts fail; this is not a playable-build claim.
- Full `/W3 /Zs`: 4,067 -> 4,071. Only P-S2's one long-to-short conversion
and T1's three bounded 0..3 conversions are added. No warning-silencing casts.
- Source and data policy reviews found no additional blocker under the
approved scopes. RF-EV's independent COFF reader/extent model passes 39/39
checks against a freshly executed original-85 control and the final93 entry.
The control varied only the entry path, not verifier code or runner; the
production files were never temporarily rewritten for that experiment.
- Final tools suite: 1,663 passed, five skipped, 159 subtests passed. Parks:
68 valid, zero stale/invalid. Admission: seven candidates, zero contradicted,
rejected or revoked. Fake scan: unchanged 26 leads. `git diff --check` clean.
- Objdiff remains 3.3.1, SHA-256
`090987aa22c0fe9b7d252b2b44c2c0c92c5dd3e9b5965d353060802226a13677`.
Receipts, scripts, baseline objects, full diagnostics and independent reviews
are retained in `scratch/astra_data_reconcile_20260929/`; a compact receipt
index accompanies this ledger. Private executables, objects, PDBs and SDK
libraries are not committed. The 51-set, paren class P1/P2/C07/U, BW-P3,
s7, biped A1, K067 and receipt-binding hardening remain research only.
@@ -0,0 +1,794 @@
{
"schema": "astra-reconciliation-receipt-index/1",
"date": "2026-09-29",
"base": "f3aadeab984b09739d80aacfa877cb5aea51a145",
"donor_production": "1940c840afed190756f9f456301c99aed418bab4",
"canonical_branch": "jonas/exact-pilots",
"published": false,
"halo_before": {
"code": 1596429,
"code_total": 1770166,
"functions": 7472,
"functions_total": 7574,
"data": 2648123,
"data_total": 3923451,
"objects": 396,
"objects_total": 468
},
"halo_after": {
"code": 1597714,
"code_total": 1770166,
"functions": 7473,
"functions_total": 7573,
"data": 3311591,
"data_total": 3922163,
"objects": 396,
"objects_total": 468
},
"delta": {
"code_meaningful": 1285,
"code_padded": 1296,
"functions": 1,
"regressions": 0,
"data_credit": 663468,
"data_raw": 663035,
"data_padding": 433,
"data_denominator": -1288,
"function_denominator": -1,
"objects": 0
},
"gain": "__rasterizer_model_transparent_geometry_submit",
"classification": "recovered B3 debit, compiler-numbering dependent; no filler",
"gates": {
"pytest_passed": 1663,
"pytest_skipped": 5,
"subtests_passed": 159,
"parks": 68,
"parks_stale": 0,
"parks_invalid": 0,
"fake_scan": 26,
"admission_candidates": 7,
"admission_contradicted": 0,
"admission_rejected": 0,
"admission_revoked": 0,
"W3_before": 4067,
"W3_after": 4071,
"ext1_independent_checks": "39/39",
"cold_467_object_section_common_changes": 0,
"provider_pairs": 38,
"provider_orders": 76
},
"common_definition_delta": {
"count": 52,
"resolved_link_names": [
"_antenna_data",
"_assertion_count",
"_avoidance_directions",
"_avoidance_rays",
"_blip_player_index",
"_build_sprite_globals",
"_center_point",
"_debug_damage",
"_debug_decals",
"_debug_fog_planes",
"_debug_leaf_portals",
"_debug_lights",
"_debug_looping_sound",
"_debug_object_lights",
"_debug_point_physics",
"_debug_rasterizer_light_count",
"_debug_render_freeze",
"_debug_scripting",
"_debug_sound",
"_debug_sound_cache",
"_debug_sound_channels",
"_debug_sound_reference_counts",
"_debug_sprites",
"_debug_trigger_volumes",
"_director_camera_scripted",
"_effect_location_data",
"_first_object_type_definition",
"_global_communication_table_indices",
"_global_default_animation_colors",
"_global_default_animation_values",
"_glow_globals",
"_hs_debug_data",
"_hs_global_data",
"_hs_thread_data",
"_hud_msg_def",
"_light_cluster_partition",
"_light_data",
"_local_player_index_for_draw_string_and_hack_in_icons",
"_looping_sound_data",
"_loud_dialog_hack",
"_node_count",
"_particle_systems",
"_sense_rays",
"_sound_channels",
"_sound_class_data",
"_sound_data",
"_system_particles",
"_temporary_hud",
"_ui_plasma_effect_color",
"_weather_particle_data",
"_widget_data",
"_wind_globals"
],
"unresolved_before": 471,
"unresolved_after": 419,
"new_duplicate_names": [],
"whole_program_link_success": false
},
"q10": {
"outcome": "CREDITED",
"credit": {
"records": 93,
"raw": 660645,
"padding": 367,
"total": 661012,
"by_tag": {
"inferred": {
"records": 64,
"raw": 11612,
"padding": 272,
"share": 11884
},
"probable": {
"records": 29,
"raw": 649033,
"padding": 95,
"share": 649128
}
},
"largest_record": {
"symbol": "_render",
"tag": "probable",
"raw": 643732,
"padding": 12,
"share": 643744
},
"rows": [
[
"_debug_looping_sound",
"inferred",
1,
4
],
[
"_debug_sound",
"inferred",
1,
4
],
[
"_loud_dialog_hack",
"inferred",
1,
4
],
[
"_sound_channels",
"inferred",
6144,
6160
],
[
"_looping_sound_data",
"inferred",
4,
4
],
[
"_sound_data",
"inferred",
4,
4
],
[
"_combined_pas",
"inferred",
64,
92
],
[
"_game_sound_globals",
"inferred",
4,
4
],
[
"_game_looping_sound_data",
"inferred",
4,
4
],
[
"_recover_saved_games_hack",
"probable",
1,
4
],
[
"_stun_enable",
"probable",
1,
4
],
[
"_debug_damage_taken",
"inferred",
1,
4
],
[
"_debug_unit_illumination",
"inferred",
1,
4
],
[
"_debug_unit_animations",
"inferred",
1,
4
],
[
"_debug_unit_all_animations",
"inferred",
1,
4
],
[
"_file_location_volume_names",
"probable",
512,
536
],
[
"_debug_fog_planes",
"inferred",
1,
4
],
[
"_structures_use_pvs_for_vs",
"probable",
1,
4
],
[
"_debug_portals",
"inferred",
1,
4
],
[
"_debug_leaf_portals",
"inferred",
1,
4
],
[
"_global_game_globals",
"probable",
4,
4
],
[
"_global_bsp3d",
"probable",
4,
4
],
[
"_global_collision_bsp",
"probable",
4,
4
],
[
"_global_structure_bsp",
"probable",
4,
4
],
[
"_global_scenario",
"probable",
4,
4
],
[
"_debug_sprites",
"inferred",
1,
4
],
[
"_cached_object_render_states",
"inferred",
4,
4
],
[
"_debug_input",
"probable",
1,
4
],
[
"_debug_bsp",
"probable",
1,
4
],
[
"_render",
"probable",
643732,
643744
],
[
"_debug_point_physics",
"inferred",
1,
4
],
[
"_node_count",
"inferred",
4,
4
],
[
"_global_object_marker",
"probable",
4,
4
],
[
"_noncollideable_object_cluster_partition",
"inferred",
12,
24
],
[
"_collideable_object_cluster_partition",
"inferred",
12,
16
],
[
"_object_header_data",
"probable",
4,
4
],
[
"_first_object_type_definition",
"inferred",
4,
4
],
[
"_debug_lights",
"inferred",
1,
4
],
[
"_debug_object_lights",
"inferred",
1,
4
],
[
"_debug_rasterizer_light_count",
"inferred",
2,
4
],
[
"_lights_globals",
"inferred",
848,
872
],
[
"_light_cluster_partition",
"inferred",
12,
16
],
[
"_debug_damage",
"inferred",
1,
4
],
[
"_widget_data",
"inferred",
4,
4
],
[
"_flag_data",
"inferred",
4,
4
],
[
"_antenna_data",
"inferred",
4,
4
],
[
"_network_game_server_memory_do_not_use_directly",
"probable",
1212,
1232
],
[
"_network_game_client_dont_use_directly",
"probable",
3248,
3264
],
[
"_debug_render_freeze",
"inferred",
1,
4
],
[
"_local_player_index_for_draw_string_and_hack_in_icons",
"inferred",
2,
4
],
[
"_ui_plasma_effect_color",
"inferred",
16,
28
],
[
"_blip_player_index",
"inferred",
2,
4
],
[
"_center_point",
"inferred",
8,
8
],
[
"_hud_msg_def",
"inferred",
4,
4
],
[
"_temporary_hud",
"inferred",
1,
4
],
[
"_object_list_data",
"inferred",
4,
4
],
[
"_object_list_header_data",
"inferred",
4,
4
],
[
"_debug_trigger_volumes",
"inferred",
1,
4
],
[
"_debug_scripting",
"inferred",
1,
4
],
[
"_hs_global_data",
"inferred",
4,
4
],
[
"_hs_thread_data",
"inferred",
4,
4
],
[
"_hs_syntax_data",
"probable",
4,
4
],
[
"_players_globals",
"inferred",
4,
4
],
[
"_team_data",
"inferred",
4,
4
],
[
"_player_data",
"probable",
4,
4
],
[
"_global_default_animation_colors",
"inferred",
48,
72
],
[
"_global_default_animation_values",
"inferred",
16,
16
],
[
"_weather_particle_data",
"inferred",
4,
4
],
[
"_system_particles",
"inferred",
4,
4
],
[
"_particle_systems",
"inferred",
4,
4
],
[
"_effect_location_data",
"inferred",
4,
4
],
[
"_debug_decals",
"inferred",
1,
4
],
[
"_temporary",
"probable",
256,
256
],
[
"_pursuit_data",
"inferred",
4,
4
],
[
"_encounter_data",
"probable",
4,
4
],
[
"_platoon_array",
"probable",
4,
4
],
[
"_squad_array",
"probable",
4,
4
],
[
"_global_communication_table_indices",
"inferred",
114,
124
],
[
"_swarm_component_data",
"probable",
4,
4
],
[
"_swarm_data",
"probable",
4,
4
],
[
"_actor_data",
"probable",
4,
4
],
[
"_avoidance_rays",
"inferred",
448,
468
],
[
"_avoidance_directions",
"inferred",
96,
96
],
[
"_sense_rays",
"inferred",
252,
256
],
[
"_global_temporary_render_color",
"inferred",
16,
16
],
[
"_sound_class_data",
"inferred",
4,
4
],
[
"_debug_sound_cache",
"probable",
1,
4
],
[
"_assertion_count",
"probable",
2,
4
],
[
"_debug_sound_reference_counts",
"probable",
1,
4
],
[
"_wind_globals",
"inferred",
3340,
3360
],
[
"_build_sprite_globals",
"inferred",
40,
64
],
[
"_light_data",
"probable",
4,
4
],
[
"_glow_globals",
"inferred",
8,
12
]
],
"uncredited": {
"halo_pass_owner_unresolved": [
24,
565443
],
"halo_fail": [
94,
44384
],
"halo_pass_not_listed": [
2,
5
],
"vendor": [
27,
1125
],
"linker_excluded": [
2,
88
]
},
"not_listed": [
"_debug_sound_channels",
"_director_camera_scripted"
],
"matched_data_before": {
"overall": 2656893,
"category": 2650579,
"unit": 0
},
"matched_data_after": {
"overall": 3317905,
"category": 3311591,
"unit": 661012
}
},
"scope": "This lifts Q10 only for those 85 records and the 8 records of allowlist extension EXT1 under this verification contract. It does not certify January ownership, complete pool layout, or a matching executable link.",
"limitations": "L1: pinning prevents unnoticed changes to reviewed assumptions; it does not prove those assumptions or January ownership.",
"environment": "Pins are not protection against a compromised execution environment. The Python interpreter, its module search path and bytecode cache, the unpinned progress code and the generated build outputs are trusted, not pinned (L1 trust root 8).",
"linked_libraries_not_in_extract": [
"binkxbox.lib",
"dsstrmh.lib"
]
},
"C09_ruling": "Allow ordinary redundant-parentheses cleanup with limitation disclosed; history proves reconstruction origin, not scaffolding intent.",
"private_receipts_directory": "scratch/astra_data_reconcile_20260929",
"receipts": {
"before.json": "19cda0ab95539a0bdacb6a55d3461aafae1c24feed1e4915949a93f375a77b8a",
"source.json": "c8696233931220149663c4fda17f4ec267200426a138955d8b781cfccfb33846",
"final.json": "c8696233931220149663c4fda17f4ec267200426a138955d8b781cfccfb33846",
"cold.json": "c8696233931220149663c4fda17f4ec267200426a138955d8b781cfccfb33846",
"source_diff.log": "c8e952998d1003006438cfd554b37a4e5c423e00f5e0a3f7a61947cd04bd92c2",
"cold_diff.log": "c8e952998d1003006438cfd554b37a4e5c423e00f5e0a3f7a61947cd04bd92c2",
"before_build.log": "1d96e35563fec773b5068bcd7ed3571fca281fae912d145db74fee7a640a8d94",
"source_build.log": "ce4920d28fc395a69efe193048d8fcdc6587c1b863374b2080b5edfde97420ad",
"final_build.log": "f017ef609cdebe6ee9ca91af05f75d8caf83247b7e22d03adcd4a5adff8f511d",
"cold_build.log": "18a2618a479e49d3497b419a1d9715c56f9c9c3f84c7bcc1ffd92f6c56d8e5d4",
"cold_pytest.log": "fce1afd6bdd49b8c363e708af5e044eebf217bf7f5d6ab5b9a1a0a3c87b77af6",
"cold_parks.json": "b5c475c232ec2895126bc90d26807d815cbfbaadc927d5c5d08f4a032b8aa775",
"cold_admission.json": "e4dbf7065fbd4028f5b74b8b82193cb3fc7b3d7c05833e2ab60fead49e6860bd",
"cold_fake.log": "bae88b0678f9e172f8e8a8a9134e0648cf7a3b6f53fbcf981d7d27156018d486",
"batch_warning_delta.json": "95024ce35d5dff141201809de7cdab21c4ec71d65b6bd86ce5dedab3612334fa",
"object_census.json": "78bdd61450407db514a8a00362ac8ec50a7756d7f5683f10487d96c0ea18250d",
"cold_object_census.json": "03909eec6b39c17f4f0feb38378ec19034192f9cb421c8164bb43c9895f4c21b",
"link_delta.json": "a37f0c9b38373589e95f08c17f851f350e9c7bbce616446eacf33cd84112e547",
"control85_progress.txt": "22b51a33385ad8bfdd4ae63ca7137d70754051febdd51d61f9c9bdbb53cb37d6",
"control85_credit_receipt.json": "407b3157fdf337c11270581b4410a6eb6c8f2a03e5539e0f8915bbce906b5cbe",
"extended_progress.txt": "298f420229fa22780e031bdc4d623283fe1b9890f4fb9c8d6db330de6ea5a69f",
"ext1_independent.log": "4ebab428585107a44c8e3ca084340547e5b5e4f1c52d50ecb6c667b9e0d353e4",
"review_q10/REVIEW.md": "cbe06f9cf15b395851219efa1b97768d3fa4940a57047da24088e5adebd724e0",
"review_q10/SOURCE_SCOPE_REVIEW.md": "6eb67b5b5641550b9be9d1b847fc47c2355b25a84c1d92e70aed5ab042d0397a",
"review_q10/HELPER_PROVIDER_REVIEW.md": "a17860c00904262b0f7cd00d383f8cb41fc4fe4413c742f79f2ef1d501eb96c5",
"review_q10/helper_audit.json": "34fd09ea3782ddfb332fe0c698d6c8c283859a3fab1ef1d4f1eab5ef32102659"
},
"production_pins": {
"config/common_pool_credit.json": "bf478a7325c46b4cdc7c4a7a91373719bfb6f9e7edbdaa3b6eb9acd02fc50c3c",
"config/data_category_reassignments.json": "d19f51fd027b9d9b8f90d3507e81526a2d76589c3024728eeddbc5e9df1ef829",
"tools/common_pool_verify.py": "6ca08d007b3a95608e449b4e44a06a5d792a710349c32513a8366a17b044c8be",
"tools/coff_compare.py": "df0004d83c548ed82cd4afe66306ccf9dafbc83e6998fafe23047c3a82ecedd7",
"tools/semantic_progress.py": "b227a7c8c1c3176a55a5d9b890aaf5f168a3d587ae853fffe70721088ce7b3c7",
"research/remaining_frontier_20260926/q10/common_pool_ledger.json": "da1c65de445aac977ed4c14257d929d9c1ada1a1c40e88a573d8688c33300e7f",
"research/remaining_frontier_20260926/q10/xdk3911_lib_manifest.json": "1b8a8350bd456bd61efea345970b793ca7ae8b554f9f63d5a0111571a47ebe3b"
}
}
@@ -0,0 +1,249 @@
{
"schema": "common-pool-ledger/2",
"status": "DRAFT research only; Q10 held; zero credit; provenance is inferred or weaker, never January-proven; research record kept under research/ until Q10 is approved",
"vocabulary": {"inferred": "owner inferred from later first-party builds (>=2 readouts), consistent with January; not January-proven", "probable": "one definer readout, or readouts with a recorded caveat; not January-proven", "unresolved": "no usable definer readout, or readouts disagree; ownership not established"},
"derivation": ["research/remaining_frontier_20260926/workers/RF-DE/tools/build_ledger.py (rules R1-R4): ledger v1 (config/common_pool_ledger.json in RF-DE patch bcdde2e5, LF sha256 3a2f4fecc9a08f9e5b88982db6116b11256380979e6eae578979b612c5ec165a)", "research/remaining_frontier_20260926/workers/RF-DM/tools/integrate_ledger.py: v1 -> v2 (vendor_evidence on the 27 vendor records; _hs_debug_data candidate owner + containment_evidence; every other field unchanged)"],
"rulings": ["Q10 mechanism (2026-09-27): \"Draft it - research only. Separate Halo/vendor accounting; exclude linker records. Verify names, sizes, COMMON class, single definers and provenance without treating inferred ownership as proven.\"", "Q10 fixes (2026-09-27): \"Accept both. Fold F1-F9 into the research draft and require --xdk-lib-dir for every accounting run. Fail closed on missing/unverifiable libraries, malformed types, or ambiguous classification - no ledger-only fallback.\"", "Q10 ledger home (2026-09-27): \"Research records only for now. Keep the draft ledger under research/ until Q10 is approved. Vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded.\"", "hs_debug_data ledger (2026-09-27): \"Candidate owner, unresolved. Record hs_runtime and RF-DI's containment evidence, citing the narrow P-HS' ruling. That ruling authorized the tentative definition; it did not establish a new provenance family or upgrade the ledger classification.\"", "Rule 48 / hs_debug_data (2026-09-27): \"Containment supports an inferred first tentative definer, not proof of exclusive ownership. Any contradictory January storage/import evidence vetoes placement.\""],
"records": [
{"name": "_debug_sound_channels", "rva": "0x4e41a0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/sound/sound_manager.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CV strict /Od SANDWICH(sound_manager.c) (C08)"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); owner sound_manager.obj is not a January referencer (refs: hs_globals_external.obj, sound_dsound_xbox.obj))", "caveats": ["single definer channel (D); owner sound_manager.obj is not a January referencer (refs: hs_globals_external.obj, sound_dsound_xbox.obj)", "readout count alone would allow inferred; tag held at probable by the recorded caveat (never raised by the verifier)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #3", "RF-CV review"]},
{"name": "_debug_looping_sound", "rva": "0x4e41a1", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/sound_manager.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CV strict /Od SANDWICH(sound_manager.c) (C08)"}], "basis": "R2a: RF-CV C08 identical evidence to debug_sound (D + strict /Od SANDWICH); owner approved CV-S", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #4", "RF-CV review"]},
{"name": "_debug_sound", "rva": "0x4e41a2", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/sound_manager.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP", "note": "strict /Od SANDWICH(sound_manager.c) (RF-CV)"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+OD) on sound_manager.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #5", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_loud_dialog_hack", "rva": "0x4e41a3", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/sound_manager.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CV strict /Od SANDWICH(sound_manager.c) (C08)"}], "basis": "R2a: RF-CV C08 identical evidence to debug_sound (D + strict /Od SANDWICH); owner approved CV-S", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #6", "RF-CV review"]},
{"name": "_sound_channels", "rva": "0x4e41c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/sound_manager.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on sound_manager.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #7", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_looping_sound_data", "rva": "0x4e59c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/sound_manager.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on sound_manager.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #8", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_sound_data", "rva": "0x4e59c4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/sound_manager.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "sound_manager", "owner": "source/sound/sound_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on sound_manager.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #9", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_interrupt_result", "rva": "0x4e59c8", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/sound/sound_dsound_xbox.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_dsound_pc", "owner": "source/sound/sound_dsound_xbox.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); platform-sibling mapping: sibling sound_dsound_pc.obj->sound_dsound_xbox.obj)", "caveats": ["single definer channel (D); platform-sibling mapping: sibling sound_dsound_pc.obj->sound_dsound_xbox.obj"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #10", "RF-CV review"]},
{"name": "_dsound_globals", "rva": "0x4e59e0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/sound/sound_dsound_xbox.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_dsound_pc", "owner": "source/sound/sound_dsound_xbox.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); platform-sibling mapping: sibling sound_dsound_pc.obj->sound_dsound_xbox.obj; size not independently confirmed (demo !=134752, HCEX None, Sept map =))", "caveats": ["single definer channel (D); platform-sibling mapping: sibling sound_dsound_pc.obj->sound_dsound_xbox.obj; size not independently confirmed (demo !=134752, HCEX None, Sept map =)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #11", "RF-CV review"]},
{"name": "_sound_class_data", "rva": "0x4ed2ac", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/sound_classes.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "sound_classes", "owner": "source/sound/sound_classes.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "sound_classes", "owner": "source/sound/sound_classes.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on sound_classes.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #12", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER; TYPE SPELLING OPEN (CP-T)"]},
{"name": "_combined_pas", "rva": "0x4ed2c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/game_sound.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game_sound", "owner": "source/sound/game_sound.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "game_sound", "owner": "source/sound/game_sound.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on game_sound.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #13", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_game_sound_globals", "rva": "0x4ed300", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/game_sound.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game_sound", "owner": "source/sound/game_sound.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "game_sound", "owner": "source/sound/game_sound.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on game_sound.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #14", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_game_looping_sound_data", "rva": "0x4ed304", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/sound/game_sound.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game_sound", "owner": "source/sound/game_sound.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "game_sound", "owner": "source/sound/game_sound.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on game_sound.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #15", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_recover_saved_games_hack", "rva": "0x4ed308", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/saved games/game_state.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game_state", "owner": "source/saved games/game_state.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #16", "RF-CV review"]},
{"name": "_debug_sound_cache", "rva": "0x4ed309", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/cache/xbox_sound_cache.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "pc_sound_cache", "owner": "source/cache/xbox_sound_cache.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "pc_sound_cache", "owner": "source/cache/xbox_sound_cache.c", "mapping": "sibling", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict not recorded (RF-CV; owner approved the strict rule for records)"}], "basis": "R2: RF-CP PROBABLE (platform-sibling mapping: sibling pc_sound_cache.obj->xbox_sound_cache.obj; sibling pc_sound_cache.obj->xbox_sound_cache.obj)", "caveats": ["platform-sibling mapping: sibling pc_sound_cache.obj->xbox_sound_cache.obj; sibling pc_sound_cache.obj->xbox_sound_cache.obj"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #17", "RF-CV review"]},
{"name": "_assertion_count", "rva": "0x4ed30a", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/cache/xbox_sound_cache.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "pc_sound_cache", "owner": "source/cache/xbox_sound_cache.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "pc_sound_cache", "owner": "source/cache/xbox_sound_cache.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (platform-sibling mapping: sibling pc_sound_cache.obj->xbox_sound_cache.obj; sibling pc_sound_cache.obj->xbox_sound_cache.obj)", "caveats": ["platform-sibling mapping: sibling pc_sound_cache.obj->xbox_sound_cache.obj; sibling pc_sound_cache.obj->xbox_sound_cache.obj"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #18", "RF-CV review"]},
{"name": "_debug_sound_reference_counts", "rva": "0x4ed30c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/cache/xbox_sound_cache.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "pc_sound_cache", "owner": "source/cache/xbox_sound_cache.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "pc_sound_cache", "owner": "source/cache/xbox_sound_cache.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}, {"channel": "XD", "names": "pc_sound_cache", "owner": "source/cache/xbox_sound_cache.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (platform-sibling mapping: sibling pc_sound_cache.obj->xbox_sound_cache.obj; sibling pc_sound_cache.obj->xbox_sound_cache.obj; sibling pc_sound_cache.obj->xbox_sound_cache.obj; storage contract differs in the demo (real definition, not tentative))", "caveats": ["platform-sibling mapping: sibling pc_sound_cache.obj->xbox_sound_cache.obj; sibling pc_sound_cache.obj->xbox_sound_cache.obj; sibling pc_sound_cache.obj->xbox_sound_cache.obj; storage contract differs in the demo (real definition, not tentative)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #19", "RF-CV review"]},
{"name": "_global_tag_instances", "rva": "0x4ed310", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/cache/cache_files.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "cache_files", "owner": "source/cache/cache_files.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #20", "RF-CV review"]},
{"name": "_debug_objects_vehicle_powered_mass_points", "rva": "0x4ed314", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/units/vehicles.c", "readouts": [{"channel": "OD", "names": "vehicles", "owner": "source/units/vehicles.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #21", "RF-CV review"]},
{"name": "_debug_objects_unit_mouth_apeture", "rva": "0x4ed315", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/units/units.c", "readouts": [{"channel": "OD", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #22", "RF-CV review"]},
{"name": "_debug_objects_unit_seats", "rva": "0x4ed316", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/units/units.c", "readouts": [{"channel": "OD", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #23", "RF-CV review"]},
{"name": "_debug_objects_unit_vectors", "rva": "0x4ed317", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (compiled out (demo hs table entry has NULL address)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #24", "RF-CV review"]},
{"name": "_stun_enable", "rva": "0x4ed318", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/units/units.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R1-exception: RF-CV DOWNGRADE (DOWNGRADE to single channel (D) under RF-CP standard: OD is EDGE; HCEX set {hs_globals_external,units} contains D)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #25", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: DOWNGRADE to single channel (D) under RF-CP standard: OD is EDGE; HCEX set {hs_globals_external,units} contains D"]},
{"name": "_debug_damage_taken", "rva": "0x4ed319", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/units/units.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R1: RF-CP PROVEN (3 independent definer channels agree (D+OD+X) on units.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #26", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_unit_illumination", "rva": "0x4ed31a", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/units/units.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R1: RF-CP PROVEN (3 independent definer channels agree (D+OD+X) on units.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #27", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_unit_animations", "rva": "0x4ed31b", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/units/units.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R1: RF-CP PROVEN (3 independent definer channels agree (D+OD+X) on units.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #28", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_unit_all_animations", "rva": "0x4ed31c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/units/units.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "units", "owner": "source/units/units.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R1: RF-CP PROVEN (3 independent definer channels agree (D+OD+X) on units.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #29", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_objects_biped_autoaim_pills", "rva": "0x4ed31d", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/units/bipeds.c", "readouts": [{"channel": "OD", "names": "bipeds", "owner": "source/units/bipeds.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #30", "RF-CV review"]},
{"name": "_debug_objects_biped_physics_pills", "rva": "0x4ed31e", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (compiled out (demo hs table entry has NULL address)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #31", "RF-CV review"]},
{"name": "_file_location_volume_names", "rva": "0x4ed320", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/tag_files/files.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "files", "owner": "source/tag_files/files.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "files", "owner": "source/tag_files/files.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (size not independently confirmed (demo !=768, HCEX None, Sept map =))", "caveats": ["size not independently confirmed (demo !=768, HCEX None, Sept map =)", "readout count alone would allow inferred; tag held at probable by the recorded caveat (never raised by the verifier)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #32", "RF-CV review"]},
{"name": "_debug_fog_planes", "rva": "0x4ed520", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/structures/structures.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "structures", "owner": "source/structures/structures.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "structures", "owner": "source/structures/structures.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on structures.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #33", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_structures_use_pvs_for_vs", "rva": "0x4ed521", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/structures/structure_visibility.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "structure_visibility", "owner": "source/structures/structure_visibility.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #34", "RF-CV review"]},
{"name": "_debug_portals", "rva": "0x4ed522", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/structures/structure_visibility.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "structure_visibility", "owner": "source/structures/structure_visibility.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "structure_visibility", "owner": "source/structures/structure_visibility.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on structure_visibility.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #35", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_leaf_portals", "rva": "0x4ed523", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/structures/structure_render.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "structure_render", "owner": "source/structures/structure_render.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "structure_render", "owner": "source/structures/structure_render.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on structure_render.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #36", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_window_globals", "rva": "0x4ed540", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [{"channel": "D", "names": "shell_windows", "owner": "source/shell/shell_windows.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "shell_xbox", "owner": "source/shell/shell_xbox.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R3: RF-CP UNRESOLVED (definer channels disagree: D=shell_windows.obj, X=shell_xbox.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #37", "RF-CV review"]},
{"name": "_wind_globals", "rva": "0x4ed5e0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/scenario/wind.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "wind", "owner": "source/scenario/wind.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "wind", "owner": "source/scenario/wind.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on wind.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #38", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER; TYPE SPELLING OPEN (CP-T)"]},
{"name": "_debug_sound_environment", "rva": "0x4ee2ec", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (compiled out (demo hs table entry has NULL address)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #39", "RF-CV review"]},
{"name": "_scenario_globals", "rva": "0x4ee2f0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/scenario/scenario.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "scenario", "owner": "source/scenario/scenario.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "scenario", "owner": "source/scenario/scenario.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on scenario.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #40", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER; TYPE SPELLING OPEN (CP-T)"]},
{"name": "_global_game_globals", "rva": "0x4ee2f4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/scenario/scenario.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "scenario", "owner": "source/scenario/scenario.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #41", "RF-CV review"]},
{"name": "_global_bsp3d", "rva": "0x4ee2f8", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/scenario/scenario.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "scenario", "owner": "source/scenario/scenario.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #42", "RF-CV review"]},
{"name": "_global_collision_bsp", "rva": "0x4ee2fc", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/scenario/scenario.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "scenario", "owner": "source/scenario/scenario.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #43", "RF-CV review"]},
{"name": "_global_structure_bsp", "rva": "0x4ee300", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/scenario/scenario.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "scenario", "owner": "source/scenario/scenario.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #44", "RF-CV review"]},
{"name": "_global_scenario", "rva": "0x4ee304", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/scenario/scenario.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "scenario", "owner": "source/scenario/scenario.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #45", "RF-CV review"]},
{"name": "_debug_sprites", "rva": "0x4ee308", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/render/render_sprite.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "render_sprite", "owner": "source/render/render_sprite.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "render_sprite", "owner": "source/render/render_sprite.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on render_sprite.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #46", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_build_sprite_globals", "rva": "0x4ee320", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/render/render_sprite.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "render_sprite", "owner": "source/render/render_sprite.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "render_sprite", "owner": "source/render/render_sprite.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on render_sprite.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #47", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER; TYPE SPELLING OPEN (CP-T)"]},
{"name": "_debug_objects", "rva": "0x4ee348", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/render/render_objects.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "render_objects", "owner": "source/render/render_objects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #48", "RF-CV review"]},
{"name": "_cached_object_render_states", "rva": "0x4ee34c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/render/render_objects.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "render_objects", "owner": "source/render/render_objects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "render_objects", "owner": "source/render/render_objects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on render_objects.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #49", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_permanent_decals", "rva": "0x4ee350", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (compiled out (demo hs table entry has NULL address)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #50", "RF-CV review"]},
{"name": "_debug_input", "rva": "0x4ee351", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/render/render_debug.c", "candidate_owner": null, "readouts": [{"channel": "OD", "names": "render_debug", "owner": "source/render/render_debug.c", "mapping": "direct", "counted": true, "source": "RF-CP", "note": "strict /Od SANDWICH(render_debug.c) (RF-CV)"}], "basis": "R2b: OD-only, strict /Od SANDWICH(render_debug.c)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #51", "RF-CV review"]},
{"name": "_debug_bsp", "rva": "0x4ee352", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/render/render_debug.c", "candidate_owner": null, "readouts": [{"channel": "OD", "names": "render_debug", "owner": "source/render/render_debug.c", "mapping": "direct", "counted": true, "source": "RF-CP", "note": "strict /Od SANDWICH(render_debug.c) (RF-CV)"}], "basis": "R2b: OD-only, strict /Od SANDWICH(render_debug.c)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #52", "RF-CV review"]},
{"name": "_debug_structure", "rva": "0x4ee353", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/render/render_debug.c", "readouts": [{"channel": "OD", "names": "render_debug", "owner": "source/render/render_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #53", "RF-CV review"]},
{"name": "_debug_player", "rva": "0x4ee354", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/render/render_debug.c", "readouts": [{"channel": "OD", "names": "render_debug", "owner": "source/render/render_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #54", "RF-CV review"]},
{"name": "_debug_camera", "rva": "0x4ee355", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/render/render_debug.c", "readouts": [{"channel": "OD", "names": "render_debug", "owner": "source/render/render_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #55", "RF-CV review"]},
{"name": "_render", "rva": "0x4ee360", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/render/render.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "render", "owner": "source/render/render.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); size not independently confirmed (demo !=643736, HCEX !=643736, Sept map ok+gap12))", "caveats": ["single definer channel (D); size not independently confirmed (demo !=643736, HCEX !=643736, Sept map ok+gap12)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #56", "RF-CV review"]},
{"name": "_rasterizer_lights", "rva": "0x58b600", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/rasterizer/rasterizer_lights.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "rasterizer_lights", "owner": "source/rasterizer/rasterizer_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); size not independently confirmed (demo !=7176, HCEX !=7176, Sept map ok+gap28))", "caveats": ["single definer channel (D); size not independently confirmed (demo !=7176, HCEX !=7176, Sept map ok+gap28)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #57", "RF-CV review"]},
{"name": "_rasterizer_frame_statistics", "rva": "0x58d220", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/rasterizer/rasterizer_frame_statistics.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "rasterizer_frame_statistics", "owner": "source/rasterizer/rasterizer_frame_statistics.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); size not independently confirmed (demo !=28, HCEX !=28, Sept map =))", "caveats": ["single definer channel (D); size not independently confirmed (demo !=28, HCEX !=28, Sept map =)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #58", "RF-CV review"]},
{"name": "_rasterizer_model_cortana_hack", "rva": "0x58d390", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/rasterizer/xbox/rasterizer_xbox_models.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "rasterizer_dx9_models", "owner": "source/rasterizer/xbox/rasterizer_xbox_models.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); platform-sibling mapping: sibling rasterizer_dx9_models.obj->rasterizer_xbox_models.obj)", "caveats": ["single definer channel (D); platform-sibling mapping: sibling rasterizer_dx9_models.obj->rasterizer_xbox_models.obj"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #59", "RF-CV review"]},
{"name": "_texture_table", "rva": "0x58d3a0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #60", "RF-CV review"]},
{"name": "_texturestagestate_table", "rva": "0x58d3c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #61", "RF-CV review"]},
{"name": "_renderstate_table", "rva": "0x58d5c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #62", "RF-CV review"]},
{"name": "_global_d3d_caps", "rva": "0x58d800", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/rasterizer/xbox/rasterizer_xbox.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "rasterizer_dx9", "owner": "source/rasterizer/xbox/rasterizer_xbox.c", "mapping": "sibling", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); platform-sibling mapping: sibling rasterizer_dx9.obj->rasterizer_xbox.obj; size not independently confirmed (demo !=304, HCEX !=304, Sept map ok+gap12))", "caveats": ["single definer channel (D); platform-sibling mapping: sibling rasterizer_dx9.obj->rasterizer_xbox.obj; size not independently confirmed (demo !=304, HCEX !=304, Sept map ok+gap12)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #63", "RF-CV review"]},
{"name": "_pixel_shader", "rva": "0x58d8e0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #64", "RF-CV review"]},
{"name": "_global_window_parameters", "rva": "0x58d9e0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/rasterizer/common/rasterizer_common.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "rasterizer_common", "owner": "source/rasterizer/common/rasterizer_common.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); owner rasterizer_common.obj is not a January referencer (refs: rasterizer.obj, rasterizer_debug.obj, rasterizer_lights.obj, rasterizer_text.obj, rasterizer_transparent_geometry.obj, rasterizer_xbox.obj, rasterizer_xbox_active_camouflage.obj, rasterizer_xbox_debug.obj, rasterizer_xbox_decals.obj, rasterizer_xbox_draw_primitives.obj, rasterizer_xbox_dynavobgeom.obj, rasterizer_xbox_environment.obj, rasterizer_xbox_environment_fog.obj, rasterizer_xbox_lights.obj, rasterizer_xbox_models.obj, rasterizer_xbox_motion_sensor.obj, rasterizer_xbox_profile.obj, rasterizer_xbox_screen_effect.obj, rasterizer_xbox_shadows.obj, rasterizer_xbox_text.obj, rasterizer_xbox_transparent_geometry.obj, rasterizer_xbox_water.obj, rasterizer_xbox_widgets.obj))", "caveats": ["single definer channel (D); owner rasterizer_common.obj is not a January referencer (refs: rasterizer.obj, rasterizer_debug.obj, rasterizer_lights.obj, rasterizer_text.obj, rasterizer_transparent_geometry.obj, rasterizer_xbox.obj, rasterizer_xbox_active_camouflage.obj, rasterizer_xbox_debug.obj, rasterizer_xbox_decals.obj, rasterizer_xbox_draw_primitives.obj, rasterizer_xbox_dynavobgeom.obj, rasterizer_xbox_environment.obj, rasterizer_xbox_environment_fog.obj, rasterizer_xbox_lights.obj, rasterizer_xbox_models.obj, rasterizer_xbox_motion_sensor.obj, rasterizer_xbox_profile.obj, rasterizer_xbox_screen_effect.obj, rasterizer_xbox_shadows.obj, rasterizer_xbox_text.obj, rasterizer_xbox_transparent_geometry.obj, rasterizer_xbox_water.obj, rasterizer_xbox_widgets.obj)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #65", "RF-CV review"]},
{"name": "_global_frame_parameters", "rva": "0x58dc38", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/rasterizer/common/rasterizer_common.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "rasterizer_common", "owner": "source/rasterizer/common/rasterizer_common.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); size not independently confirmed (demo !=16, HCEX !=16, Sept map =))", "caveats": ["single definer channel (D); size not independently confirmed (demo !=16, HCEX !=16, Sept map =)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #66", "RF-CV review"]},
{"name": "_debug_point_physics", "rva": "0x58dc40", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/physics/point_physics.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "point_physics", "owner": "source/physics/point_physics.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "point_physics", "owner": "source/physics/point_physics.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on point_physics.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #67", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_collision_usage_buffer", "rva": "0x58dc60", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #68", "RF-CV review"]},
{"name": "_collision_usage_current", "rva": "0x58ff00", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #69", "RF-CV review"]},
{"name": "_global_current_collision_users", "rva": "0x590aa0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #70", "RF-CV review"]},
{"name": "_collision_debug_phantom_bsp_point", "rva": "0x590ae0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #71", "RF-CV review"]},
{"name": "_collision_debug_flags", "rva": "0x590aec", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #72", "RF-CV review"]},
{"name": "_collision_debug_radius", "rva": "0x590af0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #73", "RF-CV review"]},
{"name": "_collision_debug_center", "rva": "0x590b00", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #74", "RF-CV review"]},
{"name": "_collision_debug_vector", "rva": "0x590b10", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #75", "RF-CV review"]},
{"name": "_collision_debug_point", "rva": "0x590b20", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #76", "RF-CV review"]},
{"name": "_collision_debug_flag_use_vehicle_physics", "rva": "0x590b2c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #77", "RF-CV review"]},
{"name": "_collision_debug_flag_skip_passthrough_bipeds", "rva": "0x590b2d", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #78", "RF-CV review"]},
{"name": "_collision_debug_flag_try_to_keep_location_valid", "rva": "0x590b2e", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #79", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_placeholders", "rva": "0x590b2f", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #80", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_light_fixtures", "rva": "0x590b30", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #81", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_controls", "rva": "0x590b31", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #82", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_machines", "rva": "0x590b32", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #83", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_scenery", "rva": "0x590b33", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #84", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_projectiles", "rva": "0x590b34", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #85", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_equipment", "rva": "0x590b35", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #86", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_weapons", "rva": "0x590b36", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #87", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_vehicles", "rva": "0x590b37", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #88", "RF-CV review"]},
{"name": "_collision_debug_flag_objects_bipeds", "rva": "0x590b38", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #89", "RF-CV review"]},
{"name": "_collision_debug_flag_ignore_breakable_surfaces", "rva": "0x590b39", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #90", "RF-CV review"]},
{"name": "_collision_debug_flag_ignore_two_sided_surfaces", "rva": "0x590b3a", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #91", "RF-CV review"]},
{"name": "_collision_debug_flag_back_facing_surfaces", "rva": "0x590b3b", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #92", "RF-CV review"]},
{"name": "_collision_debug_repeat", "rva": "0x590b3c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #93", "RF-CV review"]},
{"name": "_collision_debug_features", "rva": "0x590b3d", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #94", "RF-CV review"]},
{"name": "_collision_debug_spray", "rva": "0x590b3e", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #95", "RF-CV review"]},
{"name": "_collision_debug", "rva": "0x590b3f", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/physics/collision_debug.c", "readouts": [{"channel": "OD", "names": "collision_debug", "owner": "source/physics/collision_debug.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #96", "RF-CV review"]},
{"name": "_node_count", "rva": "0x590b40", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/physics/bsp3d.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "bsp3d", "owner": "source/physics/bsp3d.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "bsp3d", "owner": "source/physics/bsp3d.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on bsp3d.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #97", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_objects_names", "rva": "0x590b44", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/objects/objects.c", "readouts": [{"channel": "OD", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #98", "RF-CV review"]},
{"name": "_debug_objects_pathfinding_spheres", "rva": "0x590b45", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/objects/objects.c", "readouts": [{"channel": "OD", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #99", "RF-CV review"]},
{"name": "_debug_objects_physics", "rva": "0x590b46", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/objects/objects.c", "readouts": [{"channel": "OD", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #100", "RF-CV review"]},
{"name": "_debug_objects_root_node", "rva": "0x590b47", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/objects/objects.c", "readouts": [{"channel": "OD", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #101", "RF-CV review"]},
{"name": "_global_object_marker", "rva": "0x590b48", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/objects/objects.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #102", "RF-CV review"]},
{"name": "_noncollideable_object_cluster_partition", "rva": "0x590b50", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/objects.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on objects.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #103", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_collideable_object_cluster_partition", "rva": "0x590b60", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/objects.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on objects.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #104", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_object_garbage_collection", "rva": "0x590b6c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (compiled out (demo hs table entry has NULL address)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #105", "RF-CV review"]},
{"name": "_object_header_data", "rva": "0x590b70", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/objects/objects.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "objects", "owner": "source/objects/objects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #106", "RF-CV review"]},
{"name": "_first_object_type_definition", "rva": "0x590b74", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/object_types.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "object_types", "owner": "source/objects/object_types.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "object_types", "owner": "source/objects/object_types.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on object_types.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #107", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_lights", "rva": "0x590b78", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/object_lights.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP", "note": "strict /Od SANDWICH(object_lights.c) (RF-CV)"}], "basis": "R1: RF-CP PROVEN (3 independent definer channels agree (D+OD+X) on object_lights.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #108", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_object_lights", "rva": "0x590b79", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/object_lights.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP", "note": "strict /Od SANDWICH(object_lights.c) (RF-CV)"}], "basis": "R1: RF-CP PROVEN (3 independent definer channels agree (D+OD+X) on object_lights.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #109", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_rasterizer_light_count", "rva": "0x590b7a", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/object_lights.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on object_lights.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #110", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_lights_globals", "rva": "0x590b80", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/object_lights.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on object_lights.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #111", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_light_cluster_partition", "rva": "0x590ed0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/object_lights.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on object_lights.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #112", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_light_data", "rva": "0x590edc", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/objects/object_lights.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "object_lights", "owner": "source/objects/object_lights.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #113", "RF-CV review"]},
{"name": "_debug_damage", "rva": "0x590ee0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/damage.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "damage", "owner": "source/objects/damage.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "damage", "owner": "source/objects/damage.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on damage.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #114", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_widget_data", "rva": "0x590ee4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/widgets/widgets.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "widgets", "owner": "source/objects/widgets/widgets.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "widgets", "owner": "source/objects/widgets/widgets.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on widgets.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #115", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_glow_globals", "rva": "0x590ee8", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/widgets/glow.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "glow", "owner": "source/objects/widgets/glow.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "glow", "owner": "source/objects/widgets/glow.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on glow.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #116", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER; TYPE SPELLING OPEN (CP-T)"]},
{"name": "_flag_data", "rva": "0x590ef0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/widgets/flags.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "flags", "owner": "source/objects/widgets/flags.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "flags", "owner": "source/objects/widgets/flags.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on flags.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #117", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_antenna_data", "rva": "0x590ef4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/objects/widgets/antenna.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "antenna", "owner": "source/objects/widgets/antenna.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "antenna", "owner": "source/objects/widgets/antenna.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on antenna.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #118", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_network_game_server_memory_do_not_use_directly", "rva": "0x590f00", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/networking/network_server_manager.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "network_server_manager", "owner": "source/networking/network_server_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "L", "names": "network_server_manager", "owner": "source/networking/network_server_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (size not independently confirmed (demo !=2476, HCEX None, Sept map ok+gap4))", "caveats": ["size not independently confirmed (demo !=2476, HCEX None, Sept map ok+gap4)", "readout count alone would allow inferred; tag held at probable by the recorded caveat (never raised by the verifier)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #119", "RF-CV review"]},
{"name": "_network_game_client_dont_use_directly", "rva": "0x5913c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/networking/network_client_manager.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "network_client_manager", "owner": "source/networking/network_client_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "L", "names": "network_client_manager", "owner": "source/networking/network_client_manager.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (size not independently confirmed (demo !=2956, HCEX None, Sept map =))", "caveats": ["size not independently confirmed (demo !=2956, HCEX None, Sept map =)", "readout count alone would allow inferred; tag held at probable by the recorded caveat (never raised by the verifier)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #120", "RF-CV review"]},
{"name": "_render_model_no_geometry", "rva": "0x592070", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/models/models.c", "readouts": [{"channel": "OD", "names": "models", "owner": "source/models/models.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #121", "RF-CV review"]},
{"name": "_render_model_markers", "rva": "0x592071", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/models/models.c", "readouts": [{"channel": "OD", "names": "models", "owner": "source/models/models.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #122", "RF-CV review"]},
{"name": "_render_model_index_counts", "rva": "0x592072", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/models/models.c", "readouts": [{"channel": "OD", "names": "models", "owner": "source/models/models.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #123", "RF-CV review"]},
{"name": "_render_model_vertex_counts", "rva": "0x592073", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/models/models.c", "readouts": [{"channel": "OD", "names": "models", "owner": "source/models/models.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R2b: OD-only, strict /Od EDGE -> no counted readout", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #124", "RF-CV review"]},
{"name": "_render_model_nodes", "rva": "0x592074", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/models/models.c", "candidate_owner": null, "readouts": [{"channel": "X", "names": "models", "owner": "source/models/models.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (X); size not independently confirmed (demo None, HCEX None, Sept map =))", "caveats": ["single definer channel (X); size not independently confirmed (demo None, HCEX None, Sept map =)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #125", "RF-CV review"]},
{"name": "_debug_render_freeze", "rva": "0x592075", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/main/main.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "main", "owner": "source/main/main.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "main", "owner": "source/main/main.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "main", "owner": "source/main/main.c", "mapping": "direct", "counted": true, "source": "RF-CP", "note": "strict /Od SANDWICH(main.c) (RF-CV)"}], "basis": "R1: RF-CP PROVEN (3 independent definer channels agree (D+OD+X) on main.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #126", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_cached_variant_profile", "rva": "0x592080", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/interface/ui_widget_game_data_input_functions.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "ui_widget_game_data_input_functions", "owner": "source/interface/ui_widget_game_data_input_functions.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); size not independently confirmed (demo !=468, HCEX !=468, Sept map ok+gap28))", "caveats": ["single definer channel (D); size not independently confirmed (demo !=468, HCEX !=468, Sept map ok+gap28)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #127", "RF-CV review"]},
{"name": "_cached_player_profile", "rva": "0x5921e0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/interface/ui_widget_game_data_input_functions.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "ui_widget_game_data_input_functions", "owner": "source/interface/ui_widget_game_data_input_functions.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); size not independently confirmed (demo !=24576, HCEX !=5952, Sept map =))", "caveats": ["single definer channel (D); size not independently confirmed (demo !=24576, HCEX !=5952, Sept map =)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #128", "RF-CV review"]},
{"name": "_local_player_index_for_draw_string_and_hack_in_icons", "rva": "0x59227c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/interface/ui_widget.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "ui_widget", "owner": "source/interface/ui_widget.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "ui_widget", "owner": "source/interface/ui_widget.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on ui_widget.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #129", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_ui_plasma_effect_color", "rva": "0x592280", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/interface/ui_widget.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "ui_widget", "owner": "source/interface/ui_widget.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "ui_widget", "owner": "source/interface/ui_widget.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on ui_widget.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #130", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_light_z", "rva": "0x592290", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #131", "RF-CV review"]},
{"name": "_light_y", "rva": "0x592294", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #132", "RF-CV review"]},
{"name": "_light_x", "rva": "0x592298", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #133", "RF-CV review"]},
{"name": "_blur_shader", "rva": "0x5922a0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #134", "RF-CV review"]},
{"name": "_regular_shader", "rva": "0x5923a0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #135", "RF-CV review"]},
{"name": "_current_time", "rva": "0x592490", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #136", "RF-CV review"]},
{"name": "_profile_graph", "rva": "0x592494", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (compiled out (demo hs table entry has NULL address)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #137", "RF-CV review"]},
{"name": "_profile_display", "rva": "0x592495", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (compiled out (demo hs table entry has NULL address)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #138", "RF-CV review"]},
{"name": "_blip_player_index", "rva": "0x592496", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/interface/motion_sensor.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on motion_sensor.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #139", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_num_drawn", "rva": "0x592498", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/interface/motion_sensor.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on motion_sensor.obj; no January referencer (unreferenced tentative definition; NOREF link keeps it))", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #140", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE (CP-N): unreferenced; D+X; pool 139/140 bracketed by motion_sensor records; types rest on later builds"]},
{"name": "_num_triangles", "rva": "0x59249a", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/interface/motion_sensor.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on motion_sensor.obj; no January referencer (unreferenced tentative definition; NOREF link keeps it))", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #141", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE (CP-N): unreferenced; D+X; pool 139/140 bracketed by motion_sensor records; types rest on later builds"]},
{"name": "_center_point", "rva": "0x5924a0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/interface/motion_sensor.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on motion_sensor.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #142", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_color32", "rva": "0x5924a8", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/interface/motion_sensor.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "motion_sensor", "owner": "source/interface/motion_sensor.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on motion_sensor.obj; no January referencer (unreferenced tentative definition; NOREF link keeps it))", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #143", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER (CP-N): unreferenced; typedef spelling unrecoverable (unsigned long vs pixel32)"]},
{"name": "_hud_msg_def", "rva": "0x5924ac", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/interface/hud_messaging.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "hud_messaging", "owner": "source/interface/hud_messaging.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "hud_messaging", "owner": "source/interface/hud_messaging.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on hud_messaging.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #144", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_temporary_hud", "rva": "0x5924b0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/interface/hud.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "hud", "owner": "source/interface/hud.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "hud", "owner": "source/interface/hud.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on hud.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #145", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_object_list_data", "rva": "0x5924b4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/hs/object_lists.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "object_lists", "owner": "source/hs/object_lists.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "object_lists", "owner": "source/hs/object_lists.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on object_lists.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #146", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_object_list_header_data", "rva": "0x5924b8", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/hs/object_lists.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "object_lists", "owner": "source/hs/object_lists.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "object_lists", "owner": "source/hs/object_lists.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on object_lists.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #147", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_trigger_volumes", "rva": "0x5924bc", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/hs/hs_runtime.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "hs_runtime", "owner": "source/hs/hs_runtime.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "hs_runtime", "owner": "source/hs/hs_runtime.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "OD", "names": "hs_runtime", "owner": "source/hs/hs_runtime.c", "mapping": "direct", "counted": false, "source": "RF-CP", "note": "not counted: strict /Od verdict EDGE (RF-CV; owner approved the strict rule for records)"}], "basis": "R1: RF-CP PROVEN (3 independent definer channels agree (D+OD+X) on hs_runtime.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #148", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_debug_scripting", "rva": "0x5924bd", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/hs/hs_runtime.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "hs_runtime", "owner": "source/hs/hs_runtime.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "hs_runtime", "owner": "source/hs/hs_runtime.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on hs_runtime.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #149", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_hs_debug_data", "rva": "0x5924c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": "source/hs/hs_runtime.c", "readouts": [], "containment_evidence": [{"kind": "pool-containment", "candidate_owner": "source/hs/hs_runtime.c", "lower_neighbours": ["_debug_trigger_volumes", "_debug_scripting"], "upper_neighbours": ["_hs_global_data", "_hs_thread_data"], "neighbour_owner_evidence": "RF-DI (own readers): all four neighbours -> hs_runtime (PC demo LTCG GlobalRefs; HCEX and HCEX_Release non-LTCG singletons; January referencer sets from cachebeta.exe base relocations; Aug/Sept-2001 debug maps <common> in the same order); this ledger tags all four inferred with owner source/hs/hs_runtime.c", "ordering_model": "RF-DI C01 on the production linker (Link 7.00.9290 = the lane linker, byte-identical): the pool follows the linker's module list; each module contributes the COMMON records it FIRST tentatively defined. Records between two records with the same first tentative definer O were first tentatively defined by O. Not implied: exclusivity, that O references it, its type or its declared bound.", "veto_check": "RF-DI: no contradictory January storage/import evidence ('* Linker *' COMMON 32 B, no real definition, no initializer; January referencers hs_runtime 2 + hs_library_external 6 relocations; no imports/exports; 2001 debug maps <common>; Sept-2001 retail map lacks it: neutral)", "ruling": "Narrow P-HS' ruling (Rule 48 / hs_debug_data, 2026-09-27): containment supports an inferred first tentative definer, not proof of exclusive ownership; P-HS' landed at zero credit (R62i). hs_debug_data ledger ruling (2026-09-27): candidate owner, unresolved; that ruling authorized the tentative definition, it did not establish a new provenance family or upgrade the ledger classification.", "sources": ["research/remaining_frontier_20260926/workers/RF-DI/REPORT.md", "research/remaining_frontier_20260926/workers/RF-DI/NOTES.md (22:03-22:16: neighbours, veto check, verdicts)", "research/remaining_frontier_20260926/workers/RF-DI/cards/C01_production_linker_pool_lab.md", "research/remaining_frontier_20260926/workers/RF-DI/evidence/pool_pdb.tsv", "research/remaining_frontier_20260926/workers/RF-DI/evidence/jan_sites_hs_debug_data.txt", "research/remaining_frontier_20260926/OWNER_PACKET.md (Rule 48 / hs_debug_data; P-HS' landing; hs_debug_data ledger)"]}], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent); candidate owner source/hs/hs_runtime.c from pool containment (RF-DI), recorded as containment_evidence only: containment is not a definer readout and never raises the tag (owner rulings 2026-09-27)", "caveats": ["candidate owner only: containment supports an inferred first tentative definer, not ownership; no definer readout exists (absent from the PC demo and both HCEX PDBs); tag stays unresolved"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #150", "RF-CV review", "RF-DI review (containment, neighbours, veto check)", "OWNER_PACKET 2026-09-27: Rule 48 / hs_debug_data; P-HS'; hs_debug_data ledger"]},
{"name": "_hs_global_data", "rva": "0x5924e0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/hs/hs_runtime.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "hs_runtime", "owner": "source/hs/hs_runtime.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "hs_runtime", "owner": "source/hs/hs_runtime.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on hs_runtime.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #151", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_hs_thread_data", "rva": "0x5924e4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/hs/hs_runtime.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "hs_runtime", "owner": "source/hs/hs_runtime.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "hs_runtime", "owner": "source/hs/hs_runtime.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on hs_runtime.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #152", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_hs_syntax_data", "rva": "0x5924e8", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/hs/hs.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "hs", "owner": "source/hs/hs.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #153", "RF-CV review"]},
{"name": "_players_globals", "rva": "0x5924ec", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/game/players.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "players", "owner": "source/game/players.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "players", "owner": "source/game/players.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on players.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #154", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_team_data", "rva": "0x5924f0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/game/players.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "players", "owner": "source/game/players.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "players", "owner": "source/game/players.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on players.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #155", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_player_data", "rva": "0x5924f4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/game/players.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "players", "owner": "source/game/players.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #156", "RF-CV review"]},
{"name": "_global_default_animation_colors", "rva": "0x592500", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/game/game_engine_king.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game_engine_king", "owner": "source/game/game_engine_king.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "game_engine_king", "owner": "source/game/game_engine_king.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on game_engine_king.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #157", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_global_default_animation_values", "rva": "0x592530", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/game/game_engine_king.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game_engine_king", "owner": "source/game/game_engine_king.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "game_engine_king", "owner": "source/game/game_engine_king.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on game_engine_king.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #158", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_game_engine_globals", "rva": "0x592540", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/game/game_engine.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game_engine", "owner": "source/game/game_engine.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "game_engine", "owner": "source/game/game_engine.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on game_engine.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #159", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER; TYPE SPELLING OPEN (CP-T)"]},
{"name": "_timeout_for_endgame_sound", "rva": "0x592564", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/game/game_engine.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game_engine", "owner": "source/game/game_engine.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #160", "RF-CV review"]},
{"name": "_global_stage", "rva": "0x592580", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/game/game_engine.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game_engine", "owner": "source/game/game_engine.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "game_engine", "owner": "source/game/game_engine.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (size not independently confirmed (demo !=216, HCEX !=216, Sept map ok+gap24))", "caveats": ["size not independently confirmed (demo !=216, HCEX !=216, Sept map ok+gap24)", "readout count alone would allow inferred; tag held at probable by the recorded caveat (never raised by the verifier)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #161", "RF-CV review"]},
{"name": "_game_variant_global", "rva": "0x592640", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/game/game.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "game", "owner": "source/game/game.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "game", "owner": "source/game/game.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (size not independently confirmed (demo !=152, HCEX !=152, Sept map ok+gap8))", "caveats": ["size not independently confirmed (demo !=152, HCEX !=152, Sept map ok+gap8)", "readout count alone would allow inferred; tag held at probable by the recorded caveat (never raised by the verifier)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #162", "RF-CV review"]},
{"name": "_cheat", "rva": "0x5926b0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/game/cheats.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "cheats", "owner": "source/game/cheats.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #163", "RF-CV review"]},
{"name": "_weather_particle_data", "rva": "0x5926bc", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/effects/weather_particle_systems.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "weather_particle_systems", "owner": "source/effects/weather_particle_systems.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "weather_particle_systems", "owner": "source/effects/weather_particle_systems.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on weather_particle_systems.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #164", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_particle_data", "rva": "0x5926c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/effects/particles.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "particles", "owner": "source/effects/particles.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #165", "RF-CV review"]},
{"name": "_system_particles", "rva": "0x5926c4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/effects/particle_systems.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "particle_systems", "owner": "source/effects/particle_systems.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "particle_systems", "owner": "source/effects/particle_systems.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on particle_systems.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #166", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_particle_systems", "rva": "0x5926c8", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/effects/particle_systems.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "particle_systems", "owner": "source/effects/particle_systems.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "particle_systems", "owner": "source/effects/particle_systems.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on particle_systems.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #167", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_effect_location_data", "rva": "0x5926cc", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/effects/effects.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "effects", "owner": "source/effects/effects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "effects", "owner": "source/effects/effects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on effects.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #168", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_effect_data", "rva": "0x5926d0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/effects/effects.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "effects", "owner": "source/effects/effects.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #169", "RF-CV review"]},
{"name": "_debug_decals", "rva": "0x5926d4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/effects/decals.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "decals", "owner": "source/effects/decals.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "decals", "owner": "source/effects/decals.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on decals.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #170", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_global_decal_data", "rva": "0x5926d8", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/effects/decals.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "decals", "owner": "source/effects/decals.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #171", "RF-CV review"]},
{"name": "_contrail_point_data", "rva": "0x5926dc", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/effects/contrails.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "contrails", "owner": "source/effects/contrails.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #172", "RF-CV review"]},
{"name": "_contrail_data", "rva": "0x5926e0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/effects/contrails.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "contrails", "owner": "source/effects/contrails.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #173", "RF-CV review"]},
{"name": "_debug_objects_devices", "rva": "0x5926e4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (compiled out (demo hs table entry has NULL address)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #174", "RF-CV review"]},
{"name": "_device_groups_data", "rva": "0x5926e8", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/devices/devices.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "devices", "owner": "source/devices/devices.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #175", "RF-CV review"]},
{"name": "_error_globals", "rva": "0x592700", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/cseries/errors.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "errors", "owner": "source/cseries/errors.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); size not independently confirmed (demo !=4106, HCEX !=4106, Sept map ok+gap24))", "caveats": ["single definer channel (D); size not independently confirmed (demo !=4106, HCEX !=4106, Sept map ok+gap24)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #176", "RF-CV review"]},
{"name": "_temporary", "rva": "0x592f20", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/cseries/cseries.c", "candidate_owner": null, "readouts": [{"channel": "X", "names": "cseries", "owner": "source/cseries/cseries.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (X); owner cseries.obj is not a January referencer (refs: action_obey.obj, actor_combat.obj, actor_firing_position.obj, actor_looking.obj, actor_moving.obj, actors.obj, ai.obj, ai_communication.obj, ai_debug.obj, ai_script.obj, encounters.obj, path_obstacle_avoidance.obj, bink_playback.obj, bitmap_drawing.obj, bitmap_utilities.obj, bitmaps.obj, cache_files.obj, cache_files_windows.obj, xbox_sound_cache.obj, bored_camera.obj, camera_scripting.obj, dead_camera.obj, editor_flying_camera.obj, first_person_camera.obj, flying_camera.obj, following_camera.obj, observer.obj, orbiting_camera.obj, static_camera.obj, debug_memory.obj, recorded_animations.obj, contrails.obj, decals.obj, effects.obj, particles.obj, player_effects.obj, aim_assist.obj, player_control.obj, player_queues_new.obj, players.obj, hs_library_external.obj, hs_runtime.obj, hud.obj, hud_draw.obj, hud_messaging.obj, hud_nav_points.obj, hud_unit.obj, hud_weapon.obj, motion_sensor.obj, terminal.obj, projectiles.obj, weapons.obj, integer_math.obj, real_math.obj, byte_swapping.obj, circular_queue.obj, data.obj, data_packets.obj, lra_cache.obj, lrar_cache.obj, lru_cache.obj, memory_pool.obj, model_animations.obj, network_messages.obj, object_types.obj, objects.obj, collisions.obj, physics.obj, point_physics.obj, rasterizer.obj, rasterizer_geometry.obj, rasterizer_xbox.obj, render_cameras.obj, render_sprite.obj, game_state.obj, game_state_xbox.obj, scenario.obj, sound_dsound_xbox.obj, cluster_partitions.obj, tag_groups.obj, international_strings.obj, error_geometry.obj, bipeds.obj, units.obj); size not independently confirmed (demo None, HCEX None, Sept map =))", "caveats": ["single definer channel (X); owner cseries.obj is not a January referencer (refs: action_obey.obj, actor_combat.obj, actor_firing_position.obj, actor_looking.obj, actor_moving.obj, actors.obj, ai.obj, ai_communication.obj, ai_debug.obj, ai_script.obj, encounters.obj, path_obstacle_avoidance.obj, bink_playback.obj, bitmap_drawing.obj, bitmap_utilities.obj, bitmaps.obj, cache_files.obj, cache_files_windows.obj, xbox_sound_cache.obj, bored_camera.obj, camera_scripting.obj, dead_camera.obj, editor_flying_camera.obj, first_person_camera.obj, flying_camera.obj, following_camera.obj, observer.obj, orbiting_camera.obj, static_camera.obj, debug_memory.obj, recorded_animations.obj, contrails.obj, decals.obj, effects.obj, particles.obj, player_effects.obj, aim_assist.obj, player_control.obj, player_queues_new.obj, players.obj, hs_library_external.obj, hs_runtime.obj, hud.obj, hud_draw.obj, hud_messaging.obj, hud_nav_points.obj, hud_unit.obj, hud_weapon.obj, motion_sensor.obj, terminal.obj, projectiles.obj, weapons.obj, integer_math.obj, real_math.obj, byte_swapping.obj, circular_queue.obj, data.obj, data_packets.obj, lra_cache.obj, lrar_cache.obj, lru_cache.obj, memory_pool.obj, model_animations.obj, network_messages.obj, object_types.obj, objects.obj, collisions.obj, physics.obj, point_physics.obj, rasterizer.obj, rasterizer_geometry.obj, rasterizer_xbox.obj, render_cameras.obj, render_sprite.obj, game_state.obj, game_state_xbox.obj, scenario.obj, sound_dsound_xbox.obj, cluster_partitions.obj, tag_groups.obj, international_strings.obj, error_geometry.obj, bipeds.obj, units.obj); size not independently confirmed (demo None, HCEX None, Sept map =)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #177", "RF-CV review"]},
{"name": "_director_camera_scripted", "rva": "0x593020", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/camera/director.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "director", "owner": "source/camera/director.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "director", "owner": "source/camera/director.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on director.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #178", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER; TYPE SPELLING OPEN (CP-T)"]},
{"name": "_server_transport_globals", "rva": "0x593024", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #179", "RF-CV review"]},
{"name": "_global_key", "rva": "0x593030", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #180", "RF-CV review"]},
{"name": "_global_key_id", "rva": "0x593040", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #181", "RF-CV review"]},
{"name": "_global_nonce", "rva": "0x593048", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #182", "RF-CV review"]},
{"name": "_global_address", "rva": "0x593050", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #183", "RF-CV review"]},
{"name": "_prop_data", "rva": "0x59305c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/props.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "props", "owner": "source/ai/props.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #184", "RF-CV review"]},
{"name": "_debug_obstacle_path_radius", "rva": "0x593060", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #185", "RF-CV review"]},
{"name": "_debug_ignore_broken_surfaces", "rva": "0x593064", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #186", "RF-CV review"]},
{"name": "_debug_obstacle_path_finishing", "rva": "0x593065", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #187", "RF-CV review"]},
{"name": "_debug_obstacle_path_goal_surface_index", "rva": "0x593068", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (compiled out (demo hs table entry has NULL address)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #188", "RF-CV review"]},
{"name": "_debug_obstacle_path_goal_point", "rva": "0x593070", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #189", "RF-CV review"]},
{"name": "_debug_obstacle_path_start_surface_index", "rva": "0x59307c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/path_obstacle_avoidance.c", "candidate_owner": null, "readouts": [{"channel": "OD", "names": "path_obstacle_avoidance", "owner": "source/ai/path_obstacle_avoidance.c", "mapping": "direct", "counted": true, "source": "RF-CP", "note": "strict /Od SANDWICH(path_obstacle_avoidance.c) (RF-CV)"}], "basis": "R2b: OD-only, strict /Od SANDWICH(path_obstacle_avoidance.c)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #190", "RF-CV review"]},
{"name": "_debug_obstacle_path_start_point", "rva": "0x593080", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #191", "RF-CV review"]},
{"name": "_pursuit_data", "rva": "0x59308c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/ai/encounters.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "encounters", "owner": "source/ai/encounters.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "encounters", "owner": "source/ai/encounters.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on encounters.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #192", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_encounter_data", "rva": "0x593090", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/encounters.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "encounters", "owner": "source/ai/encounters.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #193", "RF-CV review"]},
{"name": "_platoon_array", "rva": "0x593094", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/encounters.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "encounters", "owner": "source/ai/encounters.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #194", "RF-CV review"]},
{"name": "_squad_array", "rva": "0x593098", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/encounters.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "encounters", "owner": "source/ai/encounters.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #195", "RF-CV review"]},
{"name": "_profilestring", "rva": "0x5930a0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #196", "RF-CV review"]},
{"name": "_global_ai_profile_string_position", "rva": "0x5938a0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #197", "RF-CV review"]},
{"name": "_ai_profile", "rva": "0x5938c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #198", "RF-CV review"]},
{"name": "_global_ai_debug_string_position", "rva": "0x5947ac", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #199", "RF-CV review"]},
{"name": "_global_ai_debug_drawstack_height", "rva": "0x5947b0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #200", "RF-CV review"]},
{"name": "_global_ai_debug_drawstack_last_position", "rva": "0x5947c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #201", "RF-CV review"]},
{"name": "_global_ai_debug_drawstack_next_position", "rva": "0x5947d0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #202", "RF-CV review"]},
{"name": "_ai_debug", "rva": "0x5947e0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "unresolved", "owner": null, "candidate_owner": null, "readouts": [], "basis": "R3: RF-CP UNRESOLVED (no affirmative definer observation: absent from PC demo (no demo record and no hs table entry (Xbox-only or debug-only, removed)); HCEX: absent)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #203", "RF-CV review"]},
{"name": "_conversation_data", "rva": "0x61a30c", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/ai_communication.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "ai_communication", "owner": "source/ai/ai_communication.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #204", "RF-CV review"]},
{"name": "_global_communication_table_indices", "rva": "0x61a320", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/ai/ai_communication.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "ai_communication", "owner": "source/ai/ai_communication.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "ai_communication", "owner": "source/ai/ai_communication.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on ai_communication.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #205", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER; FIX placement (A1 line is in the prototypes block) -> F1"]},
{"name": "_ai_globals", "rva": "0x61a394", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/ai.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "ai", "owner": "source/ai/ai.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #206", "RF-CV review"]},
{"name": "_global_continuous_damage_reference", "rva": "0x61a3a0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/ai.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "ai", "owner": "source/ai/ai.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); no January referencer (unreferenced tentative definition; NOREF link keeps it))", "caveats": ["single definer channel (D); no January referencer (unreferenced tentative definition; NOREF link keeps it)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #207", "RF-CV review"]},
{"name": "_global_damage_reference", "rva": "0x61a3b0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/ai.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "ai", "owner": "source/ai/ai.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D); no January referencer (unreferenced tentative definition; NOREF link keeps it))", "caveats": ["single definer channel (D); no January referencer (unreferenced tentative definition; NOREF link keeps it)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #208", "RF-CV review"]},
{"name": "_swarm_component_data", "rva": "0x61a3bc", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/actors.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "actors", "owner": "source/ai/actors.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #209", "RF-CV review"]},
{"name": "_swarm_data", "rva": "0x61a3c0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/actors.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "actors", "owner": "source/ai/actors.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #210", "RF-CV review"]},
{"name": "_actor_data", "rva": "0x61a3c4", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "source/ai/actors.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "actors", "owner": "source/ai/actors.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R2: RF-CP PROBABLE (single definer channel (D))", "caveats": ["single definer channel (D)"], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #211", "RF-CV review"]},
{"name": "_avoidance_rays", "rva": "0x61a3e0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/ai/actor_moving.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "actor_moving", "owner": "source/ai/actor_moving.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "actor_moving", "owner": "source/ai/actor_moving.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on actor_moving.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #212", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE-OWNER; TYPE OK (RF-CP misread [2][8]); move CP-T -> CP-A1"]},
{"name": "_avoidance_directions", "rva": "0x61a5a0", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/ai/actor_moving.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "actor_moving", "owner": "source/ai/actor_moving.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "actor_moving", "owner": "source/ai/actor_moving.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on actor_moving.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #213", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_sense_rays", "rva": "0x61a600", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/ai/actor_moving.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "actor_moving", "owner": "source/ai/actor_moving.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "actor_moving", "owner": "source/ai/actor_moving.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on actor_moving.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #214", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_global_temporary_render_color", "rva": "0x61a700", "segment": "halo", "category": "halobetacache", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "inferred", "owner": "source/ai/actions.c", "candidate_owner": null, "readouts": [{"channel": "D", "names": "actions", "owner": "source/ai/actions.c", "mapping": "direct", "counted": true, "source": "RF-CP"}, {"channel": "X", "names": "actions", "owner": "source/ai/actions.c", "mapping": "direct", "counted": true, "source": "RF-CP"}], "basis": "R1: RF-CP PROVEN (2 independent definer channels agree (D+X) on actions.obj)", "caveats": [], "sources": ["RF-CP PER_RECORD_TABLE_49905d70.tsv #215", "RF-CV review", "RF-CV PROVEN_REVIEW verdict: AGREE"]},
{"name": "_OHCD_GlobalPool", "rva": "0x61a720", "segment": "vendor", "category": "xapilib", "name_evidence": "no January public; XDK 3911 xapilib.lib member obj\\i386\\pool.obj defines this exact name as COMMON(48) == January extent", "tag": "probable", "owner": "libs/xapilib/pool.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "xapilib.lib", "member": "obj\\i386\\pool.obj", "owner": "libs/xapilib/pool.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "xapilib.lib", "library_sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53", "member": "obj\\i386\\pool.obj", "definition": "COMMON", "size": 48, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 495 = obj\\i386\\pool.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 495 = obj\\i386\\pool.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib is in the link"], "sources": ["XDK 3911 xapilib.lib", "January cachebeta.pdb module list"]},
{"name": "_OHCD_InterruptObject", "rva": "0x61a760", "segment": "vendor", "category": "xapilib", "name_evidence": "no January public; XDK 3911 xapilib.lib member obj\\i386\\ohcd.obj defines this exact name as COMMON(112) == January extent", "tag": "probable", "owner": "libs/xapilib/ohcd.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "xapilib.lib", "member": "obj\\i386\\ohcd.obj", "owner": "libs/xapilib/ohcd.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "xapilib.lib", "library_sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53", "member": "obj\\i386\\ohcd.obj", "definition": "COMMON", "size": 112, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 494 = obj\\i386\\ohcd.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 494 = obj\\i386\\ohcd.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib is in the link"], "sources": ["XDK 3911 xapilib.lib", "January cachebeta.pdb module list"]},
{"name": "_XapiAutoPowerDownGlobals", "rva": "0x61a7e0", "segment": "vendor", "category": "xapilib", "name_evidence": "no January public; XDK 3911 xapilib.lib member obj\\i386\\powerdwn.obj defines this exact name as COMMON(80) == January extent", "tag": "probable", "owner": "libs/xapilib/powerdwn.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "xapilib.lib", "member": "obj\\i386\\powerdwn.obj", "owner": "libs/xapilib/powerdwn.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "xapilib.lib", "library_sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53", "member": "obj\\i386\\powerdwn.obj", "definition": "COMMON", "size": 80, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 510 = obj\\i386\\powerdwn.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 510 = obj\\i386\\powerdwn.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib is in the link"], "sources": ["XDK 3911 xapilib.lib", "January cachebeta.pdb module list"]},
{"name": "_CheckHeapFillPattern", "rva": "0x61a830", "segment": "vendor", "category": "xapilib", "name_evidence": "no January public; XDK 3911 xapilib.lib member obj\\i386\\heap.obj defines this exact name as COMMON(16) == January extent", "tag": "probable", "owner": "libs/xapilib/heap.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "xapilib.lib", "member": "obj\\i386\\heap.obj", "owner": "libs/xapilib/heap.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "xapilib.lib", "library_sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53", "member": "obj\\i386\\heap.obj", "definition": "COMMON", "size": 16, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 531 = obj\\i386\\heap.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 531 = obj\\i386\\heap.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib is in the link"], "sources": ["XDK 3911 xapilib.lib", "January cachebeta.pdb module list"]},
{"name": "_NtGlobalFlag", "rva": "0x61a840", "segment": "vendor", "category": "xapilib", "name_evidence": "no January public; XDK 3911 xapilib.lib member obj\\i386\\heap.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/xapilib/heap.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "xapilib.lib", "member": "obj\\i386\\heap.obj", "owner": "libs/xapilib/heap.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "xapilib.lib", "library_sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53", "member": "obj\\i386\\heap.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 531 = obj\\i386\\heap.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 531 = obj\\i386\\heap.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib is in the link"], "sources": ["XDK 3911 xapilib.lib", "January cachebeta.pdb module list"]},
{"name": "___@@_PchSym_@00@UcylcRurmzouivUkirezgvUmglhUczkrUpDCUoryUlyqUrDIGUyzhvwooOlyq@Xapi_k32", "rva": "0x61a844", "segment": "vendor", "category": "xapilib", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "libs/xapilib/basedll.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "xapilib.lib", "member": "obj\\i386\\basedll.obj", "owner": "libs/xapilib/basedll.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "xapilib.lib", "library_sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53", "member": "obj\\i386\\basedll.obj", "definition": "COMMON", "size": 4, "january_public": true, "january_pdb_module": "January cachebeta.pdb module 5 = obj\\i386\\basedll.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 5 = obj\\i386\\basedll.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib is in the link", "owner module 5 is not a config.json unit: no object of ours can define it"], "sources": ["XDK 3911 xapilib.lib", "January cachebeta.pdb module list"]},
{"name": "_XapiProcessHeap", "rva": "0x61a848", "segment": "vendor", "category": "xapilib", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "libs/xapilib/xapiheap.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "xapilib.lib", "member": "obj\\i386\\xapiheap.obj", "owner": "libs/xapilib/xapiheap.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "xapilib.lib", "library_sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53", "member": "obj\\i386\\xapiheap.obj", "definition": "COMMON", "size": 4, "january_public": true, "january_pdb_module": "January cachebeta.pdb module 504 = obj\\i386\\xapiheap.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 504 = obj\\i386\\xapiheap.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib is in the link"], "sources": ["XDK 3911 xapilib.lib", "January cachebeta.pdb module list"]},
{"name": "_XapiCurrentTopLevelFilter", "rva": "0x61a84c", "segment": "vendor", "category": "xapilib", "name_evidence": "no January public; XDK 3911 xapilib.lib member obj\\i386\\thread.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/xapilib/thread.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "xapilib.lib", "member": "obj\\i386\\thread.obj", "owner": "libs/xapilib/thread.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "xapilib.lib", "library_sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53", "member": "obj\\i386\\thread.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 507 = obj\\i386\\thread.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 507 = obj\\i386\\thread.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib is in the link"], "sources": ["XDK 3911 xapilib.lib", "January cachebeta.pdb module list"]},
{"name": "_XapiTlsSize", "rva": "0x61a850", "segment": "vendor", "category": "xapilib", "name_evidence": "no January public; XDK 3911 xapilib.lib member obj\\i386\\thread.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/xapilib/thread.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "xapilib.lib", "member": "obj\\i386\\thread.obj", "owner": "libs/xapilib/thread.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "xapilib.lib", "library_sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53", "member": "obj\\i386\\thread.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 507 = obj\\i386\\thread.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 507 = obj\\i386\\thread.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\xapilib.lib is in the link"], "sources": ["XDK 3911 xapilib.lib", "January cachebeta.pdb module list"]},
{"name": "___@@_PchSym_@00@UcylcRurmzouivUkirezgvUdrmwldhUwrivxgcUwhlfmwUwhlfmwUlyqUrDIGUwhlfmwrOlyq@dsound", "rva": "0x61a854", "segment": "vendor", "category": "dsound", "name_evidence": "January cachebeta.pdb S_PUB32 of this name at this RVA", "tag": "probable", "owner": "libs/dsound/dsoundi.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "dsound.lib", "member": "obj\\i386\\dsoundi.obj", "owner": "libs/dsound/dsoundi.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "dsound.lib", "library_sha256": "0a07e97bdef6f18f5ec3b74aa4996d1bfe5cdbcdf561ceef22c0b671021ea136", "member": "obj\\i386\\dsoundi.obj", "definition": "COMMON", "size": 4, "january_public": true, "january_pdb_module": "January cachebeta.pdb module 1 = obj\\i386\\dsoundi.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\dsound.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 1 = obj\\i386\\dsoundi.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\dsound.lib is in the link"], "sources": ["XDK 3911 dsound.lib", "January cachebeta.pdb module list"]},
{"name": "___mblcid", "rva": "0x61a858", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\mbctype.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/mbctype.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\mbctype.obj", "owner": "libs/libcmt/mbctype.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\mbctype.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___ptmbcinfo", "rva": "0x61a85c", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\mbctype.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/mbctype.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\mbctype.obj", "owner": "libs/libcmt/mbctype.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\mbctype.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___ismbcodepage", "rva": "0x61a860", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\mbctype.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/mbctype.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\mbctype.obj", "owner": "libs/libcmt/mbctype.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\mbctype.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "__mbctype", "rva": "0x61a880", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\mbctype.obj defines this exact name as COMMON(257) == January extent", "tag": "probable", "owner": "libs/libcmt/mbctype.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\mbctype.obj", "owner": "libs/libcmt/mbctype.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\mbctype.obj", "definition": "COMMON", "size": 257, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___mbcodepage", "rva": "0x61a984", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\mbctype.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/mbctype.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\mbctype.obj", "owner": "libs/libcmt/mbctype.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\mbctype.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___mbulinfo", "rva": "0x61a9a0", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\mbctype.obj defines this exact name as COMMON(24) == January extent", "tag": "probable", "owner": "libs/libcmt/mbctype.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\mbctype.obj", "owner": "libs/libcmt/mbctype.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\mbctype.obj", "definition": "COMMON", "size": 24, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "__mbcasemap", "rva": "0x61a9c0", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\mbctype.obj defines this exact name as COMMON(256) == January extent", "tag": "probable", "owner": "libs/libcmt/mbctype.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\mbctype.obj", "owner": "libs/libcmt/mbctype.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\mbctype.obj", "definition": "COMMON", "size": 256, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 776 = obj\\i386\\mbctype.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___active_heap", "rva": "0x61aac0", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\heapinit.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/heapinit.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\heapinit.obj", "owner": "libs/libcmt/heapinit.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\heapinit.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 803 = obj\\i386\\heapinit.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 803 = obj\\i386\\heapinit.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___ptd_glob", "rva": "0x61aac4", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\tidtable.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/tidtable.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\tidtable.obj", "owner": "libs/libcmt/tidtable.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\tidtable.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 750 = obj\\i386\\tidtable.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 750 = obj\\i386\\tidtable.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "__nhandle", "rva": "0x61aac8", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\ioinit.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/ioinit.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\ioinit.obj", "owner": "libs/libcmt/ioinit.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\ioinit.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 780 = obj\\i386\\ioinit.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 780 = obj\\i386\\ioinit.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___pioinfo", "rva": "0x61aae0", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\ioinit.obj defines this exact name as COMMON(256) == January extent", "tag": "probable", "owner": "libs/libcmt/ioinit.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\ioinit.obj", "owner": "libs/libcmt/ioinit.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\ioinit.obj", "definition": "COMMON", "size": 256, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 780 = obj\\i386\\ioinit.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 780 = obj\\i386\\ioinit.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___piob", "rva": "0x61abe0", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\_file.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/_file.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\_file.obj", "owner": "libs/libcmt/_file.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\_file.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 741 = obj\\i386\\_file.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 741 = obj\\i386\\_file.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "__nstream", "rva": "0x61abe4", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\_file.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/_file.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\_file.obj", "owner": "libs/libcmt/_file.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\_file.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 741 = obj\\i386\\_file.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 741 = obj\\i386\\_file.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___env_initialized", "rva": "0x61abe8", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\crt0dat.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/crt0dat.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\crt0dat.obj", "owner": "libs/libcmt/crt0dat.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\crt0dat.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 756 = obj\\i386\\crt0dat.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 756 = obj\\i386\\crt0dat.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___onexitend", "rva": "0x61abec", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\crt0dat.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/crt0dat.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\crt0dat.obj", "owner": "libs/libcmt/crt0dat.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\crt0dat.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 756 = obj\\i386\\crt0dat.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 756 = obj\\i386\\crt0dat.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___onexitbegin", "rva": "0x61abf0", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\crt0dat.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/crt0dat.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\crt0dat.obj", "owner": "libs/libcmt/crt0dat.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\crt0dat.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 756 = obj\\i386\\crt0dat.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 756 = obj\\i386\\crt0dat.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]},
{"name": "___mbctype_initialized", "rva": "0x61abf4", "segment": "vendor", "category": "libcmt", "name_evidence": "no January public; XDK 3911 libcmt.lib member obj\\i386\\crt0dat.obj defines this exact name as COMMON(4) == January extent", "tag": "probable", "owner": "libs/libcmt/crt0dat.c", "candidate_owner": null, "readouts": [{"channel": "XDK", "library": "libcmt.lib", "member": "obj\\i386\\crt0dat.obj", "owner": "libs/libcmt/crt0dat.c", "mapping": "direct", "counted": true, "source": "XDK 3911 library (read as data)"}], "vendor_evidence": {"support": "xdk-library-member-only", "library": "libcmt.lib", "library_sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55", "member": "obj\\i386\\crt0dat.obj", "definition": "COMMON", "size": 4, "january_public": false, "january_pdb_module": "January cachebeta.pdb module 756 = obj\\i386\\crt0dat.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib", "statement": "Supported only by an XDK 3911 library member (one evidence family: tag ceiling probable). Owner ruling 2026-09-27: vendor records supported only by an XDK library member remain probable, with that evidence explicitly recorded. Library version identity with January is inferred (the release library reproduces January's COMMON size; January's PDB module table lists the member)."}, "basis": "R4: single XDK readout (vendor library member defines the COMMON)", "caveats": ["library version identity with January inferred (XDK 3911); January PDB module 756 = obj\\i386\\crt0dat.obj from C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\LIBCMT.lib is in the link"], "sources": ["XDK 3911 libcmt.lib", "January cachebeta.pdb module list"]}
]
}
@@ -0,0 +1,125 @@
BASELINE (unmutated) exit 0: 152 passed, 1 skipped in 5.73s
KILLED DE01 RF-DE size-mismatch: killers 2 failed 2 | 2 failed in 0.37s
KILLED DE02 RF-DE alignment-class-differs: killers 1 failed 1 | 1 failed in 0.33s
KILLED DE03 RF-DE duplicate-definers: killers 2 failed 2 | 2 failed in 0.39s
KILLED DE04 RF-DE no-definer: killers 3 failed 3 | 4 failed in 0.45s
KILLED DE05 RF-DE real-definition: killers 3 failed 3 | 5 failed in 0.52s
KILLED DE06 RF-DE static-definition: killers 1 failed 1 | 1 failed in 0.30s
KILLED DE07 RF-DE static scan: killers 1 failed 1 | 1 failed in 0.31s
KILLED DE08 RF-DE missing-provenance-tag: killers 1 failed 1 | 1 failed in 0.30s
KILLED DE09 RF-DE invalid-provenance-tag: killers 1 failed 1 | 4 failed in 0.50s
KILLED DE10 RF-DE tag-exceeds-evidence: killers 5 failed 5 | 10 failed in 0.78s
KILLED DE11 RF-DE ceiling: families not deduplicated: killers 1 failed 1 | 1 failed, 5 passed in 0.43s
KILLED DE12 RF-DE ceiling: sibling counts as direct: killers 1 failed 1 | 1 failed, 5 passed in 0.43s
KILLED DE13 RF-DE ceiling: uncounted readouts count: killers 2 failed 2 | 7 failed, 5 passed in 0.71s
KILLED DE14 RF-DE ceiling: other owner counts: killers 1 failed 1 | 1 failed, 5 passed in 0.45s
KILLED DE15 RF-DE missing-name-evidence: killers 1 failed 1 | 1 failed in 0.34s
KILLED DE16 RF-DE missing-evidence-owner: killers 1 failed 1 | 1 failed in 0.30s
KILLED DE17 RF-DE unresolved-record-carries-owner: killers 1 failed 1 | 1 failed in 0.30s
KILLED DE18 RF-DE definer-disagrees-with-evidence-owner: killers 1 failed 1 | 1 failed in 0.32s
KILLED DE19 RF-DE owner-violates-pool-order: killers 1 failed 1 | 1 failed in 0.30s
KILLED DE20 RF-DE no-ledger-entry: killers 1 failed 1 | 1 failed in 0.30s
KILLED DE21 RF-DE ledger-rva-mismatch: killers 1 failed 1 | 1 failed in 0.29s
KILLED DE22 RF-DE linker-record-in-ledger: killers 1 failed 1 | 1 failed in 0.30s
KILLED DE23 RF-DE ledger-entry-not-in-pool: killers 1 failed 1 | 1 failed in 0.30s
KILLED DE24 RF-DE surplus-common: killers 1 failed 1 | 1 failed in 0.32s
KILLED DE25 RF-DE linker rows counted: killers 28 failed 28 | 32 failed, 3 passed in 2.48s
KILLED DE26 RF-DE tally accepts linker rows: killers 1 failed 1 | 1 failed in 0.26s
KILLED DE27 RF-DE tally accepts mixed rows: killers 1 failed 1 | 1 failed in 0.26s
KILLED DE28 RF-DE segment conflicts still tallied: killers 11 failed 11 | 15 failed, 3 passed in 1.37s
KILLED DE29 RF-DE readout-channel-not-valid-for-segment: killers 1 failed 1 | 1 failed in 0.37s
KILLED DE30 RF-DE owner-category-mismatch: killers 1 failed 1 | 1 failed in 0.34s
KILLED DE31 RF-DE definer-category-mismatch: killers 2 failed 2 | 2 failed in 0.41s
KILLED DE32 RF-DE definer-category-unknown: killers 2 failed 2 | 2 failed in 0.43s
KILLED DE33 RF-DE halo-record-defined-by-vendor-library: killers 2 failed 2 | 4 failed in 0.63s
KILLED DE34 RF-DE vendor-readout-not-reproduced: killers 2 failed 2 | 2 failed in 0.43s
KILLED DE35 RF-DE vendor-readout-library-not-category: killers 1 failed 1 | 1 failed in 0.34s
KILLED DE36 RF-DE segment-order-conflict: killers 2 failed 2 | 2 failed in 0.47s
KILLED DE37 RF-DE january-alignment-law: killers 1 failed 1 | 1 failed in 0.33s
KILLED DE38 RF-DE january-misaligned: killers 1 failed 1 | 1 failed in 0.36s
KILLED DE39 RF-DE january-slot-inconsistent: killers 3 failed 3 | 3 failed in 0.50s
KILLED DE40 RF-DE january static flag: killers 1 failed 1 | 1 failed in 0.39s
KILLED DE41 RF-DE split size check: killers 1 failed 1 | 1 failed in 0.36s
KILLED DE42 RF-DE law: no 32 cap: killers 1 failed 1 | 1 failed in 0.29s
KILLED DE43 RF-DE conservation always true: killers 1 failed 1 | 1 failed in 0.33s
KILLED DH01 RF-DH F1 tree reasons back in SEGMENT_CONFLICTS: killers 1 failed 1 | 1 failed in 0.32s
KILLED DH02 RF-DH F2 vendor needs library readout: killers 1 failed 1 | 1 failed in 0.33s
KILLED DH03 RF-DH F2 unreproduced readout not a conflict: killers 2 failed 2 | 2 failed in 0.44s
KILLED DH04 RF-DH F2 order check one-sided: killers 1 failed 1 | 1 failed in 0.41s
KILLED DH05 RF-DH F2 ledger-only fallback restored: killers 2 failed 2 | 2 failed in 0.43s
KILLED DH06 RF-DH F3 code definitions skipped: killers 1 failed 1 | 1 failed, 1 passed in 0.38s
KILLED DH07 RF-DH F3 weak externals skipped: killers 1 failed 1 | 1 failed, 1 passed in 0.40s
KILLED DH08 RF-DH F4 counted type unchecked: killers 3 failed 3 | 8 failed, 17 passed in 1.27s
KILLED DH09 RF-DH F5 duplicates tallied: killers 1 failed 1 | 1 failed in 0.45s
KILLED DH10 RF-DH F6 readouts shape unchecked: killers 3 failed 3 | 9 failed, 16 passed in 1.42s
KILLED DH11 RF-DH F6 generic malformed input no longer fails closed: killers 1 failed 1 | 1 failed in 0.46s
KILLED DH12 RF-DH F6 duplicate January name: killers 1 failed 1 | 1 failed in 0.41s
KILLED DH13 RF-DH F7 writable data excluded as linker: killers 1 failed 1 | 1 failed in 0.41s
KILLED DH14 RF-DH F8 names unchecked: killers 1 failed 1 | 1 failed in 0.41s
KILLED DH15 RF-DH F9 caveat ignored: killers 1 failed 1 | 1 failed in 0.41s
KILLED DH16 RF-DH F9 referencer ignored: killers 1 failed 1 | 1 failed in 0.37s
KILLED DM01 RF-DM manifest not required: killers 1 failed 1 | 1 failed in 0.44s
KILLED DM02 RF-DM library sha256/size not compared: killers 3 failed 3 | 3 failed in 0.56s
KILLED DM03 RF-DM library size not compared: killers 1 failed 1 | 1 failed in 0.35s
KILLED DM04 RF-DM missing library accepted: killers 1 failed 1 | 1 failed in 0.36s
KILLED DM05 RF-DM unlisted library accepted: killers 1 failed 1 | 1 failed in 0.35s
KILLED DM06 RF-DM vendor category without library accepted: killers 1 failed 1 | 1 failed in 0.33s
KILLED DM07 RF-DM vendor records of an absent library accepted: killers 1 failed 1 | 1 failed in 0.34s
KILLED DM08 RF-DM anonymous member skipped: killers 1 failed 1 | 1 failed in 0.34s
KILLED DM09 RF-DM non-i386 members skipped (the RF-DE/RF-DH reader): killers 2 failed 2 | 3 failed, 1 passed in 0.48s
KILLED DM10 RF-DM CVTRES zero-length string table rejected: killers 1 failed 1 | 1 failed, 2 passed in 0.45s
KILLED DM11 RF-DM schema: unknown keys accepted: killers 1 failed 1 | 2 failed, 11 passed in 0.74s
KILLED DM12 RF-DM schema: types unchecked: killers 4 failed 4 | 16 failed, 15 passed in 1.79s
KILLED DM13 RF-DM schema: missing keys accepted: killers 2 failed 2 | 3 failed, 16 passed in 0.96s
KILLED DM14 RF-DM schema: ledger version unchecked: killers 1 failed 1 | 1 failed, 12 passed in 0.72s
KILLED DM15 RF-DM ambiguous classification tallied: killers 15 failed 15 | 19 failed, 3 passed in 2.39s
KILLED DM16 RF-DM unexpected contribution not fail-closed: killers 1 failed 1 | 1 failed in 0.38s
KILLED DM17 RF-DM tally accepts unclassified rows: killers 1 failed 1 | 1 failed in 0.30s
KILLED DM18 RF-DM containment counted as a definer readout: killers 3 failed 3 | 3 failed in 0.46s
KILLED DM19 RF-DM candidate owner reported as owner: killers 2 failed 2 | 2 failed in 0.38s
KILLED DM20 RF-DM containment candidate unchecked: killers 1 failed 1 | 1 failed in 0.39s
KILLED DM21 RF-DM vendor evidence missing accepted: killers 1 failed 1 | 1 failed in 0.35s
KILLED DM22 RF-DM vendor evidence hash unchecked: killers 1 failed 1 | 1 failed, 5 passed in 0.49s
KILLED DM23 RF-DM vendor evidence hash mismatch not a conflict: killers 1 failed 1 | 1 failed, 5 passed in 0.46s
KILLED DM24 RF-DM vendor record raised to inferred: killers 1 failed 1 | 1 failed in 0.38s
KILLED DM25 RF-DM vendor evidence on a Halo record accepted: killers 1 failed 1 | 1 failed in 0.33s
KILLED DM26 RF-DM receipt: wrong verifier hash: killers 1 failed 1 | 1 failed in 0.44s
KILLED DM27 RF-DM receipt: not written on fail-closed runs: killers 5 failed 5 | 10 failed in 0.99s
KILLED DM28 RF-DM receipt: ledger hash depends on line endings: killers 1 failed 1 | 1 failed in 0.36s
KILLED DM29 RF-DM receipt: build snapshot not recursive: killers 1 failed 1 | 1 failed in 0.31s
KILLED DM30 RF-DM truncated archive member accepted: killers 1 failed 1 | 1 failed in 0.29s
KILLED DM31 RF-DM manifest duplicate library accepted: killers 1 failed 1 | 1 failed, 5 passed in 0.45s
KILLED DM32 RF-DM manifest sha256 format unchecked: killers 1 failed 1 | 1 failed, 5 passed in 0.48s
KILLED DM33 RF-DM unlinked library satisfies a category: killers 1 failed 1 | 1 failed in 0.37s
KILLED DM34 RF-DM unlinked libraries scanned: killers 1 failed 1 | 1 failed in 0.39s
KILLED DM35 RF-DM absent linked libraries not disclosed: killers 1 failed 1 | 1 failed in 0.33s
KILLED DM36 RF-DM malformed generic errors reported as failures: killers 1 failed 1 | 1 failed in 0.38s
KILLED DP01 RF-DP D3 duplicate JSON keys accepted again: killers 2 failed 2 | 4 failed in 0.54s
KILLED DP02 RF-DP D2 linked flag no longer tied to the January module count: killers 1 failed 1 | 1 failed in 0.43s
KILLED DP03 RF-DP D2 absent library may claim 0 January modules: killers 1 failed 1 | 1 failed in 0.33s
KILLED DP04 RF-DP D2 config vendor category's listed library may be unlinked: killers 1 failed 1 | 1 failed in 0.36s
KILLED DP05 RF-DP D2 a present library may be declared absent: killers 1 failed 1 | 1 failed in 0.34s
KILLED DP06 RF-DP D2 a listed library's category may be declared absent: killers 1 failed 1 | 1 failed in 0.36s
KILLED DP07 RF-DP D10 library names differing only in case accepted: killers 1 failed 1 | 1 failed in 0.34s
KILLED DP08 RF-DP D8 absent object of a built unit skipped again: killers 1 failed 1 | 1 failed in 0.32s
KILLED DP09 RF-DP D6 section number no longer bounded: killers 1 failed 1 | 1 failed in 0.31s
KILLED DP10 RF-DP D7 missing January split object skipped again: killers 2 failed 2 | 2 failed in 0.37s
KILLED DP11 RF-DP D7 missing/unreadable split objects no longer fail closed: killers 2 failed 2 | 2 failed in 0.36s
KILLED DP12 RF-DP D5 inputs changed during the run accepted: killers 1 failed 1 | 1 failed in 0.32s
KILLED DP13 RF-DP D6 OSError escapes as a traceback (exit 1, no receipt): killers 1 failed 1 | 1 failed in 0.34s
KILLED DP14 RF-DP D6 unreadable recorded library no longer a library failure: killers 1 failed 1 | 1 failed in 0.35s
KILLED DP15 RF-DP D9 excluded-record inconsistency ignored again: killers 1 failed 1 | 1 failed in 0.33s
KILLED DP16 RF-DP P10 vendor readout reproduced from any library: killers 1 failed 1 | 1 failed in 0.33s
KILLED DP17 RF-DP P15 manifest may declare a present library absent: killers 1 failed 1 | 1 failed in 0.36s
KILLED DP18 RF-DP P39 split section count vs contributions unchecked: killers 1 failed 1 | 1 failed in 0.31s
KILLED DP19 RF-DP P47 upper-case .LIB invisible to the unlisted check: killers 1 failed 1 | 1 failed in 0.32s
KILLED DX01 RF-DX D6 unanticipated exception escapes as status 1 again (catch-all narrowed): killers 1 failed 1 | 1 failed in 0.39s
KILLED DX02 RF-DX D6 a report that cannot be written escapes as status 1 again: killers 1 failed 1 | 2 failed in 0.47s
KILLED DX03 RF-DX D6 an exit-2 run leaves the reports it already wrote (accounting) behind: killers 2 failed 2 | 2 failed, 1 passed in 0.42s
KILLED DX04 RF-DX D6 an unlistable library directory is exit 2 instead of a library failure (3): killers 1 failed 1 | 1 failed in 0.32s
KILLED DX05 RF-DX D11 another linked library defining a vendor name is ignored: killers 1 failed 1 | 2 failed in 0.39s
KILLED DX06 RF-DX D11 another linked library defining a vendor name is only a record FAIL (no fail-closed): killers 1 failed 1 | 2 failed in 0.38s
KILLED DX07 RF-DX D6 IndexError no longer malformed input (falls through to the catch-all, exit 2): killers 1 failed 1 | 1 failed in 0.34s
KILLED DX08 RF-DX D6 a run whose receipt cannot be written keeps its reports: killers 1 failed 1 | 1 failed in 0.31s
KILLED DX09 RF-DX D2 (optional pin) a manifest other than the reviewed one accepted: killers 1 failed 1 | 1 failed in 0.31s
mutations 123, not killed 0
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,113 @@
"""Mutation harness for the Q10 COMMON-pool verifier draft (research only; Q10 held; zero credit).
Every mutation in mutations.json is applied, alone, to a copy of tools/common_pool_verify.py inside an
isolated work tree (tools/ + this q10 directory); its named killer tests are then run. A mutation is
KILLED only if pytest exits 1, reports no collection/setup error, and EVERY named killer test fails.
usage:
python q10_mutate.py --repo <tree> --work <scratch dir> [--out kills.txt] # check the catalogue
python q10_mutate.py --repo <tree> --work <scratch dir> --discover [--write] # find failing tests
(--discover runs the whole test file per mutant and lists every failing test; --write stores them
as the killers of each mutation)
Exit status 0 only if every mutation is KILLED (check mode) or killed by at least one test (discover).
"""
import argparse
import json
import os
import re
import shutil
import subprocess
import sys
from pathlib import Path
Q10 = Path("research") / "remaining_frontier_20260926" / "q10"
TARGET = Path("tools") / "common_pool_verify.py"
TESTS = "tools/test_common_pool_verify.py"
FAILED = re.compile(r"^(FAILED|ERROR) tools/test_common_pool_verify\.py::([A-Za-z0-9_]+)")
def work_tree(repo, work):
if work.exists():
shutil.rmtree(work)
shutil.copytree(repo / "tools", work / "tools", ignore=shutil.ignore_patterns("__pycache__"))
shutil.copytree(repo / Q10, work / Q10, ignore=shutil.ignore_patterns("__pycache__"))
return work
def run_tests(tree, selectors, basetemp):
env = dict(os.environ, PYTHONDONTWRITEBYTECODE="1")
result = subprocess.run([sys.executable, "-m", "pytest", *selectors, "-q", "-rfE", "-p", "no:cacheprovider",
"--basetemp", str(basetemp)], cwd=tree, capture_output=True, text=True, env=env)
failed, errors = set(), set()
for line in result.stdout.splitlines():
match = FAILED.match(line)
if match:
(failed if match.group(1) == "FAILED" else errors).add(match.group(2))
tail = (result.stdout.strip().splitlines() or [result.stderr[-200:]])[-1]
return result.returncode, failed, errors, tail
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--repo", required=True)
parser.add_argument("--work", required=True)
parser.add_argument("--catalogue", default=None)
parser.add_argument("--discover", action="store_true")
parser.add_argument("--write", action="store_true")
parser.add_argument("--only", nargs="*")
parser.add_argument("--out")
args = parser.parse_args()
repo, work = Path(args.repo).resolve(), Path(args.work).resolve()
catalogue_path = Path(args.catalogue) if args.catalogue else repo / Q10 / "mutation" / "mutations.json"
catalogue = json.loads(catalogue_path.read_text(encoding="utf-8"))
source = (repo / TARGET).read_bytes().decode("utf-8").replace("\r\n", "\n")
lines, bad = [], 0
baseline = work_tree(repo, work / "baseline")
code, failed, errors, tail = run_tests(baseline, [TESTS], work / "tmp_baseline")
lines.append(f"BASELINE (unmutated) exit {code}: {tail}")
if code != 0:
print("\n".join(lines))
return 2
for mutation in catalogue["mutations"]:
if args.only and mutation["id"] not in args.only:
continue
count = source.count(mutation["old"])
label = f"{mutation['id']} {mutation['origin']:<5} {mutation['label']}"
if count != 1:
lines.append(f"BAD-MUTATION ({count} matches) {label}")
bad += 1
continue
tree = work_tree(repo, work / "mut")
(tree / TARGET).write_bytes(source.replace(mutation["old"], mutation["new"]).encode("utf-8"))
if args.discover:
code, failed, errors, tail = run_tests(tree, [TESTS], work / "tmp_mut")
killed = code == 1 and failed and not errors
if args.write and killed:
mutation["killers"] = sorted(failed)
lines.append(f"{'KILLED' if killed else 'SURVIVED':<8} {label}: {sorted(failed)} {tail}")
else:
killers = mutation["killers"]
if not killers:
lines.append(f"NO-KILLERS {label}")
bad += 1
continue
code, failed, errors, tail = run_tests(tree, [f"{TESTS}::{k}" for k in killers], work / "tmp_mut")
missing = sorted(set(killers) - failed)
killed = code == 1 and not errors and not missing
lines.append(f"{'KILLED' if killed else 'SURVIVED':<8} {label}: killers {len(killers)} failed "
f"{len(set(killers) & failed)}{' missing ' + str(missing) if missing else ''} | {tail}")
if not killed:
bad += 1
total = len([m for m in catalogue["mutations"] if not args.only or m["id"] in args.only])
lines.append(f"mutations {total}, not killed {bad}")
text = "\n".join(lines) + "\n"
sys.stdout.write(text)
if args.out:
Path(args.out).write_text(text, encoding="utf-8", newline="\n") # LF on every platform (RF-DP D1)
if args.discover and args.write:
catalogue_path.write_text(json.dumps(catalogue, indent=1) + "\n", encoding="utf-8", newline="\n")
return 0 if bad == 0 else 1
if __name__ == "__main__":
sys.exit(main())
@@ -0,0 +1,295 @@
{
"schema": "xdk-lib-manifest/1",
"status": "research only; Q10 held; zero credit; library bytes recorded as data, never credit",
"recorded_by": "RF-DM 2026-09-28 (research/remaining_frontier_20260926/workers/RF-DM/tools/build_xdk_manifest.py)",
"source_dir": "C:/tmp/xdk3911_extract/XDK/xbox/lib",
"evidence": [
"sha256 and size of every .lib file in source_dir (XDK 3911 extract, read as data)",
"linked_by_january / january_pdb_modules: January cachebeta.pdb DBI module table (848 modules) read with RF-DI tools/pdb_mods.py; count of modules whose object path names the library",
"RF-DH C09: the release libraries reproduce all 27 vendor pool records (COMMON of January's size, each member a January PDB module); debug variants differ (e.g. xapilibd powerdwn COMMON 88)"
],
"libraries": [
{
"file": "d3d8.lib",
"sha256": "41ab837028d00015016040593890c57d54201c4c046835aca500ef7c6e4ac4d7",
"size": 1736410,
"linked_by_january": true,
"january_pdb_modules": 29
},
{
"file": "d3d8d.lib",
"sha256": "7e12dfc95d4fc45c818f5756112d3da7b418f0cd0a0e90c37395d91156b317cb",
"size": 2894726,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "d3d8i.lib",
"sha256": "e64a7cb16e71a057d1bfdc619d7cfcd7b358553a2f3b0d526c6c930522bc10f2",
"size": 2144034,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "d3d8ltcg.lib",
"sha256": "1083af7aba33eee8d2a5f4c63aa134d1951ccd40a6a0c316540679ffec85b2ba",
"size": 16642874,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "d3dx8.lib",
"sha256": "2ed9b746e9e169a6b70ef41d48554f492285ed71b749f4c64782a6c5ee9eca64",
"size": 5079110,
"linked_by_january": true,
"january_pdb_modules": 8
},
{
"file": "d3dx8d.lib",
"sha256": "7fdc20d92d7257ccb9950e58fbdcb3f031172266c766e5a457bd571eea745f36",
"size": 5449862,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "dmusic.lib",
"sha256": "fbb30d11953b9853030b84bfbf7eb7d083223d75ab3e73203e6b622892861f58",
"size": 16545856,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "dmusicd.lib",
"sha256": "d234444be4ed4c2b44703c7f5e7fe33c9ba2b8714a06ab2d3a79d9a505765f59",
"size": 18152686,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "dmusici.lib",
"sha256": "ce7daeca0537670854c162f735738854e6482f837ff93a010b7b04cef5db52ef",
"size": 16627550,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "dsound.lib",
"sha256": "0a07e97bdef6f18f5ec3b74aa4996d1bfe5cdbcdf561ceef22c0b671021ea136",
"size": 3777324,
"linked_by_january": true,
"january_pdb_modules": 17
},
{
"file": "dsoundd.lib",
"sha256": "44c19396005b5ea8a5c2b5039878dcedadc7676401394df4b2d1ed0d0c7a5213",
"size": 4494588,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libc.lib",
"sha256": "08c82866294658ce5b670a2dce0a73d9f614bedf6f1e13b73bdbe1bd923afa6a",
"size": 4278254,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libcd.lib",
"sha256": "26c100ce13369ec00c4fb2e0b423b1d5b1524de892d78767138419d06a01be5a",
"size": 5629060,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libci.lib",
"sha256": "e220066f189cffe7df1e20452b9f261372ea1f16a82fcb3308cffa9a7c6b9878",
"size": 960090,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libcid.lib",
"sha256": "7ebc7c439290e2ae533a1ef531286d537ca369ed1ed6df32dba350aa1af36633",
"size": 1011350,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libcimt.lib",
"sha256": "56b3f89a5c140815047b6b7ca082b95ffcc1071a9d95d060129e2927cc794852",
"size": 1080092,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libcimtd.lib",
"sha256": "a36525115dd6eb9ab05f48752789125c246e9a64fff467382734acdc5798c5a0",
"size": 1126694,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libcmt.lib",
"sha256": "60aa4c87c97eeb6662b31d9d37cf3caba1afabaec72c47b090e7a0ce8b632f55",
"size": 4372210,
"linked_by_january": true,
"january_pdb_modules": 212
},
{
"file": "libcmtd.lib",
"sha256": "6248684cd7b1b49918b5ae23967688e2f53ffdc4f01d443796a6f00fee23949d",
"size": 5595180,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libcp.lib",
"sha256": "8e4a362e1d3325357461234cabb20f1545afbcc1ef3d03075eeca1213f80d56a",
"size": 5231580,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libcpd.lib",
"sha256": "db142d1d866c14a65ffd26eaa269a3c855e0aef649a9fa4109b4c87afc721266",
"size": 6694966,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libcpmt.lib",
"sha256": "9bb9462c7ef9fea61d9fe5818551cb5d9adda3ed58545acc3147eb5f3ccd6bd0",
"size": 5244330,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "libcpmtd.lib",
"sha256": "d58d58d1ec531306116b4faa8b26ad16b7f8c66fde56da38f3db3a2ed15e4453",
"size": 6682978,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "oldnames.lib",
"sha256": "348a220e94f90bd9f530514ae59ff9b044b76e2056f52b45df406c12d2156afb",
"size": 65372,
"linked_by_january": true,
"january_pdb_modules": 11
},
{
"file": "uuid.lib",
"sha256": "96f671edc10e80961473e15b7553f1675e5f3d6d7d2fc7bf5941e525a821ec2b",
"size": 158540,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "VTuneAPI_XBOX.lib",
"sha256": "e2728298ee7beec4fd1f29bdd92ef714c31d8e9840adbca9360ff70ba897bea9",
"size": 11020,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "xapilib.lib",
"sha256": "56122745988d7d1f031b1cc3a06b1b11347f6bc2f92e53a081a01a59e1e64d53",
"size": 2432912,
"linked_by_january": true,
"january_pdb_modules": 61
},
{
"file": "xapilibd.lib",
"sha256": "e16b4c04826f2747a62011a67f85d7765b8fdb96240ecfb03d910dd6b84d42b0",
"size": 2751612,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "xbdm.lib",
"sha256": "34236c2e8007d62a853ea8580896719ec178aa8e2d9bab265205c4334a3a8b7b",
"size": 13574,
"linked_by_january": true,
"january_pdb_modules": 1
},
{
"file": "xboxkrnl.lib",
"sha256": "41a8bfa7ab1382c4d18e31c1881c93540d90573b1973f0a4eb3625a750c7df90",
"size": 88658,
"linked_by_january": true,
"january_pdb_modules": 2
},
{
"file": "xgraphics.lib",
"sha256": "f700d69d2fc57fd6e85c68804aed20e4f000648b56ec8e17b91e19f04e5f823c",
"size": 1674906,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "xgraphicsd.lib",
"sha256": "dd32bb80e36cf267d1c8374a5b9574a9c64b07982e777477c8f2251d6ca38e84",
"size": 1829206,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "xkbd.lib",
"sha256": "36b3283fc8e84e635a0c541fab056529f5de4fbae3b37adfc76b771e5a45e21b",
"size": 92182,
"linked_by_january": true,
"january_pdb_modules": 1
},
{
"file": "xkbdd.lib",
"sha256": "553e241d41e045e4401d997d79b6b4a70b5d85daa47cffafef477e195855f754",
"size": 93096,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "xnet.lib",
"sha256": "368d7a9a7eec6df4d906d946ba2998272374432e93ef5b59ad91de6324a5ebe4",
"size": 1009062,
"linked_by_january": true,
"january_pdb_modules": 13
},
{
"file": "xnetd.lib",
"sha256": "823af0fa5bc91f8fd603abccbe650961fc36ca80bf8df19d5ada38c3f59d4a23",
"size": 1664632,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "xnets.lib",
"sha256": "972e3720f3bed795f373719d0add882fa7f109f9b85b6dd55abc3d33240fc94c",
"size": 921344,
"linked_by_january": false,
"january_pdb_modules": 0
},
{
"file": "xnetsd.lib",
"sha256": "2aa08940bdb6ce0f1ec8740ad79445340e959f16c34e8759b7be3d434c77e961",
"size": 1474614,
"linked_by_january": false,
"january_pdb_modules": 0
}
],
"linked_libraries_not_in_extract": [
{
"library": "binkxbox.lib",
"category": "binkxbox",
"january_path": "c:\\binkxbox\\binkxbox.lib",
"january_pdb_modules": 24,
"reason": "linked by January (cachebeta.pdb module table) but not in the XDK 3911 extract; its members cannot be scanned, so the Halo-record-defined-by-a-library check does not cover it"
},
{
"library": "dsstrmh.lib",
"category": "dsstrmh",
"january_path": "C:\\Program Files\\Microsoft Xbox SDK\\Xbox\\Lib\\dsstrmh.lib",
"january_pdb_modules": 1,
"reason": "linked by January (cachebeta.pdb module table) but not in the XDK 3911 extract; its members cannot be scanned, so the Halo-record-defined-by-a-library check does not cover it"
}
]
}
+12 -12
View File
@@ -679,15 +679,15 @@ boolean action_charge_perform(
if (state_data->leap_pending || (melee && !state_data->melee_suicide))
{
real_vector2d facing_direction;
real_vector2d target_alignment_vector;
facing_direction.i = direction.i;
facing_direction.j = direction.j;
if (normalize2d(&facing_direction) > 0.f)
target_alignment_vector.i = direction.i;
target_alignment_vector.j = direction.j;
if (normalize2d(&target_alignment_vector) > 0.f)
{
real minimum_alignment = state_data->launched_leap ? 0.f : 0.8660254f;
if (dot_product2d(&facing_direction, (real_vector2d *)&actor->input.facing_vector) < minimum_alignment)
if (dot_product2d(&target_alignment_vector, (real_vector2d *)&actor->input.facing_vector) < minimum_alignment)
{
melee = FALSE;
state_data->leap_pending = FALSE;
@@ -701,17 +701,17 @@ boolean action_charge_perform(
if (melee)
{
real_vector2d melee_direction;
real_vector2d alignment_vector;
melee_direction.i = direction.i;
melee_direction.j = direction.j;
if (normalize2d(&melee_direction) == 0.f)
alignment_vector.i = direction.i;
alignment_vector.j = direction.j;
if (normalize2d(&alignment_vector) == 0.f)
{
melee_direction.i = actor->input.facing_vector.i;
melee_direction.j = actor->input.facing_vector.j;
alignment_vector.i = actor->input.facing_vector.i;
alignment_vector.j = actor->input.facing_vector.j;
}
if (unit_melee_attack_begin(actor->meta.unit_index, FALSE, &melee_direction))
if (unit_melee_attack_begin(actor->meta.unit_index, FALSE, &alignment_vector))
{
ai_communication_event(
_ai_communication_melee,
+7 -13
View File
@@ -30,6 +30,7 @@ symbols in this file:
#include "actions.h"
#include "actors.h"
#include "ai/ai_scenario_definitions.h"
#include "ai_communication.h"
#include "props.h"
#include "scenario/scenario.h"
@@ -42,15 +43,8 @@ symbols in this file:
/* ---------- structures */
struct scenario_conversation_definition
{
byte __unknown0[0x28];
real run_to_distance;
byte __unknown2c[0x48];
};
typedef char scenario_conversation_definition_size_assert[
sizeof(struct scenario_conversation_definition) == 0x74 ? 1 : -1];
sizeof(struct ai_conversation) == 0x74 ? 1 : -1];
/* ---------- prototypes */
@@ -63,20 +57,20 @@ boolean action_converse_setup(
long conversation_index,
struct converse_state_data *state_data)
{
struct ai_conversation_datum_header *conversation;
struct scenario_conversation_definition *definition;
struct conversation_datum *conversation;
struct ai_conversation *definition;
actor_get(actor_index);
conversation = ai_conversation_header_get(conversation_index);
definition = TAG_BLOCK_GET_ELEMENT(
&global_scenario_get()->ai_conversations,
conversation->scenario_conversation_index,
struct scenario_conversation_definition);
struct ai_conversation);
match_assert("c:\\halo\\SOURCE\\ai\\action_converse.c", 33, state_data);
csmemset(state_data, 0, sizeof(*state_data));
state_data->conversation_index = conversation_index;
state_data->run_to_distance = definition->run_to_distance;
state_data->run_to_distance = definition->run_to_player_dist;
state_data->run_to_unit_index = state_data->run_to_distance == 0.0f
? NONE
: conversation->triggering_player_unit_index;
@@ -161,7 +155,7 @@ void action_converse_control(
{
struct actor_datum *actor = actor_get(actor_index);
struct converse_state_data *state_data = &actor->state.action_data.converse;
struct ai_conversation_datum_header *conversation = NULL;
struct conversation_datum *conversation = NULL;
long prop_index = NONE;
if (state_data->conversation_index != NONE)
+17 -48
View File
@@ -234,6 +234,8 @@ symbols in this file:
#include "actor_definitions.h"
#include "actor_types.h"
#include "ai.h"
#include "ai/ai_globals.h"
#include "ai/ai_scenario_definitions.h"
#include "ai_communication.h"
#include "ai_debug.h"
#include "ai_profile.h"
@@ -322,37 +324,8 @@ enum
/* ---------- structures */
/* The fields used here from the 0x74-byte scenario conversation record. */
struct scenario_conversation_action_definition
{
char name[TAG_STRING_LENGTH + 1];
word flags;
byte __unknown22[0x52];
};
typedef char scenario_conversation_action_definition_size_assert[
sizeof(struct scenario_conversation_action_definition) == 0x74 ? 1 : -1];
/* Only the January-proven field consumed by this translation unit is named. */
struct ai_vehicle_enterable
{
long vehicle_index;
real radius;
short team_bitmask;
short actor_type_bitmask;
short ai_indices_count;
word __pad0E;
long ai_indices[6];
};
struct ai_globals_action_data
{
byte __unknown0[0x3B4];
boolean grenades_enabled;
byte __unknown3B5;
short enterable_vehicle_count;
struct ai_vehicle_enterable enterable_vehicles[32];
};
sizeof(struct ai_conversation) == 0x74 ? 1 : -1];
/* The January iterator is exactly three datum indices; callers consume the
* current actor index after encounter_actor_iterator_next advances it. */
@@ -383,11 +356,9 @@ struct vehicle_definition
typedef char ai_globals_action_vehicle_size_assert[
sizeof(struct ai_vehicle_enterable) == 0x28 ? 1 : -1];
typedef char ai_globals_action_grenades_enabled_offset_assert[
offsetof(struct ai_globals_action_data, grenades_enabled) == 0x3B4 ? 1 : -1];
offsetof(struct ai_globals, grenades_enabled) == 0x3B4 ? 1 : -1];
typedef char ai_globals_action_enterable_vehicles_offset_assert[
offsetof(struct ai_globals_action_data, enterable_vehicles) == 0x3B8 ? 1 : -1];
typedef char ai_globals_action_data_size_assert[
sizeof(struct ai_globals_action_data) == 0x8B8 ? 1 : -1];
offsetof(struct ai_globals, enterable_vehicles) == 0x3B8 ? 1 : -1];
typedef char actions_prop_enemy_offset_assert[
offsetof(struct prop_datum, enemy) == 0x60 ? 1 : -1];
typedef char actions_prop_dead_offset_assert[
@@ -468,8 +439,6 @@ static boolean actor_action_allowed_to_enter_vehicle(
/* ---------- globals */
extern struct ai_globals_action_data *ai_globals;
real_argb_color global_temporary_render_color;
struct action_specification const global_action_functions[NUMBER_OF_ACTOR_ACTIONS] =
@@ -1536,13 +1505,13 @@ boolean actor_action_can_stop_conversing(
if (conversation_index != NONE)
{
word flags;
struct ai_conversation_datum_header *conversation =
struct conversation_datum *conversation =
ai_conversation_header_get(conversation_index);
struct scenario_conversation_action_definition *definition =
struct ai_conversation *definition =
TAG_BLOCK_GET_ELEMENT(
&global_scenario_get()->ai_conversations,
conversation->scenario_conversation_index,
struct scenario_conversation_action_definition);
struct ai_conversation);
flags = definition->flags;
@@ -3827,7 +3796,7 @@ boolean actor_action_handle_vehicle_entry(
long best_vehicle_index;
real attempt_distance;
real continue_distance;
struct action_state_data state;
struct action_state_data new_state_data;
if (actor->state.action == _actor_action_flee &&
actor->state.action_data.flee.panic_type > _actor_panic_none)
@@ -3877,13 +3846,13 @@ boolean actor_action_handle_vehicle_entry(
if (vehicle &&
vehicle->unit.driver_object_index == prop->unit_index)
{
real_point3d origin;
real_point3d vehicle_origin;
real distance_squared;
object_get_origin(prop->vehicle_index, &origin);
object_get_origin(prop->vehicle_index, &vehicle_origin);
distance_squared = distance_squared3d(
&actor->input.position.body_position,
&origin);
&vehicle_origin);
if (distance_squared < 100.0f &&
distance_squared < best_distance_squared)
@@ -3918,7 +3887,7 @@ boolean actor_action_handle_vehicle_entry(
{
struct ai_vehicle_enterable *enterable =
&ai_globals->enterable_vehicles[(short)slot];
real_point3d origin;
real_point3d position;
real distance_squared;
short team_bitmask;
short actor_type_bitmask;
@@ -3929,9 +3898,9 @@ boolean actor_action_handle_vehicle_entry(
continue;
}
object_get_origin(enterable->vehicle_index, &origin);
object_get_origin(enterable->vehicle_index, &position);
distance_squared = distance_squared3d(
&origin,
&position,
&actor->input.position.body_position);
if (!(distance_squared < best_distance_squared) ||
@@ -4013,9 +3982,9 @@ setup_entry:
best_vehicle_index,
attempt_distance,
continue_distance,
&state.vehicle))
&new_state_data.vehicle))
{
actor_action_change(actor_index, _actor_action_vehicle, &state);
actor_action_change(actor_index, _actor_action_vehicle, &new_state_data);
result = TRUE;
}
else
+6 -6
View File
@@ -1006,9 +1006,9 @@ boolean actor_combat_plan_grenade_trajectory(
struct actor_datum *actor = actor_get(actor_index);
struct actor_variant_definition *variant_definition =
actor_variant_definition_get(actor->meta.variant_definition_index);
real_point3d grenade_origin = actor->input.position.head_position;
real_point3d origin = actor->input.position.head_position;
real_vector3d aim_vector;
real_vector3d aim_velocity;
real_vector3d arc_initial_velocity;
real aim_speed;
real aim_ticks;
real aim_gravity;
@@ -1016,7 +1016,7 @@ boolean actor_combat_plan_grenade_trajectory(
if (actor_combat_build_grenade_trajectory(
variant_definition->grenade_combat.grenade_type,
&grenade_origin,
&origin,
variant_definition->grenade_combat.grenade_maximum_velocity,
grenade_target,
NULL,
@@ -1024,13 +1024,13 @@ boolean actor_combat_plan_grenade_trajectory(
&aim_vector,
&aim_speed,
&aim_ticks,
&aim_velocity,
&arc_initial_velocity,
&aim_gravity) &&
ai_test_ballistic_line_of_fire(
actor_index,
&grenade_origin,
&origin,
aim_ticks,
&aim_velocity,
&arc_initial_velocity,
aim_gravity,
grenade_ignore_object_index,
actor->input.vehicle_index != NONE))
+17 -17
View File
@@ -1431,10 +1431,10 @@ void actor_look_update(
if (actor_combat_currently_firing_burst(actor_index) &&
!actor->orders.combat.abort_burst)
{
struct direction_specification burst_specification;
struct direction_specification temporary_direction;
burst_specification.type = _direction_specification_target;
if (actor_look_decode_direction(actor_index, &burst_specification, &primary_vector))
temporary_direction.type = _direction_specification_target;
if (actor_look_decode_direction(actor_index, &temporary_direction, &primary_vector))
{
primary_priority = _primary_priority_locked_aiming;
aiming_at_target = TRUE;
@@ -1896,22 +1896,22 @@ update_facing:
}
else
{
real_vector2d facing2d;
real_vector2d aiming2d;
real_vector2d fixed2d;
real_vector2d desired_facing;
real_vector2d desired_aiming;
real_vector2d stationary_facing;
facing2d.i = actor->control.desired_facing_vector.i;
facing2d.j = actor->control.desired_facing_vector.j;
aiming2d.i = actor->control.desired_aiming_vector.i;
aiming2d.j = actor->control.desired_aiming_vector.j;
fixed2d.i = actor->control.fixed_stationary_facing_vector.i;
fixed2d.j = actor->control.fixed_stationary_facing_vector.j;
desired_facing.i = actor->control.desired_facing_vector.i;
desired_facing.j = actor->control.desired_facing_vector.j;
desired_aiming.i = actor->control.desired_aiming_vector.i;
desired_aiming.j = actor->control.desired_aiming_vector.j;
stationary_facing.i = actor->control.fixed_stationary_facing_vector.i;
stationary_facing.j = actor->control.fixed_stationary_facing_vector.j;
valid = normalize2d(&facing2d) != 0.0f &&
normalize2d(&aiming2d) != 0.0f &&
normalize2d(&fixed2d) != 0.0f &&
dot_product2d(&fixed2d, &facing2d) > stationary_cosine &&
dot_product2d(&aiming2d, &fixed2d) > stationary_cosine;
valid = normalize2d(&desired_facing) != 0.0f &&
normalize2d(&desired_aiming) != 0.0f &&
normalize2d(&stationary_facing) != 0.0f &&
dot_product2d(&stationary_facing, &desired_facing) > stationary_cosine &&
dot_product2d(&desired_aiming, &stationary_facing) > stationary_cosine;
}
if (!valid)
+68 -68
View File
@@ -458,9 +458,9 @@ real const avoid_ray_adjacent_fractions[2] =
};
real const avoid_ray_fully_obstructed_t = 0.5f;
extern struct vector_avoidance_ray avoidance_rays[VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS][2];
extern real_vector3d avoidance_directions[VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS];
extern struct vector_avoidance_ray sense_rays[9];
struct vector_avoidance_ray avoidance_rays[VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS][2];
real_vector3d avoidance_directions[VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS];
struct vector_avoidance_ray sense_rays[9];
/* ---------- public code */
@@ -830,7 +830,7 @@ static short actor_move_test_avoidance_vector(
real *collision_t,
byte *collision_timer)
{
struct collision_bsp_test_vector_result collision;
struct collision_bsp_test_vector_result collision_result;
real_vector3d offset;
real_vector3d divergence;
real scale;
@@ -874,7 +874,7 @@ static short actor_move_test_avoidance_vector(
&avoidance_data->origin,
&offset,
1.f,
&collision))
&collision_result))
{
result = _actor_vector_avoidance_obstructed_structure;
*collision_t = 0.f;
@@ -888,10 +888,10 @@ static short actor_move_test_avoidance_vector(
ray_origin,
ray_direction,
1.f,
&collision))
&collision_result))
{
result = _actor_vector_avoidance_obstructed_structure;
*collision_t = collision.t;
*collision_t = collision_result.t;
}
for (object_index = 0;
@@ -1419,7 +1419,7 @@ static void actor_move_vector_avoidance(
struct actor_debug_info *debug_info =
&actor_debug_array[DATUM_INDEX_TO_ABSOLUTE_INDEX(actor_index)];
struct vector_avoidance_data avoidance_data;
real weights[VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS];
real avoidance_weights[VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS];
real_vector3d movement_vector;
real_vector3d local_movement_direction;
real maximum_sense_emergency;
@@ -1448,7 +1448,7 @@ static void actor_move_vector_avoidance(
actor_move_avoidance_setup(&avoidance_data);
maximum_sense_emergency = 0.f;
csmemset(weights, 0, sizeof(weights));
csmemset(avoidance_weights, 0, sizeof(avoidance_weights));
{
short current_direction = actor->control.vector_avoidance_current_direction;
@@ -1460,11 +1460,11 @@ static void actor_move_vector_avoidance(
short previous_direction = (current_direction + VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS - 1) % VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS;
short second_previous_direction = (current_direction + VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS - 2) % VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS;
weights[current_direction] += 0.4f;
weights[next_direction] += avoid_ray_adjacent_fractions[0]*0.4f;
weights[second_next_direction] += avoid_ray_adjacent_fractions[1]*0.4f;
weights[previous_direction] += avoid_ray_adjacent_fractions[0]*0.4f;
weights[second_previous_direction] += avoid_ray_adjacent_fractions[1]*0.4f;
avoidance_weights[current_direction] += 0.4f;
avoidance_weights[next_direction] += avoid_ray_adjacent_fractions[0]*0.4f;
avoidance_weights[second_next_direction] += avoid_ray_adjacent_fractions[1]*0.4f;
avoidance_weights[previous_direction] += avoid_ray_adjacent_fractions[0]*0.4f;
avoidance_weights[second_previous_direction] += avoid_ray_adjacent_fractions[1]*0.4f;
}
}
@@ -1494,7 +1494,7 @@ static void actor_move_vector_avoidance(
direction_index < VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS;
direction_index++)
{
weights[direction_index] +=
avoidance_weights[direction_index] +=
sense_ray_avoidance_weights[ray_index][direction_index]*MIN(sense_weight, 1.f);
}
maximum_sense_emergency = MAX(maximum_sense_emergency, sense_emergency);
@@ -1505,8 +1505,8 @@ static void actor_move_vector_avoidance(
direction_index < VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS;
direction_index++)
{
short avoidance_types[NUMBEROF(avoid_ray_avoidance_weights)];
real avoidance_t[NUMBEROF(avoid_ray_avoidance_weights)];
short avoid_ray_result[NUMBEROF(avoid_ray_avoidance_weights)];
real avoid_ray_t[NUMBEROF(avoid_ray_avoidance_weights)];
real direction_weight;
boolean obstructed;
@@ -1515,17 +1515,17 @@ static void actor_move_vector_avoidance(
real_point3d ray_origin;
real_vector3d ray_direction;
avoidance_types[ray_index] = actor_move_test_avoidance_vector(
avoid_ray_result[ray_index] = actor_move_test_avoidance_vector(
&avoidance_data,
&avoidance_rays[direction_index][ray_index],
&ray_origin,
&ray_direction,
&avoidance_t[ray_index],
&avoid_ray_t[ray_index],
&actor->control.vector_avoidance_clear_times[direction_index][ray_index]);
debug_info->field_6358[direction_index][ray_index] = ray_origin;
debug_info->field_6418[direction_index][ray_index] = ray_direction;
debug_info->field_62F8[direction_index][ray_index] = avoidance_types[ray_index];
debug_info->avoid_t[direction_index][ray_index] = avoidance_t[ray_index];
debug_info->field_62F8[direction_index][ray_index] = avoid_ray_result[ray_index];
debug_info->avoid_t[direction_index][ray_index] = avoid_ray_t[ray_index];
}
direction_weight = 0.f;
@@ -1533,7 +1533,7 @@ static void actor_move_vector_avoidance(
for (ray_index = NUMBEROF(avoid_ray_avoidance_weights) - 1; ray_index >= 0; ray_index--)
{
if (avoidance_types[ray_index] == _actor_vector_avoidance_clear)
if (avoid_ray_result[ray_index] == _actor_vector_avoidance_clear)
{
real clear_fraction = 1.f;
@@ -1558,7 +1558,7 @@ static void actor_move_vector_avoidance(
else
{
direction_weight -=
avoid_ray_avoidance_weights[ray_index]*MIN(2.f*(1.f - avoidance_t[ray_index]), 1.f);
avoid_ray_avoidance_weights[ray_index]*MIN(2.f*(1.f - avoid_ray_t[ray_index]), 1.f);
obstructed = TRUE;
}
}
@@ -1569,11 +1569,11 @@ static void actor_move_vector_avoidance(
short previous_direction = (direction_index + VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS - 1) % VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS;
short second_previous_direction = (direction_index + VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS - 2) % VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS;
weights[direction_index] += direction_weight;
weights[next_direction] += avoid_ray_adjacent_fractions[0]*direction_weight;
weights[second_next_direction] += avoid_ray_adjacent_fractions[1]*direction_weight;
weights[previous_direction] += avoid_ray_adjacent_fractions[0]*direction_weight;
weights[second_previous_direction] += avoid_ray_adjacent_fractions[1]*direction_weight;
avoidance_weights[direction_index] += direction_weight;
avoidance_weights[next_direction] += avoid_ray_adjacent_fractions[0]*direction_weight;
avoidance_weights[second_next_direction] += avoid_ray_adjacent_fractions[1]*direction_weight;
avoidance_weights[previous_direction] += avoid_ray_adjacent_fractions[0]*direction_weight;
avoidance_weights[second_previous_direction] += avoid_ray_adjacent_fractions[1]*direction_weight;
}
}
@@ -1593,7 +1593,7 @@ static void actor_move_vector_avoidance(
actor_move_vector_avoidance_find_direction(
VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS,
avoidance_directions,
weights,
avoidance_weights,
&velocity_direction,
&velocity_approximate_direction,
&velocity_approximate_weight) &&
@@ -1607,7 +1607,7 @@ static void actor_move_vector_avoidance(
dot_product3d(&avoidance_directions[direction_index], &velocity_direction);
if (velocity_dot < 0.f)
weights[direction_index] += velocity_dot*velocity_weight;
avoidance_weights[direction_index] += velocity_dot*velocity_weight;
}
}
else
@@ -1628,9 +1628,9 @@ static void actor_move_vector_avoidance(
direction_index < VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS;
direction_index++)
{
if (weights[direction_index] > best_weight)
if (avoidance_weights[direction_index] > best_weight)
{
best_weight = weights[direction_index];
best_weight = avoidance_weights[direction_index];
best_avoidance_direction = direction_index;
}
}
@@ -1638,7 +1638,7 @@ static void actor_move_vector_avoidance(
"c:\\halo\\SOURCE\\ai\\actor_moving.c",
2435,
(best_avoidance_direction >= 0) && (best_avoidance_direction < VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS));
csmemcpy(debug_info->field_64D8, weights, sizeof(weights));
csmemcpy(debug_info->field_64D8, avoidance_weights, sizeof(avoidance_weights));
movement_vector = *movement_direction;
forward_dot = 1.f;
@@ -1656,7 +1656,7 @@ static void actor_move_vector_avoidance(
actor_move_vector_avoidance_find_direction(
VECTOR_AVOIDANCE_NUMBER_OF_DIRECTIONS,
avoidance_directions,
weights,
avoidance_weights,
&local_movement_direction,
&movement_direction_approximation,
&movement_approximate_weight);
@@ -3055,8 +3055,8 @@ void actor_move_update(
else if (actor->input.vehicle_driver_type ==
_actor_vehicle_driver_directional_flying)
{
real_vector3d scaled_facing;
real_vector3d avoidance_rotation;
real_vector3d fake_movement_vector;
real_vector3d instantaneous_rotation_vector;
real_vector3d const *movement_direction;
real emergency_amount;
real rotation_magnitude_squared;
@@ -3072,17 +3072,17 @@ void actor_move_update(
scale_vector3d(
&actor->input.facing_vector,
3.f,
&scaled_facing);
movement_direction = &scaled_facing;
&fake_movement_vector);
movement_direction = &fake_movement_vector;
}
actor_move_vector_avoidance(
actor_index,
movement_direction,
&avoidance_rotation,
&instantaneous_rotation_vector,
&emergency_amount);
rotation_magnitude_squared = magnitude_squared3d(&avoidance_rotation);
rotation_magnitude_squared = magnitude_squared3d(&instantaneous_rotation_vector);
previous_magnitude_squared =
magnitude_squared3d(&actor->control.vector_avoidance_rotation);
blend = rotation_magnitude_squared > previous_magnitude_squared
@@ -3093,9 +3093,9 @@ void actor_move_update(
&actor->control.vector_avoidance_rotation,
1.f - blend,
&actor->control.vector_avoidance_rotation);
actor->control.vector_avoidance_rotation.i += avoidance_rotation.i * blend;
actor->control.vector_avoidance_rotation.j += avoidance_rotation.j * blend;
actor->control.vector_avoidance_rotation.k += avoidance_rotation.k * blend;
actor->control.vector_avoidance_rotation.i += instantaneous_rotation_vector.i * blend;
actor->control.vector_avoidance_rotation.j += instantaneous_rotation_vector.j * blend;
actor->control.vector_avoidance_rotation.k += instantaneous_rotation_vector.k * blend;
if (magnitude_squared3d(&actor->control.vector_avoidance_rotation) <
_real_epsilon)
@@ -3113,19 +3113,19 @@ void actor_move_update(
if (actor->control.moving)
{
real_vector3d rotation =
real_vector3d rotation_vector =
actor->control.vector_avoidance_rotation;
real angle_squared = magnitude_squared3d(&rotation);
real angle_squared = magnitude_squared3d(&rotation_vector);
if (angle_squared > _real_epsilon)
{
real angle = square_root(angle_squared);
real inverse_angle = 1.f / angle;
scale_vector3d(&rotation, inverse_angle, &rotation);
scale_vector3d(&rotation_vector, inverse_angle, &rotation_vector);
rotate_vector_about_axis(
&actor->control.moving_towards_vector,
&rotation,
&rotation_vector,
sine(angle),
cosine(angle));
}
@@ -3215,15 +3215,15 @@ void actor_move_update(
allow_jump = TRUE;
if (vehicle->object.up.k < 0.8f)
{
real_vector3d escape_direction;
real_vector3d movement_vector;
escape_direction = vehicle->object.up;
escape_direction.k = 0.f;
if (normalize3d(&escape_direction) > 0.f)
movement_vector = vehicle->object.up;
movement_vector.k = 0.f;
if (normalize3d(&movement_vector) > 0.f)
{
actor->control.moving = TRUE;
scale_vector3d(
&escape_direction,
&movement_vector,
3.f,
&actor->control.moving_towards_vector);
}
@@ -3455,26 +3455,26 @@ void actor_move_update(
!actor->emotions.played_berserk_sound)
{
long cause_unit_index = NONE;
real_vector2d alignment;
real_vector2d alignment_vector;
alignment.i = actor->input.facing_vector.i;
alignment.j = actor->input.facing_vector.j;
alignment_vector.i = actor->input.facing_vector.i;
alignment_vector.j = actor->input.facing_vector.j;
if (actor->target.target_prop_index != NONE)
{
struct prop_datum *prop =
prop_get(actor->target.target_prop_index);
cause_unit_index = prop->unit_index;
alignment.i = prop->actor_to_prop.i;
alignment.j = prop->actor_to_prop.j;
if (normalize2d(&alignment) == 0.f)
alignment_vector.i = prop->actor_to_prop.i;
alignment_vector.j = prop->actor_to_prop.j;
if (normalize2d(&alignment_vector) == 0.f)
{
alignment.i = actor->input.facing_vector.i;
alignment.j = actor->input.facing_vector.j;
alignment_vector.i = actor->input.facing_vector.i;
alignment_vector.j = actor->input.facing_vector.j;
}
}
actor_move_animation_impulse(actor_index, 0, &alignment);
actor_move_animation_impulse(actor_index, 0, &alignment_vector);
ai_communication_event(
_ai_communication_berserk,
actor->meta.unit_index,
@@ -3501,23 +3501,23 @@ void actor_move_update(
if (actor->orders.move.jump_leap)
{
real_vector2d alignment;
real_vector2d alignment_vector;
if (actor->orders.move.jump_targeted)
{
alignment = actor->orders.move.jump_alignment_vector;
alignment_vector = actor->orders.move.jump_alignment_vector;
}
else
{
alignment.i = actor->input.facing_vector.i;
alignment.j = actor->input.facing_vector.j;
if (normalize2d(&alignment) == 0.f)
alignment = *global_forward2d;
alignment_vector.i = actor->input.facing_vector.i;
alignment_vector.j = actor->input.facing_vector.j;
if (normalize2d(&alignment_vector) == 0.f)
alignment_vector = *global_forward2d;
}
leaped = unit_leap_begin(
actor->meta.unit_index,
&alignment);
&alignment_vector);
}
if (leaped)
+20 -20
View File
@@ -1935,12 +1935,12 @@ boolean actor_perception_friend_prop_is_attacking(
}
short actor_perception_aiming_vector_test_blockage(
real_point3d const *origin,
real_vector3d const *aiming_vector,
real_point3d const *point,
real_vector3d *error)
real_point3d const *source_position,
real_vector3d const *source_vector,
real_point3d const *friend_position,
real_vector3d *friend_direction_to_aiming_vector)
{
real_vector2d horizontal_aiming;
real_vector2d source_planar_direction;
real_vector3d friend_vector;
real_vector3d blockage_vector;
real horizontal_aiming_magnitude;
@@ -1949,15 +1949,15 @@ short actor_perception_aiming_vector_test_blockage(
real horizontal_error_squared;
short blockage = 0;
horizontal_aiming.i = aiming_vector->i;
horizontal_aiming.j = aiming_vector->j;
horizontal_aiming_magnitude = magnitude2d(&horizontal_aiming);
source_planar_direction.i = source_vector->i;
source_planar_direction.j = source_vector->j;
horizontal_aiming_magnitude = magnitude2d(&source_planar_direction);
if (!(_real_epsilon > fabs(horizontal_aiming_magnitude)))
{
real inverse_magnitude = 1.0f / horizontal_aiming_magnitude;
horizontal_aiming.i *= inverse_magnitude;
horizontal_aiming.j *= inverse_magnitude;
source_planar_direction.i *= inverse_magnitude;
source_planar_direction.j *= inverse_magnitude;
}
else
{
@@ -1967,10 +1967,10 @@ short actor_perception_aiming_vector_test_blockage(
if (!(horizontal_aiming_magnitude > 0.0f))
goto done;
vector_from_points3d(origin, point, &friend_vector);
vector_from_points3d(source_position, friend_position, &friend_vector);
projection =
friend_vector.i * horizontal_aiming.i +
friend_vector.j * horizontal_aiming.j;
friend_vector.i * source_planar_direction.i +
friend_vector.j * source_planar_direction.j;
friend_distance = square_root(
friend_vector.i * friend_vector.i +
friend_vector.j * friend_vector.j);
@@ -1981,17 +1981,17 @@ short actor_perception_aiming_vector_test_blockage(
projection = -projection;
blockage_vector.i =
friend_vector.i + projection * aiming_vector->i;
friend_vector.i + projection * source_vector->i;
blockage_vector.j =
friend_vector.j + projection * aiming_vector->j;
friend_vector.j + projection * source_vector->j;
blockage_vector.k =
friend_vector.k + projection * aiming_vector->k;
friend_vector.k + projection * source_vector->k;
if (error != NULL)
if (friend_direction_to_aiming_vector != NULL)
{
error->i = -blockage_vector.i;
error->j = -blockage_vector.j;
error->k = -blockage_vector.k;
friend_direction_to_aiming_vector->i = -blockage_vector.i;
friend_direction_to_aiming_vector->j = -blockage_vector.j;
friend_direction_to_aiming_vector->k = -blockage_vector.k;
}
if (blockage_vector.k > -0.5f && blockage_vector.k < 0.9f)
+4 -20
View File
@@ -289,6 +289,7 @@ symbols in this file:
#include "props.h"
#include "ai.h"
#include "ai/ai_globals.h"
#include "math/real_math.h"
#include "ai_communication.h"
#include "ai_debug.h"
@@ -528,27 +529,12 @@ typedef char vehicle_definition_flags_offset_assert[
typedef char vehicle_definition_ai_destination_radius_offset_assert[
offsetof(struct vehicle_definition, ai_destination_radius) == 0x384 ? 1 : -1];
/* ai.h does not yet declare the ai globals; actors touches only the
* January-authenticated service-timer prefix, so model that view locally
* (the leading flags follow the ai.c prefix). */
struct ai_globals_service_data
{
boolean ai_active;
boolean ai_initialized_for_map;
byte reserved002;
boolean time_given_this_frame;
short last_highest_service_timer;
short current_highest_service_timer;
byte reserved008[0x3AC];
boolean grenades_enabled;
};
typedef char ai_globals_service_data_time_given_offset_assert[
offsetof(struct ai_globals_service_data, time_given_this_frame) == 0x3 ? 1 : -1];
offsetof(struct ai_globals, time_given_this_frame) == 0x3 ? 1 : -1];
typedef char ai_globals_service_data_current_highest_offset_assert[
offsetof(struct ai_globals_service_data, current_highest_service_timer) == 0x6 ? 1 : -1];
offsetof(struct ai_globals, current_highest_service_timer) == 0x6 ? 1 : -1];
typedef char ai_globals_service_data_grenades_enabled_offset_assert[
offsetof(struct ai_globals_service_data, grenades_enabled) == 0x3B4 ? 1 : -1];
offsetof(struct ai_globals, grenades_enabled) == 0x3B4 ? 1 : -1];
/* ---------- prototypes */
@@ -572,8 +558,6 @@ short const global_movement_animation_states[NUMBER_OF_ACTOR_MOVEMENT_TYPES] =
_unit_animation_state_flaming,
};
extern struct ai_globals_service_data *ai_globals;
/* ---------- public code */
void actors_initialize(
+60 -93
View File
@@ -215,6 +215,7 @@ symbols in this file:
#include "ai/actions.h"
#include "ai/actors.h"
#include "ai/ai_globals.h"
#include "ai/encounters.h"
#include "ai/path.h"
#include "ai/props.h"
@@ -330,38 +331,6 @@ enum
/* ---------- structures */
struct ai_spatial_effect
{
short type;
short count;
real_point3d position;
long last_tick;
};
struct ai_globals_data
{
boolean ai_active;
boolean ai_initialized_for_map;
boolean ai_has_control_data;
byte reserved003[0x5];
long first_encounterless_actor_index;
real major_upgrade_error;
boolean dialogue_triggers_enabled;
byte reserved011[0x3];
long last_chatter_time[NUMBER_OF_AI_SPEECH_TIMERS];
long last_talk_time[NUMBER_OF_AI_SPEECH_TIMERS];
long last_shout_time[NUMBER_OF_AI_SPEECH_TIMERS];
byte reserved02C[0x104];
short spatial_effect_first_index;
short spatial_effect_last_index;
struct ai_spatial_effect spatial_effects[MAXIMUM_AI_SPATIAL_EFFECTS];
boolean grenades_enabled;
byte reserved3B5[0x503];
short mounted_weapon_unit_count;
byte reserved8BA[0x2];
long mounted_weapon_unit_indices[MAXIMUM_NUMBER_OF_MOUNTED_WEAPON_UNITS];
};
struct potentially_releasable_entity
{
boolean is_actor;
@@ -414,25 +383,25 @@ struct encounter_iterator
};
typedef char ai_globals_active_offset_assert[
offsetof(struct ai_globals_data, ai_active) == 0x0 ? 1 : -1];
offsetof(struct ai_globals, ai_active) == 0x0 ? 1 : -1];
typedef char ai_globals_initialized_offset_assert[
offsetof(struct ai_globals_data, ai_initialized_for_map) == 0x1 ? 1 : -1];
offsetof(struct ai_globals, ai_initialized_for_map) == 0x1 ? 1 : -1];
typedef char ai_globals_first_encounterless_actor_offset_assert[
offsetof(struct ai_globals_data, first_encounterless_actor_index) == 0x8 ? 1 : -1];
offsetof(struct ai_globals, first_encounterless_actor_index) == 0x8 ? 1 : -1];
typedef char ai_globals_dialogue_offset_assert[
offsetof(struct ai_globals_data, dialogue_triggers_enabled) == 0x10 ? 1 : -1];
offsetof(struct ai_globals, dialogue_triggers_enabled) == 0x10 ? 1 : -1];
typedef char ai_globals_last_chatter_time_offset_assert[
offsetof(struct ai_globals_data, last_chatter_time) == 0x14 ? 1 : -1];
offsetof(struct ai_globals, last_chatter_time) == 0x14 ? 1 : -1];
typedef char ai_globals_spatial_effects_offset_assert[
offsetof(struct ai_globals_data, spatial_effects) == 0x134 ? 1 : -1];
offsetof(struct ai_globals, spatial_effects) == 0x134 ? 1 : -1];
typedef char ai_spatial_effect_size_assert[
sizeof(struct ai_spatial_effect) == 0x14 ? 1 : -1];
typedef char ai_globals_grenades_offset_assert[
offsetof(struct ai_globals_data, grenades_enabled) == 0x3B4 ? 1 : -1];
offsetof(struct ai_globals, grenades_enabled) == 0x3B4 ? 1 : -1];
typedef char ai_globals_mounted_weapon_count_offset_assert[
offsetof(struct ai_globals_data, mounted_weapon_unit_count) == 0x8B8 ? 1 : -1];
offsetof(struct ai_globals, mounted_weapon_unit_count) == 0x8B8 ? 1 : -1];
typedef char ai_globals_size_assert[
sizeof(struct ai_globals_data) == 0x8DC ? 1 : -1];
sizeof(struct ai_globals) == 0x8DC ? 1 : -1];
typedef char ai_potentially_releasable_storage_size_assert[
sizeof(struct potentially_releasable_storage) == 0xC04 ? 1 : -1];
typedef char ai_unit_actor_index_offset_assert[
@@ -502,8 +471,6 @@ static void ai_flush_spatial_effects(
/* ---------- globals */
extern struct ai_globals_data *ai_globals;
static struct profile_section ai_update_section = { "ai_update", NONE, TRUE };
static char *ai_sound_volume_enum_strings[NUMBER_OF_AI_SOUND_VOLUMES] =
@@ -527,10 +494,10 @@ struct tag_enum_definition ai_sound_volume_enum =
void ai_initialize(
void)
{
ai_globals = game_state_malloc("ai globals", NULL, sizeof(struct ai_globals_data));
ai_globals = game_state_malloc("ai globals", NULL, sizeof(struct ai_globals));
match_assert("c:\\halo\\SOURCE\\ai\\ai.c", 0x8C, ai_globals);
csmemset(ai_globals, 0, sizeof(struct ai_globals_data));
csmemset(ai_globals, 0, sizeof(struct ai_globals));
ai_debug_initialize();
ai_profile_initialize();
@@ -1581,8 +1548,8 @@ void ai_handle_exit_vehicle(
static void ai_flush_spatial_effects(
void)
{
ai_globals->spatial_effect_last_index = 0;
ai_globals->spatial_effect_first_index = 0;
ai_globals->spatial_effects_last_index = 0;
ai_globals->spatial_effects_first_index = 0;
csmemset(
ai_globals->spatial_effects,
0,
@@ -1929,7 +1896,7 @@ boolean ai_consider_major_upgrade(
void ai_initialize_for_new_map(
void)
{
csmemset(ai_globals, 0, sizeof(struct ai_globals_data));
csmemset(ai_globals, 0, sizeof(struct ai_globals));
ai_globals->ai_active = TRUE;
ai_globals->ai_has_control_data = TRUE;
@@ -2546,16 +2513,16 @@ finish:
boolean ai_test_ballistic_line_of_fire(
long actor_index,
real_point3d const *origin,
real ticks,
real_vector3d const *velocity,
real gravity,
real arc_time,
real_vector3d const *arc_initial_velocity,
real arc_acceleration,
long ignore_object_index,
boolean in_vehicle)
boolean ignore_vehicles)
{
struct line_of_fire_pill pills[MAXIMUM_LINE_OF_FIRE_PILLS];
struct line_of_fire_pill friend_pills[MAXIMUM_LINE_OF_FIRE_PILLS];
struct collision_result collision;
struct actor_datum *actor = actor_get(actor_index);
real_point3d point;
real_point3d current_point;
real_point3d end_point;
real_vector3d arc_velocity;
real segment_start_time;
@@ -2572,13 +2539,13 @@ boolean ai_test_ballistic_line_of_fire(
pill_count = ai_find_line_of_fire_friend_pills(
actor_index,
MAXIMUM_LINE_OF_FIRE_PILLS,
pills);
friend_pills);
if (!ai_debug.ballistic_lineoffire_freeze)
{
ai_debug.ballistic_lineoffire_valid = TRUE;
ai_debug.ballistic_lineoffire_start = *origin;
ai_debug.ballistic_lineoffire_vector = *velocity;
ai_debug.ballistic_lineoffire_vector = *arc_initial_velocity;
ai_debug.ballistic_lineoffire_point_count = 0;
ai_debug.ballistic_lineoffire_pill_count = MIN(
pill_count,
@@ -2588,9 +2555,9 @@ boolean ai_test_ballistic_line_of_fire(
pill_index < ai_debug.ballistic_lineoffire_pill_count;
pill_index++)
{
ai_debug.ballistic_lineoffire_pill_start[pill_index] = pills[pill_index].base;
ai_debug.ballistic_lineoffire_pill_end[pill_index] = pills[pill_index].directed_height;
ai_debug.ballistic_lineoffire_pill_radius[pill_index] = pills[pill_index].width;
ai_debug.ballistic_lineoffire_pill_start[pill_index] = friend_pills[pill_index].base;
ai_debug.ballistic_lineoffire_pill_end[pill_index] = friend_pills[pill_index].directed_height;
ai_debug.ballistic_lineoffire_pill_radius[pill_index] = friend_pills[pill_index].width;
}
}
@@ -2602,39 +2569,39 @@ boolean ai_test_ballistic_line_of_fire(
FLAG(_collision_test_objects_bit) |
_collision_test_objects_sight_blocking_flags;
if (in_vehicle)
if (ignore_vehicles)
collision_flags &= ~FLAG(_collision_test_objects_vehicles_bit);
point = *origin;
arc_velocity = *velocity;
current_point = *origin;
arc_velocity = *arc_initial_velocity;
segment_start_time = 0.0f;
segment_end_time = MIN(6.0f, ticks);
segment_end_time = MIN(6.0f, arc_time);
do
{
if (!ai_debug.ballistic_lineoffire_freeze &&
ai_debug.ballistic_lineoffire_point_count < MAXIMUM_AI_DEBUG_BALLISTIC_POINTS)
{
ai_debug.ballistic_lineoffire_point[ai_debug.ballistic_lineoffire_point_count] = point;
ai_debug.ballistic_lineoffire_point[ai_debug.ballistic_lineoffire_point_count] = current_point;
ai_debug.ballistic_lineoffire_point_count++;
}
{
real segment_time = segment_end_time - segment_start_time;
end_point.x = arc_velocity.i * segment_time + point.x;
end_point.y = arc_velocity.j * segment_time + point.y;
end_point.z = (segment_time * arc_velocity.k + point.z) +
(segment_time * segment_time) * gravity * 0.5f;
end_point.x = arc_velocity.i * segment_time + current_point.x;
end_point.y = arc_velocity.j * segment_time + current_point.y;
end_point.z = (segment_time * arc_velocity.k + current_point.z) +
(segment_time * segment_time) * arc_acceleration * 0.5f;
}
{
real_vector3d segment_vector;
vector_from_points3d(&point, &end_point, &segment_vector);
vector_from_points3d(&current_point, &end_point, &segment_vector);
line_of_fire = !collision_test_vector(
collision_flags,
&point,
&current_point,
&segment_vector,
ignore_object_index,
&collision);
@@ -2646,16 +2613,16 @@ boolean ai_test_ballistic_line_of_fire(
{
real_vector3d segment_vector;
vector_from_points3d(&point, &end_point, &segment_vector);
vector_from_points3d(&current_point, &end_point, &segment_vector);
for (pill_index = 0; pill_index < pill_count; pill_index++)
{
boolean intersected = vector_intersects_pill3d(
&point,
&current_point,
&segment_vector,
&pills[pill_index].base,
&pills[pill_index].directed_height,
pills[pill_index].width);
&friend_pills[pill_index].base,
&friend_pills[pill_index].directed_height,
friend_pills[pill_index].width);
if (intersected)
{
@@ -2668,15 +2635,15 @@ boolean ai_test_ballistic_line_of_fire(
if (!line_of_fire)
break;
point = end_point;
arc_velocity.k = (segment_end_time - segment_start_time) * gravity + arc_velocity.k;
current_point = end_point;
arc_velocity.k = (segment_end_time - segment_start_time) * arc_acceleration + arc_velocity.k;
segment_start_time = segment_end_time;
segment_end_time += 6.0f;
if (segment_end_time > ticks)
segment_end_time = ticks;
if (segment_end_time > arc_time)
segment_end_time = arc_time;
}
while (segment_start_time < ticks);
while (segment_start_time < arc_time);
if (!ai_debug.ballistic_lineoffire_freeze &&
ai_debug.ballistic_lineoffire_point_count < MAXIMUM_AI_DEBUG_BALLISTIC_POINTS)
@@ -2937,8 +2904,8 @@ void ai_handle_spatial_effect(
submit = TRUE;
available_effect_index = NONE;
for (i = ai_globals->spatial_effect_first_index;
i != ai_globals->spatial_effect_last_index;
for (i = ai_globals->spatial_effects_first_index;
i != ai_globals->spatial_effects_last_index;
i = AI_SPATIAL_EFFECT_NEXT_INDEX(i))
{
boolean matches = FALSE;
@@ -2955,9 +2922,9 @@ void ai_handle_spatial_effect(
{
ai_globals->spatial_effects[i].type = NONE;
if (i == ai_globals->spatial_effect_first_index)
if (i == ai_globals->spatial_effects_first_index)
{
ai_globals->spatial_effect_first_index =
ai_globals->spatial_effects_first_index =
AI_SPATIAL_EFFECT_NEXT_INDEX(i);
}
else
@@ -2994,15 +2961,15 @@ void ai_handle_spatial_effect(
{
if (available_effect_index == NONE)
{
i = ai_globals->spatial_effect_last_index;
ai_globals->spatial_effect_last_index =
AI_SPATIAL_EFFECT_NEXT_INDEX(ai_globals->spatial_effect_last_index);
i = ai_globals->spatial_effects_last_index;
ai_globals->spatial_effects_last_index =
AI_SPATIAL_EFFECT_NEXT_INDEX(ai_globals->spatial_effects_last_index);
if (ai_globals->spatial_effect_last_index ==
ai_globals->spatial_effect_first_index)
if (ai_globals->spatial_effects_last_index ==
ai_globals->spatial_effects_first_index)
{
ai_globals->spatial_effect_first_index =
AI_SPATIAL_EFFECT_NEXT_INDEX(ai_globals->spatial_effect_first_index);
ai_globals->spatial_effects_first_index =
AI_SPATIAL_EFFECT_NEXT_INDEX(ai_globals->spatial_effects_first_index);
}
}
else
@@ -3012,10 +2979,10 @@ void ai_handle_spatial_effect(
{
short distance_to_effect =
(i - ai_globals->spatial_effect_first_index + MAXIMUM_AI_SPATIAL_EFFECTS) &
(i - ai_globals->spatial_effects_first_index + MAXIMUM_AI_SPATIAL_EFFECTS) &
(MAXIMUM_AI_SPATIAL_EFFECTS - 1);
short distance_to_end_of_queue =
(ai_globals->spatial_effect_last_index - ai_globals->spatial_effect_first_index +
(ai_globals->spatial_effects_last_index - ai_globals->spatial_effects_first_index +
MAXIMUM_AI_SPATIAL_EFFECTS) &
(MAXIMUM_AI_SPATIAL_EFFECTS - 1);
+4 -4
View File
@@ -172,11 +172,11 @@ void ai_handle_allegiance_broken_notification(
boolean ai_test_ballistic_line_of_fire(
long actor_index,
union real_point3d const *origin,
real ticks,
union real_vector3d const *velocity,
real gravity,
real arc_time,
union real_vector3d const *arc_initial_velocity,
real arc_acceleration,
long ignore_object_index,
boolean in_vehicle);
boolean ignore_vehicles);
boolean ai_test_line_of_fire(
long actor_index,
long ignore_unit_index,
File diff suppressed because it is too large. Load diff
+17 -2
View File
@@ -89,7 +89,7 @@ enum ai_communication_hostility
/* ---------- macros */
#define ai_conversation_header_get(index) \
((struct ai_conversation_datum_header *)datum_get(conversation_data, (index)))
((struct conversation_datum *)datum_get(conversation_data, (index)))
/* ---------- structures */
@@ -97,7 +97,7 @@ struct ai_information_data;
struct ai_information_packet;
/* The independently mapped prefix of the 0x64-byte conversation datum. */
struct ai_conversation_datum_header
struct conversation_datum
{
short identifier;
short scenario_conversation_index;
@@ -110,6 +110,21 @@ struct ai_conversation_datum_header
byte reserved0A[2];
long creation_time;
long triggering_player_unit_index;
unsigned long participant_bitmask;
short dialogue_indices[8];
long actor_indices[8];
short line_index;
short line_participant_index;
short line_delay_timer;
word line_flags;
long line_actor_index;
long line_unit_index;
long line_address_unit_index;
long line_sound_index;
boolean line_unspatialized;
boolean line_spoken;
boolean line_finished;
boolean line_advance;
};
/* ---------- prototypes/AI_COMMUNICATION.C */
+26 -62
View File
@@ -13,6 +13,7 @@ AI_DEBUG.C
#include "actor_definitions.h"
#include "actor_types.h"
#include "ai.h"
#include "ai/ai_globals.h"
#include "ai_communication.h"
#include "ai_profile.h"
#include "ai_scenario_definitions.h"
@@ -87,40 +88,6 @@ struct ai_debug_speech_list
boolean all;
};
struct ai_debug_spatial_effect
{
short type;
short field_02;
real_point3d point;
long time;
};
struct ai_debug_enterable_vehicle
{
long object_index;
real distance;
short team_flags;
short actor_type_flags;
short actor_count;
word pad;
long actor_index[6];
};
struct ai_debug_globals_view
{
boolean ai_active;
boolean initialized_for_new_map;
char __unknown02[0x12E];
short spatial_effect_head;
short spatial_effect_tail;
struct ai_debug_spatial_effect spatial_effect[32];
boolean field_3B4;
char __unknown3B5[1];
short enterable_vehicle_count;
struct ai_debug_enterable_vehicle enterable_vehicle[32];
short field_8B8;
char __unknown8BA[0x22];
};
struct encounter_actor_iterator
{
long encounter_index;
@@ -139,13 +106,13 @@ struct actor_iterator
};
typedef char ai_debug_enterable_vehicle_size_assert[
sizeof(struct ai_debug_enterable_vehicle) == 0x28 ? 1 : -1];
sizeof(struct ai_vehicle_enterable) == 0x28 ? 1 : -1];
typedef char ai_debug_globals_spatial_effect_offset_assert[
offsetof(struct ai_debug_globals_view, spatial_effect) == 0x134 ? 1 : -1];
offsetof(struct ai_globals, spatial_effects) == 0x134 ? 1 : -1];
typedef char ai_debug_globals_enterable_vehicle_offset_assert[
offsetof(struct ai_debug_globals_view, enterable_vehicle) == 0x3B8 ? 1 : -1];
offsetof(struct ai_globals, enterable_vehicles) == 0x3B8 ? 1 : -1];
typedef char ai_debug_globals_size_assert[
sizeof(struct ai_debug_globals_view) == 0x8DC ? 1 : -1];
sizeof(struct ai_globals) == 0x8DC ? 1 : -1];
typedef char ai_debug_actor_iterator_size_assert[
sizeof(struct actor_iterator) == 0x1C ? 1 : -1];
@@ -236,8 +203,6 @@ static void ai_debug_render_path_nodes(
struct ai_debug_state ai_debug;
extern struct ai_debug_globals_view *ai_globals;
struct actor_debug_info *actor_debug_array = NULL;
struct path_debug_storage *actor_path_debug_array = NULL;
static short global_ai_debug_path_render_id = 0;
@@ -453,7 +418,7 @@ boolean ai_debug_highlight_cluster(
void ai_debug_render(
void)
{
if (ai_globals->initialized_for_new_map)
if (ai_globals->ai_initialized_for_map)
{
global_ai_debug_string_position = rasterizer_globals.reserved04.frame_bounds.y1 - 20;
@@ -1707,9 +1672,9 @@ static void ai_debug_render_actor(
case 1:
set_real_point3d(
&origin,
((1.f-prop->awareness)*prop_start_point.x) + (prop->awareness*prop->head_position.x),
((1.f-prop->awareness)*prop_start_point.y) + (prop->awareness*prop->head_position.y),
((1.f-prop->awareness)*prop_start_point.z) + (prop->awareness*prop->head_position.z)
(1.f-prop->awareness)*prop_start_point.x + prop->awareness*prop->head_position.x,
(1.f-prop->awareness)*prop_start_point.y + prop->awareness*prop->head_position.y,
(1.f-prop->awareness)*prop_start_point.z + prop->awareness*prop->head_position.z
);
render_debug_line(TRUE, &prop_start_point, &origin, global_real_argb_yellow);
render_debug_line(TRUE, &origin, &prop->head_position, global_real_argb_black);
@@ -3679,8 +3644,7 @@ static void ai_debug_render_actor(
{
"",
"part",
"full",
NULL
"full"
};
sprintf(
@@ -5282,11 +5246,11 @@ static void ai_debug_render_spatial_effects(
void)
{
long time = game_time_get();
short index = ai_globals->spatial_effect_head;
short index = ai_globals->spatial_effects_first_index;
while (index!=ai_globals->spatial_effect_tail)
while (index!=ai_globals->spatial_effects_last_index)
{
struct ai_debug_spatial_effect *effect = &ai_globals->spatial_effect[index];
struct ai_spatial_effect *effect = &ai_globals->spatial_effects[index];
if (effect->type!=NONE)
{
@@ -5305,7 +5269,7 @@ static void ai_debug_render_spatial_effects(
color = *colors[effect->type];
}
effect_point = &effect->point;
effect_point = &effect->position;
render_debug_sphere(TRUE, effect_point, 0.2f, color);
@@ -5314,7 +5278,7 @@ static void ai_debug_render_spatial_effects(
point.z = global_up3d->k*0.3f + effect_point->z;
render_debug_string_at_point(TRUE, &point,
csprintf(temporary, "c%d t%d", effect->field_02, time - effect->time),
csprintf(temporary, "c%d t%d", effect->count, time - effect->last_tick),
color);
}
@@ -5487,23 +5451,23 @@ static void ai_debug_render_vehicles_enterable(
for (index = 0; index<ai_globals->enterable_vehicle_count; index++)
{
struct ai_debug_enterable_vehicle *vehicle = &ai_globals->enterable_vehicle[index];
struct ai_vehicle_enterable *vehicle = &ai_globals->enterable_vehicles[index];
if (unit_try_and_get(vehicle->object_index))
if (unit_try_and_get(vehicle->vehicle_index))
{
real_point3d origin;
object_get_origin(vehicle->object_index, &origin);
object_get_origin(vehicle->vehicle_index, &origin);
point_from_line3d(&origin, global_up3d, 0.5f, &origin);
ai_debug_drawstack_setup(&origin);
render_debug_string_at_point(TRUE, ai_debug_drawstack(),
csprintf(temporary, "enterable: dist %.1f", vehicle->distance),
csprintf(temporary, "enterable: dist %.1f", vehicle->radius),
global_real_argb_pink);
if (vehicle->team_flags)
if (vehicle->team_bitmask)
{
char const *team_names[NUMBER_OF_SOLO_CAMPAIGN_TEAMS] =
{
@@ -5515,7 +5479,7 @@ static void ai_debug_render_vehicles_enterable(
for (index = 0; index<NUMBER_OF_SOLO_CAMPAIGN_TEAMS; index++)
{
if (TEST_FLAG(vehicle->team_flags, index))
if (TEST_FLAG(vehicle->team_bitmask, index))
{
csstrcat(temporary, " ");
csstrcat(temporary, team_names[index]);
@@ -5526,7 +5490,7 @@ static void ai_debug_render_vehicles_enterable(
global_real_argb_pink);
}
if (vehicle->actor_type_flags)
if (vehicle->actor_type_bitmask)
{
char const *actor_type_names[NUMBER_OF_ACTOR_TYPES] =
{
@@ -5539,7 +5503,7 @@ static void ai_debug_render_vehicles_enterable(
for (index = 0; index<NUMBER_OF_ACTOR_TYPES; index++)
{
if (TEST_FLAG(vehicle->actor_type_flags, index))
if (TEST_FLAG(vehicle->actor_type_bitmask, index))
{
csstrcat(temporary, " ");
csstrcat(temporary, actor_type_names[index]);
@@ -5550,15 +5514,15 @@ static void ai_debug_render_vehicles_enterable(
global_real_argb_pink);
}
if (vehicle->actor_count>0)
if (vehicle->ai_indices_count>0)
{
char string[256];
sprintf(temporary, "actors:");
for (index = 0; index<vehicle->actor_count; index++)
for (index = 0; index<vehicle->ai_indices_count; index++)
{
ai_index_to_string(vehicle->actor_index[index], global_scenario_get(),
ai_index_to_string(vehicle->ai_indices[index], global_scenario_get(),
string, 256);
csstrcat(temporary, " ");
+60
View File
@@ -14,10 +14,70 @@ header included in hcex build.
/* ---------- structures */
struct ai_spatial_effect
{
short type;
short count;
real_point3d position;
long last_tick;
};
struct recent_conversation
{
short scenario_conversation_index;
boolean unable_to_begin;
boolean finished_successfully;
long finish_time;
byte __unknown08[8];
};
struct ai_vehicle_enterable
{
long vehicle_index;
real radius;
short team_bitmask;
short actor_type_bitmask;
short ai_indices_count;
word __pad0E;
long ai_indices[6];
};
struct ai_globals
{
boolean ai_active;
boolean ai_initialized_for_map;
boolean ai_has_control_data;
boolean time_given_this_frame;
short last_highest_service_timer;
short current_highest_service_timer;
long first_encounterless_actor_index;
real major_upgrade_error;
boolean dialogue_triggers_enabled;
byte reserved011[0x3];
long last_chatter_time[2];
long last_talk_time[2];
long last_shout_time[2];
short recent_conversation_count;
short recent_conversation_next_index;
struct recent_conversation recent_conversations[16];
short spatial_effects_first_index;
short spatial_effects_last_index;
struct ai_spatial_effect spatial_effects[32];
boolean grenades_enabled;
byte reserved3B5;
short enterable_vehicle_count;
struct ai_vehicle_enterable enterable_vehicles[32];
short mounted_weapon_unit_count;
byte reserved8BA[0x2];
long mounted_weapon_unit_indices[8];
};
/* ---------- prototypes/EXAMPLE.C */
/* ---------- globals */
extern struct ai_globals *ai_globals;
/* ---------- public code */
#endif // __AI_GLOBALS_H
+13
View File
@@ -434,6 +434,19 @@ struct ai_command_list_definition
struct tag_block unused_blocks[2];
};
struct ai_conversation
{
char name[32];
word flags;
word pad22;
real trigger_distance;
real run_to_player_dist;
byte __unknown2C[0x24];
struct tag_block participants;
struct tag_block lines;
struct tag_block unused;
};
/* ---------- prototypes/AI_SCENARIO_DEFINITIONS.C */
/* ---------- globals */
+18 -47
View File
@@ -452,6 +452,7 @@ symbols in this file:
#include "ai/actors.h"
#include "ai/ai_communication.h"
#include "ai/ai_debug.h"
#include "ai/ai_globals.h"
#include "ai/ai_scenario_definitions.h"
#include "ai/encounters.h"
#include "ai/props.h"
@@ -559,26 +560,6 @@ enum
/* ---------- structures */
struct ai_script_vehicle_enterable_data
{
long vehicle_index;
real radius;
short team_bitmask;
short actor_type_bitmask;
short ai_indices_count;
word __pad0E;
long ai_indices[MAXIMUM_AI_INDICES_PER_ENTERABLE_VEHICLE];
};
struct ai_script_globals_data
{
boolean ai_active;
boolean ai_initialized_for_map;
byte __unknown2[0x3B4];
short enterable_vehicle_count;
struct ai_script_vehicle_enterable_data enterable_vehicles[MAXIMUM_AI_ENTERABLE_VEHICLES];
};
typedef char ai_script_squad_iterator_size_assert[
sizeof(struct ai_script_squad_iterator) == 0x14 ? 1 : -1];
@@ -607,32 +588,24 @@ struct ai_script_vehicle_candidate
byte pad[3];
};
struct ai_script_conversation_definition
{
char name[32];
byte unknown[84];
};
typedef char ai_script_actor_iterator_size_assert[
sizeof(struct actor_iterator) == 0x1C ? 1 : -1];
typedef char ai_script_actor_reference_iterator_size_assert[
sizeof(struct ai_script_actor_reference_iterator) == 0x18 ? 1 : -1];
typedef char ai_script_actor_reference_iterator_actor_index_offset_assert[
offsetof(struct ai_script_actor_reference_iterator, actor_index) == 0x10 ? 1 : -1];
typedef char ai_script_vehicle_enterable_size_assert[
sizeof(struct ai_script_vehicle_enterable) == 0xC ? 1 : -1];
typedef char ai_script_vehicle_enterable_radius_offset_assert[
offsetof(struct ai_script_vehicle_enterable, radius) == 0x4 ? 1 : -1];
offsetof(struct ai_vehicle_enterable, radius) == 0x4 ? 1 : -1];
typedef char ai_script_vehicle_enterable_team_offset_assert[
offsetof(struct ai_script_vehicle_enterable, team_bitmask) == 0x8 ? 1 : -1];
offsetof(struct ai_vehicle_enterable, team_bitmask) == 0x8 ? 1 : -1];
typedef char ai_script_vehicle_enterable_actor_type_offset_assert[
offsetof(struct ai_script_vehicle_enterable, actor_type_bitmask) == 0xA ? 1 : -1];
offsetof(struct ai_vehicle_enterable, actor_type_bitmask) == 0xA ? 1 : -1];
typedef char ai_script_vehicle_enterable_data_size_assert[
sizeof(struct ai_script_vehicle_enterable_data) == 0x28 ? 1 : -1];
sizeof(struct ai_vehicle_enterable) == 0x28 ? 1 : -1];
typedef char ai_script_globals_enterable_vehicle_count_offset_assert[
offsetof(struct ai_script_globals_data, enterable_vehicle_count) == 0x3B6 ? 1 : -1];
offsetof(struct ai_globals, enterable_vehicle_count) == 0x3B6 ? 1 : -1];
typedef char ai_script_globals_enterable_vehicles_offset_assert[
offsetof(struct ai_script_globals_data, enterable_vehicles) == 0x3B8 ? 1 : -1];
offsetof(struct ai_globals, enterable_vehicles) == 0x3B8 ? 1 : -1];
typedef char ai_script_platoon_iterator_size_assert[
sizeof(struct ai_script_platoon_iterator) == 0xC ? 1 : -1];
typedef char ai_script_vehicle_candidate_size_assert[
@@ -691,8 +664,6 @@ static short ai_scripting_command_list_status_internal(
/* ---------- globals */
extern struct ai_script_globals_data *ai_globals;
char const ai_script_squad_separator = '/';
/* ---------- public code */
@@ -1763,10 +1734,10 @@ void ai_scripting_set_blind(
return;
}
struct ai_script_vehicle_enterable *ai_scripting_find_vehicle_enterable(
struct ai_vehicle_enterable *ai_scripting_find_vehicle_enterable(
long vehicle_index)
{
struct ai_script_vehicle_enterable_data *vehicle_enterable = NULL;
struct ai_vehicle_enterable *vehicle_enterable = NULL;
if (vehicle_index != NONE)
{
@@ -1801,7 +1772,7 @@ struct ai_script_vehicle_enterable *ai_scripting_find_vehicle_enterable(
}
}
return (struct ai_script_vehicle_enterable *)vehicle_enterable;
return (struct ai_vehicle_enterable *)vehicle_enterable;
}
void ai_scripting_vehicle_enterable_distance(
@@ -1818,7 +1789,7 @@ void ai_scripting_vehicle_enterable_distance(
if (unit_index != NONE)
{
struct ai_script_vehicle_enterable *vehicle_enterable =
struct ai_vehicle_enterable *vehicle_enterable =
ai_scripting_find_vehicle_enterable(unit_index);
if (vehicle_enterable)
vehicle_enterable->radius = distance;
@@ -1842,7 +1813,7 @@ void ai_scripting_vehicle_enterable_team(
if (unit_index != NONE)
{
struct ai_script_vehicle_enterable *vehicle_enterable =
struct ai_vehicle_enterable *vehicle_enterable =
ai_scripting_find_vehicle_enterable(unit_index);
if (vehicle_enterable)
vehicle_enterable->team_bitmask |= 1 << team_index;
@@ -1866,7 +1837,7 @@ void ai_scripting_vehicle_enterable_actor_type(
if (unit_index != NONE)
{
struct ai_script_vehicle_enterable *vehicle_enterable =
struct ai_vehicle_enterable *vehicle_enterable =
ai_scripting_find_vehicle_enterable(unit_index);
if (vehicle_enterable)
vehicle_enterable->actor_type_bitmask |= 1 << actor_type;
@@ -1897,8 +1868,8 @@ void ai_scripting_vehicle_enterable_actors(
if (unit_index != NONE && ai_reference != NONE)
{
struct ai_script_vehicle_enterable_data *vehicle_enterable =
(struct ai_script_vehicle_enterable_data *)ai_scripting_find_vehicle_enterable(unit_index);
struct ai_vehicle_enterable *vehicle_enterable =
(struct ai_vehicle_enterable *)ai_scripting_find_vehicle_enterable(unit_index);
if (vehicle_enterable)
{
@@ -2854,7 +2825,7 @@ boolean ai_scripting_conversation(
conversation_name = TAG_BLOCK_GET_ELEMENT(
&scenario->ai_conversations,
conversation_index,
struct ai_script_conversation_definition)->name;
struct ai_conversation)->name;
}
error(
@@ -2882,7 +2853,7 @@ void ai_scripting_conversation_stop(
conversation_name = TAG_BLOCK_GET_ELEMENT(
&scenario->ai_conversations,
conversation_index,
struct ai_script_conversation_definition)->name;
struct ai_conversation)->name;
}
error(
@@ -2912,7 +2883,7 @@ void ai_scripting_conversation_advance(
conversation_name = TAG_BLOCK_GET_ELEMENT(
&scenario->ai_conversations,
conversation_index,
struct ai_script_conversation_definition)->name;
struct ai_conversation)->name;
}
error(
+1 -9
View File
@@ -22,14 +22,6 @@ struct platoon_datum;
struct scenario;
struct squad_datum;
struct ai_script_vehicle_enterable
{
long vehicle_index;
real radius;
short team_bitmask;
short actor_type_bitmask;
};
struct ai_script_platoon_iterator
{
long encounter_index;
@@ -97,7 +89,7 @@ struct platoon_datum *ai_index_platoon_iterator_next(
struct ai_script_platoon_iterator *iterator);
long object_list_from_ai_reference(
long ai_reference);
struct ai_script_vehicle_enterable *ai_scripting_find_vehicle_enterable(
struct ai_vehicle_enterable *ai_scripting_find_vehicle_enterable(
long vehicle_index);
void ai_scripting_vehicle_enterable_distance(
long ai_reference,
+3 -15
View File
@@ -289,6 +289,7 @@ symbols in this file:
#include "actor_placement.h"
#include "actor_types.h"
#include "ai.h"
#include "ai/ai_globals.h"
#include "ai_debug.h"
#include "ai_communication.h"
#include "ai_profile.h"
@@ -471,17 +472,6 @@ struct actor_iterator
long next_index;
};
struct encounter_ai_globals_prefix
{
boolean ai_active;
boolean ai_initialized_for_map;
boolean ai_has_control_data;
boolean time_given_this_frame;
short last_highest_service_timer;
short current_highest_service_timer;
long first_encounterless_actor_index;
};
typedef char encounter_iterator_size_assert[
sizeof(struct encounter_iterator) == 0x18 ? 1 : -1];
typedef char encounter_iterator_index_offset_assert[
@@ -505,9 +495,9 @@ typedef char actor_iterator_index_offset_assert[
typedef char actor_iterator_next_index_offset_assert[
offsetof(struct actor_iterator, next_index) == 0x18 ? 1 : -1];
typedef char encounter_ai_globals_initialized_offset_assert[
offsetof(struct encounter_ai_globals_prefix, ai_initialized_for_map) == 0x1 ? 1 : -1];
offsetof(struct ai_globals, ai_initialized_for_map) == 0x1 ? 1 : -1];
typedef char encounter_ai_globals_encounterless_actor_offset_assert[
offsetof(struct encounter_ai_globals_prefix, first_encounterless_actor_index) == 0x8 ? 1 : -1];
offsetof(struct ai_globals, first_encounterless_actor_index) == 0x8 ? 1 : -1];
typedef char encounter_datum_active_offset_assert[
offsetof(struct encounter_datum, active) == 0xD ? 1 : -1];
typedef char encounter_datum_status_dirty_offset_assert[
@@ -578,8 +568,6 @@ static short squad_get_actor_type(
/* ---------- globals */
extern struct encounter_ai_globals_prefix *ai_globals;
struct data_array *encounter_data;
struct platoon_datum *platoon_array;
struct squad_datum *squad_array;
+21 -21
View File
@@ -809,30 +809,30 @@ short bitmap_group_add_bitmap(
short format,
short mipmap_count)
{
struct bitmap_data new_bitmap_data;
struct bitmap_data fake_bitmap;
long pixels_end = 0;
long previous_count;
long pixel_data_size;
match_assert("c:\\halo\\SOURCE\\bitmaps\\bitmap_group.c", 0x2DB, group);
new_bitmap_data.type = type;
new_bitmap_data.flags = 0;
new_bitmap_data.registration_point.y = 0;
new_bitmap_data.registration_point.x = 0;
new_bitmap_data.mipmap_count = mipmap_count;
new_bitmap_data.pixels_offset = 0;
new_bitmap_data.hardware_format = NULL;
new_bitmap_data.base_address = NULL;
new_bitmap_data.signature = BITMAP_GROUP_TAG;
new_bitmap_data.width = width;
new_bitmap_data.height = height;
new_bitmap_data.depth = depth;
new_bitmap_data.format = format;
fake_bitmap.type = type;
fake_bitmap.flags = 0;
fake_bitmap.registration_point.y = 0;
fake_bitmap.registration_point.x = 0;
fake_bitmap.mipmap_count = mipmap_count;
fake_bitmap.pixels_offset = 0;
fake_bitmap.hardware_format = NULL;
fake_bitmap.base_address = NULL;
fake_bitmap.signature = BITMAP_GROUP_TAG;
fake_bitmap.width = width;
fake_bitmap.height = height;
fake_bitmap.depth = depth;
fake_bitmap.format = format;
if (group->type == _bitmap_group_type_interface_bitmaps)
{
SET_FLAG(new_bitmap_data.flags, _bitmap_linear_bit, TRUE);
SET_FLAG(fake_bitmap.flags, _bitmap_linear_bit, TRUE);
}
else if ((width & (width - 1)) ||
(height & (height - 1)) ||
@@ -860,18 +860,18 @@ short bitmap_group_add_bitmap(
else
{
SET_FLAG(
new_bitmap_data.flags,
fake_bitmap.flags,
_bitmap_has_power_of_two_dimensions_bit,
TRUE);
}
if (format >= _bitmap_format_dxt1 && format <= _bitmap_format_dxt5)
{
SET_FLAG(new_bitmap_data.flags, _bitmap_compressed_bit, TRUE);
SET_FLAG(fake_bitmap.flags, _bitmap_compressed_bit, TRUE);
}
if (format == _bitmap_format_p8_bump)
{
SET_FLAG(new_bitmap_data.flags, _bitmap_palettized_bit, TRUE);
SET_FLAG(fake_bitmap.flags, _bitmap_palettized_bit, TRUE);
}
/* January repeats these validation guards after assigning format flags. */
@@ -886,7 +886,7 @@ short bitmap_group_add_bitmap(
return NONE;
}
if (!TEST_FLAG(
new_bitmap_data.flags,
fake_bitmap.flags,
_bitmap_has_power_of_two_dimensions_bit) &&
group->type != _bitmap_group_type_interface_bitmaps)
{
@@ -900,7 +900,7 @@ short bitmap_group_add_bitmap(
}
previous_count = group->bitmaps.count;
pixel_data_size = bitmap_get_pixel_data_size(&new_bitmap_data);
pixel_data_size = bitmap_get_pixel_data_size(&fake_bitmap);
if (tag_block_resize(&group->bitmaps, group->bitmaps.count + 1) &&
tag_data_resize(&group->pixel_data, group->pixel_data.size + pixel_data_size))
{
@@ -968,7 +968,7 @@ short bitmap_group_add_bitmap(
"c:\\halo\\SOURCE\\bitmaps\\bitmap_group.c",
0x371,
new_bitmap);
csmemcpy(new_bitmap, &new_bitmap_data, sizeof(new_bitmap_data));
csmemcpy(new_bitmap, &fake_bitmap, sizeof(fake_bitmap));
new_bitmap->pixels_offset = pixels_end;
new_bitmap->base_address = (byte *)group->pixel_data.address + pixels_end;
csmemset(new_bitmap->base_address, 0, pixel_data_size);
+32 -32
View File
@@ -314,9 +314,9 @@ static void AllSame(
/* ---------- public code */
void EncodeBlockRGBColorKey(
struct s3tc_color colors[S3TC_BLOCK_PIXELS],
struct s3tc_block_rgb *block,
byte alpha_key)
struct s3tc_color colorSrc[S3TC_BLOCK_PIXELS],
struct s3tc_block_rgb *pblockDst,
byte alphaKey)
{
struct s3tc_fcolor fcolors[S3TC_BLOCK_PIXELS];
struct s3tc_fcolor mean;
@@ -349,7 +349,7 @@ void EncodeBlockRGBColorKey(
long column;
long i;
if (block == NULL)
if (pblockDst == NULL)
{
return;
}
@@ -357,7 +357,7 @@ void EncodeBlockRGBColorKey(
for (i = S3TC_BLOCK_PIXELS - 1; i >= 0; --i)
{
wAlpha <<= 1;
if (colors[i].rgba[S3TC_ALPHA] >= alpha_key)
if (colorSrc[i].rgba[S3TC_ALPHA] >= alphaKey)
{
wAlpha |= 1;
cOpaque++;
@@ -370,9 +370,9 @@ void EncodeBlockRGBColorKey(
if (cOpaque == 0)
{
block->color0 = 0;
block->color1 = UNSIGNED_SHORT_MAX;
block->bitmap = UNSIGNED_LONG_MAX;
pblockDst->color0 = 0;
pblockDst->color1 = UNSIGNED_SHORT_MAX;
pblockDst->bitmap = UNSIGNED_LONG_MAX;
return;
}
@@ -380,22 +380,22 @@ void EncodeBlockRGBColorKey(
for (i = 0; i < S3TC_BLOCK_PIXELS; ++i)
{
if (same && i > 0 &&
(colors[i].rgba[2] != colors[i - 1].rgba[2] ||
colors[i].rgba[1] != colors[i - 1].rgba[1] ||
colors[i].rgba[0] != colors[i - 1].rgba[0]))
(colorSrc[i].rgba[2] != colorSrc[i - 1].rgba[2] ||
colorSrc[i].rgba[1] != colorSrc[i - 1].rgba[1] ||
colorSrc[i].rgba[0] != colorSrc[i - 1].rgba[0]))
{
same = FALSE;
}
}
if (same)
{
AllSame(colors, block, wAlpha);
AllSame(colorSrc, pblockDst, wAlpha);
return;
}
for (i = 0; i < S3TC_BLOCK_PIXELS; ++i)
{
ColorToFcolor(&colors[i], &fcolors[i]);
ColorToFcolor(&colorSrc[i], &fcolors[i]);
}
scale = 1.0f / cOpaque;
@@ -446,7 +446,7 @@ void EncodeBlockRGBColorKey(
trace = m[2][2] + m[1][1] + m[0][0];
if (trace == 0.0f)
{
AllSame(colors, block, wAlpha);
AllSame(colorSrc, pblockDst, wAlpha);
return;
}
scale = 3.0f / trace;
@@ -487,7 +487,7 @@ void EncodeBlockRGBColorKey(
len2 = x * x + y * y + z * z;
if (len2 == 0.0f)
{
AllSame(colors, block, wAlpha);
AllSame(colorSrc, pblockDst, wAlpha);
return;
}
@@ -519,7 +519,7 @@ void EncodeBlockRGBColorKey(
upper.rgba[2] = z * max + mean.rgba[2];
ClipExtrema(&lower, &upper);
Quantize(&lower, &upper, block, cOpaque);
Quantize(&lower, &upper, pblockDst, cOpaque);
dr = upper.rgba[0] - lower.rgba[0];
dg = upper.rgba[1] - lower.rgba[1];
@@ -527,11 +527,11 @@ void EncodeBlockRGBColorKey(
len2 = dr * dr + dg * dg + db * db;
if (len2 == 0.0f)
{
AllSame(colors, block, wAlpha);
AllSame(colorSrc, pblockDst, wAlpha);
return;
}
block->bitmap = 0;
pblockDst->bitmap = 0;
bit = 0x8000;
for (i = S3TC_BLOCK_PIXELS - 1; i >= 0; --i)
{
@@ -554,8 +554,8 @@ void EncodeBlockRGBColorKey(
{
t = 3.0f;
}
block->bitmap <<= 2;
block->bitmap |= mapRGB4[(long)t];
pblockDst->bitmap <<= 2;
pblockDst->bitmap |= mapRGB4[(long)t];
}
else
{
@@ -568,14 +568,14 @@ void EncodeBlockRGBColorKey(
{
t = 2.0f;
}
block->bitmap <<= 2;
block->bitmap |= mapRGB3[(long)t];
pblockDst->bitmap <<= 2;
pblockDst->bitmap |= mapRGB3[(long)t];
}
}
else
{
block->bitmap <<= 2;
block->bitmap |= 3;
pblockDst->bitmap <<= 2;
pblockDst->bitmap |= 3;
}
bit >>= 1;
}
@@ -645,25 +645,25 @@ void DecodeBlockRGB(
}
void DecodeBlockRGB__single_pixel(
struct s3tc_block_rgb const *source,
struct s3tc_color *color,
struct s3tc_block_rgb const *pblockSrc,
struct s3tc_color *colorDst,
short u,
short v)
{
struct s3tc_color colors[4];
long channel;
if (source == NULL)
if (pblockSrc == NULL)
{
memset(color, 0, sizeof(*color));
memset(colorDst, 0, sizeof(*colorDst));
return;
}
RGBToColor(&source->color0, &colors[0]);
RGBToColor(&source->color1, &colors[1]);
RGBToColor(&pblockSrc->color0, &colors[0]);
RGBToColor(&pblockSrc->color1, &colors[1]);
colors[0].rgba[S3TC_ALPHA] = colors[1].rgba[S3TC_ALPHA] = colors[2].rgba[S3TC_ALPHA] = 0xFF;
if (source->color0 > source->color1)
if (pblockSrc->color0 > pblockSrc->color1)
{
word c0;
word c1;
@@ -695,7 +695,7 @@ void DecodeBlockRGB__single_pixel(
match_assert("c:\\halo\\SOURCE\\bitmaps\\s3tc\\s3tc.c", 773, u >= 0 && u < 4);
match_assert("c:\\halo\\SOURCE\\bitmaps\\s3tc\\s3tc.c", 774, v >= 0 && v < 4);
*color = colors[(source->bitmap >> (2 * (4 * v + u))) & 3];
*colorDst = colors[(pblockSrc->bitmap >> (2 * (4 * v + u))) & 3];
return;
}
+5 -5
View File
@@ -73,8 +73,8 @@ void DecodeBlockAlpha3(
struct s3tc_block_alpha3 *source,
struct s3tc_color colors[S3TC_BLOCK_PIXELS]);
void DecodeBlockRGB__single_pixel(
struct s3tc_block_rgb const *source,
struct s3tc_color *color,
struct s3tc_block_rgb const *pblockSrc,
struct s3tc_color *colorDst,
short u,
short v);
void DecodeBlockAlpha3__single_pixel(
@@ -89,9 +89,9 @@ void DecodeBlockAlpha4__single_pixel(
short v);
void EncodeBlockRGBColorKey(
struct s3tc_color colors[S3TC_BLOCK_PIXELS],
struct s3tc_block_rgb *block,
byte alpha_key);
struct s3tc_color colorSrc[S3TC_BLOCK_PIXELS],
struct s3tc_block_rgb *pblockDst,
byte alphaKey);
void EncodeBlockRGB(
struct s3tc_color colors[S3TC_BLOCK_PIXELS],
struct s3tc_block_rgb *block);
@@ -99,7 +99,7 @@ void disconnect_endpoint(
struct transport_endpoint *endpoint);
short poll_endpoint_set(
struct transport_endpoint_set *set,
word timeout);
word millisec_timeout);
void rewind_endpoint_set(
struct transport_endpoint_set *set);
struct transport_endpoint *get_next_endpoint_from_set(
@@ -263,7 +263,7 @@ short transport_initialize(
{
if (!transport_initialized)
{
WSADATA wsa_data = { 0 };
WSADATA info = { 0 };
XNetStartupParams startup_params = { 0 };
DWORD link_status;
DWORD address_status;
@@ -301,7 +301,7 @@ short transport_initialize(
if (XNetStartup(&startup_params) != 0)
return _transport_error_not_initialized;
wsa_error = WSAStartup(MAKEWORD(2, 0), &wsa_data);
wsa_error = WSAStartup(MAKEWORD(2, 0), &info);
if (wsa_error != 0)
{
XNetCleanup();
@@ -495,7 +495,7 @@ static int __cdecl poll_ep_array_compare_proc(
short poll_endpoint_set(
struct transport_endpoint_set *set,
word timeout)
word millisec_timeout)
{
short result = _transport_error_none;
struct timeval timeout_value;
@@ -512,7 +512,7 @@ short poll_endpoint_set(
0x1DE,
transport_initialized);
timeout_value.tv_usec = timeout * MILLISECONDS_PER_SECOND;
timeout_value.tv_usec = millisec_timeout * MILLISECONDS_PER_SECOND;
timeout_value.tv_sec = 0;
if (set->needs_compaction)
+65 -64
View File
@@ -191,9 +191,9 @@ static void sound_cache_delete_block_proc(
/* ---------- globals */
extern short assertion_count;
extern boolean debug_sound_cache;
extern boolean debug_sound_reference_counts;
short assertion_count;
boolean debug_sound_cache;
boolean debug_sound_reference_counts;
static struct xbox_sound_cache_globals xbox_sound_cache_globals = { 0 };
/* ---------- public code */
@@ -633,34 +633,39 @@ static void render_inverse_transform_screen_point(
{
real screen_x;
real screen_y;
real_vector3d delta0;
real_vector3d delta1;
real_point3d point;
real_vector3d top_edge;
real_vector3d left_edge;
real_point3d temp_point;
screen_x = screen_position->x * (1.0f / 640.0f);
screen_y = 1.0f - screen_position->y * (1.0f / 480.0f);
add_vectors3d(
(real_vector3d const *)&render.frustum.world_vertices[4],
screen_x = screen_position->x / 640.0f;
screen_y = 1.0f - screen_position->y / 480.0f;
point_from_line3d(
&render.frustum.world_vertices[4],
global_zero_vector3d,
(real_vector3d *)world_position);
delta0.i = render.frustum.world_vertices[1].n[0] - render.frustum.world_vertices[0].n[0];
delta0.j = render.frustum.world_vertices[1].n[1] - render.frustum.world_vertices[0].n[1];
delta0.k = render.frustum.world_vertices[1].n[2] - render.frustum.world_vertices[0].n[2];
delta1.i = render.frustum.world_vertices[2].n[0] - render.frustum.world_vertices[0].n[0];
delta1.j = render.frustum.world_vertices[2].n[1] - render.frustum.world_vertices[0].n[1];
delta1.k = render.frustum.world_vertices[2].n[2] - render.frustum.world_vertices[0].n[2];
point.x = delta0.i * screen_x + render.frustum.world_vertices[0].n[0];
point.y = delta0.j * screen_x + render.frustum.world_vertices[0].n[1];
point.z = delta0.k * screen_x + render.frustum.world_vertices[0].n[2];
point.x = delta1.i * screen_y + point.x;
point.y = delta1.j * screen_y + point.y;
point.z = delta1.k * screen_y + point.z;
world_vector->i = point.x - world_position->x;
world_vector->j = point.y - world_position->y;
world_vector->k = point.z - world_position->z;
1.0f,
world_position);
vector_from_points3d(
&render.frustum.world_vertices[0],
&render.frustum.world_vertices[1],
&top_edge);
vector_from_points3d(
&render.frustum.world_vertices[0],
&render.frustum.world_vertices[2],
&left_edge);
point_from_line3d(
&render.frustum.world_vertices[0],
&top_edge,
screen_x,
&temp_point);
point_from_line3d(
&temp_point,
&left_edge,
screen_y,
&temp_point);
vector_from_points3d(
world_position,
&temp_point,
world_vector);
return;
}
@@ -668,59 +673,55 @@ static void render_inverse_transform_screen_point(
void sound_cache_debug_render(
void)
{
byte page_usage[1024];
real_point3d world_positions[2];
real_point2d screen_positions[2];
real_argb_color const *colors[4];
real_vector3d world_vector;
long page_index;
long state_index;
if (debug_sound_cache)
{
short rows = 1024 / 640;
byte page_usage[1024];
long x;
real_argb_color const *colors[4];
colors[0] = global_real_argb_red;
colors[1] = global_real_argb_green;
colors[2] = global_real_argb_blue;
colors[3] = global_real_argb_yellow;
lruv_cache_get_page_usage(xbox_sound_cache_globals.cache, page_usage);
for (page_index = 0; page_index < 640; page_index++)
for (x = 0; x < 640; x++)
{
for (state_index = 0; state_index < 4; state_index++)
short page_index = rows * x;
long bit;
for (bit = 0; bit < 4; bit++)
{
if (page_usage[(short)page_index] & FLAG(state_index))
if (TEST_FLAG(page_usage[page_index], bit))
{
long row;
long point_index;
real distance;
real scale;
real_point3d extent[2];
real_point2d line_pt[2];
long i;
real_vector3d vec;
row = (state_index + (page_index / 640) * 4) * 10;
screen_positions[0].x =
screen_positions[1].x = (real)(page_index % 640);
screen_positions[0].y = (real)row;
screen_positions[1].y = (real)(row + 10);
distance = render.camera.z_near + 0.001f;
for (point_index = 0; point_index < 2; point_index++)
line_pt[0].x = (real)(x % 640);
line_pt[0].y = (real)((bit + (x / 640) * 4) * 10);
line_pt[1].x = (real)(x % 640);
line_pt[1].y = (real)((bit + (x / 640) * 4 + 1) * 10);
for (i = 0; i < 2; i++)
{
render_inverse_transform_screen_point(
&screen_positions[point_index],
&world_positions[point_index],
&world_vector);
scale = distance /
dot_product3d(&render.camera.forward, &world_vector);
world_positions[point_index].x += world_vector.i * scale;
world_positions[point_index].y += world_vector.j * scale;
world_positions[point_index].z += world_vector.k * scale;
&line_pt[i],
&extent[i],
&vec);
point_from_line3d(
&extent[i],
&vec,
(render.camera.z_near + 0.001f) / dot_product3d(&vec, &render.camera.forward),
&extent[i]);
}
render_debug_line(
TRUE,
&world_positions[0],
&world_positions[1],
colors[state_index]);
&extent[0],
&extent[1],
colors[bit]);
}
}
}
+7 -6
View File
@@ -224,6 +224,7 @@ static struct director_variable_definition variables[NUMBER_OF_DIRECTOR_VARIABLE
static struct director_globals director_globals = {0};
boolean director_camera_switch_fast = FALSE;
static boolean hyper_key_down = FALSE;
boolean *director_camera_scripted;
/* ---------- public code */
@@ -237,8 +238,8 @@ static struct director *director_get(
void director_initialize(
void)
{
director_camera_scripted = game_state_malloc("director scripting", NULL, sizeof(*director_camera_scripted));
director_camera_scripted->camera_scripted = FALSE;
director_camera_scripted = game_state_malloc("director scripting", NULL, 4);
*director_camera_scripted = FALSE;
return;
}
@@ -262,7 +263,7 @@ void director_dispose_from_old_map(
director->debug_controls = FALSE;
}
director_camera_scripted->camera_scripted = FALSE;
*director_camera_scripted = FALSE;
return;
}
@@ -653,7 +654,7 @@ void director_script_camera(
{
short local_player_index;
director_camera_scripted->camera_scripted = scripted;
*director_camera_scripted = scripted;
for (local_player_index = 0;
local_player_index < MAXIMUM_NUMBER_OF_LOCAL_PLAYERS;
local_player_index++)
@@ -701,7 +702,7 @@ static void director_choose_camera_game(
if (key)
director_rotate_cameras(local_player_index, director_game_camera_modes, 3);
if (!director_camera_scripted->camera_scripted)
if (!*director_camera_scripted)
{
director_choose_game_perspective(local_player_index, initialize);
if (use_dead_camera)
@@ -1039,7 +1040,7 @@ void director_initialize_for_saved_game(
void)
{
director_initialize_for_new_map();
director_script_camera(director_camera_scripted->camera_scripted);
director_script_camera(*director_camera_scripted);
return;
}
+1 -7
View File
@@ -66,12 +66,6 @@ typedef void (*director_camera_update_proc)(
void *command,
void *result);
struct director_scripting_globals
{
boolean camera_scripted;
byte pad[3];
};
struct director_variable_instance
{
real value;
@@ -165,7 +159,7 @@ void director_update(
/* ---------- globals */
extern struct director_scripting_globals *director_camera_scripted;
extern boolean *director_camera_scripted;
extern boolean director_camera_switch_fast;
/* ---------- public code */
+10 -10
View File
@@ -424,21 +424,21 @@ void cinematic_render(
}
{
real_argb_color color;
real_argb_color text_color;
long shadow_alpha;
pixel32_to_real_argb_color(
title->foreground_color,
&color);
color.alpha *= fade_amount;
&text_color);
text_color.alpha *= fade_amount;
if (fabs(color.red - 1.0f) < _real_epsilon &&
fabs(color.green - 1.0f) < _real_epsilon &&
fabs(color.blue - 1.0f) < _real_epsilon)
if (fabs(text_color.red - 1.0f) < _real_epsilon &&
fabs(text_color.green - 1.0f) < _real_epsilon &&
fabs(text_color.blue - 1.0f) < _real_epsilon)
{
color.red = MIN(color.red, 0.8f);
color.green = MIN(color.green, 0.8f);
color.blue = MIN(color.blue, 0.8f);
text_color.red = MIN(text_color.red, 0.8f);
text_color.green = MIN(text_color.green, 0.8f);
text_color.blue = MIN(text_color.blue, 0.8f);
}
draw_string_set_draw_mode(
@@ -446,7 +446,7 @@ void cinematic_render(
title->style - 1,
title->justification,
title->text_flags,
&color);
&text_color);
shadow_alpha = PIN(
fast_ftol(
+39 -38
View File
@@ -483,6 +483,7 @@ struct decal_wrap_parameters const decal_wrap_parameters[NUMBER_OF_DECAL_TYPES]
/* SECONDS_PER_TICK: name from the 2003 PC demo PDB and the HCEX PDB (decals file static const float) */
static real const SECONDS_PER_TICK = 1.0f / TICKS_PER_SECOND;
boolean debug_decals;
/* ---------- public code */
@@ -1836,13 +1837,13 @@ void decal_new_from_collision(
&collision_bsp->surfaces,
deviant_surface,
struct collision_surface);
real_plane3d surface_plane;
real_plane3d surface_plane1;
short next_deviant_surface_index;
bsp3d_get_plane_from_designator(
&collision_bsp->bsp3d,
surface->plane_designator,
&surface_plane);
&surface_plane1);
match_assert("c:\\halo\\SOURCE\\effects\\decals.c", 2399,
deviant_surface_bunch_size<MAXIMUM_DECAL_SURFACE_QUEUE_SIZE);
@@ -1861,15 +1862,15 @@ void decal_new_from_collision(
&collision_bsp->surfaces,
next_deviant_surface,
struct collision_surface);
real_plane3d next_surface_plane;
real_plane3d surface_plane2;
real angle;
bsp3d_get_plane_from_designator(
&collision_bsp->bsp3d,
next_surface->plane_designator,
&next_surface_plane);
&surface_plane2);
angle = angle_between_normals3d(&surface_plane.n, &next_surface_plane.n);
angle = angle_between_normals3d(&surface_plane1.n, &surface_plane2.n);
if (angle<=DEGREES_TO_RADIANS(decal_wrap_parameters[definition->type].minimum_wrap_angle))
{
match_assert("c:\\halo\\SOURCE\\effects\\decals.c", 2422,
@@ -1884,9 +1885,9 @@ void decal_new_from_collision(
long closest_surface_index = NONE;
real closest_minimum_distance;
real closest_maximum_distance;
real_plane3d closest_surface_plane;
real_point3d closest_edge_start;
real_point3d closest_edge_end;
real_plane3d closest_plane;
real_point3d closest_vertex1;
real_point3d closest_vertex2;
short bunch_index;
for (bunch_index = 0;
@@ -1933,11 +1934,11 @@ void decal_new_from_collision(
bsp3d_get_plane_from_designator(
&collision_bsp->bsp3d,
bunch_surface->plane_designator,
&closest_surface_plane);
&closest_plane);
closest_minimum_distance = minimum_distance;
closest_maximum_distance = maximum_distance;
closest_edge_start = edge_start->point;
closest_edge_end = edge_end->point;
closest_vertex1 = edge_start->point;
closest_vertex2 = edge_end->point;
closest_surface_index = bunch_surface_index;
}
@@ -1953,46 +1954,46 @@ void decal_new_from_collision(
struct decal_projection wrapped_projection;
real_vector3d edge_axis;
vector_from_points3d(&closest_edge_start, &closest_edge_end, &edge_axis);
vector_from_points3d(&closest_vertex1, &closest_vertex2, &edge_axis);
if (normalize3d(&edge_axis) > 0.0f)
{
real sign = triple_product3d(
&closest_surface_plane.n,
&closest_plane.n,
&projection.plane.n,
&edge_axis) < 0.0f ? 1.0f : -1.0f;
real angle;
real_matrix4x3 rotation;
real_matrix4x3 wrapped_basis;
real_matrix4x3 wrap_rotation;
real_matrix4x3 wrap_basis;
angle = angle_between_normals3d(
&closest_surface_plane.n,
&closest_plane.n,
&projection.plane.n) * sign;
matrix4x3_rotation_from_axis_and_angle(
&rotation,
&wrap_rotation,
&edge_axis,
(real)sin(angle),
(real)cos(angle));
wrapped_basis.position.x = basis.position.x - closest_edge_start.x;
wrapped_basis.position.y = basis.position.y - closest_edge_start.y;
wrapped_basis.position.z = basis.position.z - closest_edge_start.z;
matrix4x3_transform_point(&rotation, &wrapped_basis.position, &wrapped_basis.position);
matrix4x3_transform_normal(&rotation, &basis.forward, &wrapped_basis.forward);
matrix4x3_transform_normal(&rotation, &basis.left, &wrapped_basis.left);
matrix4x3_transform_normal(&rotation, &basis.up, &wrapped_basis.up);
wrapped_basis.scale = 1.0f;
wrapped_basis.position.x += closest_edge_start.x;
wrapped_basis.position.y += closest_edge_start.y;
wrapped_basis.position.z += closest_edge_start.z;
wrap_basis.position.x = basis.position.x - closest_vertex1.x;
wrap_basis.position.y = basis.position.y - closest_vertex1.y;
wrap_basis.position.z = basis.position.z - closest_vertex1.z;
matrix4x3_transform_point(&wrap_rotation, &wrap_basis.position, &wrap_basis.position);
matrix4x3_transform_normal(&wrap_rotation, &basis.forward, &wrap_basis.forward);
matrix4x3_transform_normal(&wrap_rotation, &basis.left, &wrap_basis.left);
matrix4x3_transform_normal(&wrap_rotation, &basis.up, &wrap_basis.up);
wrap_basis.scale = 1.0f;
wrap_basis.position.x += closest_vertex1.x;
wrap_basis.position.y += closest_vertex1.y;
wrap_basis.position.z += closest_vertex1.z;
decal_projection_create(&wrapped_basis, &extent, &wrapped_projection);
normal_bounds.x0 = MIN(wrapped_basis.up.i, normal_bounds.x0);
normal_bounds.x1 = MAX(wrapped_basis.up.i, normal_bounds.x1);
normal_bounds.y0 = MIN(wrapped_basis.up.j, normal_bounds.y0);
normal_bounds.y1 = MAX(wrapped_basis.up.j, normal_bounds.y1);
normal_bounds.z0 = MIN(wrapped_basis.up.k, normal_bounds.z0);
normal_bounds.z1 = MAX(wrapped_basis.up.k, normal_bounds.z1);
decal_projection_create(&wrap_basis, &extent, &wrapped_projection);
normal_bounds.x0 = MIN(wrap_basis.up.i, normal_bounds.x0);
normal_bounds.x1 = MAX(wrap_basis.up.i, normal_bounds.x1);
normal_bounds.y0 = MIN(wrap_basis.up.j, normal_bounds.y0);
normal_bounds.y1 = MAX(wrap_basis.up.j, normal_bounds.y1);
normal_bounds.z0 = MIN(wrap_basis.up.k, normal_bounds.z0);
normal_bounds.z1 = MAX(wrap_basis.up.k, normal_bounds.z1);
}
else
{
@@ -2124,16 +2125,16 @@ void decal_new_from_collision(
real intensity = real_local_random_range(
definition->intensity_lower_bound,
definition->intensity_upper_bound);
real_rgb_color color;
real_rgb_color decal_color;
real interpolation = real_local_random_range(0.0f, 1.0f);
rgb_colors_interpolate(
&color,
&decal_color,
(definition->flags >> _decal_definition_color_interpolate_in_hsv_bit) & 3,
&definition->color_lower_bound,
&definition->color_upper_bound,
interpolation);
decal->color = real_a_rgb_color_to_pixel32(intensity, &color);
decal->color = real_a_rgb_color_to_pixel32(intensity, &decal_color);
decal->intensity = 255;
}
+61 -61
View File
@@ -546,7 +546,7 @@ static void impulse_effect_initialize(
// effect_generate_part: the part definition and the location instance are passed in registers
static void effect_generate_part(
struct effect_datum const *effect,
struct effect_part_definition const *part,
struct effect_part_definition const *part_definition,
struct effect_location_datum const *instance,
real_point3d const *world_point,
real_vector3d const *world_forward,
@@ -651,7 +651,7 @@ static void effect_set_event(
/* ---------- globals */
extern struct data_array *effect_data;
extern struct data_array *effect_location_data;
struct data_array *effect_location_data;
boolean effects_corpse_nonviolent = TRUE;
@@ -1605,7 +1605,7 @@ static void impulse_effect_initialize(
static void effect_generate_part(
struct effect_datum const *effect,
struct effect_part_definition const *part,
struct effect_part_definition const *part_definition,
struct effect_location_datum const *instance,
real_point3d const *world_point,
real_vector3d const *world_forward,
@@ -1615,14 +1615,14 @@ static void effect_generate_part(
real_vector3d direction;
real_vector3d velocity;
switch (part->runtime_base_class_tag)
switch (part_definition->runtime_base_class_tag)
{
case PARTICLE_SYSTEM_DEFINITION_TAG:
{
real_argb_color color;
real_argb_color tint;
color.alpha = 1.0f;
color.rgb = effect->color;
tint.alpha = 1.0f;
tint.rgb = effect->color;
effect_random_translational_velocity(
get_global_local_random_seed_address(),
@@ -1630,21 +1630,21 @@ static void effect_generate_part(
world_forward,
&direction,
&velocity,
part->velocity_lower_bound,
part->velocity_upper_bound,
part->velocity_cone_angle,
part->scale_a_flags,
part->scale_b_flags);
part_definition->velocity_lower_bound,
part_definition->velocity_upper_bound,
part_definition->velocity_cone_angle,
part_definition->scale_a_flags,
part_definition->scale_b_flags);
velocity.i += effect->velocity.i;
velocity.j += effect->velocity.j;
velocity.k += effect->velocity.k;
particle_system_new_unattached(
part->reference.index,
part_definition->reference.index,
world_point,
&velocity,
&color,
&tint,
scale);
break;
}
@@ -1659,7 +1659,7 @@ static void effect_generate_part(
object_impulse_sound_new(
effect->object_index,
part->reference.index,
part_definition->reference.index,
node_index,
&instance->matrix.position,
&instance->matrix.forward,
@@ -1675,7 +1675,7 @@ static void effect_generate_part(
location.game_location = effect->location;
unattached_impulse_sound_new(
part->reference.index,
part_definition->reference.index,
&location,
scale);
}
@@ -1683,45 +1683,45 @@ static void effect_generate_part(
case OBJECT_DEFINITION_TAG:
{
struct object_placement_data placement;
struct object_placement_data data;
unsigned long *seed;
object_placement_data_new(
&placement,
part->reference.index,
&data,
part_definition->reference.index,
effect->owner_object_index);
placement.position = *world_point;
placement.forward = *world_forward;
placement.up = *world_up;
data.position = *world_point;
data.forward = *world_forward;
data.up = *world_up;
effect_random_translational_velocity(
get_global_random_seed_address(),
effect,
world_forward,
&direction,
&placement.translational_velocity,
part->velocity_lower_bound,
part->velocity_upper_bound,
part->velocity_cone_angle,
part->scale_a_flags,
part->scale_b_flags);
&data.translational_velocity,
part_definition->velocity_lower_bound,
part_definition->velocity_upper_bound,
part_definition->velocity_cone_angle,
part_definition->scale_a_flags,
part_definition->scale_b_flags);
placement.translational_velocity.i += effect->velocity.i;
placement.translational_velocity.j += effect->velocity.j;
placement.translational_velocity.k += effect->velocity.k;
data.translational_velocity.i += effect->velocity.i;
data.translational_velocity.j += effect->velocity.j;
data.translational_velocity.k += effect->velocity.k;
seed = get_global_random_seed_address();
effect_random_angular_velocity(
seed,
effect,
&placement.angular_velocity,
part->angular_velocity_lower_bound,
part->angular_velocity_upper_bound,
part->scale_a_flags,
part->scale_b_flags);
&data.angular_velocity,
part_definition->angular_velocity_lower_bound,
part_definition->angular_velocity_upper_bound,
part_definition->scale_a_flags,
part_definition->scale_b_flags);
object_new(&placement);
object_new(&data);
break;
}
@@ -1735,19 +1735,19 @@ static void effect_generate_part(
world_forward,
&direction,
&velocity,
part->velocity_lower_bound,
part->velocity_upper_bound,
part->velocity_cone_angle,
part->scale_a_flags,
part->scale_b_flags);
part_definition->velocity_lower_bound,
part_definition->velocity_upper_bound,
part_definition->velocity_cone_angle,
part_definition->scale_a_flags,
part_definition->scale_b_flags);
radius_modifier = real_seed_random_range(
get_global_local_random_seed_address(),
part->radius_modifier_lower_bound,
part->radius_modifier_upper_bound);
part_definition->radius_modifier_lower_bound,
part_definition->radius_modifier_upper_bound);
decal_new(
part->reference.index,
part_definition->reference.index,
world_point,
&velocity,
radius_modifier,
@@ -1763,7 +1763,7 @@ static void effect_generate_part(
struct object_datum *owner =
object_try_and_get(effect->owner_object_index);
damage_data_new(&damage, part->reference.index);
damage_data_new(&damage, part_definition->reference.index);
if (owner)
{
@@ -1790,7 +1790,7 @@ static void effect_generate_part(
node_index &= (short)(FLAG(_effect_location_first_person_bit) - 1);
light_new_unattached(
part->reference.index,
part_definition->reference.index,
effect->object_index,
node_index,
&instance->matrix.position,
@@ -1808,7 +1808,7 @@ static void effect_generate_part(
temporary,
"effect %s has a bad part %s",
tag_get_name(effect->definition_index),
part->reference.name));
part_definition->reference.name));
break;
}
@@ -1995,9 +1995,9 @@ static void effect_generate_particles(
instance_particle_index++)
{
struct new_particle_data data;
real_vector3d random_direction;
real_vector3d emission_offset;
real_point3d world_position;
real_vector3d random_offset;
real_vector3d relative_offset;
real_point3d world_point;
real_vector3d world_direction;
real_vector3d world_velocity;
real emission_radius = effect_real_random_range(
@@ -2009,18 +2009,18 @@ static void effect_generate_particles(
particles->scale_b_flags,
_effect_particle_distribution_radius_bit);
local_random_direction3d(&random_direction);
local_random_direction3d(&random_offset);
matrix4x3_transform_vector(
&instance->matrix,
&particles->offset,
&emission_offset);
&relative_offset);
data.position.x = instance->matrix.position.x +
random_direction.i * emission_radius + emission_offset.i;
random_offset.i * emission_radius + relative_offset.i;
data.position.y = instance->matrix.position.y +
random_direction.j * emission_radius + emission_offset.j;
random_offset.j * emission_radius + relative_offset.j;
data.position.z = instance->matrix.position.z +
random_direction.k * emission_radius + emission_offset.k;
random_offset.k * emission_radius + relative_offset.k;
effect_random_translational_velocity(
get_global_local_random_seed_address(),
@@ -2052,7 +2052,7 @@ static void effect_generate_particles(
matrix4x3_transform_point(
node_matrix,
&data.position,
&world_position);
&world_point);
matrix4x3_transform_normal(
node_matrix,
&data.direction,
@@ -2064,7 +2064,7 @@ static void effect_generate_particles(
}
else
{
world_position = data.position;
world_point = data.position;
world_direction = data.direction;
world_velocity = data.velocity;
}
@@ -2072,7 +2072,7 @@ static void effect_generate_particles(
if (effect_allowed_by_environment(
particles->environment,
&effect->location,
&world_position))
&world_point))
{
data.definition_index = particles->particle.index;
@@ -2093,7 +2093,7 @@ static void effect_generate_particles(
{
effect->impulse_field.translational_function(
&data.initial_impulse,
&world_position,
&world_point,
effect->impulse_field.user_data);
}
else
@@ -2102,7 +2102,7 @@ static void effect_generate_particles(
}
data.object_index = NONE;
data.position = world_position;
data.position = world_point;
data.direction = world_direction;
data.velocity.i = world_velocity.i + effect->velocity.i * 30.0f;
data.velocity.j = world_velocity.j + effect->velocity.j * 30.0f;
+2
View File
@@ -194,6 +194,8 @@ static particle_system_particle_update_proc const particle_update_functions[] =
real const ground_error = 0.05f;
static real const seconds_per_tick = 1.0f/TICKS_PER_SECOND;
struct data_array *particle_systems;
struct data_array *system_particles;
/* ---------- public code */
+2 -2
View File
@@ -356,11 +356,11 @@ void player_effect_dispose_from_old_map(
void player_effect_add_continuous_effect(
short local_player_index,
long definition_index,
long effect_index,
real distance)
{
struct continuous_damage_effect_definition *definition =
continuous_damage_effect_definition_get(definition_index);
continuous_damage_effect_definition_get(effect_index);
if (distance < definition->cutoff_radius)
{
+1 -1
View File
@@ -39,7 +39,7 @@ void player_effect_dispose_from_old_map(
void);
void player_effect_add_continuous_effect(
short local_player_index,
long definition_index,
long effect_index,
real distance);
void player_effect_update(
void);
+14 -13
View File
@@ -311,6 +311,7 @@ real const one_over_char_max = 1.f/255.f;
boolean weather = TRUE;
static struct weather_particle_system_globals weather_particle_system_globals = { 0 };
struct data_array *weather_particle_data;
/* ---------- public code */
@@ -547,7 +548,7 @@ static void weather_particle_system_render(
{
struct weather_particle_system *system = weather_particle_system_get(local_player_index);
struct weather_particle_system_definition *definition = weather_particle_system_definition_get(system->definition_index);
struct structure_bsp *structure_bsp = global_structure_bsp_get();
struct structure_bsp *structure = global_structure_bsp_get();
short type_index;
weather_particle_system_update(local_player_index);
@@ -562,11 +563,11 @@ static void weather_particle_system_render(
if (type->particle_count)
{
real_plane3d clipping_planes[NUMBER_OF_WEATHER_PARTICLE_CLIPPING_PLANES];
real_plane3d clip_planes[NUMBER_OF_WEATHER_PARTICLE_CLIPPING_PLANES];
real_point3d box_positions[MAXIMUM_NUMBER_OF_VISIBLE_WEATHER_PARTICLE_BOXES];
real box_plane_distances[MAXIMUM_NUMBER_OF_VISIBLE_WEATHER_PARTICLE_BOXES][NUMBER_OF_WEATHER_PARTICLE_CLIPPING_PLANES];
short visible_polyhedron_indices[MAXIMUM_NUMBER_OF_VISIBLE_WEATHER_POLYHEDRA];
short visible_polyhedron_count = weather_polyhedra_find(visible_polyhedron_indices, type->box_width);
real clip_plane_d_transforms[MAXIMUM_NUMBER_OF_VISIBLE_WEATHER_PARTICLE_BOXES][NUMBER_OF_WEATHER_PARTICLE_CLIPPING_PLANES];
short weather_polyhedra_indices[MAXIMUM_NUMBER_OF_VISIBLE_WEATHER_POLYHEDRA];
short visible_polyhedron_count = weather_polyhedra_find(weather_polyhedra_indices, type->box_width);
struct build_sprite_data sprite_data;
struct weather_particle *particle;
real box_offsets[3];
@@ -575,9 +576,9 @@ static void weather_particle_system_render(
short i, j, k;
long particle_index;
weather_particle_system_build_clipping_planes(clipping_planes, type->box_width);
weather_particle_system_build_clipping_planes(clip_planes, type->box_width);
weather_particle_system_box_offset_from_point3d(type->box_width, &render.camera.position, &box_positions[0]);
weather_particle_system_transform_clip_planes_to_box(box_plane_distances[0], clipping_planes, &box_positions[0]);
weather_particle_system_transform_clip_planes_to_box(clip_plane_d_transforms[0], clip_planes, &box_positions[0]);
bounds.x0 = box_positions[0].x;
bounds.x1 = box_positions[0].x + type->box_width;
@@ -614,7 +615,7 @@ static void weather_particle_system_render(
box_positions[box_count].x = box_bounds.x0;
box_positions[box_count].y = box_bounds.y0;
box_positions[box_count].z = box_bounds.z0;
weather_particle_system_transform_clip_planes_to_box(box_plane_distances[box_count], clipping_planes, &box_positions[box_count]);
weather_particle_system_transform_clip_planes_to_box(clip_plane_d_transforms[box_count], clip_planes, &box_positions[box_count]);
box_count++;
}
}
@@ -626,7 +627,7 @@ static void weather_particle_system_render(
for (particle_index = type->first_particle_index; particle_index!=NONE; particle_index = particle->next_particle_index)
{
real particle_plane_distances[NUMBER_OF_WEATHER_PARTICLE_CLIPPING_PLANES];
real plane_evaluations[NUMBER_OF_WEATHER_PARTICLE_CLIPPING_PLANES];
short plane_index;
short box_index;
@@ -634,7 +635,7 @@ static void weather_particle_system_render(
for (plane_index = 0; plane_index<NUMBER_OF_WEATHER_PARTICLE_CLIPPING_PLANES; plane_index++)
{
particle_plane_distances[plane_index] = plane3d_distance_to_point(&clipping_planes[plane_index], &particle->position);
plane_evaluations[plane_index] = plane3d_distance_to_point(&clip_planes[plane_index], &particle->position);
}
for (box_index = 0; box_index<box_count; box_index++)
@@ -643,7 +644,7 @@ static void weather_particle_system_render(
for (plane_index = 0; plane_index<NUMBER_OF_WEATHER_PARTICLE_CLIPPING_PLANES && visible; plane_index++)
{
visible = box_plane_distances[box_index][plane_index] + particle_plane_distances[plane_index]<0.f;
visible = clip_plane_d_transforms[box_index][plane_index] + plane_evaluations[plane_index]<0.f;
}
if (visible)
@@ -677,8 +678,8 @@ static void weather_particle_system_render(
for (polyhedron_index = 0; polyhedron_index<visible_polyhedron_count; polyhedron_index++)
{
struct structure_weather_polyhedron *polyhedron = TAG_BLOCK_GET_ELEMENT(
&structure_bsp->weather_polyhedra,
visible_polyhedron_indices[polyhedron_index],
&structure->weather_polyhedra,
weather_polyhedra_indices[polyhedron_index],
struct structure_weather_polyhedron);
short polyhedron_plane_index;
+1 -14
View File
@@ -119,9 +119,7 @@ struct game_options;
/* ---------- headers */
#include "cseries/cseries.h"
#define set_random_seed set_random_seed_inline
#include "game/game.h"
#undef set_random_seed
#include "ai/ai.h"
#include "bink/bink_playback.h"
#include "bungie_net/network/transport.h"
@@ -525,14 +523,6 @@ boolean game_is_cooperative(
return player_spawn_count > 1;
}
void set_random_seed(
unsigned long seed)
{
*get_global_random_seed_address() = seed;
return;
}
boolean game_load(
struct game_options *options)
{
@@ -562,8 +552,6 @@ boolean game_load(
void game_initialize_for_new_map(
void)
{
unsigned long random_seed;
match_assert(
"c:\\halo\\SOURCE\\game\\game.c",
0x1D1,
@@ -573,8 +561,7 @@ void game_initialize_for_new_map(
0x1D2,
!game_globals->active);
random_seed = game_globals->options.random_seed;
*get_global_random_seed_address() = random_seed;
set_random_seed(game_globals->options.random_seed);
game_engine_dispose();
game_engine_initialize(&game_variant_global);
real_math_reset_precision();
+3 -47
View File
@@ -90,6 +90,7 @@ symbols in this file:
#include "math/geometry.h"
#include "rasterizer/rasterizer.h"
#include "rasterizer/rasterizer_geometry.h"
#include "rasterizer/rasterizer_model_types.h"
#include "rasterizer/rasterizer_models.h"
#include "render/render.h"
#include "scenario/scenario.h"
@@ -145,56 +146,11 @@ enum
/* ---------- structures */
/* Target-proven vertex layouts used by this translation unit's quad helper. */
struct model_vertex_uncompressed
{
real_point3d position;
real_vector3d normal;
real_vector3d binormal;
real_vector3d tangent;
real_point2d texcoord;
short nodes[2];
real node_weights[2];
};
struct model_vertex_compressed
{
real_point3d position;
unsigned long normal;
unsigned long binormal;
unsigned long tangent;
point2d texcoord;
byte nodes[2];
short node_weight;
};
typedef char verify_model_vertex_uncompressed_size[
sizeof(struct model_vertex_uncompressed) == 0x44 ? 1 : -1];
typedef char verify_model_vertex_compressed_size[
sizeof(struct model_vertex_compressed) == 0x20 ? 1 : -1];
/* January-local render packet layouts used by render_dynamic_quad. */
struct render_model_effect
{
short type;
word pad;
real intensity;
byte reserved[0x20];
};
struct rasterizer_model_begin_parameters
{
unsigned long geometry_flags;
long unique_identifier;
struct render_skinning skinning;
struct render_lighting lighting;
struct render_animation animation;
struct render_model_effect effect;
real_point3d centroid;
real radius;
real_vector2d base_map_scale;
};
typedef char verify_rasterizer_model_begin_parameters_size[
sizeof(struct rasterizer_model_begin_parameters) == 0xCC ? 1 : -1];
@@ -222,8 +178,8 @@ static void king_calculate_hill_state(
/* ---------- globals */
/* Shared rasterizer defaults, named by the January image. */
extern real_rgb_color global_default_animation_colors[4];
extern real global_default_animation_values[4];
real_rgb_color global_default_animation_colors[4];
real global_default_animation_values[4];
static struct king_globals king_globals = { 0 };
/* king_engine_num_hills: name from the 2003 PC demo PDB (file static short at king_globals+0x1AC),
+4 -13
View File
@@ -309,15 +309,6 @@ struct scenario_bsp_switch_trigger_volume
short cutscene_flag_index;
};
struct scenario_cutscene_flag
{
long runtime_unused;
char name[TAG_STRING_LENGTH];
real_point3d position;
real_euler_angles2d facing;
byte unused[0x24];
};
struct unit_control_data
{
char animation_state;
@@ -2981,18 +2972,18 @@ static void player_examine_nearby_device(
struct player_datum *player;
struct unit_datum *unit;
struct device_datum *device;
real_point3d camera_position;
real_point3d camera;
player = player_get(player_index);
unit = unit_get(player->unit_index);
device = device_get(device_index);
unit_get_camera_position(player->unit_index, &camera_position);
unit_get_camera_position(player->unit_index, &camera);
if (fast_vector_intersects_sphere(
&camera_position,
&camera,
&unit->unit.aiming_vector,
&device->object.bounding_sphere_center,
device->object.bounding_sphere_radius) &&
device_frontfacing(device_index, &camera_position, &unit->unit.aiming_vector) &&
device_frontfacing(device_index, &camera, &unit->unit.aiming_vector) &&
device_can_change_position(device_index))
{
player_set_action_result(
+6 -6
View File
@@ -2424,8 +2424,8 @@ static boolean hs_parse_nonprimitive(
}
boolean hs_compile_postprocess(
char const **error_message,
char const **error_source)
char const **error_message_pointer,
char const **error_source_pointer)
{
boolean success = TRUE;
long expression_index;
@@ -2437,8 +2437,8 @@ boolean hs_compile_postprocess(
global_scenario_get()->hs_string_constants.size - HS_MAXIMUM_DYNAMIC_SOURCE_DATA_BYTES;
hs_compile_globals.error = NULL;
hs_compile_globals.variables_predetermined = TRUE;
*error_message = NULL;
*error_source = NULL;
*error_message_pointer = NULL;
*error_source_pointer = NULL;
for (expression_index = data_next_index(hs_syntax_data, NONE);
success && expression_index != NONE;
@@ -2537,9 +2537,9 @@ boolean hs_compile_postprocess(
if (!success)
{
*error_message = hs_compile_globals.error;
*error_message_pointer = hs_compile_globals.error;
if (hs_compile_globals.error_offset != NONE)
*error_source = hs_compile_globals.compiled_source + hs_compile_globals.error_offset;
*error_source_pointer = hs_compile_globals.compiled_source + hs_compile_globals.error_offset;
}
hs_compile_globals.compiled_source = NULL;
-9
View File
@@ -118,15 +118,6 @@ symbols in this file:
/* ---------- structures */
struct scenario_cutscene_flag
{
long runtime_unused;
char name[TAG_STRING_LENGTH];
real_point3d position;
real_euler_angles2d facing;
byte unused[0x24];
};
struct hs_sound_definition
{
byte unused00[0x28];
+6 -4
View File
@@ -527,13 +527,14 @@ static void hs_global_reconcile_write(
/* ---------- globals */
extern struct data_array *hs_global_data;
extern struct data_array *hs_thread_data;
struct data_array *hs_global_data;
struct data_array *hs_thread_data;
extern struct data_array *hs_syntax_data;
extern short const hs_external_global_count;
extern short const hs_type_sizes[NUMBER_OF_HS_TYPES];
extern boolean debug_scripting;
extern unsigned long hs_debug_data[];
boolean debug_scripting;
unsigned long hs_debug_data[BIT_VECTOR_SIZE_IN_LONGS(MAXIMUM_TRIGGER_VOLUMES_PER_SCENARIO)];
typedef char verify_hs_debug_data_size[sizeof(hs_debug_data) == 0x20 ? 1 : -1];
static hs_inspection_procedure hs_type_inspectors[NUMBER_OF_HS_TYPES] =
{
NULL,
@@ -715,6 +716,7 @@ extern long const _hs_type_weapon_default;
extern long const _hs_type_device_default;
extern long const _hs_type_scenery_default;
extern short const _hs_type_object_name_default;
boolean debug_trigger_volumes;
/* ---------- public code */
+1 -13
View File
@@ -117,6 +117,7 @@ symbols in this file:
#include "models/models.h"
#include "networking/network_connection.h"
#include "objects/objects.h"
#include "rasterizer/rasterizer_model_types.h"
#include "render/render.h"
#include "saved games/game_state.h"
#include "scenario/scenario.h"
@@ -229,19 +230,6 @@ struct animation_graph_node
typedef char verify_animation_graph_node_size[
sizeof(struct animation_graph_node) == 0x40 ? 1 : -1];
/* TU-private rendering packet layout, also recovered independently by the rendering owners. */
struct render_model_effect
{
short type;
word pad;
real intensity;
real parameter;
long source_object_index;
real_point3d source_object_centroid;
struct shader const *modifier_shader;
byte reserved0020[8]; /* render_animation modifier_animation */
};
typedef char verify_render_model_effect_size[
sizeof(struct render_model_effect) == 0x28 ? 1 : -1];
+1 -1
View File
@@ -203,7 +203,7 @@ static void temporary_hud_draw(
struct hud_globals_definition *hud_globals = NULL;
struct hud_scripted_globals_definition *hud_scripted_globals = NULL;
extern boolean temporary_hud;
boolean temporary_hud;
static wchar_t const *default_string = L"";
+1 -1
View File
@@ -473,7 +473,7 @@ static void render_state_bitmap(
/* ---------- globals */
static struct hud_messaging_globals_definition *hud_messaging_globals;
extern struct hud_messaging_parameters_definition *hud_msg_def;
struct hud_messaging_parameters_definition *hud_msg_def;
static char button_mappings[_icon_custom_1 - _icon_action] =
{
2,
+28 -37
View File
@@ -201,15 +201,6 @@ struct hud_nav_point_player_datum
struct hud_nav_point_datum nav_points[MAXIMUM_NUMBER_OF_NAV_POINTS];
};
struct scenario_cutscene_flag
{
long runtime_unused;
char name[TAG_STRING_LENGTH];
real_point3d position;
real_euler_angles2d facing;
byte unused[0x24];
};
struct hud_nav_object_datum
{
byte unused[0xB6];
@@ -687,7 +678,7 @@ void custom_render_nav_point(
real_point3d view_point;
real distance;
real arrow_scale;
real_point2d screen_point;
real_point2d screen_position;
real horizontal_radius;
real vertical_radius;
real vertical_component;
@@ -707,16 +698,16 @@ void custom_render_nav_point(
long unit_index = local_player_get_player_index(local_player_index)==NONE ?
NONE :
player_get(local_player_get_player_index(local_player_index))->unit_index;
real_point3d camera_position;
real_point3d cam_pos;
real delta_x;
real delta_y;
real delta_z;
unit_get_camera_position(unit_index, &camera_position);
unit_get_camera_position(unit_index, &cam_pos);
delta_x = position->x-camera_position.x;
delta_y = position->y-camera_position.y;
delta_z = position->z-camera_position.z;
delta_x = position->x-cam_pos.x;
delta_y = position->y-cam_pos.y;
delta_z = position->z-cam_pos.z;
distance = square_root(
delta_x*delta_x + (delta_y*delta_y + delta_z*delta_z));
}
@@ -742,18 +733,18 @@ void custom_render_nav_point(
&render.camera,
&render.frustum,
&view_point,
&screen_point))
&screen_position))
{
screen_point.x = view_point.x;
screen_point.y = -view_point.y;
screen_position.x = view_point.x;
screen_position.y = -view_point.y;
waypoint_type = _waypoint_off_screen;
}
else
{
screen_point.x -= (real)(
screen_position.x -= (real)(
((render.camera.viewport_bounds.x1-render.camera.viewport_bounds.x0)/2) +
render.camera.viewport_bounds.x0);
screen_point.y -= (real)(
screen_position.y -= (real)(
((render.camera.viewport_bounds.y1-render.camera.viewport_bounds.y0)/2) +
render.camera.viewport_bounds.y0);
}
@@ -765,8 +756,8 @@ void custom_render_nav_point(
((real)(render.camera.window_bounds.y1-render.camera.window_bounds.y0) -
(hud_globals->waypoint.bottom_offset+hud_globals->waypoint.top_offset))*0.5f;
radius_product = vertical_radius*horizontal_radius;
vertical_component = vertical_radius*screen_point.x;
horizontal_component = horizontal_radius*screen_point.y;
vertical_component = vertical_radius*screen_position.x;
horizontal_component = horizontal_radius*screen_position.y;
theta = 0.0f;
if (waypoint_type==_waypoint_off_screen ||
@@ -778,18 +769,18 @@ void custom_render_nav_point(
(vertical_component*vertical_component + horizontal_component*horizontal_component));
waypoint_type = _waypoint_off_screen;
screen_point.x *= scale;
screen_point.y *= scale;
screen_position.x *= scale;
screen_position.y *= scale;
if (!TEST_FLAG(arrow->flags, _hud_waypoint_dont_rotate_offscreen_bit))
{
theta = -arctangent(screen_point.x, screen_point.y);
theta = -arctangent(screen_position.x, screen_position.y);
}
}
screen_point.x += (real)(
screen_position.x += (real)(
(render.camera.viewport_bounds.x1-render.camera.viewport_bounds.x0)/2);
screen_point.y += (real)(
screen_position.y += (real)(
(render.camera.viewport_bounds.y1-render.camera.viewport_bounds.y0)/2);
match_assert(
@@ -813,18 +804,18 @@ void custom_render_nav_point(
(struct bitmap_data *)bitmap, FALSE, TRUE))
{
point2d point;
real_rgb_color color;
real_rgb_color rgb_temp;
byte alpha;
real fade;
point.x = (short)(long)screen_point.x;
point.y = (short)(long)screen_point.y;
point.x = (short)(long)screen_position.x;
point.y = (short)(long)screen_position.y;
alpha = (byte)PIN(fast_ftol_C(arrow->opacity)*255, 0, 255);
pixel32_to_real_rgb_color(arrow->color, &color);
pixel32_to_real_rgb_color(arrow->color, &rgb_temp);
fade = 1.0f-arrow->fade;
color.red *= PIN(fade, 0.0f, 1.0f);
color.green *= PIN(fade, 0.0f, 1.0f);
color.blue *= PIN(fade, 0.0f, 1.0f);
rgb_temp.red *= PIN(fade, 0.0f, 1.0f);
rgb_temp.green *= PIN(fade, 0.0f, 1.0f);
rgb_temp.blue *= PIN(fade, 0.0f, 1.0f);
hud_draw_bitmap_direct(
bitmap,
@@ -833,7 +824,7 @@ void custom_render_nav_point(
clip,
arrow_scale,
theta,
((pixel32)alpha<<24) | real_rgb_color_to_pixel32(&color),
((pixel32)alpha<<24) | real_rgb_color_to_pixel32(&rgb_temp),
FALSE);
if (waypoint_type!=_waypoint_off_screen)
@@ -849,9 +840,9 @@ void custom_render_nav_point(
placement.corner = _hud_anchor_top_left;
numbers.colors.color =
((pixel32)alpha<<24) | real_rgb_color_to_pixel32(&color);
((pixel32)alpha<<24) | real_rgb_color_to_pixel32(&rgb_temp);
numbers.colors.flash_color =
((pixel32)alpha<<24) | real_rgb_color_to_pixel32(&color);
((pixel32)alpha<<24) | real_rgb_color_to_pixel32(&rgb_temp);
numbers.digits = 3;
numbers.fractional_digits = 1;
numbers.number_flags =
+21 -21
View File
@@ -692,7 +692,7 @@ static void hud_update_weapon_local_player(
{ root_definition };
long weapon_hud_indices[MAXIMUM_WEAPON_HUD_DEFINITION_DEPTH] = { hud_index };
unsigned long valid_crosshair_types = weapon_hud_hierarchy[0]->valid_crosshair_types_flags;
unsigned long render_flags = 0;
long render_flags = 0;
short definition_count = 1;
short crosshair_index;
@@ -954,18 +954,18 @@ static void crosshairs_draw(
struct weapon_definition *weapon_definition = weapon_index == NONE ?
NULL :
weapon_definition_get(weapon_get(weapon_index)->definition_index);
struct weapon_hud_interface_definition *definitions[MAXIMUM_WEAPON_HUD_DEFINITION_DEPTH] = { root_definition };
struct weapon_hud_interface_definition *weapon_hud_hierarchy[MAXIMUM_WEAPON_HUD_DEFINITION_DEPTH] = { root_definition };
long definition_indices[MAXIMUM_WEAPON_HUD_DEFINITION_DEPTH] = { hud_index };
unsigned long render_flags = crosshair->render_flags;
long render_flags = crosshair->render_flags;
short definition_count = 1;
short definition_index;
do
{
if (definitions[definition_count - 1]->parent_hud.index == NONE)
if (weapon_hud_hierarchy[definition_count - 1]->parent_hud.index == NONE)
break;
definition_indices[definition_count] = definitions[definition_count - 1]->parent_hud.index;
definitions[definition_count] = weapon_hud_interface_definition_get(definition_indices[definition_count]);
definition_indices[definition_count] = weapon_hud_hierarchy[definition_count - 1]->parent_hud.index;
weapon_hud_hierarchy[definition_count] = weapon_hud_interface_definition_get(definition_indices[definition_count]);
definition_count++;
}
while (definition_count < MAXIMUM_WEAPON_HUD_DEFINITION_DEPTH);
@@ -981,7 +981,7 @@ static void crosshairs_draw(
definition_index < definition_count;
definition_index++)
{
struct weapon_hud_interface_definition *definition = definitions[definition_index];
struct weapon_hud_interface_definition *definition = weapon_hud_hierarchy[definition_index];
struct hud_absolute_placement_definition absolute_placement = { _hud_anchor_center };
boolean in_multiplayer = local_player_count() > 1;
short crosshair_index;
@@ -1259,7 +1259,7 @@ static void render_weapon_hud(
short state_flags[NUMBER_OF_WEAPON_HUD_FLASH_REFERENCES] = { 0 };
short overlay_flags[NUMBER_OF_WEAPON_HUD_FLASH_REFERENCES] = { 0 };
short number_values[NUMBER_OF_WEAPON_HUD_FLASH_REFERENCES] = { 0 };
real number_fractions[NUMBER_OF_WEAPON_HUD_FLASH_REFERENCES] = { 0.0f };
real numbers_real[NUMBER_OF_WEAPON_HUD_FLASH_REFERENCES] = { 0.0f };
short state_index;
short map_type_flags;
short element_index;
@@ -1549,23 +1549,23 @@ static void render_weapon_hud(
long unit_index = player_index == NONE ?
NONE :
player_get(local_player_get_player_index(local_player_index))->unit_index;
real_point3d camera_position;
real_point3d position;
real_point3d target_position;
real delta_x;
real delta_y;
real delta_z;
unit_get_camera_position(unit_index, &camera_position);
unit_get_camera_position(unit_index, &position);
object_get_origin(target_object_index, &target_position);
delta_x = camera_position.x - target_position.x;
delta_y = camera_position.y - target_position.y;
delta_z = camera_position.z - target_position.z;
number_fractions[6] = square_root(
delta_x = position.x - target_position.x;
delta_y = position.y - target_position.y;
delta_z = position.z - target_position.z;
numbers_real[6] = square_root(
delta_x * delta_x +
delta_y * delta_y +
delta_z * delta_z) * 3.0480001f;
number_fractions[7] =
(target_position.z - camera_position.z) * 3.0480001f;
numbers_real[7] =
(target_position.z - position.z) * 3.0480001f;
}
else
{
@@ -1576,8 +1576,8 @@ static void render_weapon_hud(
} no_target_value;
no_target_value.bits = 0xFFC00000;
number_fractions[6] = no_target_value.value;
number_fractions[7] = no_target_value.value;
numbers_real[6] = no_target_value.value;
numbers_real[7] = no_target_value.value;
}
}
}
@@ -1687,15 +1687,15 @@ static void render_weapon_hud(
} fraction;
real scale;
fraction.value = number_fractions[state_index];
fraction.value = numbers_real[state_index];
if (fraction.bits == 0xFFC00000)
continue;
scale = power(10.0f, 4.0f);
decimal_value = (short)fmod(
fabs(number_fractions[state_index] * scale),
fabs(numbers_real[state_index] * scale),
scale);
value = (short)fast_ftol_C(
number_fractions[state_index] / magazine_size);
numbers_real[state_index] / magazine_size);
}
else
{
+25 -25
View File
@@ -265,8 +265,8 @@ static struct motion_sensor_globals_definition *motion_sensor_globals = NULL;
static real sweep_theta = 0.f;
boolean debug_motion_sensor_draw_all_units= {0};
extern short blip_player_index;
extern real_point2d center_point;
short blip_player_index;
real_point2d center_point;
/* ---------- private code */
@@ -332,7 +332,7 @@ static void motion_sensor_update(
short local_player_slots[4] = { 0 };
short player_count = local_player_count();
short local_player_index = local_player_get_next(NONE);
struct object_iterator iterator;
struct object_iterator iter;
real_point3d camera_positions[2];
boolean done = FALSE;
short player_scan_index;
@@ -374,19 +374,19 @@ static void motion_sensor_update(
local_player_index = local_player_get_next(local_player_index);
}
object_iterator_new(&iterator, _object_mask_unit, TRUE);
while (object_iterator_next(&iterator) && !done)
object_iterator_new(&iter, _object_mask_unit, TRUE);
while (object_iterator_next(&iter) && !done)
{
if (should_track_object(iterator.index) &&
should_draw_object(iterator.index))
if (should_track_object(iter.index) &&
should_draw_object(iter.index))
{
real_point3d object_position;
real_point3d center;
real object_radius;
short players_full = 0;
object_get_bounding_sphere(
iterator.index,
&object_position,
iter.index,
&center,
&object_radius);
for (player_scan_index = 0;
@@ -414,13 +414,13 @@ static void motion_sensor_update(
real_vector3d displacement;
displacement.i =
object_position.x -
center.x -
camera_positions[scan_player_index].x;
displacement.j =
object_position.y -
center.y -
camera_positions[scan_player_index].y;
displacement.k =
object_position.z -
center.z -
camera_positions[scan_player_index].z;
if (game_engine_running() ||
@@ -437,10 +437,10 @@ static void motion_sensor_update(
motion_sensor_blip_set_type_and_size(
blip,
iterator.index,
iter.index,
scan_player_index);
player->unit_indices[blip_index] = iterator.index;
player->unit_indices[blip_index] = iter.index;
sensor->blip_count++;
local_player_slots[scan_player_index] =
(short)(blip_index + 1);
@@ -625,7 +625,7 @@ static void render_motion_sensor(
director_perspective perspective;
struct motion_sensor_player *player;
real relative_scale;
real_point2d center;
real_point2d corner;
short history_index;
csmemset(stack_buffer, 0x62, sizeof(stack_buffer));
@@ -640,9 +640,9 @@ static void render_motion_sensor(
relative_scale =
hud_globals->defaults.motion_sensor_scale /
hud_globals->defaults.motion_sensor_range;
center.x = (real)reference->x;
center.y = (real)reference->y;
blip_begin(&center, 0, in_multiplayer, local_player_index);
corner.x = (real)reference->x;
corner.y = (real)reference->y;
blip_begin(&corner, 0, in_multiplayer, local_player_index);
for (history_index = 0;
history_index < MOTION_SENSOR_HISTORY_COUNT;
@@ -669,14 +669,14 @@ static void render_motion_sensor(
if (blip->type != _blip_type_none)
{
real_point2d point;
real_point2d blip_pos;
tiny_point2d_get(&blip->position, &point);
tiny_point2d_get(&blip->position, &blip_pos);
render_blip(
sensor,
blip->type,
blip->size,
&point,
&blip_pos,
relative_scale,
fade,
radius);
@@ -695,14 +695,14 @@ static void render_motion_sensor(
if (game_engine_get_goal_in_use(
(short)sensor->custom_blip_goal_indices[blip_index]))
{
real_point2d point;
real_point2d blip_pos;
tiny_point2d_get(&sensor->custom_blips[blip_index], &point);
tiny_point2d_get(&sensor->custom_blips[blip_index], &blip_pos);
render_blip(
sensor,
_blip_type_custom,
_hud_blip_type_medium,
&point,
&blip_pos,
relative_scale,
fade,
radius);
+172 -181
View File
@@ -1314,7 +1314,7 @@ static void ui_widget_delete_children_recursive(
struct widget_instance *widget);
static struct widget_instance *ui_widget_launch_widget(
struct widget_instance *widget,
long widget_tag_index);
long new_widget_tag_index);
static __inline boolean widget_instance_can_handle_events(
struct widget_instance *widget);
static struct widget_instance *widget_instance_find_by_tag_index_recursive(
@@ -1427,8 +1427,8 @@ static struct ui_widget_bss_prefix ui_widget_globals_storage;
#define widget_globals ui_widget_globals_storage.widget_globals
#define we_are_at_the_main_menu ui_widget_globals_storage.we_are_at_the_main_menu
#define dpad_event_times ui_widget_globals_storage.dpad_event_times
extern real_argb_color ui_plasma_effect_color;
extern short local_player_index_for_draw_string_and_hack_in_icons;
real_argb_color ui_plasma_effect_color;
short local_player_index_for_draw_string_and_hack_in_icons;
/* January defines this and never references it, as we do not */
real const _one_over_255 = 1.0f / 255.0f;
@@ -1627,8 +1627,8 @@ void draw_bitmap_in_rect(
real_argb_color plasma_fade = ui_plasma_effect_color;
real_rgb_color map_tint = { 0.9f, 0.9f, 0.9f };
real map_fade = 0.9f;
rectangle2d default_bitmap_rect;
real_point2d positions[NUMBER_OF_POINTS_PER_RECTANGLE];
rectangle2d temp;
real_point2d points[NUMBER_OF_POINTS_PER_RECTANGLE];
struct dynamic_screen_vertex vertices[NUMBER_OF_POINTS_PER_RECTANGLE];
struct rasterizer_dynamic_screen_geometry_parameters parameters;
real bitmap_width;
@@ -1647,11 +1647,11 @@ void draw_bitmap_in_rect(
if (!bitmap_rect)
{
default_bitmap_rect.x0 = 0;
default_bitmap_rect.y0 = 0;
default_bitmap_rect.x1 = bitmap->width;
default_bitmap_rect.y1 = bitmap->height;
bitmap_rect = &default_bitmap_rect;
temp.x0 = 0;
temp.y0 = 0;
temp.x1 = bitmap->width;
temp.y1 = bitmap->height;
bitmap_rect = &temp;
}
rectangle_width = rect->x1 - rect->x0;
@@ -1660,32 +1660,32 @@ void draw_bitmap_in_rect(
rectangle_y0 = rect->y0;
source_width = bitmap_rect->x1 - bitmap_rect->x0;
source_height = bitmap_rect->y1 - bitmap_rect->y0;
positions[0].x = (real)rectangle_x0;
positions[0].y = (real)rectangle_y0;
positions[1].x = (real)(rectangle_x0 + rectangle_width);
positions[1].y = (real)rectangle_y0;
positions[2].x = (real)(rectangle_x0 + rectangle_width);
positions[2].y = (real)(rectangle_y0 + rectangle_height);
positions[3].x = (real)rectangle_x0;
positions[3].y = (real)(rectangle_y0 + rectangle_height);
points[0].x = (real)rectangle_x0;
points[0].y = (real)rectangle_y0;
points[1].x = (real)(rectangle_x0 + rectangle_width);
points[1].y = (real)rectangle_y0;
points[2].x = (real)(rectangle_x0 + rectangle_width);
points[2].y = (real)(rectangle_y0 + rectangle_height);
points[3].x = (real)rectangle_x0;
points[3].y = (real)(rectangle_y0 + rectangle_height);
if (clip_rect)
{
if (clip_rect->x0 > rect->x0)
{
positions[0].x = positions[3].x = (real)clip_rect->x0;
points[0].x = points[3].x = (real)clip_rect->x0;
}
if (clip_rect->x1 < rect->x1)
{
positions[1].x = positions[2].x = (real)clip_rect->x1;
points[1].x = points[2].x = (real)clip_rect->x1;
}
if (clip_rect->y0 > rect->y0)
{
positions[0].y = positions[1].y = (real)clip_rect->y0;
points[0].y = points[1].y = (real)clip_rect->y0;
}
if (clip_rect->y1 < rect->y1)
{
positions[2].y = positions[3].y = (real)clip_rect->y1;
points[2].y = points[3].y = (real)clip_rect->y1;
}
}
@@ -1707,7 +1707,7 @@ void draw_bitmap_in_rect(
(vertex_index % 3) ? texture_width : 0.0f;
vertices[vertex_index].texture_coordinates.y =
(vertex_index > 1) ? texture_height : 0.0f;
vertices[vertex_index].position = positions[vertex_index];
vertices[vertex_index].position = points[vertex_index];
}
csmemset(&parameters, 0, sizeof(parameters));
@@ -2304,9 +2304,9 @@ static void ui_widget_delete_children_recursive(
static struct widget_instance *ui_widget_launch_widget(
struct widget_instance *widget,
long widget_tag_index)
long new_widget_tag_index)
{
struct ui_widget_definition *definition = ui_widget_definition_get(widget_tag_index);
struct ui_widget_definition *definition = ui_widget_definition_get(new_widget_tag_index);
struct widget_instance *root;
struct widget_instance *new_widget;
short local_player_index;
@@ -2370,7 +2370,7 @@ static struct widget_instance *ui_widget_launch_widget(
root = widget_instance_get_topmost_parent(widget);
new_widget = ui_widget_load_by_name_or_tag(
NULL,
widget_tag_index,
new_widget_tag_index,
NULL,
local_player_index,
root->definition_tag_index,
@@ -6180,6 +6180,7 @@ static boolean ui_check_for_pause_game(
{
boolean pause_pressed = FALSE;
boolean network_game = network_game_is_active();
short controller_index = NONE;
if (game_in_progress() &&
!cinematic_in_progress() &&
@@ -6187,185 +6188,175 @@ static boolean ui_check_for_pause_game(
!we_are_at_the_main_menu &&
widget_globals.pause_disabled_ticks == 0)
{
short controller_index;
long gamepad_index;
for (controller_index = 0;
controller_index < MAXIMUM_NUMBER_OF_LOCAL_PLAYERS;
controller_index++)
for (gamepad_index = 0;
gamepad_index < MAXIMUM_NUMBER_OF_LOCAL_PLAYERS;
gamepad_index++)
{
if (input_has_gamepad(controller_index) &&
local_player_exists(controller_index) &&
input_get_gamepad_state(controller_index)->
if (input_has_gamepad(gamepad_index) &&
local_player_exists(gamepad_index) &&
input_get_gamepad_state(gamepad_index)->
buttons[_gamepad_binary_button_start] == 1)
{
boolean pressed_by_first_local_player = TRUE;
short local_player_count = 0;
short pressing_local_player_index = NONE;
short local_player_index;
pause_pressed = TRUE;
for (local_player_index = local_player_get_next(NONE);
local_player_index != NONE;
local_player_index = local_player_get_next(local_player_index))
{
if (local_player_index == controller_index)
{
pressing_local_player_index = controller_index;
if (local_player_count >= 1)
pressed_by_first_local_player = FALSE;
}
local_player_count++;
}
if (network_game)
{
if (game_engine_allow_pause() &&
pressing_local_player_index == controller_index)
{
if (!widget_globals.active_widgets[controller_index])
{
struct network_game_client *client = global_network_game_client_get();
struct network_game *network_game_data =
network_game_client_get_game(client);
short machine_index =
network_game_client_get_machine_index(client);
char const *widget_name;
controller_index = gamepad_index;
break;
}
}
}
if (pause_pressed)
{
boolean pressed_by_first_local_player = TRUE;
short local_player_count = 0;
short pressing_local_player_index = NONE;
short local_player_index;
switch (local_player_count)
{
case 1:
widget_name =
"ui\\shell\\multiplayer_game\\pause_game\\1p_pause_game";
break;
case 2:
widget_name =
"ui\\shell\\multiplayer_game\\pause_game\\2p_pause_game";
break;
case 3:
widget_name = pressed_by_first_local_player == TRUE
? "ui\\shell\\multiplayer_game\\pause_game\\2p_pause_game"
: "ui\\shell\\multiplayer_game\\pause_game\\4p_pause_game";
break;
case 4:
widget_name =
"ui\\shell\\multiplayer_game\\pause_game\\4p_pause_game";
break;
default:
error(
_error_silent,
"invalid local player count for multiplayer game");
widget_name = NULL;
break;
}
if (widget_name &&
!ui_widget_load_by_name_or_tag(
widget_name,
NONE,
NULL,
controller_index,
NONE,
NONE,
NONE))
{
error(
_error_silent,
"failed to load multiplayer pause game window");
}
}
else
{
ui_widget_delete(widget_globals.active_widgets[controller_index]);
}
}
}
else
for (local_player_index = local_player_get_next(NONE);
local_player_index != NONE;
local_player_index = local_player_get_next(local_player_index))
{
if (local_player_index == controller_index)
{
pressing_local_player_index = controller_index;
if (local_player_count >= 1)
pressed_by_first_local_player = FALSE;
}
local_player_count++;
}
if (network_game)
{
if (game_engine_allow_pause() &&
pressing_local_player_index == controller_index)
{
if (!widget_globals.active_widgets[controller_index])
{
struct network_game_client *client = global_network_game_client_get();
struct network_game *network_game_data =
network_game_client_get_game(client);
short machine_index =
network_game_client_get_machine_index(client);
char const *widget_name;
switch (local_player_count)
{
case 0:
case 1:
if (widget_globals.active_widgets[controller_index])
{
if (game_time_get_paused() == TRUE)
ui_widgets_close_all();
}
else if (!ui_widget_load_by_name_or_tag(
"ui\\shell\\solo_game\\pause_game\\pause_game",
NONE,
NULL,
controller_index,
NONE,
NONE,
NONE))
{
error(
_error_silent,
"failed to load full screen pause game window");
}
widget_name =
"ui\\shell\\multiplayer_game\\pause_game\\1p_pause_game";
break;
case 2:
if (widget_globals.active_widgets[controller_index])
{
if (game_time_get_paused() == TRUE)
ui_widgets_close_all();
}
else if (!game_time_get_paused())
{
if (!ui_widget_load_by_name_or_tag(
"ui\\shell\\solo_game\\pause_game\\pause_game_split_screen",
NONE,
NULL,
controller_index,
NONE,
NONE,
NONE))
{
error(
_error_silent,
"failed to load split screen pause game window");
}
}
widget_name =
"ui\\shell\\multiplayer_game\\pause_game\\2p_pause_game";
break;
case 3:
widget_name = pressed_by_first_local_player == TRUE
? "ui\\shell\\multiplayer_game\\pause_game\\2p_pause_game"
: "ui\\shell\\multiplayer_game\\pause_game\\4p_pause_game";
break;
case 4:
widget_name =
"ui\\shell\\multiplayer_game\\pause_game\\4p_pause_game";
break;
default:
error(
_error_silent,
"the ui seems to be confused... assuming you are playing full-screen single player?");
if (widget_globals.initialized)
{
boolean widgets_active = FALSE;
long widget_index;
for (widget_index = 0;
widget_index < MAXIMUM_NUMBER_OF_LOCAL_PLAYERS;
widget_index++)
{
if (widget_globals.active_widgets[widget_index])
{
widgets_active = TRUE;
break;
}
}
if (widgets_active)
{
ui_widgets_close_all();
break;
}
}
if (!ui_widget_load_by_name_or_tag(
"ui\\shell\\solo_game\\pause_game\\pause_game",
"invalid local player count for multiplayer game");
widget_name = NULL;
break;
}
if (widget_name &&
!ui_widget_load_by_name_or_tag(
widget_name,
NONE,
NULL,
controller_index,
NONE,
NONE,
NONE))
{
error(
_error_silent,
"failed to load full screen pause game window");
}
break;
{
error(
_error_silent,
"failed to load multiplayer pause game window");
}
}
else
{
ui_widget_delete(widget_globals.active_widgets[controller_index]);
}
}
}
else
{
switch (local_player_count)
{
case 0:
case 1:
if (widget_globals.active_widgets[controller_index])
{
if (game_time_get_paused() == TRUE)
ui_widgets_close_all();
}
else if (!ui_widget_load_by_name_or_tag(
"ui\\shell\\solo_game\\pause_game\\pause_game",
NONE,
NULL,
controller_index,
NONE,
NONE,
NONE))
{
error(
_error_silent,
"failed to load full screen pause game window");
}
break;
case 2:
if (widget_globals.active_widgets[controller_index])
{
if (game_time_get_paused() == TRUE)
ui_widgets_close_all();
}
else if (!game_time_get_paused())
{
if (!ui_widget_load_by_name_or_tag(
"ui\\shell\\solo_game\\pause_game\\pause_game_split_screen",
NONE,
NULL,
controller_index,
NONE,
NONE,
NONE))
{
error(
_error_silent,
"failed to load split screen pause game window");
}
}
break;
default:
error(
_error_silent,
"the ui seems to be confused... assuming you are playing full-screen single player?");
if (!ui_widgets_active())
{
if (!ui_widget_load_by_name_or_tag(
"ui\\shell\\solo_game\\pause_game\\pause_game",
NONE,
NULL,
controller_index,
NONE,
NONE,
NONE))
{
error(
_error_silent,
"failed to load full screen pause game window");
}
}
else
{
ui_widgets_close_all();
}
break;
}
}
+1
View File
@@ -706,6 +706,7 @@ boolean display_framerate = FALSE;
boolean display_vblank_deltas = FALSE;
boolean display_precache_progress = FALSE;
struct _screenshot_and_framerate_globals global_screenshot_count = { 0 };
boolean debug_render_freeze;
/* ---------- public code */
+10 -10
View File
@@ -1128,14 +1128,14 @@ short convex_polygon2d_clip_to_plane(
real_plane2d const *plane,
short maximum_count,
real_point2d *result,
long *clip_flags,
unsigned long *clip_flags,
boolean *clipped,
real epsilon)
{
real_point2d local_points[CLIP_BUFFER_SIZE];
real_point2d storage[CLIP_BUFFER_SIZE];
boolean any_in_front = FALSE;
boolean any_behind = FALSE;
long result_clip_flags = 0;
unsigned long result_clip_flags = 0;
short result_count = 0;
real_point2d const *previous_point;
boolean previous_in_front;
@@ -1154,8 +1154,8 @@ short convex_polygon2d_clip_to_plane(
if (points == result)
{
match_assert("c:\\halo\\SOURCE\\math\\geometry.c", 1357, count<=CLIP_BUFFER_SIZE);
csmemcpy(local_points, points, sizeof(real_point2d)*count);
points = local_points;
csmemcpy(storage, points, sizeof(real_point2d)*count);
points = storage;
}
previous_point = points + count - 1;
@@ -1296,9 +1296,9 @@ short convex_polygon3d_clip_to_plane(
real_point3d *result,
boolean *clipped,
real epsilon,
boolean keep_degenerate)
boolean keep_coplanar)
{
real_point3d local_points[CLIP_BUFFER_SIZE];
real_point3d storage[CLIP_BUFFER_SIZE];
boolean any_in_front = FALSE;
boolean any_behind = FALSE;
short result_count = 0;
@@ -1319,8 +1319,8 @@ short convex_polygon3d_clip_to_plane(
if (points == result)
{
match_assert("c:\\halo\\SOURCE\\math\\geometry.c", 1500, count<=CLIP_BUFFER_SIZE);
csmemcpy(local_points, points, sizeof(real_point3d)*count);
points = local_points;
csmemcpy(storage, points, sizeof(real_point3d)*count);
points = storage;
}
previous_point = points + count - 1;
@@ -1417,7 +1417,7 @@ short convex_polygon3d_clip_to_plane(
if (!any_in_front)
{
if (any_behind || !keep_degenerate)
if (any_behind || !keep_coplanar)
{
return 0;
}
+2 -2
View File
@@ -117,7 +117,7 @@ short convex_polygon2d_clip_to_plane(
real_plane2d const *plane,
short maximum_count,
real_point2d *result,
long *clip_flags,
unsigned long *clip_flags,
boolean *clipped,
real epsilon);
short convex_polygon3d_clip_to_plane(
@@ -128,7 +128,7 @@ short convex_polygon3d_clip_to_plane(
real_point3d *result,
boolean *clipped,
real epsilon,
boolean keep_degenerate);
boolean keep_coplanar);
short convex_hull2d_intersect(
short p_count,
real_point2d const *p,
+1 -1
View File
@@ -506,7 +506,7 @@ void periodic_functions_initialize(
67,
!function_tables_initialized);
function_tables_initialized = TRUE;
*get_global_random_seed_address() = 0x20F3F660;
set_random_seed(0x20F3F660);
for (function_index = 0; function_index < NUMBER_OF_PERIODIC_FUNCTIONS; function_index++)
{
+1 -21
View File
@@ -81,6 +81,7 @@ symbols in this file:
#include "shaders/shader_definitions.h"
#include "shaders/shaders.h"
#include "rasterizer/rasterizer_console_vars.h"
#include "rasterizer/rasterizer_model_types.h"
/* ---------- constants */
@@ -220,27 +221,6 @@ struct render_sort_filth
word pad;
};
struct render_model_effect
{
short type;
word pad;
real intensity;
byte reserved[0x20];
};
struct rasterizer_model_begin_parameters
{
unsigned long geometry_flags;
long unique_identifier;
struct render_skinning skinning;
struct render_lighting lighting;
struct render_animation animation;
struct render_model_effect effect;
real_point3d centroid;
real radius;
real_vector2d base_map_scale;
};
typedef char verify_render_model_effect_size[sizeof(struct render_model_effect) == 0x28 ? 1 : -1];
typedef char verify_rasterizer_model_begin_parameters_size[sizeof(struct rasterizer_model_begin_parameters) == 0xCC ? 1 : -1];
+5 -5
View File
@@ -351,7 +351,7 @@ static void object_destroy_region(
/* ---------- globals */
extern boolean debug_damage;
boolean debug_damage;
/* Name and type from the 2003 PC demo PDB ONLY (file static long); HCEX has no such static, so
the name is singly attested. January corroborates the storage: .bss +0x48, after
@@ -2206,7 +2206,7 @@ static void area_of_effect_cause_damage_to_object(
real_vector3d collision_vector;
real_vector3d offset_vector;
real_vector3d direct_vector;
real_point3d collision_point;
real_point3d offset_point;
struct collision_result spread_collision;
struct collision_result direct_collision;
boolean can_damage;
@@ -2284,13 +2284,13 @@ static void area_of_effect_cause_damage_to_object(
&collision_vector,
object_get_ultimate_parent(object_index),
&spread_collision);
collision_point = spread_collision.point;
offset_point = spread_collision.point;
ultimate_parent_index = object_get_ultimate_parent(object_index);
if (!collision_test_vector(
_damage_area_of_effect_collision_flags,
&collision_point,
&offset_point,
vector_from_points3d(
&collision_point,
&offset_point,
&object->object.bounding_sphere_center,
&offset_vector),
ultimate_parent_index,
+5 -5
View File
@@ -492,12 +492,12 @@ real object_light_ambient_scale = 0.4f;
real object_light_secondary_scale = 1.0f;
boolean object_light_interpolate = TRUE;
extern boolean debug_lights;
extern boolean debug_object_lights;
extern struct data_array *light_data;
extern struct cluster_partition light_cluster_partition;
boolean debug_lights;
boolean debug_object_lights;
struct data_array *light_data;
struct cluster_partition light_cluster_partition;
struct lights_game_globals *lights_game_globals = NULL;
extern short debug_rasterizer_light_count;
short debug_rasterizer_light_count;
struct lights_globals lights_globals;
/* ---------- public code */
+1 -1
View File
@@ -470,7 +470,7 @@ struct object_type_definition *object_type_definitions[NUMBER_OF_OBJECT_TYPES] =
&sound_scenery_data_definition
};
extern struct object_type_definition *first_object_type_definition;
struct object_type_definition *first_object_type_definition;
/* VC7 otherwise emits this tentative definition as a common symbol. */
#pragma bss_seg(".bss")
static word processed_bsp_flags;
+2
View File
@@ -73,6 +73,8 @@ static void antenna_update(
/* ---------- globals */
struct data_array *antenna_data;
/* ---------- public code */
void antennas_initialize(
+56 -50
View File
@@ -326,6 +326,12 @@ static void glow_update(
/* ---------- globals */
struct
{
struct data_array *glow_data;
struct data_array *glow_particle_data;
} glow_globals;
/* ---------- public code */
void glow_initialize(
@@ -810,10 +816,10 @@ static void get_particle_world_position(
real_vector3d side;
real_vector3d ups[4];
real_vector3d up;
real_point3d positions[4];
real_point3d traversal_points[4];
real_vector3d position_vectors[4];
real_vector3d position;
real knots[4];
real traversal_time_indices[4];
real angle;
short marker_index;
short first_marker_index;
@@ -836,8 +842,8 @@ static void get_particle_world_position(
switch (glow->number_of_markers)
{
case 2:
positions[0] = glow->markers[0].matrix.position;
positions[3] = glow->markers[1].matrix.position;
traversal_points[0] = glow->markers[0].matrix.position;
traversal_points[3] = glow->markers[1].matrix.position;
ups[0] = glow->markers[0].matrix.up;
ups[3] = glow->markers[1].matrix.up;
cross_product3d(
@@ -848,15 +854,15 @@ static void get_particle_world_position(
&glow->markers[1].matrix.up,
&glow->markers[1].matrix.forward,
&sides[3]);
knots[0] = glow->marker_time_index[0];
knots[3] = glow->marker_time_index[1];
traversal_time_indices[0] = glow->marker_time_index[0];
traversal_time_indices[3] = glow->marker_time_index[1];
positions[1].x = (positions[3].x - positions[0].x) * 0.25f + positions[0].x;
positions[1].y = (positions[3].y - positions[0].y) * 0.25f + positions[0].y;
positions[1].z = (positions[3].z - positions[0].z) * 0.25f + positions[0].y;
positions[2].x = (positions[3].x - positions[0].x) * 0.75f + positions[0].x;
positions[2].y = (positions[3].y - positions[0].y) * 0.75f + positions[0].y;
positions[2].z = (positions[3].z - positions[0].z) * 0.75f + positions[0].y;
traversal_points[1].x = (traversal_points[3].x - traversal_points[0].x) * 0.25f + traversal_points[0].x;
traversal_points[1].y = (traversal_points[3].y - traversal_points[0].y) * 0.25f + traversal_points[0].y;
traversal_points[1].z = (traversal_points[3].z - traversal_points[0].z) * 0.25f + traversal_points[0].y;
traversal_points[2].x = (traversal_points[3].x - traversal_points[0].x) * 0.75f + traversal_points[0].x;
traversal_points[2].y = (traversal_points[3].y - traversal_points[0].y) * 0.75f + traversal_points[0].y;
traversal_points[2].z = (traversal_points[3].z - traversal_points[0].z) * 0.75f + traversal_points[0].y;
ups[1].i = (ups[3].i - ups[0].i) * 0.25f + ups[0].i;
ups[1].j = (ups[3].j - ups[0].j) * 0.25f + ups[0].j;
@@ -871,13 +877,13 @@ static void get_particle_world_position(
sides[2].j = (sides[3].j - sides[0].j) * 0.75f + sides[0].j;
sides[2].k = (sides[3].k - sides[0].k) * 0.75f + sides[0].k;
knots[1] = (knots[3] - knots[0]) * 0.25f + knots[0];
knots[2] = (knots[3] - knots[0]) * 0.75f + knots[0];
traversal_time_indices[1] = (traversal_time_indices[3] - traversal_time_indices[0]) * 0.25f + traversal_time_indices[0];
traversal_time_indices[2] = (traversal_time_indices[3] - traversal_time_indices[0]) * 0.75f + traversal_time_indices[0];
break;
case 3:
positions[0] = glow->markers[0].matrix.position;
positions[3] = glow->markers[2].matrix.position;
traversal_points[0] = glow->markers[0].matrix.position;
traversal_points[3] = glow->markers[2].matrix.position;
ups[0] = glow->markers[0].matrix.up;
ups[3] = glow->markers[2].matrix.up;
cross_product3d(
@@ -888,23 +894,23 @@ static void get_particle_world_position(
&glow->markers[2].matrix.up,
&glow->markers[2].matrix.forward,
&sides[3]);
knots[0] = glow->marker_time_index[0];
knots[3] = glow->marker_time_index[2];
traversal_time_indices[0] = glow->marker_time_index[0];
traversal_time_indices[3] = glow->marker_time_index[2];
switch (particle->parent_marker_index)
{
case 0:
positions[1] = glow->markers[1].matrix.position;
traversal_points[1] = glow->markers[1].matrix.position;
ups[1] = glow->markers[1].matrix.up;
cross_product3d(
&glow->markers[1].matrix.up,
&glow->markers[1].matrix.forward,
&sides[1]);
knots[1] = glow->marker_time_index[1];
traversal_time_indices[1] = glow->marker_time_index[1];
positions[2].x = (positions[3].x - positions[1].x) * 0.5f + positions[1].x;
positions[2].y = (positions[3].y - positions[1].y) * 0.5f + positions[1].y;
positions[2].z = (positions[3].z - positions[1].z) * 0.5f + positions[1].y;
traversal_points[2].x = (traversal_points[3].x - traversal_points[1].x) * 0.5f + traversal_points[1].x;
traversal_points[2].y = (traversal_points[3].y - traversal_points[1].y) * 0.5f + traversal_points[1].y;
traversal_points[2].z = (traversal_points[3].z - traversal_points[1].z) * 0.5f + traversal_points[1].y;
ups[2].i = (ups[3].i - ups[1].i) * 0.5f + ups[1].i;
ups[2].j = (ups[3].j - ups[1].j) * 0.5f + ups[1].j;
@@ -913,20 +919,20 @@ static void get_particle_world_position(
sides[2].j = (sides[3].j - sides[1].j) * 0.5f + sides[1].j;
sides[2].k = (sides[3].k - sides[1].k) * 0.5f + sides[1].k;
knots[2] = (knots[3] - knots[1]) * 0.5f + knots[1];
traversal_time_indices[2] = (traversal_time_indices[3] - traversal_time_indices[1]) * 0.5f + traversal_time_indices[1];
break;
case 1:
positions[2] = glow->markers[1].matrix.position;
traversal_points[2] = glow->markers[1].matrix.position;
ups[2] = glow->markers[1].matrix.up;
cross_product3d(
&glow->markers[1].matrix.up,
&glow->markers[1].matrix.forward,
&sides[2]);
positions[1].x = (positions[2].x - positions[0].x) * 0.5f + positions[0].x;
positions[1].y = (positions[2].y - positions[0].y) * 0.5f + positions[0].y;
positions[1].z = (positions[2].z - positions[0].z) * 0.5f + positions[0].y;
traversal_points[1].x = (traversal_points[2].x - traversal_points[0].x) * 0.5f + traversal_points[0].x;
traversal_points[1].y = (traversal_points[2].y - traversal_points[0].y) * 0.5f + traversal_points[0].y;
traversal_points[1].z = (traversal_points[2].z - traversal_points[0].z) * 0.5f + traversal_points[0].y;
ups[1].i = (ups[2].i - ups[0].i) * 0.5f + ups[0].i;
ups[1].j = (ups[2].j - ups[0].j) * 0.5f + ups[0].j;
@@ -935,8 +941,8 @@ static void get_particle_world_position(
sides[1].j = (sides[2].j - sides[0].j) * 0.5f + sides[0].j;
sides[1].k = (sides[2].k - sides[0].k) * 0.5f + sides[0].k;
knots[1] = (glow->marker_time_index[1] - knots[0]) * 0.5f + knots[0];
knots[2] = glow->marker_time_index[1];
traversal_time_indices[1] = (glow->marker_time_index[1] - traversal_time_indices[0]) * 0.5f + traversal_time_indices[0];
traversal_time_indices[2] = glow->marker_time_index[1];
break;
}
break;
@@ -963,16 +969,16 @@ static void get_particle_world_position(
last_marker_index++;
}
knots[0] = glow->marker_time_index[first_marker_index];
knots[1] = glow->marker_time_index[first_marker_index + 1];
knots[2] = glow->marker_time_index[first_marker_index + 2];
knots[3] = glow->marker_time_index[first_marker_index + 3];
traversal_time_indices[0] = glow->marker_time_index[first_marker_index];
traversal_time_indices[1] = glow->marker_time_index[first_marker_index + 1];
traversal_time_indices[2] = glow->marker_time_index[first_marker_index + 2];
traversal_time_indices[3] = glow->marker_time_index[first_marker_index + 3];
for (index = 0; index < 4; index++)
{
struct object_marker *marker = &glow->markers[glow->marker_order[first_marker_index + index]];
positions[index] = marker->matrix.position;
traversal_points[index] = marker->matrix.position;
ups[index] = marker->matrix.up;
cross_product3d(&marker->matrix.up, &marker->matrix.forward, &sides[index]);
}
@@ -981,9 +987,9 @@ static void get_particle_world_position(
for (index = 0; index < NUMBEROF(position_vectors); index++)
{
position_vectors[index].i = positions[index].x;
position_vectors[index].j = positions[index].y;
position_vectors[index].k = positions[index].z;
position_vectors[index].i = traversal_points[index].x;
position_vectors[index].j = traversal_points[index].y;
position_vectors[index].k = traversal_points[index].z;
}
nonuniform_cubic_spline_vector3d(
@@ -992,10 +998,10 @@ static void get_particle_world_position(
&position_vectors[1],
&position_vectors[2],
&position_vectors[3],
knots[0],
knots[1],
knots[2],
knots[3],
traversal_time_indices[0],
traversal_time_indices[1],
traversal_time_indices[2],
traversal_time_indices[3],
particle->t);
nonuniform_cubic_spline_vector3d(
&up,
@@ -1003,10 +1009,10 @@ static void get_particle_world_position(
&ups[1],
&ups[2],
&ups[3],
knots[0],
knots[1],
knots[2],
knots[3],
traversal_time_indices[0],
traversal_time_indices[1],
traversal_time_indices[2],
traversal_time_indices[3],
particle->t);
nonuniform_cubic_spline_vector3d(
&side,
@@ -1014,10 +1020,10 @@ static void get_particle_world_position(
&sides[1],
&sides[2],
&sides[3],
knots[0],
knots[1],
knots[2],
knots[3],
traversal_time_indices[0],
traversal_time_indices[1],
traversal_time_indices[2],
traversal_time_indices[3],
particle->t);
particle->position.x = position.i;
-8
View File
@@ -18,12 +18,6 @@ header included in hcex build.
/* ---------- structures */
struct glow_globals
{
struct data_array *glow_data;
struct data_array *glow_particle_data;
};
/* ---------- prototypes/EXAMPLE.C */
void glow_initialize(
@@ -46,8 +40,6 @@ void glow_submit(
/* ---------- globals */
extern struct glow_globals glow_globals;
/* ---------- public code */
#endif // __GLOW_H
+3 -3
View File
@@ -262,14 +262,14 @@ static void lightning_offset_marker_position(
void lightning_submit(
long object_index,
long lightning_index,
long widget_index,
struct render_lighting const *lighting,
struct render_animation const *animation)
{
(void)lighting;
if (object_index != NONE && lightning_index != NONE)
if (object_index != NONE && widget_index != NONE)
{
struct lightning_datum *lightning = lightning_get(lightning_index);
struct lightning_datum *lightning = lightning_get(widget_index);
struct lightning_definition *definition = lightning_definition_get(lightning->definition_index);
struct object_marker marker;
+1 -1
View File
@@ -60,7 +60,7 @@ void lightning_delete(
void lightning_submit(
long object_index,
long lightning_index,
long widget_index,
struct render_lighting const *lighting,
struct render_animation const *animation);
+1
View File
@@ -145,6 +145,7 @@ static struct widget_type_definition data_0030b2b0[NUMBER_OF_WIDGET_TYPES] =
lightning_submit
}
};
struct data_array *widget_data;
/* ---------- public code */
+1 -1
View File
@@ -86,7 +86,7 @@ static __inline real bsp3d_polygon_plane_distance_to_point(
/* ---------- globals */
extern long node_count;
long node_count;
/* ---------- public code */
+36 -36
View File
@@ -140,7 +140,7 @@ struct collision_bsp_test_pill_new_context
typedef char collision_bsp_test_pill_new_context_size_assert[
sizeof(struct collision_bsp_test_pill_new_context) == 0x2C ? 1 : -1];
struct collision_bsp_test_pill_context
struct test_pill_data
{
struct collision_bsp const *bsp;
real_point3d const *point;
@@ -157,9 +157,9 @@ struct collision_bsp_test_pill_context
};
typedef char collision_bsp_test_pill_context_size_assert[
sizeof(struct collision_bsp_test_pill_context) == 0x22C ? 1 : -1];
sizeof(struct test_pill_data) == 0x22C ? 1 : -1];
struct collision_bsp_test_sphere_context
struct test_sphere_data
{
struct collision_bsp const *bsp;
short breakable_surface_count;
@@ -177,13 +177,13 @@ struct collision_bsp_test_sphere_context
};
typedef char collision_bsp_test_sphere_context_size_assert[
sizeof(struct collision_bsp_test_sphere_context) == 0x228 ? 1 : -1];
sizeof(struct test_sphere_data) == 0x228 ? 1 : -1];
typedef char collision_bsp_test_sphere_context_plane_stack_offset_assert[
offsetof(struct collision_bsp_test_sphere_context, plane_stack) == 0x1C ? 1 : -1];
offsetof(struct test_sphere_data, plane_stack) == 0x1C ? 1 : -1];
typedef char collision_bsp_test_sphere_context_projection_axis_offset_assert[
offsetof(struct collision_bsp_test_sphere_context, projection_axis) == 0x21C ? 1 : -1];
offsetof(struct test_sphere_data, projection_axis) == 0x21C ? 1 : -1];
typedef char collision_bsp_test_sphere_context_center2d_offset_assert[
offsetof(struct collision_bsp_test_sphere_context, center2d) == 0x220 ? 1 : -1];
offsetof(struct test_sphere_data, center2d) == 0x220 ? 1 : -1];
struct collision_leaf
{
@@ -273,26 +273,26 @@ static boolean pill_test_vector(
real *t,
real *edge_t);
static boolean collision_surface_test_pill(
struct collision_bsp_test_pill_context *data,
struct test_pill_data *data,
long surface_index);
static boolean bsp2d_test_pill_recursive(
struct collision_bsp_test_pill_context *data,
struct test_pill_data *data,
long child_index);
static boolean bsp3d_test_pill_recursive(
struct collision_bsp_test_pill_context *data,
long node_index);
struct test_pill_data *data,
long child_index);
static void add_feature(
long *count,
long *indices,
long index);
static void collision_surface_test_sphere(
struct collision_bsp_test_sphere_context *data,
struct test_sphere_data *data,
long surface_index);
static void bsp2d_test_sphere_recursive(
struct collision_bsp_test_sphere_context *data,
struct test_sphere_data *data,
long child_index);
static void bsp3d_test_sphere_recursive(
struct collision_bsp_test_sphere_context *data,
struct test_sphere_data *data,
long node_index);
void render_debug_collision_edge(
struct collision_bsp *bsp,
@@ -955,7 +955,7 @@ boolean collision_bsp_test_pill(
real maximum_t,
struct collision_bsp_test_pill_result *result)
{
struct collision_bsp_test_pill_context context;
struct test_pill_data context;
context.bsp = bsp;
context.point = point;
@@ -977,7 +977,7 @@ boolean collision_bsp_test_sphere(
real radius,
struct collision_bsp_test_sphere_result *result)
{
struct collision_bsp_test_sphere_context context;
struct test_sphere_data context;
short collision_function = 6 + (bsp == global_collision_bsp);
collision_log_usage(collision_function);
@@ -1068,7 +1068,7 @@ static void add_feature(
}
static void collision_surface_test_sphere(
struct collision_bsp_test_sphere_context *data,
struct test_sphere_data *data,
long surface_index)
{
struct collision_surface const *surface = TAG_BLOCK_GET_ELEMENT(
@@ -1423,7 +1423,7 @@ static boolean collision_bsp_test_pill_new_recursive(
}
static void bsp2d_test_sphere_recursive(
struct collision_bsp_test_sphere_context *data,
struct test_sphere_data *data,
long child_index)
{
while (!(child_index & LONG_MIN))
@@ -1616,7 +1616,7 @@ static boolean pill_test_vector(
}
static void bsp3d_test_sphere_recursive(
struct collision_bsp_test_sphere_context *data,
struct test_sphere_data *data,
long node_index)
{
while (!(node_index & LONG_MIN))
@@ -1695,17 +1695,17 @@ static void bsp3d_test_sphere_recursive(
reference->plane_designator & LONG_MAX,
real_plane3d);
real plane_distance = -plane3d_distance_to_point(plane, data->center);
real_point3d projected_center;
real_point3d center_projected_on_plane;
real absolute_i;
real absolute_j;
real absolute_k;
short projection;
projected_center.x =
center_projected_on_plane.x =
plane->n.i * plane_distance + data->center->x;
projected_center.y =
center_projected_on_plane.y =
plane->n.j * plane_distance + data->center->y;
projected_center.z =
center_projected_on_plane.z =
plane->n.k * plane_distance + data->center->z;
absolute_i = fabs(plane->n.i);
absolute_j = fabs(plane->n.j);
@@ -1719,7 +1719,7 @@ static void bsp3d_test_sphere_recursive(
projection_sign_from_vector3d(&plane->n, projection) !=
(reference->plane_designator & LONG_MIN ? TRUE : FALSE);
project_point3d(
&projected_center,
&center_projected_on_plane,
data->projection_axis,
data->projection_sign,
&data->center2d);
@@ -1900,7 +1900,7 @@ static boolean collision_bsp_test_vector_recursive(
}
static boolean collision_surface_test_pill(
struct collision_bsp_test_pill_context *data,
struct test_pill_data *data,
long surface_index)
{
boolean hit = FALSE;
@@ -1981,7 +1981,7 @@ static boolean collision_surface_test_pill(
}
static boolean bsp2d_test_pill_recursive(
struct collision_bsp_test_pill_context *data,
struct test_pill_data *data,
long child_index)
{
boolean hit = FALSE;
@@ -2021,16 +2021,16 @@ static boolean bsp2d_test_pill_recursive(
}
static boolean bsp3d_test_pill_recursive(
struct collision_bsp_test_pill_context *data,
long node_index)
struct test_pill_data *data,
long child_index)
{
boolean hit = FALSE;
if (!(node_index & LONG_MIN))
if (!(child_index & LONG_MIN))
{
struct bsp3d_node const *node = TAG_BLOCK_GET_ELEMENT(
&data->bsp->bsp3d.nodes,
node_index,
child_index,
struct bsp3d_node);
real_plane3d const *plane = TAG_BLOCK_GET_ELEMENT(
&data->bsp->bsp3d.planes,
@@ -2072,9 +2072,9 @@ static boolean bsp3d_test_pill_recursive(
hit = TRUE;
}
}
else if (node_index != NONE)
else if (child_index != NONE)
{
long leaf_index = node_index & LONG_MAX;
long leaf_index = child_index & LONG_MAX;
struct collision_leaf const *leaf = TAG_BLOCK_GET_ELEMENT(
&data->bsp->leaves,
leaf_index,
@@ -2121,7 +2121,7 @@ static boolean bsp3d_test_pill_recursive(
short projection;
real_point3d pill_point;
real plane_distance;
real_point2d point2d;
real_point2d p2d;
long surface_index;
real_point3d start_point;
real_point3d sweep_point;
@@ -2147,10 +2147,10 @@ static boolean bsp3d_test_pill_recursive(
&pill_point,
data->projection_axis,
data->projection_sign,
&point2d);
&p2d);
surface_index = bsp2d_test_point(
&data->bsp->bsp2d.nodes,
&point2d,
&p2d,
reference->root_index);
if (collision_surface_test_point(
data->bsp,
@@ -2159,7 +2159,7 @@ static boolean bsp3d_test_pill_recursive(
surface_index,
data->projection_axis,
data->projection_sign,
&point2d))
&p2d))
{
struct collision_surface const *surface = TAG_BLOCK_GET_ELEMENT(
&data->bsp->surfaces,
+12 -12
View File
@@ -713,11 +713,11 @@ void physics_compute_new(
&mass_point->position);
if (powered_mass_point)
{
real_matrix4x3 powered_matrix;
real_matrix4x3 powered_world_matrix;
matrix4x3_multiply(&instance->world_matrix, &powered_mass_point->rotation_matrix, &powered_matrix);
matrix4x3_transform_normal(&powered_matrix, &mass_point_definition->forward, &mass_point->forward);
matrix4x3_transform_normal(&powered_matrix, &mass_point_definition->up, &mass_point->up);
matrix4x3_multiply(&instance->world_matrix, &powered_mass_point->rotation_matrix, &powered_world_matrix);
matrix4x3_transform_normal(&powered_world_matrix, &mass_point_definition->forward, &mass_point->forward);
matrix4x3_transform_normal(&powered_world_matrix, &mass_point_definition->up, &mass_point->up);
}
else
{
@@ -897,7 +897,7 @@ void physics_compute_new(
if (TEST_FLAG(powered_mass_point_definition->flags, _powered_mass_point_antigrav_bit))
{
real probe_length = mass_point_definition->radius + powered_mass_point_definition->antigrav_height;
real_point3d probe_point = mass_point->position;
real_point3d point = mass_point->position;
real_vector3d probe_vector;
struct collision_result collision;
@@ -905,7 +905,7 @@ void physics_compute_new(
if (collision_test_vector(
_collision_test_for_bipeds_dead_flags,
&probe_point,
&point,
&probe_vector,
instance->object_index,
&collision))
@@ -1636,18 +1636,18 @@ static void physics_update_old(
if (powered_mass_point)
{
real_matrix4x3 powered_matrix;
real_matrix4x3 powered_world_matrix;
matrix4x3_multiply(
&world_matrix,
&powered_mass_point->rotation_matrix,
&powered_matrix);
&powered_world_matrix);
matrix4x3_transform_normal(
&powered_matrix,
&powered_world_matrix,
&mass_point_definition->forward,
&mass_point->forward);
matrix4x3_transform_normal(
&powered_matrix,
&powered_world_matrix,
&mass_point_definition->up,
&mass_point->up);
}
@@ -1916,14 +1916,14 @@ static void physics_update_old(
{
real probe_length =
mass_point_definition->radius + powered_mass_point_definition->antigrav_height;
real_point3d probe_point = mass_point->position;
real_point3d point = mass_point->position;
real_vector3d probe_vector;
struct collision_result collision;
scale_vector3d(global_down3d, probe_length, &probe_vector);
if (collision_test_vector(
_collision_test_for_bipeds_dead_flags,
&probe_point,
&point,
&probe_vector,
object_index,
&collision))
+1
View File
@@ -34,6 +34,7 @@ struct tag_reference_definition global_point_physics_reference = { 0, POINT_PHYS
static real global_water_mass_over_radius_cubed = 0.0f;
static real global_air_mass_over_radius_cubed = 0.0f;
boolean debug_point_physics;
/* ---------- public code */
+64 -64
View File
@@ -460,15 +460,15 @@ void rasterizer_frame_statistics_draw(
{
if (rasterizer_debug_options.statistics_mode)
{
char string[STATISTICS_TEXT_BUFFER_SIZE];
char frame_statistics_string[STATISTICS_TEXT_BUFFER_SIZE];
point2d cursor = { 0, 0 };
short height_adjust = -4;
short line_advance = -1;
short left = rasterizer_globals.reserved04.frame_bounds.x0;
short tab_stops[NUMBER_OF_STATISTICS_TAB_STOPS] = { 100, 200, 300, 400, 500, 600 };
real_argb_color data_color = { 1.0f, 0.66f, 1.0f, 0.66f };
real_argb_color header_color = { 1.0f, 1.0f, 1.0f, 1.0f };
real_argb_color default_color = { 1.0f, 1.0f, 1.0f, 1.0f };
real_argb_color statistics_color_plain = { 1.0f, 0.66f, 1.0f, 0.66f };
real_argb_color statistics_color_bold = { 1.0f, 1.0f, 1.0f, 1.0f };
real_argb_color white = { 1.0f, 1.0f, 1.0f, 1.0f };
long environment_vertices =
rasterizer_frame_statistics.lightmap_dynamic_vertex_count +
rasterizer_frame_statistics.shadow_vertex_count +
@@ -532,12 +532,12 @@ void rasterizer_frame_statistics_draw(
offset_rectangle2d(&bounds, 0, 32);
interface_set_bitmap_text_draw_mode(_interface_font_terminal, NONE, 0, 0, 5, 0);
sprintf(string, "|n|tframerate|taverage (of %d)|tmin|tmax",
sprintf(frame_statistics_string, "|n|tframerate|taverage (of %d)|tmin|tmax",
rasterizer_frame_statistics.fps_sample_count);
tab_stops[0] = left;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
draw_string_set_color(&header_color);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
draw_string_set_color(&statistics_color_bold);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
if (rasterizer_debug_options.fps_accumulation)
@@ -549,7 +549,7 @@ void rasterizer_frame_statistics_draw(
system_milliseconds() -
rasterizer_frame_statistics_private_globals.fps_accumulation_time;
sprintf(string, "|t%.0f|t%.0f/%.0f|t%.0f|t%.0f|n",
sprintf(frame_statistics_string, "|t%.0f|t%.0f/%.0f|t%.0f|t%.0f|n",
rasterizer_frame_statistics.frames_per_second,
rasterizer_frame_statistics.average_frames_per_second,
accumulated_frames * 1000.0f / accumulated_time,
@@ -558,7 +558,7 @@ void rasterizer_frame_statistics_draw(
}
else
{
sprintf(string, "|t%.0f|t%.0f|t%.0f|t%.0f|n",
sprintf(frame_statistics_string, "|t%.0f|t%.0f|t%.0f|t%.0f|n",
rasterizer_frame_statistics.frames_per_second,
rasterizer_frame_statistics.average_frames_per_second,
rasterizer_frame_statistics.minimum_frames_per_second,
@@ -567,66 +567,66 @@ void rasterizer_frame_statistics_draw(
tab_stops[0] = left;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
draw_string_set_color(&data_color);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
draw_string_set_color(&statistics_color_plain);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
if (rasterizer_debug_options.statistics_mode == _rasterizer_statistics_mode_objects)
{
tab_stops[0] = left;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
draw_string_set_color(&data_color);
draw_string_set_color(&statistics_color_plain);
sprintf(string, "|tfogged|t%d|n|tnormal|t%d|n|tfast|t%d|n|tscenery|t%d|n",
sprintf(frame_statistics_string, "|tfogged|t%d|n|tnormal|t%d|n|tfast|t%d|n|tscenery|t%d|n",
rasterizer_frame_statistics.vertices_by_permutation[0],
rasterizer_frame_statistics.vertices_by_permutation[1],
rasterizer_frame_statistics.vertices_by_permutation[2],
rasterizer_frame_statistics.vertices_by_permutation[3]);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tskinning|t%d|n|tlighting|t%d|n|tvertex shaders|t%d|n",
sprintf(frame_statistics_string, "|tskinning|t%d|n|tlighting|t%d|n|tvertex shaders|t%d|n",
rasterizer_frame_statistics.model_skinning_constant_bytes,
rasterizer_frame_statistics.model_lighting_constant_bytes,
rasterizer_frame_statistics.model_vertex_shader_work_accumulated);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tlocal_player_count|t%d|n|tmain_get_window_count|t%d|n",
sprintf(frame_statistics_string, "|tlocal_player_count|t%d|n|tmain_get_window_count|t%d|n",
local_player_count(),
main_get_window_count());
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
}
else if (rasterizer_debug_options.statistics_mode == _rasterizer_statistics_mode_geometry)
{
sprintf(string, "|t|tvertices|ttriangles|tprimitives");
sprintf(frame_statistics_string, "|t|tvertices|ttriangles|tprimitives");
tab_stops[0] = left;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
draw_string_set_color(&header_color);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
draw_string_set_color(&statistics_color_bold);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|ttotal|t%d|t%d|t%d|n",
sprintf(frame_statistics_string, "|ttotal|t%d|t%d|t%d|n",
total_vertices,
total_triangles,
total_primitives);
tab_stops[0] = left;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
draw_string_set_color(&data_color);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
draw_string_set_color(&statistics_color_plain);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tenvironment|t%d|t%d|t%d",
sprintf(frame_statistics_string, "|tenvironment|t%d|t%d|t%d",
environment_vertices,
environment_triangles,
environment_primitives);
tab_stops[0] = left + 25;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tlightmaps|t%d|t%d|t%d|n|tshadows (%d)|t%d|t%d|t%d|n|tlights|t%d|t%d|t%d|n|ttextures|t%d|t%d|t%d|n|tlights specular|t%d|t%d|t%d|n|tlightmaps specular|t%d|t%d|t%d|n|tlightmaps ref.mask|t%d|t%d|t%d|n|treflections|t%d|t%d|t%d|n|ttransparent|t%d|t%d/%d|t%d|n|tfog|t%d|t%d|t%d|n",
sprintf(frame_statistics_string, "|tlightmaps|t%d|t%d|t%d|n|tshadows (%d)|t%d|t%d|t%d|n|tlights|t%d|t%d|t%d|n|ttextures|t%d|t%d|t%d|n|tlights specular|t%d|t%d|t%d|n|tlightmaps specular|t%d|t%d|t%d|n|tlightmaps ref.mask|t%d|t%d|t%d|n|treflections|t%d|t%d|t%d|n|ttransparent|t%d|t%d/%d|t%d|n|tfog|t%d|t%d|t%d|n",
rasterizer_frame_statistics.lightmap_dynamic_vertex_count,
rasterizer_frame_statistics.lightmap_dynamic_triangle_count,
rasterizer_frame_statistics.lightmap_dynamic_draw_count,
@@ -661,30 +661,30 @@ void rasterizer_frame_statistics_draw(
rasterizer_frame_statistics.environment_fog_dynamic_draw_count);
tab_stops[0] = left + 50;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tmodel shadows (%d)|t%d|t%d|t%d",
sprintf(frame_statistics_string, "|tmodel shadows (%d)|t%d|t%d|t%d",
rasterizer_frame_statistics.model_shadow_count,
rasterizer_frame_statistics.model_shadow_vertex_count,
rasterizer_frame_statistics.model_shadow_triangle_count,
rasterizer_frame_statistics.model_shadow_draw_count);
tab_stops[0] = left + 25;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tmodels (%d)|t%d|t%d|t%d",
sprintf(frame_statistics_string, "|tmodels (%d)|t%d|t%d|t%d",
rasterizer_frame_statistics.model_count,
model_vertices,
model_triangles,
model_primitives);
tab_stops[0] = left + 25;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tsolid|t%d|t%d|t%d|n|ttransparent|t%d|t%d/%d|t%d|n",
sprintf(frame_statistics_string, "|tsolid|t%d|t%d|t%d|n|ttransparent|t%d|t%d/%d|t%d|n",
rasterizer_frame_statistics.model_vertex_count,
rasterizer_frame_statistics.model_triangle_count,
rasterizer_frame_statistics.model_draw_count,
@@ -694,34 +694,34 @@ void rasterizer_frame_statistics_draw(
rasterizer_frame_statistics.transparent_model_submit_count);
tab_stops[0] = left + 50;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tdecals|t%d|t%d|t%d|n",
sprintf(frame_statistics_string, "|tdecals|t%d|t%d|t%d|n",
rasterizer_frame_statistics.decal_vertex_count,
rasterizer_frame_statistics.decal_triangle_count,
rasterizer_frame_statistics.decal_draw_count);
tab_stops[0] = left;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tdynamic geometry|t%d/%d|t%d/%d|n",
sprintf(frame_statistics_string, "|tdynamic geometry|t%d/%d|t%d/%d|n",
rasterizer_frame_statistics.dynamic_vertex_count,
rasterizer_frame_statistics.dynamic_vertex_buffer_count,
rasterizer_frame_statistics.dynamic_triangle_count,
rasterizer_frame_statistics.dynamic_triangle_buffer_count);
tab_stops[0] = left;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|t%d dynamic lights|n|t%d lens flares|n",
sprintf(frame_statistics_string, "|t%d dynamic lights|n|t%d lens flares|n",
rasterizer_frame_statistics.dynamic_light_count,
rasterizer_frame_statistics.lens_flare_count);
tab_stops[0] = left;
draw_string_set_tab_stops(tab_stops, NUMBER_OF_STATISTICS_TAB_STOPS);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
}
else if (rasterizer_debug_options.statistics_mode == _rasterizer_statistics_mode_profile)
@@ -733,13 +733,13 @@ void rasterizer_frame_statistics_draw(
tab_stops[2] = left + 300;
tab_stops[3] = 600;
sprintf(string, "|tGPU profile|ttime (msecs)|tdata (bytes)");
sprintf(frame_statistics_string, "|tGPU profile|ttime (msecs)|tdata (bytes)");
draw_string_set_tab_stops(tab_stops, 4);
draw_string_set_color(&header_color);
draw_string_set_color(&statistics_color_bold);
cursor.y -= 30;
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
draw_string_set_color(&data_color);
draw_string_set_color(&statistics_color_plain);
for (profile = 0; profile < NUMBER_OF_RASTERIZER_PROFILES; profile++)
{
@@ -747,27 +747,27 @@ void rasterizer_frame_statistics_draw(
if (profile_time >= 0.0f)
{
sprintf(string, "|t%s|t%.2f|t%d",
sprintf(frame_statistics_string, "|t%s|t%.2f|t%d",
rasterizer_profile_get_string(profile),
profile_time * 1000.0f,
rasterizer_profile_query_pushbuffer(profile));
}
else
{
sprintf(string, "|t%s|t----|t0",
sprintf(frame_statistics_string, "|t%s|t----|t0",
rasterizer_profile_get_string(profile));
}
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
}
sprintf(string, "|ttotal|t%.2f|t%d|n",
sprintf(frame_statistics_string, "|ttotal|t%.2f|t%d|n",
rasterizer_profile_query(NUMBER_OF_RASTERIZER_PROFILES) * 1000.0f,
rasterizer_profile_query_pushbuffer(NUMBER_OF_RASTERIZER_PROFILES));
draw_string_set_color(global_real_argb_yellow);
bounds.y0 += 4;
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
}
else if (rasterizer_debug_options.statistics_mode == _rasterizer_statistics_mode_memory)
@@ -801,45 +801,45 @@ void rasterizer_frame_statistics_draw(
tab_stops[0] = left;
tab_stops[1] = left + 300;
tab_stops[2] = 600;
sprintf(string, "|tallocation|tmemory usage (bytes)");
sprintf(frame_statistics_string, "|tallocation|tmemory usage (bytes)");
draw_string_set_tab_stops(tab_stops, 3);
draw_string_set_color(&header_color);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
draw_string_set_color(&statistics_color_bold);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
draw_string_set_color(&data_color);
draw_string_set_color(&statistics_color_plain);
for (report_index = 0; report_index < NUMBER_OF_MEMORY_USAGE_REPORTS; report_index++)
{
sprintf(string, "|t%s|t%d",
sprintf(frame_statistics_string, "|t%s|t%d",
memory_usage[report_index].name,
memory_usage[report_index].allocation);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
total_allocation += memory_usage[report_index].allocation;
total_unique_allocation +=
memory_usage[report_index].allocation - memory_usage[report_index].shared;
}
sprintf(string, "|n|ttotal|t%d (%d)", total_allocation, total_unique_allocation);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
sprintf(frame_statistics_string, "|n|ttotal|t%d (%d)", total_allocation, total_unique_allocation);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
GlobalMemoryStatus(&memory_status);
draw_string_set_color(&header_color);
draw_string_set_color(&statistics_color_bold);
sprintf(string, "|n|tsystem total|t%dKb", memory_status.dwTotalPhys >> 10);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
sprintf(frame_statistics_string, "|n|tsystem total|t%dKb", memory_status.dwTotalPhys >> 10);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
sprintf(string, "|tsystem available|t%dKb", memory_status.dwAvailPhys >> 10);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, string);
sprintf(frame_statistics_string, "|tsystem available|t%dKb", memory_status.dwAvailPhys >> 10);
rasterizer_draw_string(&bounds, NULL, &cursor, height_adjust, frame_statistics_string);
bounds.y0 = cursor.y + line_advance;
draw_string_set_color(&data_color);
draw_string_set_color(&statistics_color_plain);
}
draw_string_set_tab_stops(NULL, 0);
draw_string_set_color(&default_color);
draw_string_set_color(&white);
}
if (rasterizer_debug_options.profile_log_enabled)
+1 -22
View File
@@ -97,6 +97,7 @@ symbols in this file:
#include "cseries.h"
#include "cseries/errors.h"
#include "math/real_math.h"
#include "rasterizer/rasterizer_model_types.h"
#include "rasterizer_geometry.h"
#include "rasterizer_geometry_compression.h"
@@ -137,28 +138,6 @@ struct environment_lightmap_vertex_compressed
short lightmap_v;
};
struct model_vertex_uncompressed
{
real_point3d position;
real_vector3d normal;
real_vector3d binormal;
real_vector3d tangent;
real_point2d texcoord;
short nodes[2];
real node_weights[2];
};
struct model_vertex_compressed
{
real_point3d position;
unsigned long normal;
unsigned long binormal;
unsigned long tangent;
point2d texcoord;
byte nodes[2];
short node_weight;
};
/* ---------- globals */
static short const rasterizer_vertex_type_sizes[]=
+21 -21
View File
@@ -869,9 +869,9 @@ void rasterizer_lens_flares_draw(
LENS_FLARE_LIGHT_COLOR_ALPHA(lens_flare_parameters->compressed_light_color) > 0 &&
definition->reflections.count > 0)
{
real_point3d position = lens_flare_parameters->position;
real_vector3d camera_offset;
real_vector3d mirror;
real_point3d corona_position = lens_flare_parameters->position;
real_vector3d eye_to_corona_vector;
real_vector3d corona_axis;
real depth;
real occlusion_fraction;
real light_brightness;
@@ -885,13 +885,13 @@ void rasterizer_lens_flares_draw(
vector_from_points3d(
&global_window_parameters.camera.position,
&position,
&camera_offset);
depth = dot_product3d(&global_window_parameters.camera.forward, &camera_offset);
&corona_position,
&eye_to_corona_vector);
depth = dot_product3d(&global_window_parameters.camera.forward, &eye_to_corona_vector);
scale_vector3d(&global_window_parameters.camera.forward, depth, &mirror);
subtract_vectors3d(&mirror, &camera_offset, &mirror);
scale_vector3d(&mirror, 2.0f, &mirror);
scale_vector3d(&global_window_parameters.camera.forward, depth, &corona_axis);
subtract_vectors3d(&corona_axis, &eye_to_corona_vector, &corona_axis);
scale_vector3d(&corona_axis, 2.0f, &corona_axis);
occlusion_fraction = *occlusion_test_result*(1.0f/255.0f);
@@ -915,14 +915,14 @@ void rasterizer_lens_flares_draw(
definition->corona_rotation_function,
lens_flare_parameters)*definition->corona_rotation_function_scale;
screen_rotation = (real)atan2(
dot_product3d(&global_window_parameters.frustum.view_to_world.forward, &camera_offset),
dot_product3d(&global_window_parameters.frustum.view_to_world.left, &camera_offset))*(180.0f/((real)M_PI));
dot_product3d(&global_window_parameters.frustum.view_to_world.forward, &eye_to_corona_vector),
dot_product3d(&global_window_parameters.frustum.view_to_world.left, &eye_to_corona_vector))*(180.0f/((real)M_PI));
cosine_scale = 1.0f/
(definition->runtime_cosine_falloff_angle-definition->runtime_cosine_cutoff_angle);
cosine_offset = -(definition->runtime_cosine_cutoff_angle*cosine_scale);
normalize3d(&camera_offset);
normalize3d(&eye_to_corona_vector);
scale_functions[_lens_flare_reflection_scale_function_none] = 1.0f;
scale_functions[_lens_flare_reflection_scale_function_light_direction] = PIN(
@@ -930,11 +930,11 @@ void rasterizer_lens_flares_draw(
0.0f,
1.0f);
scale_functions[_lens_flare_reflection_scale_function_light_to_camera] = PIN(
-dot_product3d(&direction, &camera_offset)*cosine_scale+cosine_offset,
-dot_product3d(&direction, &eye_to_corona_vector)*cosine_scale+cosine_offset,
0.0f,
1.0f);
scale_functions[_lens_flare_reflection_scale_function_camera_direction] = PIN(
dot_product3d(&global_window_parameters.camera.forward, &camera_offset)*cosine_scale+cosine_offset,
dot_product3d(&global_window_parameters.camera.forward, &eye_to_corona_vector)*cosine_scale+cosine_offset,
0.0f,
1.0f);
@@ -964,7 +964,7 @@ void rasterizer_lens_flares_draw(
real radius = radius_lower_bound+
(reflection->radius_upper_bounds-radius_lower_bound)*light_scale;
real_argb_color color;
real_vector2d radius_scale;
real_vector2d scale;
real rotation;
pixel32 pixel;
real tint_factor;
@@ -1042,12 +1042,12 @@ void rasterizer_lens_flares_draw(
if (reflection_index == 0)
{
rotation = corona_rotation+reflection->rotation_offset;
radius_scale = definition->corona_radius_scale;
scale = definition->corona_radius_scale;
}
else
{
rotation = reflection->rotation_offset;
radius_scale.i = radius_scale.j = 1.0f;
scale.i = scale.j = 1.0f;
}
if (TEST_FLAG(reflection->flags, _lens_flare_reflection_rotate_from_center_of_screen_bit))
@@ -1067,9 +1067,9 @@ void rasterizer_lens_flares_draw(
real offset = reflection->offset;
real_point3d point;
point.x = offset*mirror.i + position.x;
point.y = offset*mirror.j + position.y;
point.z = offset*mirror.k + position.z;
point.x = offset*corona_axis.i + corona_position.x;
point.y = offset*corona_axis.j + corona_position.y;
point.z = offset*corona_axis.k + corona_position.z;
if (rasterizer_widget_set_texture(
0,
@@ -1092,7 +1092,7 @@ void rasterizer_lens_flares_draw(
rasterizer_widget_draw_sprite3d(
&point,
radius,
&radius_scale,
&scale,
rotation*(_pi/180.0f),
pixel);
}
+1 -1
View File
@@ -41,7 +41,7 @@ void rasterizer_lens_flares_submit_occlusion_tests(
void rasterizer_lens_flares_draw(
void);
void rasterizer_sun_glow_draw(
struct rasterizer_lens_flare_submit_parameters const *parameters);
struct rasterizer_lens_flare_submit_parameters const *flare);
/* ---------- globals */
+1 -1
View File
@@ -48,7 +48,7 @@ struct render_model_effect
real parameter;
long source_object_index;
real_point3d source_object_centroid;
struct shader const *modifier_shader;
struct shader *modifier_shader;
struct render_animation modifier_animation;
};
@@ -139,7 +139,6 @@ symbols in this file:
/* ---------- headers */
#define REAL_MATH_EXTERNAL_POINT_FROM_LINE3D
#define REAL_MATH_EXTERNAL_SCALE_VECTOR3D
#include "cseries.h"
#include "bitmaps/bitmaps.h"
#include "cseries/errors.h"
@@ -150,7 +149,6 @@ symbols in this file:
#include "math/periodic_functions.h"
#include "math/real_math.h"
#undef REAL_MATH_EXTERNAL_POINT_FROM_LINE3D
#undef REAL_MATH_EXTERNAL_SCALE_VECTOR3D
#include "rasterizer/rasterizer.h"
#include "rasterizer/rasterizer_console_vars.h"
#include "rasterizer/rasterizer_environment.h"
@@ -3255,13 +3253,12 @@ static void rasterizer_environment_specular_spot_light_begin(
rasterizer_debug_options.draw_environment_specular_lights)
{
struct rasterizer_light_submit_parameters *light;
real_matrix4x3 light_matrix;
long gel_bitmap_index;
real_vector3d forward;
real_vector3d side;
real_vector3d up;
real_vector4d vertex_constants[5];
real radius;
real inner_radius;
real cone_scale;
real_vector4d vertex_constants[5];
match_assert(
"c:\\halo\\SOURCE\\rasterizer\\xbox\\rasterizer_xbox_environment.c",
@@ -3277,32 +3274,34 @@ static void rasterizer_environment_specular_spot_light_begin(
if (gel_bitmap_index == NONE)
gel_bitmap_index = light->definition->gel.secondary_map.index;
forward = light->forward;
up = light->up;
normalize3d(cross_product3d(&forward, &up, &side));
light_matrix.forward = light->forward;
light_matrix.up = light->up;
cross_product3d(&light->forward, &light->up, &light_matrix.left);
normalize3d(&light_matrix.left);
radius = light->definition->geometry.specular_radius_multiplier * light->radius;
cone_scale = 1.0f / (radius - radius * 0.5f);
inner_radius = radius * 0.5f;
cone_scale = 1.0f / (radius - inner_radius);
vertex_constants[0].i = light->position.x;
vertex_constants[0].j = light->position.y;
vertex_constants[0].k = light->position.z;
vertex_constants[0].l = 0.5f / radius;
vertex_constants[1].i = -forward.i;
vertex_constants[1].j = -forward.j;
vertex_constants[1].k = -forward.k;
vertex_constants[1].i = -light_matrix.forward.i;
vertex_constants[1].j = -light_matrix.forward.j;
vertex_constants[1].k = -light_matrix.forward.k;
vertex_constants[1].l = 1.0f;
vertex_constants[2].i = -side.i;
vertex_constants[2].j = -side.j;
vertex_constants[2].k = -side.k;
vertex_constants[2].i = -light_matrix.left.i;
vertex_constants[2].j = -light_matrix.left.j;
vertex_constants[2].k = -light_matrix.left.k;
vertex_constants[2].l = 1.0f;
vertex_constants[3].i = -up.i;
vertex_constants[3].j = -up.j;
vertex_constants[3].k = -up.k;
vertex_constants[3].i = -light_matrix.up.i;
vertex_constants[3].j = -light_matrix.up.j;
vertex_constants[3].k = -light_matrix.up.k;
vertex_constants[3].l = 1.0f;
vertex_constants[4].i = forward.i * cone_scale;
vertex_constants[4].j = forward.j * cone_scale;
vertex_constants[4].k = forward.k * cone_scale;
vertex_constants[4].l = -(cone_scale * (radius * 0.5f));
vertex_constants[4].i = light_matrix.forward.i * cone_scale;
vertex_constants[4].j = light_matrix.forward.j * cone_scale;
vertex_constants[4].k = light_matrix.forward.k * cone_scale;
vertex_constants[4].l = -cone_scale * inner_radius;
D3DDevice_SetVertexShaderConstant(-81, vertex_constants, 5);
rasterizer_set_texture(1, 2, 1, gel_bitmap_index, 0);
@@ -134,6 +134,7 @@ symbols in this file:
#include "rasterizer/rasterizer_console_vars.h"
#include "rasterizer/common/rasterizer_common.h"
#include "rasterizer/rasterizer_geometry.h"
#include "rasterizer/rasterizer_model_types.h"
#include "rasterizer/rasterizer_transparent_geometry.h"
#include "render/render.h"
#include "shaders/shader_definitions.h"
@@ -299,31 +300,6 @@ struct shader_transparent_chicago_definition
struct tag_reference map;
};
struct rasterizer_model_effect_parameters
{
short type;
word pad02;
real intensity;
byte reserved08[4];
long source_object_index;
real_point3d centroid;
struct shader *shader;
struct render_animation animation;
};
struct rasterizer_model_begin_parameters
{
unsigned long geometry_flags;
long unique_identifier;
struct render_skinning skinning;
struct render_lighting lighting;
struct render_animation animation;
struct rasterizer_model_effect_parameters effect;
real_point3d centroid;
real radius;
real_vector2d base_map_scale;
};
struct transparent_geometry_group
{
unsigned long geometry_flags;
@@ -332,7 +308,7 @@ struct transparent_geometry_group
struct shader *shader;
short shader_permutation_index;
word pad12;
struct rasterizer_model_effect_parameters effect;
struct render_model_effect effect;
real_vector2d model_base_map_scale;
long dynamic_triangle_buffer_index;
struct triangle_buffer const *triangle_buffer;
+22 -22
View File
@@ -155,7 +155,7 @@ extern struct pixel_shader_definition pixel_shader;
/* ---------- public code */
void rasterizer_sun_glow_draw(
struct rasterizer_lens_flare_submit_parameters const *parameters)
struct rasterizer_lens_flare_submit_parameters const *flare)
{
real vertex_constants[5][4];
real_point3d occlusion_point;
@@ -163,8 +163,8 @@ void rasterizer_sun_glow_draw(
real_rectangle2d screen_bounds;
real brightness;
real_rectangle2d bounds;
real_vector2d projected_axes;
real_point3d projected_center;
real_vector2d axes;
real_point3d center;
real_vector3d direction;
real intensity;
short viewport_width;
@@ -180,9 +180,9 @@ void rasterizer_sun_glow_draw(
583,
global_d3d_device);
direction.i = parameters->position.x - global_window_parameters.camera.position.x;
direction.j = parameters->position.y - global_window_parameters.camera.position.y;
direction.k = parameters->position.z - global_window_parameters.camera.position.z;
direction.i = flare->position.x - global_window_parameters.camera.position.x;
direction.j = flare->position.y - global_window_parameters.camera.position.y;
direction.k = flare->position.z - global_window_parameters.camera.position.z;
normalize3d(&direction);
intensity =
@@ -235,22 +235,22 @@ void rasterizer_sun_glow_draw(
vertex_constants,
5);
direction = uncompress_int32_to_real_vector3d(parameters->compressed_direction);
occlusion_point.x = parameters->definition->occlusion_radius * direction.i +
parameters->position.x;
occlusion_point.y = parameters->definition->occlusion_radius * direction.j +
parameters->position.y;
occlusion_point.z = parameters->definition->occlusion_radius * direction.k +
parameters->position.z;
direction = uncompress_int32_to_real_vector3d(flare->compressed_direction);
occlusion_point.x = flare->definition->occlusion_radius * direction.i +
flare->position.x;
occlusion_point.y = flare->definition->occlusion_radius * direction.j +
flare->position.y;
occlusion_point.z = flare->definition->occlusion_radius * direction.k +
flare->position.z;
if (rasterizer_project_billboard(
&occlusion_point,
parameters->definition->occlusion_radius,
&projected_center,
&projected_axes))
flare->definition->occlusion_radius,
&center,
&axes))
{
center_x = (real)floor(projected_center.x + 0.5f);
center_y = (real)floor(projected_center.y + 0.5f);
center_x = (real)floor(center.x + 0.5f);
center_y = (real)floor(center.y + 0.5f);
bounds.x0 = center_x - 32.0f;
bounds.y0 = center_y - 32.0f;
@@ -398,7 +398,7 @@ void rasterizer_sun_glow_draw(
0,
bounds.x0,
bounds.y0,
projected_center.z,
center.z,
1.0f);
IDirect3DDevice8_SetVertexData2s(global_d3d_device, 4, 1, 0);
IDirect3DDevice8_SetVertexData4f(
@@ -406,7 +406,7 @@ void rasterizer_sun_glow_draw(
0,
bounds.x1,
bounds.y0,
projected_center.z,
center.z,
1.0f);
IDirect3DDevice8_SetVertexData2s(global_d3d_device, 4, 1, 1);
IDirect3DDevice8_SetVertexData4f(
@@ -414,7 +414,7 @@ void rasterizer_sun_glow_draw(
0,
bounds.x1,
bounds.y1,
projected_center.z,
center.z,
1.0f);
IDirect3DDevice8_SetVertexData2s(global_d3d_device, 4, 0, 1);
IDirect3DDevice8_SetVertexData4f(
@@ -422,7 +422,7 @@ void rasterizer_sun_glow_draw(
0,
bounds.x0,
bounds.y1,
projected_center.z,
center.z,
1.0f);
IDirect3DDevice8_End(global_d3d_device);
+18 -42
View File
@@ -117,6 +117,7 @@ symbols in this file:
#include <xtl.h>
#include "interface/progress_bar_internal.h"
#include "rasterizer/rasterizer_model_types.h"
#include "rasterizer/xbox/rasterizer_xbox.h"
#include "rasterizer/xbox/rasterizer_xbox_pixel_shader.h"
#include "rasterizer/xbox/rasterizer_xbox_draw_primitives.h"
@@ -209,31 +210,6 @@ enum
/* ---------- structures */
struct rasterizer_model_effect_parameters
{
short type;
word pad02;
real intensity;
byte reserved08[4];
long source_object_index;
real_point3d centroid;
struct shader *shader;
struct render_animation animation;
};
struct rasterizer_model_begin_parameters
{
unsigned long geometry_flags;
long unique_identifier;
struct render_skinning skinning;
struct render_lighting lighting;
struct render_animation animation;
struct rasterizer_model_effect_parameters effect;
real_point3d centroid;
real radius;
real_vector2d base_map_scale;
};
struct shader_model_properties
{
word flags;
@@ -305,7 +281,7 @@ struct transparent_geometry_group
struct shader *shader;
short shader_permutation_index;
word pad12;
struct rasterizer_model_effect_parameters effect;
struct render_model_effect effect;
real_vector2d model_base_map_scale;
long dynamic_triangle_buffer_index;
struct triangle_buffer const *triangle_buffer;
@@ -468,10 +444,10 @@ typedef char verify_shader_environment_cube_map_offset[
environment.reflection.cube_map) == 0x324 ? 1 : -1];
typedef char verify_rasterizer_model_parameters_effect_shader_offset[
offsetof(struct rasterizer_model_begin_parameters, effect.shader) == 0xA8
offsetof(struct rasterizer_model_begin_parameters, effect.modifier_shader) == 0xA8
? 1 : -1];
typedef char verify_rasterizer_model_parameters_effect_animation_offset[
offsetof(struct rasterizer_model_begin_parameters, effect.animation) == 0xAC
offsetof(struct rasterizer_model_begin_parameters, effect.modifier_animation) == 0xAC
? 1 : -1];
typedef char verify_rasterizer_models_statistics_vertex_shader_work_offset[
offsetof(
@@ -1665,16 +1641,16 @@ void _rasterizer_model_draw(
676,
shader);
if (local_parameters->effect.shader)
if (local_parameters->effect.modifier_shader)
{
intensity_exponent_source = NONE;
if (local_parameters->effect.shader->base.type ==
if (local_parameters->effect.modifier_shader->base.type ==
_shader_type_transparent_plasma)
{
plasma = (struct shader_transparent_plasma_definition const *)
shader_get_and_verify_type(
local_parameters->effect.shader,
local_parameters->effect.modifier_shader,
_shader_type_transparent_plasma);
intensity_exponent_source = plasma->intensity_exponent_source;
}
@@ -1682,12 +1658,12 @@ void _rasterizer_model_draw(
if (intensity_exponent_source < 1 ||
intensity_exponent_source >
NUMBER_OF_SHADER_ANIMATION_FUNCTIONS ||
!local_parameters->effect.animation.values ||
local_parameters->effect.animation.values[
!local_parameters->effect.modifier_animation.values ||
local_parameters->effect.modifier_animation.values[
intensity_exponent_source-1] != 0.0f)
{
group = _rasterizer_model_transparent_geometry_submit(
local_parameters->effect.shader,
local_parameters->effect.modifier_shader,
shader_permutation_index,
triangle_buffer,
dynamic_triangle_buffer_index,
@@ -1700,7 +1676,7 @@ void _rasterizer_model_draw(
if (group)
{
group->animation = rasterizer_memory_alloc(
&local_parameters->effect.animation,
&local_parameters->effect.modifier_animation,
sizeof(struct render_animation));
}
}
@@ -2474,7 +2450,7 @@ struct transparent_geometry_group *_rasterizer_model_transparent_geometry_submit
struct transparent_geometry_group *group;
unsigned long geometry_flags;
real_vector3d relative_centroid;
real_plane3d plane;
real_plane3d zero_plane;
boolean alpha_blended_decal;
boolean submit_decals;
@@ -2578,10 +2554,10 @@ struct transparent_geometry_group *_rasterizer_model_transparent_geometry_submit
if (group)
{
plane.n.i = 0.0f;
plane.n.j = 0.0f;
plane.n.k = 0.0f;
plane.d = 0.0f;
zero_plane.n.i = 0.0f;
zero_plane.n.j = 0.0f;
zero_plane.n.k = 0.0f;
zero_plane.d = 0.0f;
group->geometry_flags = geometry_flags;
group->object_index = local_parameters->unique_identifier;
@@ -2598,7 +2574,7 @@ struct transparent_geometry_group *_rasterizer_model_transparent_geometry_submit
local_parameters->effect.source_object_index!=0);
group->source_object_index =
local_parameters->effect.source_object_index;
group->centroid = local_parameters->effect.centroid;
group->centroid = local_parameters->effect.source_object_centroid;
}
group->shader = shader;
group->shader_permutation_index = shader_permutation_index;
@@ -2617,7 +2593,7 @@ struct transparent_geometry_group *_rasterizer_model_transparent_geometry_submit
group->z_sort = -dot_product3d(
&global_window_parameters.camera.forward,
&relative_centroid);
group->plane = plane;
group->plane = zero_plane;
group->model_base_map_scale.i = local_parameters->base_map_scale.i;
group->model_base_map_scale.j = local_parameters->base_map_scale.j;
group->previous_group_presorted_index = NONE;
@@ -84,6 +84,7 @@ symbols in this file:
* replace these wrappers with handwritten bodies. */
#include "rasterizer/rasterizer.h"
#include "rasterizer/rasterizer_console_vars.h"
#include "rasterizer/rasterizer_model_types.h"
#include <xtl.h>
#include "rasterizer/xbox/rasterizer_xbox.h"
#include "rasterizer/xbox/rasterizer_xbox_pixel_shader.h"
@@ -133,32 +134,6 @@ enum
/* ---------- structures */
struct rasterizer_model_lighting_parameters
{
byte data[0x74];
};
struct rasterizer_model_effect_parameters
{
short type;
word pad02;
real intensity;
byte reserved08[0x20];
};
struct rasterizer_model_begin_parameters
{
unsigned long geometry_flags;
long unique_identifier;
struct render_skinning skinning;
struct rasterizer_model_lighting_parameters lighting;
struct render_animation animation;
struct rasterizer_model_effect_parameters effect;
real_point3d centroid;
real radius;
real_vector2d base_map_scale;
};
struct shader_model_definition
{
struct shader shader;
+33 -33
View File
@@ -1123,10 +1123,10 @@ void render_camera_build_frustum(
real field_of_view_tangent;
real projection_x_scale;
real projection_y_scale;
real_vector3d view_left;
real_vector3d view_up;
real_vector3d view_backward;
real_vector3d plane_normal;
real_vector3d x_axis;
real_vector3d y_axis;
real_vector3d z_axis;
real_vector3d viewspace_normal;
real_plane3d view_plane;
real left_plane_z;
real bottom_plane_z;
@@ -1209,15 +1209,15 @@ void render_camera_build_frustum(
436,
camera->viewport_bounds.y0<camera->viewport_bounds.y1);
cross_product3d(&camera->forward, &camera->up, &view_left);
cross_product3d(&view_left, &camera->forward, &view_up);
negate_vector3d(&camera->forward, &view_backward);
normalize3d(&view_left);
normalize3d(&view_up);
normalize3d(&view_backward);
frustum->view_to_world.forward = view_left;
frustum->view_to_world.left = view_up;
frustum->view_to_world.up = view_backward;
cross_product3d(&camera->forward, &camera->up, &x_axis);
cross_product3d(&x_axis, &camera->forward, &y_axis);
negate_vector3d(&camera->forward, &z_axis);
normalize3d(&x_axis);
normalize3d(&y_axis);
normalize3d(&z_axis);
frustum->view_to_world.forward = x_axis;
frustum->view_to_world.left = y_axis;
frustum->view_to_world.up = z_axis;
frustum->view_to_world.position = camera->position;
frustum->view_to_world.scale = 1.0f;
matrix4x3_inverse(&frustum->view_to_world, &frustum->world_to_view);
@@ -1230,43 +1230,43 @@ void render_camera_build_frustum(
459,
valid_real_matrix4x3(&frustum->view_to_world));
plane_normal.i = -projection_x_scale;
plane_normal.j = 0.0f;
viewspace_normal.i = -projection_x_scale;
viewspace_normal.j = 0.0f;
left_plane_z = bounds_center_x + 1.0f;
plane_normal.k = left_plane_z;
normalize3d(&plane_normal);
plane3d_from_point_and_normal(&view_plane, global_origin3d, &plane_normal);
viewspace_normal.k = left_plane_z;
normalize3d(&viewspace_normal);
plane3d_from_point_and_normal(&view_plane, global_origin3d, &viewspace_normal);
matrix4x3_transform_plane(
&frustum->view_to_world,
&view_plane,
&frustum->world_planes[_render_frustum_plane_left]);
plane_normal.i = projection_x_scale;
plane_normal.j = 0.0f;
plane_normal.k = 1.0f - bounds_center_x;
normalize3d(&plane_normal);
plane3d_from_point_and_normal(&view_plane, global_origin3d, &plane_normal);
viewspace_normal.i = projection_x_scale;
viewspace_normal.j = 0.0f;
viewspace_normal.k = 1.0f - bounds_center_x;
normalize3d(&viewspace_normal);
plane3d_from_point_and_normal(&view_plane, global_origin3d, &viewspace_normal);
matrix4x3_transform_plane(
&frustum->view_to_world,
&view_plane,
&frustum->world_planes[_render_frustum_plane_right]);
plane_normal.i = 0.0f;
plane_normal.j = -projection_y_scale;
viewspace_normal.i = 0.0f;
viewspace_normal.j = -projection_y_scale;
bottom_plane_z = bounds_center_y + 1.0f;
plane_normal.k = bottom_plane_z;
normalize3d(&plane_normal);
plane3d_from_point_and_normal(&view_plane, global_origin3d, &plane_normal);
viewspace_normal.k = bottom_plane_z;
normalize3d(&viewspace_normal);
plane3d_from_point_and_normal(&view_plane, global_origin3d, &viewspace_normal);
matrix4x3_transform_plane(
&frustum->view_to_world,
&view_plane,
&frustum->world_planes[_render_frustum_plane_bottom]);
plane_normal.i = 0.0f;
plane_normal.j = projection_y_scale;
plane_normal.k = 1.0f - bounds_center_y;
normalize3d(&plane_normal);
plane3d_from_point_and_normal(&view_plane, global_origin3d, &plane_normal);
viewspace_normal.i = 0.0f;
viewspace_normal.j = projection_y_scale;
viewspace_normal.k = 1.0f - bounds_center_y;
normalize3d(&viewspace_normal);
plane3d_from_point_and_normal(&view_plane, global_origin3d, &viewspace_normal);
matrix4x3_transform_plane(
&frustum->view_to_world,
&view_plane,
+1 -12
View File
@@ -111,6 +111,7 @@ symbols in this file:
#include "tag_files/tag_files.h"
#include "saved games/game_state.h"
#include "rasterizer/rasterizer_console_vars.h"
#include "rasterizer/rasterizer_model_types.h"
/* ---------- constants */
@@ -157,18 +158,6 @@ enum
/* ---------- structures */
struct render_model_effect
{
short type;
word pad;
real intensity;
real parameter;
long source_object_index;
real_point3d source_object_centroid;
struct shader const *modifier_shader;
struct render_animation modifier_animation;
};
struct object_render_data
{
long object_index;
+46 -50
View File
@@ -135,22 +135,6 @@ struct build_sprite_vertex
typedef char build_sprite_vertex_size_assert[
sizeof(struct build_sprite_vertex) == 0x18 ? 1 : -1];
struct build_sprite_globals_data
{
boolean initialized;
boolean debug_flag;
word pad02;
real screen_coverage;
short big_sprite_count;
word pad0A;
real screen_area_scale;
real_vector3d viewer_space_world_up;
real_vector3d viewer_space_world_forward;
};
typedef char build_sprite_globals_data_size_assert[
sizeof(struct build_sprite_globals_data) == 0x28 ? 1 : -1];
/* ---------- prototypes */
static void build_sprite_transform_origin_and_direction(
@@ -180,8 +164,20 @@ static void build_sprite_compute_basis(
/* ---------- globals */
extern boolean debug_sprites;
extern struct build_sprite_globals_data build_sprite_globals;
boolean debug_sprites;
struct
{
boolean initialized;
boolean debug_flag;
real screen_coverage;
short big_sprite_count;
real screen_area_scale;
real_vector3d viewer_space_world_up;
real_vector3d viewer_space_world_forward;
} build_sprite_globals;
typedef char build_sprite_globals_data_size_assert[
sizeof(build_sprite_globals) == 0x28 ? 1 : -1];
/* name from the 2003 PC demo PDB and the HCEX PDB (file static char *[3]); January's three pointers
* name the same strings in the same order, followed by the enum definition at +0xC as in the demo */
@@ -404,9 +400,9 @@ void build_sprite(
short vertex_index = NUMBER_OF_VERTICES_PER_QUADRILATERAL*group->sprite_count;
real rotation_sine = 0.f;
real rotation_cosine = 1.f;
real_rectangle3d bounds = *global_null_rectangle3d;
real_rectangle3d bounding_rectangle = *global_null_rectangle3d;
real_point3d transformed_origin;
real_vector3d transformed_direction;
real_vector3d direction;
real_matrix4x3 basis;
pixel32 pixel;
real alpha;
@@ -424,13 +420,13 @@ void build_sprite(
untransformed_origin,
untransformed_direction,
&transformed_origin,
&transformed_direction);
&direction);
build_sprite_compute_basis(
data,
mode,
flags,
&transformed_origin,
&transformed_direction,
&direction,
&basis);
build_sprite_compute_scale(data, mode, flags, &transformed_origin, bitmap, &scale);
@@ -499,18 +495,18 @@ void build_sprite(
transformed_origin.y;
point.z = (basis.forward.k*x + basis.left.k*y)*scale +
transformed_origin.z;
if (point.x<bounds.x0)
bounds.x0 = point.x;
if (point.x>bounds.x1)
bounds.x1 = point.x;
if (point.y<bounds.y0)
bounds.y0 = point.y;
if (point.y>bounds.y1)
bounds.y1 = point.y;
if (point.z<bounds.z0)
bounds.z0 = point.z;
if (point.z>bounds.z1)
bounds.z1 = point.z;
if (point.x<bounding_rectangle.x0)
bounding_rectangle.x0 = point.x;
if (point.x>bounding_rectangle.x1)
bounding_rectangle.x1 = point.x;
if (point.y<bounding_rectangle.y0)
bounding_rectangle.y0 = point.y;
if (point.y>bounding_rectangle.y1)
bounding_rectangle.y1 = point.y;
if (point.z<bounding_rectangle.z0)
bounding_rectangle.z0 = point.z;
if (point.z>bounding_rectangle.z1)
bounding_rectangle.z1 = point.z;
sprite_vertex->point = point;
sprite_vertex->texture_coordinates.x = u;
sprite_vertex->texture_coordinates.y = v;
@@ -527,7 +523,7 @@ void build_sprite(
if (!TEST_FLAG(data->flags, _build_sprites_screen_space_bit))
{
real coverage = render_frustum_cube_view_fraction(&render.frustum, &bounds);
real coverage = render_frustum_cube_view_fraction(&render.frustum, &bounding_rectangle);
build_sprite_globals.screen_coverage += coverage;
if (coverage>0.5f && build_sprite_globals.big_sprite_count++>10)
@@ -582,7 +578,7 @@ void build_sprite(
void build_sprite_rotational(
struct build_sprite_data *data,
unsigned long flags,
short sequence_index,
short first_sequence_index,
short sprite_index,
real_point3d const *untransformed_origin,
real_vector3d const *untransformed_axis_of_rotation,
@@ -591,8 +587,8 @@ void build_sprite_rotational(
real_argb_color const *color,
real fade)
{
real_point3d transformed_origin;
real_vector3d transformed_axis_of_rotation;
real_point3d origin;
real_vector3d axis_of_rotation;
real const quarter_circle = _pi/2;
real fraction;
real angle;
@@ -613,12 +609,12 @@ void build_sprite_rotational(
flags & FLAG(_build_sprite_rotational_viewer_space_bit),
untransformed_origin,
untransformed_axis_of_rotation,
&transformed_origin,
&transformed_axis_of_rotation);
&origin,
&axis_of_rotation);
angle = angle_between_vectors3d(
(real_vector3d const *)&transformed_origin,
&transformed_axis_of_rotation) - quarter_circle;
(real_vector3d const *)&origin,
&axis_of_rotation) - quarter_circle;
fraction = angle*angle/(quarter_circle*quarter_circle);
fraction = PIN(fraction, 0.f, 1.f);
@@ -626,7 +622,7 @@ void build_sprite_rotational(
{
struct bitmap_group_sequence *sequence = TAG_BLOCK_GET_ELEMENT(
&bitmap_group_get(data->bitmap_group_index)->sequences,
sequence_index+1,
first_sequence_index+1,
struct bitmap_group_sequence);
short sprite_count = (short)sequence->sprites.count;
unsigned long edge_flags = FLAG(_build_sprite_viewer_space_bit);
@@ -652,9 +648,9 @@ void build_sprite_rotational(
build_sprite(
data,
_build_sprite_normal,
sequence_index+1,
first_sequence_index+1,
edge_sprite_index,
&transformed_origin,
&origin,
NULL,
sprite_rotation,
scale,
@@ -668,22 +664,22 @@ void build_sprite_rotational(
{
struct bitmap_group_sequence *sequence = TAG_BLOCK_GET_ELEMENT(
&bitmap_group_get(data->bitmap_group_index)->sequences,
sequence_index,
first_sequence_index,
struct bitmap_group_sequence);
short sprite_count = (short)sequence->sprites.count;
build_sprite(
data,
_build_sprite_normal,
sequence_index,
first_sequence_index,
(short)fmod(
sprite_count*one_over_full_circle*rotation + 0.5f,
(real)sprite_count),
&transformed_origin,
&origin,
NULL,
arctangent(
transformed_axis_of_rotation.j,
transformed_axis_of_rotation.i),
axis_of_rotation.j,
axis_of_rotation.i),
scale,
color,
fraction*fade,
+1 -1
View File
@@ -110,7 +110,7 @@ real build_sprite_compute_vertex_fade(
void build_sprite_rotational(
struct build_sprite_data *data,
unsigned long flags,
short sequence_index,
short first_sequence_index,
short sprite_index,
real_point3d const *untransformed_origin,
real_vector3d const *untransformed_axis_of_rotation,
+10 -10
View File
@@ -395,7 +395,7 @@ long player_profile_new(
short local_player_index,
wchar_t *name)
{
struct file_reference file;
struct file_reference profile_file;
long player_profile_index = create_enumerated_saved_game_file(
_saved_game_file_type_player_profile,
local_player_index,
@@ -403,7 +403,7 @@ long player_profile_new(
if (player_profile_index != NONE)
{
if (saved_game_file_open(&file, player_profile_index))
if (saved_game_file_open(&profile_file, player_profile_index))
{
struct player_profile_file_block block = {0};
struct player_profile *profile = &block.profile;
@@ -441,9 +441,9 @@ long player_profile_new(
saved_game_file_generate_checksum(&block.profile, sizeof(block.profile),
&block.checksum);
succeeded = file_set_position(&file, 0) &&
file_write(&file, sizeof(block), &block);
saved_game_file_close(&file, player_profile_index);
succeeded = file_set_position(&profile_file, 0) &&
file_write(&profile_file, sizeof(block), &block);
saved_game_file_close(&profile_file, player_profile_index);
if (!succeeded)
{
@@ -848,15 +848,15 @@ static void player_profile_create_default_profiles_on_disk(
for (i = 0; i < NUMBER_OF_DEFAULT_PROFILES; i++)
{
struct player_profile_file_block block = {0};
char path[MAXIMUM_FILENAME_LENGTH+1];
char full_path[MAXIMUM_FILENAME_LENGTH+1];
struct file_reference file;
boolean succeeded = FALSE;
build_default_profile(&block.profile, i);
_snprintf(path, MAXIMUM_FILENAME_LENGTH, "z:\\saved\\player_profiles\\default_profile\\%02d.sav", i);
_snprintf(full_path, MAXIMUM_FILENAME_LENGTH, "z:\\saved\\player_profiles\\default_profile\\%02d.sav", i);
if (file_reference_create_from_path(&file, path, FALSE))
if (file_reference_create_from_path(&file, full_path, FALSE))
{
saved_game_file_generate_checksum(&block.profile, sizeof(block.profile),
&block.checksum);
@@ -872,7 +872,7 @@ static void player_profile_create_default_profiles_on_disk(
error(
_error_silent,
"failed to close default player profile file '%s'",
path);
full_path);
}
}
}
@@ -882,7 +882,7 @@ static void player_profile_create_default_profiles_on_disk(
error(
_error_silent,
"failed to create/update default player profile file '%s' on disk",
path);
full_path);
}
}
+9
View File
@@ -315,6 +315,15 @@ struct scenario
struct tag_block structure_bsp_references; // scenario_structure_bsp_reference
};
struct scenario_cutscene_flag
{
long runtime_unused;
char name[TAG_STRING_LENGTH];
real_point3d position;
real_euler_angles2d facing;
byte unused[0x24];
};
/* ---------- prototypes/EXAMPLE.C */
/* ---------- globals */
+14 -18
View File
@@ -59,7 +59,6 @@ symbols in this file:
struct wind_state
{
boolean valid;
byte pad[3];
real velocity_variance;
real_euler_angles2d angular_variance;
real velocity;
@@ -69,20 +68,6 @@ struct wind_state
typedef char wind_state_size_assert[
sizeof(struct wind_state) == 0x20 ? 1 : -1];
struct wind_globals
{
boolean initialized;
byte pad[3];
real_vector3d variance[3][64];
short count;
word pad2;
struct wind_state states[32];
long time;
};
typedef char wind_globals_size_assert[
sizeof(struct wind_globals) == 0xD0C ? 1 : -1];
struct structure_weather_palette_entry
{
char name[32];
@@ -128,7 +113,18 @@ void uniform_cubic_spline_vector3d(
/* ---------- globals */
extern struct wind_globals wind_globals;
struct
{
boolean initialized;
real_vector3d variance[3][64];
short count;
struct wind_state wind_states[32];
long time;
} wind_globals;
typedef char wind_globals_size_assert[
sizeof(wind_globals) == 0xD0C ? 1 : -1];
long global_environment_index = NONE;
/* ---------- public code */
@@ -209,7 +205,7 @@ void wind_update(
weather_palette_block,
weather_palette_index,
struct structure_weather_palette_entry);
struct wind_state *state = &wind_globals.states[weather_palette_index];
struct wind_state *state = &wind_globals.wind_states[weather_palette_index];
if (weather_palette->wind.index != NONE)
{
@@ -282,7 +278,7 @@ void scenario_get_current_from_weather_palette(
if (VALID_INDEX(weather_palette_index, wind_globals.count))
{
state = &wind_globals.states[weather_palette_index];
state = &wind_globals.wind_states[weather_palette_index];
if (state->valid)
{
struct structure_weather_palette_entry *weather_palette =
+23 -24
View File
@@ -125,12 +125,11 @@ enum
/* ---------- structures */
struct sound_class_runtime
struct sound_class_datum
{
real target_gain;
real current_gain;
short interpolation_ticks;
short pad;
real desired_gain;
real gain;
short ticks;
};
typedef char verify_sound_class_definition_size[
@@ -140,7 +139,7 @@ typedef char verify_sound_class_definition_size[
/* ---------- globals */
extern struct sound_class_runtime *sound_class_data;
struct sound_class_datum *sound_class_data;
struct sound_class_definition sound_classes[NUMBER_OF_SOUND_CLASSES] =
{
SOUND_CLASS_DEFINITION(6, 4, 100, 0, 4, 0, 0.5f, 1.4f, 8.f, 1.f, 1.f, 0),
@@ -264,7 +263,7 @@ void sound_classes_dispose(
return;
}
static struct sound_class_runtime *sound_class_datum_get(
static struct sound_class_datum *sound_class_datum_get(
short index)
{
match_assert(
@@ -282,7 +281,7 @@ static struct sound_class_runtime *sound_class_datum_get(
real sound_class_get_gain(
short index)
{
return sound_class_datum_get(index)->current_gain;
return sound_class_datum_get(index)->gain;
}
void debug_sound_classes_enable(
@@ -340,11 +339,11 @@ void sound_classes_initialize_for_new_map(
for (class_index = 0; class_index < NUMBER_OF_SOUND_CLASSES; class_index++)
{
struct sound_class_runtime *sound_class = sound_class_datum_get(class_index);
struct sound_class_datum *sound_class = sound_class_datum_get(class_index);
sound_class->current_gain = 1.f;
sound_class->target_gain = 1.f;
sound_class->interpolation_ticks = 0;
sound_class->gain = 1.f;
sound_class->desired_gain = 1.f;
sound_class->ticks = 0;
}
return;
@@ -359,19 +358,19 @@ void sound_classes_update(
for (class_index = 0; class_index < NUMBER_OF_SOUND_CLASSES; class_index++)
{
struct sound_class_runtime *sound_class = sound_class_datum_get(class_index);
if (sound_class->interpolation_ticks > ticks)
struct sound_class_datum *sound_class = sound_class_datum_get(class_index);
if (sound_class->ticks > ticks)
{
sound_class->current_gain =
(real)ticks / sound_class->interpolation_ticks *
(sound_class->target_gain - sound_class->current_gain) +
sound_class->current_gain;
sound_class->interpolation_ticks -= ticks;
sound_class->gain =
(real)ticks / sound_class->ticks *
(sound_class->desired_gain - sound_class->gain) +
sound_class->gain;
sound_class->ticks -= ticks;
}
else
{
sound_class->current_gain = sound_class->target_gain;
sound_class->interpolation_ticks = 0;
sound_class->gain = sound_class->desired_gain;
sound_class->ticks = 0;
}
}
}
@@ -418,10 +417,10 @@ void sound_class_set_gain(
{
if ((*sound_class_name)[0] && strstr(*sound_class_name, name))
{
struct sound_class_runtime *sound_class = sound_class_datum_get(class_index);
struct sound_class_datum *sound_class = sound_class_datum_get(class_index);
sound_class->target_gain = PIN(gain, 0.f, 1.f);
sound_class->interpolation_ticks =
sound_class->desired_gain = PIN(gain, 0.f, 1.f);
sound_class->ticks =
interpolation_ticks < 0 ? 0 : interpolation_ticks;
}
class_index++;
+7 -5
View File
@@ -705,11 +705,11 @@ static void prioritize_sounds(
/* ---------- globals */
extern struct data_array *looping_sound_data;
extern struct data_array *sound_data;
extern struct sound_channel_datum sound_channels[MAXIMUM_SOUND_CHANNELS];
extern boolean loud_dialog_hack;
extern boolean debug_looping_sound;
struct data_array *looping_sound_data;
struct data_array *sound_data;
struct sound_channel_datum sound_channels[MAXIMUM_SOUND_CHANNELS];
boolean loud_dialog_hack;
boolean debug_looping_sound;
static real const sound_pitch_range_fade_time = 0.5f;
static real const sound_inaudible_fade_out_time = 2.f;
@@ -729,6 +729,8 @@ static struct profile_section sound_render_section =
{"sound_render", NONE, TRUE};
real sound_fade_exponent = 2.5f;
static struct sound_manager_globals sound_manager_globals = { 0 };
boolean debug_sound;
boolean debug_sound_channels;
/* ---------- public code */
+1
View File
@@ -224,6 +224,7 @@ static struct profile_section render_structure_shadows_draw_section =
{ "render_structure_shadows_draw", NONE, TRUE };
static short report_dynamic_structure_triangle_failure = TRUE;
boolean debug_leaf_portals;
/* ---------- public code */
+14 -14
View File
@@ -227,7 +227,7 @@ typedef char verify_structure_runtime_globals_size[
static struct structure_runtime_globals structure_globals;
extern boolean debug_fog_planes;
boolean debug_fog_planes;
/* ---------- public code */
@@ -327,7 +327,7 @@ boolean structure_cluster_mark(
boolean sphere_intersects_cluster_portal(
struct structure_bsp *structure,
short portal_index,
real_point3d const *position,
real_point3d const *point,
real radius)
{
struct structure_cluster_portal *portal = TAG_BLOCK_GET_ELEMENT(
@@ -341,17 +341,17 @@ boolean sphere_intersects_cluster_portal(
struct collision_bsp)->bsp3d.planes,
portal->plane_index,
real_plane3d);
real plane_distance = plane3d_distance_to_point(collision_plane, position);
real_point2d projected_vertices[MAXIMUM_VERTICES_PER_CLUSTER_PORTAL];
real_point3d projected_position;
real_point2d projected_position2d;
real plane_distance = plane3d_distance_to_point(collision_plane, point);
real_point2d projected_points[MAXIMUM_VERTICES_PER_CLUSTER_PORTAL];
real_point3d projected_centroid3d;
real_point2d projected_centroid2d;
real_vector3d const *plane_normal;
short projection;
boolean projection_sign;
short vertex_index;
if (fabs(plane_distance) < radius &&
distance_squared3d(position, &portal->centroid) <
distance_squared3d(point, &portal->centroid) <
(portal->bounding_radius + radius) * (portal->bounding_radius + radius))
{
plane_normal = &TAG_BLOCK_GET_ELEMENT(
@@ -361,15 +361,15 @@ boolean sphere_intersects_cluster_portal(
projection = projection_from_vector3d(plane_normal);
projection_sign = projection_sign_from_vector3d(plane_normal, projection);
point_from_line3d(
position,
point,
plane_normal,
-plane_distance,
&projected_position);
&projected_centroid3d);
project_point3d(
&projected_position,
&projected_centroid3d,
projection,
projection_sign,
&projected_position2d);
&projected_centroid2d);
for (vertex_index = 0;
vertex_index < portal->vertices.count;
@@ -382,13 +382,13 @@ boolean sphere_intersects_cluster_portal(
real_point3d),
projection,
projection_sign,
&projected_vertices[vertex_index]);
&projected_points[vertex_index]);
}
if (convex_hull2d_test_circle(
(short)portal->vertices.count,
projected_vertices,
&projected_position2d,
projected_points,
&projected_centroid2d,
square_root(radius * radius - plane_distance * plane_distance)))
{
return TRUE;
+6 -6
View File
@@ -1471,8 +1471,8 @@ void bitmap_draw_string(
rectangle2d const *clip,
char const *string)
{
rectangle2d bitmap_bounds;
rectangle2d bitmap_clip;
rectangle2d adjusted_bounds;
rectangle2d adjusted_clip;
rectangle2d const *effective_bounds = bounds;
short format = bitmap->format;
@@ -1494,23 +1494,23 @@ void bitmap_draw_string(
if (!effective_bounds)
{
set_rectangle2d(
&bitmap_bounds,
&adjusted_bounds,
0,
0,
bitmap->width,
bitmap->height);
effective_bounds = &bitmap_bounds;
effective_bounds = &adjusted_bounds;
}
if (clip)
{
set_rectangle2d(
&bitmap_clip,
&adjusted_clip,
MAX(clip->x0, 0),
MAX(clip->y0, 0),
MIN(clip->x1, bitmap->width),
MIN(clip->y1, bitmap->height));
clip = &bitmap_clip;
clip = &adjusted_clip;
}
draw_string(
+48 -48
View File
@@ -914,10 +914,10 @@ static void biped_start_landing(
}
void biped_adjust_placement(
long biped_index,
long object_index,
struct object_placement_data *data)
{
struct biped_datum *biped = biped_get(biped_index);
struct biped_datum *biped = biped_get(object_index);
struct biped_definition *definition = biped_definition_get(biped->definition_index);
unsigned long flags = definition->biped.flags;
@@ -1650,24 +1650,24 @@ void biped_accelerate(
TEST_FLAG(definition->biped.flags, _biped_flying_bit) ||
TEST_FLAG(definition->biped.flags, _biped_climbs_anything_bit))
{
real_vector3d axis;
real_vector3d angular_acceleration_axis;
real scale;
cross_product3d(global_up3d, acceleration, &axis);
normalize3d(&axis);
cross_product3d(global_up3d, acceleration, &angular_acceleration_axis);
normalize3d(&angular_acceleration_axis);
scale = real_random()*magnitude3d(acceleration)*(_pi/2);
biped->object.angular_velocity.i += axis.i*scale;
biped->object.angular_velocity.j += axis.j*scale;
biped->object.angular_velocity.k += axis.k*scale;
biped->object.angular_velocity.i += angular_acceleration_axis.i*scale;
biped->object.angular_velocity.j += angular_acceleration_axis.j*scale;
biped->object.angular_velocity.k += angular_acceleration_axis.k*scale;
}
if (biped->object.parent_object_index==NONE)
{
real_vector3d forward = *acceleration;
real_vector3d new_forward = *acceleration;
if (normalize3d(&forward)>0.f)
if (normalize3d(&new_forward)>0.f)
{
biped->object.forward = forward;
biped->object.forward = new_forward;
biped_snap_facing(biped_index);
biped_verify_object_vectors(biped_index, "post-accel");
}
@@ -3190,7 +3190,7 @@ static void biped_update_turning(
real target_bank;
real bank_blend;
real bank_time;
real_rectangle2d aiming_bounds;
real_rectangle2d facing_bounds;
real angular_velocity_limit;
real angular_acceleration_limit;
@@ -3259,10 +3259,10 @@ static void biped_update_turning(
biped->biped.bank = target_bank;
}
aiming_bounds.x0 = -_pi;
aiming_bounds.x1 = _pi;
aiming_bounds.y0 = -_pi/2.f;
aiming_bounds.y1 = _pi/2.f;
facing_bounds.x0 = -_pi;
facing_bounds.x1 = _pi;
facing_bounds.y0 = -_pi/2.f;
facing_bounds.y1 = _pi/2.f;
angular_velocity_limit =
definition->biped.flying_angular_velocity/TICKS_PER_SECOND;
angular_acceleration_limit =
@@ -3279,7 +3279,7 @@ static void biped_update_turning(
&biped->object.forward,
&target_facing,
&biped->object.angular_velocity,
&aiming_bounds,
&facing_bounds,
angular_velocity_limit,
angular_acceleration_limit);
}
@@ -3706,7 +3706,7 @@ static void biped_update_moving(
&scenario_get_game_globals()->player_information,
0,
struct game_globals_player_information);
struct game_globals_player_information old_player_information;
struct game_globals_player_information player_information_block;
real body_stun_scale = 1.f;
real crouch;
real uncrouch;
@@ -3720,13 +3720,13 @@ static void biped_update_moving(
definition->biped.flags,
_biped_uses_old_player_physics_bit))
{
old_player_information = *player_information;
player_information = &old_player_information;
old_player_information.walking_speed = 0.51200002f;
old_player_information.run_forward_speed = 2.25f;
old_player_information.run_backward_speed = 2.f;
old_player_information.run_sideways_speed = 2.f;
old_player_information.run_acceleration = 0.31999999f;
player_information_block = *player_information;
player_information = &player_information_block;
player_information_block.walking_speed = 0.51200002f;
player_information_block.run_forward_speed = 2.25f;
player_information_block.run_backward_speed = 2.f;
player_information_block.run_sideways_speed = 2.f;
player_information_block.run_acceleration = 0.31999999f;
}
if (biped->unit.player_index != NONE)
@@ -3944,19 +3944,19 @@ static void biped_update_moving(
}
{
real_point3d new_position = physics.new_position;
real_point3d new_biped_position = physics.new_position;
word out_flags = physics.out_flags;
if (!TEST_FLAG(
definition->biped.flags,
_biped_pill_centered_at_origin_bit))
{
new_position.z -= physics.width;
new_biped_position.z -= physics.width;
}
object_translate(biped_index, &new_position, NULL);
object_translate(biped_index, &new_biped_position, NULL);
biped->biped.support_surface_index = physics.support_surface_index;
biped->biped.pathfinding_point = new_position;
biped->biped.pathfinding_point = new_biped_position;
biped->biped.pathfinding_surface_index = NONE;
biped->object.translational_velocity = physics.new_velocity;
if (!animation->crouching &&
@@ -4012,8 +4012,8 @@ static void biped_update_moving(
target->object.bounding_sphere_radius))
{
struct collision_model_instance instance;
struct collision_model_test_vector_result model_result;
struct collision_result world_collision;
struct collision_model_test_vector_result vector_result;
struct collision_result collision;
if (collision_model_instance_new(
&instance,
@@ -4024,37 +4024,37 @@ static void biped_update_moving(
FLAG(_collision_test_back_facing_surfaces_bit),
&physics.position,
&melee_vector,
&model_result) &&
&vector_result) &&
!collision_test_vector(
_collision_test_for_bipeds_passthrough_living_flags,
&physics.position,
&melee_vector,
biped_index,
&world_collision))
&collision))
{
real_point3d impact_point;
real_plane3d impact_plane;
real_point3d collision_point;
real_plane3d collision_plane;
point_from_line3d(
&physics.position,
&melee_vector,
model_result.bsp_result.t,
&impact_point);
vector_result.bsp_result.t,
&collision_point);
matrix4x3_transform_plane(
&instance.matrices[model_result.node_index],
model_result.bsp_result.plane,
&impact_plane);
if (model_result.bsp_result.plane_designator < 0)
plane3d_negate(&impact_plane, &impact_plane);
&instance.matrices[vector_result.node_index],
vector_result.bsp_result.plane,
&collision_plane);
if (vector_result.bsp_result.plane_designator < 0)
plane3d_negate(&collision_plane, &collision_plane);
unit_impact_melee_damage(
biped_index,
biped->biped.impact_target_object_index,
model_result.node_index,
model_result.region_index,
model_result.bsp_result.material_index,
&impact_point,
&impact_plane.n,
&world_collision.location);
vector_result.node_index,
vector_result.region_index,
vector_result.bsp_result.material_index,
&collision_point,
&collision_plane.n,
&collision.location);
}
}
+1 -1
View File
@@ -101,7 +101,7 @@ void biped_reset(
boolean biped_flying_through_air(
long biped_index);
void biped_adjust_placement(
long biped_index,
long object_index,
struct object_placement_data *data);
void biped_export_function_values(
long biped_index);
Loaded 100 of 108 files, more files were not shown because too many files have changed in this diff. Show more