{ "type" : "object", "$schema" : "http://json-schema.org/draft-04/schema", "title" : "VCMI hero format", "description" : "Format used to define new heroes in VCMI", "required" : [ "class", "army", "skills", "texts" ], "oneOf" : [ { "required" : [ "images" ] }, { "required" : [ "index" ] } ], "additionalProperties" : false, "properties" : { "special" : { "type" : "boolean", "description" : "If set to true hero will be unavailable on start and won't appear in taverns (campaign heroes)" }, "class" : { "type" : "string", "description" : "Identifier of class this hero belongs to. Such as knight or battleMage" }, "female" : { "type" : "boolean", "description" : "Set to true if the hero is female by default (can be changed in map editor)" }, "battleImage" : { "type" : "string", "description" : "Custom animation to be used on battle, overrides hero class property", "format" : "defFile" }, "images" : { "type" : "object", "additionalProperties" : false, "description" : "images", "required" : [ "large", "small", "specialtyLarge", "specialtySmall" ], "properties" : { "large" : { "type" : "string", "description" : "Large version of portrait for use in hero screen", "format" : "imageFile" }, "small" : { "type" : "string", "description" : "Small version of portrait for use on adventure map", "format" : "imageFile" }, "specialtyLarge" : { "type" : "string", "description" : "Large image of hero specilty, used in hero screen", "format" : "imageFile" }, "specialtySmall" : { "type" : "string", "description" : "Small image of hero specialty for use in exchange screen", "format" : "imageFile" } } }, "army" : { "type" : "array", "description" : "Initial hero army when recruited in tavern", "minItems" : 1, "maxItems" : 3, "items" : { "type" : "object", "additionalProperties" : false, "required" : [ "creature", "min", "max" ], "properties" : { "creature" : { "type" : "string", "description" : "creature" }, "max" : { "type" : "number", "description" : "max", "minimum" : 1 }, "min" : { "type" : "number", "description" : "min", "minimum" : 1 } } } }, "skills" : { "type" : "array", "description" : "List of skills initially known by hero", "maxItems" : 8, "items" : { "type" : "object", "additionalProperties" : false, "required" : [ "level", "skill" ], "properties" : { "level" : { "type" : "string", "description" : "level", "enum" : [ "basic", "advanced", "expert" ] }, "skill" : { "type" : "string", "description" : "skill" } } } }, "specialty" : { "type" : "object", "description" : "Description of hero specialty using bonus system", "additionalProperties" : false, "properties" : { "base" : { "type" : "object", "additionalProperties" : true, "description" : "Section that will be added into every bonus instance, for use in specialties with multiple similar bonuses." }, "bonuses" : { "type" : "object", "description" : "List of bonuses added by this specialty. See bonus format for more details", "additionalProperties" : { "$ref" : "bonus.json" } }, "creature" : { "type" : "string", "description" : "Shortcut for defining creature specialty, using standard H3 rules." } } }, "spellbook" : { "type" : "array", "description" : "List of starting spells, if available. This entry (even empty) will also grant spellbook", "items" : { "type" : "string" } }, "texts" : { "type" : "object", "additionalProperties" : false, "description" : "All translatable texts related to hero", "required" : [ "name", "biography", "specialty" ], "properties" : { "name" : { "type" : "string", "description" : "Hero name" }, "biography" : { "type" : "string", "description" : "Hero biography" }, "specialty" : { "type" : "object", "additionalProperties" : false, "description" : "Hero specialty information", "required" : [ "name", "description", "tooltip" ], "properties" : { "name" : { "type" : "string", "description" : "Name of the specialty" }, "description" : { "type" : "string", "description" : "Description visible when hovering over specialty icon" }, "tooltip" : { "type" : "string", "description" : "Tooltip visible on clicking icon." } } } } }, "index" : { "type" : "number", "description" : "Private field to break things, do not use." }, "onlyOnWaterMap" : { "type" : "boolean", "description" : "If set to true, hero won't show up on a map with water" }, "onlyOnMapWithoutWater" : { "type" : "boolean", "description" : "If set to true, hero will show up only if the map contains no water" } } }