Retune Iron Coast waves, enemy attacks and weapon presentation
This commit is contained in:
1 parent
00cfcc2031
commit
c4a4d821d5
145 files changed
+9242
-2951
No files matched your search
@@ -1,67 +1,13 @@
|
||||
# Iron Coast — Mission 3: Saltworks Convoy
|
||||
|
||||
Intercept three armored cargo transports, disable two escort turrets and destroy
|
||||
the **Saltbreaker** command cruiser. Cargo wrecks recover maintenance supplies
|
||||
that restore 15 shield each. The completion bonus is 7,500 credits, in addition
|
||||
to enemy destruction rewards. Waiting out the duration cannot complete it.
|
||||
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_3`, `pulse_cannon`, `seeker_swarm`, `ion_lance`, `iron_coast_music`.
|
||||
|
||||
Enable this individual mod to select its installed dependencies automatically:
|
||||
`iron_coast_scout`, `iron_coast_turret`, `iron_coast_boss_3`, `pulse_cannon`,
|
||||
`seeker_swarm`, `ion_lance`, and `iron_coast_music`, all compatible with `^1.0`.
|
||||
Then choose **Iron Coast 3 — Saltworks Convoy** in the mission list. The optional
|
||||
Iron Coast campaign assembly places this mission after Mission 2; the individual
|
||||
mod works independently and does not override any other mission.
|
||||
Mission `iron_coast_mission_3:mission_03`: **Iron Coast 3 — Saltworks Convoy**. Destroy three cargo transports, two escort turrets and Saltbreaker. Required ground objectives remain reachable; escaping optional aircraft never counts as a kill. Elapsed time alone does not finish the mission.
|
||||
|
||||
The saltworks include rectangular evaporation basins, steel conveyors, brine
|
||||
channels and a central cargo route. Eighteen fighter arrivals mix fourteen
|
||||
scripted Iron Coast scouts with four original Raptor enemy definitions:
|
||||
`base:enemy_0_20` uses a weaving descent; `base:enemy_0_21` and
|
||||
`base:enemy_0_22` make opposing lateral sweeps; `base:enemy_0_73` makes a
|
||||
curved approach. Their original sprite IDs, animation, weapons, movement paths,
|
||||
health and rewards are retained. They spawn before the command cruiser.
|
||||
Scheduled spawn totals for Training / Rookie / Veteran / Elite are **32 / 45 / 58 / 71**. These are enabled scheduled entries, not simultaneous live-enemy counts. Groups can overlap when earlier enemies survive.
|
||||
|
||||
Cargo transports and required turrets stop at their interdiction lines instead
|
||||
of scrolling out of reach. The Saltbreaker remains in its patrol corridor until
|
||||
destroyed. A full 20-slot inventory can start and complete this mission: it
|
||||
does not grant loans or additional equipment, and cargo recovery restores
|
||||
shield directly. Mission start resets the objective and phase state on retries.
|
||||
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.
|
||||
|
||||
All new artwork and sound are included in Git: three built-in imagegen master
|
||||
images, their packaged SD and HD variants, five synthesized WAV cues, the
|
||||
deterministic asset builder and provenance. SD uses the original game palette;
|
||||
HD keeps the same logical canvases. Terrain is quantized as one complete image
|
||||
before tile extraction. A forward/reflected repeat makes both scroll boundaries
|
||||
match exactly. `asset-report.json` records dimensions, transparency, palette
|
||||
checks, seam checks, source hashes and audio hashes.
|
||||
## Validation and history
|
||||
|
||||
Regenerate the packaged images and cues from the checked-in masters:
|
||||
|
||||
```sh
|
||||
python3 RustRaptor/mods/iron_coast_mission_3/build_assets.py
|
||||
```
|
||||
|
||||
The default builder palette comes from the separately installed original catalog
|
||||
at `data/misc/PALETTE_DAT`; use `--palette PATH` to select another copy. Original
|
||||
game assets are not copied into the mod. `prompts.md` and `prompts.json` document
|
||||
generation, including the style-reference roles.
|
||||
|
||||
Run the local acceptance probe from the repository root:
|
||||
|
||||
```sh
|
||||
RustRaptor/mods/iron_coast_mission_3/validate.sh
|
||||
```
|
||||
|
||||
The probe uses the actual original catalog and scripts, tests registered pilots
|
||||
(75 shield and 10,000 credits) on difficulties 1–3, tests a default deterministic
|
||||
fixture, checks that essential targets remain available, and checks restart,
|
||||
full-inventory and single-reward behavior. Ordinary playthroughs use starter
|
||||
forward guns with held fire at logical position `(144, 160)` and inject no
|
||||
damage, credits, shield or inventory commands into the playthrough. The separate retention
|
||||
test restores test shield only to observe waiting behavior; it is not used as
|
||||
a successful gameplay proof. `validation-report.txt` records final results.
|
||||
|
||||
Final registered-pilot starter results: difficulty 1 completed at tick **1184**
|
||||
with **88** shield; difficulties 2 and 3 completed at tick **1264** with
|
||||
**83** shield. All three ended with **21,515** credits. The full 20-slot flight
|
||||
completed at tick **1178** with 82 shield and retained every non-energy item
|
||||
and count. No paid refills or premium weapon purchases are required.
|
||||
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.
|
||||
@@ -68,7 +68,7 @@
|
||||
"missions": [
|
||||
{
|
||||
"id": "iron_coast_mission_3:mission_03",
|
||||
"name": "Iron Coast 3 \u2014 Saltworks Convoy",
|
||||
"name": "Iron Coast 3 — Saltworks Convoy",
|
||||
"duration": 3000,
|
||||
"auto_complete": false,
|
||||
"columns": 9,
|
||||
@@ -2886,148 +2886,501 @@
|
||||
],
|
||||
"spawns": [
|
||||
{
|
||||
"tick": 40,
|
||||
"enemy": "base:enemy_0_20",
|
||||
"x": 80,
|
||||
"y": -32
|
||||
},
|
||||
{
|
||||
"tick": 75,
|
||||
"tick": 36,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 200,
|
||||
"y": -24
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 125,
|
||||
"enemy": "base:enemy_0_21",
|
||||
"x": 232,
|
||||
"y": -32
|
||||
"tick": 36,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 36,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 36,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 36,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 116,
|
||||
"enemy": "base:enemy_0_23",
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 116,
|
||||
"enemy": "base:enemy_0_24",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 116,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 116,
|
||||
"enemy": "base:enemy_0_23",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 116,
|
||||
"enemy": "base:enemy_0_24",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 130,
|
||||
"enemy": "iron_coast_turret:unit",
|
||||
"x": 144,
|
||||
"y": -32
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 190,
|
||||
"enemy": "iron_coast_mission_3:convoy",
|
||||
"x": 148,
|
||||
"y": -40
|
||||
"y": -40,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 235,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 228,
|
||||
"y": -24
|
||||
"tick": 214,
|
||||
"enemy": "base:enemy_1_25",
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 280,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 70,
|
||||
"y": -24
|
||||
"tick": 214,
|
||||
"enemy": "base:enemy_1_26",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 340,
|
||||
"tick": 214,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 405,
|
||||
"tick": 214,
|
||||
"enemy": "base:enemy_1_25",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 214,
|
||||
"enemy": "base:enemy_1_26",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 306,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 200,
|
||||
"y": -24
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 306,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 306,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 306,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 306,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 398,
|
||||
"enemy": "base:enemy_0_21",
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 398,
|
||||
"enemy": "base:enemy_0_22",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 398,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 398,
|
||||
"enemy": "base:enemy_0_21",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 398,
|
||||
"enemy": "base:enemy_0_22",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 430,
|
||||
"enemy": "iron_coast_mission_3:convoy",
|
||||
"x": 148,
|
||||
"y": -40
|
||||
"y": -40,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 450,
|
||||
"tick": 488,
|
||||
"enemy": "base:enemy_0_73",
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 488,
|
||||
"enemy": "base:enemy_0_74",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 488,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 92,
|
||||
"y": -24
|
||||
"x": 136,
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 488,
|
||||
"enemy": "base:enemy_0_73",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 488,
|
||||
"enemy": "base:enemy_0_74",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 500,
|
||||
"enemy": "iron_coast_turret:unit",
|
||||
"x": 144,
|
||||
"y": -32
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 555,
|
||||
"tick": 582,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 582,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 582,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 615,
|
||||
"enemy": "base:enemy_0_22",
|
||||
"x": 64,
|
||||
"y": -32
|
||||
},
|
||||
{
|
||||
"tick": 660,
|
||||
"tick": 582,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 70,
|
||||
"y": -24
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 582,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 674,
|
||||
"enemy": "base:enemy_1_25",
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 674,
|
||||
"enemy": "base:enemy_1_26",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 674,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 674,
|
||||
"enemy": "base:enemy_1_25",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 674,
|
||||
"enemy": "base:enemy_1_26",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 720,
|
||||
"enemy": "iron_coast_mission_3:convoy",
|
||||
"x": 148,
|
||||
"y": -40
|
||||
"y": -40,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 730,
|
||||
"tick": 774,
|
||||
"enemy": "base:enemy_0_20",
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 774,
|
||||
"enemy": "base:enemy_0_20",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 774,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 790,
|
||||
"tick": 774,
|
||||
"enemy": "base:enemy_0_20",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 774,
|
||||
"enemy": "base:enemy_0_20",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 868,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 210,
|
||||
"y": -24
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 865,
|
||||
"tick": 868,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 868,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 868,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 868,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 980,
|
||||
"enemy": "base:enemy_0_73",
|
||||
"x": 128,
|
||||
"y": -24
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 920,
|
||||
"tick": 980,
|
||||
"enemy": "base:enemy_0_74",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 980,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 975,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 220,
|
||||
"y": -24
|
||||
"tick": 980,
|
||||
"enemy": "base:enemy_0_73",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 1030,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 80,
|
||||
"y": -24
|
||||
},
|
||||
{
|
||||
"tick": 1070,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24
|
||||
"tick": 980,
|
||||
"enemy": "base:enemy_0_74",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 1100,
|
||||
"enemy": "iron_coast_boss_3:unit",
|
||||
"x": 112,
|
||||
"y": -64
|
||||
"y": -64,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 1128,
|
||||
"enemy": "base:enemy_0_23",
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 1128,
|
||||
"enemy": "base:enemy_0_24",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 1128,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 1128,
|
||||
"enemy": "base:enemy_0_23",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 1128,
|
||||
"enemy": "base:enemy_0_24",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
},
|
||||
{
|
||||
"tick": 1260,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 64,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 1260,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 216,
|
||||
"y": -32,
|
||||
"difficulty": 0
|
||||
},
|
||||
{
|
||||
"tick": 1260,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 136,
|
||||
"y": -24,
|
||||
"difficulty": 1
|
||||
},
|
||||
{
|
||||
"tick": 1260,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 24,
|
||||
"y": -32,
|
||||
"difficulty": 2
|
||||
},
|
||||
{
|
||||
"tick": 1260,
|
||||
"enemy": "iron_coast_scout:unit",
|
||||
"x": 264,
|
||||
"y": -32,
|
||||
"difficulty": 3
|
||||
}
|
||||
],
|
||||
"art": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
id = "iron_coast_mission_3"
|
||||
name = "Iron Coast — Mission 3: Saltworks Convoy"
|
||||
version = "1.0.0"
|
||||
version = "1.0.1"
|
||||
api_version = 1
|
||||
description = "Intercept three armored cargo transports through the salt flats, disable their two escorts and destroy the convoy command cruiser. New SD/HD saltworks terrain, cargo sprites and synthesized radio cues."
|
||||
content = "content.json"
|
||||
|
||||
Reference in new issue
Block a user