2023-08-12 11:39:44 +02:00
|
|
|
## Description
|
|
|
|
|
|
|
|
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
|
|
|
|
|
2023-09-12 18:58:15 +02:00
|
|
|
## Object types
|
2023-09-01 12:14:05 +02:00
|
|
|
|
|
|
|
- [Rewardable](Map_Objects/Rewardable.md) - Visitable object which grants all kinds of rewards (gold, experience, Bonuses etc...)
|
|
|
|
- [Creature Bank](Map_Objects/Creature_Bank.md) - Object that grants award on defeating guardians
|
|
|
|
- [Dwelling](Map_Objects/Dwelling.md) - Object that allows recruitments of units outside of towns
|
|
|
|
- [Market](Map_Objects/Market.md) - Trading resources, artifacts, creatures and such
|
|
|
|
- [Boat](Map_Objects/Boat.md) - Object to move across different terrains, such as water
|
2023-08-12 11:39:44 +02:00
|
|
|
|
|
|
|
## Object group format
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
|
|
|
|
{
|
|
|
|
"myCoolObjectGroup":
|
|
|
|
{
|
2023-09-12 18:58:15 +02:00
|
|
|
// Mandatory for new objects,
|
2023-08-12 11:39:44 +02:00
|
|
|
// 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>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Object type format
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
{
|
|
|
|
"myCoolObject":
|
|
|
|
{
|
2023-09-12 18:58:15 +02:00
|
|
|
// Additonal 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" : [ "" ],
|
|
|
|
},
|
2023-08-12 11:39:44 +02:00
|
|
|
|
|
|
|
// 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>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Object template format
|
|
|
|
|
|
|
|
``` javascript
|
|
|
|
{
|
|
|
|
"myCoolObjectTemplate" :
|
|
|
|
{
|
2023-09-12 18:58:15 +02:00
|
|
|
// Path to def file with animation of this object
|
2023-08-12 11:39:44 +02:00
|
|
|
"animation":"DEFNAME.def",
|
|
|
|
|
2023-09-12 18:58:15 +02:00
|
|
|
// Optional path to def file with animation of this object to use in map editor
|
2023-08-12 11:39:44 +02:00
|
|
|
"editorAnimation":"DEFNAME.def",
|
|
|
|
|
2023-09-12 18:58:15 +02:00
|
|
|
// Directions from which hero can visit this object.
|
2023-08-12 11:39:44 +02:00
|
|
|
// "+" 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"
|
|
|
|
],
|
|
|
|
|
2023-09-12 18:58:15 +02:00
|
|
|
// 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.
|
2023-08-12 11:39:44 +02:00
|
|
|
// Note that map editor will still allow to place object on other terrains
|
2023-09-12 18:58:15 +02:00
|
|
|
// allowed terrain types: "dirt", "sand", "grass", "snow", "swamp", "rough", "subterra", "lava", "water", "rock"
|
2023-08-12 11:39:44 +02:00
|
|
|
"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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|