{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://spec.super-arc.com/0.1.0/character.json",
  "title": "Character",
  "description": "A Character in the Narrative Spec. Required core is deliberately tiny: a stub is valid, and depth is scored rather than demanded. Depth groups are the optional top-level objects below; a group is started when its key is present and its value is a non-null object, including {}.",
  "type": "object",
  "required": [
    "id",
    "specType",
    "specVersion",
    "name",
    "role"
  ],
  "properties": {
    "id": {
      "$ref": "common.json#/$defs/id"
    },
    "specType": {
      "const": "character"
    },
    "specVersion": {
      "$ref": "common.json#/$defs/specVersion"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Display name. May change; the slug in id may not."
    },
    "status": {
      "$ref": "common.json#/$defs/status"
    },
    "extensions": {
      "$ref": "common.json#/$defs/extensions"
    },
    "role": {
      "type": "string",
      "description": "Function in the story: protagonist, antagonist, foil, …"
    },
    "identity": {
      "type": [
        "object",
        "null"
      ],
      "description": "Who they are before the story acts on them.",
      "properties": {
        "age": {
          "type": "string"
        },
        "pronouns": {
          "type": "string"
        },
        "occupation": {
          "type": "string"
        },
        "origin": {
          "type": "string"
        },
        "affiliations": {
          "type": "array",
          "items": {
            "$ref": "common.json#/$defs/ref"
          }
        }
      }
    },
    "arc": {
      "type": [
        "object",
        "null"
      ],
      "description": "The change the story puts them through. want != need once started.",
      "properties": {
        "wound": {
          "type": "string",
          "description": "The old injury that set the want."
        },
        "want": {
          "type": "string",
          "description": "What they think will fix it."
        },
        "need": {
          "type": "string",
          "description": "What actually would. Must differ from want."
        },
        "lie": {
          "type": "string"
        },
        "truth": {
          "type": "string"
        }
      }
    },
    "voice": {
      "type": [
        "object",
        "null"
      ],
      "description": "How they sound on the page.",
      "properties": {
        "register": {
          "type": "string"
        },
        "verbalTics": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "silences": {
          "type": "string"
        }
      }
    },
    "appearance": {
      "type": [
        "object",
        "null"
      ],
      "description": "What a reader sees.",
      "properties": {
        "build": {
          "type": "string"
        },
        "features": {
          "type": "string"
        },
        "dress": {
          "type": "string"
        },
        "tells": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "abilities": {
      "type": [
        "object",
        "null"
      ],
      "description": "What they can do, and what it costs.",
      "properties": {
        "skills": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ruleset": {
          "$ref": "common.json#/$defs/ref"
        },
        "limits": {
          "type": "string"
        }
      }
    },
    "timeline": {
      "type": [
        "object",
        "null"
      ],
      "description": "Where they are in the in-world chronology.",
      "properties": {
        "events": {
          "type": "array",
          "items": {
            "$ref": "common.json#/$defs/ref"
          }
        }
      }
    },
    "secrets": {
      "type": [
        "object",
        "null"
      ],
      "description": "What they are hiding, and from whom.",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    }
  },
  "x-depthOrder": [
    "identity",
    "arc",
    "voice",
    "appearance",
    "abilities",
    "timeline",
    "secrets"
  ]
}
