2013-04-02 17:06:43 +00:00
{
2023-05-19 21:04:31 +03:00
"type" : "object" ,
"$schema" : "http://json-schema.org/draft-04/schema" ,
2013-04-02 17:06:43 +00:00
"title" : "VCMI creature format" ,
2023-05-19 21:04:31 +03:00
"description" : "Json format for defining new creatures in VCMI" ,
2013-04-11 19:24:14 +00:00
"required" : [ "faction" ] ,
"anyOf" : [
{
"disabled" : { "enum" : [ true ] }
} ,
{
"required" : [
2023-05-19 21:04:31 +03:00
"name" , "level" , "cost" , "speed" , "hitPoints" , "attack" , "defense" , "damage" ,
"fightValue" , "aiValue" , "advMapAmount" , "graphics" , "sound"
2013-04-11 19:24:14 +00:00
]
}
2013-04-02 17:06:43 +00:00
] ,
2013-04-11 19:24:14 +00:00
"additionalProperties" : false ,
2023-05-19 21:04:31 +03:00
"properties" : {
"special" : {
"type" : "boolean" ,
"description" : "Marks this object as special and not available by default"
} ,
"disabled" : {
"type" : "boolean" ,
2023-09-12 15:52:45 +03:00
"description" : "Internal. Object is competely disabled and may not be even loaded in-game"
2023-05-19 21:04:31 +03:00
} ,
2024-05-16 09:53:37 +00:00
"excludeFromRandomization" : {
"type" : "boolean" ,
"description" : "If set, this creature will never be picked as random monster and will not appear in Refugee Camp. Random map generator can still pick this creature"
} ,
2023-05-19 21:04:31 +03:00
"name" : {
"type" : "object" ,
2013-04-11 19:24:14 +00:00
"additionalProperties" : false ,
2023-05-19 21:04:31 +03:00
"description" : "Translatable names for this creature" ,
2013-04-02 17:06:43 +00:00
"required" : [ "singular" , "plural" ] ,
2023-05-19 21:04:31 +03:00
"properties" : {
"singular" : {
"type" : "string" ,
"description" : "Singular version"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"plural" : {
"type" : "string" ,
"description" : "Plural version"
2013-04-02 17:06:43 +00:00
}
}
} ,
2024-04-27 18:41:21 +02:00
"description" : {
2024-04-12 23:35:39 +02:00
"type" : "string" ,
2024-04-27 18:41:21 +02:00
"description" : "Description of creature"
2024-04-12 23:35:39 +02:00
} ,
2023-05-19 21:04:31 +03:00
"faction" : {
2013-04-11 19:24:14 +00:00
"type" : "string" ,
2023-05-19 21:04:31 +03:00
"description" : "Faction this creature belongs to. Examples: castle, rampart"
2013-04-11 19:24:14 +00:00
} ,
2023-05-19 21:04:31 +03:00
"level" : { "type" : "number" } ,
"upgrades" : {
2013-04-11 19:24:14 +00:00
"type" : "array" ,
2023-05-19 21:04:31 +03:00
"description" : "List of creatures to which this one can be upgraded" ,
"items" : { "type" : "string" }
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"cost" : {
"type" : "object" ,
2013-04-11 19:24:14 +00:00
"additionalProperties" : false ,
2023-05-19 21:04:31 +03:00
"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" } ,
2023-05-19 21:14:01 +03:00
"gems" : { "type" : "number" }
2013-04-02 17:06:43 +00:00
}
} ,
2023-05-19 21:04:31 +03:00
"speed" : { "type" : "number" } ,
"hitPoints" : { "type" : "number" } ,
"attack" : { "type" : "number" } ,
"defense" : { "type" : "number" } ,
"damage" : {
"type" : "object" ,
"additionalProperties" : false ,
"properties" : {
"max" : { "type" : "number" } ,
"min" : { "type" : "number" }
}
2013-04-11 19:24:14 +00:00
} ,
2023-05-19 21:04:31 +03:00
"shots" : { "type" : "number" } ,
"spellPoints" : {
"type" : "number" ,
"description" : "Spell points this creature has (usually equal to number of casts)"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"doubleWide" : {
"type" : "boolean" ,
"description" : "If set, creature will be two tiles wide on battlefield"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"fightValue" : {
"type" : "number" ,
"description" : " \"value\" of creature, used to determine for example army strength"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"aiValue" : {
"type" : "number" ,
"description" : "Describes how valuable this creature is to AI. Usually similar to fightValue"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"growth" : {
"type" : "number" ,
"description" : "Basic growth of this creature in town or in external dwellings"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"horde" : {
"type" : "number" ,
"description" : "Bonus growth of this creature from built horde"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"advMapAmount" : {
"type" : "object" ,
2013-04-11 19:24:14 +00:00
"additionalProperties" : false ,
2013-04-02 17:06:43 +00:00
"description" : "Initial size of random stacks on adventure map" ,
2023-05-19 21:04:31 +03:00
"properties" : {
"min" : { "type" : "number" } ,
"max" : { "type" : "number" }
2013-04-02 17:06:43 +00:00
}
} ,
2023-05-19 21:04:31 +03:00
"hasDoubleWeek" : {
"type" : "boolean" ,
"description" : "creature may receive \"week of\" events"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"abilities" : {
"description" : "Creature abilities described using Bonus system" ,
"type" : "object" ,
"additionalProperties" : {
2018-10-30 22:30:56 +01:00
"$ref" : "bonus.json"
2013-04-11 19:24:14 +00:00
}
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"graphics" : {
"type" : "object" ,
2013-04-11 19:24:14 +00:00
"additionalProperties" : false ,
2023-09-12 15:52:45 +03:00
"description" : "Describes how this creature looks like" ,
2013-04-02 17:06:43 +00:00
"required" : [
2023-05-19 21:04:31 +03:00
"animation" , "animationTime" , "timeBetweenFidgets"
2013-04-02 17:06:43 +00:00
] ,
2023-05-19 21:04:31 +03:00
"properties" : {
"animation" : {
"type" : "string" ,
2023-09-12 15:52:45 +03:00
"description" : "File with animation of this creature in battles" ,
2024-02-19 17:50:59 +02:00
"format" : "animationFile"
2023-05-19 21:04:31 +03:00
} ,
"map" : {
"type" : "string" ,
2023-09-12 15:52:45 +03:00
"description" : "File with animation of this creature on adventure map" ,
2024-02-19 17:50:59 +02:00
"format" : "animationFile"
2023-05-19 21:04:31 +03:00
} ,
2023-06-20 19:37:03 +03:00
"mapMask" : {
"type" : "array" ,
"items" : { "type" : "string" } ,
"description" : "Object mask that describes on which tiles object is visible/blocked/activatable"
} ,
2023-05-19 21:04:31 +03:00
"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" ,
2013-04-11 19:24:14 +00:00
"additionalProperties" : false ,
2023-01-28 13:56:51 +02:00
"required" : [ "attack" , "walk" , "idle" ] ,
2023-05-19 21:04:31 +03:00
"description" : "Length of several animations" ,
"properties" : {
"attack" : {
"type" : "number" ,
"description" : "attack"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"idle" : {
"type" : "number" ,
"description" : "idle"
2013-11-06 13:42:58 +00:00
} ,
2023-05-19 21:04:31 +03:00
"walk" : {
"type" : "number" ,
"description" : "walk"
2013-04-02 17:06:43 +00:00
}
}
} ,
2023-05-19 21:04:31 +03:00
"missile" : {
"type" : "object" ,
2013-04-11 19:24:14 +00:00
"additionalProperties" : false ,
2022-11-15 21:42:16 +02:00
"required" : [ "frameAngles" , "offset" , "attackClimaxFrame" ] ,
2023-05-19 21:04:31 +03:00
"description" : "Missile description for archers" ,
"properties" : {
"projectile" : {
"type" : "string" ,
"description" : "Path to projectile animation" ,
2024-02-19 17:50:59 +02:00
"format" : "animationFile"
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"ray" : {
"type" : "array" ,
"description" : "Colors of ray projectile animation" ,
2022-11-16 12:26:56 +02:00
"minItems" : 1 ,
2023-05-19 21:04:31 +03:00
"items" : {
"type" : "object" ,
2022-11-16 12:26:56 +02:00
"required" : [ "start" , "end" ] ,
2023-05-19 21:04:31 +03:00
"properties" : {
"start" : {
"type" : "array" ,
2022-11-16 12:26:56 +02:00
"minItems" : 4 ,
"maxItems" : 4 ,
2023-05-19 21:04:31 +03:00
"items" : {
2022-11-16 12:26:56 +02:00
"minimum" : 0 ,
"maximum" : 255 ,
2023-05-19 21:04:31 +03:00
"type" : "number"
2022-11-16 12:26:56 +02:00
}
} ,
2023-05-19 21:04:31 +03:00
"end" : {
"type" : "array" ,
2022-11-16 12:26:56 +02:00
"minItems" : 4 ,
"maxItems" : 4 ,
2023-05-19 21:04:31 +03:00
"items" : {
2022-11-16 12:26:56 +02:00
"minimum" : 0 ,
"maximum" : 255 ,
2023-05-19 21:04:31 +03:00
"type" : "number"
2022-11-16 12:26:56 +02:00
}
}
}
}
2022-11-15 21:42:16 +02:00
} ,
2023-05-19 21:04:31 +03:00
"frameAngles" : {
"type" : "array" ,
"description" : "Angles of missile images, should go from 90 to -90" ,
2013-04-02 17:06:43 +00:00
"minItems" : 1 ,
2023-05-19 21:04:31 +03:00
"items" : {
2013-04-04 13:18:38 +00:00
"minimum" : -90 ,
"maximum" : 90 ,
2023-05-19 21:04:31 +03:00
"type" : "number"
2013-04-04 13:18:38 +00:00
}
2013-04-02 17:06:43 +00:00
} ,
2023-05-19 21:04:31 +03:00
"offset" : {
"type" : "object" ,
2013-04-11 19:24:14 +00:00
"additionalProperties" : false ,
2013-04-02 17:06:43 +00:00
"required" : [ "lowerX" , "lowerY" , "middleX" , "middleY" , "upperX" , "upperY" ] ,
2023-05-19 21:04:31 +03:00
"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" }
2013-04-02 17:06:43 +00:00
}
2013-04-11 19:24:14 +00:00
} ,
2023-05-19 21:04:31 +03:00
"attackClimaxFrame" : {
"type" : "number" ,
2023-09-12 15:52:45 +03:00
"description" : "Frame at which shooter shoots his projectile (e.g. releases arrow)"
2013-04-02 17:06:43 +00:00
}
}
} ,
2023-05-19 21:04:31 +03:00
"timeBetweenFidgets" : {
"type" : "number" ,
"description" : "How often creature will play idling animation"
2013-04-02 17:06:43 +00:00
}
}
} ,
2023-05-19 21:04:31 +03:00
"sound" : {
"type" : "object" ,
2013-04-11 19:24:14 +00:00
"additionalProperties" : false ,
2023-09-12 15:52:45 +03:00
"description" : "Sound files associated with this creature" ,
2023-05-19 21:04:31 +03:00
"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" }
2013-04-02 17:06:43 +00:00
}
2023-05-19 21:04:31 +03:00
} ,
"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."
2013-04-02 17:06:43 +00:00
}
}
}