Retune Iron Coast waves, enemy attacks and weapon presentation

This commit is contained in:
raptorreplica committed 2026-10-17 18:13:20 +11:00
1 parent 00cfcc2031
commit c4a4d821d5
145 files changed
+9242 -2951

No files matched your search

+9 -66
View File
@@ -1,74 +1,17 @@
# Iron Coast 5 — Cinder Docks
# Iron Coast — Mission 5: Cinder Docks
Enable this individual mission package in the Mods screen. Dependency selection
adds `iron_coast_scout`, `iron_coast_turret`, `iron_coast_boss_5`, `pulse_cannon`,
`seeker_swarm`, `ion_lance` and `iron_coast_music`, each compatible with version
1.x. Choose **Iron Coast 5 — Cinder Docks** in the mission menu. This mission has
no `next` reference; the optional Iron Coast campaign package supplies six-level
progression while the level stays independently playable.
API 1 package, version 1.0.1. Enable it in Mods at the main menu and apply the selection. The normal dependency selection also enables `iron_coast_scout`, `iron_coast_turret`, `iron_coast_boss_5`, `pulse_cannon`, `seeker_swarm`, `ion_lance`, `iron_coast_music`.
Destroy both armored furnace stations, then defeat **Cinder Hammer** to shut down
the shipbuilding yard. The stations arrive at ticks 240 and 920 and stay at y=24
until destroyed. The boss arrives at tick 1660 and remains in the firing area.
Killing the boss first still requires the stations. Victory awards 15,000 credits
once, plus ordinary destruction rewards, including 1,200 per station and 1,800
for Cinder Hammer. The 2,600-tick duration is a catalog hint; waiting cannot win.
Mission `iron_coast_mission_5:mission_05`: **Iron Coast 5 — Cinder Docks**. Destroy both foundries and Cinder Hammer. Required ground objectives remain reachable; escaping optional aircraft never counts as a kill. Elapsed time alone does not finish the mission.
Original enemies join the custom scouts: two opposing diagonal sweep libraries
(`base:enemy_0_21`, `base:enemy_0_22`), two curved-entry libraries
(`base:enemy_1_25`, `base:enemy_1_26`), a straight light fighter
(`base:enemy_0_13`) and a dock boat (`base:enemy_0_8`). Their original assets,
banking, movement paths, projectiles, collision and rewards remain in the base
registry, with no clones or overrides. These escorts and the ordinary turrets
are optional targets. All native spawns are enabled on every difficulty.
Scheduled spawn totals for Training / Rookie / Veteran / Elite are **45 / 64 / 83 / 107**. These are enabled scheduled entries, not simultaneous live-enemy counts. Groups can overlap when earlier enemies survive.
Slag warnings alternate between the outer left and right lanes, followed 35
simulation ticks later by three falling shells. The central corridor stays clear.
Three coolant injectors are supplied if inventory room permits, including the
physical slot cost of reserve super-shields. A full 20-slot inventory can enter
without losing equipment. No premium weapon is borrowed or required.
Align the forward guns with required targets while moving around incoming shots. If carried, select Field Repair or coolant with Cycle and use Special: they restore 25 or 30 energy respectively and consume a real item. Shop purchases and refills still cost credits.
Hold Fire (default Ctrl), line up with each station and keep the ship near y=160.
Alt or Shift changes selected equipment. Select **Foundry Coolant Injector** and
press Special (default Z) when energy drops to 65 or below; each use restores 30
and consumes one injector. The item costs 15,000 credits per injector and has a
five-unit capacity, matching the Iron Coast repair rate of 500 credits per shield
unit. Ordinary forward guns keep firing while a coolant injector is selected.
The shared **Coastal Steel** music loops through the mission; nine local cues
cover approach, furnace warnings, slag, cannon fire, shutdown, boss arrival,
coolant use and victory.
## Equipment supplied by the mission
New generated terrain, briefing and transparent furnace-station masters are
packaged as SD and HD PNGs. SD uses the original game palette; HD uses separate
physical dimensions while preserving logical collision footprints. A reflected
terrain period makes the repetition edges match exactly. The exact imagegen
prompts, asset source hashes, procedural audio generator and generated outputs
are tracked with the mod. See `prompts.md`, `prompts.json`, `provenance.json`
and `asset-report.json`.
The mission supplies three coolant cells when inventory capacity allows. Select coolant with Cycle, then press Special to restore 30 energy per consumed cell. Healing is not automatic.
Regenerate the outputs with:
## Validation and history
```sh
python3 RustRaptor/mods/iron_coast_mission_5/build_content.py
python3 RustRaptor/mods/iron_coast_mission_5/build_assets.py
```
Run `RustRaptor/mods/iron_coast_mission_5/validate.sh` for local original-data
acceptance. Its control fixture uses only starter guns, bounded horizontal
movement toward a station's x+8 coordinate (otherwise x=144), and selectable
coolant when shield is at most 65. It tests normal registration resources
(75 shield, 10,000 credits), the 100-shield fixture, identical repeated outcomes,
all six native enemies appearing and moving, full-slot entry, one-time rewards
and mission-state reset on re-entry. It does not directly damage enemies or refill
shield during the controlled flight. Results are in `validation-report.json`.
The original asset catalog is required locally and remains outside Git.
The final local run finishes at tick **1,818** (about 78 seconds) from normal
registration resources with **71 shield**, **31,950 credits** and two coolant
uses. Repeating the same controls produces an identical world digest. The
100-shield/zero-credit fixture finishes at the same tick with 66 shield and
21,950 credits using one coolant. All six native libraries were seen moving in
every run; full 20-slot inventories with zero or four reserve super-shields
preserved their equipment. Required objectives, one-time rewards and restarting
with retained script state passed. Human difficulty and presentation remain
subject to ordinary play testing.
See the [current Iron Coast retune results and limits](../../docs/iron-coast-retune.md). Package-local acceptance reports, validation results and retained test sources describe pre-retune 1.0 behavior unless a result explicitly identifies the newer package and runner. They remain historical material, not current playthrough guarantees.
+660 -61
View File
@@ -144,7 +144,7 @@
"missions": [
{
"id": "iron_coast_mission_5:mission_05",
"name": "Iron Coast 5 \u2014 Cinder Docks",
"name": "Iron Coast 5 — Cinder Docks",
"duration": 2600,
"auto_complete": false,
"columns": 9,
@@ -2963,154 +2963,753 @@
],
"spawns": [
{
"tick": 50,
"enemy": "base:enemy_0_22",
"x": 40,
"y": -24
"tick": 40,
"enemy": "iron_coast_scout:unit",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 88,
"enemy": "base:enemy_0_21",
"x": 208,
"y": -24
"tick": 40,
"enemy": "iron_coast_scout:unit",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 126,
"tick": 40,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24
"y": -24,
"difficulty": 1
},
{
"tick": 40,
"enemy": "iron_coast_scout:unit",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 40,
"enemy": "iron_coast_scout:unit",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 128,
"enemy": "base:enemy_0_20",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 128,
"enemy": "base:enemy_0_20",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 128,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 128,
"enemy": "base:enemy_0_20",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 128,
"enemy": "base:enemy_0_20",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 180,
"enemy": "iron_coast_turret:unit",
"x": 40,
"y": -32
"y": -32,
"difficulty": 0
},
{
"tick": 214,
"enemy": "base:enemy_0_21",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 214,
"enemy": "base:enemy_0_22",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 214,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 214,
"enemy": "base:enemy_0_21",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 214,
"enemy": "base:enemy_0_22",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 234,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 3
},
{
"tick": 240,
"enemy": "iron_coast_mission_5:foundry",
"x": 112,
"y": -48
"y": -48,
"difficulty": 0
},
{
"tick": 360,
"enemy": "base:enemy_1_26",
"tick": 302,
"enemy": "iron_coast_scout:unit",
"x": 64,
"y": -24
"y": -32,
"difficulty": 0
},
{
"tick": 398,
"enemy": "base:enemy_1_25",
"x": 208,
"y": -24
"tick": 302,
"enemy": "iron_coast_scout:unit",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 436,
"tick": 302,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24
"y": -24,
"difficulty": 1
},
{
"tick": 302,
"enemy": "iron_coast_scout:unit",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 302,
"enemy": "iron_coast_scout:unit",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 414,
"enemy": "base:enemy_0_23",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 414,
"enemy": "base:enemy_0_24",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 414,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 414,
"enemy": "base:enemy_0_23",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 414,
"enemy": "base:enemy_0_24",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 500,
"enemy": "iron_coast_turret:unit",
"x": 232,
"y": -32
"y": -32,
"difficulty": 0
},
{
"tick": 620,
"enemy": "base:enemy_0_13",
"x": 72,
"y": -24
"tick": 508,
"enemy": "base:enemy_1_25",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 658,
"enemy": "iron_coast_scout:unit",
"tick": 508,
"enemy": "base:enemy_1_26",
"x": 216,
"y": -24
"y": -32,
"difficulty": 0
},
{
"tick": 696,
"tick": 508,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24
"y": -24,
"difficulty": 1
},
{
"tick": 508,
"enemy": "base:enemy_1_25",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 508,
"enemy": "base:enemy_1_26",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 606,
"enemy": "iron_coast_scout:unit",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 606,
"enemy": "iron_coast_scout:unit",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 606,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 606,
"enemy": "iron_coast_scout:unit",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 606,
"enemy": "iron_coast_scout:unit",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 626,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 3
},
{
"tick": 704,
"enemy": "base:enemy_0_21",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 704,
"enemy": "base:enemy_0_22",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 704,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 704,
"enemy": "base:enemy_0_21",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 704,
"enemy": "base:enemy_0_22",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 800,
"enemy": "base:enemy_0_73",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 800,
"enemy": "base:enemy_0_74",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 800,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 800,
"enemy": "base:enemy_0_73",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 800,
"enemy": "base:enemy_0_74",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 810,
"enemy": "iron_coast_turret:unit",
"x": 40,
"y": -32
"y": -32,
"difficulty": 0
},
{
"tick": 898,
"enemy": "iron_coast_scout:unit",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 898,
"enemy": "iron_coast_scout:unit",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 898,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 898,
"enemy": "iron_coast_scout:unit",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 898,
"enemy": "iron_coast_scout:unit",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 920,
"enemy": "iron_coast_mission_5:foundry",
"x": 176,
"y": -48
"y": -48,
"difficulty": 0
},
{
"tick": 1040,
"enemy": "base:enemy_0_8",
"tick": 1000,
"enemy": "base:enemy_1_25",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 1000,
"enemy": "base:enemy_1_26",
"x": 216,
"y": -24
"y": -32,
"difficulty": 0
},
{
"tick": 1078,
"enemy": "iron_coast_scout:unit",
"x": 200,
"y": -24
},
{
"tick": 1116,
"tick": 1000,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24
"y": -24,
"difficulty": 1
},
{
"tick": 1000,
"enemy": "base:enemy_1_25",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 1000,
"enemy": "base:enemy_1_26",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 1020,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 3
},
{
"tick": 1094,
"enemy": "base:enemy_0_20",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 1094,
"enemy": "base:enemy_0_20",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 1094,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 1094,
"enemy": "base:enemy_0_20",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 1094,
"enemy": "base:enemy_0_20",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 1198,
"enemy": "iron_coast_scout:unit",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 1198,
"enemy": "iron_coast_scout:unit",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 1198,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 1198,
"enemy": "iron_coast_scout:unit",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 1198,
"enemy": "iron_coast_scout:unit",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 1210,
"enemy": "iron_coast_turret:unit",
"x": 232,
"y": -32
"y": -32,
"difficulty": 0
},
{
"tick": 1300,
"enemy": "base:enemy_0_73",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 1300,
"enemy": "base:enemy_0_74",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 1300,
"enemy": "iron_coast_scout:unit",
"x": 56,
"y": -24
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 1338,
"enemy": "iron_coast_scout:unit",
"tick": 1300,
"enemy": "base:enemy_0_73",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 1300,
"enemy": "base:enemy_0_74",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 1396,
"enemy": "base:enemy_0_23",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 1396,
"enemy": "base:enemy_0_24",
"x": 216,
"y": -24
"y": -32,
"difficulty": 0
},
{
"tick": 1376,
"tick": 1396,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24
"y": -24,
"difficulty": 1
},
{
"tick": 1396,
"enemy": "base:enemy_0_23",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 1396,
"enemy": "base:enemy_0_24",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 1416,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 3
},
{
"tick": 1500,
"enemy": "iron_coast_scout:unit",
"x": 80,
"y": -24
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 1538,
"tick": 1500,
"enemy": "iron_coast_scout:unit",
"x": 200,
"y": -24
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 1576,
"tick": 1500,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24
"y": -24,
"difficulty": 1
},
{
"tick": 1500,
"enemy": "iron_coast_scout:unit",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 1500,
"enemy": "iron_coast_scout:unit",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 1586,
"enemy": "base:enemy_0_20",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 1586,
"enemy": "base:enemy_0_20",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 1586,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 1586,
"enemy": "base:enemy_0_20",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 1586,
"enemy": "base:enemy_0_20",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 1660,
"enemy": "iron_coast_boss_5:unit",
"x": 112,
"y": 24
"y": 24,
"difficulty": 0
},
{
"tick": 1694,
"enemy": "base:enemy_0_21",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 1694,
"enemy": "base:enemy_0_22",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 1694,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 1694,
"enemy": "base:enemy_0_21",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 1694,
"enemy": "base:enemy_0_22",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 1830,
"enemy": "iron_coast_scout:unit",
"x": 64,
"y": -32,
"difficulty": 0
},
{
"tick": 1830,
"enemy": "iron_coast_scout:unit",
"x": 216,
"y": -32,
"difficulty": 0
},
{
"tick": 1830,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 1
},
{
"tick": 1830,
"enemy": "iron_coast_scout:unit",
"x": 24,
"y": -32,
"difficulty": 2
},
{
"tick": 1830,
"enemy": "iron_coast_scout:unit",
"x": 264,
"y": -32,
"difficulty": 3
},
{
"tick": 1850,
"enemy": "iron_coast_scout:unit",
"x": 136,
"y": -24,
"difficulty": 3
}
],
"art": {
+1 -1
View File
@@ -1,6 +1,6 @@
id = "iron_coast_mission_5"
name = "Iron Coast — Mission 5: Cinder Docks"
version = "1.0.0"
version = "1.0.1"
api_version = 1
description = "Shut down two armored furnace stations in a hostile shipbuilding yard, then destroy its launch cruiser. Includes SD/HD industrial terrain, foundry targets, coolant injectors and synthesized warning cues."
content = "content.json"