Gustav Story Format¶
Game version: 1.32a
← Moddable tables index · Documentation index
Library table: Gustav Story Format (ID 5) · S&S Editor slot: 20 · Template: 20 gustav_story_format.csv
The richest story format: linked/recurring stories with HOOKS. Three things distinguish it from Delta: every sentence has its own IF gate (cols 10-27, 9 conditional sentences) so the narrative reacts to state; each decision carries a skill roll (ROLL SET / DIFF SET) and SIX conditional result blocks (RESULT_IF/TEXT/SET) so one decision can branch on the roll outcome; and a HOOK (cols 239-245) turns the story into a persistent button the player can trigger. Up to 6 decisions. The decision block (cols 29-58) repeats 6x with a 30-column stride (Decision 2 = 59-88, … Decision 6 = 179-208).
Scope & logic¶
Per-row, selected by the instance_type column (story scopes — see Logic Scopes — what's available where).
Logic-bearing columns (build-time scope-checked): if, set, sentences[].if, decisions[].if, decisions[].results[].if, decisions[].results[].set, immediate_logic[].check, immediate_logic[].set, hook_if, hook_set
Columns¶
Column names + count are read from the live template (the game's own headers); descriptions are curated.
| Col | Name | Description |
|---|---|---|
| 0 | STORY GROUP ID | Story Group ID — the group gating how many run per turn (Gustav puts the group id first). |
| 1 | TITLE | Title (limited UDS). |
| 2 | INSTANCETYPE | INSTANCETYPE — the scope (see Logic Scopes — what's available where). Gustav linked stories are typically zone (3). Values: 0 = global; 1 = org; 2 = diplomatic; 3 = zone (typical for linked stories); 4 = character; 5 = unit; 6 = unit-commander; 7 = trade |
| 3 | IF | IF — candidate gate (blank or >0). Linked stories often gate on a REGKEY flag they set earlier. |
| 4 | SET | SET — run on display (TEMP setup). |
| 5 | Comments | Comments (cols 5-9) — author comment fields, not used by the engine. |
| 6 | Comments | |
| 7 | Comments | |
| 8 | Comments | |
| 9 | Comments | |
| 10 | SENTENCE1 if | SENTENCE1 IF + SENTENCE1 regular (cols 10-11) — each of the 9 sentences (cols 10-27) has an IF gate then its text, so sentences appear conditionally. (SENTENCEn_IF is scope-checked.) |
| 11 | SENTENCE1 regular | |
| 12 | SENTENCE2 if | |
| 13 | SENTENCE2 regular | |
| 14 | SENTENCE3 if | |
| 15 | SENTENCE3 regular | |
| 16 | SENTENCE4 if | |
| 17 | SENTENCE4 regular | |
| 18 | SENTENCE5 if | |
| 19 | SENTENCE5 regular | |
| 20 | SENTENCE6 if | |
| 21 | SENTENCE6 regular | |
| 22 | SENTENCE7 if | |
| 23 | SENTENCE7 regular | |
| 24 | SENTENCE8 if | |
| 25 | SENTENCE8 regular | |
| 26 | SENTENCE9 if | |
| 27 | SENTENCE9 regular | |
| 28 | KEY QUESTION | Key Question — text between sentences and decisions. |
| 29 | DECISION1_IF | DECISION1_IF — decision offered when blank or >0. |
| 30 | DECISION1 TEXT | DECISION1 TEXT — the button (blank = no decision). |
| 31 | REGIMEKEY | Regime Key / qty (31-32), trait A/B (33-36), advice A + talkcode (37-38; see Talk Codes). |
| 32 | QTY | |
| 33 | TRAIT1A | |
| 34 | TRAIT DELTA | |
| 35 | TRAIT 1B | |
| 36 | TRAIT DELTA | |
| 37 | ADVISE1A_TEXT | |
| 38 | ADVISE1A_TALKCODE | |
| 39 | ROLL SET | ROLL SET (col 39) + DIFF SET (col 40) — set up a skill roll for this decision (author with ?SkillRoll, which renders correctly incl. Gustav). |
| 40 | DIFF SET | |
| 41 | RESULT_IF | Result blocks: RESULT_IF / RESULT_TEXT / RESULT_SET repeat 6x (cols 41-58), so the decision branches on the roll/state — each block shows its text + runs its SET when its IF passes (scope-checked). |
| 42 | RESULT_TEXT | |
| 43 | RESULT_SET | |
| 44 | RESULT_IF | |
| 45 | RESULT_TEXT | |
| 46 | RESULT_SET | |
| 47 | RESULT_IF | |
| 48 | RESULT_TEXT | |
| 49 | RESULT_SET | |
| 50 | RESULT_IF | |
| 51 | RESULT_TEXT | |
| 52 | RESULT_SET | |
| 53 | RESULT_IF | |
| 54 | RESULT_TEXT | |
| 55 | RESULT_SET | |
| 56 | RESULT_IF | |
| 57 | RESULT_TEXT | |
| 58 | RESULT_SET | |
| 59 | DECISION2_IF | |
| 60 | DECISION2 TEXT | |
| 61 | REGIMEKEY | |
| 62 | QTY | |
| 63 | TRAIT1A | |
| 64 | TRAIT DELTA | |
| 65 | TRAIT 1B | |
| 66 | TRAIT DELTA | |
| 67 | ADVISE1A_TEXT | |
| 68 | ADVISE1A_TALKCODE | |
| 69 | ROLL SET | |
| 70 | DIFF SET | |
| 71 | RESULT_IF | |
| 72 | RESULT_TEXT | |
| 73 | RESULT_SET | |
| 74 | RESULT_IF | |
| 75 | RESULT_TEXT | |
| 76 | RESULT_SET | |
| 77 | RESULT_IF | |
| 78 | RESULT_TEXT | |
| 79 | RESULT_SET | |
| 80 | RESULT_IF | |
| 81 | RESULT_TEXT | |
| 82 | RESULT_SET | |
| 83 | RESULT_IF | |
| 84 | RESULT_TEXT | |
| 85 | RESULT_SET | |
| 86 | RESULT_IF | |
| 87 | RESULT_TEXT | |
| 88 | RESULT_SET | |
| 89 | DECISION3_IF | |
| 90 | DECISION3 TEXT | |
| 91 | REGIMEKEY | |
| 92 | QTY | |
| 93 | TRAIT1A | |
| 94 | TRAIT DELTA | |
| 95 | TRAIT 1B | |
| 96 | TRAIT DELTA | |
| 97 | ADVISE1A_TEXT | |
| 98 | ADVISE1A_TALKCODE | |
| 99 | ROLL SET | |
| 100 | DIFF SET | |
| 101 | RESULT_IF | |
| 102 | RESULT_TEXT | |
| 103 | RESULT_SET | |
| 104 | RESULT_IF | |
| 105 | RESULT_TEXT | |
| 106 | RESULT_SET | |
| 107 | RESULT_IF | |
| 108 | RESULT_TEXT | |
| 109 | RESULT_SET | |
| 110 | RESULT_IF | |
| 111 | RESULT_TEXT | |
| 112 | RESULT_SET | |
| 113 | RESULT_IF | |
| 114 | RESULT_TEXT | |
| 115 | RESULT_SET | |
| 116 | RESULT_IF | |
| 117 | RESULT_TEXT | |
| 118 | RESULT_SET | |
| 119 | DECISION4_IF | |
| 120 | DECISION4 TEXT | |
| 121 | REGIMEKEY | |
| 122 | QTY | |
| 123 | TRAIT1A | |
| 124 | TRAIT DELTA | |
| 125 | TRAIT 1B | |
| 126 | TRAIT DELTA | |
| 127 | ADVISE1A_TEXT | |
| 128 | ADVISE1A_TALKCODE | |
| 129 | ROLL SET | |
| 130 | DIFF SET | |
| 131 | RESULT_IF | |
| 132 | RESULT_TEXT | |
| 133 | RESULT_SET | |
| 134 | RESULT_IF | |
| 135 | RESULT_TEXT | |
| 136 | RESULT_SET | |
| 137 | RESULT_IF | |
| 138 | RESULT_TEXT | |
| 139 | RESULT_SET | |
| 140 | RESULT_IF | |
| 141 | RESULT_TEXT | |
| 142 | RESULT_SET | |
| 143 | RESULT_IF | |
| 144 | RESULT_TEXT | |
| 145 | RESULT_SET | |
| 146 | RESULT_IF | |
| 147 | RESULT_TEXT | |
| 148 | RESULT_SET | |
| 149 | DECISION5_IF | |
| 150 | DECISION5 TEXT | |
| 151 | REGIMEKEY | |
| 152 | QTY | |
| 153 | TRAIT1A | |
| 154 | TRAIT DELTA | |
| 155 | TRAIT 1B | |
| 156 | TRAIT DELTA | |
| 157 | ADVISE1A_TEXT | |
| 158 | ADVISE1A_TALKCODE | |
| 159 | ROLL SET | |
| 160 | DIFF SET | |
| 161 | RESULT_IF | |
| 162 | RESULT_TEXT | |
| 163 | RESULT_SET | |
| 164 | RESULT_IF | |
| 165 | RESULT_TEXT | |
| 166 | RESULT_SET | |
| 167 | RESULT_IF | |
| 168 | RESULT_TEXT | |
| 169 | RESULT_SET | |
| 170 | RESULT_IF | |
| 171 | RESULT_TEXT | |
| 172 | RESULT_SET | |
| 173 | RESULT_IF | |
| 174 | RESULT_TEXT | |
| 175 | RESULT_SET | |
| 176 | RESULT_IF | |
| 177 | RESULT_TEXT | |
| 178 | RESULT_SET | |
| 179 | DECISION6_IF | |
| 180 | DECISION6 TEXT | |
| 181 | REGIMEKEY | |
| 182 | QTY | |
| 183 | TRAIT1A | |
| 184 | TRAIT DELTA | |
| 185 | TRAIT 1B | |
| 186 | TRAIT DELTA | |
| 187 | ADVISE1A_TEXT | |
| 188 | ADVISE1A_TALKCODE | |
| 189 | ROLL SET | |
| 190 | DIFF SET | |
| 191 | RESULT_IF | |
| 192 | RESULT_TEXT | |
| 193 | RESULT_SET | |
| 194 | RESULT_IF | |
| 195 | RESULT_TEXT | |
| 196 | RESULT_SET | |
| 197 | RESULT_IF | |
| 198 | RESULT_TEXT | |
| 199 | RESULT_SET | |
| 200 | RESULT_IF | |
| 201 | RESULT_TEXT | |
| 202 | RESULT_SET | |
| 203 | RESULT_IF | |
| 204 | RESULT_TEXT | |
| 205 | RESULT_SET | |
| 206 | RESULT_IF | |
| 207 | RESULT_TEXT | |
| 208 | RESULT_SET | |
| 209 | DEFAULT DECISION NUMBER | Default Decision number. |
| 210 | TRAITSNOTASPROFILE | Traits-not-as-profile. |
| 211 | MAXRUNS | Max runs. |
| 212 | IMMEDIATE_LOGIC_CHECK | immediate_logic block (check/set) — repeats 13x (cols 212-237); runs once per turn while present (scope-checked). |
| 213 | IMMEDIATE_LOGIC_SET | |
| 214 | IMMEDIATE_LOGIC_CHECK | |
| 215 | IMMEDIATE_LOGIC_SET | |
| 216 | IMMEDIATE_LOGIC_CHECK | |
| 217 | IMMEDIATE_LOGIC_SET | |
| 218 | IMMEDIATE_LOGIC_CHECK | |
| 219 | IMMEDIATE_LOGIC_SET | |
| 220 | IMMEDIATE_LOGIC_CHECK | |
| 221 | IMMEDIATE_LOGIC_SET | |
| 222 | IMMEDIATE_LOGIC_CHECK | |
| 223 | IMMEDIATE_LOGIC_SET | |
| 224 | IMMEDIATE_LOGIC_CHECK | |
| 225 | IMMEDIATE_LOGIC_SET | |
| 226 | IMMEDIATE_LOGIC_CHECK | |
| 227 | IMMEDIATE_LOGIC_SET | |
| 228 | IMMEDIATE_LOGIC_CHECK | |
| 229 | IMMEDIATE_LOGIC_SET | |
| 230 | IMMEDIATE_LOGIC_CHECK | |
| 231 | IMMEDIATE_LOGIC_SET | |
| 232 | IMMEDIATE_LOGIC_CHECK | |
| 233 | IMMEDIATE_LOGIC_SET | |
| 234 | IMMEDIATE_LOGIC_CHECK | |
| 235 | IMMEDIATE_LOGIC_SET | |
| 236 | IMMEDIATE_LOGIC_CHECK | |
| 237 | IMMEDIATE_LOGIC_SET | |
| 238 | HIDEDECISION_CHECK | Hide-decision check — IF gate that hides the decisions. |
| 239 | HOOK TYPE | HOOK TYPE — makes the story a persistent hook/button (cols 239-245: type, IF, button name, button mouse-over, PP cost, SET, text). This is the Linked-Stories mechanism. |
| 240 | HOOK IF | |
| 241 | HOOK BUTTON NAME | |
| 242 | HOOK BUTTON MOUSE OVER | |
| 243 | HOOK PP COST | |
| 244 | HOOK SET | |
| 245 | HOOK TEXT |
Notes¶
-
Gustav (Linked Stories) usually runs zone-scoped, BUT during decision execution ZONEID may be 0 — do NOT call
exe(346,24,ZONEID,perk)(AddHexPerk) from a Gustav decision; place perks from a Delta instance_type-3 story instead. -
Author skill rolls with ?SkillRoll (it renders/works including in Gustav); avoid raw che/chk. Conditional sentences (SENTENCEn_IF) + result branches make Gustav the format for dynamic, stateful stories.
This doc was generated from extracting data from Shadow Empire version 1.32a on 2026-06-05 06:56 UTC.