Every piece of text that belongs to a specific campaign’s identity — the app title, boot sequence, prompt, stealth grades, defense alerts, and closing credits — lives in theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/0x-unkwn0wn/simterm/llms.txt
Use this file to discover all available pages before exploring further.
theme block of campaign.ron. The engine provides neutral defaults so campaigns that omit theme still start cleanly, but a fully themed campaign feels like its own product. No Rust changes are required.
Theme struct fields
| Field | Type | Default | Description |
|---|---|---|---|
app_title | string | "TERMINAL" | Short title shown in the top status bar chip. |
boot_header | string | "T E R M I N A L" | Large header displayed on the boot overlay when a session opens. |
boot_lines | string list | ["Enlace establecido.", "Sesión iniciada."] | Lines typed out with a typewriter effect on the boot overlay. |
overlay_title | string | " TERMINAL " | Title bar shown on briefing/debrief overlays. |
alert_title | string | " ALERTA " | Title bar shown on critical-alert overlays. |
operator_prompt | string | "operator@console:~$ " | Shell prompt shown before the player has a foothold on a target. |
stealth_grades | string list | ["FANTASMA","LIMPIO","OPERATIVO","DESCUIDADO"] | Four stealth tier labels, ordered best to worst (lowest trace → highest). |
defense_messages | string list | engine defaults | Messages shown as active defense escalates, one per stage. If fewer messages are provided than stages, the last one is reused. |
aborted_lines | string list | engine defaults | Lines shown on the “operation aborted” overlay (trace limit reached). |
credits | string list | ["FIN", "", "Campaña completada."] | Lines shown in the end-of-campaign credits roll. |
How stealth_grades maps to trace ratio
The engine divides the final trace ratio (0.0 = no trace, 1.0 = detection limit reached) into equal bands and maps each band to a grade. With four grades the bands are:
| Trace ratio band | Grade index | Example value |
|---|---|---|
| 0.00 – 0.24 | 0 (best) | "GHOST" |
| 0.25 – 0.49 | 1 | "CLEAN" |
| 0.50 – 0.74 | 2 | "ACTIVE" |
| 0.75 – 1.00 | 3 (worst) | "EXPOSED" |
How defense_messages map to active defense stages
Active defense escalation is enabled per-mission with reactive: true. When reactive mode is on, the blue-team defense activates in stages as the player’s trace rises. Each stage shows the corresponding defense_messages entry and stiffens exploitation difficulty and trace accumulation.
If your campaign has fewer defense_messages entries than defense stages, the engine repeats the last message for all remaining stages. A single message covers all stages; three messages give distinct per-stage escalation language.
The language field
The language field is set at the campaign level (not inside theme):
en and es. This controls the language used for generic engine-generated UI strings — phase labels, error messages, help text, and similar built-in copy. Shell output is always POSIX English regardless of language (command output like ls, ps, and uname does not change). Campaign-authored story text — briefing, debrief, intro, file content, theme strings — is never auto-translated; write it in whatever language your campaign targets.
Full Theme example
The following is taken directly from the sample campaign:Fortunes and signals
Two campaign-level fields feed optional built-in minigames:fortunes — a list of aphorism strings used by the fortune command. Each call picks one at random. If omitted, the engine uses generic defaults that belong to no specific story:
signals — a list of plain-text words intercepted in encoded form by the signal minigame. The player receives the encoded version and must identify the word. If omitted, generic defaults are used: