Object Format

From VCMI Project Wiki
Revision as of 14:11, 16 May 2014 by Ivan (talk | contribs) (Object group format)
Jump to: navigation, search

Description

Work-in-progress draft, not implemented in code

Full object consists from 3 parts:

  • Object group - set of objects that have similar behavior and share same identifier in H3 (towns, heroes, mines, etc)
  • Object type - object with fixed behavior but without fixed appearance. Multiple objects types may share same group
  • Object template - defines appearance of an object - image used to display it, its size & blockmap. These entries only describe templates that will be used when object is placed via map editor or generated by the game. When new object is created its starting appearance will be copied from template

Object group format

{
	"myCoolObjectGroup":
	{
		//numeric ID, mandatory for h3/wog objects, shall be unique if not defined
		//used only for H3 objects, mods can not be used by mods
		"id":123,

		//Mandatory for new objects,
		// human readable name, localized 
		//default for original objects from "OBJNAMES.TXT" 
		"name": "My cool object",

		//defines C++/script class name that handles behavior of this object
		"handler" : "CGMine",

		// default values, will be merged with each type during loading
		"base" : { <object type format> },

		"types" : {
			<list of object types, see below>
		}
	}
}

Object type format

{
	"myCoolObject":
	{
		//numeric sub ID, mandatory for h3/wog objects, shall be unique if set
		//used only for H3 objects, can not be used by mods
		"id":123,

		// parameters that will be passed over to class that controls behavior of the object
		"producedResources" : "gold",
		"producedValue" : 1000

		// TODO: allow better selection of template for object, instead of just terrain
		// field describes how object template will be selected if there are multiple possiblities
		// exact behavior and format depends on object type
		"filter" : { ... },

		// default values, will be merged with each template during loading
		// mostly needed to avoid redefining whole template to change 1-2 fields
		"base" : { <template format> },

		"templates" : {
			<templates description, see below>
		}
	}
}

Object template format

{
	"myCoolObjectTemplate" : 
	{
		// resource ID  of animation, relative to SPRITES directory (def file or json file)
		"animation":"DEFNAME.def",

		// directions from which hero can visit this object.
		// "+" means that object can be visited from that direction, or "-" othervice
		// if central symbol is "+" then object is visitable by standing on it (most of buildings)
		// if central symbol is "-" then object is visitable only from adjacent tiles (most of pickable objects)
		// TODO: maybe replace with "modes"?
		// building (all but top), 
		// pathway (building that can be passed from top, like garrisons)
		// pickables (visitable from all sides)
		// decorations (not visitable)
		"visitableFrom" : [
			"---",
			"+++",
			"+++"
		],

		// passability of the object
		// 0=not visible, passable
		// V=visible, passable
		// B=blocked, visible
		// H=hidden - blocked, not visible tile
		// A=activable, visible, passable depending on visitableFrom field
		// T=trigger - visiting the tile will trigger the object, tile is not visible (e.g. event)
		//top and left leading zeros are optional and in fact ignored
		//bottom, right corner of mask = bottom right corner of animation frame
		//animation can not be larger than size of mask
		"mask":[
			"00000000",
			"00000000",
			"00000000",
			"0000VVVV",
			"0000HBBB",
			"0000HHAT"
		],

		// optional; default or if explicitly set to null: all terrains except rock
		// allowed terrain types to place object too. Affects also RMG.
		// Note that map editor will still allow to place object on other terrains
		"allowedTerrains":["dirt", "sand"],

		// TODO, optional; default: all terrains except rock
		// tags from object type are always present (???)
		// List of tags that can be used to locate object in map editor
		"tags":["dirt", "sand", "mine"],

		//zindex, defines order in which objects on same tile will be blit. optional, default is 0 
		//NOTE: legacy overlay objects has zindex = -1.000.000
		"zIndex": 0
	}
]}

Modding related articles

Main articles
Modding changelog Modding guidelines Mod Handler


Formats
Mod file Format
Town Format Creature Format Hero Classes Format
Artifact Format Animation Format Hero Format
Bonus Format Object Format Spell Format


Work-in-progress formats
Building bonuses Map format
Bonus Type Format Random map template


Outdated pages
Mod system proposal