Difference between revisions of "Creature Format"
From VCMI Project Wiki
(changed damage, advMapAmount syntax) |
(added json schema) |
||
Line 3: | Line 3: | ||
todo: | todo: | ||
* remove deprecated attributes once implemented in town config | * remove deprecated attributes once implemented in town config | ||
− | |||
* creature experience | * creature experience | ||
+ | * abilities exact syntax | ||
Creature abilities use [[Bonus Format]]. | Creature abilities use [[Bonus Format]]. | ||
+ | |||
+ | Json schema (see http://json-schema.org/) | ||
+ | <pre> | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "name" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "singular" : | ||
+ | { | ||
+ | "type" : "string" | ||
+ | }, | ||
+ | "plural" : | ||
+ | { | ||
+ | "type" : "string" | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | "level" : | ||
+ | { | ||
+ | "type" : "integer" | ||
+ | }, | ||
+ | "faction" : | ||
+ | { | ||
+ | "type" : "string" | ||
+ | }, | ||
+ | "cost" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | } | ||
+ | }, | ||
+ | "fightValue" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | }, | ||
+ | "aiValue" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | }, | ||
+ | "growth" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 1 | ||
+ | }, | ||
+ | "hitPoints" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 1 | ||
+ | }, | ||
+ | "speed" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | }, | ||
+ | "attack" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | }, | ||
+ | "defence" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | }, | ||
+ | "shots" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0, | ||
+ | "default" : 0 | ||
+ | }, | ||
+ | "spellPoints" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0, | ||
+ | "default" : 0 | ||
+ | }, | ||
+ | "doubleWide" : | ||
+ | { | ||
+ | "type" : "boolean", | ||
+ | "default" : false | ||
+ | }, | ||
+ | "damage" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "min" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | }, | ||
+ | "max" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | "advMapAmount" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "min" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | }, | ||
+ | "max" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "minimum" : 0 | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | "upgrades" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : | ||
+ | { | ||
+ | "type" : "boolean" | ||
+ | } | ||
+ | }, | ||
+ | "graphics" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "animation" : | ||
+ | { | ||
+ | "type" : "string" | ||
+ | }, | ||
+ | "timeBetweenFidgets" : | ||
+ | { | ||
+ | "type" : "number", | ||
+ | "default" : 1.0 | ||
+ | }, | ||
+ | "troopCountLocationOffset" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "default" : 0 | ||
+ | }, | ||
+ | "animationTime" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "walk" : | ||
+ | { | ||
+ | "type" : "number", | ||
+ | "default" : 1.0 | ||
+ | }, | ||
+ | "attack" : | ||
+ | { | ||
+ | "type" : "number", | ||
+ | "default" : 1.0 | ||
+ | }, | ||
+ | "flight" : | ||
+ | { | ||
+ | "type" : "number", | ||
+ | "default" : 1.0 | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | "background" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "120" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | }, | ||
+ | "130" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | "missile" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "animation" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | }, | ||
+ | "spinning" : | ||
+ | { | ||
+ | "type" : "boolean", | ||
+ | "default" : false | ||
+ | }, | ||
+ | "offset" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "upperX" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "default" : 0 | ||
+ | }, | ||
+ | "upperY" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "default" : 0 | ||
+ | }, | ||
+ | "middleX" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "default" : 0 | ||
+ | }, | ||
+ | "middleY" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "default" : 0 | ||
+ | }, | ||
+ | "lowerX" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "default" : 0 | ||
+ | }, | ||
+ | "lowerY" : | ||
+ | { | ||
+ | "type" : "integer", | ||
+ | "default" : 0 | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | "frameAngles" : | ||
+ | { | ||
+ | "type" : "array", | ||
+ | "additionalItems" : false, | ||
+ | "items" : | ||
+ | { | ||
+ | "type" : "number" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | "sound" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "attack" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | }, | ||
+ | "defend" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | }, | ||
+ | "killed" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | }, | ||
+ | "move" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | }, | ||
+ | "moveStart" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | }, | ||
+ | "moveEnd" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | }, | ||
+ | "shoot" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | }, | ||
+ | "wince" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | "abilities" : | ||
+ | { | ||
+ | "type" : ["object", "null"], | ||
+ | "additionalProperties" : | ||
+ | { | ||
+ | "type" : "object", | ||
+ | "additionalProperties" : false, | ||
+ | "properties" : | ||
+ | { | ||
+ | "type" : | ||
+ | { | ||
+ | "type" : "string" | ||
+ | }, | ||
+ | "subtype" : | ||
+ | { | ||
+ | "type" : "integer" | ||
+ | }, | ||
+ | "value" : | ||
+ | { | ||
+ | "type" : "integer" | ||
+ | }, | ||
+ | "valueType" : | ||
+ | { | ||
+ | "type" : "string" | ||
+ | }, | ||
+ | "addInfo" : | ||
+ | { | ||
+ | "type" : "integer" | ||
+ | }, | ||
+ | "effectRange" : | ||
+ | { | ||
+ | "type" : "integer" | ||
+ | }, | ||
+ | "description" : | ||
+ | { | ||
+ | "type" : "string", | ||
+ | "default" : "" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
long version (83 lines): | long version (83 lines): |
Revision as of 16:18, 27 August 2012
This is only a proposal and not official information by the VCMI team. See thread http://forum.vcmi.eu/viewtopic.php?t=533.
todo:
- remove deprecated attributes once implemented in town config
- creature experience
- abilities exact syntax
Creature abilities use Bonus Format.
Json schema (see http://json-schema.org/)
{ "type" : "object", "additionalProperties" : { "type" : "object", "additionalProperties" : false, "properties" : { "name" : { "type" : "object", "additionalProperties" : false, "properties" : { "singular" : { "type" : "string" }, "plural" : { "type" : "string" } } }, "level" : { "type" : "integer" }, "faction" : { "type" : "string" }, "cost" : { "type" : "object", "additionalProperties" : { "type" : "integer", "minimum" : 0 } }, "fightValue" : { "type" : "integer", "minimum" : 0 }, "aiValue" : { "type" : "integer", "minimum" : 0 }, "growth" : { "type" : "integer", "minimum" : 1 }, "hitPoints" : { "type" : "integer", "minimum" : 1 }, "speed" : { "type" : "integer", "minimum" : 0 }, "attack" : { "type" : "integer", "minimum" : 0 }, "defence" : { "type" : "integer", "minimum" : 0 }, "shots" : { "type" : "integer", "minimum" : 0, "default" : 0 }, "spellPoints" : { "type" : "integer", "minimum" : 0, "default" : 0 }, "doubleWide" : { "type" : "boolean", "default" : false }, "damage" : { "type" : "object", "additionalProperties" : false, "properties" : { "min" : { "type" : "integer", "minimum" : 0 }, "max" : { "type" : "integer", "minimum" : 0 } } }, "advMapAmount" : { "type" : "object", "additionalProperties" : false, "properties" : { "min" : { "type" : "integer", "minimum" : 0 }, "max" : { "type" : "integer", "minimum" : 0 } } }, "upgrades" : { "type" : "object", "additionalProperties" : { "type" : "boolean" } }, "graphics" : { "type" : "object", "additionalProperties" : false, "properties" : { "animation" : { "type" : "string" }, "timeBetweenFidgets" : { "type" : "number", "default" : 1.0 }, "troopCountLocationOffset" : { "type" : "integer", "default" : 0 }, "animationTime" : { "type" : "object", "additionalProperties" : false, "properties" : { "walk" : { "type" : "number", "default" : 1.0 }, "attack" : { "type" : "number", "default" : 1.0 }, "flight" : { "type" : "number", "default" : 1.0 } } }, "background" : { "type" : "object", "additionalProperties" : false, "properties" : { "120" : { "type" : "string", "default" : "" }, "130" : { "type" : "string", "default" : "" } } }, "missile" : { "type" : "object", "additionalProperties" : false, "properties" : { "animation" : { "type" : "string", "default" : "" }, "spinning" : { "type" : "boolean", "default" : false }, "offset" : { "type" : "object", "additionalProperties" : false, "properties" : { "upperX" : { "type" : "integer", "default" : 0 }, "upperY" : { "type" : "integer", "default" : 0 }, "middleX" : { "type" : "integer", "default" : 0 }, "middleY" : { "type" : "integer", "default" : 0 }, "lowerX" : { "type" : "integer", "default" : 0 }, "lowerY" : { "type" : "integer", "default" : 0 } } }, "frameAngles" : { "type" : "array", "additionalItems" : false, "items" : { "type" : "number" } } } } } }, "sound" : { "type" : "object", "additionalProperties" : false, "properties" : { "attack" : { "type" : "string", "default" : "" }, "defend" : { "type" : "string", "default" : "" }, "killed" : { "type" : "string", "default" : "" }, "move" : { "type" : "string", "default" : "" }, "moveStart" : { "type" : "string", "default" : "" }, "moveEnd" : { "type" : "string", "default" : "" }, "shoot" : { "type" : "string", "default" : "" }, "wince" : { "type" : "string", "default" : "" } } }, "abilities" : { "type" : ["object", "null"], "additionalProperties" : { "type" : "object", "additionalProperties" : false, "properties" : { "type" : { "type" : "string" }, "subtype" : { "type" : "integer" }, "value" : { "type" : "integer" }, "valueType" : { "type" : "string" }, "addInfo" : { "type" : "integer" }, "effectRange" : { "type" : "integer" }, "description" : { "type" : "string", "default" : "" } } } } } } }
long version (83 lines):
{ "" : // name (for configs), should be camel case version of interface name. Examples: Pikeman, RoyalGriffin { // mandatory "name" : { "singular" : "", "plural" : "" }, "level" : 0, "faction" : "", // config name of faction. Examples: Castle, Rampart "cost" : // cost, zero values can be omitted. Keys are the ids of the resources { "Wood" : 0, "Mercury" : 0, "Ore" : 0, "Sulfur" : 0, "Crystal" : 0, "Gems" : 0, "Gold" : 0 }, "fightValue" : 0, "aiValue" : 0, "growth" : 0, "hitPoints" : 0, "speed" : 0, "attack" : 0, "defence" : 0, "damage" : { "min" : 0, "max" : 0 }, "advMapAmount" : { "min" : 0, "max" : 0 }, "graphics" : { "animation" : "" // name of def file }, // optional "upgrades" : {}, // keys are ids of creatures that this can be upgraded to. Values are true or false "doubleWide" : false, "shots" : 0, "spellPoints" : 0, "abilities" : { }, "graphics" : { "timeBetweenFidgets" : 1.00, "troopCountLocationOffset" : 0, "attackClimaxFrame" : 0, "animationTime" : { "walk" : 1.00, "attack" : 1.00, "flight" : 1.00 }, "background" : { "120" : "", // if empty, uses faction background "130" : "" // if empty, uses faction background }, "missile" : { "animation" : "", // name of def file for missile "spinning" : false, "offset" : { "upperX" : 0, "upperY" : 0, "middleX" : 0, "middleY" : 0, "lowerX" : 0, "lowerY" : 0 }, "frameAngles" : [] } }, "sound" : // names of sound files { "attack": "", "defend": "", "killed": "", "move": "", "shoot" : "", "wince": "", "moveStart" : "", "moveEnd" : "" }, // deprecated, move to town config "hordeGrowth" : 0, // growth bonus from horde building "turretShooter" : false // if used in turret }, // more creatures }
pikeman long (39 lines):
{ "Pikeman" : { "name" : { "singular" : "Pikeman", "plural" : "Pikemen" }, "level" : 1, "faction" : "Castle", "upgrades" : { "Halberdier" : true }, "cost" : { "Gold" : 60 }, "fightValue" : 100, "aiValue" : 80, "growth" : 14, "hitPoints" : 10, "speed" : 4, "attack" : 4, "defence" : 5, "damage" : { "min" : 1, "max" : 3 }, "advMapAmount" : { "min" : 20, "max" : 50 }, "abilities" : // this is subject to change { "CHARGE_IMMUNITY" : {} }, "graphics" : { "animation" : "CPKMAN.DEF", "animationTime" : { "walk" : 1.15 } }, "sound" : { "attack": "PIKEATTK.wav", "defend": "PIKEDFND.wav", "killed": "PIKEKILL.wav", "move": "PIKEMOVE.wav", "wince": "PIKEWNCE.wav" } } }