Creature Format

From VCMI Project Wiki
Revision as of 11:13, 25 September 2012 by Warmonger (talk | contribs)
Jump to: navigation, search

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):

{
    {
        // mandatory
        "name" :
        {
            "reference" : "", // name (for configs), should be camel case version of interface name. Examples: Pikeman, RoyalGriffin. Do not change after its released
            "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 names of creatures that this can be upgraded to
        "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"
        }
    }
}