{
	"type":"object",
	"$schema": "http://json-schema.org/draft-04/schema",
	"title" : "VCMI creature format",
	"description": "Json format for defining new creatures in VCMI",
	"required" : [ "faction" ],
	"anyOf" : [
		{
			"disabled" : { "enum" : [ true ] }
		},
		{
			"required" : [
				"name", "cost", "level", "fightValue", "aiValue",
				"attack", "defense", "hitPoints", "speed", "damage", "advMapAmount",
				"graphics", "sound"
			]
		}
	],
	
	"additionalProperties" : false,
	"properties":{
		"name": {
			"type":"object",
			"additionalProperties" : false,
			"description": "Translatable names for this creature",
			"required" : [ "singular", "plural" ],
			"properties":{
				"singular": {
					"type":"string",
					"description": "Singular version"
				},
				"plural": {
					"type":"string",
					"description": "Plural version"
				}
			}
		},
		"abilityText" : {
			"type" : "string",
			"description" : "Text version of creature abilities. Used only with original creature window"
		},
		"index" : {
			"type" : "number",
			"description" : "Private field to break things, do not use."
		},
		"extraNames" : {
			"type" : "array",
			"items" : { "type" : "string" },
			"description" : "Private field to break things, do not use."
		},
		"faction": {
			"type":"string",
			"description": "Faction this creature belongs to. Examples: castle, rampart"
		},
		"cost": {
			"type":"object",
			"additionalProperties" : false,
			"description": "Cost to recruit this creature",
			"properties":{
				"wood":    { "type":"number"},
				"mercury": { "type":"number"},
				"ore":     { "type":"number"},
				"sulfur":  { "type":"number"},
				"crystal": { "type":"number"},
				"gems":    { "type":"number"},
				"gold":    { "type":"number"}
			}
		},
		"special": {
			"type":"boolean",
			"description": "Marks this object as special and not available by default"
		},
		"disabled": {
			"type":"boolean",
			"description": "Object is competely disabled and may not be even loaded in-game"
		},
		"level": { "type":"number"},
		"fightValue": {
			"type":"number",
			"description": " \"value\" of creature, used to determine for example army strength"
		},
		"aiValue": {
			"type":"number",
			"description": "Describes how valuable this creature is to AI. Usually similar to fightValue"
		},
		"growth": {
			"type":"number",
			"description": "Basic growth of this creature in town or in external dwellings"
		},
		"horde": {
			"type":"number",
			"description": "Bonus growth of this creature from built horde"
		},
		"attack":    { "type":"number" },
		"defense":   { "type":"number" },
		"hitPoints": { "type":"number" },
		"speed":     { "type":"number" },
		"shots":     { "type":"number" },

		"damage": {
			"type":"object",
			"additionalProperties" : false,
			"properties":{
				"max": { "type":"number" },
				"min": { "type":"number" }
			}
		},
		"spellPoints": {
			"type":"number",
			"description": "Spell points this creature has (usually equal to number of casts)"
		},
		"advMapAmount": {
			"type":"object",
			"additionalProperties" : false,
			"description" : "Initial size of random stacks on adventure map",
			"properties":{
				"min": { "type":"number" },
				"max": { "type":"number" }
			}
		},
		"upgrades": {
			"type":"array",
			"description": "List of creatures to which this one can be upgraded",
			"items": { "type":"string" }
		},
		"doubleWide": {
			"type":"boolean",
			"description": "If set, creature will be two tiles wide on battlefield"
		},
		"hasDoubleWeek": {
			"type":"boolean",
			"description": "creature may receive \"week of\" events"
		},
		"abilities": {
			"description": "Creature abilities described using Bonus system",
			"type":"object",
			"additionalProperties": {
				"$ref" : "vcmi:bonus"
			}
		},
		"stackExperience": {
			"type":"array",
			"description": "Stack experience, using bonus system",
			"items":{
				"type":"object",
				"additionalProperties" : false,
				"required" : [ "bonus", "values" ],
				"description": "0",
				"properties":{
					"bonus": {"$ref" : "vcmi:bonus" },
					"values": {
						"type":"array",
						"minItems" : 10,
						"maxItems" : 10,
						"description": "Strength of the bonus",
						"anyOf" : [
							{ "items": { "type" : "number"  } },
							{ "items": { "type" : "boolean" } }
						]
					}
				}
			}
		},
		"graphics": {
			"type":"object",
			"additionalProperties" : false,
			"description": "Describes how this creature looks like during battles",
			"required" : [
				"animationTime", "animation", "timeBetweenFidgets"
			],
			"properties":{
				"animationTime": {
					"type":"object",
					"additionalProperties" : false,
					"required" : [ "attack", "flight", "walk", "idle" ],
					"description": "Length of several animations",
					"properties":{
						"attack": {
							"type":"number",
							"description": "attack"
						},
						"idle": {
							"type":"number",
							"description": "idle"
						},
						"flight": {
							"type":"number",
							"description": "flight"
						},
						"walk": {
							"type":"number",
							"description": "walk"
						}
					}
				},
				"iconLarge": {
					"type":"string",
					"description": "Large icon for this creature, used for example in town screen",
					"format" : "imageFile"
				},
				"iconSmall": {
					"type":"string",
					"description": "Small icon for this creature, used for example in exchange screen",
					"format" : "imageFile"
				},

				"map": {
					"type":"string",
					"description": ".def file with animation of this creature on adventure map",
					"format" : "defFile"
				},
				"animation": {
					"type":"string",
					"description": ".def file with animation of this creature in battles",
					"format" : "defFile"
				},
				"missile": {
					"type":"object",
					"additionalProperties" : false,
					"required" : [ "projectile", "frameAngles", "offset", "attackClimaxFrame" ],
					"description": "Missile description for archers",
					"properties":{
						"projectile": {
							"type":"string",
							"description": "Path to projectile animation",
							"format" : "defFile"
						},
						"frameAngles": {
							"type":"array",
							"description": "Angles of missile images, should go from 90 to -90",
							"minItems" : 1,
							"items": {
								"minimum" : -90,
								"maximum" :  90,
								"type":"number"
							}
						},
						"offset": {
							"type":"object",
							"additionalProperties" : false,
							"required" : [ "lowerX", "lowerY", "middleX", "middleY", "upperX", "upperY" ],
							"description": "Position where projectile image appears during shooting in specific direction",
							"properties":{
								"lowerX":  { "type":"number" },
								"lowerY":  { "type":"number" },
								"middleX": { "type":"number" },
								"middleY": { "type":"number" },
								"upperX":  { "type":"number" },
								"upperY":  { "type":"number" }
							}
						},
						"attackClimaxFrame": {
							"type":"number",
							"description": "Frame from attack animation during which creature deals damage"
						}
					}
				},
				"timeBetweenFidgets": {
					"type":"number",
					"description": "How often creature will play idling animation"
				},
				"troopCountLocationOffset": {
					"type":"number",
					"description": "Position of troop count label?"
				}
			}
		},
		"sound": {
			"type":"object",
			"additionalProperties" : false,
			"description": "Various sound files associated with this creature",
			"properties":{
				"attack":      { "type":"string", "format" : "soundFile" },
				"defend":      { "type":"string", "format" : "soundFile" },
				"killed":      { "type":"string", "format" : "soundFile" },
				"startMoving": { "type":"string", "format" : "soundFile" },
				"endMoving":   { "type":"string", "format" : "soundFile" },
				"move":        { "type":"string", "format" : "soundFile" },
				"shoot":       { "type":"string", "format" : "soundFile" },
				"wince":       { "type":"string", "format" : "soundFile" }
			}
		}
	}
}
