Full object consists from 3 parts:
{
	"myCoolObjectGroup":
	{
		// Mandatory for new objects,
		// human readable name, localized 
		"name": "My cool object",
		//defines C++/script class name that handles behavior of this object
		"handler" : "mine",
		// default values, will be merged with each type during loading
		"base" : { <object type format> },
		"types" : {
			<list of object types, see below>
		}
	}
}
{
	"myCoolObject":
	{
		// Additional parameters that will be passed over to class that controls behavior of the object
		// See object-specific properties of different object types
		"propertyA" : "value",
		"propertyB" : 12345
		// How valuable this object is to AI
		"aiValue" : 1000,
		
		// Sounds assigned to this object
		"sounds" : {
			// Ambient sounds that plays when current hero is near this object
			"ambient" : [ "" ],
			// Sounds that plays when hero visits this object
			"visit" : [ "" ],
			// Sounds that play when this object is removed from the map
			"removal" : [ "" ],
		},
		// Data for random map generator that describes how object should be placed.
		// If this entry is missing object will not be placed by RMG
		"rmg" : {
			// How valuable this object is, 1k = worthless, 20k = relic level
			"value" : 5000,
			// Optional, how many of such objects can be placed on map
			"mapLimit" : 25,
			// Optional, how many of such objects can be placed in one zone
			"zoneLimit" : 4,
			// Rarity of object, 10 = rare, 100 = common
			"rarity" : 50
		}
		// 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>
		}
	}
}
{
	"myCoolObjectTemplate" : 
	{
		// Path to def file with animation of this object
		"animation":"DEFNAME.def",
		// Optional path to def file with animation of this object to use in map editor
		"editorAnimation":"DEFNAME.def",
		// Directions from which hero can visit this object.
		// "+" means that object can be visited from that direction, or "-" othervice
		// default not visitable
		"visitableFrom" : [
			"---",
			"+++",
			"+++"
		],
		// passability of the object
		// 0=not visible, passable. Space symbol ' ' can be used as well
		// 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 "land" terrains (e.g. not rock and not water)
		// allowed terrain types to place object to. Affects also RMG.
		// Note that map editor will still allow to place object on other terrains
		// allowed terrain types: "dirt", "sand", "grass", "snow", "swamp", "rough", "subterra", "lava", "water", "rock"
		"allowedTerrains":["dirt", "sand"],
		//zindex, defines order in which objects on same tile will be blit. optional, default is 0 
		//NOTE: legacy overlay objects has zindex = 100
		"zIndex": 0
	}
}