Make RustRaptor the repository root and track its playable bundle
No files matched your search
@@ -0,0 +1,76 @@
|
||||
# Iron Coast 2 — Tidal Relay
|
||||
|
||||
Disrupt the tidal communications network after the Breakwater raid. Destroy
|
||||
all three armored navigation relays, then defeat the **Relay Warden** radar
|
||||
carrier. Relays anchor in the firing corridor until destroyed; neither an
|
||||
escaped optional enemy nor an early boss kill can lock the objectives.
|
||||
Each relay yields 140 credits and recovers 12 ordinary energy. Victory pays
|
||||
7,500 credits in addition to normal destruction and salvage rewards.
|
||||
|
||||
Enable this package in **Mods** to select its eight-package standalone set:
|
||||
this mission, `iron_coast_scout`, `iron_coast_turret`, `pulse_cannon`,
|
||||
`seeker_swarm`, `ion_lance`, `iron_coast_boss_2`, and `iron_coast_music`.
|
||||
Choose **Iron Coast 2 — Tidal Relay** in the mission menu. The optional
|
||||
`iron_coast_campaign` assembly package connects it to the full six-level
|
||||
route. This individual package has no next-mission override and can be played
|
||||
without the other five mission packages.
|
||||
|
||||
The flight grants a mission-only Pulse Cannon when a free inventory slot
|
||||
exists. The cannon is returned on success or failure; a cannon already owned
|
||||
by the pilot is retained. A full 20-slot inventory skips the loan. No kits,
|
||||
ammunition, or premium weapon purchases are required for the acceptance route.
|
||||
The duration of 2,300 ticks is a catalog hint; timer expiry does not win.
|
||||
The Relay Warden arrives at tick 860 and remains available until destroyed.
|
||||
|
||||
The waves mix Iron Coast scouts and turrets with untouched original enemy
|
||||
registry definitions and their native animation, guns, and movement:
|
||||
|
||||
| Spawn | Original definition | Native movement |
|
||||
| --- | --- | --- |
|
||||
| Tick 75, x216 | `base:enemy_0_20` / SHIP05G1_PIC | Six-leg zigzag entry, speed 3 |
|
||||
| Tick 330, x168 | `base:enemy_0_23` / SHIP06G1_PIC | Wide crossing sweep, speed 3 |
|
||||
| Tick 620, x176 | `base:enemy_0_56` / SHIP25G1_PIC | Authored entry then player chase, speed 5 |
|
||||
|
||||
All three appear on every difficulty. Their original assets remain in the
|
||||
separately installed game catalog; this package neither duplicates nor
|
||||
redefines original enemy data. New package-local art supplies the relay
|
||||
station, briefing and scrolling tidal causeway in SD and HD. The shared
|
||||
**Coastal Steel** soundtrack is a 96-second generated MUS loop played by
|
||||
the Rust FM synthesizer. Six local WAV cues cover approach, network alert,
|
||||
relay destruction, network shutdown, boss arrival and victory.
|
||||
|
||||
All three generated art masters, 216 pairs of terrain crops, SD/HD briefing
|
||||
and relay sprites, WAVs, scripts and provenance are included in Git.
|
||||
`prompts.json` and `prompts.md` record the exact built-in imagegen prompts.
|
||||
The original VGA palette remains outside Git. The builder converts the full
|
||||
SD terrain canvas before splitting tiles, uses a reflected scroll period with
|
||||
identical repeat boundaries, and normalizes excessive transparent padding
|
||||
around the relay silhouette without changing its logical 32×32 canvas.
|
||||
|
||||
```sh
|
||||
python3 RustRaptor/mods/iron_coast_mission_2/build_assets.py
|
||||
cargo run --locked --manifest-path RustRaptor/Cargo.toml --no-default-features \
|
||||
-- --data data --mods RustRaptor/mods \
|
||||
--validate-mods iron_coast_scout,iron_coast_turret,pulse_cannon,seeker_swarm,ion_lance,iron_coast_boss_2,iron_coast_music,iron_coast_mission_2
|
||||
cargo run --locked \
|
||||
--manifest-path RustRaptor/mods/iron_coast_mission_2/validation/Cargo.toml \
|
||||
--target-dir RustRaptor/target --bin validate-mission
|
||||
```
|
||||
|
||||
The standalone validator uses the actual engine and locally installed original
|
||||
catalog. It preserves script state between four mission restarts, exercises a
|
||||
registered 75-energy/10,000-credit pilot, a 100-energy fixture, an owned cannon
|
||||
and a full inventory, and checks exact completion gating and one-time reward.
|
||||
It fires continuously at y160, moving at most four pixels per tick toward the
|
||||
first live relay, or x144 when no relay is alive. It injects no damage, shield,
|
||||
credit or purchased-weapon commands during its playable routes.
|
||||
|
||||
The normal registration run wins at **tick 926**, with **86 energy** and
|
||||
**21,365 total credits** (11,365 earned). All three native enemies are observed
|
||||
moving. The full-inventory run wins at tick 930 with 82 energy, no loaned cannon
|
||||
and ordinary equipment preserved. Combat shield charge may naturally change.
|
||||
The owned-cannon run retains the pilot's cannon. All six local cues dispatch.
|
||||
See `acceptance-report.json` for exact independent/restarted-run results and
|
||||
`asset-report.json` for palette, seam, transparency and waveform checks.
|
||||
Human play difficulty and audiovisual preference still require normal play
|
||||
review; these controlled simulations establish a viable path.
|
||||
@@ -0,0 +1,213 @@
|
||||
{
|
||||
"gating_checks": {
|
||||
"completion_reward_exactly_7500_once": true,
|
||||
"requires_three_relays_and_boss": true,
|
||||
"restart_state_reset": true
|
||||
},
|
||||
"mission": "iron_coast_mission_2:mission_02",
|
||||
"runs": [
|
||||
{
|
||||
"credit_gain": 11365,
|
||||
"credits_final": 21365,
|
||||
"credits_initial": 10000,
|
||||
"digest": "47a61aa01bafca959c86bac2c2f59e32a07b647541d452d8a69b6ea38d6fa193",
|
||||
"full_inventory": false,
|
||||
"native_definitions_observed_moving": [
|
||||
"base:enemy_0_20",
|
||||
"base:enemy_0_23",
|
||||
"base:enemy_0_56"
|
||||
],
|
||||
"objectives": {
|
||||
"iron_coast_boss_2:defeated": 1,
|
||||
"iron_coast_mission_2:complete": 1,
|
||||
"iron_coast_mission_2:debrief": 1,
|
||||
"iron_coast_mission_2:network_down": 1,
|
||||
"iron_coast_mission_2:phase": 4,
|
||||
"iron_coast_mission_2:relays_disabled": 3,
|
||||
"iron_coast_scout:defeated": 3,
|
||||
"iron_coast_turret:defeated": 1
|
||||
},
|
||||
"outcome": "Complete",
|
||||
"owned_pulse": false,
|
||||
"played_cues": [
|
||||
"iron_coast_boss_2:death",
|
||||
"iron_coast_mission_2:approach",
|
||||
"iron_coast_mission_2:boss_alarm",
|
||||
"iron_coast_mission_2:network_alarm",
|
||||
"iron_coast_mission_2:network_down",
|
||||
"iron_coast_mission_2:relay_offline",
|
||||
"iron_coast_mission_2:victory",
|
||||
"iron_coast_scout:death",
|
||||
"iron_coast_scout:shot",
|
||||
"iron_coast_turret:death",
|
||||
"iron_coast_turret:shot",
|
||||
"pulse_cannon:fire",
|
||||
"pulse_cannon:impact"
|
||||
],
|
||||
"seen_enemies": [
|
||||
"base:enemy_0_20",
|
||||
"base:enemy_0_23",
|
||||
"base:enemy_0_56",
|
||||
"iron_coast_boss_2:unit",
|
||||
"iron_coast_mission_2:relay",
|
||||
"iron_coast_scout:unit",
|
||||
"iron_coast_turret:unit"
|
||||
],
|
||||
"shield_initial": 75,
|
||||
"shield_remaining": 86,
|
||||
"tick": 926
|
||||
},
|
||||
{
|
||||
"credit_gain": 11365,
|
||||
"credits_final": 11365,
|
||||
"credits_initial": 0,
|
||||
"digest": "33276f1cf85335210e6f7af661313698469eb27c7741f07e1a020fd57f707d05",
|
||||
"full_inventory": false,
|
||||
"native_definitions_observed_moving": [
|
||||
"base:enemy_0_20",
|
||||
"base:enemy_0_23",
|
||||
"base:enemy_0_56"
|
||||
],
|
||||
"objectives": {
|
||||
"iron_coast_boss_2:defeated": 1,
|
||||
"iron_coast_mission_2:complete": 1,
|
||||
"iron_coast_mission_2:debrief": 1,
|
||||
"iron_coast_mission_2:network_down": 1,
|
||||
"iron_coast_mission_2:phase": 4,
|
||||
"iron_coast_mission_2:relays_disabled": 3,
|
||||
"iron_coast_scout:defeated": 3,
|
||||
"iron_coast_turret:defeated": 1
|
||||
},
|
||||
"outcome": "Complete",
|
||||
"owned_pulse": false,
|
||||
"played_cues": [
|
||||
"iron_coast_boss_2:death",
|
||||
"iron_coast_mission_2:approach",
|
||||
"iron_coast_mission_2:boss_alarm",
|
||||
"iron_coast_mission_2:network_alarm",
|
||||
"iron_coast_mission_2:network_down",
|
||||
"iron_coast_mission_2:relay_offline",
|
||||
"iron_coast_mission_2:victory",
|
||||
"iron_coast_scout:death",
|
||||
"iron_coast_scout:shot",
|
||||
"iron_coast_turret:death",
|
||||
"iron_coast_turret:shot",
|
||||
"pulse_cannon:fire",
|
||||
"pulse_cannon:impact"
|
||||
],
|
||||
"seen_enemies": [
|
||||
"base:enemy_0_20",
|
||||
"base:enemy_0_23",
|
||||
"base:enemy_0_56",
|
||||
"iron_coast_boss_2:unit",
|
||||
"iron_coast_mission_2:relay",
|
||||
"iron_coast_scout:unit",
|
||||
"iron_coast_turret:unit"
|
||||
],
|
||||
"shield_initial": 100,
|
||||
"shield_remaining": 78,
|
||||
"tick": 926
|
||||
},
|
||||
{
|
||||
"credit_gain": 11365,
|
||||
"credits_final": 21365,
|
||||
"credits_initial": 10000,
|
||||
"digest": "89f47f6049473c2d591ed4d89afc34dcaddbec33b5a50fe0f0589ea1d7d2e430",
|
||||
"full_inventory": false,
|
||||
"native_definitions_observed_moving": [
|
||||
"base:enemy_0_20",
|
||||
"base:enemy_0_23",
|
||||
"base:enemy_0_56"
|
||||
],
|
||||
"objectives": {
|
||||
"iron_coast_boss_2:defeated": 1,
|
||||
"iron_coast_mission_2:complete": 1,
|
||||
"iron_coast_mission_2:debrief": 1,
|
||||
"iron_coast_mission_2:network_down": 1,
|
||||
"iron_coast_mission_2:phase": 4,
|
||||
"iron_coast_mission_2:relays_disabled": 3,
|
||||
"iron_coast_scout:defeated": 3,
|
||||
"iron_coast_turret:defeated": 1
|
||||
},
|
||||
"outcome": "Complete",
|
||||
"owned_pulse": true,
|
||||
"played_cues": [
|
||||
"iron_coast_boss_2:death",
|
||||
"iron_coast_mission_2:approach",
|
||||
"iron_coast_mission_2:boss_alarm",
|
||||
"iron_coast_mission_2:network_alarm",
|
||||
"iron_coast_mission_2:network_down",
|
||||
"iron_coast_mission_2:relay_offline",
|
||||
"iron_coast_mission_2:victory",
|
||||
"iron_coast_scout:death",
|
||||
"iron_coast_scout:shot",
|
||||
"iron_coast_turret:death",
|
||||
"iron_coast_turret:shot",
|
||||
"pulse_cannon:fire",
|
||||
"pulse_cannon:impact"
|
||||
],
|
||||
"seen_enemies": [
|
||||
"base:enemy_0_20",
|
||||
"base:enemy_0_23",
|
||||
"base:enemy_0_56",
|
||||
"iron_coast_boss_2:unit",
|
||||
"iron_coast_mission_2:relay",
|
||||
"iron_coast_scout:unit",
|
||||
"iron_coast_turret:unit"
|
||||
],
|
||||
"shield_initial": 75,
|
||||
"shield_remaining": 74,
|
||||
"tick": 928
|
||||
},
|
||||
{
|
||||
"credit_gain": 11440,
|
||||
"credits_final": 21440,
|
||||
"credits_initial": 10000,
|
||||
"digest": "0a57afc1944071b24cd42f0cce56789afd9a397d88dfb79de8ac44add2d6b155",
|
||||
"full_inventory": true,
|
||||
"native_definitions_observed_moving": [
|
||||
"base:enemy_0_20",
|
||||
"base:enemy_0_23",
|
||||
"base:enemy_0_56"
|
||||
],
|
||||
"objectives": {
|
||||
"iron_coast_boss_2:defeated": 1,
|
||||
"iron_coast_mission_2:complete": 1,
|
||||
"iron_coast_mission_2:debrief": 1,
|
||||
"iron_coast_mission_2:network_down": 1,
|
||||
"iron_coast_mission_2:phase": 4,
|
||||
"iron_coast_mission_2:relays_disabled": 3,
|
||||
"iron_coast_scout:defeated": 4,
|
||||
"iron_coast_turret:defeated": 1
|
||||
},
|
||||
"outcome": "Complete",
|
||||
"owned_pulse": false,
|
||||
"played_cues": [
|
||||
"iron_coast_boss_2:death",
|
||||
"iron_coast_mission_2:approach",
|
||||
"iron_coast_mission_2:boss_alarm",
|
||||
"iron_coast_mission_2:network_alarm",
|
||||
"iron_coast_mission_2:network_down",
|
||||
"iron_coast_mission_2:relay_offline",
|
||||
"iron_coast_mission_2:victory",
|
||||
"iron_coast_scout:death",
|
||||
"iron_coast_scout:shot",
|
||||
"iron_coast_turret:death",
|
||||
"iron_coast_turret:shot"
|
||||
],
|
||||
"seen_enemies": [
|
||||
"base:enemy_0_20",
|
||||
"base:enemy_0_23",
|
||||
"base:enemy_0_56",
|
||||
"iron_coast_boss_2:unit",
|
||||
"iron_coast_mission_2:relay",
|
||||
"iron_coast_scout:unit",
|
||||
"iron_coast_turret:unit"
|
||||
],
|
||||
"shield_initial": 75,
|
||||
"shield_remaining": 82,
|
||||
"tick": 930
|
||||
}
|
||||
],
|
||||
"strategy": "Held fire; y160; move at most 4 pixels/tick toward first living relay x, otherwise x144. No direct damage, shield or credit commands."
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.0 MiB |
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 843 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 3.6 MiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 3.2 MiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 34 KiB |