ReviewOS

stacks/the-settlers-iii-remake

[S3-058] Complete the Roman faction and eight interventions

#60
Open chris opened this 8 days ago ·
8 days ago

S3-058: Complete the Roman faction and eight interventions

Parent and ownership

Parent epic: https://github.com/stacksjs/the-settlers-iii-remake/issues/9 Source owner: stacksjs/the-settlers-iii-remake. Master roadmap: https://github.com/stacksjs/the-settlers-iii-remake/issues/4.

Problem and observable result

Implement every intervention cost and target. Persist durations and world effects. Provide matching presentation and failure feedback.

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

Individual units execute deterministic commands. Recruitment, damage, ownership, offerings, promotions, and interventions use versioned faction rules and physical resources.

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

  • Implement every intervention cost and target.
  • Persist durations and world effects.
  • Provide matching presentation and failure feedback.
  • 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.

Test matrix

  • Exercise all eight interventions independently.
  • Reject insufficient manna and invalid targets.
  • 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.

Blocked by

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.
8 days ago

Progress in 601e4d7 (rules roman-engineering 0.6.0, digest 48a5670c…7ef56d): all eight of Jupiter's interventions are cast by priests with actual costs, targets, durations and world effects.

Names and effects follow the manual (military.htm, "Jupiter's Acts of Divine Intervention"). Values follow the reference remake (ESpellType, EEffectType, MageMovable): manna costs rising by a tenth per use, a 10-tile casting distance, and the Magic Eye needing no priest nearby.

InterventionEffect in the engine
The Magic Eye (10)land within 10 tiles in sight for 6 s, without walking
Grassland Galore (10)desert within 7 tiles becomes grass
Gorgeous Growth (15)the nearest of the caster's farmers, wine-growers or foresters plants at half the growing time for 300 s
Festering Fear (15)up to 20 enemy soldiers deal half damage while on the caster's land for 30 s (manual wording; the reference conditions it differently)
Heavenly Presents (20)up to 5 piles of up to 8 random goods, recorded as created
The Midas Touch (20)up to 40 of the caster's iron become gold, consumed and produced in the ledger
Vanishing Resources (25)mountain resources not owned by the caster within 5 tiles are halved
Conversion of the Barbarians (40)up to 10 enemy soldiers change sides; the people ledger records joined and left
  • Failure feedback: not enough manna and an unreachable target are reported as events. Foreign priests, unknown spells and off-map targets are refused.
  • Persistence: orders, effects, eyes and cast counts are saved and validated. A restore mid-walk continues identically.
  • Tests: tests/unit/engine-interventions.test.ts covers each intervention independently, plus refusals and the save/restore case.
  • UI: the sidebar lists the interventions with their current costs and casts with the nearest free priest. The priest sprite is imported from the demo (file 11, sequence 195).

Still open, so this stays open:

  • intervention animations and sounds (reference animations 114-127 and sounds 78/80/95/100 are not mapped yet)
  • the rest of the Roman faction's buildings (big and lookout towers, healer, marketplace, docks, donkey farm, large residence)
  • original-observed values

Sign in to comment on this issue.