S3-078: Complete the Asian campaign
Parent and ownership
Parent epic: https://github.com/stacksjs/the-settlers-iii-remake/issues/12
Source owner: stacksjs/the-settlers-iii-remake. Master roadmap: https://github.com/stacksjs/the-settlers-iii-remake/issues/4.
Problem and observable result
Match original mission and faction behavior. Support special production and naval conditions. Retain per-mission outcome evidence.
The current application is a browser prototype. Passing the Riverlands campaign does not establish original-game or native parity. This issue is complete only when its stated behavior has retained evidence.
Evidence and interfaces
Decoded mission data drives a bounded declarative objective runtime. Save mission progress with the world. Editing and import/export use the same validated map representation.
- https://github.com/JakeSteam/settlers/blob/8426388935b436e65b0697ac401c4247ab097364/en/changes/changes.htm
- https://github.com/paulwedeck/settlers-remake/blob/6ad8c4230a4aa4cd21840f8cb59a38344e41c3e0/jsettlers.logic/src/main/java/jsettlers/logic/map/loading/original/OriginalMapFileContentReader.java
Pin the inspected revisions and fixture hashes in the implementation evidence. Original-game observations govern rules and timing. JSettlers is implementation evidence, not an authoritative balance specification. Unknown values remain explicitly unverified.
Acceptance criteria
- Match original mission and faction behavior.
- Support special production and naval conditions.
- Retain per-mission outcome evidence.
- The visible result agrees with the underlying simulation or platform state, including failure paths.
- Tests exercise the maintained public interface and retain reproducible fixtures or execution receipts.
- Include a per-mission table covering original identifier, starting state, objectives, special triggers, save/load, failure, victory, and retained evidence. A generic victory is insufficient.
Test matrix
- Run every Asian mission fixture.
- Verify naval and production objectives.
- Exercise invalid input, cancellation or interruption, and repeated execution where this interface permits them.
- Verify determinism/conservation for simulation changes and resource ownership/disposal for platform changes.
- Run owning-repository lint, relevant type checks and tests. Capture actual native output for native capability claims.
Scope constraints
Implement this behavior as a complete verifiable slice. Do not silently expand into adjacent tickets or substitute simplified gameplay. Keep the shared TypeScript simulation, shared stx signals, and ts-css conventions. Native gameplay and HUD must not depend on a WebView. HomeOS reuse must not introduce a kernel dependency into the game. Existing unrelated edits and authored guidance must be preserved.
Per-mission acceptance ledger
These are planning slots. Original file identifiers, revisions, names, starting conditions, objectives, timings, and evidence are unverified until S3-002/006/007 establish them. Reconcile counts and add any missing original missions before closing this issue. Do not convert an unchecked cell into a passing result without a retained fixture and receipt.
The preserved original manual identifies the tutorial, base factions, Mission CD, Amazons and Three Gods paths. The campaign index supplies the provisional eight-mission and twelve-mission slot counts; it is secondary evidence, not authority for mission behavior.
For every row, record the original map ID/hash and rules revision; starting players, terrain, goods and units; exact objectives/triggers and failure conditions; briefing, voice/cinematic and localization; checkpoint restoration mid-trigger; victory, unlocks/branches and ending; and links to original observation plus browser/native captures.
| Planning slot | Original ID/hash and start | Objectives/triggers/failure | Media/localization | Save/restore | Victory/progression and evidence |
|---|---|---|---|---|---|
| base-asian-01 (Base Asian 1) | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified |
| base-asian-02 (Base Asian 2) | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified |
| base-asian-03 (Base Asian 3) | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified |
| base-asian-04 (Base Asian 4) | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified |
| base-asian-05 (Base Asian 5) | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified |
| base-asian-06 (Base Asian 6) | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified |
| base-asian-07 (Base Asian 7) | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified |
| base-asian-08 (Base Asian 8) | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified | [ ] unverified |
Blocked by
- https://github.com/stacksjs/the-settlers-iii-remake/issues/62
- https://github.com/stacksjs/the-settlers-iii-remake/issues/65
- https://github.com/stacksjs/the-settlers-iii-remake/issues/77
Upstream release and adoption
Application behavior belongs here. If a reproduction identifies a framework defect, repair and release its owning source first, update Stacks where affected, then install the verified packages here.
No node_modules edits, copied runtimes, generated-source string patches, fabricated globals, successful no-op implementations, or skipped release gates. Push tested conventional commits as Chris to the owning origin/main without coauthor trailers or force pushes.
Completion evidence
- Implementation commits and relevant upstream issue links.
- Exact checks and results, fixture hashes, and screenshots/native execution evidence where applicable.
- Published package versions, downstream lockfile identity, and release receipts when affected.
- Remaining limitations stated explicitly. Partial work does not close this issue.