neon-sprawl/content/schemas/encounter-def.schema.json

56 lines
1.7 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://neon-sprawl.local/schemas/encounter-def.json",
"title": "EncounterDef",
"description": "Single encounter template row for catalogs (e.g. content/encounters/*_encounters.json). IDs are stable forever—rename display in displayName only. See docs/decomposition/modules/E5_M3_EncounterAndRewardTables.md.",
"type": "object",
"additionalProperties": false,
"required": [
"id",
"displayName",
"completionCriteria",
"requiredNpcInstanceIds",
"rewardTableId"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$",
"description": "Immutable encounter key for progress tracking and completion events."
},
"displayName": {
"type": "string",
"minLength": 1,
"description": "Player-facing label; safe to change without migrating character data."
},
"completionCriteria": {
"type": "object",
"additionalProperties": false,
"required": ["kind"],
"properties": {
"kind": {
"type": "string",
"description": "Prototype Slice 3: defeat all listed NPC instances.",
"enum": ["defeat_all_targets"]
}
}
},
"requiredNpcInstanceIds": {
"type": "array",
"minItems": 3,
"maxItems": 3,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"description": "NPC instance ids from server PrototypeNpcRegistry (CI cross-ref set gate)."
},
"rewardTableId": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$",
"description": "RewardTable id granted once on encounter complete."
}
}
}