Personalization questions
Optional
Personalization lets you ask the builder a question that each build answers for itself. The builder is the person, team or AI that turns your package into a game. An answer can set shared tuning numbers, give the builder a creative instruction, or both. Every question has a default.
A choice the player makes while playing, such as a difficulty setting or an upgrade, is a mechanic, not personalization. Write it in your mechanics chapter.
personalization.json, the questions file
{
"questions": [
{
"id": "wave_pressure",
"prompt": "How intense should enemy waves be?",
"type": "choice",
"default": "steady",
"options": [
{
"id": "calm",
"label": "Calm",
"sets": { "wave.gap_seconds": 24 }
},
{
"id": "steady",
"label": "Steady",
"sets": { "wave.gap_seconds": 14 }
}
]
},
{
"id": "warning_time",
"prompt": "How many seconds before a wave should the horn sound?",
"type": "number",
"default": 3,
"sets": "wave.warning_seconds"
},
{
"id": "wave_mood",
"prompt": "How should the quiet between waves feel?",
"type": "text",
"default": "Tense, with distant movement but no music"
}
]
}
Three kinds of question:
- A choice question lists options. On an option,
setslists tuning keys and the number each one gets when the builder picks that option. - A number question takes a number. Its
setsnames the one tuning key the answer fills. - A text question takes free text. The builder reads it and decides.
Write a question id as lowercase words joined by underscores or hyphens. Each id must be unique in the file.
sets names either a number in values that has a range, or any open number, one you have not decided yet (the Tuning chapter explains open numbers). When the key has a range, every number an option writes, and a number question's default, must be inside it. If one is outside, the validator (the checking tool) refuses it. If the builder answers a number question outside the range, that answer is refused and the build record fails the build-record check.
An answer that sets an open number decides it for that build: the build uses the answer, not a value the builder searched for. While you write, the validator treats the default answer as decided and checks your rules with it.
Questions are applied in their listed order. A later question may set a key that an earlier question already set. The build then uses the later answer. The builder's report of the build stores every answer, including defaults, and every number the build used. A number that an answer set equals that answer in the report. For a creative answer, the builder decides how to follow it.
An option or number question without sets gives creative instruction only. A question or an option can also carry notes. Write notes as concrete instructions the builder can act on. A number change belongs in sets, not only in the notes.
Collection records are not part of personalization. No answer changes a record or a number on it. A sets key cannot name a contract value either. The filled-in contract file decides that value for every build.
The Who decides chapter shows how a > PERSONALIZATION: tag connects a prose passage to a question.
Full rules: OpenGDD specification, §5.