Weapon identities, firing and impact behaviour
The ten Caero weapon/component slots are now linked to their in-game names through mission introductions and the executable's weapon-availability handler. Open the updated gameplay browser or structured weapon export. This is a handler-level investigation, not a complete reimplementation of targeting, spawning, collision or damage.
For a player-facing lookup, see the Caero number-key reference.
Names and controls
| Slot | Selection ID | Direct key | Identity | Update / firing / impact entries |
|---|---|---|---|---|
| 0 | 1 | 1 | Pinner Direct | CC64 / CAC0 / CDB1 |
| 1 | 2 | 2 | Pinner Mimic | CBCE / CAC0 / CDB1 |
| 2 | 3 | 3 | Brent Forbes Dual Launch: primary capsule | CC64 / CA4A / CDB1 |
| 3 | 4 | automatic | Forbes Diffuser: trigger | CC61 / CA69 / CE84 |
| 4 | 5 | 5 | Forbes Diffuser: gas capsule | CC61 / CA69 / CE84 |
| 5 | 6 | 6 | Brent Ground | CC61 / CA5A / CDB1 |
| 6 | 7 | automatic | Brent Forbes Dual Launch: follow-up homing unit | CBE7 / CA99 / CDB1 |
| 7 | 8 | 8 | Caero Weapon | CC61 / CA55 / CF16 |
| 8 | 9 | 9 | Pinner/Forbes Chargeable | CC68 / CA7D / CF0E |
| 9 | 10 | 0 | Brent Hunter | CC61 / CA55 / CDB1 |
Slots are zero-based; selection IDs are one-based. The dispatcher passes scan code minus one, so the number-row 0 selects ID 10. Keys 4 and 7 are not separate active weapon bindings. The component descriptions above are analytical labels; the compound weapon names come from mission text. “Follow-up” does not imply the secondary-fire button: Dual Launch changes the primary selection byte internally.
Brent Ground: vulnerable building regions
A missile touching a visible polygon is not sufficient. Buildings use separate
collision volumes, each carrying a response category. For the ordinary Caero
ground-weapon path (CDB9–CE1A), a hit must find a nonzero damage link in the
currently selected model and satisfy the primitive's category:
| Collision category | Brent Ground response |
|---|---|
| 0 | Advances the building damage state only if its 40h ground-target bit is set |
| 1 | Rejects building damage, even on a marked target |
| 2 | Advances damage without requiring target marking; Delphi streetlights use this |
| 3 | Rejected by ordinary Brent Ground damage; used by the separate Diffuser sequence |
An accepted hit adds 20h to the cell state (67C7–67CA). This is not a
building-health pool: repeatedly striking a rejected wall does not gradually
weaken it. The weapon's numerical impact strength is not the deciding factor
here, unlike ordinary aircraft damage. A marked ruin can still display a
reticule while having no further damage link.
Offices: aim into the doorway
Delphi types 86–89 each have one thin category-0 collision volume recessed
inside the entrance, with five category-1 volumes forming the surrounding solid
parts. Their collision streams start at 852E, 8555, 857C and 85A3 in
bank 30's world-data address space. The arrangements are rotated versions of
the same rule. Shooting the outside walls hits category 1 and cannot damage the
building; firing through the doorway can reach the category-0 region and
advance a marked office to its damaged model in one hit.
This matches our playtesting in both retail and the reconstruction. It is a collision-volume rule, not a test against the rendered triangle mesh.
Other restricted targets
The base-state bank-30 census also finds mixed category-0/category-1 volumes on types 17 and 21, the corresponding hangar entrance models. They have a thin vulnerable region and protected surrounding geometry too; eligibility still requires target marking and a damage link. Their geometry should not be assumed to use the office doorway's exact aiming point.
The recovered Delphi mission lists do not require destroying these entrances
as a building objective. Instead, the eight marked type-21 cells exactly match
the aircraft launch-site table at 8F2A: (85,3), (112,11), (51,27), (84,55),
(87,55), (106,94), (18,102), (82,112). Scenarios 04_002/1, /3, /4,
04_007/0 and 04_010/2 mark subsets with 40h, while their building-objective
lists are empty. No recovered embedded set_world_flags_40 list adds an entrance.
Here marking also enables enemy aircraft launches (8E3F), and damage bit
20h disables them. Consequently, destroying a marked entrance can shut down
that reinforcement site even though the briefing does not explicitly order it.
This consequence follows from the launch and damage handlers; it is not yet a
separate retail bombing playtest. The late Delphi presentation 04_014/2
pre-damages three type-17 entrances, rather than making them bombing objectives.
| First marking mission | Scenario | Launch entrance cells | Approximate named location |
|---|---|---|---|
| 18 | 04_002 / 1 |
(51,27), (18,102) | Lundy and Wilston Shuttle Stations |
| 20 | 04_002 / 3 |
(84,55) | Caero Shuttle Station |
| 21 | 04_002 / 4 |
(87,55) | Caero Shuttle Station, second entrance |
| 57 | 04_007 / 0 |
(85,3), (112,11) | Sharden and Chepesch Shuttle Bays |
| 83 | 04_010 / 2 |
(106,94), (82,112) | Janstead Shuttle Station and Garth Shuttle Bay |
These are first-marking missions, not an exhaustive list of missions with
launches: the bit persists into subsequent Delphi missions unless changed, and
destroyed entrances are excluded. A launch also requires nearby player
position, spawning enabled, an expired site timer and an available free-list
aircraft. Mission 18 starts with no free-list aircraft, so its initial marking
alone does not guarantee a launch. Missions 20, 21, 57 and 83 each start with
four free-list aircraft records. Mission 20 is useful for observing launches, but not for testing bombing with
the normal loadout: Brent Ground is not unlocked until mission 50
(04_006 / 1, opcode 30 60). Its introduction explicitly says: “All
enemy-occupied Shuttle Stations have already been flagged for destruction.”
Thus the earlier marking enables occupation/spawning before the player obtains
the means to destroy the sites. On normal campaign progression those markings
persist into mission 50. Mission 57 offers newly marked sites after Brent
Ground has been unlocked, avoiding reliance on earlier saved site activation.
Type 76, the destructible warehouse roof, uses category 3 throughout its collision definition. That is a different restriction: the Diffuser gas/trigger sequence handles it, rather than ordinary Brent Ground impact. Types 75 and 76 have identical collision boxes: a broad lower box and a narrower, taller central strip. Both boxes on type 76 accept the Diffuser sequence; there is no separate skylight-only hit test. Retail playtesting confirms that the whole type-76 block can be hit successfully. Adjacent non-destructible warehouse blocks make the vulnerable area appear smaller when approaching the assembled building.
Types without a damage link cannot be destroyed by this path regardless of collision category. Other base-state Delphi models with damage links have only category 0, except streetlights (category 2). This census is scoped to base models; alternate and damaged models may have different collision definitions.
Evidence: real-model collision-category census, damage-link selection, and player collision analysis. The census checks categories and admitted responses; it is not an exhaustive native missile trajectory test through every doorway.
How the names were established
The mission record header contains a relative word at record +8. In each of the eight introduction records below, record + 8 + word locates the availability instruction(s). Opcode 30 dispatches through table entry C4D5 to C281, where a packed argument constructs a bit range and XORs it into the availability mask at C88C.
| Mission resource / stored record | Availability bytes | Slots enabled from zero | Briefing identity |
|---|---|---|---|
| 04_000 / 0 | 30 10 | 0 | Pinner Direct |
| 04_000 / 4 | 30 20 | 1 | Pinner Mimic |
| 04_002 / 4 | 30 A0 | 9 | Brent Hunter |
| 04_003 / 5 | 30 90 | 8 | Pinner/Forbes Chargeable |
| 04_006 / 1 | 30 60 | 5 | Brent Ground |
| 04_007 / 0 | 30 30, 30 70 | 2, 6 | Brent Forbes Dual Launch |
| 04_009 / 7 | 30 51 | 3, 4 | Forbes Diffuser |
| 04_010 / 7 | 30 80 | 7 | Caero Weapon |
Original bytecode dispatch and mask mutation were executed for all nine instructions. The export includes source offsets, exact bytes and English briefing runs. These stored record numbers are not asserted to be the displayed mission numbers. This pass does not decompile the entire surrounding mission program.
Shared firing and damage conventions
C9C2–C9FB checks selection, player flags, free projectile capacity and energy, then jumps to the definition's firing handler. Its flags convey trigger and insufficient-energy conditions. At the ordinary launch path, CAC4 deducts energy and calculates a projectile deadline before spawning through CB01. Do not interpret the stored deadline seed as a firing interval.
CA55 accepts object targets (negative runtime pointers, excluding FFFF); CA5A accepts map-cell targets. CAC0 needs no target lock. These are distinct even where projectile geometry is shared.
Ordinary impact handler CDB1 distinguishes object collisions, map/building collisions and other outcomes. Object hits obtain a strength byte from definition +8, then enter CE26, which compares it with the victim's own definition parameter and updates damage state. Building hits additionally inspect collision category, model links, target flags and mode. These strength values are not final hit points or a universal amount of health removed.
Pinner Direct and Mimic
The Direct uses CC64, skipping the homing correction at CC9C. The Mimic's CBCE instead reads the player's current pitch and roll on each update: it copies player pitch into the projectile and feeds the roll difference into a steering helper. An isolated probe verifies those reads. This is continued player-linked steering, not ordinary enemy-seeking homing; the exact resulting trajectory still depends on shared movement code.
Brent Hunter and Ground
Both use the shared homing path CC61/CC9C. The Hunter's CA55 expects an object target; the Ground's CA5A expects a map target. Ground-target selection and building destruction impose further rules; accepting a map coordinate does not mean the missile can flatten any building. This matches the briefing's designated-object restriction and later warning that Brent Ground cannot destroy warehouses.
Brent Forbes Dual Launch
- The primary capsule (slot 2) launches through
CA4A, which changes primary selection to ID 7, the follow-up unit. CA99inspects the projectile-list tail at 6FBA, requires definition1956(slot 2), and temporarily substitutes that capsule as the follow-up's target. It resets primary selection to ID 3. This is not a search for an arbitrary nearby enemy.CBE7measures separation from its linked capsule. At close proximity, the native path makes area-hit passes over three object lists through6DB5, usingCD13for distance-dependent hit strength, then removes the paired objects through the effect/removal paths.
The second unit therefore homes on the first capsule to make the combined effect. Native probes verify the exact-definition check and temporary target substitution; the complete explosion/removal sequence has been traced statically, not executed as an entire scene.
Its approaching-unit sound is also dynamic: CC54–CC60 changes the shared pitch word at 19CC according to the computed separation term. This connects the previously unidentified mutable sound definition to the Dual Launch weapon.
Forbes Diffuser: a timed, cell-specific combination
The shared firing handler CA69 alternates secondary selection 5 ↔ 4. Slot 4 is the gas capsule; slot 3 is the trigger. Invalid target/energy conditions can return selection to the gas stage.
On a suitable building collision, CE84 requires collision category 3 and target-state bit 40. A gas hit records:
- the packed building cell at
3DA3; - an expiry at
0C4A = current_clock + 2800h.
A trigger must hit that same cell, with the same eligibility checks, when (current_clock - expiry) mod 65536 >= F000h. For a fresh gas hit this means elapsed time 6144–10239 timer ticks, approximately 12.29–20.48 seconds at the recovered timer rate. The native probes cover both boundaries. Success enters the building-destruction path at 67BF; other cases take an effect path without that destruction.
The cell/deadline storage is shared, not per gas projectile. A later qualifying gas hit overwrites the previous recorded cell. This is a concrete implementation constraint behind the briefing's instruction to fire the trigger at the right moment. The verification uses synthetic map state and clock values; an in-game timed trial would still be useful.
Chargeable: holding, release and strength lost in flight
CA7D maintains accumulated charge at the self-modifying word CA80. Charging and release are separate branches:
- Triggering starts the charge via the energy/trigger path.
- While held and below full charge,
CA09transfers up to 64 × frame step from reserve into charge, capped by available energy and saturating at FFFF. - At full charge, it still drains reserve, but at 2 × frame step: one thirty-second of the charging rate.
- On release, the stored charge is cleared and shifted right by four. With a valid object target, that becomes the projectile's remaining lifetime/deadline parameter. Maximum lifetime is 4095 ticks, about 8.19 seconds.
At object impact, CF37 subtracts the current clock from that deadline. For a positive high byte it passes remaining_ticks × 8 to damage handling; the strength byte is the high byte of that result. Consequently, the projectile loses strength as it travels. When 255 ticks or fewer remain, this branch returns without applying that object hit. A full-charge immediate hit would supply strength 127, but that is an input to the shared damage logic, not final health damage.
The appearance also changes: update CC68 derives a roll-related animation term from the remaining parameter before shared homing/movement. Its exact visual effect has not been reproduced in this pass.
Caero Weapon: beacon-powered impact, with a baseline
On an object collision, CF21 invokes the same 8450 energy-tower source routine used by charging, using the impact coordinates/height. It multiplies the returned value by four and adds 45 to its high byte before shared damage processing.
Native probes at a tower-centre fixture produce these strength inputs:
| Tower state | Strength parameter |
|---|---|
| 0 (off) | 45 |
| 128 | 147 |
| 255 (full) | 249 |
Thus beacon output materially affects impact strength, including intermediate tower states. It retains a baseline even with zero beacon contribution; the narrative warning that it is ineffective without beacon power is not an exact zero-damage rule. Distance and altitude feed the same source calculation as charging. Building collisions take a different branch into ordinary building-hit handling.
Enemy resistance, damage and recovery
Ordinary enemy aircraft have an effective armour threshold and recovering damage,
not a fixed number of hit points subtracted directly by each weapon. This is the
shared CE38–CE69 hit path and the 8AC0–8AD5 normal-update recovery path.
Buildings and special scripted objects such as the Wrecker use other rules; the
following tables must not be applied to them. The player's Caero damage display
and Skimma shields are also separate systems: see player collision and damage.
The victim's definition byte +8 supplies resistance R. Incoming impact
strength is S. The damage word at object +64 starts at zero; overflowing
65,535 triggers the fatal/falling callback 8DAA. For an undamaged ordinary
victim the damage increment is:
| Strength relative to resistance | Damage increment |
|---|---|
| S ≤ R | 1 |
| R < S < 2R | 257 × floor((256 × (S − R) + R) / R) + 1 |
| S ≥ 2R | 65,536: an outright fatal hit |
All divisions here are integer divisions. Consequently, a weapon below or exactly at the resistance threshold can show an impact effect while doing only one unit of damage. Ordinary aircraft recover that unit before the next shot: this is effectively immunity in normal play, rather than a strictly zero-damage branch. The separate +56 impact/engagement accumulator also receives a hit impulse; it is not another health pool.
On each normal aircraft update, 8AC6 reads definition byte +13 and subtracts
frame_ticks << recovery_shift from +64, clamped at zero. This same field was
labelled cooldown in early analysis and remains actor.awareness.cooldown
in the C++ representation, but it is also the recovering damage accumulator
written by the impact handler. Describing it solely as a firing cooldown hides
this important behaviour. Recovery is automatic; these enemies do not use the
player Skimma's switchable directional-shield system. Once a hit installs the
fatal callback, the ordinary recovery path no longer rescues the aircraft.
Enemy values
The rates below use the recovered 500-tick-per-second game clock while the normal aircraft callback is running. Recovery time means removing almost a full 65,536-unit accumulator; it is not a wait that can undo an already fatal hit. Names follow the scenario object identities.
| Definition slot | Enemy | Resistance | Recovery shift | Damage recovered/second | Almost-full recovery time |
|---|---|---|---|---|---|
| 19 | Skimma Supa | 40 | 0 | 500 | 131.1 seconds |
| 20 | Oppressor | 45 | 1 | 1,000 | 65.5 seconds |
| 21 | Assassin | 75 | 2 | 2,000 | 32.8 seconds |
| 22 | Stalker | 60 | 1 | 1,000 | 65.5 seconds |
| 23 | Terrablitz (probable identification) | 78 | 1 | 1,000 | 65.5 seconds |
Player weapon strength inputs
These numbers feed the resistance calculation; they are not hit points removed. Special area and building handlers must be distinguished from ordinary impacts.
| Weapon / effect | Strength input | Qualification |
|---|---|---|
| Pinner Direct | 52 surface; 59 underground | World-profile patch changes the definition |
| Pinner Mimic | 56 | Ordinary impact |
| Dual Launch primary capsule | 50 | Ordinary direct impact |
| Dual Launch follow-up unit | 52 | Ordinary direct impact, separate from the paired detonation |
| Dual Launch paired explosion | Up to 152 | Distance-dependent area effect; maximum at its centre |
| Forbes Diffuser gas / trigger | 30 / 20 in definitions | Special timed building-destruction sequence, not ordinary aircraft damage |
| Brent Ground | 56 | Building eligibility and damage-state rules are separate |
| Brent Hunter | 59 | Ordinary impact |
| Caero Weapon | 45 without beacon contribution; up to 249 at maximum | Samples beacon power at impact; see the dedicated section above |
| Chargeable | Up to 127 | Full charge and negligible flight time; weakens during flight |
| Skimma primary gun | 50 | Ray-hit path supplies this constant |
| Skimma air missile 1 | 90 | Definition 10 |
| Skimma ground missile 2 | 80 | Definition 11; primarily a building-target weapon |
| Upgraded Skimma air missile 3 | 140 | Definition 12; exact manual name unconfirmed |
Minimum hits to destroy an enemy
These are calculated lower bounds from an undamaged enemy, ignoring recovery
between hits: ceil(65536 / damage_increment). They are not promises of the
number of shots required during flight. Misses, recovery, weaker charge/beacon
conditions and off-centre explosions can all increase the requirement.
| Weapon / effect | Strength | Supa | Oppressor | Assassin | Stalker | Terrablitz |
|---|---|---|---|---|---|---|
| Pinner Direct, surface | 52 | 4 | 7 | — | — | — |
| Pinner Direct, underground | 59 | 3 | 4 | — | — | — |
| Pinner Mimic | 56 | 3 | 5 | — | — | — |
| Brent Hunter | 59 | 3 | 4 | — | — | — |
| Skimma primary gun | 50 | 4 | 9 | — | — | — |
| Skimma air missile 1 | 90 | 1 | 1 | 5 | 2 | 7 |
| Upgraded Skimma air missile 3 | 140 | 1 | 1 | 2 | 1 | 2 |
| Dual Launch, maximum paired explosion | 152 | 1 | 1 | 1 | 1 | 2 |
| Caero Weapon, maximum beacon power | 249 | 1 | 1 | 1 | 1 | 1 |
| Chargeable, maximum charge | 127 | 1 | 1 | 2 | 1 | 2 |
— means effectively ineffective: the one-unit increment would require 65,536 hits without recovery. Dual Launch entries count complete paired explosions, without adding separate capsule/follow-up direct-impact damage. Ground weapons and the Diffuser are omitted from this aircraft-target chart.
For example, Pinner Direct against a Supa adds 19,790 damage per hit, while against an Assassin it adds only one. A maximum Dual Launch blast supplies strength 152: enough to kill an Assassin outright (twice its resistance is 150), but just short of the Terrablitz's one-hit threshold of 156. The third Skimma missile therefore makes a substantial difference against tougher craft.
Evidence and limits
The reconstructed impact routine,
recovery routine and
original definition table preserve
the integer calculations and parameters. Native instructions at CE38–CE69
and 8AC0–8AD5 independently establish that both paths touch object +64.
The angular and impact investigation and
C++ object-impact notes
describe the native arithmetic checks. These charts combine those verified
routines; they are not a new end-to-end retail combat trace. Special object
callbacks, pre-damaged objects and scripted removal remain outside their scope.
Scope and reproduction
The original manual's weapon-selection section intentionally leaves later weapons blank, so its omissions do not prevent recovery from mission scripts. The Skimma manual describes a standard Supa Rapid Crack-Shot and ATA/ATG upgrades, but exact names for executable slots 10–12 and enemy projectile variants are not promoted to confirmed mappings here.
PYTHONPATH=/tmp/darker-python python3 tools/inspect_weapons.py
python3 tools/export_gameplay_data.py
PYTHONPATH=/tmp/darker-python python3 tools/verify_gameplay_data.py
Weapon verification contains nine native introduction-dispatch checks and 45 behaviour probes. Handler disassembly preserves the traced code. Tests use synthetic state and stop before rendering, spawning or destructive world updates; complete combat simulation remains future work.
Enemy scripts attacking city buildings
The Delphi script inventory contains explicit attack-enabled cell targets
(00h) in missions that enable building attacks with 32h. Besides the
radio-mast attacks,
the following sequences target other city objects. Counts below describe
unique authored target cells, not guaranteed destroyed buildings.
| Level | Attackers assigned to the sequences | Target area and actual map objects |
|---|---|---|
| 20 | Two definition-23 Terrablitz | Teale-area housing: 23 cells, comprising 16 houses (types 30–33) and seven streetlights (type 11) |
| 27 | Oppressors | Bridfirth Power Site: 18 generator/component cells, types 83–85 |
| 32 | Oppressors | Another attack on the same 18 Bridfirth cells |
| 43 | Oppressors | Sperwent Power Site: 14 component cells, types 83–85 |
| 60 | Terrablitz and Oppressors | The same 14 Sperwent cells |
| 62 | One Terrablitz, object 11 | Five type-11 streetlights at (58,77), (58,79), (58,81), (58,83), (58,85) |
| 83 | Terrablitz, objects 21–23 | Gesic Power Site: 12 component cells, types 83–85 |
| 84 | Four Terrablitz | Four type-76 warehouse roofs at Wilston Depot: (26,102), (29,102), (32,102), (35,102) |
The mission-20 briefing calls the attackers Skimmas, but the two scripted building-attack sequences belong to definition-23 objects. This distinction comes from the object records rather than interpreting the briefing literally. Mission 62's targets are likewise literal streetlight cells in the extracted map; whether these were intended as broader aiming points for the bombing run is not established.
Terrablitz projectiles and streetlight hits
The mission-20 attackers use special object / definition 14 for ground
attacks. The dedicated bomb-drop routine at 8BE6 loads definition pointer
1A76 (slot 14) and forces the new projectile's pitch to C800. The ordinary
firing selector at 8AFD also selects slot 14 for this craft's building targets:
its projectile selector is 13, with one added for ground attacks. Special
object 13 is the air-target projectile, not the dropped bomb. In bank 30
these are distinct model records at pool offsets C819 and C91A respectively.
An intact type-11 streetlight accepts a direct bomb hit without a target-unlock
bit. Its collision stream at 8080 defines an extremely narrow column:
horizontal offsets −4 through +3 around the cell centre, within a 256-unit
tile. The projectile collision expansion of two units broadens that to offsets
−6 through +5 on each horizontal axis. A nearby terrain explosion therefore
does not establish a hit on the streetlight.
A controlled comparison used 289 vertical sweeps (a 17×17 grid of offsets,
from altitude 1,000 down to zero) through an isolated real streetlight. Native
6527 collision results and CDB9 damage decisions agreed with the C++ sweep
and damage admission in all cases: the central 12×12 paths destroyed the
streetlight; the other 145 struck terrain without destroying it. Native visual
effect spawning was intercepted after the state write. These supplied paths
check collision and damage, not bomb flight, aiming, or a particular observed
mission-20 bombing run.
Reading the attack markers
01h cell orders set flag 02 and suppress building attacks, whereas 00h
clears it. Thus not every scripted route through a building is an attack.
Actual damage still requires a projectile to hit eligible collision geometry;
its outcome depends on interception, aiming and the runtime scene. Enemy ground
weapons do not require the player's permitted-ground-target state bit.
The scenario browser marks these targets, including radio masts, with rose diamonds. The Enemy ground attacks checkbox controls their visibility. Click a diamond or use the target dropdown for the base-model preview, assigned aircraft and resource offsets of their attack orders. Aircraft buttons select the existing object inspector. Reserve attackers are explicitly labelled as requiring activation.
The marker inventory follows each aircraft's decoded script through relative
jumps, stops and loops, and groups reachable 00h orders by target cell. It is
limited to the audited Delphi aircraft sequences in missions with a nonzero
building-attack command; it does not claim to simulate attack timing, successful
hits, incidental damage or every possible default cell target. Underground
Wrecker demolition remains in the existing vehicle-route event overlay.