1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00
vcmi/config/schemas/creature.json
2024-02-26 12:55:49 +02:00

305 lines
8.6 KiB
JSON

{
"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"
}
}
},
"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."
}
}
}