CARD C03 - c1 = vTU + R1 (count compare) + R2 (race-vehicle flag constant) + R3B (players.h HCEX member names, placeholder union removed)
written: 2026-09-26 01:06:24 -0700 (BEFORE the compile)

Observed discrepancies (source only; bytes already 180/180):
- R1 rule 14: `killing_player->statistics.multiple_kills >= _game_engine_message_killed_by_player` compares a KILL
  COUNT with a message-enum constant that merely equals 4 (present in HEAD too; missed by review3/review4).
- R2 rule 13: build_lighting `flag->type == 4` + two explanatory comments; scenario_definitions.h already has
  enum netgame_flag_type with _netgame_flag_race_vehicle == 4 (the loop counts race vehicle flags).
- R3 (lead item e) placeholder members: players.h `unknown70`, `unknown7c`, and `union { byte unknown80[4];
  long target_hold_time; }`.
Source evidence: X - HCEX player_datum+0x6C `struct multiplayer_player_info multiplayer` = {speed_multiplier 0x6C,
teleporter_index 0x70, state_message 0x74, state_message_data 0x78, player_display_index 0x7C,
player_display_count 0x80, time_of_death 0x84, special 0x88, is_odd_man_out 0x8C}; J/tree - only game_engine.c and
players.h name unknown70/unknown7c/unknown80/target_hold_time; semantics agree (teleporter flag index; the
target-name player shown and its 0..15 hold counter).
Proposed correction: R1 `>= 4`; R2 `_netgame_flag_race_vehicle`, drop the two comments; R3B players.h
unknown70->teleporter_index, unknown7c->player_display_index, the union -> `long player_display_count;` (+ its
offset assert renamed), game_engine.c uses renamed. The flat layout stays (HCEX nests these under `multiplayer`;
nesting would rewrite every players.h consumer - out of scope, disclosed).
Compiler-state prediction: R1/R2 are byte-identical constants and count-neutral (literal 4 already present). R3B
removes one member name (unknown80) and the anonymous union: every players.h consumer shifts by -1..-2 C1 numbers.
game_engine.c band is +9..+13 (C02 oracle) so game_engine stays 180/180. For the 71 players.h consumers a -1/-2
shift can flip a count tie; the fifty-objects ledger says -2 game_engine.h names flipped units
_unit_preprocess_node_orientations.
PREDICTION: game_engine 180/180 EXACT; full sweep: likely >=1 players.h consumer changes (units sentinel at risk),
in which case R3A (count-neutral renames inside the kept union) replaces R3B.
Decisive test: revgate game_engine + sweep.py --all vs build/base.
