Schema

On this page

Every type and field Gozen reads from game.yaml and the files under data/, grouped by topic. For a short, copyable example of a common task, see the cookbook. game.yaml is a Game; each file in data/ is a DataFile. For how the pieces fit together, start with Writing a game.

How to read the columns:

  • Description says what the field is for.

  • Default is the value used when the field is left out. Where schema_version: 0 and 1 differ, both are given (v0 and v1). Version 2 reads like 1.

  • When 0 says what an explicit 0 means for a number; - marks fields that are not numbers. With schema_version: 1, leaving a number out and writing 0 are different things; v0 reads old files and treats them alike for many fields.

  • Required lists when the field must be present, and the fields it cannot be combined with.

  • Refers to names the IDs the value must match, such as troops or an image in assets/. gozen check resolves every one of them.

  • An expression is a string such as level * 30 or flag.trained && !flag.marker_lit. Left out, a condition holds and a formula is 0.

New games use schema 11. Feature minimums vary: version 2 added the commands pick, turn, step, walk, use (with target), equip, buy, sell and act, and verbs and screens in game.yaml. They need schema_version: 2. Likewise the words of maps and painted scenes (map, stage, doll, bubbles, spot) need version 3, and the words of novel games (starting with ui.rollback) need version 4. The same contract is published as JSON Schema in data/schema/, which editors can use for completion; the game loader and gozen check remain the authority on references and expressions.

Types by topic #

TopicTypes
The game file and the data filesGame, DataFile, Start, Fonts, Screen, Terms, UIStyle, TitleFigure, GameOver, Music, Song, MusicCue, SfxVary, MemoCfg, MemoKind, MemoVar, WebPage
PlacesLocation, Person, Action, Exit, Encounter, Shop, Trade, Roamer, Picture
Maps and painted scenesAtlas, MapPoint, Road, Token, Stage, Spot, StageExit, StagePerson, Thing, Front, ScaleMark, Doll, DollPart, Bubble, CardBubble
DungeonsDungeon, DungeonLook, Tile, Generate, FloorPlan, Put, Space, SpaceStair
Events and commandsEvent, Command, Say, ChoiceOption, ChoiceMuted, CG, Stand, EffectCue, WaitCue, SFXCue, Aside, Target, Require, Grant
Party, growth and equipmentActor, Class, Learn, Learning, LevelScale, TreeNode, FaceRule, Slot, EquipItem, EquipStones, StoneSet, Fusion, Meter, Passive
Items, skills and statesItem, ItemCount, Skill, Effect, Usage, State, StateMsgs, StateName, StateNames, Affect, Hurt, Drop
Battles and tacticsBattleCfg, BattleAct, BattleFx, BattleFxAuto, Enemy, Troop, TroopEvent, TroopPick, Rule, TacticAction, TacticCondition, TacticPreset, TacticRow, TacticTarget
Gallery and picture reviewGallery, GalleryCG, GalleryPage, GalleryScene, CGReviewCfg, CGReviewGroup, CGReviewTag, SceneReviewCfg, MoodRule
Other typesActivity, AtlasCamera, AtlasPanel, Attribute, AuthorScreen, Beat, BreedCmd, BreedFamily, BreedKeeper, BreedPair, BreedStaging, Breeding, BurnupColors, BurnupView, Calendar, CallCamera, CallColors, CallControl, CallEach, CallShare, CallViewCue, Campaign, Channel, ChromeStyle, Clash, ClashSkill, ClashTactic, CrowdLines, Defeat, Duo, EndTurnButton, EnsembleCall, EnsembleChat, Entity, EntryBust, EntryMeter, EntryTicket, Episode, EventCall, Faction, FactionRule, Flow, FlowStep, General, GuideStep, HPImage, HPTrigger, IDRef, Ledger, LightStyle, MapAdvice, MaterialStyle, Merge, MessageCue, NovelWindow, Order, OrderCmd, PhaseLook, PhoneApp, PhoneApps, PhoneCue, PhoneItem, PhoneMessage, PhoneNotice, PhonePost, PhoneRow, PhoneVideo, PlanCommand, PlanRule, Planning, PlanningField, PlanningView, PolicyRule, Profile, ProfileBook, ProfileFace, ProfileField, ProfileRelation, Recruit, Region, Reservation, ReserveSwap, Respond, ScreenCall, ScreenEntry, ScreenGuide, SortieLook, SpaceFreeMove, SpaceMaterial, SpaceRoof, SpaceSpeedStage, SpaceWallRegion, SpeechStyle, SpeechTerms, StageFraming, StreamAffection, StreamAsk, StreamAway, StreamBounce, StreamCrowd, StreamEcho, StreamFrame, StreamLine, StreamLive, StreamOption, StreamSlot, StreamTiming, StreamVoice, Streams, TalkPortrait, TimelineItem, TimelineMarker, TimelineRow, TitleMenu, TitleText, ToneStyle, VoiceStyle

Game #

The contents of game.yaml: the game’s title, screen and starting state.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
asidesAside[]Events inserted after the lines of certain speakers, such as a moment of thought or a picture in the character’s mind.empty list-optional-
battleBattleCfgThe rules every battle shares.empty (its fields take their defaults)-optional-
campaignCampaignMakes the game a campaign of regions held by factions over turns: the place of the orders, the player’s faction, the turns, the orders, the generals and how a march is decided. Needs schema version 5.nil; nothing is defined-optional-
card_bubblesCardBubble[]Small particles (such as poison bubbles) that rise from a party member’s status card.empty list-optional-
carrystring[]Variables and flags (var.NAME, flag.NAME, or a prefix ending in *) a new game starts with from the last play that ran carry (schema 10).empty list-optional-
cg_reviewCGReviewCfgSettings for the picture review debug mode: the tags to attach, extra pictures and picture groups.empty (its fields take their defaults)-optional-
data_versionintegerThe version of the game’s content. 0 or omitted means unmanaged. It is separate from the save format version.0 (not tracked)0 is keptoptional-
equip_slotsSlot[]The equipment slots a character has, such as weapon or armor.three slots: weapon, armor, accessory-optional-
flowsstring → FlowSchema 10: named orders of full-screen surfaces gone through step by step; a step not reached opens the current step.empty map-optional-
fontsFontsThe font files the game uses.empty (its fields take their defaults)-optional-
galleryGalleryWhat the title screen’s gallery shows: pictures seen and scenes to replay.empty (its fields take their defaults)-optional-
game_overGameOverWhat happens when the party falls.empty (its fields take their defaults)-optional-
idstringThe game’s ID, which names its save directory.v0: empty; v1: required. The default save directory needs a non-empty ID-required in v1-
join_expexpressionAn expression giving the minimum experience of a member who joins the party, evaluated against the party before joining. Lower experience is raised to this, never lowered.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
languagestringThe language shown: the engine’s built-in words, en (the default) or ja, and the game’s own text, translated by lang/<language>.yaml when it is not the language written.en (English)-optionalen (English) or ja (Japanese)
languagesstring[]The languages the player may choose in the settings, from en and ja; the language shown must be one of them. The default is language alone. With two or more, a first run (no language kept in the settings) is shown in the first of the device’s languages offered (the browser’s navigator.languages, the desktop’s LC_ALL, LC_MESSAGES and LANG; en-US counts as en), else in language. Needs schema version 4.empty list-optional-
max_partyintegerThe largest number of characters in the active party.4v1 rejects 0; v0 has per-field rulesoptional-
memoMemoCfgSettings for the test player’s notes (kinds of notes and numbers kept with each).empty (its fields take their defaults)-optional-
menusstringnone leaves out the title screen and the game menu: the game opens on the newest save, the autosave included, or starts a new game at start, and saves only by autosave. open: save, open: load and open: title are errors with it. Needs schema version 9.empty string-optional-
metersMeter[]Gauges of the player’s numbers shown on the field, in the dungeon and in the status menu.empty list-optional-
phonePhoneAppsPinned game catalog and phone app declarations. Games without this field do not offer a game store.nil; nothing is defined-optional-
planningPlanningOptional typed entities, calendar, activities and period ledgers.nil; nothing is defined-optional-
reactionsstring → stringMaps speaker IDs to reaction book paths under assets/. Memory is saved with the game. A stream’s comment gives the rules value.hour (0 to 23), value.visits (the player’s visits to the channel), value.days (days in a row), value.step (affection step) and value.family (1 on an episode with family: true, else 0), as in when: value.hour >= 23 || value.hour < 5; a rule can remember: [{key: snack, set: "{slot.snack}"}] and a later show say "{from}, the {mem.snack} fan" under when: mem.snack != 0 (ADR 0052).empty map-optional-
scene_reviewSceneReviewCfgSettings for the scene review debug page, such as the tags attached to scenes.empty (its fields take their defaults)-optional-
schema_versionintegerThe version of the YAML specification the game is written for. 0 or omitted means the legacy rules.0 (the legacy spec)0 is keptoptional-
screenScreenThe logical screen size.empty (its fields take their defaults)-optional-
screensstring → AuthorScreenNamed information screens, each with a title and ordered entries. Open with open: NAME.empty map-optional-
stand_insstringA file under assets/ listing placeholder pictures, one path per line. A placeholder picture does not hide character portraits.empty string-optionallist file in assets/
startStartThe state a new game begins in.empty (its fields take their defaults)-required-
stateStateNamesDeclarations of the game’s variables and whether unknown names are rejected.empty (its fields take their defaults)-optional-
streamsstringThe live-stream file (Streams), relative to the game, such as data/streams.yaml. It and its episodes are not data files. Needs schema version 9.empty string-optional-
subtitlestringThe subtitle shown on the title screen.empty string-optional-
termsTermsThe words the menus use, such as the currency name and level label.empty (its fields take their defaults)-optional-
textstring → stringReplaces the engine’s built-in words on the screens, as a map from the engine’s key to your text.empty map-optionalthe engine’s words, keyed by their Japanese source text; laid over the words of language
titlestringThe game’s title.empty string-optional-
title_artPicture or stringA picture drawn on the title screen, such as a logo or key art.empty (its fields take their defaults)-optional-
title_backgroundPicture or stringThe background picture of the title screen.empty (its fields take their defaults)-optional-
title_figuresTitleFigure[]Pictures standing on the title screen in order, with later ones in front. When used, title_art is not drawn.empty list-optional-
title_musicMusicCue or stringThe song and mood played on the title screen.empty (its fields take their defaults)-optional-
title_textTitleTextHow the title screen letters the title and the subtitle: sizes, the space between letters and colors. Needs schema version 3.empty (its fields take their defaults)-optional-
uiUIStyleThe look of the game’s menus and windows.empty (its fields take their defaults)-optional-
verbsstring → stringMaps reusable command names to event IDs. Invoke with NAME: true, or call the event directly with call.empty map-optional-
webWebPageThe page of a browser export as a link to it is shown: its address, a description and a picture, written into the page as Open Graph and X card tags. Without it the page has only the game’s title. Needs schema version 9.nil; nothing is defined-optional-
written_instringThe language the files under data/ are written in. Each other language is translated by lang/<code>.yaml, a map text from the text as written to its translation. The default is language. Needs schema version 4.empty string-optional-

DataFile #

A file under data/. It can hold any of these sections, and the sections from all files are merged.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorsstring → ActorCharacters, keyed by actor ID.empty map-optional-
aistring → Rule[]Named sets of battle AI rules, keyed by AI ID.empty map-optional-
breedingBreedingMonster breeding requirements, species pairs and family rules. Needs schema version 6.nil; nothing is defined-optional-
classesstring → ClassCharacter classes, keyed by class ID.empty map-optional-
elementsstring → stringDamage elements, mapping each element ID to its display name.empty map-optional-
enemiesstring → EnemyEnemy definitions, keyed by enemy ID.empty map-optional-
eventsstring → Event or Command[] (schema 11)Reusable sequences of commands, keyed by event ID.empty map-optional-
factionsstring → FactionThe sides of a campaign, keyed by faction ID. Needs schema version 5.empty map-optional-
fusionsFusion[]Recipes that combine items into another item.empty list-optional-
itemsstring → ItemItems, equipment and key items, keyed by item ID.empty map-optional-
locationsstring → LocationPlaces the party can be, keyed by location ID.empty map-optional-
monster_familiesstring → stringMonster family IDs and their display names. Needs schema version 6.empty map-optional-
musicMusicThe songs and the rules that choose the mood.nil; nothing is defined-optional-
profilesstring → ProfilePages of the character book (the Characters screen), keyed by profile ID; a profile whose ID is an actor’s shows that actor.empty map-optional-
regionsstring → RegionThe regions of a campaign, keyed by region ID. Needs schema version 5.empty map-optional-
shopsstring → ShopShops, keyed by shop ID.empty map-optional-
skillsstring → SkillSkills, keyed by skill ID.empty map-optional-
statesstring → StateStatus conditions such as poison or buffs, keyed by state ID.empty map-optional-
stone_setsstring → StoneSetNamed combinations of stones that give a bonus, keyed by set ID.empty map-optional-
tactic_actionsstring → TacticActionActions the player can choose in tactics, keyed by ID.empty map-optional-
tactic_conditionsstring → TacticConditionConditions the player can choose in tactics, keyed by ID.empty map-optional-
tactic_targetsstring → TacticTargetTargets the player can choose in tactics, keyed by ID.empty map-optional-
troopsstring → TroopEnemy groups that appear in a battle, keyed by troop ID.empty map-optional-

Start #

The state a new game begins in.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
eventstringAn ID of events run when the game starts.empty string-optionalevents
goldintegerThe starting money.00 is keptoptional-
itemsstring → integerThe starting items, as a map from item ID to count.empty map-optionalkeys are items
locationstringAn ID of locations where the party starts.empty string-requiredlocations
partystring[]The IDs of actors who start in the party.empty list-at least one, no duplicatesactors[]

Fonts #

The font files used by the game, as paths under assets/. All are optional: without them the text is set in Go Regular, which Gozen carries and which has Latin letters only.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
popstringThe font used for pop-up text such as damage numbers (text all ASCII), and for the decorations of the stream screens: the bar’s title, LIVE, the viewers, the hosts’ names and the name plate, the glyphs it lacks in the regular font.empty string-optionalfont in assets/
regularstringThe font used for ordinary text. When omitted, the built-in Go Regular is used; it has Latin letters only, so a game in Japanese or another script names its own font here. gozen check warns about characters the built-in font cannot draw.the built-in Go Regular (Latin letters only)-optionalfont in assets/
subtitlestringThe font of the title screen’s subtitle. When empty, the title’s font is used.empty string (the title’s font)-optional-
titlestringThe font of the title screen’s title and subtitle. When empty, the regular font is used.empty string-optionalfont in assets/

Screen #

The logical screen size the game is drawn at.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
heightintegerThe logical screen height in pixels.v0: 720 when width is 0, else 0 / v1: 720v1 rejects 0; v0 has per-field rulesoptional-
nativebooleanRender a 16:9 viewport at native device resolution.false-optional-
widthintegerThe logical screen width in pixels.1280v1 rejects 0; v0 has per-field rulesoptional-

Terms #

The words the menus use for basic stats and money.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
currencystringThe name of the money.G-optional-
expstringThe word for experience points.EXP-optional-
hpstringThe word for hit points.HP-optional-
levelstringThe word for level.Lv-optional-
mpstringThe word for magic points.MP-optional-

UIStyle #

The colors and layout of the windows and message display.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
accentcolor stringThe accent color.no color (the default of where it is drawn)-optional-
backlogintegerHow many lines the backlog keeps. The default is 300.300v1 keeps 0; v0 has per-field rulesoptional-
balloonnumberThe text height of speech balloons over people in a painted scene, as a fraction of the screen height, from 0.01 to 0.2. The default is 0.037; needs schema version 3.00 is keptoptional-
battle_ai_historybooleanShow the battle AI history button and enable B/PageUp, controller L1 and pointer activation. True when omitted. False hides the panel entry and the tactic explanation appended to action messages, without changing decisions or replay traces.true-optional-
battle_foe_namesstringA plate under each foe that is not a boss: name (its name, the default), hp (its name and a bar of its HP) or none.empty string-optional-
battle_fxBattleFxHow strong the battle effects are: shake, flash, number pop, hit stop, charge and finish.empty (its fields take their defaults)-optional-
battle_messagestringThe battle’s message window: fit (as tall as the lines it shows, the default) or fixed (three lines tall).empty string-optional-
bestiarybooleanShow Monsters, the monster book, in the title and field menu. Off by default; under --dev the menus show it anyway. Needs schema version 4.false-optional-
bordercolor stringThe window border color.no color (the default of where it is drawn)-optional-
choice_positionstringSchema 10: where the novel window’s choices stand. Omitted, at the window’s right end as before; center, in the middle of the screen above the window.empty string-optional-
chromeChromeStyleSchema 10: colors and marks of the title bar and browser decoration of windowed planning surfaces and calls. Omission keeps the built-in light desktop look.nil; nothing is defined-optional-
cursorcolor stringThe cursor color.no color (the default of where it is drawn)-optional-
face_shapestringHow faces are cut on planning screens: round (the default) or square, a rounded square. A screen view may choose its own; a video call always keeps round faces.empty string-optional-
field_noticesbooleanWhether to show small notices on the field. The default is true.true-optional-
hide_bar_on_choicebooleanHide the buttons under the novel window (back, log, save and the rest) while a choice is shown; their keys still work. Off by default.false-optional-
hide_goldstring[]The kinds of place (field, dungeon, map, stage) where the windows of the money are not shown: the field’s, with the play time, and the menu’s. Omitted: shown everywhere.empty list-optional-
lightLightStyleSchema 10: paper palette of view.light surfaces. Omission keeps the built-in colors.nil; nothing is defined-optional-
materialMaterialStyleOptional layered panel finish; omission retains classic windows.nil; nothing is defined-optional-
messagestringThe message window style: box (a framed box, the default) or novel (across the bottom like a visual novel).box-optional-
name_tagcolor stringThe color of the speaker’s name tag.no color (the default of where it is drawn)-optional-
novel_windowNovelWindowSchema 10: where the novel message window stands, in fractions of the screen. Omitted, it keeps its place. The buttons of quick_menu below or inside follow it.nil; nothing is defined-optional-
phone_accentcolor stringPhone owner bubble and page control color; unset keeps #3d8bf2. A page color overrides its controls. Independent of ui.accent. Use the same color to match the game palette.no color (the default of where it is drawn)-optional-
phone_backgroundcolor stringGame-wide phone page body color; default white (#ffffff), with no per-cue flag.no color (the default of where it is drawn)-optional-
phone_mutedcolor stringPhone page caption and secondary text color; default #808690.no color (the default of where it is drawn)-optional-
phone_textcolor stringPhone page body text color; default #1d1f24.no color (the default of where it is drawn)-optional-
profile_bookProfileBookSchema 10: the character book’s title and layout (list or grid). Omission keeps Characters as a list.nil; nothing is defined-optional-
profilesbooleanShow Characters, the character book, in the title, the field menu and the novel bar. Off by default; under --dev the menus show it anyway.false-optional-
quick_menustringSchema 10: where the buttons of the novel window stand. Omitted, in a row at the screen’s lower right as before, a window with its own band raised above them. below: in a band under the message window with its left and right edges, the window raised by the band. inside: in the window’s lower edge, the window taller by the band. The captions of a call follow the same choice.empty string-optional-
rollbackintegerHow many earlier events the player can roll back into, besides the one running, from 0 to 64. The default is 8, and 0 turns rolling back off; needs schema version 4.nil; nothing is defined0 is keptoptional-
sfx_varySfxVaryHow much repeated sound effects vary in pitch and volume.empty (its fields take their defaults)-optional-
shadowcolor stringThe text shadow color.no color (the default of where it is drawn)-optional-
stage_dropstring → numberPer standing picture, how far to move it down as a fraction of the screen height, to even out heights. The default is 0.empty map; unlisted pictures are not shifted-optional-
stage_framingstring → StageFramingPer-picture static novel portrait framing, keyed by paths under assets/. Sets the source head anchor, displayed head height and top; preserves authored horizontal positions and clips off-screen content. Omitted pictures keep legacy framing. Needs schema version 8.empty map-optional-
stage_puppetsbooleanLet the novel stage draw the moving portrait (puppet) of an actor whose face the puppet has, in place of the face picture and in the same frame: it breathes, sways and blinks, the speaker’s mouth moves, and faces fade. Off by default; needs schema version 8.false-optional-
stage_scalestring → numberPer standing picture, a size multiplier keyed by picture file. The default is 1.empty map; unlisted pictures use scale 1-optional-
talk_portraitTalkPortraitWhere the speaker’s standing picture stands beside the box message window, to bring the speaker closer. The default is a picture as tall as the screen at the window’s left end; needs schema version 3.empty (its fields take their defaults)-optional-
textcolor stringThe text color.no color (the default of where it is drawn)-optional-
titleTitleMenuSchema 10: the title screen’s menu. Omitted, every entry is shown and the ones that cannot be chosen are grayed.nil; nothing is defined-optional-
tonesToneStyleSchema 10: fills of workspace entries with tone note or primary. Omission keeps the built-in colors.nil; nothing is defined-optional-
voiceVoiceStyleHow voices play: cut and auto_wait. Needs schema version 4.empty (its fields take their defaults)-optional-
wheel_upstringSchema 10: what turning the mouse wheel up does in the novel window. Omitted, it rolls back one line when it can and opens the backlog otherwise; log always opens the backlog. Turning it down advances the line either way.empty string-optional-
windowcolor stringThe window background color.no color (the default of where it is drawn)-optional-

TitleFigure #

A picture standing on the title screen.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
bottomnumberWhere its feet are, as a fraction of the screen height. The default is 1, the bottom of the screen.1v1 keeps 0; v0 has per-field rulesoptional-
filestringThe picture file.empty string-requiredimage in assets/
heightnumberIts height as a fraction of the screen height. The default is 0.95.0.95v1 rejects 0; v0 has per-field rulesoptional-
xnumberIts horizontal center as a fraction of the screen width.00 is keptoptional-

GameOver #

What is shown when the party falls.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
backgroundPicture or stringThe picture shown behind the game over screen.empty (its fields take their defaults)-optional-
eventstringAn event run instead of ending the game, for example to carry the party back and apply a penalty.empty string-optionalevents
musicMusicCue or stringThe song and mood played on the game over screen.empty (its fields take their defaults)-optional-
textstringThe text shown on the game over screen.empty string-optional-

Music #

The songs and the rules that choose the mood.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
barsintegerThe length of a module in bars. The default is 8.8v1 rejects 0; v0 has per-field rulesoptional-
beats_per_barintegerThe number of beats in a bar. The default is 4.4v1 rejects 0; v0 has per-field rulesoptional-
mood_namesstring → stringDisplay names for moods, shown for one-shot songs in the gallery’s music section. By default the mood ID is shown.empty map; an unnamed mood shows its ID-optional-
one_shotstring[]The moods that play once instead of looping.empty list-optionalmood names of the song
rulesstring → MoodRule[]Mood rules by context (such as field or battle), each a list of rules.empty map-optional-
songsstring → SongThe modular songs, keyed by song ID.empty map-optional-
volumenumberThe overall music volume.0.7v0 uses the default; v1 keeps 0optional-

Song #

A piece of music, either a single track file or a modular song with one module per mood.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
bpmintegerThe tempo in beats per minute, for a modular song.00 is keptrequired for a module song without file-
dirstringThe directory holding the modules of a modular song.empty string-optionalmodule song directory in assets/
filestringThe audio file of a track song, played whole.empty string-bpm is required without file; file and moods do not mixsound in assets/
loop_startnumberThe time in seconds the track loops back to.00 is keptoptional-
moodsstring → stringFor a modular song, a map from mood name to its module file name, without .ogg, in dir.empty map-optionalvalues are layers in the song directory
namestringThe display name of the song.song ID-optional-

MusicCue #

A song and the mood it starts in, written as song, song/mood, or a map.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
fadenumberIn the music command, the seconds the song fades in, or out with stop. Needs schema version 4.00 is keptoptional-
moodstringThe mood of a modular song to play, one of the song’s moods.empty string-optionalmoods of the referenced song
songstringAn ID of songs to play. Written alone as song or song/mood.empty string-optionalmusic.songs
stopbooleanIn the music command, stops the music (with no song or mood). Needs schema version 4.false-optional-

SfxVary #

How much the pitch and volume of a sound effect vary when it plays repeatedly in a short time.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
pitchnumberThe pitch variation as a fraction. The default is 0.03 (plus or minus 3%); 0 turns it off.0.03v1 keeps 0; v0 has per-field rulesoptional-
volumenumberThe volume variation as a fraction. The default is 0.1 (plus or minus 10%); 0 turns it off.0.1v1 keeps 0; v0 has per-field rulesoptional-

MemoCfg #

What a test player’s note asks for and keeps.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
kindsMemoKind[]The kinds of note the player can choose from.empty list-optional-
varsMemoVar[]Numbers kept with each note, each given by an expression.empty list-optional-

MemoKind #

A kind of test note.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
idstringThe ID of the kind, kept in the note file.empty string-required; unique within its kind-
labelstringThe label shown for the kind.empty string-required-

MemoVar #

A number kept with each test note.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
namestringThe name under which the number is kept.empty string-required-
valueexpressionAn expression giving the number from the game state when the note is made.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)requiredexpression; checked by gozen check

WebPage #

The page of a browser export as the sites a link to it is shared on show it (Open Graph and X cards).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
descriptionstringA sentence or two about the game, the page’s description and the card’s text.empty string-optional-
imagestringThe card’s picture under assets/, a PNG or a JPEG of 1200x630 or more (smaller is warned of, GZN0121). gozen export copies it as it is beside the page as og-image with its extension; it needs url.empty string-optional-
urlstringWhere the page is published, an https:// address ending in /: the page’s og:url and the start of its picture’s address.empty string-optional-

Location #

A place the party can be: a picture with people to talk to, things to do and ways out.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actionsAction[]Things the party can do here, shown as menu entries.empty list-optional-
areastringThe name of the wider area this location belongs to.empty string-optional-
backgroundPicture or stringThe picture shown behind the location.empty (its fields take their defaults)-optional-
battle_backgroundPicture or stringThe picture shown behind battles fought here.empty (its fields take their defaults)-optional-
battle_musicMusicCue or stringThe song and mood for ordinary battles here. A troop’s own music takes priority.empty (its fields take their defaults)-optional-
descstringThe description of the location.empty string-optional-
dungeonDungeonIf set, the location is a maze walked in first person instead of a menu.nil; nothing is defined-optional-
encountersEncounterThe random battles met here.empty (its fields take their defaults)-optional-
exitsExit[]The ways out to other locations.empty list-optional-
mapAtlasIf set, shows the location as a picture with points and roads (needs schema version 3).nil; nothing is defined-optional-
musicMusicCue or stringThe song and mood played here.empty (its fields take their defaults)-optional-
namestringThe location’s name.empty string-optional-
no_menubooleanIf true, the main menu (status, equipment, save and so on) cannot be opened here.false-optional-
on_enterCommand[]Commands run each time the party enters the location.empty list-optional-
outfitstringCharacters talking here wear this outfit variant of their pictures when one exists, such as a winter coat. Face icons keep the usual pictures.empty string-optional-
peoplePerson[]The people here who can be talked to.empty list-optional-
resume_tostringThe ID of the location (an ID of locations) to start from when a save made here is loaded. By default it resumes here.empty string-optionallocations
safebooleanIf true, saving is allowed here.false-optional-
stageStageIf set, shows the location as its painted background seen from a fixed camera and walked by small dolls (needs schema version 3).nil; nothing is defined-optional-
streamstringlobby shows the location as the stream lobby, with the place’s entries listed under the channels. Needs streams in game.yaml and schema version 9.empty string-optional-
talk_on_enterbooleanIf true, one of the people’s stories plays on each entry instead of a list of people to talk to, with people who have something new first.false-optional-

Person #

Someone at a location who can be talked to.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
bubblesBubble or string[]Lines said now and then in a balloon over the person’s doll on a stage. They affect only the screen (needs schema version 3).empty list-optional-
idstringThe person’s ID, used by a stage to place them. It must be unique among the location’s people and actions.empty string-optional-
imagestringA picture of the person, a path under assets/.empty string-optionalimage in assets/
markexpressionAn expression that, while it holds, puts a mark next to the person’s name in the talk list. What the mark means is up to the game.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
namestringThe person’s name.empty string-optional-
newexpressionAn expression that holds while talking would give a new story. It is not shown on screen and is a hint for the autoplayer.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
talkCommand[]The commands run when the player talks to the person.empty list-optional-
whenexpressionAn expression that must hold for the person to be present.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Action #

Something the player can do at a location, such as searching a chest or resting at an inn.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
doCommand[]The commands that run when the player picks this action.empty list-optional-
groupstringThe heading the action is listed under in the place’s list. Entries of one group are listed together under it, the groups in the order first met. Expressions in braces are expanded. Omitted: no heading.empty string-optional-
idstringA stable ID for the action that does not depend on its label.empty string-optional-
labelstringThe text shown for this action in the location menu.empty string-optional-
markexpressionAn expression. While it holds, a marker is added to the label to signal something worth noticing.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
newexpressionAn expression that holds while the action has new content. It is not shown on screen and is only a hint for automatic players.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
whenexpressionAn expression that decides whether the action is shown. If omitted, the action is always available.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Exit #

A way out of a location that leads to another location.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
atstringFor an exit into a dungeon, the map character to arrive at.empty string-optionalcharacter of the destination dungeon’s tiles
doCommand[]Commands run before moving. An exit with only do runs them and does not move.empty list-to or do is required-
facingstringFor an exit into a dungeon, the direction the party faces on arrival.facing of the arrival tile, else north-optional-
labelstringThe text of the exit shown in the menu.empty string-optional-
tostringThe ID of the location (an ID of locations) the exit leads to.empty string-to or do is requiredlocations
whenexpressionAn expression that must hold for the exit to be shown.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Encounter #

The random battles met at a location, checked on arrival and on each search (or each step in a dungeon).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
gaugenumberIf set, each step fills an on-screen gauge by rate, and the chance of a battle on a step is the gauge’s fill times this number (for example 0.3). The gauge empties after a battle.00 is keptoptional-
rateexpressionAn expression giving the chance of meeting a battle on arriving and on each search or dungeon step.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
searchstringThe label of an extra menu entry that searches the location and rolls rate for a battle. It is shown only when troops is not empty.empty string-optional-
troopsTroopPick[]The enemy groups that can appear, each a troop with its own weight and conditions.empty list-optional-

Shop #

A shop selling a list of goods.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
goodsstring[]The IDs of items the shop sells.empty list-optionalitems[]
greetingstringThe line the shopkeeper says on entering.empty string-optional-
keeperstringThe picture of the shopkeeper.empty string-optionalimage in assets/
namestringThe shop’s name.empty string-optional-
sellbooleanWhether the party can sell items here. The default is true.true-optional-
spentstringA var.<name> to which every purchase here adds its price. Several shops may share one. Empty means not counted.empty string-optionalname of a numeric var

Trade #

The contents of a buy or sell command.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
countintegerHow many items. The default is 1.00 is keptoptional-
itemstringAn ID of items to trade.empty string-optional-
shopstringAn ID of shops to trade with.empty string-optional-

Roamer #

A strong foe that walks a generated dungeon floor and fights the party on contact.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
appearexpressionA condition for it to show up. When set, it is not placed at the start but appears on the farthest floor cell once the condition holds, and disappears when it stops holding. Do not combine with count.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)not with countexpression; checked by gozen check
countexpressionHow many are on a floor, as an expression of the floor number. The default is 1.1expression value 0 (false as a condition)not with appearexpression; checked by gozen check
everyexpressionHow many steps the player walks for each step it takes, as an expression of the floor. The default is 1.1expression value 0 (false as a condition)optionalexpression; checked by gozen check
farintegerThe minimum number of steps from the floor’s start where it may be placed, at most 65025. The default is 6 or three fifths of the floor’s farthest distance, whichever is larger, or 0 for roamers that use appear.max(6, farthest distance * 3/5); 0 with appearv1 keeps 0; v0 has per-field rulesoptional-
iconPicture or stringA small picture shown on the map, and in the view when picture is not set. Without it the map shows a dot in the mark color.empty (its fields take their defaults)-picture or icon is required-
markcolor stringThe color of its dot on the map.no color (the default of where it is drawn)-optional-
meetCommand[]Commands run when the party touches it, used instead of the battle in troops. It then leaves the floor.empty list-troops or meet is required-
movestringHow it moves: chase (comes after the party once it sees it), wander (random steps), guard (stays put) or hunt (always approaches by the shortest way).roams like wander-optional-
namestringThe name shown when it is in front of the party.empty string-optional-
on_appearCommand[]Commands run when it appears because its appear condition became true.empty list-optional-
on_leaveCommand[]Commands run when it disappears because its appear condition stopped holding.empty list-optional-
picturePicture or stringThe picture of it standing in its cell.empty (its fields take their defaults)-picture or icon is required-
sightintegerHow many cells away it notices the party when chasing, at most 65025. The default is 4.4v1 rejects 0; v0 has per-field rulesoptional-
sizenumberThe picture’s height, where a wall is 1. The default is 0.8.0.8v1 rejects 0; v0 has per-field rulesoptional-
troopsTroopPick[]The battle it starts, drawn by weight from the troops whose when holds.empty list-troops or meet is required-
waitexpressionHow many steps after arriving on a floor (or after a meeting) before it shows up, as an expression of the floor. The default is 0.0expression value 0 (false as a condition)optionalexpression; checked by gozen check

Picture #

A picture under assets/, optionally tinted and darkened. Written as a path or as a map.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
blurbooleanDraw the picture blurred.false-optional-
brightnessnumberBrightness of the picture; 1 (the default) is unchanged and 0 is black in schema version 1 and later.1v1 keeps 0; v0 has per-field rulesoptional-
filestringThe picture under assets/. A picture may be written as just this path.empty string-optionalimage in assets/
tintcolor stringA color the picture is tinted with, such as "#c0d0ff".no color (the default of where it is drawn)-optional-

Atlas #

A location shown as a picture with points and roads. Needs schema version 3.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
activationstringtravel (default) follows roads; instant executes the chosen point directly, including the current point, without walking, steps, encounters or changing the standing point. A to entrance still moves to its destination.empty string-optional-
cameraAtlasCameraOpt-in pan/zoom camera. An empty map uses zoom 2 and max_zoom 8. Omitted keeps the fitted overview. Camera position is not saved.nil; nothing is defined-optional-
draw_roadsbooleanIf true, the roads are drawn over the picture. By default they are only the paths the token walks along. Default false.false-optional-
label_sizenumberThe height of the point name plates as a fraction of the screen height. 0.03 when 0.00 is keptoptional-
markerToken or dollA map with a picture and an optional height for the piece standing on each point, such as a pin or flag. It cannot be doll. A small pin is drawn when omitted.nil; nothing is defined-optional-
picturestringThe map picture, a file under assets/.empty string-optional-
pointsstring → MapPointThe places on the map, keyed by point ID.empty map-optional-
region_bordersstringOn a campaign’s map, when the outline of each region’s area is drawn: selected (the default, only the region chosen) or always (every region, the old look).empty string-optional-
region_numbersstringWhich regions’ plates show their garrison on a campaign’s map: all (the default) or near (the region chosen and its neighbors; the others show their names only, in the same place).empty string-optional-
region_roadsstringOn a campaign’s map, when the roads are shown: selected (the default, a thin arrow to each neighbor the region chosen can march on) or always (the lines of all the roads, as draw_roads does on other maps). draw_roads is not read on a campaign’s map.empty string-optional-
roadsRoad[]The roads that connect points. The token walks along them.empty list-optional-
safe_areanumber[]The edges of the screen kept for the windows over the map, [top, right, bottom, left] as fractions of the screen (each at most 0.45). The picture is fitted to the rest; zoomed in far enough, the camera keeps it over the whole screen, the edges included, however far it is moved. Omitted: the whole screen.empty list-optional-
selection_panelAtlasPanelOptional fixed panel showing the focused point’s first matching advice variant. Clicking selects; Confirm executes; Back hides the panel.nil; nothing is defined-optional-
talkstringHow the map shows under a conversation that is not its own question (a region’s orders): omitted (as it is), dim (darkened) or hide (darkened, without the markers, flags and name plates).empty string-optional-
tokenToken or dollThe piece that stands for the party on the map: a picture, the leader’s face, or doll for the leader’s doll.nil; nothing is defined-optional-
travel_speednumberToken travel in picture widths per second, per location. Omitted or 0 means 0.12; otherwise 0.01 to 2, finite. Does not change road steps or encounters.0.12 picture widths per secondUses the defaultoptional-
unknownstringHow a point not yet visited is shown: hidden, dim, mark (a question-mark plate, the default) or named.empty string-optional-

MapPoint #

A point on a map location.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
adviceMapAdvice[]Selected-point advice variants, evaluated in order. Requires map.selection_panel to be displayed.empty list-optional-
atnumber[2]The position of the point on the map picture.empty list-optional-
at_pointstringWhen to is a map location, the point of that map to stand on.empty string-optional-
doCommand[]Commands run on arriving at the point.empty list-optional-
hidestringclosed hides the point, marker, plate and incident roads while when is false, and removes it from selection. Omission preserves the usual closed pin.empty string-optional-
labelstringThe name shown for the point. When empty, the name of to is used.empty string-optional-
lockedstringThe text shown when the point is chosen while it is closed.empty string-optional-
markerstringA picture used as this point’s marker instead of the map’s.empty string-optional-
oncebooleanIf true, do runs only the first time the point is reached.false-optional-
startbooleanIf true, the party stands at this point on a first visit.false-optional-
tostringThe ID of the location (an ID of locations) the point leads into.empty string-optional-
whenexpressionAn expression that must hold for the point to be open. Roads through a closed point are closed too.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Road #

A road joining two points of a map, usable in both directions.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
betweenstring[]The two point IDs the road connects.empty list-optional-
doCommand[]Commands to run when the party travels along the road.empty list-optional-
encountersEncounterRandom encounters that can happen while traveling the road.empty (its fields take their defaults)-optional-
stepsintegerHow many steps the trip takes. The default is 1.00 is keptoptional-
vianumber[2][]The map coordinates [x, y] the road bends at on its way, in order.empty list-optional-
whenexpressionA condition that must hold for the road to be open.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Token #

The piece standing for the party on a map. Write a map, or the word doll.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
dollbooleanShow the leader’s doll instead of the face. Written alone as the word doll.false-optional-
heightnumberThe height of the token, as a share of the screen’s height.00 is keptoptional-
picturestringThe picture of the party on the map; the leader’s face (or doll) when left out.empty string-optional-

Stage #

A location shown as a painted background seen from a fixed camera, with people as small dolls walking in it.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
blocksnumber[2][][]Polygons where feet may not go, cut out of the walkable area.empty list-optional-
cameranumberHow many degrees the camera looks down, used to draw the dolls. The default is 30.00 is keptoptional-
depthstringA 16-bit gray picture of how near each background pixel is, as large as the background. Without it only fronts hide people.empty string-optional-
depth_biasnumberHow much nearer, from 0 to 1, the picture must be than the feet to hide them.00 is keptoptional-
exitsStageExit[]Areas that leave the location when walked into, each tied to one of the location’s exits.empty list-optional-
frontsFront[]Parts of the painting that stand up from the ground, such as pillars, hiding people behind them.empty list-optional-
peopleStagePerson[]Where the location’s people stand or walk in the stage.empty list-optional-
scaleScaleMark[]Person heights in pixels at two or more feet positions, defining how dolls scale with distance.empty list-optional-
spotsstring → SpotNamed places to stand, keyed by ID.empty map-optional-
thingsThing[]Things in the stage to look at, or location actions given a place.empty list-optional-
walknumber[2][][]Polygons where feet may go.empty list-optional-
walk_speednumberPlayer walking speed in meters per second, shared by keyboard and click-to-walk. Omitted or 0 means 1.6; otherwise 0.1 to 6.4, finite. NPC speeds are independent.1.6 meters per secondUses the defaultoptional-

Spot #

A named place to stand in a stage.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
atnumber[2]The feet position as [x, y] in background pixels.empty list-optional-
doCommand[]Commands run when the party steps on the spot. A spot with do also appears as an entry in the location’s menu.empty list-optional-
facingstringThe direction the party faces when standing here.empty string-optional-
namestringThe label of the spot’s menu entry, used when it has do.empty string-optional-
oncebooleanRun do only the first time.false-optional-
startbooleanStand here when arriving without a named spot.false-optional-

StageExit #

Gives one of the location’s exits an area of the stage; walking into it leaves.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
areanumber[2][]The polygon of the exit area.empty list-optional-
tostringThe ID of the exit in the location’s exits that this area triggers.empty string-optional-

StagePerson #

Places one of the location’s people in the stage.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
atnumber[2]Where the person stands, as [x, y].nil; nothing is defined-optional-
dollDollHow the person looks as a small box doll: hair, extra parts and face cut.nil; nothing is defined-optional-
facingstringThe direction the person faces.empty string-optional-
idstringThe ID of the person in the location’s people.empty string-optional-
pathnumber[2][]A loop of points the person walks, used instead of at.empty list-optional-
speednumberWalking speed along the path in meters per second. The default is 1.1.00 is keptoptional-

Thing #

Something in a stage to look at, or a location action given a place.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actionstringAn ID of one of the location’s actions to run instead of do.empty string-optional-
areanumber[2][]The polygon of the stage where the thing can be used.empty list-optional-
askstringThe word on its button. The default is the standard examine label.empty string-optional-
doCommand[]Commands to run when it is used.empty list-optional-
idstringThe thing’s ID.empty string-optional-
namestringThe name shown to the player.empty string-optional-
oncebooleanRun it only the first time.false-optional-
triggerstringHow it is set off: examine (the default) or step.empty string-optional-
whenexpressionA condition for it to be available.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Front #

A part of a painted stage that stands up from the ground (a pillar or a stall) and hides people standing behind it.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
areanumber[2][]The polygon covering the front object in the painting.empty list-optional-
basenumberThe y coordinate of the line where the object meets the ground. People whose feet are behind (above) this line are hidden by it.00 is keptoptional-

ScaleMark #

A person’s pixel height measured with the feet at a given point, used to scale dolls in a stage.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
atnumber[2]The feet position as [x, y] in background pixels.empty list-optional-
heightnumberThe person’s height in pixels when standing at at.00 is keptoptional-

Doll #

How an actor or person looks as a small doll walking a stage. Needs schema version 3.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
face_atnumber[]Where to cut the face for balloons from the picture: the middle, the top and the width, as fractions of the visible part. It is found automatically when omitted.empty list-optional-
hairstringThe hair style: short, long, bald or bun. It is guessed from the picture when omitted.empty string-optional-
iconstringA square face picture drawn in balloons, cut round. It takes priority over face_at.empty string-optional-
partsDollPart[]Extra pieces the doll wears or carries, such as a cape or a staff.empty list-optional-

DollPart #

A piece added to a doll.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
colorstringThe piece color as #rrggbb.empty string-optional-
kindstringThe kind of piece: apron, cape, robe, skirt, dress, coat, shield, staff, glasses, hat, hood, bag, goggles, muffler, shawl, ponytail or lashes.empty string-optional-

Bubble #

A line said now and then in a speech balloon over a person’s doll on a stage. It can be written as plain text or as text and when. Needs schema version 3.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
textstringThe line shown in the balloon; it must not be empty. A bubble may be written as just this line.empty string-optional-
whenexpressionAn expression; the bubble is said only while it holds.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

CardBubble #

Small particles that rise from an actor’s card in battle while a condition holds, such as bubbles for a poisoned member.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringThe actor whose card shows the particles, an ID of actors.empty string-optionalactors
colorcolor stringThe particle color. Default white.no color (the default of where it is drawn)-optional-
countintegerHow many particles appear at once. Default 4, up to 24.4v1 keeps 0; v0 has per-field rulesoptional-
risenumberHow high the particles rise. Default 50.50v1 rejects 0; v0 has per-field rulesoptional-
sizenumberThe particle radius. Default 3.3v1 rejects 0; v0 has per-field rulesoptional-
speednumberHow fast the particles rise. Default 30.30v1 rejects 0; v0 has per-field rulesoptional-
statestringA state ID. The particles appear while the actor has this state.empty string-optionalstates
whenexpressionAn expression. The particles appear while it holds.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Dungeon #

A maze walked in first person, drawn from a text map or generated on each dive.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
ceilingcolor stringThe ceiling color.no color (the default of where it is drawn)-optional-
ceiling_texturePicture or stringA picture tiled on the ceiling, one per cell, multiplied by the ceiling color.empty (its fields take their defaults)-optional-
completeCommand[]Commands that run once the whole floor has been explored (100 percent). They run once for each floor.empty list-optional-
darknessnumberHow fast the view darkens with distance, from 0 to 1. Default 0.5, and 0 means no darkening.0.5no darkeningoptional-
depthintegerHow many cells ahead are drawn. Default 5.5v1 rejects 0; v0 has per-field rulesoptional-
doorPicture or stringThe picture used for doors.empty (its fields take their defaults)-optional-
floorcolor stringThe floor color.no color (the default of where it is drawn)-optional-
floor_texturePicture or stringA picture tiled on the floor, one per cell, multiplied by the floor color.empty (its fields take their defaults)-optional-
generateGenerateSettings for making the map anew on each dive, with rooms, corridors and placed tiles, instead of a fixed map.nil; nothing is defined-optional-
looksDungeonLook[]Alternative appearances that replace the walls, colors and music while their when holds. The first match wins.empty list-optional-
mapstringThe map as rows of characters. Each character stands for a tile.empty string-required without generate-
no_mapbooleanIf true, the corner map is not shown.false-optional-
picturesstring → stringReplacements for tile pictures, mapping an original file to a substitute.empty map-optionalkeys and values are images in assets/
roamersRoamer[]Strong foes that walk the generated floor. Meeting one starts its battle, and once beaten it is gone.empty list-optional-
spaceSpaceOptional aligned levels and stairs for bounded streets, interiors and atriums; excludes map, generate and roamers.nil; nothing is defined-optional-
themestringA theme of pictures and colors from assets/dungeon/themes/, such as cave. It fills the walls, door, floor, ceiling and their colors that are not written here. Add one to the game with gozen theme add.empty string-optional-
tilesstring → TileThe meaning of each map character, keyed by that character.empty map-optional-
walkedCommand[]Commands that run on arriving at the start of a fully explored floor, for example offering to jump to the down stairs.empty list-optional-
wallPicture or stringThe picture used for walls.empty (its fields take their defaults)-optional-

DungeonLook #

Another appearance of a dungeon that applies while its condition holds. Anything left out stays as the dungeon says.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
areastringA name shown in place of the location’s area, such as the district name.empty string-optional-
battle_backgroundPicture or stringThe battle background used while this look applies.empty (its fields take their defaults)-optional-
battle_musicMusicCue or stringThe song for ordinary battles while this look applies.empty (its fields take their defaults)-optional-
ceilingcolor stringThe ceiling color for this look.no color (the default of where it is drawn)-optional-
ceiling_texturePicture or stringThe ceiling picture for this look.empty (its fields take their defaults)-optional-
darknessnumberHow fast the view darkens with distance for this look, from 0 to 1.inherits the dungeon’s darknessno darkeningoptional-
doorPicture or stringThe door picture for this look.empty (its fields take their defaults)-optional-
floorcolor stringThe floor color for this look.no color (the default of where it is drawn)-optional-
floor_texturePicture or stringThe floor picture for this look.empty (its fields take their defaults)-optional-
musicMusicCue or stringThe song while this look applies. The location’s song is used when omitted.empty (its fields take their defaults)-optional-
no_mapbooleanIf true, the corner map is hidden while this look applies, for example on a dark floor.false-optional-
picturesstring → stringTile picture replacements while this look applies, layered on the dungeon’s own.empty map-optionalkeys and values are images in assets/
themestringA theme for this look. It fills the walls, door, floor, ceiling and colors that the look does not write itself, in place of the dungeon’s theme.empty string-optional-
wallPicture or stringThe wall picture for this look.empty (its fields take their defaults)-optional-
whenexpressionAn expression that decides when this look applies.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Tile #

What one character of a dungeon map is: a floor, wall or door, with an optional picture and behavior.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
afterstringWith once, the character this tile becomes after use, such as an opened chest.empty string-optionalcharacter of tiles or a built-in one
askstringThe answer that sets off a look tile (one that asks first), beside the answer that does nothing. The default is the standard examine label.translated examine label-optional-
awaybooleanTurn a flat picture’s top away from the party whichever way it looks.false-optional-
doCommand[]Commands run when the tile is triggered.empty list-optional-
elsestringThe character the tile becomes while when does not hold. The default is ... (floor)-optionalcharacter of tiles or a built-in one
facingstringThe direction the party faces on arriving here.north-optional-
flatbooleanLay the picture on the floor of the cell, seen in perspective, instead of standing it up.false-optional-
hintstringText added after the name when the tile is in front of the party, telling what stepping on it does.empty string-optional-
lookstringHow it looks: floor (the default), wall or door.floor-optional-
markcolor stringThe color on the map. The default is none, a plain cell.no color (the default of where it is drawn)-optional-
namestringThe name shown when it is in front of the party.empty string-optional-
oncebooleanTrigger it only once.false-optional-
picturePicture or stringThe picture standing in the cell, or on the wall for look: wall.empty (its fields take their defaults)-optional-
questionstringThe question a trigger tile asks. The default is its name.the tile’s name-optional-
sizenumberThe picture’s height, where a wall is 1. The default is 0.6.0.6v1 rejects 0; v0 has per-field rulesoptional-
slidestringCarry the party onward from this cell: north, east, south, west, or facing for ice.empty string-optional-
solidexpressionAn expression; the party cannot walk in while it holds.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
spinstringTurn the party when it stops here: right, left, back or random.empty string-optional-
startbooleanThe party arrives here when a move gives no position.false-optional-
symbolstringA letter drawn over the mark on the map, such as an arrow for stairs.empty string-optional-
triggerstringHow it is set off: step (stepped on), bump (walked into) or look (asks first). The default is look for a wall, bump for a solid tile and step otherwise.look for wall, bump for solid, step otherwise-optional-
whenexpressionThe tile is present while this holds; otherwise it becomes the else character.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Generate #

How the floors of a dungeon are generated: maze size, rooms and the characters placed on each floor.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
floorsinteger → FloorPlanPer-floor settings keyed by floor number: a seed for that floor or a hand-drawn map.empty map-optional-
heightintegerThe height of the maze in cells. Use an odd number.0rejectedrequired; an odd number, 9 or more-
loopsnumberThe share of walls between corridors that are opened to make loops. The default is 0.08.0.08v1 keeps 0; v0 has per-field rulesoptional-
placePut[]The other characters placed on the floor apart from the start, such as stairs and events.empty list-optional-
roomsintegerHow many rooms the maze has.v0: 0, or at least 1 when size has an expression / v1: 0v1 means no rooms; v0 uses at least 1 when size has an expressionoptional-
seedintegerThe random seed of the map. When set, every save gets the same map; otherwise each save gets its own seed.nil; nothing is defined0 is keptoptional-
sizeexpressionAn expression of the floor number floor alone (no other name, rand or chance) giving the side length of the maze on that floor, capped by width and height and at least 9. It makes early floors smaller.width and heightexpression value 0 (false as a condition)optionalexpression; checked by gozen check
startstringThe map character the party arrives at.empty string-requiredcharacter of tiles
widthintegerThe width of the maze in cells. Use an odd number.0rejectedrequired; an odd number, 9 or more-

FloorPlan #

How one floor of a generated dungeon is made.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
mapstringA hand-drawn map for this floor, using #, ., D and tile characters with one start character. Characters already drawn count toward each place count, and place adds only what is missing.empty string-exactly one of seed or map-
notestringA free note explaining why this floor was hand-drawn. It has no effect on play.empty string-optional-
seedintegerThe random seed for this floor, taking priority over the dungeon’s seed.nil; nothing is defined0 is keptexactly one of seed or map-

Put #

A character placed on a generated floor, such as stairs, a chest or an event tile.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
atinteger[2]Place it at this map cell as [x, y] counted from the top left. The cell is opened and joined to the rest of the floor.nil; nothing is defined-optional-
charstringThe map character to place; it must be one of the dungeon’s tiles.empty string-requiredcharacter of tiles
countexpressionHow many to place, as an expression of the floor number floor alone (no other name, rand or chance: a loaded save makes the same floor again). The default is 1.1expression value 0 (false as a condition)optionalexpression; checked by gozen check
farbooleanPlace it as far from the start as possible, as for stairs down.false-optional-
nearstringPlace it on the open cell beside a character placed earlier, such as a guard in front of the stairs. Nothing is placed if no suitable cell exists.empty string-optionala place[].char placed earlier
stepsintegerPlace it about this many walked steps from the start, so the party meets it on the way.00 is keptoptional-
wallbooleanPlace it in a wall cell beside exactly one open cell, preferring dead ends, for stairs drawn on a wall or a door.false-optional-

Space #

A bounded stack of equal-sized maps (schema version 8). Blank cells are open air; levels are ordered bottom to top.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
free_moveSpaceFreeMoveOpt in to continuous walking and turning on this stacked space. Omit to retain grid movement.nil; nothing is defined-optional-
levelsstring[]One to eight equal rectangular maps, each 3 to 64 cells wide and high.empty list-optional-
materialsstring → SpaceMaterialUp to 32 named opaque materials for building walls and roofs.empty map-optional-
roofsSpaceRoof[]Up to 32 bounded gable, shed or flat roof primitives with indexed collision and occlusion.empty list-optional-
skyPicture or stringOptional sky panorama: horizontal wrapping, zenith at the top and horizon at the bottom. Supports picture tint and brightness.empty (its fields take their defaults)-optional-
stairsSpaceStair[]Up to 128 non-overlapping bidirectional straight runs joining adjacent levels.empty list-optional-
step_ticksintegerCamera interpolation duration for one step at 60 updates per second. Omitted or 0 means 18 ticks; otherwise 1 to 120.18 ticks at 60 updates per secondUses the defaultoptional-
turn_ticksintegerCamera interpolation duration for a turn at 60 updates per second. Omitted or 0 means 18 ticks; otherwise 1 to 120, independent of step_ticks.18 ticks at 60 updates per secondUses the defaultoptional-
wall_regionsSpaceWallRegion[]Up to 128 non-overlapping rectangular wall material assignments.empty list-optional-

SpaceStair #

A staircase from a lower cell to a landing on the next level.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
facingstringAscending direction: north, east, south or west.empty string-optional-
lengthintegerHorizontal distance to the upper endpoint, from 3 to 8 cells. Keep the space above the run empty.00 is keptoptional-
levelintegerOne-based lower level; an upper level must exist.00 is keptoptional-
xintegerZero-based lower endpoint column.00 is keptoptional-
yintegerZero-based lower endpoint row.00 is keptoptional-

Event #

A named list of commands, run from another event with call or by itself when its trigger fires. In schema 11, an event without metadata can be written directly as a command list.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
doCommand[]The commands the event runs.empty list-optional-
locationstringThe ID of the location (an ID of locations) where a triggered event fires. For auto, empty means anywhere. An enter event needs a location.empty string-optionallocations
oncebooleanIf true, a triggered event fires only once and is then marked as done.false-optional-
paramsstring → stringRequired parameter names and types: number, bool, string, entity, activity, actor or date (schema 10).empty map-optional-
triggerstringWhen the event runs by itself: empty for only when called, enter on entering a location, or auto whenever its conditions hold.empty string-optional-
whenexpressionAn expression that must hold for a triggered event to fire.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Command #

One step of an event. Each command has a single main key (the verb) and may carry extra keys that only that verb understands.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actBattleActQueues one move for the next auto battle: who acts, the skill or item, and the target.nil; nothing is defined-exactly one verb per command-
affectAffectPuts a state on party members or removes one outside battle.nil; nothing is defined-exactly one verb per command-
atstringWith move or dive, where to arrive: a map character of a dungeon, a point of a map or a spot of a stage.empty string-optional; only with move, divecharacter of the destination dungeon’s tiles
battlestringStarts a battle against a troop, an ID of troops.empty string-exactly one verb per commandtroops
breedBreedCmdBreeds two owned monster instances and chooses inherited skills. Needs schema version 6.nil; nothing is defined-exactly one verb per command-
buyTradeBuys items from a shop, the same as the Buy screen: the shop, the item and the count.nil; nothing is defined-exactly one verb per command-
callEventCall or stringRuns another event, an ID of events, then continues.empty (its fields take their defaults)-exactly one verb per commandevents
call_viewCallViewCueChanges only how a video call looks, without changing any state: camera {who, on} turns a participant’s camera view on or off, and share {who, picture} puts a shared screen on the stage, until a line outside a call.nil; nothing is defined-exactly one verb per command-
capturestringRecruits a non-boss species with recruit settings under its admission policy. Sets var.capture_result to party, reserve, party_full or unavailable. Needs schema version 6.empty string-exactly one verb per command-
carrybooleanKeep the values game.yaml carry names for the next new game (schema 10); written beside the saves, never in a save.false-exactly one verb per command-
checkpointstringReplaces the retry point with current state and random stream. Names the event to run when restored; schema version 9. Included in ordinary saves.empty string-exactly one verb per command-
choiceChoiceOption[]Asks the player to pick one of several answers. Each answer has its own commands.empty list-exactly one verb per command-
clearbooleanIf true, ends the game as cleared.false-exactly one verb per command-
divestringStarts a dive into a generated dungeon, an ID of locations whose dungeon has generate. floor chooses the floor.empty string-exactly one verb per commandlocations with generate
effectEffectCue or stringPlays a visual effect: shake, flash or fade of the screen, or a reaction of a moving portrait (hop, shrink, nod, tilt, freeze or one its file names; version 4). A map (version 4) adds who, seconds, color and hold.empty (its fields take their defaults)-exactly one verb per command-
elseCommand[]With if, the commands that run when the condition does not hold.empty list-optional; only with if-
endbooleanIf true, stops the event here.false-exactly one verb per command-
end_turnbooleanEnds the campaign’s turn: the other factions follow their rules and the next turn begins. Needs schema version 5.false-exactly one verb per command-
equipEquipItemEquips an item from the bag on a party member. Leaving out item empties the slot, and leaving out both equips the best gear.nil; nothing is defined-exactly one verb per command-
equip_stonesEquipStonesPuts the stones of a stone set on an actor’s stone slots, taking them from the bag or from members not using them.nil; nothing is defined-exactly one verb per command-
expexpressionAn expression for the experience each living party member gains.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)exactly one verb per commandexpression; checked by gozen check
facingstringWith move or dive into a dungeon, the way to face on arrival.facing of the arrival tile, else north-optional; only with move, dive-
fightersstring[]With battle, the actors who fight instead of the whole party, for a duel.the whole current party-optional; only with battleactors[]
floorexpressionWith dive, an expression for the floor to dive to. Default 1.1expression value 0 (false as a condition)optional; only with diveexpression; checked by gozen check
game_overbooleanEnds the game lost, as a lost battle does. Needs schema version 5.false-exactly one verb per command-
giveItemCount or stringAdds an item to the bag: the item ID and a count (default 1).nil; nothing is defined-exactly one verb per command-
goldexpressionAn expression for gold to add. A negative value takes gold away.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)exactly one verb per commandexpression; checked by gozen check
healstringFully restores a party member, an ID of actors, or everyone with all.empty string-exactly one verb per commandactors or all
hurtHurtTakes HP from party members outside battle, for example on a poison floor. It never reduces anyone below 1.nil; nothing is defined-exactly one verb per command-
idstringThe name of a choice: the state remembers the option taken there, read as chose.<id> (the option’s id, or its number from 0). Lowercase letters, digits and _, one per game; needs schema version 4.empty string-optional; only with choice-
ifexpressionAn expression. The then commands run when it holds, otherwise the else commands.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)exactly one verb per commandexpression; checked by gozen check
imageCG or stringShows a full-screen picture. It can be a file path or a map with options.nil; nothing is defined-exactly one verb per command-
joinstringAdds an actor to the party, an ID of actors.empty string-exactly one verb per commandactors
learnLearnTeaches a party member a skill: the actor and the skill.nil; nothing is defined-exactly one verb per command-
leavestringRemoves an actor from the party, an ID of actors.empty string-exactly one verb per commandactors
levelintegerWith reset_actor, the level to start from, from 1 to the class’s max level. The default is the level in the actors file.00 is keptoptional; only with reset_actor-
messageMessageCueQueues a chat message ({who, text, event}) as a top-right notification on full-screen surfaces; opening shows a bubble and runs the event, which asks for the decision. Queuing does not stop the event.nil; nothing is defined-exactly one verb per command-
moodstringSwitches the music to a named mood.empty string-exactly one verb per command-
movestringMoves the party to another location, an ID of locations.empty string-exactly one verb per commandlocations
musicMusicCue or stringPlays a song, optionally in a given mood. Written as song, song/mood or a map.nil; nothing is defined-exactly one verb per command-
mutedChoiceMutedWith choice, holds the answers behind an unmute button for seconds; left muted, its do runs instead (the player kept quiet).nil; nothing is defined-optional; only with choice-
noticestringShows a short notice at the top of the screen without stopping the event.empty string-exactly one verb per command-
on_escapeCommand[]With battle, the commands that run when the party escapes.empty list-optional; only with battle-
on_loseCommand[]With battle, the commands that run when the party loses.empty list-optional; only with battle-
on_winCommand[]With battle, the commands that run when the party wins.empty list-optional; only with battle-
openScreenCall or stringOpens a game screen by name.empty (its fields take their defaults)-exactly one verb per command-
open_wallstringTurns the wall next to the party’s cell in a dungeon into the tile of the given map character, such as a hidden stair.empty string-exactly one verb per commandcharacter of the current dungeon’s tiles
orderOrderCmd or stringGives an order of the campaign: its ID, or a map of the ID, the general and the target region. The general and the target it needs are asked when not given. Needs schema version 5.nil; nothing is defined-exactly one verb per command-
phonePhoneCueShows a phone over the scene until the player puts it down (ADR 0057): one of the apps listed under app, held upright or with hold landscape on its side. A banner without var does not wait. Buttons, calls and liked posts may set state, and var keeps the outcome of the apps other than feed, video, game and store.nil; nothing is defined-exactly one verb per command-
pickstringPicks an item of the current location’s menu (a person, action or exit) by its label.empty string-exactly one verb per command-
planPlanCommandApply one deterministic planning operation.nil; nothing is defined-exactly one verb per command-
promptstringA line of text shown above the answers of a choice or stone selection.empty string-optional; only with choice, stone_choose, stone_wearer-
recoverbooleanWith battle, defaults to true. False preserves final HP after defeat, independently of retry. Outcome branches can read last_battle for participant IDs and HP before recovery.nil; nothing is defined-optional; only with battle-
releasestringPermanently releases one owned monster instance. Needs schema version 6.empty string-exactly one verb per command-
reserveReserveSwapSwaps one joined reserve actor into an active party slot. Needs schema version 6.nil; nothing is defined-exactly one verb per command-
reset_actorstringPuts an actor back to the starting state of the actors file: the level, exp, learnt skills, skill tree and SP, HP and MP at full, and no states. Equipment, the name, the row and joined or not stay. An actor who has not joined yet is already at the start.empty string-exactly one verb per command-
reset_treestringGives back the SP spent in the skill tree of an actor, an ID of actors, or of everyone with all.empty string-exactly one verb per commandactors or all
respondRespondSubmit text to a speaker reaction book; the reply uses the ordinary dialog flow.nil; nothing is defined-exactly one verb per command-
restore_checkpointbooleanIf true, discards the current execution and restores the latest checkpoint, then runs its entry event; schema version 9.false-exactly one verb per command-
retrybooleanWith battle, set to false to skip the offer to retry after losing.inherits battle.retry-optional; only with battle-
savebooleanIf true, opens the save screen.false-exactly one verb per command-
saySay or stringShows a line of dialog. It can be plain text or a map with speaker, face, side and text.nil; nothing is defined-exactly one verb per command-
sellTradeSells items to a shop, the same as the Sell screen: the shop, the item and the count.nil; nothing is defined-exactly one verb per command-
setstring → expressionAssigns values to variables or state, mapping each name to an expression.empty map-exactly one verb per commandkeys are targets, values expressions; location, party and actor.ID.tactics take names as written (party also a list)
sfxSFXCue or stringPlays a sound effect by name. A map (version 4) with wait: true holds the event until the sound ends.empty (its fields take their defaults)-exactly one verb per command-
shopstringOpens a shop, an ID of shops.empty string-exactly one verb per commandshops
sp_applystringSpends the SP according to the plan made by sp_suggest, for all members at once.empty string-exactly one verb per command-
sp_declinestringRemembers that the player declined, so sp_suggest does not offer again until a member’s SP changes.empty string-exactly one verb per command-
sp_suggeststringPlans how to spend each member’s spare SP automatically and stores the plan in variables with the given name prefix. It does not spend anything.empty string-exactly one verb per command-
standStand or stringBrings a portrait onto the stage of the novel window or takes it off: none, or a map with who, face, at, enter or leave. An event that uses it places its portraits only as written; needs schema version 4.nil; nothing is defined-exactly one verb per command-
stepintegerWalks the given number of steps forward in a dungeon. Floor traps and battles happen on every step.00 is keptexactly one verb per command-
stone_applystringRe-equips everyone’s stones at once with the best arrangement found by stone_suggest.empty string-exactly one verb per command-
stone_choosestringLets the player choose one of the possible stone combinations.empty string-exactly one verb per command-
stone_declinestringRemembers that the player declined, so stone_suggest does not offer again until the owned stones change.empty string-exactly one verb per command-
stone_suggeststringFinds the strongest way to equip all owned stones and stores the changes in variables with the given name prefix when it beats the current setup.empty string-exactly one verb per command-
stone_wearerstringLets the player choose who wears the stones.empty string-exactly one verb per command-
takeItemCount or stringRemoves an item from the bag: the item ID and a count (default 1).nil; nothing is defined-exactly one verb per command-
targetstringWith use, the party member who receives the item. The first member when omitted.empty string-optional; only with use-
thenCommand[]With if, the commands that run when the condition holds.empty list-optional; only with if-
turnstringTurns in a dungeon: left, right or back.empty string-exactly one verb per command-
usestringUses an item from the menu, an ID of items.empty string-exactly one verb per command-
waitWaitCue or numberPauses for the given number of seconds. A map (version 4) with skip: false holds even in skip mode.empty (its fields take their defaults)v0 rejects it as no verb; v1 goes on without waitingexactly one verb per command-
walkstringWalks the shortest path in a dungeon to the tile of the given map character.empty string-exactly one verb per command-

Say #

A line of dialogue, written as a plain string or as a map with the speaker, face and text.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
ensemblestringOptional ensemble planning screen displayed behind a box-style dialogue line with the active speaker highlighted.empty string-optional-
facestringA face of the speaking actor (the actor’s own face when left out), or for a speaker who is not an actor, a picture path under assets/.empty string-optionalparty member’s face or image in assets/
face_exprexpressionPure string expression selecting a speaker face (or an image path for a named speaker); exclusive with face. Empty uses the actor default (schema 10).no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
instantbooleanShow each page in full immediately; one advance moves to the next page or line.false-optional-
insteadSay or string[]In battle, replacement lines by other actors, said when who is down: the first speaker not down says theirs. Not used outside battle.empty list-optional-
sidestringleft or right, where the speaker stands. The default is left for an actor and right for any other speaker.left for party members, right otherwise-optional-
textstringThe line. A line may be written as just this text.empty string-optional-
text_exprexpressionPure string expression selecting the source template before read-key hashing and translation; exclusive with text (schema 10).no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
voicestringThe line’s voice: for an actor with voices, a name in that folder (the .ogg or .wav may be left out); for anyone else, a path under assets/. Needs schema version 4.empty string-optional-
whoIDRef or stringWho speaks: an actor ID, or any name to show.empty (its fields take their defaults)-optionalactors or any name

ChoiceOption #

One answer of a choice command.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
doCommand[]The commands that run when this answer is picked.empty list-optional-
idstringAn identifier that is unique within the same question.empty string-optional-
labelstringThe text shown for this answer.empty string-optional-
label_exprexpressionPure expression selecting a string source template before translation and read-key hashing; exclusive with label.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
whenexpressionAn expression that decides whether the answer is offered.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

ChoiceMuted #

Holds a choice behind a muted microphone, as the floor of a video call: only an unmute button shows (on a call, its mic control is struck through and a click on it unmutes too), and the options come when it is pressed.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
doCommand[]The commands that run when the player keeps quiet.empty list-optional-
secondsnumberSeconds the choice waits muted; left that long, the player kept quiet and do runs instead of an option.00 is keptoptional-

CG #

A full-screen picture shown by the image command, with its fade, tint, pages and display options. It can be written as just a file path.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
autonumberSeconds each of files stays before the next comes by itself, a slideshow without the message window; 0 waits for a tap.0every page waits for inputoptional-
brightnessnumberBrightness of the picture; 1 (the default) is unchanged and 0 is black in schema version 1 and later.1v1 keeps 0; v0 has per-field rulesoptional-
facesbooleanKeep the speakers’ pictures shown over it; they are hidden by default.false-optional-
fadenumberSeconds the picture takes to fade in (default 0.25); 0 shows it at once in schema version 1 and later.0.25 s to show; hiding uses the showing timev1 keeps 0; v0 has per-field rulesoptional-
filestringThe picture to show, under assets/. Written alone as a path; an empty path hides the picture shown.empty string-optionalimage in assets/
filesstring[]Several pictures shown one after another, a tap between them; an entry may be a pattern such as cg/night_*.jpg.empty list-optionalimages or patterns in assets/
fitstringcontain (the default) shows all of the picture over a blurred copy; cover fills the screen.contain-optional-
hazecolor stringThe color of the dream haze (a pale pink when left out).pale pink for dream-optional-
lookstringHow it is shown; dream blurs the edges, adds a haze from the edges and slowly zooms in.normal-optional-
optionalbooleanLet files match no picture yet; nothing is shown until one exists.false-optional-
overPicture or stringA picture standing in the middle of it, its feet above the message window, such as a monster met in a dungeon.empty (its fields take their defaults)-optional-
over_sizenumberThe height of over, as a share of the screen’s height (default 0.55).0.55v1 rejects 0; v0 has per-field rulesoptional-
pageintegerWith files, show only this page (1 is the first; past the last, the last).0 (show every page in order)every page waits for inputoptional-
pickexpressionAn expression choosing which of files to show: its value modulo the number of files, plus one.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression that picks the page
tintcolor stringA color the picture is tinted with, such as "#ffd8e0".no color (the default of where it is drawn)-optional-

Stand #

A portrait brought onto the stage of the novel window or taken off; none takes everyone off. Needs schema version 4.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
atstringWhere it stands: left, center, right or a fraction of the screen’s width. The default is the center.empty string-optional-
enterstringHow it comes in: fade (the default) or slide.empty string-optional-
facestringA face of the actor, or a picture path for anyone else. The default is the actor’s face.empty string-optional-
leavestringTakes it off: fade or slide.empty string-optional-
whostringThe actor, or the name of a speaker whose picture is face.empty string-optional-

EffectCue #

A visual effect, written as a word or a map (the map needs schema version 4).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
colorcolor stringWith fade, the color the screen goes to. The default is black.no color (the default of where it is drawn)-optional-
holdnumberWith fade, how many seconds the screen stays on the color.00 is keptoptional-
namestringThe effect: shake, flash, fade, or a reaction of a moving portrait.empty string-optional-
secondsnumberHow long the effect takes. The default is the effect’s own.00 is keptoptional-
whostringWith shake, the actor (or the name of a speaker stood with a picture) whose portrait shakes instead of the screen; with a reaction, the actor who plays it. The default is the last speaker.empty string-optional-

WaitCue #

A pause, written as seconds or a map (the map needs schema version 4).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
secondsnumberHow many seconds to wait.0v1 keeps 0; v0 has per-field rulesoptional-
skipbooleanWhether skip mode passes the wait. The default is true.nil; nothing is defined-optional-

SFXCue #

A sound effect, written as its name or a map (the map needs schema version 4).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
namestringThe name of the sound effect.empty string-optional-
waitbooleanHolds the event until the sound ends.false-optional-

Aside #

An event inserted right after a line by a given speaker is shown, when a condition holds. It is not inserted during battle.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringThe speaker whose lines trigger the aside, an ID of actors. One of actor, face or name is required.empty string-one of actor, face, or name is requiredactors
callstringThe event inserted after the line, an ID of events. The conversation resumes when it ends.empty string-optionalevents
facestringA pattern matched against the face of the line. One of actor, face or name is required.empty string-one of actor, face, or name is requiredface image or pattern
namestringThe speaker name a line must have. One of actor, face or name is required.empty string-one of actor, face, or name is required-
skipstring[]Patterns of event names. The aside is not inserted while one of these events, or an event it calls, is running.empty list-optionalevents patterns
whenexpressionAn expression that decides whether the aside is inserted.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Target #

How an AI rule picks a skill’s target: a preset name such as weakest, or a map with side, where, pick and by.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
byexpressionAn expression measured on each candidate, compared by pick.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)required when pick is min or maxexpression; checked by gozen check
pickstringHow to choose among the candidates: min or max of by, first, or random (the default). min and max need by.random-optional-
presetstringA named target: random, self, weakest, strongest, lowest_hp, lowest_hp_rate, highest_hp, ally_lowest_hp_rate, ally_dead or first. Written alone as the name.chosen from the action’s scope-optional-
sidestringWhich side to choose from, allies or foes of the one acting; by default it follows the scope of the action.chosen from the action’s scope-optional-
whereexpressionAn expression each candidate must satisfy.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Require #

A prerequisite of a skill-tree node: another node that must reach a level first.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
levelintegerThe level the required node must have reached. The default is 1.1v1 rejects 0; v0 has per-field rulesoptional-
nodestringThe ID of the skill-tree node that must be raised first.empty string-requiredtree[].id of the same class

Grant #

A state that is given with a chance.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
chanceexpressionAn expression giving the probability that the state is given.1expression value 0 (false as a condition)optionalexpression; checked by gozen check
statestringThe ID of the state (an ID of states) to give.empty string-optionalstates

Actor #

A party member or other character: their class, level, faces, equipment and portrait settings.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
aiAI ID or Rule[]The rules this actor follows in auto battle, either an ID of ai or a list of rules inline. Party members inherit their class AI when omitted.no AI (party members inherit the class AI)-optionalai ID or Rule[]
backbooleanIf true, the actor starts in the back row.false-optional-
classstringAn ID of classes for a combat actor. Omit for a speaker who only uses dialog, portraits and voices.empty string-optionalclasses
colorcolor stringThe color of the actor’s name on the status screen.no color (the default of where it is drawn)-optional-
cutinstringThe picture used for the skill cut-in, a file under assets/. The standing picture is used when omitted.empty string-optionalimage in assets/
cutin_boxnumber[]Where the face is in the cut-in picture: the center as fractions of width and height, then the size as a fraction of width.empty list-optional-
cutin_linesstring[]Lines shouted during a cut-in. One is picked in turn.empty list-optional-
dollDollHow the actor looks as a small doll walking a stage when leading the party. Needs schema version 3.nil; nothing is defined-optional-
equipstring → stringThe starting equipment, mapping each equip slot to an ID of items.empty map-optionalkeys are equip_slots, values items
facestringThe face shown by default. It must be one of the face names in the faces directory. Default normal.normal-optionalface in faces
face_boxnumber[]Where the face is on the standing pictures: the center as fractions of width and height, then the size as a fraction of width.empty list-optional-
face_rulesFaceRule[]Rules that pick this actor’s face from their state. The first rule whose when holds wins.empty list-optional-
face_shadenumberHow much the face icons cut from standing pictures are darkened, from 0 (as drawn) to 1 (black). Default 0.00 is keptoptional-
face_shade_topnumberThe darkness at the top of the face icon, fading evenly to face_shade at the bottom. Defaults to face_shade.inherits face_shadev1 keeps 0; v0 has per-field rulesoptional-
facesstringA directory under assets/ that holds one picture per face, named <face>.png.empty string-optionalface directory in assets/
imagesHPImage[]Faces selected by descending HP thresholds during battle. Each row names below and a face in the actor’s faces directory. Needs schema version 7.empty list-optional-
levelintegerThe starting level. Default 1.1v1 rejects 0; v0 has per-field rulesoptional-
namestringThe name shown for the actor.empty string-optional-
no_standingbooleanIf true, the actor is not shown standing in talks or cut-ins, which suits the protagonist the player stands in for. The face icon stays.false-optional-
profilestringA short description of the actor shown in the status screen.empty string-optional-
puppetstringA moving portrait under assets/. The talk window draws it instead of the face picture when it has a face of that name.empty string-optional-
reactionsstring → stringFaces shown for a moment on events such as hit, act, heal, win and fall, mapping the event name to a face.empty map-optional-
speechstring → SpeechStyleOptional language-keyed first-person, address and tone lint rules; undeclared speakers are not inspected.empty map-optional-
treestring → integerSkill tree nodes already raised at the start, mapping a node ID to its level. They are paid from the starting SP.empty map-optionalkeys are tree[].id of the actor’s class
voicesstringA folder under assets/ holding the actor’s voices, named by say.voice. gozen check counts the actor’s lines without a voice. Needs schema version 4.empty string-optional-

Class #

A kind of character: how stats grow with level, which skills are learned and what equipment is allowed.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
aiAI ID or Rule[]The auto battle rules for this class, either an ID of ai or a list of rules inline.no AI (party members inherit the class AI)-optionalai ID or Rule[]
equipstring[]The kinds of equipment this class may use. An empty list allows every kind.empty list-optionalkinds of items
exp_forexpressionAn expression for the total experience needed to reach a level, with the level given as level.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)requiredexpression; checked by gozen check
max_levelintegerThe highest level this class can reach.99v1 rejects 0; v0 has per-field rulesoptional-
namestringThe name of the class.empty string-optional-
skillsLearning[]The skills learned at given levels.empty list-optional-
spintegerThe skill points gained at each level. Default 1.1v1 keeps 0; v0 has per-field rulesoptional-
sp_pitchstringA short line used when suggesting how to spend SP, giving a reason that fits this class’s role.empty string-optional-
start_spintegerThe skill points the class has at level 1.00 is keptoptional-
statsstat name → expressionAn expression for each stat, such as mhp or atk, giving its value at a level.empty map-all eight stats are required-
treeTreeNode[]The skill tree: skills and passive nodes raised with SP, each opening once the nodes it requires are raised far enough.empty list-optional-

Learn #

A command that teaches an actor a skill.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringThe ID of the actor (an ID of actors) who learns the skill.empty string-requiredactors
skillstringThe ID of the skill (an ID of skills) to learn.empty string-requiredskills

Learning #

A skill that is learned at a certain level.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
levelintegerThe level at which the skill is learned.v0: 0 (learnable from the start) / v1: 1v0 learns it from the start; v1 rejects 0optional-
skillstringThe ID of the skill (an ID of skills) learned.empty string-optionalskills

LevelScale #

Makes a troop tougher when the party’s average level (rounded down) is above level. Past the cap, further levels make the battle easier again.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
levelintegerThe level the battle is meant for.00 is keptrequired; 1 or more-
maxnumberThe cap of the growth, for example 0.25 for at most 25 percent more.00 is keptrequired unless unbounded; above 0 and at most 0.5-
ratenumberThe growth per level above level, for example 0.05 for 5 percent.00 is keptrequired; above 0 and at most 0.2-
statsstring[]The stats that grow. By default mhp, atk and mat.[mhp, atk, mat]-optional-
unboundedbooleanIf true, lifts the limit that bosses have on max so the foe keeps following the party’s level further.false-optional-

TreeNode #

A node of a skill tree: a skill whose level is the SP put into it, or a passive bonus.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
colintegerThe column (tier) where it is drawn.00 is keptoptional-
descstringA description. It defaults to the skill’s.description of the referenced skill-optional-
idstringThe node’s ID, which other nodes refer to in requires. It defaults to the ID of skill; a node without skill must give one.skill ID-required without skill; unique within the class-
maxintegerThe highest level of the node. The default is 10.10v1 rejects 0; v0 has per-field rulesoptional-
namestringThe node’s name. It defaults to the skill’s.name of the referenced skill-optional-
requiresRequire[]Nodes that must be raised to given levels before this one opens.empty list-optional-
rowintegerThe row where it is drawn.00 is keptoptional-
skillstringAn ID of skills learned at level 1. Leave empty for a passive node.empty string-skill or stats is requiredskills
statsstat name → integerStats added for each level of the node.empty map-skill or stats is required-

FaceRule #

One rule for picking an actor’s or enemy’s face from their state, where self is the one in question.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
facestringThe face to show, a key of faces.empty string-optionalthe target’s face
whenexpressionAn expression that must hold for this rule to apply. The first rule that holds wins.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Slot #

An equipment slot such as weapon or armor.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
idstringThe slot’s ID, which items refer to in their slot.empty string-optional-
manualbooleanLeave this slot alone for the menu’s best-equipment and recommendation features, for gear that cannot be compared by total stats.false-optional-
namestringThe name shown in the equipment menu.empty string-optional-

EquipItem #

The equip command: an actor puts an item from the bag into an equipment slot.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringThe ID of the actor (an ID of actors) who equips the item.empty string-optional-
itemstringThe ID of the equipment item (an ID of items that has a slot) to put on. When omitted, the slot is emptied.empty string-optional-
slotstringThe equipment slot to use (an ID of slots). When empty, the item’s own first slot is used.empty string-optional-

EquipStones #

Puts the stones of a stone set on an actor.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorexpressionAn expression giving the ID of the actor who receives the stones.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)requiredexpression that returns an actors ID
setexpressionAn expression giving the ID of the stone set to put on.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)requiredexpression that returns a stone_sets ID

StoneSet #

A combination of magic stones worn together by one person that grants a skill and stats while all are worn.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
descstringA description of the combination.empty string-optional-
familystringAn ID that groups sets into one series regardless of display name. By default sets with the same name form one series.if omitted, a series by the legacy name, separate from explicit IDs-optionalseries ID apart from the label; letters, digits, _ and -, starting with a letter or digit; the same ID for every entry of a series
forstring[]The actors this combination suits, used as the default wearer for stone suggestions.empty list-at least one when only is trueactors[]
namestringThe combination’s name.empty string-required-
onlybooleanThe set only takes effect when worn by someone listed in for.false-optional-
pitchstringA line the stone shop says when recommending it. Write it on the first set of a series.empty string-optional-
skillstringAn ID of skills the set grants.empty string-skill or stats is requiredskills
statsstat name → integerStats added while the whole set is worn.empty map-skill or stats is required-
stonesstring[]The IDs of items (stones) that make up the set.empty list-at least oneitems[]

Fusion #

A recipe at the stone shop that makes one stone from several.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
fromstring[]The IDs of the items (the stones, an ID of items) that are combined. At least one is needed.empty list-at least oneitems[]
priceintegerThe gold the fusion costs.00 is keptoptional-
tostringThe ID of the item (the stone, an ID of items) that the fusion produces.empty string-requireditems

Meter #

A gauge of a number, showing value out of max while when holds.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringThe ID of the actor (an ID of actors) whose status page shows the meter. When empty, it shows on every page.empty string-optionalactors
colorcolor stringThe color of the bar.no color (the default of where it is drawn)-optional-
fullstringThe text written after the bar when it is full.empty string-optional-
full_colorcolor stringThe color the bar takes when it is full.no color (the default of where it is drawn)-optional-
labelstringThe name shown beside the gauge.empty string-optional-
mark_labelsstring[]Short names of the marks, in their order, drawn small under each line (such as the value where trouble starts). At most one per mark.empty list-optional-
marksnumber[]Values marked on the bar, for example where something becomes possible.empty list-optional-
maxnumberThe maximum of the gauge. The default is 100.100v1 rejects 0; v0 has per-field rulesoptional-
max_valueexpressionAn expression giving a state-dependent maximum. When it evaluates, it overrides max and is rounded to at least 1, and the gauge shows current/maximum.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
stylestringHow the meter shows: bar (the default) or number (the label and the value only, not capped by max; for money such as value: gold).empty string-optional-
valueexpressionAn expression giving the current value.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)requiredexpression; checked by gozen check
whenexpressionAn expression that must hold for the meter to be shown.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Passive #

A state that is put on an actor at the start of a battle while a condition holds.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringThe ID of the actor (an ID of actors) who gets the state.empty string-optionalactors
levelexpressionAn expression giving the tier shown on the skill tree screen. When omitted, it is not shown. Its name is hidden while when does not hold.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
statestringThe ID of the state (an ID of states) that is applied.empty string-optionalstates
whenexpressionAn expression that must hold for the state to be applied.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Item #

A thing the party carries: a consumable, a piece of equipment or a key item.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
colorcolor stringThe color of the item’s icon.no color (the default of where it is drawn)-optional-
commandbooleanIf true, an item with an event appears as an action at the top of the menu instead of in the item list. It shows only while event_when holds.false-optional-
consumebooleanWhether the item is used up when used. The default is true.true-optional-
descstringThe description shown for the item.empty string-optional-
elementstringThe element of the attack of a weapon.empty string-optionalelements
eventstringThe ID of the event (an ID of events) run when the item is used from the menu. The item is used up unless consume is false, and the menu closes. Required when command is true.empty string-required when command is trueevents
event_whenexpressionAn expression that must hold for the item’s event to be usable.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
kindstringThe kind of item: item, key, or an equipment kind such as sword or staff.item-optional-
namestringThe item’s name.empty string-optional-
priceintegerThe gold price in shops.00 is keptoptional-
shortstringA short name used when items are listed together in suggestions. Defaults to name.empty string-optional-
slotstringThe equipment slot the item goes into, for equipment.empty string-optionalequip_slots[].id
state_resiststring → numberChance multiplier by state while the item is equipped, as a map of state ID to number.empty map-optionalkeys are states
statesGrant[]States that a weapon’s attack may inflict, each with a chance.empty list-optional-
statsstat name → integerStat bonuses the item gives when equipped.empty map-optional-
useUsageWhat the item does when used, such as healing or damage to targets.nil; nothing is defined-optional-

ItemCount #

An item and how many. In schema 11, a string item ID means one item.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
countintegerHow many of the item. When omitted it is 1.1v1 keeps 0; v0 has per-field rulesoptional-
itemstringThe ID of the item (an ID of items).empty string-requireditems

Skill #

An action a character can use in battle or from the menu.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
animstringThe animation style: slash, magic, heal, buff, debuff or none.empty string-optional-
colorcolor stringThe color that tints the skill’s effect.no color (the default of where it is drawn)-optional-
critexpressionThe critical-hit chance as an expression. The default is the battle’s critical rate; use 0 for none.battle.critical (no critical hits if both are omitted)expression value 0 (false as a condition)optionalexpression; checked by gozen check
cutinbooleanShow the user’s picture and the skill name across the screen before the action, for big skills.false-optional-
descstringA description shown to the player.empty string-optional-
effectsEffect[]What the skill does to each target, as a list of effects.empty list-optional-
fxstringThe effect drawn on the targets, such as slash, fire, heal or none. The default depends on the element or anim.empty string-optional-
hitexpressionThe chance to hit each target, as an expression. The default is 1.1expression value 0 (false as a condition)optionalexpression; checked by gozen check
hitsintegerHow many times the skill hits.1v1 rejects 0; v0 has per-field rulesoptional-
messagestringThe message shown when the skill is used.empty string-optional-
mpintegerThe MP the skill costs.00 is keptoptional-
namestringThe skill’s name.empty string-optional-
sacrificebooleanThe user falls after using it, as in blowing itself up.false-optional-
scopestringWho it targets, such as one_enemy, all_allies or self.one_enemy for skills, one_ally for items-optional-
sfxstringThe sound effect played when it is used.empty string-optional-
speedexpressionA bonus added to the user’s speed when deciding turn order, as an expression.no change to turn order (when set, added to battle.speed)expression value 0 (false as a condition)optionalexpression; checked by gozen check
wherestring[]Where it can be used: battle, menu, or both. The default is battle.[battle] for skills, [battle, menu] for items-optional-

Effect #

One thing a skill or item does to each target, such as dealing damage, healing or adding a state.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
add_statestringA state to add to the target, an ID of states.empty string-exactly one kind of effectstates
chanceexpressionAn expression for the chance that the effect happens.1expression value 0 (false as a condition)optionalexpression; checked by gozen check
damageexpressionAn expression for the damage dealt, with a as the user and b as the target.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)exactly one kind of effectexpression; checked by gozen check
drainnumberThe fraction of the damage dealt that the user gains back, as HP or MP following stat.00 is keptoptional-
elementstringThe element of the damage, an ID of elements.empty string-optionalelements
escapebooleanIf true, the party runs away from the battle.false-exactly one kind of effect-
healexpressionAn expression for the amount healed.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)exactly one kind of effectexpression; checked by gozen check
mergeMergeCombine living enemy allies into one form, with into, from, count and hp. Needs schema version 7.nil; nothing is defined-optional-
messagestringThe line shown in the battle log when the effect happens.empty string-optional-
on_userbooleanIf true, the effect lands on the user instead of the target, so what is taken from the target goes to the user.false-optional-
quietbooleanIf true, no message is shown, only the light and numbers. Nothing is shown when the heal is 0.false-optional-
recoilnumberThe fraction of the damage dealt that the user loses, never below 1 HP.00 is keptoptional-
remove_statestringA state to remove, an ID of states, or bad for every bad state.empty string-exactly one kind of effectstates or bad
reviveexpressionAn expression for the HP a fallen ally comes back with.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)exactly one kind of effectexpression; checked by gozen check
statstringThe stat the effect changes, hp (the default) or mp.hp-optional-
summonstringAn enemy to call into the battle on the foes’ side, an ID of enemies. Only an enemy user summons.empty string-exactly one kind of effectenemies
summon_maxintegerThe most foes that may stand in the battle at once, counting every living foe. Default 5.5v1 rejects 0; v0 has per-field rulesoptional-
transformstringThe enemy ID that replaces a living enemy target in its existing battle slot. Needs schema version 7.empty string-optional-
transform_clearbooleanClear states and guard on transformation. By default they remain.false-optional-
transform_hpexpressionNew HP: ratio (default), full, or an expression evaluated before the form changes.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
turnsexpressionAn expression for how many turns an added state lasts. The state’s own turns is used when omitted.turns of the added stateexpression value 0 (false as a condition)only with add_stateexpression; checked by gozen check
variancenumberThe spread of damage and healing for this effect, where 0.1 means plus or minus 10 percent. The battle default applies when omitted.inherits battle.variance0 is keptoptional-
whenexpressionAn expression that must hold for the effect to apply, with a and b in scope.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Usage #

What using an item or skill does: its targets, effects and presentation.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
animstringThe animation style: slash, magic, heal, buff, debuff or none.empty string-optional-
colorcolor stringThe color that tints the effect.no color (the default of where it is drawn)-optional-
critexpressionThe critical-hit chance as an expression. The default is the battle’s critical rate; use 0 for none.battle.critical (no critical hits if both are omitted)expression value 0 (false as a condition)optionalexpression; checked by gozen check
cutinbooleanShow the user’s picture and name across the screen before the action, for big skills.false-optional-
effectsEffect[]What it does to each target, as a list of effects.empty list-optional-
fxstringThe effect drawn on the targets, such as slash, fire, heal or none. The default depends on the element or anim.empty string-optional-
hitexpressionThe chance to hit each target, as an expression. The default is 1.1expression value 0 (false as a condition)optionalexpression; checked by gozen check
hitsintegerHow many times it hits each target; for random_enemy, how many random foes it strikes. The default is 1.1v1 rejects 0; v0 has per-field rulesoptional-
messagestringThe message shown when it is used.empty string-optional-
sacrificebooleanThe user falls after using it, as in blowing itself up.false-optional-
scopestringWho it targets: one_enemy, all_enemies, random_enemy, one_ally, all_allies, self, dead_ally, all_dead_allies, everyone or none. Skills default to one_enemy, items to one_ally.one_enemy for skills, one_ally for items-optional-
sfxstringThe sound effect played when it is used.empty string-optional-
speedexpressionA bonus added to the user’s speed for turn order, as an expression. By default nothing is added.no change to turn order (when set, added to battle.speed)expression value 0 (false as a condition)optionalexpression; checked by gozen check
wherestring[]A list of where it can be used: battle, menu. Items default to both, skills to battle.[battle] for skills, [battle, menu] for items-optional-

State #

A condition a battler is in, such as poison, sleep or a buff.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
againexpressionThe chance, as an expression, of attacking once more after a normal attack. It can repeat up to three times in a row.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
badbooleanMark it as a bad state, so cures such as remove_state: bad can remove it.false-optional-
colorcolor stringThe color of the state’s badge.no color (the default of where it is drawn)-optional-
counterexpressionThe chance, as an expression, of striking back with the attack skill when hit by a single-target physical attack.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
coverexpressionA condition under which the one with the state takes single-target physical attacks aimed at an ally, such as b.hp_rate < 0.5.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
damage_ratenumberA multiplier for the damage the holder takes; 0.5 halves it and 0 blocks it (schema version 0 reads 0 as 1). The default is 1. Rates of several states multiply.1v1 keeps 0; v0 has per-field rulesoptional-
descstringA description shown in the status menu.empty string-optional-
endureexpressionHow many times per battle the holder survives a lethal hit with 1 HP, as an expression.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
fatalbooleanThe state kills the target at once. The chance is the effect’s chance times the resistances.false-optional-
messagesStateMsgsBattle messages for this state.empty (its fields take their defaults)-optional-
namestringThe state’s name.empty string-optional-
on_turn_endEffect[]Effects applied to the holder at the end of each turn, such as poison damage.empty list-optional-
on_turn_end_alliesEffect[]Effects applied at the end of each turn to every standing ally of the holder, including the holder.empty list-optional-
persistbooleanThe state stays after the battle ends.false-optional-
remove_on_damagenumberThe chance that taking a hit removes the state.00 is keptoptional-
restrictstringHow it limits actions: skip loses the action, confuse makes it act randomly, empty means no limit.empty string-optional-
restrict_chancenumberWith restrict: skip, the chance of losing the action. 0 means always.0always restricts actions (drop restrict for none)optional-
shortstringThe short badge shown next to the HP bar.empty string-optional-
state_resiststring → numberA map from state ID to a multiplier on the chance of that state landing on the holder; 0 blocks it.empty map-optionalkeys are states
statsstat name → multiplierMultipliers applied to the holder’s stats while the state lasts.empty map-optional-
stats_bystring → expressionStat multipliers given as expressions, such as atk: "1 + 0.05 * var.n", combined with stats.empty map-optional-
turnsintegerHow many turns the state lasts. 0 means until cured.0lasts until curedoptional-

StateMsgs #

The battle messages of a state. {target} is replaced with the affected name.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
addstringShown when the state is added.empty string-optional-
counterstringShown when the holder counterattacks. {user} is the attacker.empty string-optional-
coverstringShown when the holder covers an ally. {user} is the ally covered.empty string-optional-
removestringShown when the state ends.empty string-optional-
staystringShown when the state stops an action.empty string-optional-

StateName #

A declared state name (var.NAME or flag.NAME, written in full), with its type and starting value.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
initialboolean, number, or string literalThe starting value as a literal, not an expression.required; a literal of the declared type-required-
typestringThe value type of the name: bool, number or string. A flag. name must be bool.empty string-required-

StateNames #

Optional declarations of the var.* and flag.* names a game uses.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
namesstring → StateNameThe declared names, each with a type and an initial value.empty map-optional-
strictbooleanReject flag.* and var.* names that are neither declared here nor generated by the engine.false-optional-

Affect #

Puts a state on party members or removes one outside battle.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
addstringThe state to add, an ID of states. Either add or remove is required.empty string-add or remove is requiredstates
removestringThe state to remove, an ID of states, or bad to remove every bad state.empty string-add or remove is requiredstates or bad
resistbooleanIf true, the target’s state resistance may block the state, rolled for each member. Otherwise the state is always applied.false-optional-
turnsintegerHow many turns the added state lasts. The state’s own turns is used when omitted.turns of the added stateuses the state’s turnsoptional-
whostringWho is affected: an ID of actors, or all for the whole party.empty string-optionalactors or all

Hurt #

A command that reduces a party member’s HP outside battle.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
amountexpressionAn expression giving the HP to remove, where self is the targeted member.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)requiredexpression; checked by gozen check
whostringThe party member to hurt, an actor ID, or all.empty string-optionalactors or all

Drop #

An item an enemy may leave behind when defeated.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
chancenumberThe probability of the drop, from 0 to 1.00 is keptoptional-
itemstringThe item dropped, an ID of items.empty string-optionalitems
whenexpressionAn expression that must hold for the drop, for example depending on how the enemy was beaten.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

BattleCfg #

The rules shared by every battle: damage, speed, escape, AI, music and automatic play.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
afterstringAn event ID run after the result is applied, before the next choice or the end of the event. Useful for resource checks or returning home.empty string-optionalevents
after_winstringAn event ID run after every battle that is won.empty string-optionalevents
aistringHow battlers choose actions: priority (the default, highest priority by weight) or gambit (the first rule that holds, from the top).priority-optional-
attack_skillstringThe skill used by the Attack command, an ID of skills. Default attack.attack-optionalskills
auto_startbooleanIf true, battles begin in auto mode unless the player chose otherwise in settings. Default false.false-optional-
auto_tacticsstring → TacticRow[]Auto-battle tactic rows for each named AI, keyed by AI name. An AI without an entry uses the default rules.empty map-optionalkeys are ai, values TacticRow[]
auto_temponumberA speed multiplier for messages and waits while auto battle runs. Default 1.1v1 rejects 0; v0 has per-field rulesoptional-
back_weightnumberHow strongly enemies aim at one back-row member. Default 1.10 is keptoptional-
beforestringAn event ID run just before a battle starts. Useful for resource costs or entry conditions.empty string-optionalevents
boss_win_musicMusicCue or stringThe song played once when a battle with a boss enemy is won.empty (its fields take their defaults)-optional-
criticalexpressionAn expression for the chance of a critical hit for skills that do not set their own. No critical hits when omitted.no critical hitsexpression value 0 (false as a condition)optionalexpression; checked by gozen check
critical_ratenumberThe damage multiplier of a critical hit. Default 1.5.1.5v0 uses the default; v1 keeps 0optional-
escapeexpressionAn expression for the chance that the party escapes. Default 0.5.0.5expression value 0 (false as a condition)optionalexpression; checked by gozen check
foe_scalestring → numberMultipliers for the stats of non-boss foes, keyed by stat name, such as mhp: 1.4.empty map-optional-
foe_scale_whenexpressionAn expression that decides when foe_scale applies. It always applies when omitted.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
front_weightnumberHow strongly enemies aim at one front-row member. Default 4.40 is keptoptional-
guard_ratenumberThe multiplier applied to damage taken by a guarding battler. Default 0.5.0.5v0 uses the default; v1 keeps 0optional-
guard_skillstringThe skill used by the Guard command, an ID of skills. Default guard.guard-optionalskills
musicMusicCue or stringThe battle song used when the troop names none. Defaults to the song named battle if there is one.the song named battle, if any-optional-
passivesPassive[]States placed on party members at the start of each battle while their when holds. They do not last after the battle.empty list-optional-
retrybooleanIf true, the player may retry from before the fight after losing. Default false.false-optional-
simple_tacticsbooleanIf true, tactics are edited as five rows of condition and action only. Default false.false-optional-
speedexpressionAn expression for the action order key, where higher acts first. Default a.agi times a random 0.8 to 1.2.a.agi * (0.8 + 0.4 * random)expression value 0 (false as a condition)optionalexpression; checked by gozen check
tactic_presetsstring → TacticPresetNamed sets of tactics the player can pick, keyed by preset ID.empty map-optionalpreset ID and its TacticPreset
temponumberHow fast battle messages and moves go by. Default 1, and 1.5 is half as fast again.1v1 rejects 0; v0 has per-field rulesoptional-
variancenumberThe default spread of damage and healing, where 0.1 means plus or minus 10 percent. Default 0.1.0.1v0 uses the default; v1 keeps 0optional-

BattleAct #

One move for the next auto battle: who acts, with what skill or item, and on whom.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringThe party member who acts, an ID of actors.empty string-optional-
itemstringThe item to use, an ID of items. Use this or skill.empty string-optional-
skillstringThe skill to use, an ID of skills. Use this or item.empty string-optional-
targetstringThe target, an enemy or party member ID. The skill’s own targeting is used when omitted.empty string-optional-

BattleFx #

Multipliers that scale battle visual effects up or down. A value of 0 turns an effect off.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
autoBattleFxAutoExtra multipliers applied while the battle runs in auto mode.empty (its fields take their defaults)-optional-
chargenumberThe length of the build-up before a boss’s big move. Default 1.1v1 keeps 0; v0 has per-field rulesoptional-
finishnumberThe length of the stop and slow motion on a finishing blow and the boss-defeated display. Default 1.1v1 keeps 0; v0 has per-field rulesoptional-
flashnumberThe strength of the short white flash on critical hits and weakness hits. Default 1.1v1 keeps 0; v0 has per-field rulesoptional-
hitstopnumberHow long the screen freezes on a critical or weakness hit. Default 1.1v1 keeps 0; v0 has per-field rulesoptional-
popnumberThe size and bounce of damage numbers. Default 1.1v1 keeps 0; v0 has per-field rulesoptional-
shakenumberThe strength of screen shaking on critical hits, weakness hits and finishing blows. Default 1.1v1 keeps 0; v0 has per-field rulesoptional-

BattleFxAuto #

Extra effect multipliers applied during auto battle so the player is not kept waiting.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
chargenumberMultiplier for the build-up before a boss’s big move. Default 0, meaning none.0v1 keeps 0; v0 has per-field rulesoptional-
finishnumberMultiplier for the stop and slow motion on a finishing blow. Default 0, meaning none.0v1 keeps 0; v0 has per-field rulesoptional-
hitstopnumberMultiplier for the freeze on critical and weakness hits. Default 0, meaning none.0v1 keeps 0; v0 has per-field rulesoptional-
winnumberMultiplier for the time the boss-defeated banner cannot be skipped. Default 0.4.0.4v1 keeps 0; v0 has per-field rulesoptional-

Enemy #

A kind of foe that can appear in battle.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actionsintegerHow many actions the enemy takes per turn. The default is 1.1v1 keeps 0; v0 has per-field rulesoptional-
aiAI ID or Rule[]How the enemy chooses what to do, either an ID of ai or a list of rules written inline.no AI (party members inherit the class AI)-optionalai ID or Rule[]
armystringThe kind of army (a key of campaign.clash.armies) its unit is shown as in a clash shown as units, when it leads a region’s defense or a faction’s march: monsters for monsters.empty string-optional-
bossbooleanSet to true to make this enemy a boss, which gets the guardian banner and boss treatment in battle.false-optional-
dropsDrop[]Items the enemy may leave behind when defeated, each with its own chance.empty list-optional-
expintegerThe experience points the party earns for defeating this enemy.00 is keptoptional-
face_rulesFaceRule[]Rules that pick which face (a key of faces) the enemy shows, using the first rule whose condition holds.empty list-optional-
facesstring → stringPictures of the enemy by mood (such as hurt or angry), for bosses drawn as people. Values are images under assets/.empty map-optionalvalues are images in assets/
familystringThe monster family ID used by breeding. Needs schema version 6.empty string-optional-
goldintegerThe gold the party earns for defeating this enemy.00 is keptoptional-
hardintegerIf above 0, the plain attack (the skill named by battle.attack_skill) does at most this much damage to the enemy unless it is a critical hit. Other skills and critical hits do full damage.00 is keptoptional-
hp_triggersHPTrigger[]Immediate form changes when damage crosses descending HP ratios. Each row names below and transform. Needs schema version 7.empty list-optional-
imagePicture or stringThe picture of the enemy shown in battle, written as a path or as a picture map with a file.empty (its fields take their defaults)-required (needs file)-
image_heightnumberBattle picture height as a fraction of screen height (0 to 1). Omission keeps the legacy pixel-based layout; crowded troops shrink together.0v1 keeps 0; v0 has per-field rulesoptional-
imagesHPImage[]Alternate files selected as HP falls below descending ratio thresholds. Needs schema version 7.empty list-optional-
levelintegerThe enemy’s level as read by battle expressions (level) and the average level of a side. It does not change stats. The default is 1.1v1 rejects 0; v0 has per-field rulesoptional-
lorestringA short description shown in the monster book after the enemy has been encountered.empty string-optional-
monster_classstringThe class used for a recruited or bred actor instance. Needs schema version 6.empty string-optional-
motionstringIdle movement: none (default), breathe, sway, or bob. Needs schema version 7.empty string-optional-
namestringThe enemy’s name shown in battle.empty string-optional-
puppetstringAn optional moving portrait definition under assets/ for this enemy. Needs schema version 7.empty string-optional-
rankintegerA positive rank used to select offspring from a family rule. Needs schema version 6.00 is keptoptional-
reactionsstring → stringFaces (keys of faces) shown briefly when the enemy is hit, acts or falls.empty map-optional-
recruitRecruitThe chance, level and optional bonus for joining after a victory. Bosses cannot be recruited. Needs schema version 6.nil; nothing is defined-optional-
resiststring → numberDamage multiplier by element, as a map of element name to number. A value of 0.5 halves that damage.empty map-optionalkeys are elements
scalenumberThe legacy size multiplier of the enemy picture. The default is 1.1v1 rejects 0; v0 has per-field rulesoptional-
sexstringAllowed sexes for monster instances: any (default), male or female. Needs schema version 6.empty string-optional-
sex_rationumberChance of a male instance when sex is any, from zero to one; default 0.5. Needs schema version 6.nil; nothing is defined0 is keptoptional-
state_resiststring → numberChance multiplier by state, as a map of state ID to number. A value of 0 makes the enemy immune.empty map-optionalkeys are states
statsstat name → integerThe enemy’s base stats, a map that must give all eight stats.empty map-all eight stats are required-
titlestringThe small line above a boss’s name in the banner shown at the start of its battle. When empty, a default guardian line is used.empty string-optional-

Troop #

A group of enemies met together in one battle.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
backgroundPicture or stringThe picture shown behind the battle.empty (its fields take their defaults)-optional-
can_escapebooleanWhether the party may run away. The default is true.true-optional-
eventsTroopEvent[]Commands that run during the battle when their conditions hold.empty list-optional-
introstringThe line shown when the battle begins, instead of the default appearance message.empty string-optional-
level_scaleLevelScaleToughens the troop a little when the party is stronger than intended, for bosses.nil; nothing is defined-optional-
membersstring[]The IDs of enemies in the troop. At least one is required.empty list-at least oneenemies[]
musicMusicCue or stringThe music played during the battle.empty (its fields take their defaults)-optional-
namestringThe troop’s name.empty string-optional-
win_musicMusicCue or stringThe music played once after winning, taking precedence over the game’s boss win music.empty (its fields take their defaults)-optional-

TroopEvent #

A battle event: commands run when a condition holds during a battle.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
doCommand[]The commands to run.empty list-optional-
oncebooleanWhether it fires only once per battle. The default is true.true-optional-
whenexpressionThe condition that triggers it.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

TroopPick #

A troop that can be drawn, with its weight.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
troopstringAn ID of troops.empty string-optionaltroops
weightnumberThe relative chance of drawing this troop. The default is 1, and 0 or less counts as 1.1v1 rejects 0; v0 has per-field rulesoptional-
whenexpressionA condition for the troop to be eligible.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Rule #

One rule of a battler’s AI: when it holds, the battler may use a skill or item on a target.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
chanceexpressionAn expression for a random draw; the rule is skipped unless the draw passes.1expression value 0 (false as a condition)optionalexpression; checked by gozen check
itemstringAn ID of items from the party’s bag to use instead of a skill. Only party members can use items.empty string-exactly one of use or itemitems
oncebooleanUse this rule at most once per battle.false-optional-
priorityintegerAmong the rules that hold, only those with the highest priority are kept. Higher wins.00 is keptoptional-
saystringA line shown before the action.empty string-optional-
targetTarget or stringHow to pick the target, as a preset name or a map with side, where, pick and by.empty (its fields take their defaults)-optional-
usestringAn ID of skills to use.empty string-exactly one of use or itemskills
weightnumberThe weight when one of the top-priority rules is drawn at random. The default is 1.1v1 rejects 0; v0 has per-field rulesoptional-
whenexpressionA condition for the rule, with self, allies, foes, turn, flag and var available.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

TacticAction #

An action an ally can pick in the tactics screen, together with its automatic target.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
itemstringAn ID of items to use for this action.empty string-exactly one of use or itemitems
namestringThe label shown to the player.empty string-required-
targetstringAn ID of tactic targets used to choose who it acts on.empty string-optionaltactic_targets
usestringAn ID of skills to use for this action.empty string-exactly one of use or itemskills

TacticCondition #

A condition the player can choose for a tactics row. The expressions stay author-only.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
chanceexpressionAn expression for a random draw that must pass for the rule. Only for template.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
kindstringThe kind of condition: always, template, hp_below, hp_at_most, mp_below, mp_at_most, state, not_state, alive or dead. The hp_ and mp_ kinds use the row’s percentage.empty string-required-
namestringThe label shown to the player.empty string-required-
oncebooleanThe resulting rule fires at most once per battle. Only for template.false-optional-
priorityintegerThe priority of the resulting rule. Higher wins. Only for template.00 is keptoptional-
saystringA line shown before the action. Only for template.empty string-optional-
statestringAn ID of states the condition checks for. Needed by state and not_state, and allowed only there.empty string-required for state conditionsstates
subjectstringWhat the condition looks at: self, allies, foes, or target to narrow down a single target. Needed by every kind except always and template.empty string-required for HP, MP, alive, and state conditions-
weightnumberThe weight of the resulting rule when drawn among equals. Only for template.0 (1 when a template is turned into a rule)0 is keptoptional-
whenexpressionThe expression that makes the condition hold. Needed by template, and allowed only there.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)required for templateexpression; checked by gozen check

TacticPreset #

A ready-made set of tactics rows the author provides for allies.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
descriptionstringA short description shown to the player.empty string-optional-
namestringThe preset’s name.empty string-optional-
rowsstring → TacticRow[]A map from the name of an ally’s AI to up to five tactics rows for it.empty map-optionalkeys are ai, values TacticRow[]

TacticRow #

One row of a simple tactics setting. It refers to catalog entries by ID rather than storing expressions.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actionstringAn ID of the tactic action to perform.empty string-required (disabled rows are checked too)tactic_actions
conditionstringAn ID of the tactic condition under which the row applies.empty string-required (disabled rows are checked too)tactic_conditions
enabledbooleanWhether the row is active. Omitted means true in schema 11 and false in earlier schemas.schemas 0–10: false / schema 11: true-optional-
percentintegerThe threshold percentage, needed only by conditions that use one.nil; nothing is defined0 is keptrequired for classic HP and MP conditions; not with simple tactics-
targetstringAn ID of the tactic target to aim at. It defaults to the target of the action, and cannot be set under simple tactics.empty string-required for the classic form without an action target; not with simple tacticstactic_targets

TacticTarget #

A selectable target tying a scope to a way of choosing among candidates.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
namestringThe label shown to the player.empty string-required-
scopestringThe target scope, as for a skill’s scope. self may also be used with one_ally.empty string-required-
selectorTarget or stringHow to pick the target, kept hidden from the editing side.empty (its fields take their defaults)-optional-

The title screen’s gallery: pictures to look at again and scenes to play again.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
cgsGalleryCG[]The pictures in the gallery, each opening once it has been shown in play.empty list-optional-
musicMusicCue or stringThe song and mood used when a gallery scene starts, unless the scene has its own music. If neither is set, the location’s music plays.music of the scene’s place-optional-
music_picturesstring → string[]Pictures shown in the music section for each song, as a map of song ID to a list of picture paths. Pictures not yet unlocked are skipped.empty map-optional-
scenesGalleryScene[]The scenes that can be played again from the gallery.empty list-optional-

GalleryCG #

A picture in the gallery that opens once it has been shown by an image command or its flag is set.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
filestringThe path of the picture under assets/. It may be a pattern matching several files.empty string-exactly one of file or filesimage in assets/
filesstring[]Several pages of one picture, viewed one after another. Each entry may be a pattern such as cg/x.*.jpg.empty list-exactly one of file or filesimages or patterns in assets/
flagstringA flag that, once set, also opens this picture.empty string-optionalflag name
titlestringThe title shown for the picture in the gallery.empty string-required-

GalleryPage #

An entry point into the middle of a gallery scene, given as a playback position and the answers to choices before it.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
answersinteger[]The 0-based indexes of the options chosen at each choice before this position, in order. Playback stops at the first choice with no listed answer.stops at an unanswered question-optionalanswers to the questions, counting from 0
lineintegerThe 1-based number of the line or question to start from, counting dialog lines and choices.0rejectedrequired; 1 or more-
picturestringIf set, only dialog shown over this picture is counted for line.counts lines and questions from the scene’s start-optionalimage in assets/; lines and questions are counted on that picture
titlestringThe title shown for this entry point in the list.empty string-required; blank is rejected-

GalleryScene #

A scene that can be played again from the gallery, run as an event with the starting party and no lasting effect.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
backgroundPicture or stringThe picture shown behind the replay. By default the location’s background is used.background of the scene’s place (in a dungeon, its battle background too)-optional-
eventstringThe ID of the event (an ID of events) to play.empty string-requiredevents
flagstringA flag that, once set, opens the scene. At least one of flag, when and seen is needed.empty string-one of flag, when, or seen is requiredflag name
groupstringThe heading under which the scene is grouped on the scene review page, such as a character name. When empty, it is grouped as other.empty string-optional-
idstringA fixed name for the scene that stays the same when its title or unlock condition changes.if omitted, a key from the legacy flag or the event and title-optionalfixed scene ID; letters, digits, _ and -, starting with a letter or digit; unique within the scene
legacy_keysstring[]Older keys of this scene, so records saved under them carry over to this id.nothing carried over from legacy keys-optionallegacy unlock keys starting with scene:; needs id and cannot be shared with another scene
locationstringThe ID of the location (an ID of locations) where the replay starts. By default the place where the event usually happens, or else the first location.guessed from the event; the start location if unknown-optionallocations
musicMusicCue or stringThe song and mood used when the replay starts. By default the gallery’s music, then the location’s.gallery.music, then the music of the scene’s place-optional-
pagesGalleryPage[]Entry points that let the replay start from the middle instead of the beginning.no page picked; plays from the first-optional-
picturestringA picture shown for the scene in the gallery list. By default none.empty string-optionalimage in assets/
seenstringA picture path or a pattern under assets/. The scene opens once a matching picture has been shown.empty string-one of flag, when, or seen is requiredimage or pattern in assets/
setstring → expressionAssignments applied to the replay’s starting state, such as flag.x or var.x expressions, so the scene plays as a later visit or with the right partner.empty map-optionalkeys are targets, values expressions; location, party and actor.ID.tactics take names as written (party also a list)
titlestringThe title shown for the scene in the gallery.empty string-required-
whenexpressionAn expression that must hold for the scene to open.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)one of flag, when, or seen is requiredexpression; checked by gozen check

CGReviewCfg #

Settings for reviewing the game’s pictures: the tags to mark them with, extra files and groups.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
extrastring[]Extra picture files to include in the review.empty list-optional-
groupsCGReviewGroup[]Named groups of picture files to review together.empty list-optional-
tagsCGReviewTag[]The tags a reviewer can mark a picture with.empty list-optional-

CGReviewGroup #

A named group of pictures in the review.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
filesstring[]The picture files in the group. At least one is required.empty list-at least one-
labelstringThe name shown for the group. Required.empty string-required-

CGReviewTag #

A tag a reviewer can attach to a picture.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
idstringThe ID stored in the record. It must be unique among the tags.empty string-needs an ID unique among the tags-
labelstringThe name shown for the tag.empty string-needs the tag’s label-
okbooleanIf true, this is an OK tag, and pictures with it are left out by the filter that hides OK ones.false-optional-

SceneReviewCfg #

Settings for the scene-review tool that lets authors tag recollection scenes.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
groupsstring[]The order of the group headings. Headings not listed come after, in the order they appear.empty list-optional-
tagsCGReviewTag[]The tags a reviewer can put on a scene, each with an ID, a label and whether it counts as OK.two tags, OK and NG-optional-
titlestringThe name of the review section. It defaults to a translatable built-in title.translated scene review label-optional-

MoodRule #

A rule choosing the music by the moment. The first rule that holds is used.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
moodstringThe mood to play in the modular song currently playing.empty string-one of mood, song, or play is requiredmoods of the song
nowbooleanIf true, switches to the mood at once instead of waiting for the end of the module.false-optional-
playstringA song (a track or a modular song) to play instead. When no rule with play holds, the place’s own song returns.empty string-one of mood, song, or play is requiredmusic.songs, or song/mood
songstringIf set, the rule applies only while this song is playing.empty string-one of mood, song, or play is requiredmusic.songs
whenexpressionAn expression that must hold for the rule to apply.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Activity #

Activity definition for deterministic planning simulations.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
afterstring[]After of this activity.empty list-optional-
assigneestringAssignee of this activity.empty string-optional-
dependency_rationumberFraction of each prerequisite needed before positive progress; omitted means 1.nil; nothing is defined0 is keptoptional-
effortnumberEffort of this activity.00 is keptoptional-
fromstringFrom of this activity.empty string-optional-
namestringName of this activity.empty string-optional-
observationexpressionDisplayed progress formula; self contains progress, effort and assignee. Refreshed by observe.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
parentstringOptional root activity for an authored decomposition; split activates the children.empty string-optional-
tostringTo of this activity.empty string-optional-

AtlasCamera #

Presentation-only camera for a large atlas. Bounds are clamped to the picture and labels retain their screen size.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
buttonsstringHow the camera’s on-screen buttons show: shown (the default), faint (see-through until the pointer is over them) or hidden (the keys, the wheel and the pad still move the camera).empty string-optional-
max_zoomnumberMaximum zoom relative to fit-to-screen, from 1 to 64. Zero or omitted means 8.00 is keptoptional-
zoomnumberInitial zoom relative to fit-to-screen, from 1 to max_zoom. Zero or omitted means 2, capped at max_zoom.00 is keptoptional-

AtlasPanel #

Selected-point advice in a fixed screen rectangle, independent of map pan and zoom.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
portraitstringDefault face picture under assets/. An advice variant can override it.empty string-optional-
rectnumber[][x, y, width, height] as screen fractions; defaults to [0.66, 0.1, 0.32, 0.65]. Must fit the screen, with width at least 0.2 and height at least 0.25.empty list-optional-

Attribute #

Attribute definition for deterministic planning simulations.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
hiddenbooleanHidden of this attribute.false-optional-
initialboolean, number, or string literalInitial of this attribute.empty (its fields take their defaults)-optional-
maxnumberMax of this attribute.nil; nothing is defined0 is keptoptional-
minnumberMin of this attribute.nil; nothing is defined0 is keptoptional-
typestringType of this attribute.empty string-optional-

AuthorScreen #

An author-defined information or picture list opened by name.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
backstringParameterless screen that cancel opens in this screen’s place (schema 10); empty closes the screen.empty string-optional-
entriesScreenEntry[]Selectable detail pages in authored order.empty list-optional-
guideScreenGuideSchema 10: first-visit walk-through of a full-screen surface, lines in the notification corner that light the places to press next; recorded with the gallery’s unlocks once finished and never shown again, in any later play (ADR 0055).nil; nothing is defined-optional-
homebooleanCancel opens the system menu over this screen instead of returning to the location (schema 10).false-optional-
kindstringBind entities, timeline, calendar, ensemble or islands planning data.empty string-optional-
paramsstring → stringRequired typed parameters for a plain authored list (schema 10); immutable arg fields are available in the title and entries.empty map-optional-
titlestringThe title, with text interpolation and translation.empty string-optional-
viewPlanningViewExplicit public value columns, seating and portrait bindings for planning views.empty (its fields take their defaults)-optional-

Beat #

One beat: say, chat, ask, or the channel ID of the other host of a duo with a line.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
askStreamAskA question the viewers answer.nil; nothing is defined-optional-
chatstring[]A viewer’s message, [name, text].empty list-optional-
sayStreamLine or stringA line of the host: the text, or {face, text}.nil; nothing is defined-optional-

BreedCmd #

Two owned monster instances and a selection of their skills to pass on.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
parentsstring[]Two distinct owned monster instance IDs.empty list-optional-
skillsstring[]Distinct skills known by either parent, up to breeding.skill_slots.empty list-optional-

BreedFamily #

A symmetric family combination whose child depends on the parents’ ranks.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
childrenstring[]Candidate enemy IDs; the highest rank no greater than the mean parent rank wins.empty list-optional-
parentsstring[]Two IDs from monster_families, in either order.empty list-optional-

BreedKeeper #

The ranch’s greeting: the speaker’s name and the line in the message window while the player chooses what to do. Both are translated by lang/.yaml.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
namestringThe speaker’s name over the line; none when omitted.empty string-optional-
textstringThe line shown; a neutral built-in line when omitted.empty string-optional-

BreedPair #

A symmetric specific-species recipe, tried before family rules.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
childstringThe resulting enemy species ID.empty string-optional-
min_levelintegerAn optional higher minimum level for both parents.00 is keptoptional-
min_plusintegerAn optional minimum of the parents’ combined plus values.00 is keptoptional-
parentsstring[]Two enemy species IDs, in either order.empty list-optional-

BreedStaging #

Rank thresholds for birth presentation; omitted values default to rare rank 4 and legendary rank 7.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
legend_rankintegerThe first child rank with the longest pause, gold and blue-grey rings and a low sound.00 is keptoptional-
rare_rankintegerThe first child rank with a longer pause before reveal, a gold ring and a slower afterglow.00 is keptoptional-

Breeding #

The monster breeding requirements and recipes.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
familiesBreedFamily[]Family recipes, used when no specific pair matches.empty list-optional-
keeperBreedKeeperWho greets the player in the ranch’s message window. Omission shows a neutral line under no name.empty (its fields take their defaults)-optional-
min_levelintegerThe minimum level of each parent; at least one.00 is keptoptional-
pairsBreedPair[]Specific species recipes; these win over family rules.empty list-optional-
skill_slotsintegerThe maximum number of distinct parental skills the child may inherit.00 is keptoptional-
stagingBreedStagingRank thresholds for the rare and legendary birth effects.empty (its fields take their defaults)-optional-

BurnupColors #

Colors of a burnup chart; unset colors keep the built-in look.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
gridcolor stringHorizontal grid lines.no color (the default of where it is drawn)-optional-
observedcolor stringObserved work line and points.no color (the default of where it is drawn)-optional-
plannedcolor stringPlanned work line.no color (the default of where it is drawn)-optional-
todaycolor stringCurrent date marker.no color (the default of where it is drawn)-optional-
totalcolor stringColor of the scope line, the total work in plan.no color (the default of where it is drawn)-optional-

BurnupView #

An islands chart of public scope, planned work and observed history. Old saves do not fabricate earlier observations.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
boundsinteger[]Optional workspace rectangle as x, y, width and height; minimum size is 120 by 48 logical pixels.empty list-optional-
colorsBurnupColorsSchema 10: optional line colors {planned, observed, total, today, grid}. Unset colors keep the built-in chart colors.nil; nothing is defined-optional-
compactbooleanDraw a small public progress strip with a condensed legend.false-optional-
deadlinestringCalendar end label, followed by the end date.empty string-optional-
observedstringObserved work legend.empty string-optional-
plannedexpressionOptional pure numeric expression evaluated with selected.date for cumulative planned work. Omission interpolates working days for each activity.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
planned_labelstringPlanned work legend.empty string-optional-
titlestringHeading above the work chart and its legend.empty string-optional-
todaystringCurrent date marker label.empty string-optional-
totalstringScope line legend.empty string-optional-
unitstringAuthored unit suffix for today’s planned and observed totals.empty string-optional-

Calendar #

Calendar definition for deterministic planning simulations.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
closedstring[]Closed of this calendar.empty list-optional-
endstringEnd of this calendar.empty string-optional-
looksstring → PhaseLookHow each phase looks (keys are phases, or closed for a closed day): a clock beside the date, a light washed over workspace surfaces, and a short turn card when play moves into it.empty map-optional-
phasesstring[]Phases of this calendar.empty list-optional-
startstringStart of this calendar.empty string-optional-
weekdays_offinteger[]Weekdays off of this calendar.empty list-optional-

CallCamera #

One participant’s camera view, on or off, until a line outside a call; no state changes.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
onbooleanTrue turns the camera view on, false off.false-optional-
whostringA planning entity or an actor in the call.empty string-optional-

CallColors #

Colors of a call surface; unset colors keep the built-in look.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
bodycolor stringBrowser body behind the call.no color (the default of where it is drawn)-optional-
controlcolor stringFill of the round controls.no color (the default of where it is drawn)-optional-
leavecolor stringFill of the leave control.no color (the default of where it is drawn)-optional-
speakingcolor stringRing, edge and level mark around the participant who speaks.no color (the default of where it is drawn)-optional-
tilecolor stringEmpty camera tile of a participant.no color (the default of where it is drawn)-optional-

CallControl #

A decorative round call control: a label, or a map naming its icon.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
colorcolor stringOptional fill of the round button; unset uses call.colors.control, or call.colors.leave for the leave icon.no color (the default of where it is drawn)-optional-
iconstringOne of mic, camera, share, hand, chat, leave or none. Empty takes the icon from the control’s place.empty string-optional-
labelstringDisplay-only label of the control.empty string-optional-

CallEach #

A bounded snapshot of IDs for repeated event calls (schema 10).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
inexpressionA pure list expression, such as entities or filter(activities, !it.cancelled). Mutually exclusive with items.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
itemsstring[]An explicit ordered ID list, including optional duplicates. At most 4096 items; an empty list performs no calls.empty list-optional-
paramstringThe callee ID or string parameter filled from each item; omit it from args.empty string-optional-

CallShare #

A shared screen on a call’s stage, as when a participant presents, until a line outside a call; no state changes.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
picturestringPath of the picture under assets/, drawn whole on the stage above the message window. Empty ends the sharing.empty string-optional-
whostringThe participant (a planning entity or an actor) who shares; the share shows only on a call they are in.empty string-optional-

CallViewCue #

A presentation-only change of the video call on screen.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
cameraCallCameraTurns one participant’s camera view on or off.nil; nothing is defined-optional-
shareCallSharePuts a shared screen (a picture) on the call’s stage in place of the speaker’s view.nil; nothing is defined-optional-

Campaign #

game.yaml’s campaign: a game of regions held by factions over turns (ADR 0030). Its state is in variables with generated names.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actionsexpressionAn expression for how many orders a turn has, worked out at the start of each turn. It may read only region, faction, campaign and generals. Default 1.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
calendarstringHow the turns are named: omitted (turn N) or week (a turn is a week of a 52-week year; campaign.week and campaign.year).empty string-optional-
clashClashHow a march is decided.empty (its fields take their defaults)-optional-
countstringHow a turn’s orders are counted: actions (the turn’s actions, each order spending its cost; the default) or orders (each order may be given per_turn times a turn).empty string-optional-
defeatDefeatWhat becomes of a general whose troops a march brings to 0. A general is never lost for good.empty (its fields take their defaults)-optional-
end_turnstringThe label of the menu entry that ends the turn. The engine’s words when omitted.empty string-optional-
end_turn_buttonEndTurnButtonA button at the bottom right of the map, over the generals, that ends the turn on a click or the E key (the pad’s left face button); it glows when no actions are left. Omitted: none.nil; nothing is defined-optional-
generalsstring → GeneralThe actors who lead the player’s marches, keyed by actor ID. A general serves once they have joined.empty map-optional-
headingstringThe turn’s part of the band over the campaign’s map, a text with {expressions}, such as “Year {campaign.year}”. With it the band leaves out the last turn. Omitted: the calendar’s words.empty string-optional-
labelsstring → stringThe names shown for the regions’ values in the region window, keyed by value name. A value without a label shows its name.empty map-optional-
locationstringThe place whose menu lists the orders and the end of the turn. Required.empty string-optional-
loseexpressionAn expression that ends the campaign lost. Default: the player’s faction does not hold its capital.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
loststringThe event run when the campaign is lost (or the last turn ends), before the game is over.empty string-optional-
on_turnstringThe event run at the start of each turn after the first.empty string-optional-
order_viewstringHow the orders of a region chosen on the map are offered: list (a choice of their labels, the default) or icons (a row of square buttons with the orders’ icons over the bottom of the map; left and right choose, OK gives the order, Cancel closes it).empty string-optional-
ordersstring → OrderWhat the player can do in a turn, keyed by order ID, listed in the written order.empty map-optional-
pin_end_turnbooleanKeep the end of the turn in the last row of the place’s list, below the rows that scroll, so it shows however long the list is, on every kind of place. On by default; false lists it where it falls.nil; nothing is defined-optional-
playerstringThe player’s faction, an ID of factions. Required.empty string-optional-
sortieSortieLookHow the sortie screen looks: a picture behind it, and its title, then shown in a window like the other windows. Omitted: a plain dark screen with an outlined title.nil; nothing is defined-optional-
turnsintegerThe last turn. Ending it without winning loses. 0 means no limit.00 is keptoptional-
winexpressionAn expression that ends the campaign won. Default: the player holds every region.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
wonstringThe event run when the campaign is won, before the game is cleared.empty string-optional-

Channel #

A streamer: an actor streaming from a room, with its episodes and its greetings.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringThe actor (actors) whose name, puppet and reaction book (reactions) the channel uses. It needs a puppet.empty string-optional-
bridgesstring[]Lines said between two episodes of a stream, one in turn (ADR 0052), such as a short break before the next topic; without them the next episode follows at once. No {fields}; each line may have a recorded voice like the others.empty list-optional-
colorcolor stringThe channel’s color: its name in the chat and its card in the lobby.no color (the default of where it is drawn)-optional-
episodesstring[]The episode files (Episode), under streams/ of the game (the files under data/ are data files), such as streams/<id>/001.yaml; gozen export copies them. A channel plays the next one the player has not seen.empty list-optional-
firststring[]Lines for a first-time viewer; one is said. {from} is the viewer’s name.empty list-optional-
frameStreamFrameThe part of the puppet shown.empty (its fields take their defaults)-optional-
greetstring[][]Lines said to a returning viewer, one list for each affection step from 0. {from} is the viewer’s name.empty list-optional-
guestbooleantrue for a streamer of no channel of its own, such as a visitor from another show: no stream, no card in the lobby, not listed offline; it streams only as the with of a duo, which unlocks with its host’s streams watched. It needs no room and has no episodes; its actor, puppet, color and voices folder are as a channel’s.false-optional-
idstringThe channel’s ID, unique, not say, chat, ask, text or face and without + (which names a duo). A duo’s episodes use it as the key of the other host’s lines, and an answer’s r as the key of a line a host says.empty string-optional-
roomstringThe background picture under assets/.empty string-optional-
stayedstring[]Lines for a viewer who watched to the end; one is said. {from} is the viewer’s name.empty list-optional-
streakstring[]Lines for a viewer who came three days in a row or more; one is said. {days} is the days and {from} the name.empty list-optional-
tagstringThe category shown under the name.empty string-optional-
taglinestringA line about the channel, shown in the lobby and under the stream.empty string-optional-
voiceStreamVoiceSpeech synthesis in a browser build.empty (its fields take their defaults)-optional-
voice_fallbackstringOptional fixed phrase with no fields, translated and recorded in the channel voice folder. Used when a filled line or a player tip quotation has no recording; captions keep the full text. Missing fallback recordings warn with GZN0119. Omitted or missing recordings follow missing_voice. Added to schema version 9; export candidates with gozen book –section voices –format json.empty string-optional-

ChromeStyle #

Title bar and browser decoration; unset colors keep the built-in look.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
barcolor stringTitle bar fill.no color (the default of where it is drawn)-optional-
buttonsstringDecorative window buttons as text. Empty hides them; omission keeps the minimize, maximize and close marks.nil; nothing is defined-optional-
fieldcolor stringBrowser tab and address field fill.no color (the default of where it is drawn)-optional-
framecolor stringOutline of the window.no color (the default of where it is drawn)-optional-
navstringBrowser back and forward marks as text. Empty hides them.nil; nothing is defined-optional-
textcolor stringTitle, address and button marks.no color (the default of where it is drawn)-optional-

Clash #

How a march of a (the side marching, with troops, might, faction, general, and the general’s level and stats such as atk) on the region b is decided. The march takes b when power is more than defense.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
armiesstring → string[]The soldiers of an army by kind (generals..army, enemies..army): each kind lists poses of one soldier, facing right (the foe side is turned to face left), which a clash shown as units lines up in staggered rows behind the front, one soldier for per_soldier troops. The soldiers lost fall from the back rows. With armies, soldiers is not read.empty map-optional-
backgroundsstring → stringThe pictures behind a clash shown as units, by the region’s terrain (field, town, castle or any word), files under assets/.empty map-optional-
capturenumberThe chance that a routed foe is caught in a clash shown as units, from 0 to 1. Default 0.2.nil; nothing is defined0 is keptoptional-
defenseexpressionThe strength of the region. Default b.troops * 1.25.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
garrisonnumberThe share of a general’s troops left in a region taken, from 0 to 1. Default 0.4. A faction’s march leaves all of them.nil; nothing is defined0 is keptoptional-
heldexpressionThe garrison of b left after holding. Default b.troops - power * 0.4.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
hitexpressionThe troops a unit’s strike takes in a clash shown as units: a strikes, b is struck (troops, max, might, hp, mhp, player, level and the stats). Default a.troops * 0.15 * (0.8 + rand() * 0.4).no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
layoutstringWhere a unit’s leader stands against its army in a clash shown with armies. below (the default): the armies above and a row of large cards, a bust of each leader, along the bottom; the rope of the troops is left out unless rope is true. front: a small card in front of each army, at the edge facing the foe.empty string-optional-
lostexpressionThe troops of a left after failing. Default a.troops * 0.5.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
max_soldiersintegerThe most soldiers one unit of an army shows in a clash shown with armies, from 1 to 12. Default 4. They fall from the back as the troops fall.00 is keptoptional-
per_soldierintegerThe troops one soldier stands for in a clash shown as units. Default 50 for the ranks; with armies, the troops a unit marches with divided by max_soldiers, and a value here wins.00 is keptoptional-
powerexpressionThe strength of the march. Default a.troops * (0.8 + rand() * 0.4).no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
ropebooleanfalse leaves out the rope of the two sides’ troops over a clash shown as units, so the soldiers alone tell them. Default true, but false with armies laid out below.nil; nothing is defined-optional-
roundsintegerThe most rounds of a clash shown as units; when they run out, the region holds (a draw). Default 5, at most 100.00 is keptoptional-
skillsstring → ClashSkillThe skills of a clash shown as units, by ID: a unit uses one when it is charged (campaign.generals..skills, and foes for enemies).empty map-optional-
soldiersstring → stringThe pictures of one soldier of the player’s side (player, facing right) and of the foes’ (foe, facing left), lined up behind each leader in a clash shown as units.empty map-optional-
tacticsstring → ClashTacticThe tactics of a clash shown as units, by ID: how a unit picks the foe it strikes, chosen for each general on the sortie screen. Without them the engine’s front, weakest, strongest, leader and guard.empty map-optional-
unitsintegerThe most units a side has in a clash shown as units, 1 to 4 (4 when omitted); 1 makes it a duel. It also caps the generals of an order.00 is keptoptional-
wonexpressionThe troops of a left after taking b. Default a.troops * (1 - 0.5 * defense / power).no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

ClashSkill #

A skill of a clash shown as units: charged after charge rounds, it is used instead of the next strike.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
allbooleanIf true, it strikes every foe in front instead of the one the tactic picks.false-optional-
chargeintegerThe rounds it takes to charge. Default 2.00 is keptoptional-
cutinbooleanIf true, the user’s picture crosses the screen with the skill’s name before it strikes (a general’s cut-in picture, else the face).false-optional-
foesstring[]The enemies who use it, IDs of enemies (generals list theirs in campaign.generals..skills).empty list-optional-
healexpressionThe troops it gives back to the unit (a the unit), at most what it lost.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
labelstringThe name shown across the unit’s card when it is used.empty string-optional-
powerexpressionThe troops it takes from each foe struck: a strikes, b is struck. Default twice clash.hit.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

ClashTactic #

A tactic of a clash shown as units: how a unit picks the foe it strikes and how much it deals and takes.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
allbooleanIf true, it looks at every foe standing, not only those in front.false-optional-
byexpressionThe number pick compares (t the foe, a the unit striking), such as t.troops or t.hp.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
dealnumberThe share of the troops it takes that the unit deals, 1 when omitted (0.6 deals less).00 is keptoptional-
labelstringThe name shown on the sortie screen.empty string-optional-
pickstringleast or most by by, or random (the default).empty string-optional-
takenumberThe share of the troops struck that the unit loses, 1 when omitted (0.6 loses less).00 is keptoptional-
whereexpressionWhich foes it may strike (t the foe, a the unit striking); all of them when none holds.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

CrowdLines #

What the bots chat, by the hour of the player’s clock.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
anystring[]Lines for any hour.empty list-optional-
eveningstring[]Lines also chatted from 17 to 5 o’clock.empty list-optional-
morningstring[]Lines also chatted from 5 to 11 o’clock.empty list-optional-

Defeat #

What becomes of a general beaten to no troops.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
outintegerThe turns the general is away for (0: stays, and only needs troops again).00 is keptoptional-

Duo #

Episodes two channels (or a channel and a guest) stream together, once the duo is unlocked.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
episodesstring[]The episode files, relative to the game.empty list-optional-
hoststringThe channel that hosts it.empty string-optional-
unlocknumberThe minutes each host’s own streams must have been watched (a guest’s host’s alone) before the duo streams, 0 to 6000; 30 when left out. Until then the duo never streams.30 minutes0 is keptoptional-
withstringThe other channel, or a guest (a guest is no host).empty string-optional-

EndTurnButton #

The button on a campaign’s map that ends the turn (campaign.end_turn_button).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
iconstringIts picture under assets/, beside the end of the turn’s label. Omitted: the label alone.empty string-optional-

EnsembleCall #

Desktop browser call presentation with animated camera portraits.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
addressstringDisplay-only browser address.empty string-optional-
blinkstring → stringBase portrait paths mapped to same-canvas closed-eye variants.empty map-optional-
captionsstringWhere the call’s lines show: omitted, in captions over the speaker view; window, in the novel message window under the call, the call fitted above it with its controls under the messages; overlay, in the novel message window laid over the lower part of a full call (layout: full), its top and width those of the plain window, reaching the screen’s lower edge.empty string-optional-
colorsCallColorsOptional call colors {body, tile, speaking, control, leave}. Unset colors keep the built-in look.nil; nothing is defined-optional-
controlsCallControl or string[]Display-only round call controls, at most six. Each is a label, or {label, icon, color} with icon one of mic, camera, share, hand, chat, leave or none. A bare label takes its icon from its place (mic, camera, share, hand, chat, leave) and the last one is filled as the way out.empty list-optional-
layoutstringfull fills the screen with the call, the browser maximized: the stage runs to the screen’s lower edge under the message window and the people on camera are framed above the window’s top; the side column and the controls stand above it. Needs captions: overlay. Omitted, the browser window stands on the wallpaper.empty string-optional-
mouthstring → stringBase portrait paths mapped to same-canvas open-mouth variants.empty map-optional-
othersstringWhere the participants not on the stage stand: omitted, in a strip under the stage; side, in a list of round faces and names in the side column in place of the chat transcript (a join or a leave shows as a face coming or going; an authored chat.reaction shows under the name), the stage taking the strip’s room. A call of two (one participant besides the self view) folds the column for every line: the stage widens to its edge but for a slim column of the controls, and while the caller takes the stage (self_stage) the participant stands in the small view.empty string-optional-
others_titlestringOptional heading of the side list (others side), interpolated; empty shows none.empty string-optional-
selfstringOptional small self view in the lower right of the speaker view: a planning entity, a guest actor or a picture path. That participant leaves the strip and the stage. Empty shows none.empty string-optional-
self_backdropstringOptional picture behind the self view when self is an actor who is not a guest or a picture, filling the view as an entity’s backdrop does; small or on the stage. Omitted keeps the plain tile. Needs self; an entity’s self view takes the entity’s backdrop and a guest’s takes guest_backdrops instead.empty string-optional-
self_labelstringOptional name under the self view; empty uses the entity’s or actor’s name.empty string-optional-
self_stagebooleanPut the self view on the stage, large, while the caller speaks (a line of the call whose speaker is not one of its participants, or the participant self); every participant then stands in the strip. Off by default: the stage keeps whoever spoke last and the small self view shows that the caller speaks. Needs self.false-optional-
stillbooleanKeep the people on camera from swaying and bobbing, so the speaker’s face stays where it is framed; blinks and mouths still move. Off by default.false-optional-
window_opacitynumberOpacity from 0 to 1 of the message window laid over the call (captions: overlay), over ui.material.opacities.message; 0 or omitted keeps it.00 is keptoptional-

EnsembleChat #

Read-only meeting chat with presence notices and authored public participant responses. Spoken dialogue is not copied into chat.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
camera_offstringNotice when a camera is disabled.empty string-optional-
camera_onstringNotice when a camera is enabled.empty string-optional-
joinedstringNotice after a participant joins.empty string-optional-
leftstringNotice after a participant leaves.empty string-optional-
reactionstringPublic entity observation containing a short response. Empty means silence.empty string-optional-
titlestringHeading of the transcript column.empty string-optional-

Entity #

Entity definition for deterministic planning simulations.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringActor of this entity.empty string-optional-
attributesstring → boolean, number, or string literalAttributes of this entity.empty map-optional-
datastring → boolean, number, or string literalRead-only finite scalars or homogeneous scalar lists, accessed through entity expressions; not saved or writable by plan operations.empty map-optional-
namestringName of this entity.empty string-optional-
observationsstring → expressionObservations of this entity.empty map-optional-
tagsstring[]Tags of this entity.empty list-optional-

EntryBust #

A head-to-chest crop of a standing picture in the left part of a bounded entry, placed by the picture’s face box.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
barebooleanDraw the picture straight on the screen, its transparent background showing what is behind: no card and no backing under it.false-optional-
facenumberHow tall the face is, as a fraction of the crop’s height (0 is .3).00 is keptoptional-
fitstringcontain shows the whole picture centered in the crop area instead of framing a face (icons and marks).empty string-optional-
heightnumberAbove zero, the crop goes across the top of the entry instead of at its left: the full width and this fraction of the height, with the label and text under it.00 is keptoptional-
picturestringInterpolated path of the standing picture.empty string-optional-
topnumberWhere the face’s top sits, as a fraction of the crop’s height (0 is .12).00 is keptoptional-
widthnumberShare of the entry’s width the crop takes (0 is .4).00 is keptoptional-

EntryMeter #

The ticket card’s progress bar along the bottom of a bounded entry.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
behindexpressionPure condition coloring the bar as late.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
plannedexpressionPure fraction from 0 to 1 of the work expected by now, drawn as a mark on the bar.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
progressexpressionPure fraction from 0 to 1 of the work reported done, drawn as the filled bar.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

EntryTicket #

The face of a work ticket card on a workspace.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
afterstring[]Interpolated names of the tickets this one waits for; a visible ticket card with the same label is joined by a line. Empty names are dropped.empty list-optional-
behindexpressionPure condition coloring the card as late.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
blockedexpressionPure condition marking the card as waiting for its prerequisites.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
duestringInterpolated due date or deadline shown under the holder’s face.empty string-optional-
plannedexpressionPure fraction from 0 to 1 of the work expected by now, drawn as a mark on the bar.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
progressexpressionPure fraction from 0 to 1 of the work reported done, drawn as the filled bar.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
statestringInterpolated short state shown as a chip, such as open or done.empty string-optional-

Episode #

One stream: its title, the lines of its lobby card, and its parts. An episode shorter than 10 minutes is warned of.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
familybooleantrue for an episode a family is in (a child among the guests): while it plays, a comment or a tip gives the reaction book value.family 1 (0 on other episodes), so its rules can keep to lines fit for it, as in when: value.family == 0. false by default.false-optional-
lobbystring[]Short lines under the show’s lobby card, shown in turn. Without them the card shows the channel’s tagline, or its tag; it never shows the title.empty list-optional-
partsBeat[][]The parts, each a list of beats played in order.empty list-optional-
titlestringThe title shown under the stream.empty string-optional-

EventCall #

A named event invocation; a literal event ID remains shorthand for a call without arguments.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
argsstring → expressionRequired parameter values as pure expressions, evaluated once in the caller scope, in sorted parameter-name order.empty map-optional-
eachCallEachRepeat over frozen IDs. Other arguments are evaluated before each call; at most 65536 items across nested calls per execution.nil; nothing is defined-optional-
ensemblestringOptional ensemble screen (a call) that the lines of the called event, and of the events it calls in turn, show over when they name no ensemble of their own (schema 10), so one shared event of lines can be said in whichever call calls it. Lines after the call returns are not affected.empty string-optional-
eventstringThe literal event ID. Required in the mapping form.empty string-optional-

Faction #

A side of a campaign. One is the player’s; the others move by their ai rules at the end of each turn.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
aiFactionRule[]The rules the faction follows at the end of each turn, each in its order. The player’s faction’s rules are used only by gozen sim campaign –as ai.empty list-optional-
capitalstringA region the faction holds at the start. Losing it is the player’s default defeat.empty string-optional-
colorcolor stringThe faction’s color, for the marks of its regions.no color (the default of where it is drawn)-optional-
generalsstring[]The enemies who lead the faction’s marches when the campaign shows marches as clashes of units: a march takes the strongest (by atk), up to clash.units, and is fought as a clash. IDs of enemies.empty list-optional-
namestringThe name shown. The ID when omitted.empty string-optional-

FactionRule #

One rule of a faction’s turn: draft troops into every region it holds, or march once along a border.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
byexpressionAn expression over s (the region marching) and t (the region marched on) that pick: min or max compares.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
draftexpressionAn expression for the troops each region of the faction gains, with t the region.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
keepnumberThe least garrison a region must have to march from it.00 is keptoptional-
marchbooleanIf true, the rule marches once along a border where where holds.false-optional-
pickstringWhich march to take: first (in the written order of the regions, the default), min, max or random.empty string-optional-
sendnumberThe share of the garrison that marches, from 0 to 1. Default 0.6.00 is keptoptional-
whenexpressionAn expression that must hold for the rule to run.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
whereexpressionAn expression over s (a region of the faction) and t (a region it borders, not its own) that must hold for the march.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Flow #

Schema 10: an order of parameterless full-screen surfaces with a step band at the top and a next action at the bottom right.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
nextstringInterpolated label of the action that finishes a step (default: the built-in Next ›).empty string-optional-
restartexpressionPure value; when it differs from the value the progress was made under, the flow starts again from the first step.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
skipexpressionPure condition that lets every step open while it holds.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
stepsFlowStep[]Two to ten steps; each screen is a step of one flow only.empty list-optional-

FlowStep #

One step of a flow.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
doneexpressionPure condition that permanently finishes the step for the current restart value when it holds, as its next action would: a choice made on a screen the step opens.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
enterstringParameterless event run over the step’s screen the first time it shows under each restart value (also when skip let it open).empty string-optional-
holdbooleanMake done the only way to finish the step: no next action; once finished, it and the steps before it do not open again under the same restart value, and a step screen that would no longer open as itself gives way to the one that opens after an action.false-optional-
labelstringInterpolated label in the step band.empty string-optional-
screenstringThe parameterless full-screen surface of the step.empty string-optional-
whenexpressionPure condition keeping the step in the flow while it holds; left out, the step is passed over as if finished and not shown in the step band (not on the first step; a last step left out lets the day end on another, such as a holiday).no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

General #

An actor’s place in a campaign.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
armystringThe kind of army (a key of campaign.clash.armies) their unit is shown as in a clash shown as units: men for a man, women for a woman.empty string-optional-
mightnumberA number read as a.might in the clash.00 is keptoptional-
skillsstring[]The skills they use in a clash shown as units, IDs of campaign.clash.skills.empty list-optional-
tacticstringThe tactic the sortie screen picks for them first, an ID of campaign.clash.tactics (or of the engine’s).empty string-optional-
troopsintegerThe troops the general leads at the start.00 is keptoptional-

GuideStep #

One line of a screen guide.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
focusstring[]Marks of the screen’s bounded entries, or next for the flow’s next action, lit while the line shows; every other place is refused. Without focus the line itself is pressed (anywhere, or OK) to go on.empty list-optional-
textstringInterpolated line. Speak as the character thinking about the work, not as a manual.empty string-optional-
untilexpressionPure condition that ends a line with focus when it holds; the lit places can be used any number of times before. Without it, the line goes on when a lit place runs its action.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
whostringActor ID of the speaker, whose square face and name head the line.empty string-optional-

HPImage #

A battle picture selected when the unit’s HP ratio falls below a threshold.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
belownumberExclusive HP ratio threshold between zero and one. Write rows in descending order.00 is keptoptional-
facestringThe actor face name in its faces directory; use this only for actors.empty string-optional-
filestringThe enemy picture under assets/; use this only for enemies.empty string-optional-

HPTrigger #

An enemy form change triggered immediately after damage crosses an HP ratio.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
belownumberExclusive HP ratio threshold between zero and one, in descending order.00 is keptoptional-
clearbooleanClear states and guard on transformation when true.false-optional-
hpexpressionNew HP: ratio (default), full, or an expression evaluated before the form changes.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
transformstringThe enemy ID of the new form.empty string-optional-

IDRef #

A literal ID or an explicit pure expression resolving to an existing typed target.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
exprexpressionSchema 10: a pure expression returning an entity or activity ID for the owning plan field. Empty and unknown IDs are rejected before mutation.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Ledger #

Ledger definition for deterministic planning simulations.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
retainintegerRetain of this ledger.00 is keptoptional-

LightStyle #

Paper palette of view.light surfaces; unset colors keep the built-in look.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
accentcolor stringColor of focused controls and highlighted values.no color (the default of where it is drawn)-optional-
dimcolor stringSecondary text color.no color (the default of where it is drawn)-optional-
papercolor stringBackground color of the whole screen behind the panels.no color (the default of where it is drawn)-optional-
textcolor stringColor of the ordinary text on the panels.no color (the default of where it is drawn)-optional-
windowcolor stringFill color of the panels and the authored controls.no color (the default of where it is drawn)-optional-

MapAdvice #

One selected-point advice variant; the first whose when holds is shown.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
headingstringHeading template; the point label is used when omitted.empty string-optional-
portraitstringFace picture under assets/, overriding the panel default.empty string-optional-
textstringBody template, wrapped within the fixed panel.empty string-optional-
whenexpressionNormal field expression. Omitted always holds. Preview evaluation does not consume gameplay randomness.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

MaterialStyle #

Reusable frosted panel finish for planning and dialogue.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
blurnumberBlur footprint in logical pixels, from 0 to 64.14v1 keeps 0; v0 has per-field rulesoptional-
bordernumberFine illuminated edge strength from 0 to 1.0.45v1 keeps 0; v0 has per-field rulesoptional-
kindstringMica uses at least 90 percent tint, acrylic at least 72 percent, glass uses authored opacity and edge refraction, opaque uses tint only.empty string-optional-
opacitiesstring → numberSchema 10: opacity for one role of panel (base, card, control, chart, message for the novel message window and its band, choice for the novel window’s choices), each in [0,1]. A role left out uses opacity. Higher is a deeper tint over the same finish.empty map-optional-
opacitynumberTint strength from 0 to 1.0.78v1 keeps 0; v0 has per-field rulesoptional-
refractionnumberAdditional glass edge displacement in logical pixels, from 0 to 32.00 is keptoptional-
shadownumberSoft outer shadow strength from 0 to 1.0.65v1 keeps 0; v0 has per-field rulesoptional-
surfacesstring → stringOptional base, card, control and chart material kind overrides. An omitted chart override inherits base.empty map-optional-
wallpapercolor string[]Optional three colors for a cached soft gradient on light planning surfaces.empty list-optional-
wallpaper_strengthnumberStrength of the procedural wallpaper color fields, from 0 to 1.00 is keptoptional-

Merge #

A skill effect that combines living enemies into one form.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
countintegerHow many living members must join, including the user. At least two.00 is keptoptional-
fromstring[]Enemy IDs allowed to join the merge.empty list-optional-
hpstringMerged HP: sum (default), average ratio, or full.empty string-optional-
intostringThe enemy ID of the merged form.empty string-optional-

MessageCue #

A chat message queued into the inbox: a notification in the top-right corner of a full-screen surface, opened into a bubble with its decision under it.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
eventstringThe parameterless event run under the bubble when the message is opened; it asks for the decision (a choice). Required.empty string-optional-
tagstringShort interpolated mark on the notification and the bubble, such as DM for a one-to-one message.empty string-optional-
textstringInterpolated text; the first line shows in the notification.empty string-optional-
whoIDRef or stringThe speaker: an actor, or an actor expression.empty (its fields take their defaults)-optional-

NovelWindow #

Where the novel message window stands, in fractions of the screen (schema_version 10); 0 keeps the default of each.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
bottomnumberThe room left under the window and its buttons, as a fraction of the screen’s height, up to 0.4; 0 leaves none, or 8 pixels with ui.material.00 is keptoptional-
widthnumberThe window’s width as a fraction of the screen’s width, from 0.3 to 1; 0 keeps it across the screen, or inside 104 pixels each side with ui.material.00 is keptoptional-
xnumberThe window’s left edge as a fraction of the screen’s width; 0 centers it. It needs width.00 is keptoptional-

Order #

One of the player’s orders in a campaign. It costs actions, may need a general and a target region, and runs its do with them bound as general and target.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
costintegerThe actions it takes. Default 1.nil; nothing is defined0 is keptoptional-
doCommand[]The commands run after the march (if any), with general and target bound.empty list-optional-
fightstringclash_view to decide the march by a clash of units shown on its own screen (the generals against the members of the target’s defend troop, at most four a side), or battle to decide it by the game’s battle: the general alone against the target’s defend troop. A win takes the region with the share of the troops of the HP left; a loss leaves the clash’s lost. Omitted: by the numbers of clash.empty string-optional-
generalstringWho leads it: ready (joined, has not marched this turn, has troops), any (joined), or omitted for none.empty string-optional-
generalsintegerHow many generals may march together (1 when omitted). After the first, the order asks who else goes, until March now is chosen or all are taken. A clash shown as units takes clash.units of them at most; fight: battle is one general’s, so generals stays 1.00 is keptoptional-
groupstringThe heading the order is listed under in the place’s list, together with the place’s actions of the same group. Omitted: no heading.empty string-optional-
iconstringThe order’s picture under assets/ in the row of icons (campaign.order_view: icons). Omitted: the label in a square.empty string-optional-
labelstringThe text shown in the menu.empty string-optional-
marchbooleanIf true, the general’s troops march on the target before do (see clash).false-optional-
on_drawCommand[]Commands run after a march whose rounds ran out (a clash shown as units), before do: a general’s word on it.empty list-optional-
on_loseCommand[]Commands run after a march that failed, before do.empty list-optional-
on_winCommand[]Commands run after a march that took the region, before do.empty list-optional-
per_turnintegerHow many times a turn the order may be given when campaign.count is orders (1 when omitted).00 is keptoptional-
targetstringThe region it is given: border (not the player’s, next to one of the player’s), own, any, or omitted for none.empty string-optional-
until_takenbooleanIf true, the march may be given again and again in a turn until a region is taken (each general still marches once).false-optional-
whenexpressionAn expression that must hold for the order to be listed.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
whereexpressionAn expression over t (a region) that narrows the target.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

OrderCmd #

The order command: the ID of an order of the campaign, and the general and the target region when they are not to be asked.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
generalstringThe general who leads it, an ID of campaign.generals.empty string-optional-
idstringThe ID of the order in campaign.orders.empty string-optional-
tacticsstring → stringThe tactics of the generals marching, by general (IDs of campaign.clash.tactics); each general’s own when missing.empty map-optional-
targetstringThe target region, an ID of regions.empty string-optional-
withstring[]The generals who march with general, IDs of campaign.generals (an order whose generals is above 1).empty list-optional-

PhaseLook #

How one calendar phase looks, so the passing of time is seen rather than read.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
cardbooleanfalse shows no turn card when play moves into the phase.nil; nothing is defined-optional-
colorcolor stringLight of the phase as #rrggbb: the mark before the date, the wash and the card.no color (the default of where it is drawn)-optional-
labelstringName of the phase on its turn card; omitted uses a view’s phase label.empty string-optional-
notestringInterpolated line under the clock on the turn card.empty string-optional-
timestringShort clock text shown after the date, such as 18:30 (at most 12 characters).empty string-optional-
washnumberHow strongly workspace surfaces are covered with the light, 0 through 0.8.00 is keptoptional-

PhoneApp #

One local app selecting a registered game and allowed release versions.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
bundled_versionstringExact version of the included ZIP, allowed by version. Required for bundled apps when version is a range; forbidden for optional apps.empty string-optional-
idstringUnique lowercase local app ID, used by phone.game.empty string-optional-
installstringbundled or optional. Optional packages download only after an explicit player action.empty string-optional-
packagestringNamespaced registry package ID, owner/name.empty string-optional-
pathstringSafe relative ZIP path for a bundled game. Not accepted for optional apps.empty string-optional-
versionstringExact stable version or bounded range such as >=1.0.0 <2.0.0.empty string-optional-
whenexpressionCondition controlling this app’s availability in the phone.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

PhoneApps #

Host declarations for games offered by the phone. Loading does not download packages.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
appsPhoneApp[]Games selected by the host author; registry additions do not add apps here.empty list-optional-
catalogstringSafe relative path to the pinned catalog snapshot.empty string-optional-
catalog_public_keystringPinned base64 Ed25519 public key (32 bytes). Signed refresh requires both catalog URLs and this key.empty string-optional-
catalog_sha256stringExpected SHA-256 of the catalog snapshot, as 64 hexadecimal digits.empty string-optional-
catalog_signature_urlstringHTTPS URL of the detached signature for catalog_url. Required together with the public key and catalog URL.empty string-optional-
catalog_urlstringOptional HTTPS URL for explicit signed catalog refresh. Requires catalog_signature_url and catalog_public_key; catalog_sha256 still pins the local initial snapshot.empty string-optional-

PhoneCue #

A phone over the scene; the event waits until it is put down (a banner waits when var is set).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
appstringchat, feed, video, page, home, contacts, lock, banner, game or store; names the view the phone shows.empty string-optional-
autobooleanTrue brings the lock screen’s notices by themselves, one every second and a half.false-optional-
browsebooleanTrue makes a feed only looked at: a tap or a click likes no post.false-optional-
colorstringA page’s app bar and buttons color, #rrggbb.empty string-optional-
datestringInterpolated date under the lock screen’s clock.empty string-optional-
gamestringLocal phone app ID to launch. Required for app game; other apps do not accept it.empty string-optional-
historybooleanTrue displays authored chat messages as a scrollable history. Visibility is evaluated when opened; no dynamic transcript is stored.false-optional-
holdstringportrait (the default) or landscape: on its side, the phone comes up upright and turns a quarter.empty string-optional-
messagesPhoneMessage[]The chat’s messages, the first shown when the phone comes up and each press bringing the next.empty list-optional-
noticesPhoneNotice[]The lock screen’s notices, arriving one by one, or the banners shown at the top of the screen.empty list-optional-
postsPhonePost[]The feed’s posts, stacked top to bottom and scrolled.empty list-optional-
repliesPhoneRow[]Fixed chat reply buttons with optional id, set and when. Explicit selection sends one reply; Cancel never sends. Requires app chat and history: true.empty list-optional-
rowsPhoneRow[]Page rows, home app buttons with optional item icons, or contact items with optional action buttons.empty list-optional-
scrollstringHow a feed moves: down (the default), a column scrolled up and down, or across, a post a screen swiped sideways.empty string-optional-
timestringInterpolated clock of the lock screen (the phone’s clock when empty).empty string-optional-
timeoutnumberSeconds after the entrance without a chosen outcome, for lock, page or banner. Requires var; zero disables it. Input wins ties; scrolling does not extend it.00 is keptoptional-
timeout_resultstringValue stored in var when timeout expires; default expired. Requires a positive timeout.empty string-optional-
titlestringInterpolated header of the app (a page’s app bar).empty string-optional-
urlstringInterpolated address shown in a page’s browser bar, instead of a title.empty string-optional-
varstringA var (var.x) that receives what the phone was put down with: a page button’s id or label, answer, decline or missed for a call, open/dismiss for a result banner, or timeout_result on expiry. A feed has none: its posts keep their likes with set.empty string-optional-
videoPhoneVideoThe video app’s clip.nil; nothing is defined-optional-

PhoneItem #

A row of a list on a page.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
iconstringPath of the item’s round picture under assets/.empty string-optional-
textstringInterpolated text under the title.empty string-optional-
titlestringInterpolated title of the list row, such as a payee.empty string-optional-
valuestringInterpolated value on the right, such as a sum or a time.empty string-optional-

PhoneMessage #

One bubble of a chat: exactly one of text, picture and video, or only a day’s separator.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
daystringInterpolated day’s separator over the message, such as Yesterday; a message of only a day is the separator alone.empty string-optional-
fromstringInterpolated name of the sender, over the bubble.empty string-optional-
iconstringPath of the sender’s round picture under assets/.empty string-optional-
minebooleanTrue puts the bubble on the right, as sent by the phone’s owner; it comes without typing dots.false-optional-
picturestringPath of a picture under assets/ sent in the chat, at its own shape; a press on the newest one, or a click on any, opens it over the screen.empty string-optional-
readbooleanTrue marks the owner’s message as read.false-optional-
textstringInterpolated text of the bubble.empty string-optional-
timestringInterpolated time shown small beside the bubble, such as 9:41.empty string-optional-
videoPhoneVideoA clip sent in the chat; a press on it while it is the newest turns the phone on its side and plays it.nil; nothing is defined-optional-
whenexpressionCondition evaluated when the phone opens; false hides this authored message.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

PhoneNotice #

A notification on the lock screen or a banner.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
appstringInterpolated short name of the app.empty string-optional-
callbooleanTrue makes it an incoming call on the lock screen; OK answers and Cancel declines (a next notice rings again).false-optional-
eventstringThe parameterless event a click on the banner opens, after the event running.empty string-optional-
iconstringPath of the app’s picture under assets/.empty string-optional-
missedstring → expressionAssignments made when the call rings out (needs ring).empty map-optional-
ringnumberSeconds a call rings unanswered before it stops and puts the phone down with the result missed; 0 (the default) rings until it is answered or declined.00 is keptoptional-
setstring → expressionAssignments made when the call is answered.empty map-optional-
textstringInterpolated text of the notice, under its title.empty string-optional-
titlestringInterpolated title (a call’s caller).empty string-optional-

PhonePost #

One post of a feed: a picture, a video, or only text (a timeline’s card).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
iconstringPath of the poster’s round picture under assets/.empty string-optional-
likesintegerNumber of likes; a click on the post adds the player’s.00 is keptoptional-
picturestringPath of the post’s picture under assets/; a tall picture is cropped from its top.empty string-optional-
repliesintegerNumber of replies, next to the likes.00 is keptoptional-
repostsintegerNumber of reposts, next to the likes.00 is keptoptional-
setstring → expressionAssignments made when the phone is put down with the post liked (a like taken back is not kept), written as the set command’s; not on a feed with browse: true, and on at most 31 posts of a feed.empty map-optional-
textstringInterpolated caption under the picture, after the poster’s name.empty string-optional-
timestringInterpolated age of the post beside the poster’s name, such as 2h or Yesterday.empty string-optional-
videoPhoneVideoA clip playing in the post’s place, looping, instead of a picture.nil; nothing is defined-optional-
whenexpressionCondition evaluated when the phone opens; false hides this authored post and prevents its like assignments.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
whostringInterpolated name of who posted it.empty string-optional-

PhoneRow #

A page row, home app, contact or fixed chat reply. Home allows button plus item; contacts allows item plus button.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
boldbooleanTrue draws the text bold.false-optional-
buttonstringInterpolated label of a button; a tap on it, or OK on it after the keys moved to it, puts the phone down. With an item, or a page’s picture, the item or the picture itself is tapped and the label names it.empty string-optional-
captionstringInterpolated line under the picture or the QR code.empty string-optional-
columnsintegerPictures a line in the grid: 2 or 3 (0 is 3).00 is keptoptional-
eventstringParameterless event opened by a home or contacts button. Returning from it redisplays the parent phone. Requires button.empty string-optionalevents (parameterless)
idstringWhat the phone’s var receives for the button (its label when empty).empty string-optional-
itemPhoneItemA list row: icon, title, text and a value on the right.nil; nothing is defined-optional-
labelstringInterpolated short label on a locked picture, such as Supporters only.empty string-optional-
lockedexpressionA condition (or true) that, holding when the phone comes up, shows the picture or the grid darkened with a lock.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
picturestringPath of a picture under assets/, shown whole in its own shape.empty string-optional-
picturesstring[]Paths of pictures under assets/ in a grid.empty list-optional-
qrstringInterpolated text drawn as a QR code (a link, a contact), black on white and crisp, with the caption under it.empty string-optional-
setstring → expressionAssignments made when the button is pressed, written as the set command’s.empty map-optional-
sizestringlarge or small text (the default is between).empty string-optional-
textstringInterpolated paragraphs of the row, wrapped to the page’s width.empty string-optional-
whenexpressionCondition evaluated when opened; false hides this row or reply and prevents its assignments or event.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

PhoneVideo #

A clip on the phone: footage (frames) or a picture pushed in slowly, with an optional puppet in front.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
bouncenumber[]Seconds into the clip at which the puppet jiggles.empty list-optional-
fadenumberSeconds at the end of each frame over which the next fades in (0 to a frame’s length).00 is keptoptional-
fpsnumberFrames shown a second (0 is 12).00 is keptoptional-
framesstring[]Pictures under assets/ played in order as footage (a pattern such as clips/battle/*.jpg stands for the files it matches, sorted); a feed’s post loops them, otherwise the clip stops on the last.empty list-optional-
panbooleanTrue pushes in slowly on each frame, as on a single picture.false-optional-
picturestringPath of the picture under assets/ that fills the frame; with frames, the poster drawn behind them.empty string-optional-
puppetstringPath of a puppet file under assets/; it breathes and sways as on the stage.empty string-optional-
secondsnumberLength of the clip on the seek bar (0 is the frames’ length, or 30).00 is keptoptional-
textstringInterpolated title over the player.empty string-optional-
zoomnumberHow many times the frame’s height the puppet is drawn (0 is 1.5, its upper body).00 is keptoptional-

PlanCommand #

PlanCommand definition for deterministic planning simulations.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
activityIDRef or stringActivity of this plancommand.empty (its fields take their defaults)-optional-
argsstring → expressionExpressions bound to the rule parameters for this invocation.empty map-optional-
attributestringAttribute of this plancommand.empty string-optional-
entityIDRef or stringEntity of this plancommand.empty (its fields take their defaults)-optional-
ledgerstringLedger of this plancommand.empty string-optional-
opstringOp of this plancommand.empty string-optional-
periodstringPeriod of this plancommand.empty string-optional-
policystringPolicy ID for selecting one event from observations.empty string-optional-
rulestringReusable rule ID for the rule operation.empty string-optional-
tagstringTag of this plancommand.empty string-optional-
valueexpressionValue of this plancommand.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
whereexpressionWhere of this plancommand.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

PlanRule #

A sequence of at most 256 immediate operations; nested rule calls are rejected.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
doPlanCommand[]Operations evaluated in authored order, atomically.empty list-optional-
paramsstring[]Unique scalar argument names available as arg.NAME.empty list-optional-

Planning #

Planning definition for deterministic planning simulations.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
activitiesstring → ActivityActivities of this planning.empty map-optional-
activity_attributesstring → AttributeTyped activity-local scalar defaults; plan set writes saved overrides.empty map-optional-
attributesstring → AttributeAttributes of this planning.empty map-optional-
calendarCalendarCalendar of this planning.empty (its fields take their defaults)-optional-
entitiesstring → EntityEntities of this planning.empty map-optional-
ledgersstring → LedgerLedgers of this planning.empty map-optional-
policiesstring → PolicyRule[]Ordered choices of events, evaluated from player observations.empty map-optional-
rulesstring → PlanRuleBounded reusable operation sequences with scalar parameters.empty map-optional-
scheduleReservation[]Schedule of this planning.empty list-optional-
seed_xorintegerOptional unsigned XOR constant deriving the second PCG seed from an explicit nonzero run seed; omitted retains the standard stream.nil; nothing is defined0 is keptoptional-

PlanningField #

A labeled public value with an optional numeric gauge.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
critical_rationumberFraction of the limit at which the gauge turns red; zero disables this threshold.00 is keptoptional-
keystringAttribute or observation name; hidden attributes are rejected. Schema-10 plain portrait lists also accept a text template; missing or hidden resolved values are omitted.empty string-optional-
labelstringThe authored label displayed above this public value column; plain portrait lists support interpolation.empty string-optional-
marksnumber[]Threshold positions in gauge units.empty list-optional-
maximumnumberPositive gauge maximum, or zero for text only.00 is keptoptional-
maximum_keystringPublic per-resident numeric limit, overriding maximum; zero disables the gauge.empty string-optional-
text_keystringPublic formatted text replacing the numeric value label on resident cards.empty string-optional-
warning_keystringPublic numeric value at which the gauge turns amber.empty string-optional-

PlanningView #

Explicit player-facing columns, seating and observed image bindings for planning screens.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
backdropstringPublic value containing a participant background asset path.empty string-optional-
backgroundstringOptional decorative background image path.empty string-optional-
badgestringPublic value shown instead of a face at an unoccupied seat.empty string-optional-
bandstringSchema 10: none leaves out the full-screen bottom strip (buttons that stand on their own, such as a result screen); omitted keeps it.empty string-optional-
burnupBurnupViewOptional observed work chart for an islands surface; records one latest public sample per date on observe operations.nil; nothing is defined-optional-
callEnsembleCallOptional desktop browser call presentation. Requires chat.nil; nothing is defined-optional-
camerastringPublic boolean value controlling participant video.empty string-optional-
chatEnsembleChatEnables the transcript column and a camera grid with bounded tile aspect ratios.nil; nothing is defined-optional-
date_formatstringGo time layout for dates; the literal {weekday} is replaced using weekdays.empty string-optional-
date_linkScreenCall or stringDefault date destination; arguments read selected date, offset, weekday, closed and summary. Explicit marker links take precedence.nil; nothing is defined-optional-
detailstringPublic text binding for the selected entity pane, shown alongside its assigned activities.empty string-optional-
event_labelstringCalendar count suffix; omitted uses events.empty string-optional-
face_shapestringOverrides ui.face_shape on this screen: round or square. A video call always keeps round faces.empty string-optional-
fieldsPlanningField[]Player value columns; hidden attributes are rejected.empty list-optional-
filter_labelstringOptional label for the unfiltered grouped timeline. Enables arrow buttons to cycle public residents from order and visible; clicking the portrait or name resets to all. Other lanes become faint without moving or changing state.empty string-optional-
footerstringInterpolated guidance text on the full-screen bottom strip.empty string-optional-
fullscreenbooleanUse the entire play surface with authored action bounds and contextual entity actions.false-optional-
guest_backdropsstring → stringOptional picture paths keyed by guest actor ID.empty map-optional-
guestsstring[]Actor IDs shown as additional ensemble participants without creating simulation entities.empty list-optional-
headerstringInterpolated status text on the full-screen top strip.empty string-optional-
header_facestringInterpolated picture path of a small square face crop after the date, before the header text: a state shown by a face instead of a word.empty string-optional-
header_tintstringInterpolated #rrggbb ring around the header face; empty draws none.empty string-optional-
highlightstringOptional public boolean binding that outlines ensemble tiles when exactly true. Missing or non-boolean values do not highlight; use a badge to explain the meaning.empty string-optional-
iconstringFixed public portrait binding for video-off participants.empty string-optional-
lightbooleanUse a paper background, white cards and dark text on this surface.false-optional-
markersTimelineMarker[]Named date annotations on the grouped timeline calendar band.empty list-optional-
maskstringPublic boolean value selecting coarse background masking.empty string-optional-
orderstring[]Entity IDs in seat order; omitted order uses ascending IDs.empty list-optional-
phasesstring → stringDisplay labels keyed by calendar phase IDs.empty map-optional-
portraitstringPublic value containing a portrait asset path.empty string-optional-
rowsTimelineRow[]Optional grouped timeline rows. The calendar range stays fixed and oversized tables scroll by group.empty list-optional-
tabsstring[]Two to five fullscreen screen IDs in the same order on every peer, including this screen. Bottom tabs or left/right replace the surface without consuming time or nesting screens.empty list-optional-
visiblestringOptional public boolean binding; only true residents are displayed and selectable. Missing values hide the resident.empty string-optional-
week_startintegerFirst monthly calendar column, from 0 (Sunday, default) to 6 (Saturday). Weekday labels remain in Sunday-first order.00 is keptoptional-
weekdaysstring[]Seven weekday labels starting with Sunday; omitted uses English.empty list-optional-
windowstringOptional desktop title for fullscreen islands. Window controls are decorative; navigation uses authored actions and tabs.empty string-optional-

PolicyRule #

An ordered policy candidate; the first matching candidate supplies its event.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
eventstringExisting event to run through the ordinary interpreter.empty string-optional-
whenexpressionCondition evaluated from visible entity and activity observations. Omitted means true.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

Profile #

A page of the character book: who a character is, shown on the Characters screen once its when holds (ADR 0031).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
actorstringThe actor the profile shows; by default the actor of the same ID.empty string-optional-
affiliationstringAn optional group used to keep characters together in the relationship chart.empty string-optional-
enemystringThe enemy the profile shows, for a foe in the book.empty string-optional-
facesProfileFace or string[]The faces the screen can switch between: names of the actor’s faces or of its puppet’s faces, or maps of a face with its label and the condition that unlocks it. By default the actor’s face.empty list-optional-
fieldsProfileField[]Lines of label and value, such as Role or Likes; the labels are the game’s own.empty list-optional-
metbooleanUnlock the profile the first time a line of its actor is shown: the player has met the character (schema_version 10). It stays unlocked in the gallery’s record, also in later plays. With a when too, either opens it.false-optional-
namestringThe name shown; by default the actor’s or the enemy’s name.empty string-optional-
picturestringA standing picture under assets/ for a character who is neither an actor nor an enemy.empty string-optional-
relationsProfileRelation[]How the character sees the others: whom, what they call them, and a note.empty list-optional-
textstringThe introduction. It may hold {expressions}.empty string-optional-
titlestringA short epithet shown under the name. It may hold {expressions}.empty string-optional-
whenexpressionThe condition that unlocks the profile. Without it (and without met) the profile is always unlocked; a locked profile is a shadow named ???. Under --dev every profile is unlocked.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

ProfileBook #

The shape of the character book (schema_version 10).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
layoutstringlist (a column of names beside the picture, the default) or grid (a grid of face cards grouped by affiliation, with the standing picture and a board of the profile on the right).empty string-optional-
titlestringThe book’s name in the title, the menus and on its band; by default Characters.empty string-optional-

ProfileFace #

A face of a profile, written as its name or as a map (schema_version 10).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
facestringThe name of the actor’s face or of its puppet’s face.empty string-optional-
labelstringThe label of its button under the standing picture; by default the face’s name.empty string-optional-
seenbooleanUnlock the face the first time a line of the actor is shown with this face (schema_version 10); it stays unlocked, in the gallery’s record.false-optional-
whenexpressionThe condition that unlocks the face. Without it (and without seen) the face is always offered; a locked face is not offered. Once unlocked it stays unlocked, in the gallery’s record. Under --dev every face is offered.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

ProfileField #

A line of a profile: a label and its value.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
labelstringThe label, such as Role or Likes.empty string-optional-
valuestringThe value. It may hold {expressions}.empty string-optional-

ProfileRelation #

How a profile’s character sees another character.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
callsstringWhat the character calls them.empty string-optional-
kindstringThe chart line color: like, love, rival, enemy, family, friend, or other. Love is assigned by the author; an omitted kind uses other.empty string-optional-
textstringA note on how the character sees them.empty string-optional-
whostringThe other character: a profile ID, an actor ID, or you.empty string-optional-

Recruit #

The chance and starting level for an enemy to join after victory.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
admissionstringreserve (default) permits overflow; party_only rejects when the active party is full, without creating an instance. Rechecked at acceptance, including after save/resume.reserve-optional-
bonusnumberThe additive chance granted by the item or skill.00 is keptoptional-
bonus_itemstringAn item whose possession adds bonus to the chance.empty string-optional-
bonus_skillstringA skill known by an active member that adds bonus to the chance.empty string-optional-
chancenumberA probability greater than zero and at most one.00 is keptoptional-
classstringAn optional class override; otherwise enemy.monster_class is used.empty string-optional-
levelintegerThe recruited actor’s starting level; one if omitted.00 is keptoptional-

Region #

A region of a campaign: its neighbors, its first owner and garrison, and its own numbers.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
areanumber[2][]The region’s shape on the campaign map’s picture, its pixels as [[x, y], …] (three points or more): the map fills it in the owner’s color and draws its border, and a click inside chooses it. Areas may share borders but not overlap. Without it the region shows as its point’s flag.empty list-optional-
defendstringThe troop a general fights on marching here with an order of fight: battle, and whose members hold it, sharing its garrison, in a clash shown as units. An ID of troops.empty string-optional-
landmarkstringA picture under assets/ (cut out) the campaign map stands on the region’s point: its city, fortress or village, with the owner’s flag beside it; darkened with smoke while the region was fought over this turn or the last.empty string-optional-
landmark_groundnumberHow much the map settles the landmark onto the terrain (foot shadow, faded bottom edge, colors eased toward the ground), 0 to 1. Default 1.nil; nothing is defined0 is keptoptional-
landmark_scalenumberThe landmark’s width as a share of the map picture’s, 0 to 1. Default 0.12.00 is keptoptional-
namestringThe name shown. The ID when omitted.empty string-optional-
nextstring[]The regions it borders. A border is written on both regions unless one_way.empty list-optional-
one_waybooleanIf true, next may name regions that do not name this one back.false-optional-
ownerstringThe faction holding it at the start, an ID of factions. Omitted for a free region.empty string-optional-
terrainstringThe kind of ground (field, town, castle or any word): the background of a clash shown as units (clash.backgrounds).empty string-optional-
troopsintegerThe garrison at the start.00 is keptoptional-
valuesstring → numberThe region’s own numbers at the start (such as wealth), read and set as region...empty map-optional-

Reservation #

An event reservation dispatched once per matching date.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
afterstring[]Reservation IDs whose events must already have started; eligible on a subsequent dispatch.empty list-optional-
datestringDate of this ledger.empty string-optional-
eventstringEvent of this ledger.empty string-optional-
exclusivestringOptional group allowing at most one selected reservation per calendar date, in authored order.empty string-optional-
hide_closedbooleanHide the annotation on closed dates; does not affect dispatch.false-optional-
idstringStable reservation ID.empty string-optional-
labelstringPublic calendar annotation; does not affect dispatch.empty string-optional-
phasestringPhase of this ledger.empty string-optional-
weekdaysinteger[]Weekdays of this ledger.empty list-optional-
whenexpressionOptional pure eligibility condition, including public presence attributes; false leaves the reservation pending.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

ReserveSwap #

One reserve-to-party exchange.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
instringThe reserve actor instance ID to activate.empty string-optional-
outstringThe active actor instance ID to put in reserve.empty string-optional-

Respond #

Submit text to a speaker’s reaction rules and show the reply as dialog.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
fromstringSender name for repeat detection; omitted means player.empty string-optional-
textstringText submitted to the rules, with interpolation and translation.empty string-optional-
whostringA speaker with a book in game.yaml reactions.empty string-optional-

ScreenCall #

A plain authored screen invocation with frozen typed arguments (schema 10), or a scalar name for parameterless screens.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
argsstring → expressionPure expressions for every declared parameter, evaluated once in the caller scope before opening.empty map-optional-
screenstringLiteral authored screen ID. Built-in screens use the scalar form.empty string-optional-

ScreenEntry #

One detail page in an author-defined screen.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
acceptsexpressionPure condition, with the carried value bound, that lets the drop place take it; while false the place is faded, marked and refuses the drop.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
boundsinteger[]Direct action rectangle as logical x, y, width and height for full-screen views.empty list-optional-
bustEntryBustSchema 10: head-to-chest crop on ordinary bounded entries and carousels (not buttons or tickets); literal assets must exist. In ordinary entries it is placed by its face box: picture (interpolated), width (share of the entry width, default .4), top and face (fractions of the crop height, defaults .12 and .3). A muted entry veils it.nil; nothing is defined-optional-
carouselstringSchema 10: name of the rotating selector this bounded action joins; one per screen, every member with the same bounds.empty string-optional-
coststringShort interpolated label of what confirming the action spends, shown beside its name.empty string-optional-
destinationstringReplace the screen after its action, retaining the original opener; no destination parameters.empty string-optional-
doCommand[]Optional event commands run once on confirmation; conditions and text refresh afterward.empty list-optional-
dotstringSchema 10: interpolated #rrggbb color of a small status mark on ordinary bounded entries only, in the top-right corner, beside a word; empty draws none.empty string-optional-
dragstringSchema 10: interpolated value that makes the bounded entry carried on a full-screen surface: dragged with the pointer, or picked up with a tap or OK and dropped with another; empty is not carried. No do, destination, carousel, target, drop or peek.empty string-optional-
dropstringSchema 10: parameter name that makes the bounded entry a drop place; only a drop runs its do, with arg. bound to the carried drag value. Not in label, text, icon, when, muted, unavailable or reason.empty string-optional-
eachCallEachRepeat a row over a bounded pure ID collection; param is a row-local string argument.nil; nothing is defined-optional-
hintstringShort interpolated line, with the carried value bound, shown on the drop place while something is carried.empty string-optional-
iconstringInterpolated portrait path beside a bounded workspace control.empty string-optional-
labelstringRequired label shown in the list.empty string-optional-
markstringSchema 10: name of the bounded entry for a screen guide’s focus; the rows of an each, or several entries, may share one. Not next.empty string-optional-
meterEntryMeterSchema 10: progress bar on an ordinary bounded entry only (not buttons, tickets or carousels), the ticket card bar: progress (0..1), planned (the planned mark) and behind (colors it late).nil; nothing is defined-optional-
mutedexpressionPure condition drawing a muted unavailable portrait while retaining the control.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
peekstringSchema 10: interpolated text opened in a small glass panel beside the bounded entry when it is pressed; runs nothing. Empty is not a peek. No do, destination, carousel or target.empty string-optional-
picturestringOptional image path under assets/.empty string-optional-
picture_fitstringSchema 10: how a bounded picture fills its area: omitted or cover crops it to fill, contain shows it whole with its transparency (icons, transparent figures).empty string-optional-
portraitbooleanCenter an enlarged portrait above the label and detail in a bounded control.false-optional-
reasonstringInterpolated explanation shown in place of the detail while the action is unavailable.empty string-optional-
signstringSchema 10: interpolated picture path of a small square sign on ordinary bounded entries only, in the top-right corner, left of the dot, such as a place (office, home, off).empty string-optional-
stylestringSchema 10: plate draws a read-only board without an edge or focus; button draws a pressable pill. A plate never acts and a button always does.empty string-optional-
targetIDRef or stringPlanning entity ID whose seat opens this contextual action.empty (its fields take their defaults)-optional-
textstringDetail text, with interpolation and translation.empty string-optional-
ticketEntryTicketSchema 10: draw the bounded entry as a work ticket card; the label is the title and the icon the holder’s portrait.nil; nothing is defined-optional-
tonestringOptional surface control emphasis, note or primary; empty uses the ordinary panel.empty string-optional-
unavailableexpressionPure condition for bounded actions only; keeps the action visible but refuses it while it holds.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
whenexpressionCondition for showing this entry; omitted means visible.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

ScreenGuide #

Schema 10: a screen’s first-visit walk-through. Scripted, replayed and automatic plays skip it unless the script says guides on.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
stepsGuideStep[]One to eight lines shown one after another.empty list-optional-
whenexpressionPure condition that holds the guide back until it is true; omitted shows it the first time the screen shows.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check

SortieLook #

How a campaign’s sortie screen looks (campaign.sortie).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
backgroundPicture or stringThe picture behind the sortie screen, darkened a little so the windows read on it.empty (its fields take their defaults)-optional-
titlestringThe words before the name of the region marched on, a text with {expressions}. The title shows in a window like the other windows. Omitted: the engine’s words.empty string-optional-

SpaceFreeMove #

Fixed 60 Hz walking controller with a circular footprint, stair support and optional held-input speed stages.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
accelerationnumberSeconds to interpolate between stage targets, from 0 to 5. Omitted selects 0.12; explicit zero changes targets immediately. Release stops promptly.nil; nothing is defined0 is keptoptional-
speednumberBase speed in cells per simulation second, in (0,12]. Omitted or zero selects 1.6.00 is keptoptional-
stagesSpaceSpeedStage[]At most 16 speed stages in strictly increasing hold-time order. Omit for constant speed. Successful sliding counts; release, reversal, blockage, focus loss, blocking UI and placement reset the stage.empty list-optional-
turn_speednumberTurning sensitivity in degrees per simulation second, in (0,360]. Omitted or zero selects 90. Independent of walking speed.00 is keptoptional-

SpaceMaterial #

An opaque facade or roof material. Pictures are batched into 256-pixel atlas tiles.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
colorcolor stringOptional opaque base color, multiplied by picture tint and brightness.no color (the default of where it is drawn)-optional-
heightnumberWorld units per vertical image repetition, in [0.125,128]; omitted or zero selects 1.00 is keptoptional-
origin_unumberWorld-space horizontal texture origin, in [-128,128].00 is keptoptional-
origin_vnumberWorld-space vertical texture origin, in [-128,128].00 is keptoptional-
picturePicture or stringOptional image, tint and brightness; alpha is composited against white.empty (its fields take their defaults)-optional-
widthnumberWorld units per horizontal image repetition, in [0.125,128]; omitted or zero selects 1.00 is keptoptional-

SpaceRoof #

A closed nonwalkable roof primitive with actual sides and underside; at most 32 roofs.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
basenumberAdditional height above the anchored level, from 0 to 1.5.00 is keptoptional-
depthnumberFootprint depth from 0.125 to 64 cells and inside the map.00 is keptoptional-
facingstringUphill cardinal direction; a gable also rises from the opposite edge.empty string-optional-
filledbooleanFill down to a horizontal underside to close gable ends; default false retains constant vertical thickness.false-optional-
levelintegerOne-based base level, including the top of the last authored story.00 is keptoptional-
materialstringNamed top and side material; omitted uses tile color.empty string-optional-
risenumberPositive roof rise up to 2 world units; exactly zero for flat roofs.00 is keptoptional-
shapestringgable, shed or flat; other shapes are rejected.empty string-optional-
thicknessnumberVertical thickness in [0.01,0.5]; a filled roof uses it below its base.00 is keptoptional-
undersidestringNamed underside material; omitted uses wood color.empty string-optional-
widthnumberFootprint width from 0.125 to 64 cells and inside the map.00 is keptoptional-
xnumberContinuous left bound including eaves, inside the map.00 is keptoptional-
ynumberContinuous top bound including eaves, inside the map.00 is keptoptional-

SpaceSpeedStage #

A walking speed target selected after uninterrupted successful movement.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
afternumberPositive finite hold time in simulation seconds, at most 3600 and strictly greater than the previous stage.00 is keptoptional-
speednumberAbsolute target speed in cells per simulation second, in (0,12].00 is keptoptional-

SpaceWallRegion #

A non-overlapping grid rectangle assigning wall materials on one level. Decoration never changes collision.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
depthintegerPositive integer depth in cells, inside the map.00 is keptoptional-
eaststringOptional material override for outward east faces.empty string-optional-
levelintegerOne-based existing grid level.00 is keptoptional-
materialstringDefault named material for all wall faces in this region.empty string-optional-
northstringOptional material override for outward north faces.empty string-optional-
southstringOptional material override for outward south faces.empty string-optional-
weststringOptional material override for outward west faces.empty string-optional-
widthintegerPositive integer width in cells, inside the map.00 is keptoptional-
xintegerZero-based left column.00 is keptoptional-
yintegerZero-based top row.00 is keptoptional-

SpeechStyle #

Optional language-specific dialogue lint rules; no rules run unless declared.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
addressesstring → SpeechTermsPreferred forms of address keyed by recipient ID; lexical checks only.empty map-optional-
endingsSpeechTermsPreferred tone or ending and explicit discouraged forms or RE2 patterns.empty (its fields take their defaults)-optional-
first_personSpeechTermsPreferred self-reference and explicit discouraged alternatives.empty (its fields take their defaults)-optional-
matchstringLiteral matching: word (default, Unicode boundaries) or substring.empty string-optional-

SpeechTerms #

A preferred form and opt-in lexical patterns to flag for review.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
avoidstring[]Literal discouraged forms; matching follows the language style.empty list-optional-
patternsstring[]RE2 patterns matching discouraged forms, for language-specific rules.empty list-optional-
preferredstringThe preferred form shown in warnings; never substitutes dialogue.empty string-optional-

StageFraming #

Explicit head framing for one static novel portrait. Positions and sizes use fractions rather than pixels; requires schema version 8.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
headnumber[]Required [center_x, top_y, height] in source-image fractions: x uses image width; y and height use image height. Values must be finite and within the image, with positive height and top_y + height at most 1.empty list-required-
heightnumberRequired displayed head height as a positive fraction of screen height, at most 1. stage_scale multiplies this height around the head anchor.0rejectedrequired-
topnumberHead top as a fraction of screen height, from 0 to 1; defaults to 0. stage_drop adds a screen-height offset.00 is keptoptional-

StreamAffection #

How a viewer earns a channel’s affection. The steps raise the gold earned away and the chance of an answer being picked.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
answernumberPoints for an answer the streamer picks. The default is 5.5Uses the defaultoptional-
commentnumberPoints for a comment. The default is 1.1Uses the defaultoptional-
replynumberPoints more when the streamer answers a comment. The default is 2.2Uses the defaultoptional-
stayednumberPoints for watching most of a stream to the end of its slot (60% of its beats from where the viewer came in), whether or not the channel has stayed lines to thank with. The default is 10.10Uses the defaultoptional-
stepsnumber[]The points each step starts at, from 0 and increasing. The default is [0, 30, 150, 600, 3000].0, 30, 150, 600, 3000-optional-
tip_pernumberThe gold of a tip that earns one point, above 0. The default is 100.100Uses the defaultoptional-

StreamAsk #

A question. The player may answer it; the streamer reads one answer and its lines.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
npc[name, index][]Answers of bot viewers, [name, option], the option counted from 0. At least one.empty list-optional-
optionsStreamOption[]Two to four answers.empty list-optional-
qstringThe question the asking channel says.empty string-optional-
whostringThe channel that asks; the host when left out.empty string-optional-

StreamAway #

Gold earned while the game is closed, shown when the stream screen opens.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
cap_hoursnumberThe most hours counted, 0 or more.00 is keptoptional-
per_hournumberGold an hour, 0 or more.00 is keptoptional-
star_bonusnumberThe part added for each affection step of each channel, 0 or more (0.1 adds 10%).00 is keptoptional-

StreamBounce #

The lines that jiggle the streamer’s puppet; a tip jiggles it too.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
amountnumberThe strength of the jiggle, 0 to 10.00 is keptoptional-
onstringA regular expression (Go syntax) of the lines that jiggle. Empty jiggles none.empty string-optional-

StreamCrowd #

The bot viewers of the chat.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
linesCrowdLines or string[]What they chat: a list for any hour, or {any, morning, evening}.empty (its fields take their defaults)-optional-
namesstring[]The names of the bot viewers.empty list-optional-
ratenumberMessages a second on average, more than 0 and at most 100.00 is keptoptional-
tip_linesstring[]What they write with a tip, which the host reads out in quotes. Its recorded voice is in each host’s folder, keyed by the line as shown before it is quoted.empty list-optional-

StreamEcho #

When a streamer reads back a comment its reaction book found nothing in (the dodge.unknown lines): two beats after the comment, as if it came upon it in the chat; a comment not read back flows by unanswered (ADR 0052).

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
chancenumberThe chance of reading one back, 0 to 1. 0.35 when max_runes is left out too; with max_runes given, 0 when left out.0, or 0.35 when max_runes is left out too0 is kept, unless max_runes is 0 or left out too: then 0.35optional-
max_runesintegerOnly comments of at most this many characters. The default is 24.24, with chance 0.35 when chance is left out tooUses the defaultoptional-

StreamFrame #

The part of the puppet a stream shows, in the puppet’s pixels.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
bottomnumberThe row at the bottom of the frame, below top.00 is keptoptional-
cxnumberThe column at the center of the frame.00 is keptoptional-
topnumberThe row at the top of the frame, 0 or more.00 is keptoptional-

StreamLine #

A line, written as its text or with the face it is said with.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
facestringA face of the speaker’s puppet.empty string-optional-
textstringWhat is said.empty string-optional-

StreamLive #

Who is live: every channel the first time the game opens, then each with the chance share and at least min_share of them.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
duo_chancenumberThe chance, 0 to 1, drawn for each duo in the order written, that an unlocked duo streams when the game opens with both its hosts live, or when the stream of one of its hosts ends with slot.rest while the other streams on its own then (or is a guest in no stream): the duo then takes both their places, and its hosts are in no other duo meanwhile.00 is keptoptional-
min_sharenumberThe least part of the channels that are live, 0 to 1.00 is keptoptional-
sharenumberThe chance of each channel to be live, 0 to 1.00 is keptoptional-

StreamOption #

An answer and what is said when it is picked.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
cstringThe answer shown on its card and in the chat.empty string-optional-
rStreamLine or {id: StreamLine}[]The lines said when it is picked, {from} being who picked it: each said by the one who asked, as text or {face, text}, or by a host of the episode written with its channel id, {bo: text} or {bo: {face, text}}, so the two hosts of a duo answer in turn. A line’s voice is in the folder of the one who says it.empty list-optional-

StreamSlot #

The length of a stream. A live channel plays its episodes one after another, from the next the player has not seen, with a bridge line between them, until the slot has passed, and ends with the episode it is in then, thanking the viewer who stayed.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
minutesnumberThe minutes of a stream, more than 0 and at most 1440. The default is 60.60Uses the defaultoptional-
restnumberMinutes from the end of a stream to the channel’s next, 0 to 1440 (0: at once), which again starts from the next episode not seen, round again from the first after the last. Without it a channel whose stream ended stays offline until the game opens again. With rest: 0 and live: {share: 1} every channel is always on the air while the game is open.nil; nothing is defined0 is keptoptional-

StreamTiming #

The length of the beats. A line lasts say plus per_char for each character; a question shows its options for ask and then says its longest answer.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
asknumberSeconds the options of a question stay open, at least 0.1.00 is keptoptional-
chatnumberSeconds a chat beat lasts, at least 0.1.00 is keptoptional-
per_charnumberSeconds more for each character of a line, 0 or more.00 is keptoptional-
saynumberSeconds every line lasts, at least 0.1.00 is keptoptional-

StreamVoice #

The voice of speech synthesis; 0 is 1.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
pitchnumberThe pitch, 0 to 2.00 is keptoptional-
ratenumberThe speed, 0 to 10.00 is keptoptional-

Streams #

The live-stream file named by streams in game.yaml (schema version 9): the channels, their episodes, and the rules of the stream screen.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
affectionStreamAffectionThe points of the affection steps and what earns them.empty (its fields take their defaults)-optional-
answer_chancenumber[]The chance, for each affection step, that a streamer picks the player’s answer to a question, 0 to 1. The default is [0.6, 0.75, 0.9, 1, 1].0.6, 0.75, 0.9, 1, 1 (one for each step of the default steps)-optional-
awayStreamAwayThe gold earned while the game is closed.empty (its fields take their defaults)-optional-
bounceStreamBounceThe lines that jiggle the streamer’s puppet.empty (its fields take their defaults)-optional-
channelsChannel[]The streamers. The lobby lists the live ones by their viewers, the most watched first, and the order holds while it is open.empty list-optional-
crowdStreamCrowdThe bot viewers of the chat.empty (its fields take their defaults)-optional-
duosDuo[]Episodes two channels stream together.empty list-optional-
echoStreamEchoWhen a streamer reads back a comment it found nothing in.empty (its fields take their defaults)-optional-
liveStreamLiveWho is live when the game opens.empty (its fields take their defaults)-optional-
logostringThe picture under assets/ drawn before the game’s title in the bar over the stream screens, square and transparent around the mark. Without it, a colored square.empty string-optional-
missing_voicestringOptional schema version 9 policy for absent, invalid or late recordings: speech (also when omitted) permits browser speech synthesis; captions uses the desktop caption and mouth timing on every platform. Invalid values fail with GZN1104. The speaker button still toggles recorded audio when voices is configured, otherwise it is hidden in captions mode. Timeout diagnostics remain enabled.speech (empty also permits browser speech synthesis)-optional-
slotStreamSlotHow long a live channel streams: its episodes one after another (ADR 0052).empty (its fields take their defaults)-optional-
timingStreamTimingHow long each kind of beat lasts, in seconds.empty (its fields take their defaults)-optional-
tipsinteger[]The amounts the player can tip, above 0, smallest first, each once. They make the tiers of the tips’ colors (the first four amounts). A tip, the player’s or a bot’s, shows a band of its tier’s color with who sent it, the amount and the comment over the stage for 5 seconds and plays the sound tip (assets/sfx/tip.ogg replaces it); one of the third tier stays over the chat for 60 seconds, of the fourth for 120; the host reads a tip out with the face happy, else laugh, when its puppet has one.empty list-optional-
voicesstringA folder under assets/ of recorded lines (ADR 0052): a folder for each channel holding the line it says as KEY.ogg, KEY the first 16 hexadecimal digits of the SHA-1 of the line in UTF-8, as shown (translated) after its {fields} are filled, a reaction book’s line too. A line with its voice plays it, and the watch view waits for it to end; a line without one follows missing_voice (browser speech by default, captions elsewhere). gozen check warns of a missing folder and of a file that is the voice of no line (GZN0119). A voice is Ogg Vorbis; one in Ogg Opus or another format is warned of (GZN0120) and not played.empty string-optional-

TalkPortrait #

Where the speaker’s standing picture or moving portrait stands beside the box message window, in fractions of the screen. A height above 1 with the bottom below the screen shows only the upper body. The speaker on the right stands mirrored.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
bottomnumberWhere its bottom edge stands, as a fraction of the screen height, from 0 to 4. The default is 120 pixels below the screen.0 (120 pixels below the screen)0 is keptoptional-
heightnumberIts height as a fraction of the screen height, from 0 to 4. The default is 1.02.0 (1.02 times the screen height)0 is keptoptional-
xnumberIts horizontal center as a fraction of the screen width, from 0 to 1; the right speaker stands at 1 minus it. The default is 230 pixels right of the window’s left end.0 (230 pixels right of the window’s left end)0 is keptoptional-

TimelineItem #

An activity lane rendered from its reported observation, never its hidden progress.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
activitystringExisting planning activity ID; each activity may appear only once in the view.empty string-optional-
argsstring → expressionSchema 10: pure expressions binding the destination screen parameters when the lane is opened.empty map-optional-
forecast_labelstringOptional explanatory label enabling a linear finish forecast from reported work and elapsed calendar days. Empty disables it; zero reports, completed and excluded work have no forecast.empty string-optional-
labelstringShort lane identifier shown below the group heading.empty string-optional-
sampleexpressionOptional saved observation ratio expression (0 to 1). Negative, missing or invalid values hide the marker; never implicitly reads live progress.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
sample_freshnessexpressionPure expression from 0 (old) to 1 (fresh), blending between dim and text colors without hiding the saved marker. Values are clamped; errors and non-numeric or non-finite values use 0. Omission uses 1. Authors choose the aging interval and explain age in sample_label.no expression (true as a condition, 0 as a number)expression value 0 (false as a condition)optionalexpression; checked by gozen check
sample_labelstringText template describing the saved observation, such as its date and source, shown with its percentage in the footer.empty string-optional-
screenstringOptional authored screen to open when the lane is clicked or confirmed.empty string-optional-
textstringOptional interpolated explanation below the public assignment and report summary in expanded rows. Reserves an extra 20 logical pixels per lane and uses 15-pixel text; overflow is truncated. Also included in the activity description.empty string-optional-

TimelineMarker #

A named date annotation independent of scheduling rules.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
argsstring → expressionSchema 10: pure expressions for every destination screen parameter, evaluated at click time. Same-date links must have identical arguments.empty map-optional-
datestringISO date; annotations outside the calendar range are not drawn.empty string-optional-
labelstringText shown when pointing at that date in the calendar band. May be omitted for a screen-only link, which adds no annotation tick or calendar label.empty string-optional-
milestonebooleanDraw a dashed vertical line through the timeline rows.false-optional-
screenstringOptional authored screen to open when clicking this date in the timeline band or month calendar. Markers on the same date must use the same destination. Browsing does not advance time.empty string-optional-

TimelineRow #

A named timeline group in display order, with one compact lane per item.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
itemsTimelineItem[]Activity lanes in display order. Activities omitted from all rows appear in fallback rows.empty list-optional-
labelstringGroup heading. Long text is truncated at a readable font size.empty string-optional-
textstringOptional interpolated summary replacing the lane-label line; truncated at 15 logical pixels without changing row or bar positions.empty string-optional-

TitleMenu #

Schema 10: the title screen’s menu.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
hide_disabledbooleanLeave out the entries that cannot be chosen now (Continue with no save, Gallery with nothing to show) instead of graying them. Off by default.false-optional-

TitleText #

How the title screen letters the title and the subtitle. Sizes are in the screen’s pixels; tracking is the space between letters as a part of the size.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
colorcolor stringThe color that fills the letters. The default is the ui text color.no color (the ui text color)-optional-
edgecolor stringThe color of the letters’ outline. The default is the ui window color.no color (the ui window color)-optional-
sizenumberThe title’s letter size in pixels. The default is 96.0 (96 pixels)0 is keptoptional-
subtitle_sizenumberThe subtitle’s letter size in pixels. The default is 30.0 (30 pixels)0 is keptoptional-
subtitle_trackingnumberThe space between the subtitle’s letters, as a part of its size. The default is 0.3.not set (0.3)0 is keptoptional-
trackingnumberThe space between the title’s letters, as a part of its size. The default is 0.12.not set (0.12)0 is keptoptional-

ToneStyle #

Fills of workspace entry tones; unset colors keep the built-in look.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
notecolor stringFill of a note entry.no color (the default of where it is drawn)-optional-
primarycolor stringFill of a primary entry on islands surfaces.no color (the default of where it is drawn)-optional-
primary_cardcolor stringCard fill of a primary entry on workspace surfaces.no color (the default of where it is drawn)-optional-
primary_textcolor stringLabel color of a primary entry on workspace surfaces.no color (the default of where it is drawn)-optional-

VoiceStyle #

How the voices of lines play.

FieldTypeDescriptionDefaultWhen 0RequiredRefers to
auto_waitbooleanWhether auto waits for a voice to end as well as for the text. The default is true.nil; nothing is defined-optional-
cutbooleanWhether the next line stops a voice still playing. The default is true; false lets it finish.nil; nothing is defined-optional-