55 lines
1.7 KiB
JSON
55 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,
|
|
"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."
|
|
}
|
|
}
|
|
}
|