2013-04-02 20:06:43 +03:00
|
|
|
{
|
2023-05-19 20:04:31 +02:00
|
|
|
"type" : "object",
|
|
|
|
"$schema" : "http://json-schema.org/draft-04/schema",
|
2013-04-02 20:06:43 +03:00
|
|
|
"title" : "VCMI creature format",
|
2023-05-19 20:04:31 +02:00
|
|
|
"description" : "Json format for defining new creatures in VCMI",
|
2013-04-11 22:24:14 +03:00
|
|
|
"required" : [ "faction" ],
|
|
|
|
"anyOf" : [
|
|
|
|
{
|
|
|
|
"disabled" : { "enum" : [ true ] }
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"required" : [
|
2023-05-19 20:04:31 +02:00
|
|
|
"name", "level", "cost", "speed", "hitPoints", "attack", "defense", "damage",
|
|
|
|
"fightValue", "aiValue", "advMapAmount", "graphics", "sound"
|
2013-04-11 22:24:14 +03:00
|
|
|
]
|
|
|
|
}
|
2013-04-02 20:06:43 +03:00
|
|
|
],
|
2013-04-11 22:24:14 +03:00
|
|
|
"additionalProperties" : false,
|
2023-05-19 20:04:31 +02:00
|
|
|
"properties" : {
|
|
|
|
"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"
|
|
|
|
},
|
|
|
|
"name" : {
|
|
|
|
"type" : "object",
|
2013-04-11 22:24:14 +03:00
|
|
|
"additionalProperties" : false,
|
2023-05-19 20:04:31 +02:00
|
|
|
"description" : "Translatable names for this creature",
|
2013-04-02 20:06:43 +03:00
|
|
|
"required" : [ "singular", "plural" ],
|
2023-05-19 20:04:31 +02:00
|
|
|
"properties" : {
|
|
|
|
"singular" : {
|
|
|
|
"type" : "string",
|
|
|
|
"description" : "Singular version"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"plural" : {
|
|
|
|
"type" : "string",
|
|
|
|
"description" : "Plural version"
|
2013-04-02 20:06:43 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"faction" : {
|
2013-04-11 22:24:14 +03:00
|
|
|
"type" : "string",
|
2023-05-19 20:04:31 +02:00
|
|
|
"description" : "Faction this creature belongs to. Examples: castle, rampart"
|
2013-04-11 22:24:14 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"level" : { "type" : "number"},
|
|
|
|
"upgrades" : {
|
2013-04-11 22:24:14 +03:00
|
|
|
"type" : "array",
|
2023-05-19 20:04:31 +02:00
|
|
|
"description" : "List of creatures to which this one can be upgraded",
|
|
|
|
"items" : { "type" : "string" }
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"cost" : {
|
|
|
|
"type" : "object",
|
2013-04-11 22:24:14 +03:00
|
|
|
"additionalProperties" : false,
|
2023-05-19 20:04:31 +02: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 20:14:01 +02:00
|
|
|
"gems" : { "type" : "number"}
|
2013-04-02 20:06:43 +03:00
|
|
|
}
|
|
|
|
},
|
2023-05-19 20:04:31 +02: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 22:24:14 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"shots" : { "type" : "number" },
|
|
|
|
"spellPoints" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "Spell points this creature has (usually equal to number of casts)"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"doubleWide" : {
|
|
|
|
"type" : "boolean",
|
|
|
|
"description" : "If set, creature will be two tiles wide on battlefield"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"fightValue" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : " \"value\" of creature, used to determine for example army strength"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"aiValue" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "Describes how valuable this creature is to AI. Usually similar to fightValue"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"growth" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "Basic growth of this creature in town or in external dwellings"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"horde" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "Bonus growth of this creature from built horde"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"advMapAmount" : {
|
|
|
|
"type" : "object",
|
2013-04-11 22:24:14 +03:00
|
|
|
"additionalProperties" : false,
|
2013-04-02 20:06:43 +03:00
|
|
|
"description" : "Initial size of random stacks on adventure map",
|
2023-05-19 20:04:31 +02:00
|
|
|
"properties" : {
|
|
|
|
"min" : { "type" : "number" },
|
|
|
|
"max" : { "type" : "number" }
|
2013-04-02 20:06:43 +03:00
|
|
|
}
|
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"hasDoubleWeek" : {
|
|
|
|
"type" : "boolean",
|
|
|
|
"description" : "creature may receive \"week of\" events"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"abilities" : {
|
|
|
|
"description" : "Creature abilities described using Bonus system",
|
|
|
|
"type" : "object",
|
|
|
|
"additionalProperties" : {
|
2018-10-30 23:30:56 +02:00
|
|
|
"$ref" : "bonus.json"
|
2013-04-11 22:24:14 +03:00
|
|
|
}
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"abilityText" : {
|
|
|
|
"type" : "string",
|
|
|
|
"description" : "Text version of creature abilities. Used only with original creature window"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"graphics" : {
|
|
|
|
"type" : "object",
|
2013-04-11 22:24:14 +03:00
|
|
|
"additionalProperties" : false,
|
2023-05-19 20:04:31 +02:00
|
|
|
"description" : "Describes how this creature looks like during battles",
|
2013-04-02 20:06:43 +03:00
|
|
|
"required" : [
|
2023-05-19 20:04:31 +02:00
|
|
|
"animation", "animationTime", "timeBetweenFidgets"
|
2013-04-02 20:06:43 +03:00
|
|
|
],
|
2023-05-19 20:04:31 +02:00
|
|
|
"properties" : {
|
|
|
|
"animation" : {
|
|
|
|
"type" : "string",
|
|
|
|
"description" : ".def file with animation of this creature in battles",
|
|
|
|
"format" : "defFile"
|
|
|
|
},
|
|
|
|
"map" : {
|
|
|
|
"type" : "string",
|
|
|
|
"description" : ".def file with animation of this creature on adventure map",
|
|
|
|
"format" : "defFile"
|
|
|
|
},
|
2023-06-20 18:37:03 +02:00
|
|
|
"mapMask" : {
|
|
|
|
"type" : "array",
|
|
|
|
"items" : { "type" : "string" },
|
|
|
|
"description" : "Object mask that describes on which tiles object is visible/blocked/activatable"
|
|
|
|
},
|
2023-05-19 20:04:31 +02: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 22:24:14 +03:00
|
|
|
"additionalProperties" : false,
|
2023-01-28 13:56:51 +02:00
|
|
|
"required" : [ "attack", "walk", "idle" ],
|
2023-05-19 20:04:31 +02:00
|
|
|
"description" : "Length of several animations",
|
|
|
|
"properties" : {
|
|
|
|
"attack" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "attack"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"idle" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "idle"
|
2013-11-06 16:42:58 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"walk" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "walk"
|
2013-04-02 20:06:43 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"missile" : {
|
|
|
|
"type" : "object",
|
2013-04-11 22:24:14 +03:00
|
|
|
"additionalProperties" : false,
|
2022-11-15 21:42:16 +02:00
|
|
|
"required" : [ "frameAngles", "offset", "attackClimaxFrame" ],
|
2023-05-19 20:04:31 +02:00
|
|
|
"description" : "Missile description for archers",
|
|
|
|
"properties" : {
|
|
|
|
"projectile" : {
|
|
|
|
"type" : "string",
|
|
|
|
"description" : "Path to projectile animation",
|
2013-10-26 22:33:34 +03:00
|
|
|
"format" : "defFile"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"ray" : {
|
|
|
|
"type" : "array",
|
|
|
|
"description" : "Colors of ray projectile animation",
|
2022-11-16 12:26:56 +02:00
|
|
|
"minItems" : 1,
|
2023-05-19 20:04:31 +02:00
|
|
|
"items" : {
|
|
|
|
"type" : "object",
|
2022-11-16 12:26:56 +02:00
|
|
|
"required" : [ "start", "end" ],
|
2023-05-19 20:04:31 +02:00
|
|
|
"properties" : {
|
|
|
|
"start" : {
|
|
|
|
"type" : "array",
|
2022-11-16 12:26:56 +02:00
|
|
|
"minItems" : 4,
|
|
|
|
"maxItems" : 4,
|
2023-05-19 20:04:31 +02:00
|
|
|
"items" : {
|
2022-11-16 12:26:56 +02:00
|
|
|
"minimum" : 0,
|
|
|
|
"maximum" : 255,
|
2023-05-19 20:04:31 +02:00
|
|
|
"type" : "number"
|
2022-11-16 12:26:56 +02:00
|
|
|
}
|
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"end" : {
|
|
|
|
"type" : "array",
|
2022-11-16 12:26:56 +02:00
|
|
|
"minItems" : 4,
|
|
|
|
"maxItems" : 4,
|
2023-05-19 20:04:31 +02:00
|
|
|
"items" : {
|
2022-11-16 12:26:56 +02:00
|
|
|
"minimum" : 0,
|
|
|
|
"maximum" : 255,
|
2023-05-19 20:04:31 +02:00
|
|
|
"type" : "number"
|
2022-11-16 12:26:56 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-11-15 21:42:16 +02:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"frameAngles" : {
|
|
|
|
"type" : "array",
|
|
|
|
"description" : "Angles of missile images, should go from 90 to -90",
|
2013-04-02 20:06:43 +03:00
|
|
|
"minItems" : 1,
|
2023-05-19 20:04:31 +02:00
|
|
|
"items" : {
|
2013-04-04 16:18:38 +03:00
|
|
|
"minimum" : -90,
|
|
|
|
"maximum" : 90,
|
2023-05-19 20:04:31 +02:00
|
|
|
"type" : "number"
|
2013-04-04 16:18:38 +03:00
|
|
|
}
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"offset" : {
|
|
|
|
"type" : "object",
|
2013-04-11 22:24:14 +03:00
|
|
|
"additionalProperties" : false,
|
2013-04-02 20:06:43 +03:00
|
|
|
"required" : [ "lowerX", "lowerY", "middleX", "middleY", "upperX", "upperY" ],
|
2023-05-19 20:04:31 +02: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 20:06:43 +03:00
|
|
|
}
|
2013-04-11 22:24:14 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"attackClimaxFrame" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "Frame from attack animation during which creature deals damage"
|
2013-04-02 20:06:43 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"timeBetweenFidgets" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "How often creature will play idling animation"
|
2013-04-02 20:06:43 +03:00
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"troopCountLocationOffset" : {
|
|
|
|
"type" : "number",
|
|
|
|
"description" : "Position of troop count label?"
|
2013-04-02 20:06:43 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2023-05-19 20:04:31 +02:00
|
|
|
"sound" : {
|
|
|
|
"type" : "object",
|
2013-04-11 22:24:14 +03:00
|
|
|
"additionalProperties" : false,
|
2023-05-19 20:04:31 +02:00
|
|
|
"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" }
|
2013-04-02 20:06:43 +03:00
|
|
|
}
|
2023-05-19 20:04:31 +02: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 20:06:43 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|