Files
EscapistsReintroduced/docs/living-island/T6-ambient-signals.md
T
jakub cab998fb64 Combine Workshop addon and fix prison startup
Merge owned systems into one addon while preserving resource identities. Gate player admission on the replicated prison scene, restore the original framed door, and hold enemy AI until escape. Correct scenario branding and author metadata, include publishing assets, and retain regression and native verification evidence.
2026-09-20 16:42:52 +02:00

88 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# T6 — Cheap signs of life
Read `docs/living-island/README.md` first, including the rules section. Depends on T2.
## Goal
Sell an occupied island through things that are not soldiers. Every item here is
either a static prop, a single entity, or a timed event — none of it adds a
standing AI presence.
Budget for this whole task: **at most 4 active agents at any time, island-wide.**
## What to build
`addons/core/Scripts/Game/ERR/ERR_AmbientLife.c`.
### 1. Static occupation markers (zero CPU)
Placed once during preparation, never ticked:
- Parked military vehicles at sites and checkpoints.
- Crates, barrels, tents, field tables at outposts.
- At night, lit windows and lamps at occupied sites; dark at abandoned ones.
Drive the light state from the site's eliminated flag, evaluated on the
existing environment tick, not a new one.
This alone changes how the island reads at 300 m, for nothing.
### 2. Road traffic that exists only when watched
A `CONVOY` ledger record: a vehicle plus 2 crew travelling a long road route.
It simulates virtually like anything else and materialises only near players.
Two convoy records island-wide is enough — the player meets traffic occasionally
and it is real when they do.
### 3. Distant transit
Occasionally (every 8–15 minutes, settings `ambientTransitSeconds`), a single
helicopter flies a high-altitude route across the map, well above small-arms
range, and despawns at the far edge. One vehicle, one pilot, bounded lifetime,
hard cap of one at a time. It must never route over the extraction site while
extraction is active.
### 4. Audio and radio texture
- Use only vanilla sound prefabs. **No audio from the original mod** — see the
licensing rules.
- Occasional distant, non-hostile gunfire near enemy sites (a training burst) is
a strong cue. Gate it hard: never within 400 m of a player, never during an
alert, at most once per 3 minutes.
## Rules
- Everything in this task is skippable: if the budget is full or the mission is
in a terminal phase, ambient life is the first thing dropped.
- One tick, ≥ 10 s, shared by all ambient features. No feature gets its own timer.
- Every ambient entity is owned and tracked so `Stop()` removes all of it. Nothing
here may survive a restart — the repo already had restart-cleanup work; do not
regress it.
- Ambient units are `SCR_EAISpawnImportance.LOW` so they lose the budget contest
first.
## Acceptance criteria
1. Standing still in open terrain for 10 minutes, a player sees or hears at least
two distinct signs of occupation.
2. Ambient features contribute at most 4 active agents at any moment, verified in
the admin status output.
3. Restarting the mission leaves no ambient entity behind.
4. No ambient event fires during extraction over the extraction site.
5. `python3 tools/check.py` passes.
## Tests to write
`tests/test_ambient_life.py`:
- The gating rule refuses a transit while one is already active, during a
terminal phase, and when the agent budget is full.
- The gunfire rule refuses within 400 m of a player and inside the cooldown.
- The ownership list is emptied by `Stop()`.
## Do not
- Do not add civilians in this task. A civilian population is a separate, much
larger piece of work with its own budget.
- Do not spawn ambient AI that patrols indefinitely; ambient means bounded.
- Do not reuse any audio, particle or composition asset from the original mod.