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,
// Battleground that will be used for combats in this object. Overrides terrain this object was placed on
"battleground" : "cursed_ground",
// 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
}
}