{ "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", "level", "cost", "speed", "hitPoints", "attack", "defense", "damage", "fightValue", "aiValue", "advMapAmount", "graphics", "sound" ] } ], "additionalProperties" : false, "properties" : { "special" : { "type" : "boolean", "description" : "Marks this object as special and not available by default" }, "disabled" : { "type" : "boolean", "description" : "Internal. Object is competely disabled and may not be even loaded in-game" }, "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" } } }, "description" : { "type" : "string", "description" : "Description of creature" }, "faction" : { "type" : "string", "description" : "Faction this creature belongs to. Examples: castle, rampart" }, "level" : { "type" : "number"}, "upgrades" : { "type" : "array", "description" : "List of creatures to which this one can be upgraded", "items" : { "type" : "string" } }, "cost" : { "type" : "object", "additionalProperties" : false, "description" : "Cost to recruit this creature", "properties" : { "gold" : { "type" : "number"}, "wood" : { "type" : "number"}, "ore" : { "type" : "number"}, "mercury" : { "type" : "number"}, "sulfur" : { "type" : "number"}, "crystal" : { "type" : "number"}, "gems" : { "type" : "number"} } }, "speed" : { "type" : "number" }, "hitPoints" : { "type" : "number" }, "attack" : { "type" : "number" }, "defense" : { "type" : "number" }, "damage" : { "type" : "object", "additionalProperties" : false, "properties" : { "max" : { "type" : "number" }, "min" : { "type" : "number" } } }, "shots" : { "type" : "number" }, "spellPoints" : { "type" : "number", "description" : "Spell points this creature has (usually equal to number of casts)" }, "doubleWide" : { "type" : "boolean", "description" : "If set, creature will be two tiles wide on battlefield" }, "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" }, "advMapAmount" : { "type" : "object", "additionalProperties" : false, "description" : "Initial size of random stacks on adventure map", "properties" : { "min" : { "type" : "number" }, "max" : { "type" : "number" } } }, "hasDoubleWeek" : { "type" : "boolean", "description" : "creature may receive \"week of\" events" }, "abilities" : { "description" : "Creature abilities described using Bonus system", "type" : "object", "additionalProperties" : { "$ref" : "bonus.json" } }, "graphics" : { "type" : "object", "additionalProperties" : false, "description" : "Describes how this creature looks like", "required" : [ "animation", "animationTime", "timeBetweenFidgets" ], "properties" : { "animation" : { "type" : "string", "description" : "File with animation of this creature in battles", "format" : "animationFile" }, "map" : { "type" : "string", "description" : "File with animation of this creature on adventure map", "format" : "animationFile" }, "mapMask" : { "type" : "array", "items" : { "type" : "string" }, "description" : "Object mask that describes on which tiles object is visible/blocked/activatable" }, "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" }, "animationTime" : { "type" : "object", "additionalProperties" : false, "required" : [ "attack", "walk", "idle" ], "description" : "Length of several animations", "properties" : { "attack" : { "type" : "number", "description" : "attack" }, "idle" : { "type" : "number", "description" : "idle" }, "walk" : { "type" : "number", "description" : "walk" } } }, "missile" : { "type" : "object", "additionalProperties" : false, "required" : [ "frameAngles", "offset", "attackClimaxFrame" ], "description" : "Missile description for archers", "properties" : { "projectile" : { "type" : "string", "description" : "Path to projectile animation", "format" : "animationFile" }, "ray" : { "type" : "array", "description" : "Colors of ray projectile animation", "minItems" : 1, "items" : { "type" : "object", "required" : [ "start", "end" ], "properties" : { "start" : { "type" : "array", "minItems" : 4, "maxItems" : 4, "items" : { "minimum" : 0, "maximum" : 255, "type" : "number" } }, "end" : { "type" : "array", "minItems" : 4, "maxItems" : 4, "items" : { "minimum" : 0, "maximum" : 255, "type" : "number" } } } } }, "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 at which shooter shoots his projectile (e.g. releases arrow)" } } }, "timeBetweenFidgets" : { "type" : "number", "description" : "How often creature will play idling animation" } } }, "sound" : { "type" : "object", "additionalProperties" : false, "description" : "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" } } }, "stackExperience" : { "type" : "array", "description" : "Stack experience, using bonus system", "items" : { "type" : "object", "additionalProperties" : false, "required" : [ "bonus", "values" ], "description" : "0", "properties" : { "bonus" : {"$ref" : "bonus.json" }, "values" : { "type" : "array", "minItems" : 10, "maxItems" : 10, "description" : "Strength of the bonus", "anyOf" : [ { "items" : { "type" : "number" } }, { "items" : { "type" : "boolean" } } ] } } } }, "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." } } }