Settlements
- API
- Calradia World Map Castles
- Calradia World Map Villages
- Town Scenes by d&h
- Castle Scenes by d&h
- Village Scenes by d&h
- Hideout Scenes by d&h
Gold
Settlement.SetttlementComponent.Gold
Current Settlement we are at
Owner
Settlement.Owner (hero)
The settlement hero is at currently
Hero.CurrentSettlement
Notables
Type of Settlement
bool value
.IsTown
.IsCastle
.IsVillage
.IsHideout
.IsFortification (Town OR Castle)
Siege
bool IsUnderSiege [get]
SiegeEvent SiegeEvent [get, set]
Granary/food
How much food in the granary:
Max granary amount:
Build projects
Current build project:
Progress percent:
Days to complete:
Building tier:
Buildings in the queue:
Gold in Reserve:
Construction / "Bricks"
Construction Cost
Building progress - how much is built
Is building default project?
Town
Applies to towns AND castles
TradeBoundVillages
Wall Level
Village
GetItemPrice
int GetItemPrice(ItemObject item, MobileParty tradingParty = null, bool isSelling = false)
return this.TradeBound.Town.MarketData.GetPrice(itemRosterElement, tradingParty, isSelling, null);
VillageState
- Normal
- BeingRaided
- ForcedForVolunteers
- ForcedForSupplies
- Looted (same as .IsDeserted)
TradeBound
Returns Town to which the Village is trade bound.
Levels
Village has 3 visual levels. Level depends on hearths:
- Lvl 1 - hearths 1..199
- Lvl 2 - 200-599
- Lvl 3 - 600+
Change village hearths method example
XML
To be able to change the owner of the settlement in your mod, you need such files:
- settlements.xml
- settlements.xslt
- CUSTOM_settlements.xml
settlements.xml - full if you are working with the Editor, because Editor requires this file and overwrites it with every map save
settlements.xslt - to delete settlements.xml
CUSTOM_settlements.xml - to apply your changes.
What is interesting/weird - if you change name in the settlements.xml - the name of the settlement is changed in the game. But if you change the owner - owner is not changed. Owner is only changed in CUSTOM_settlements.xml, where 'CUSTOM' can be anything.
SubModule.xml should include:
<XmlNode>
<XmlName id="Settlements" path="settlements"/>
<IncludedGameTypes>
<GameType value = "Campaign"/>
<GameType value = "CampaignStoryMode"/>
<GameType value = "CustomGame"/>
<GameType value = "EditorGame"/>
</IncludedGameTypes>
</XmlNode>
<XmlNode>
<XmlName id="Settlements" path="CUSTOM_settlements"/>
<IncludedGameTypes>
<GameType value = "Campaign"/>
<GameType value = "CampaignStoryMode"/>
<GameType value = "CustomGame"/>
<GameType value = "EditorGame"/>
</IncludedGameTypes>
</XmlNode>
Never make changes to the CUSTOM_settlements.xml
Make changes to the settlemens.xml, then make file copy to the CUSTOM_settlements.xml. Otherwise files will be different and Editor uses settlemens.xml and if you change something on the map, changes will go to settlements.xml, it's get deleted with xslt and your CUSTOM file will be used with mismatching map and you will get a crash.
Village Production
VillageType.silk_plant
VillageType.cattle_farm
VillageType.silver_mine
VillageType.iron_mine
VillageType.lumberjack
VillageType.wheat_farm
VillageType.fisherman
VillageType.europe_horse_ranch
VillageType.sheep_farm
VillageType.flax_plant
VillageType.vineyard
VillageType.date_farm
VillageType.olive_trees
VillageType.swine_farm
VillageType.clay_mine
VillageType.trapper
VillageType.desert_horse_ranch
VillageType.sturgian_horse_ranch
VillageType.salt_mine
VillageType.steppe_horse_ranch
VillageType.vlandian_horse_ranch
VillageType.battanian_horse_ranch
background_mesh
Size: 100x100
SpriteCategory Name="ui_fullbackgrounds"
Note: name of the sprite is with the '_t' at the end: PNG file gui_bg_village_baltic_t.png but in the settlements.xml it's gui_bg_village_baltic
Image for the settlement small icon in the Encyclopedia:
wait_mesh
Size: 445x805
SpriteCategory Name="ui_fullbackgrounds"
Image for the settlement menu and in the Encyclopedia:
background_crop_position
Not used
SettlementComponent
public float BackgroundCropPosition { get; protected set; }
Village
public override void Deserialize(MBObjectManager objectManager, XmlNode node)
base.BackgroundCropPosition = float.Parse(node.Attributes["background_crop_position"].Value);
EmcyclopediaSettlementPageVM
[DataSourceProperty]
public double SettlementCropPosition
{
get
{
return this._settlementCropPosition;
}
set
{
if (value != this._settlementCropPosition)
{
this._settlementCropPosition = value;
base.OnPropertyChangedWithValue(value, "SettlementCropPosition");
}
}
}
castle_background_mesh
Not used
and CastleBackgroundMeshName is not used anywhere else.Settlements Distance Cache
If you add new settlements, or relocate existing ones, you will need to recalculate settlements_distance_cache.bin which the game uses to optimise AI path finding between different settlements.
From my observation: when adding new settlements it's not necessary to recalculate it, game works as it is. It is necessary to recalculate at the end (when all settlements are added) for performance.
The game crashes if settlements.xml and settlements_distance_cache.bin are incompatible.
settlements_distance_cache.bin
Editor does not generate it by default on map save.
If settlements_distance_cache.bin is missing:
- v1.2.6b - it is generated by the game, when game starts. Visible in the log.
- v1.2.7 - it is not generated by the game and needs to be manually generated from the Editor.
Can be regenerated with the Editor using SettlementPositionScript
Load time can be long with wrong settlements_distance_cache.bin. Regenerate to solve it.