2024-08-15 20:16:33 +02:00
# Town Building Format
2024-08-17 16:38:37 +02:00
## Required data
2024-08-15 20:16:33 +02:00
Each building requires following assets:
- Town animation file (1 animation file)
- Selection highlight (1 image)
- Selection area (1 image)
- Town hall icon (1 image)
2024-08-17 16:38:37 +02:00
## Examples
These are just a couple of examples of what can be done in VCMI. See vcmi configuration files to check how buildings from Heroes III are implemented or other mods for more examples
####
##### Order of Fire from Inferno:
```jsonc
"special4": {
2024-09-03 18:31:07 +02:00
"requires" : [ "mageGuild1" ],
2024-08-17 16:38:37 +02:00
"name" : "Order of Fire",
"description" : "Increases spellpower of visiting hero",
"cost" : {
2024-09-03 18:31:07 +02:00
"mercury" : 5,
2024-08-17 16:38:37 +02:00
"gold" : 1000
},
"configuration" : {
2024-09-03 18:31:07 +02:00
"visitMode" : "hero",
2024-08-17 16:38:37 +02:00
"rewards" : [
2024-09-03 18:31:07 +02:00
{
// NOTE: this forces vcmi to load string from H3 text file. In order to define own string simply write your own message without '@' symbol
2024-08-17 16:38:37 +02:00
"message" : "@core.genrltxt.582",
"primary" : { "spellpower" : 1 }
}
]
}
}
```
##### Mana Vortex from Dungeon
```jsonc
"special2": {
2024-09-03 18:31:07 +02:00
"requires" : [ "mageGuild1" ],
2024-08-17 16:38:37 +02:00
"name" : "Mana Vortex",
"description" : "Doubles mana points of the first visiting hero each week",
"cost" : {
2024-09-03 18:31:07 +02:00
"gold" : 5000
2024-08-17 16:38:37 +02:00
},
"configuration" : {
2024-09-03 18:31:07 +02:00
"resetParameters" : {
"period" : 7,
2024-08-17 16:38:37 +02:00
"visitors" : true
},
"visitMode" : "once",
"rewards" : [
2024-09-03 18:31:07 +02:00
{
"limiter" : {
"noneOf" : [ { "manaPercentage" : 200 } ]
2024-08-17 16:38:37 +02:00
},
"message" : "As you near the mana vortex your body is filled with new energy. You have doubled your normal spell points.",
"manaPercentage" : 200
}
]
}
}
```
#### Resource Silo with custom production
```jsonc
"resourceSilo": {
2024-09-03 18:31:07 +02:00
"name" : "Wood Resource Silo",
2024-08-17 16:38:37 +02:00
"description" : "Produces 2 wood every day",
"cost" : {
2024-09-03 18:31:07 +02:00
"wood" : 10,
2024-08-17 16:38:37 +02:00
"gold" : 5000
},
"produce" : {
2024-09-03 18:31:07 +02:00
"wood": 2
2024-08-17 16:38:37 +02:00
}
},
```
2024-08-17 17:00:27 +02:00
#### Brotherhood of Sword - bonuses in siege
```jsonc
"special3": {
// replaces +1 Morale bonus from Tavern
"upgradeReplacesBonuses" : true,
// Gives +2 bonus to morale to town (effective only during siege)
"bonuses": [
{
"type": "MORALE",
"val": 2
}
],
"upgrades" : "tavern"
},
```
#### Lighthouse - bonus to all heroes under player control
```jsonc
"special1": {
"bonuses": [
{
"propagator": "PLAYER_PROPAGATOR", // bonus affects everything under player control
"type": "MOVEMENT",
"subtype": "heroMovementSea",
"val": 500 // +500 movement points
}
],
"requires" : [ "shipyard" ]
},
```
2024-08-15 20:16:33 +02:00
## Town Building node
```jsonc
{
// Numeric identifier of this building
"id" : 0,
// Localizable name of this building
"name" : "",
// Localizable decsription of this building
"description" : "",
// Optional, indicates that this building upgrades another base building
"upgrades" : "baseBuilding",
// List of town buildings that must be built before this one. See below for full format
"requires" : [ "allOf", [ "mageGuild1" ], [ "tavern" ] ],
// Resources needed to build building
"cost" : {
"wood" : 20,
"ore" : 20,
"gold" : 10000
},
2024-08-23 17:29:47 +02:00
// Artifact ID of a war machine produced in this town building, if any
"warMachine" : "ballista",
2024-08-15 20:16:33 +02:00
// Allows to define additional functionality of this building, usually using logic of one of original H3 town building
// Generally only needs to be specified for "special" buildings
// See 'List of unique town buildings' section below for detailed description of this field
"type" : "",
// If set, building will have Lookout Tower logic - extend sight radius of a town.
// Possible values:
// low - increases town sight radius by 5 tiles
// average - sight radius extended by 15 tiles
// high - sight radius extended by 20 tiles
// skyship - entire map will be revealed
// If not set, building will not affect sight radius of a town
"height" : "average"
// Resources produced each day by this building
"produce" : {
"sulfur" : 1,
"gold" : 2000
2024-08-28 21:33:56 +02:00
},
// Optional, allows this building to add fortifications during siege
"fortifications" : {
// Maximum health of destructible walls. Walls are only present if their health is above zero".
// Presence of walls is required for all other fortification types
"wallsHealth" : 3,
// If set to true, moat will be placed in front of the walls. Requires walls presence.
"hasMoat" : true
// Maximum health of central tower or 0 if not present. Requires walls presence.
"citadelHealth" : 2,
// Maximum health of upper tower or 0 if not present. Requires walls presence.
"upperTowerHealth" : 2,
// Maximum health of lower tower or 0 if not present. Requires walls presence.
"lowerTowerHealth" : 2,
// Creature ID of shooter located in central keep (citadel). Used only if citadel is present.
"citadelShooter" : "archer",
// Creature ID of shooter located in upper tower. Used only if upper tower is present.
"upperTowerShooter" : "archer",
// Creature ID of shooter located in lower tower. Used only if lower tower is present.
"lowerTowerShooter" : "archer",
},
2024-08-15 20:16:33 +02:00
2024-08-28 21:33:56 +02:00
//determine how this building can be built. Possible values are:
2024-08-15 20:16:33 +02:00
// normal - default value. Fulfill requirements, use resources, spend one day
// auto - building appears when all requirements are built
// special - building can not be built manually
// grail - building requires grail to be built
"mode" : "auto",
// Buildings which bonuses should be overridden with bonuses of the current building
"overrides" : [ "anotherBuilding ]
2024-09-03 18:31:07 +02:00
// Bonuses provided by this special building if this building or any of its upgrades are constructed in town
"bonuses" : [ BONUS_FORMAT ]
// If set to true, this building will not automatically activate on new day or on entering town and needs to be activated manually on click
2024-09-15 12:36:31 +02:00
// Note that such building can only be activated by visiting hero, and not by garrisoned hero.
2024-09-03 18:31:07 +02:00
"manualHeroVisit" : false,
// Bonuses provided by this special building if this building or any of its upgrades are constructed in town
2024-08-17 16:38:37 +02:00
"bonuses" : [ BONUS_FORMAT ]
2024-08-15 20:16:33 +02:00
2024-08-20 22:36:31 +02:00
// If the building is a market, it requires market mode.
"marketModes" : [ "resource-resource", "resource-player" ],
2024-08-15 20:16:33 +02:00
}
```
Building requirements can be described using logical expressions:
```jsonc
"requires" :
[
2024-09-03 18:31:07 +02:00
"allOf", // Normal H3 "build all" mode
[ "mageGuild1" ],
[
"noneOf", // available only when none of these building are built
[ "dwelling5A" ],
[ "dwelling5AUpgrade" ]
],
[
"anyOf", // any non-zero number of these buildings must be built
[ "tavern" ],
[ "blacksmith" ]
]
2024-08-15 20:16:33 +02:00
]
```
### List of unique town buildings
2024-08-17 16:38:37 +02:00
#### Buildings from Heroes III
Following Heroes III buildings can be used as unique buildings for a town. Their functionality should be identical to a corresponding H3 building. H3 buildings that are not present in this list contain no hardcoded functionality. See vcmi json configuration to see how such buildings can be implemented in a mod.
2024-08-15 20:16:33 +02:00
- `mysticPond`
- `artifactMerchant`
- `freelancersGuild`
- `magicUniversity`
- `castleGate`
- `creatureTransformer`
- `portalOfSummoning`
- `library`
- `escapeTunnel`
- `treasury`
2024-08-17 16:38:37 +02:00
#### Buildings from other Heroes III mods
2024-08-15 20:16:33 +02:00
Following HotA buildings can be used as unique building for a town. Functionality should match corresponding HotA building:
- `bank`
2024-08-17 16:38:37 +02:00
#### Custom buildings
In addition to above, it is possible to use same format as [Rewardable ](../Map_Objects/Rewardable.md ) map objects for town buildings. In order to do that, configuration of a rewardable object must be placed into `configuration` json node in building config.
2024-08-15 20:16:33 +02:00
### Town Structure node
```jsonc
{
// Main animation file for this building
"animation" : "",
// Horizontal position on town screen
"x" : 0,
// Vertical position on town screen
"y" : 0,
// used for blit order. Higher value places structure close to screen and drawn on top of buildings with lower values
"z" : 0,
// Path to image with golden border around building, displayed when building is selected
"border" : "",
// Path to image with area that indicate when building is selected
"area" : "",
//TODO: describe me
"builds": "",
// If upgrade, this building will replace parent animation but will not alter its behaviour
"hidden" : false
}
2024-08-17 16:38:37 +02:00
```
2024-08-20 22:36:31 +02:00
#### Markets in towns
Market buildings require list of available [modes ](../Map_Objects/Market.md )
##### Marketplace
```jsonc
"marketplace": { "marketModes" : ["resource-resource", "resource-player"] },
```
##### Artifact merchant
```jsonc
"special1": { "type" : "artifactMerchant", "requires" : [ "marketplace" ], "marketModes" : ["resource-artifact", "artifact-resource"] },
```