DARKER Research archive

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

  1. The primary capsule (slot 2) launches through CA4A, which changes primary selection to ID 7, the follow-up unit.
  2. CA99 inspects the projectile-list tail at 6FBA, requires definition 1956 (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.
  3. CBE7 measures separation from its linked capsule. At close proximity, the native path makes area-hit passes over three object lists through 6DB5, using CD13 for 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:

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:

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.