From 9bb9ff8b166388a97006869d067735d9b28565a0 Mon Sep 17 00:00:00 2001 From: Freagarach Date: Thu, 24 Nov 2022 11:20:11 +0000 Subject: [PATCH] Add Requirements helper. Allows more flexibility in e.g. the Identity requirements and unifies the checking of requirements. One can use the script at https://code.wildfiregames.com/P265 to fix templates. Differential revision: https://code.wildfiregames.com/D4514 Comments by: @elexis, @Stan Fixes #6421 This was SVN commit r27245. --- .../mods/public/globalscripts/Templates.js | 6 +- .../data/mods/public/gui/common/tooltips.js | 13 +- .../gui/reference/common/TemplateLoader.js | 4 +- .../gui/reference/common/TemplateParser.js | 18 +- .../playercontrols/SpyRequestButton.js | 10 +- .../public/gui/session/selection_panels.js | 28 +- .../public/simulation/ai/common-api/entity.js | 26 +- .../simulation/ai/petra/headquarters.js | 2 +- .../simulation/ai/petra/queueplanBuilding.js | 2 +- .../simulation/components/GuiInterface.js | 14 +- .../public/simulation/components/Identity.js | 4 +- .../components/TechnologyManager.js | 4 +- .../public/simulation/components/Upgrade.js | 19 +- .../components/tests/test_Identity.js | 5 +- .../tests/test_UpgradeModification.js | 1 + .../public/simulation/helpers/Commands.js | 5 +- .../public/simulation/helpers/Requirements.js | 164 ++++ .../helpers/tests/test_Requirements.js | 718 ++++++++++++++++++ .../templates/gaia/fauna_pig_trainable.xml | 6 +- .../simulation/templates/special/spy.xml | 4 +- .../templates/structures/athen/gymnasium.xml | 4 +- .../templates/structures/brit/crannog.xml | 4 +- .../templates/structures/cart/apartment.xml | 10 +- .../structures/cart/wallset_short.xml | 4 +- .../templates/structures/gaul/assembly.xml | 4 +- .../templates/structures/gaul/tavern.xml | 4 +- .../templates/structures/han/academy.xml | 4 +- .../templates/structures/han/civil_centre.xml | 4 +- .../structures/han/civil_centre_court.xml | 4 +- .../structures/han/defense_tower.xml | 26 +- .../templates/structures/han/laozigate.xml | 4 +- .../templates/structures/han/ministry.xml | 4 +- .../structures/han/wallset_palisade.xml | 4 +- .../templates/structures/iber/monument.xml | 4 +- .../structures/kush/pyramid_large.xml | 4 +- .../structures/kush/pyramid_small.xml | 4 +- .../templates/structures/kush/temple_amun.xml | 4 +- .../structures/maur/elephant_stable.xml | 4 +- .../structures/maur/tower_double.xml | 68 +- .../structures/merc_camp_egyptian.xml | 4 +- .../templates/structures/pers/ice_house.xml | 146 ++-- .../structures/ptol/mercenary_camp.xml | 4 +- .../templates/structures/rome/army_camp.xml | 4 +- .../templates/structures/rome/temple_mars.xml | 4 +- .../structures/rome/wallset_siege.xml | 4 +- .../templates/structures/wallset_palisade.xml | 4 +- ...ure_civic_civil_centre_military_colony.xml | 4 +- .../template_structure_civic_house.xml | 4 +- .../template_structure_civic_stoa.xml | 4 +- .../template_structure_civic_temple.xml | 4 +- ...te_structure_defensive_tower_artillery.xml | 4 +- ...emplate_structure_defensive_tower_bolt.xml | 4 +- ...plate_structure_defensive_tower_sentry.xml | 8 +- ...mplate_structure_defensive_tower_stone.xml | 4 +- .../template_structure_defensive_wall.xml | 4 +- .../template_structure_economic_farmstead.xml | 4 +- .../template_structure_economic_market.xml | 4 +- ...template_structure_economic_storehouse.xml | 4 +- .../template_structure_military_arsenal.xml | 4 +- .../template_structure_military_barracks.xml | 4 +- ...ate_structure_military_elephant_stable.xml | 4 +- .../template_structure_military_embassy.xml | 4 +- .../template_structure_military_forge.xml | 4 +- .../template_structure_military_fortress.xml | 4 +- .../template_structure_military_range.xml | 4 +- .../template_structure_military_stable.xml | 4 +- .../template_structure_resource_corral.xml | 4 +- .../templates/template_structure_special.xml | 4 +- .../templates/template_structure_wonder.xml | 4 +- .../templates/template_unit_champion.xml | 4 +- .../template_unit_champion_cavalry.xml | 4 +- ...mplate_unit_fauna_herd_domestic_cattle.xml | 4 +- .../templates/template_unit_hero.xml | 4 +- .../templates/template_unit_ship_bireme.xml | 4 +- .../templates/template_unit_ship_fire.xml | 4 +- .../templates/template_unit_ship_merchant.xml | 4 +- .../template_unit_ship_quinquereme.xml | 4 +- .../templates/template_unit_ship_trireme.xml | 4 +- .../templates/template_unit_siege.xml | 4 +- .../template_unit_support_healer.xml | 4 +- .../simulation/templates/template_wallset.xml | 4 +- .../units/athen/cavalry_swordsman_b.xml | 4 +- .../templates/units/athen/champion_marine.xml | 4 +- .../units/athen/infantry_javelineer_b.xml | 4 +- .../units/athen/infantry_marine_archer_b.xml | 4 +- .../athen/support_female_citizen_house.xml | 4 +- .../units/brit/cavalry_swordsman_b.xml | 4 +- .../templates/units/brit/champion_chariot.xml | 4 +- .../brit/champion_infantry_swordsman.xml | 4 +- .../units/brit/infantry_javelineer_b.xml | 4 +- .../brit/support_female_citizen_house.xml | 4 +- .../units/cart/cavalry_spearman_ital_b.xml | 4 +- .../units/cart/cavalry_swordsman_gaul_b.xml | 4 +- .../units/cart/cavalry_swordsman_iber_b.xml | 4 +- .../units/cart/infantry_javelineer_iber_b.xml | 4 +- .../units/cart/infantry_slinger_iber_b.xml | 4 +- .../units/cart/infantry_swordsman_gaul_b.xml | 4 +- .../units/cart/infantry_swordsman_ital_b.xml | 4 +- .../templates/units/cart/ship_merchant.xml | 4 +- .../cart/support_female_citizen_house.xml | 4 +- .../units/gaul/cavalry_swordsman_b.xml | 4 +- .../templates/units/gaul/champion_fanatic.xml | 4 +- .../gaul/champion_infantry_swordsman.xml | 4 +- .../units/gaul/infantry_slinger_b.xml | 4 +- .../gaul/support_female_citizen_house.xml | 4 +- .../templates/units/han/cavalry_archer_b.xml | 4 +- .../units/han/cavalry_crossbowman_b.xml | 4 +- .../units/han/cavalry_spearman_b.xml | 4 +- .../han/champion_cavalry_spearman_academy.xml | 4 +- .../units/han/champion_chariot_academy.xml | 4 +- .../han/champion_infantry_archer_academy.xml | 4 +- .../champion_infantry_crossbowman_academy.xml | 4 +- .../champion_infantry_spearman_academy.xml | 4 +- .../templates/units/han/infantry_archer_b.xml | 4 +- .../units/han/infantry_pikeman_b.xml | 10 +- .../han/infantry_swordsman_special_b.xml | 44 +- .../han/support_female_citizen_house.xml | 4 +- .../templates/units/han/support_minister.xml | 4 +- .../units/iber/cavalry_spearman_b.xml | 4 +- .../iber/champion_infantry_swordsman.xml | 4 +- .../units/iber/infantry_slinger_b.xml | 4 +- .../units/iber/infantry_spearman_b.xml | 4 +- .../iber/support_female_citizen_house.xml | 4 +- .../units/kush/cavalry_javelineer_b.xml | 4 +- .../units/kush/cavalry_javelineer_merc_b.xml | 4 +- .../units/kush/cavalry_spearman_b.xml | 4 +- .../units/kush/champion_infantry_archer.xml | 4 +- .../units/kush/infantry_archer_b.xml | 4 +- .../units/kush/infantry_javelineer_merc_b.xml | 4 +- .../units/kush/infantry_maceman_merc_b.xml | 4 +- .../units/kush/infantry_pikeman_b.xml | 4 +- .../units/kush/infantry_spearman_b.xml | 4 +- .../units/kush/infantry_swordsman_b.xml | 4 +- .../kush/support_female_citizen_house.xml | 4 +- .../units/mace/cavalry_javelineer_b.xml | 4 +- .../units/mace/champion_infantry_spearman.xml | 4 +- .../mace/champion_infantry_swordsman.xml | 4 +- .../units/mace/infantry_archer_b.xml | 4 +- .../units/mace/infantry_slinger_b.xml | 4 +- .../mace/support_female_citizen_house.xml | 4 +- .../units/maur/cavalry_swordsman_b.xml | 4 +- .../templates/units/maur/champion_chariot.xml | 4 +- .../units/maur/champion_infantry_maceman.xml | 4 +- .../units/maur/elephant_archer_b.xml | 4 +- .../units/maur/hero_chandragupta_infantry.xml | 4 +- .../units/maur/infantry_swordsman_b.xml | 4 +- .../maur/support_female_citizen_house.xml | 4 +- .../templates/units/pers/cavalry_archer_b.xml | 4 +- .../units/pers/cavalry_axeman_a_trireme.xml | 4 +- .../templates/units/pers/cavalry_axeman_b.xml | 4 +- .../units/pers/cavalry_axeman_b_trireme.xml | 4 +- .../units/pers/cavalry_axeman_e_trireme.xml | 4 +- .../pers/cavalry_javelineer_a_trireme.xml | 4 +- .../pers/cavalry_javelineer_b_trireme.xml | 4 +- .../pers/cavalry_javelineer_e_trireme.xml | 4 +- .../units/pers/cavalry_spearman_b.xml | 4 +- .../templates/units/pers/champion_chariot.xml | 4 +- .../units/pers/infantry_javelineer_b.xml | 4 +- .../pers/support_female_citizen_house.xml | 4 +- .../templates/units/ptol/cavalry_archer_b.xml | 4 +- .../units/ptol/cavalry_javelineer_merc_b.xml | 4 +- .../units/ptol/cavalry_spearman_merc_b.xml | 4 +- .../units/ptol/champion_infantry_pikeman.xml | 4 +- .../units/ptol/infantry_archer_b.xml | 4 +- .../units/ptol/infantry_javelineer_b.xml | 4 +- .../units/ptol/infantry_slinger_b.xml | 4 +- .../units/ptol/infantry_spearman_merc_b.xml | 4 +- .../units/ptol/infantry_swordsman_merc_b.xml | 4 +- .../ptol/support_female_citizen_house.xml | 4 +- .../units/rome/cavalry_javelineer_b.xml | 4 +- .../champion_infantry_spear_gladiator.xml | 4 +- .../champion_infantry_sword_gladiator.xml | 4 +- .../rome/champion_infantry_swordsman.xml | 4 +- .../units/rome/infantry_spearman_b.xml | 4 +- .../rome/support_female_citizen_house.xml | 4 +- .../templates/units/sele/cavalry_archer_b.xml | 4 +- .../units/sele/cavalry_spearman_merc_b.xml | 4 +- .../templates/units/sele/champion_chariot.xml | 4 +- .../units/sele/champion_infantry_pikeman.xml | 4 +- .../sele/champion_infantry_swordsman.xml | 4 +- .../units/sele/infantry_archer_merc_b.xml | 4 +- .../units/sele/infantry_javelineer_b.xml | 4 +- .../units/sele/infantry_swordsman_merc_b.xml | 4 +- .../sele/support_female_citizen_house.xml | 4 +- .../units/spart/cavalry_spearman_b.xml | 4 +- .../spart/champion_infantry_swordsman.xml | 4 +- .../spart/support_female_citizen_house.xml | 4 +- 187 files changed, 1616 insertions(+), 389 deletions(-) create mode 100644 binaries/data/mods/public/simulation/helpers/Requirements.js create mode 100644 binaries/data/mods/public/simulation/helpers/tests/test_Requirements.js diff --git a/binaries/data/mods/public/globalscripts/Templates.js b/binaries/data/mods/public/globalscripts/Templates.js index 01517b7882..b6bfe14a4b 100644 --- a/binaries/data/mods/public/globalscripts/Templates.js +++ b/binaries/data/mods/public/globalscripts/Templates.js @@ -441,7 +441,7 @@ function GetTemplateDataHelper(template, player, auraTemplates, resources, modif }; ret.icon = template.Identity.Icon; ret.tooltip = template.Identity.Tooltip; - ret.requiredTechnology = template.Identity.RequiredTechnology; + ret.requirements = template.Identity.Requirements; ret.visibleIdentityClasses = GetVisibleIdentityClasses(template.Identity); ret.nativeCiv = template.Identity.Civ; } @@ -476,8 +476,8 @@ function GetTemplateDataHelper(template, player, auraTemplates, resources, modif "entity": upgrade.Entity, "tooltip": upgrade.Tooltip, "cost": cost, - "icon": upgrade.Icon || undefined, - "requiredTechnology": upgrade.RequiredTechnology || undefined + "icon": upgrade.Icon, + "requirements": upgrade.Requirements }); } } diff --git a/binaries/data/mods/public/gui/common/tooltips.js b/binaries/data/mods/public/gui/common/tooltips.js index 2bc7f83498..9c06794a6a 100644 --- a/binaries/data/mods/public/gui/common/tooltips.js +++ b/binaries/data/mods/public/gui/common/tooltips.js @@ -956,14 +956,17 @@ function getEntityCostTooltip(template, player, entity, buildingsCountToTrainFul return ""; } -function getRequiredTechnologyTooltip(technologyEnabled, requiredTechnology, civ) +function getRequirementsTooltip(enabled, requirements, civ) { - if (technologyEnabled) + if (enabled) return ""; - return sprintf(translate("Requires %(technology)s"), { - "technology": getEntityNames(GetTechnologyData(requiredTechnology, civ)) - }); + // Simple requirements (one tech) can be translated on the fly. + if ("Techs" in requirements && !requirements.Techs.includes(" ")) + return sprintf(translate("Requires %(technology)s"), { + "technology": getEntityNames(GetTechnologyData(requirements.Techs, civ)) + }); + return translate(requirements.Tooltip); } /** diff --git a/binaries/data/mods/public/gui/reference/common/TemplateLoader.js b/binaries/data/mods/public/gui/reference/common/TemplateLoader.js index a24e6e3674..5dafa188d6 100644 --- a/binaries/data/mods/public/gui/reference/common/TemplateLoader.js +++ b/binaries/data/mods/public/gui/reference/common/TemplateLoader.js @@ -293,8 +293,8 @@ class TemplateLoader if (parentTemplate.Upgrade[upgrade].Entity) return [inheritedVariance[0], TemplateVariant.upgrade, upgrade.toLowerCase()]; - if (template.Identity.RequiredTechnology) - return [inheritedVariance[0], TemplateVariant.unlockedByTechnology, template.Identity.RequiredTechnology]; + if (template.Identity.Requirements?.Techs) + return [inheritedVariance[0], TemplateVariant.unlockedByTechnology, template.Identity.Requirements?.Techs]; if (parentTemplate.Cost) for (let res in parentTemplate.Cost.Resources) diff --git a/binaries/data/mods/public/gui/reference/common/TemplateParser.js b/binaries/data/mods/public/gui/reference/common/TemplateParser.js index f92edce3b5..e56284eccc 100644 --- a/binaries/data/mods/public/gui/reference/common/TemplateParser.js +++ b/binaries/data/mods/public/gui/reference/common/TemplateParser.js @@ -71,12 +71,12 @@ class TemplateParser // Set the minimum phase that this entity is available. // For gaia objects, this is meaningless. - if (!parsed.requiredTechnology) + if (!parsed.requirements) parsed.phase = this.phaseList[0]; - else if (this.TemplateLoader.isPhaseTech(parsed.requiredTechnology)) - parsed.phase = this.getActualPhase(parsed.requiredTechnology); + else if (this.TemplateLoader.isPhaseTech(parsed.requirements.Techs)) + parsed.phase = this.getActualPhase(parsed.requirements.Techs); else - parsed.phase = this.getPhaseOfTechnology(parsed.requiredTechnology, civCode); + parsed.phase = this.getPhaseOfTechnology(parsed.requirements.Techs, civCode); if (template.Identity.Rank) parsed.promotion = { @@ -256,14 +256,14 @@ class TemplateParser data.cost = upgrade.cost; data.icon = upgrade.icon || data.icon; data.tooltip = upgrade.tooltip || data.tooltip; - data.requiredTechnology = upgrade.requiredTechnology || data.requiredTechnology; + data.requirements = upgrade.requirements || data.requirements; - if (!data.requiredTechnology) + if (!data.requirements) data.phase = this.phaseList[0]; - else if (this.TemplateLoader.isPhaseTech(data.requiredTechnology)) - data.phase = this.getActualPhase(data.requiredTechnology); + else if (this.TemplateLoader.isPhaseTech(data.requirements.Techs)) + data.phase = this.getActualPhase(data.requirements.Techs); else - data.phase = this.getPhaseOfTechnology(data.requiredTechnology, civCode); + data.phase = this.getPhaseOfTechnology(data.requirements.Techs, civCode); newUpgrades.push(data); } diff --git a/binaries/data/mods/public/gui/session/diplomacy/playercontrols/SpyRequestButton.js b/binaries/data/mods/public/gui/session/diplomacy/playercontrols/SpyRequestButton.js index 6ccf0d1b18..28075d0cd8 100644 --- a/binaries/data/mods/public/gui/session/diplomacy/playercontrols/SpyRequestButton.js +++ b/binaries/data/mods/public/gui/session/diplomacy/playercontrols/SpyRequestButton.js @@ -65,15 +65,15 @@ DiplomacyDialogPlayerControl.prototype.SpyRequestButton = class let tooltip = translate(this.Tooltip); - if (template.requiredTechnology && - !Engine.GuiInterfaceCall("IsTechnologyResearched", { - "tech": template.requiredTechnology, + if (template.requirements && + !Engine.GuiInterfaceCall("AreRequirementsMet", { + "requirements": template.requirements, "player": g_ViewedPlayer })) { - tooltip += "\n" + getRequiredTechnologyTooltip( + tooltip += "\n" + getRequirementsTooltip( false, - template.requiredTechnology, + template.requirements, GetSimState().players[g_ViewedPlayer].civ); this.diplomacySpyRequest.enabled = false; diff --git a/binaries/data/mods/public/gui/session/selection_panels.js b/binaries/data/mods/public/gui/session/selection_panels.js index bf47cef90d..3caa15cd8f 100644 --- a/binaries/data/mods/public/gui/session/selection_panels.js +++ b/binaries/data/mods/public/gui/session/selection_panels.js @@ -166,8 +166,8 @@ g_SelectionPanels.Construction = { if (!template) return false; - let technologyEnabled = Engine.GuiInterfaceCall("IsTechnologyResearched", { - "tech": template.requiredTechnology, + const requirementsMet = Engine.GuiInterfaceCall("AreRequirementsMet", { + "requirements": template.requirements, "player": data.player }); @@ -203,13 +203,13 @@ g_SelectionPanels.Construction = { tooltips.push( formatLimitString(limits.entLimit, limits.entCount, limits.entLimitChangers), formatMatchLimitString(limits.matchLimit, limits.matchCount, limits.type), - getRequiredTechnologyTooltip(technologyEnabled, template.requiredTechnology, GetSimState().players[data.player].civ), + getRequirementsTooltip(requirementsMet, template.requirements, GetSimState().players[data.player].civ), getNeededResourcesTooltip(neededResources)); data.button.tooltip = tooltips.filter(tip => tip).join("\n"); let modifier = ""; - if (!technologyEnabled || limits.canBeAddedCount == 0) + if (!requirementsMet || limits.canBeAddedCount == 0) { data.button.enabled = false; modifier += "color:0 0 0 127:grayscale:"; @@ -990,8 +990,8 @@ g_SelectionPanels.Training = { if (!template) return false; - let technologyEnabled = Engine.GuiInterfaceCall("IsTechnologyResearched", { - "tech": template.requiredTechnology, + const requirementsMet = Engine.GuiInterfaceCall("AreRequirementsMet", { + "requirements": template.requirements, "player": data.player }); @@ -1048,13 +1048,13 @@ g_SelectionPanels.Training = { tooltips.push(showTemplateViewerOnRightClickTooltip()); tooltips.push( formatBatchTrainingString(buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch), - getRequiredTechnologyTooltip(technologyEnabled, template.requiredTechnology, GetSimState().players[data.player].civ), + getRequirementsTooltip(requirementsMet, template.requirements, GetSimState().players[data.player].civ), getNeededResourcesTooltip(neededResources)); data.button.tooltip = tooltips.filter(tip => tip).join("\n"); let modifier = ""; - if (!technologyEnabled || limits.canBeAddedCount == 0) + if (!requirementsMet || limits.canBeAddedCount == 0) { data.button.enabled = false; modifier = "color:0 0 0 127:grayscale:"; @@ -1106,11 +1106,9 @@ g_SelectionPanels.Upgrade = { let progressOverlay = Engine.GetGUIObjectByName("unitUpgradeProgressSlider[" + data.i + "]"); progressOverlay.hidden = true; - let technologyEnabled = true; - - if (data.item.requiredTechnology) - technologyEnabled = Engine.GuiInterfaceCall("IsTechnologyResearched", { - "tech": data.item.requiredTechnology, + const requirementsMet = !data.item.requirements || + Engine.GuiInterfaceCall("AreRequirementsMet", { + "requirements": data.item.requirements, "player": data.player }); @@ -1167,7 +1165,7 @@ g_SelectionPanels.Upgrade = { getEntityCostTooltip(data.item, undefined, undefined, data.unitEntStates.length), formatLimitString(limits.entLimit, limits.entCount, limits.entLimitChangers), formatMatchLimitString(limits.matchLimit, limits.matchCount, limits.type), - getRequiredTechnologyTooltip(technologyEnabled, data.item.requiredTechnology, GetSimState().players[data.player].civ), + getRequirementsTooltip(requirementsMet, data.item.requirements, GetSimState().players[data.player].civ), getNeededResourcesTooltip(neededResources), showTemplateViewerOnRightClickTooltip()); @@ -1179,7 +1177,7 @@ g_SelectionPanels.Upgrade = { upgradableEntStates.map(state => state.id)); }; - if (!technologyEnabled || limits.canBeAddedCount == 0 && + if (!requirementsMet || limits.canBeAddedCount == 0 && !upgradableEntStates.some(state => hasSameRestrictionCategory(data.item.entity, state.template))) { data.button.enabled = false; diff --git a/binaries/data/mods/public/simulation/ai/common-api/entity.js b/binaries/data/mods/public/simulation/ai/common-api/entity.js index 01a4377df4..6adf86af1c 100644 --- a/binaries/data/mods/public/simulation/ai/common-api/entity.js +++ b/binaries/data/mods/public/simulation/ai/common-api/entity.js @@ -73,29 +73,13 @@ m.Template = m.Class({ return this._classes && MatchesClassList(this._classes, array); }, - "requiredTech": function() { return this.get("Identity/RequiredTechnology"); }, - - "available": function(gameState) { - let techRequired = this.requiredTech(); - if (!techRequired) - return true; - return gameState.isResearched(techRequired); + "requirements": function() { + return this.get("Identity/Requirements"); }, - // specifically - "phase": function() { - let techRequired = this.requiredTech(); - if (!techRequired) - return 0; - if (techRequired == "phase_village") - return 1; - if (techRequired == "phase_town") - return 2; - if (techRequired == "phase_city") - return 3; - if (techRequired.startsWith("phase_")) - return 4; - return 0; + "available": function(gameState) { + const requirements = this.requirements(); + return !requirements || Sim.RequirementsHelper.AreRequirementsMet(requirements, PlayerID); }, "cost": function(productionQueue) { diff --git a/binaries/data/mods/public/simulation/ai/petra/headquarters.js b/binaries/data/mods/public/simulation/ai/petra/headquarters.js index 42ceac5240..d1b54846d0 100644 --- a/binaries/data/mods/public/simulation/ai/petra/headquarters.js +++ b/binaries/data/mods/public/simulation/ai/petra/headquarters.js @@ -1897,7 +1897,7 @@ PETRA.HQ.prototype.canBuild = function(gameState, structure) if (!template.available(gameState)) { - this.buildManager.setUnbuildable(gameState, type, 30, "tech"); + this.buildManager.setUnbuildable(gameState, type, 30, "requirements"); return false; } diff --git a/binaries/data/mods/public/simulation/ai/petra/queueplanBuilding.js b/binaries/data/mods/public/simulation/ai/petra/queueplanBuilding.js index 1aea39bba9..ed9e1c2ed0 100644 --- a/binaries/data/mods/public/simulation/ai/petra/queueplanBuilding.js +++ b/binaries/data/mods/public/simulation/ai/petra/queueplanBuilding.js @@ -25,7 +25,7 @@ PETRA.ConstructionPlan.prototype.canStart = function(gameState) if (!this.isGo(gameState)) return false; - if (this.template.requiredTech() && !gameState.isResearched(this.template.requiredTech())) + if (!this.template.available(gameState)) return false; return gameState.ai.HQ.buildManager.hasBuilder(this.type); diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js index 0efbf5120a..4edf916c1c 100644 --- a/binaries/data/mods/public/simulation/components/GuiInterface.js +++ b/binaries/data/mods/public/simulation/components/GuiInterface.js @@ -661,16 +661,10 @@ GuiInterface.prototype.GetTemplateData = function(player, data) return GetTemplateDataHelper(template, owner, aurasTemplate, Resources); }; -GuiInterface.prototype.IsTechnologyResearched = function(player, data) +GuiInterface.prototype.AreRequirementsMet = function(player, data) { - if (!data.tech) - return true; - - let cmpTechnologyManager = QueryPlayerIDInterface(data.player !== undefined ? data.player : player, IID_TechnologyManager); - if (!cmpTechnologyManager) - return false; - - return cmpTechnologyManager.IsTechnologyResearched(data.tech); + return !data.requirements || RequirementsHelper.AreRequirementsMet(data.requirements, + data.player !== undefined ? data.player : player); }; /** @@ -2076,7 +2070,7 @@ let exposedFunctions = { "GetMultipleEntityStates": 1, "GetAverageRangeForBuildings": 1, "GetTemplateData": 1, - "IsTechnologyResearched": 1, + "AreRequirementsMet": 1, "CheckTechnologyRequirements": 1, "GetStartedResearch": 1, "GetBattleState": 1, diff --git a/binaries/data/mods/public/simulation/components/Identity.js b/binaries/data/mods/public/simulation/components/Identity.js index bcf9d6e130..153a85e4cf 100644 --- a/binaries/data/mods/public/simulation/components/Identity.js +++ b/binaries/data/mods/public/simulation/components/Identity.js @@ -76,9 +76,7 @@ Identity.prototype.Schema = "" + "" + "" + - "" + - "" + - "" + + RequirementsHelper.BuildSchema() + "" + "" + "" + diff --git a/binaries/data/mods/public/simulation/components/TechnologyManager.js b/binaries/data/mods/public/simulation/components/TechnologyManager.js index fa231570d8..1702b4ce7c 100644 --- a/binaries/data/mods/public/simulation/components/TechnologyManager.js +++ b/binaries/data/mods/public/simulation/components/TechnologyManager.js @@ -276,8 +276,8 @@ TechnologyManager.prototype.CanProduce = function(templateName) var cmpTempManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); var template = cmpTempManager.GetTemplate(templateName); - if (template.Identity && template.Identity.RequiredTechnology) - return this.IsTechnologyResearched(template.Identity.RequiredTechnology); + if (template.Identity?.Requirements) + return RequirementsHelper.AreRequirementsMet(template.Identity.Requirements, Engine.QueryInterface(this.entity, IID_Player).GetPlayerID()); // If there is no required technology then this entity can be produced return true; }; diff --git a/binaries/data/mods/public/simulation/components/Upgrade.js b/binaries/data/mods/public/simulation/components/Upgrade.js index 1dbd151ffc..b89074494d 100644 --- a/binaries/data/mods/public/simulation/components/Upgrade.js +++ b/binaries/data/mods/public/simulation/components/Upgrade.js @@ -40,12 +40,7 @@ Upgrade.prototype.Schema = "" + "" + "" + - "" + - "" + - "" + - "" + - "" + - "" + + RequirementsHelper.BuildSchema() + "" + "" + "" + @@ -153,7 +148,7 @@ Upgrade.prototype.GetUpgrades = function() "icon": choice.Icon || undefined, "cost": hasCost ? cost : undefined, "tooltip": choice.Tooltip || undefined, - "requiredTechnology": this.GetRequiredTechnology(option), + "requirements": this.GetRequirements(option), }); } @@ -189,14 +184,14 @@ Upgrade.prototype.WillCheckPlacementRestrictions = function(template) return "CheckPlacementRestrictions" in this.template[this.upgradeTemplates[template]]; }; -Upgrade.prototype.GetRequiredTechnology = function(templateArg) +Upgrade.prototype.GetRequirements = function(templateArg) { let choice = this.upgradeTemplates[templateArg] || templateArg; - if (this.template[choice].RequiredTechnology) - return this.template[choice].RequiredTechnology; + if (this.template[choice].Requirements) + return this.template[choice].Requirements; - if (!("RequiredTechnology" in this.template[choice])) + if (!("Requirements" in this.template[choice])) return undefined; let cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); @@ -207,7 +202,7 @@ Upgrade.prototype.GetRequiredTechnology = function(templateArg) entType = entType.replace(/\{civ\}/g, cmpIdentity.GetCiv()); let template = cmpTemplateManager.GetTemplate(entType); - return template.Identity.RequiredTechnology || undefined; + return template.Identity.Requirements || undefined; }; Upgrade.prototype.GetResourceCosts = function(template) diff --git a/binaries/data/mods/public/simulation/components/tests/test_Identity.js b/binaries/data/mods/public/simulation/components/tests/test_Identity.js index 0d1043af4c..b1af415328 100644 --- a/binaries/data/mods/public/simulation/components/tests/test_Identity.js +++ b/binaries/data/mods/public/simulation/components/tests/test_Identity.js @@ -1,3 +1,4 @@ +Engine.LoadHelperScript("Requirements.js"); Engine.LoadComponentScript("Identity.js"); let cmpIdentity = ConstructComponent(5, "Identity", { @@ -32,7 +33,9 @@ cmpIdentity = ConstructComponent(6, "Identity", { "Classes": { "_string": "CitizenSoldier Human Organic" }, "VisibleClasses": { "_string": "Javelineer" }, "Icon": "units/iber_infantry_javelineer.png", - "RequiredTechnology": "phase_town" + "Requirements": { + "Techs": "phase_town" + } }); TS_ASSERT_EQUALS(cmpIdentity.GetCiv(), "iber"); diff --git a/binaries/data/mods/public/simulation/components/tests/test_UpgradeModification.js b/binaries/data/mods/public/simulation/components/tests/test_UpgradeModification.js index 6fa8ae54c4..8aaeb48ffa 100644 --- a/binaries/data/mods/public/simulation/components/tests/test_UpgradeModification.js +++ b/binaries/data/mods/public/simulation/components/tests/test_UpgradeModification.js @@ -1,4 +1,5 @@ Engine.LoadHelperScript("Player.js"); +Engine.LoadHelperScript("Requirements.js"); Engine.LoadHelperScript("ValueModification.js"); Resources = { "BuildSchema": type => { diff --git a/binaries/data/mods/public/simulation/helpers/Commands.js b/binaries/data/mods/public/simulation/helpers/Commands.js index ac4c068b19..f9d8e7cde0 100644 --- a/binaries/data/mods/public/simulation/helpers/Commands.js +++ b/binaries/data/mods/public/simulation/helpers/Commands.js @@ -783,10 +783,7 @@ var g_Commands = { continue; } - let cmpTechnologyManager = QueryOwnerInterface(ent, IID_TechnologyManager); - let requiredTechnology = cmpUpgrade.GetRequiredTechnology(cmd.template); - - if (requiredTechnology && (!cmpTechnologyManager || !cmpTechnologyManager.IsTechnologyResearched(requiredTechnology))) + if (!RequirementsHelper.AreRequirementsMet(cmpUpgrade.GetRequirements(cmd.template), player)) { if (g_DebugCommands) warn("Invalid command: upgrading is not possible for this player or requires unresearched technology: " + uneval(cmd)); diff --git a/binaries/data/mods/public/simulation/helpers/Requirements.js b/binaries/data/mods/public/simulation/helpers/Requirements.js new file mode 100644 index 0000000000..b62cbf72dd --- /dev/null +++ b/binaries/data/mods/public/simulation/helpers/Requirements.js @@ -0,0 +1,164 @@ +function RequirementsHelper() {} + +RequirementsHelper.prototype.DEFAULT_RECURSION_DEPTH = 1; + +RequirementsHelper.prototype.EntityRequirementsSchema = + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + ""; + +RequirementsHelper.prototype.TechnologyRequirementsSchema = + "" + + "" + + ""; + +/** + * @param {number} recursionDepth - How deep we recurse. + * @return {string} - A RelaxRNG schema for requirements. + */ +RequirementsHelper.prototype.RequirementsSchema = function(recursionDepth) +{ + return "" + + "" + + this.ChoicesSchema(--recursionDepth) + + ""; +}; + +/** + * @param {number} recursionDepth - How deep we recurse. + * @return {string} - A RelaxRNG schema for chosing requirements. + */ +RequirementsHelper.prototype.ChoicesSchema = function(recursionDepth) +{ + const allAnySchema = recursionDepth > 0 ? "" + + "" + + this.RequirementsSchema(recursionDepth) + + "" + + "" + + this.RequirementsSchema(recursionDepth) + + "" : ""; + + return "" + + "" + + allAnySchema + + this.EntityRequirementsSchema + + this.TechnologyRequirementsSchema + + ""; +}; + +/** + * @param {number} recursionDepth - How deeply recursive we build the schema. + * @return {string} - A RelaxRNG schema for requirements. + */ +RequirementsHelper.prototype.BuildSchema = function(recursionDepth = this.DEFAULT_RECURSION_DEPTH) +{ + return "" + + "" + + "" + + this.ChoicesSchema(recursionDepth) + + "" + + "" + + "" + + "" + + "" + + "" + + ""; +}; + +/** + * @param {Object} template - The requirements template as defined above. + * @param {number} playerID - + * @return {boolean} - + */ +RequirementsHelper.prototype.AreRequirementsMet = function(template, playerID) +{ + if (!template || !Object.keys(template).length) + return true; + + const cmpTechManager = QueryPlayerIDInterface(playerID, IID_TechnologyManager); + return this.AllRequirementsMet(template, cmpTechManager); +}; + +/** + * @param {Object} template - The requirements template for "all". + * @param {component} cmpTechManager - + * @return {boolean} - + */ +RequirementsHelper.prototype.AllRequirementsMet = function(template, cmpTechManager) +{ + for (const requirementType in template) + { + const requirement = template[requirementType]; + if (requirementType === "All" && !this.AllRequirementsMet(requirement, cmpTechManager)) + return false; + if (requirementType === "Any" && !this.AnyRequirementsMet(requirement, cmpTechManager)) + return false; + if (requirementType === "Entities") + { + for (const className in requirement) + { + const entReq = requirement[className]; + if ("Count" in entReq && (!(className in cmpTechManager.classCounts) || cmpTechManager.classCounts[className] < entReq.Count)) + return false; + if ("Variants" in entReq && (!(className in cmpTechManager.typeCountsByClass) || Object.keys(cmpTechManager.typeCountsByClass[className]).length < entReq.Variants)) + return false; + } + } + if (requirementType === "Techs") + for (const tech of requirement.split(" ")) + if (tech[0] === "!" ? cmpTechManager.IsTechnologyResearched(tech.substring(1)) : + !cmpTechManager.IsTechnologyResearched(tech)) + return false; + } + return true; +}; + +/** + * @param {Object} template - The requirements template for "any". + * @param {component} cmpTechManager - + * @return {boolean} - + */ +RequirementsHelper.prototype.AnyRequirementsMet = function(template, cmpTechManager) +{ + for (const requirementType in template) + { + const requirement = template[requirementType]; + if (requirementType === "All" && this.AllRequirementsMet(requirement, cmpTechManager)) + return true; + if (requirementType === "Any" && this.AnyRequirementsMet(requirement, cmpTechManager)) + return true; + if (requirementType === "Entities") + { + for (const className in requirement) + { + const entReq = requirement[className]; + if ("Count" in entReq && className in cmpTechManager.classCounts && cmpTechManager.classCounts[className] >= entReq.Count) + return true; + if ("Variants" in entReq && className in cmpTechManager.typeCountsByClass && Object.keys(cmpTechManager.typeCountsByClass[className]).length >= entReq.Variants) + return true; + } + } + if (requirementType === "Techs") + for (const tech of requirement.split(" ")) + if (tech[0] === "!" ? !cmpTechManager.IsTechnologyResearched(tech.substring(1)) : + cmpTechManager.IsTechnologyResearched(tech)) + return true; + } + return false; +}; + +Engine.RegisterGlobal("RequirementsHelper", new RequirementsHelper()); diff --git a/binaries/data/mods/public/simulation/helpers/tests/test_Requirements.js b/binaries/data/mods/public/simulation/helpers/tests/test_Requirements.js new file mode 100644 index 0000000000..64ddd2e116 --- /dev/null +++ b/binaries/data/mods/public/simulation/helpers/tests/test_Requirements.js @@ -0,0 +1,718 @@ +Engine.LoadComponentScript("interfaces/PlayerManager.js"); +Engine.LoadComponentScript("interfaces/TechnologyManager.js"); +Engine.LoadHelperScript("Player.js"); +Engine.LoadHelperScript("Requirements.js"); + +const playerID = 1; +const playerEnt = 11; + +AddMock(SYSTEM_ENTITY, IID_PlayerManager, { + "GetPlayerByID": () => playerEnt +}); + +// First test no requirements. +let template = { +}; + +const met = () => TS_ASSERT(RequirementsHelper.AreRequirementsMet(template, playerID)); +const notMet = () => TS_ASSERT(!RequirementsHelper.AreRequirementsMet(template, playerID)); + +met(); + +// Simple requirements are assumed to be additive. +template = { + "Techs": "phase_city" +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => false +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_town" +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_town" || tech === "phase_city" +}); +met(); + +template = { + "Techs": "cartography phase_city" +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => false +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_town" +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_town" || tech === "phase_city" +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "cartography" || tech === "phase_town" +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "cartography" || tech === "phase_city" +}); +met(); + + +// Additive requirements (all should to be met). +// Entity requirements. +template = { + "All": { + "Entities": { + "class_1": { + "Count": 1 + } + } + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": {}, + "typeCountsByClass": {} +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 0 + }, + "typeCountsByClass": {} +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_2": 1 + }, + "typeCountsByClass": {} +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 1 + }, + "typeCountsByClass": {} +}); +met(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 1 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 1 + } + } +}); +met(); + + +template = { + "All": { + "Entities": { + "class_1": { + "Variants": 2 + } + } + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 2 + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 1, + "template_2": 1 + } + } +}); +met(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 1 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 1 + } + } +}); +notMet(); + +template = { + "All": { + "Entities": { + "class_1": { + "Count": 1, + "Variants": 2 + } + } + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 1 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 1 + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 1, + "template_2": 1 + } + } +}); +met(); + +template = { + "All": { + "Entities": { + "class_1": { + "Count": 3, + "Variants": 2 + } + } + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 1, + "template_2": 1 + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 2, + "template_2": 1 + } + } +}); +met(); + + +// Technology requirements. +template = { + "All": { + "Techs": "phase_town" + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => false +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_town" +}); +met(); + +template = { + "All": { + "Techs": "phase_city" + } +}; +notMet(); + +template = { + "All": { + "Techs": "phase_town phase_city" + } +}; +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_town" || tech === "phase_city" +}); +met(); + +template = { + "All": { + "Techs": "!phase_city" + } +}; +notMet(); + +template = { + "All": { + "Techs": "!phase_town phase_city" + } +}; +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_city" +}); +met(); + + +// Combination of Entity and Technology requirements. +template = { + "All": { + "Entities": { + "class_1": { + "Count": 3, + "Variants": 2 + } + }, + "Techs": "phase_town" + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "IsTechnologyResearched": (tech) => false, + "typeCountsByClass": { + "class_1": { + "template_1": 2, + "template_2": 1 + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "IsTechnologyResearched": (tech) => tech === "phase_town", + "typeCountsByClass": { + "class_1": { + "template_1": 2, + "template_2": 1 + } + } +}); +met(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "IsTechnologyResearched": (tech) => tech === "phase_city", + "typeCountsByClass": { + "class_1": { + "template_1": 2, + "template_2": 1 + } + } +}); +notMet(); + + +// Choice requirements (at least one needs to be met). +// Entity requirements. +template = { + "Any": { + "Entities": { + "class_1": { + "Count": 1, + } + }, + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 0 + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 1 + } +}); +met(); + +template = { + "Any": { + "Entities": { + "class_1": { + "Count": 5, + "Variants": 2 + } + }, + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 3, + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "typeCountsByClass": { + "class_1": { + "template_1": 2, + "template_2": 1 + } + } +}); +met(); + + +// Technology requirements. +template = { + "Any": { + "Techs": "phase_town" + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_city" +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_town" +}); +met(); + +template = { + "Any": { + "Techs": "phase_town phase_city" + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_city" +}); +met(); + +template = { + "Any": { + "Techs": "!phase_town" + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_town" +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_city" +}); +met(); + +template = { + "Any": { + "Techs": "!phase_town phase_city" + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "IsTechnologyResearched": (tech) => tech === "phase_town" || tech === "phase_city" +}); +met(); + + +// Combinational requirements of entities and technologies. +template = { + "Any": { + "Entities": { + "class_1": { + "Count": 3, + "Variants": 2 + } + }, + "Techs": "!phase_town" + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "IsTechnologyResearched": (tech) => tech === "phase_town", + "typeCountsByClass": { + "class_1": { + "template_1": 3 + } + } +}); +met(); + + +// Nested requirements. +template = { + "All": { + "All": { + "Techs": "!phase_town" + }, + "Any": { + "Entities": { + "class_1": { + "Count": 3, + "Variants": 2 + } + }, + "Techs": "phase_city" + } + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "IsTechnologyResearched": (tech) => tech === "phase_town", + "typeCountsByClass": { + "class_1": { + "template_1": 3 + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "IsTechnologyResearched": (tech) => tech === "phase_town" || tech === "phase_city", + "typeCountsByClass": { + "class_1": { + "template_1": 3 + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "IsTechnologyResearched": (tech) => tech === "phase_city", + "typeCountsByClass": { + "class_1": { + "template_1": 2 + } + } +}); +met(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "IsTechnologyResearched": (tech) => false, + "typeCountsByClass": { + "class_1": { + "template_1": 1, + "template_2": 1 + } + } +}); +met(); + + +template = { + "Any": { + "All": { + "Techs": "!phase_town" + }, + "Any": { + "Entities": { + "class_1": { + "Count": 3, + "Variants": 2 + } + }, + "Techs": "phase_city" + } + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "IsTechnologyResearched": (tech) => tech === "phase_town", + "typeCountsByClass": { + "class_1": { + "template_1": 2 + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 3 + }, + "IsTechnologyResearched": (tech) => tech === "phase_town" || tech === "phase_city", + "typeCountsByClass": { + "class_1": { + "template_1": 3 + } + } +}); +met(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "IsTechnologyResearched": (tech) => tech === "phase_city", + "typeCountsByClass": { + "class_1": { + "template_1": 2 + } + } +}); +met(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "IsTechnologyResearched": (tech) => false, + "typeCountsByClass": { + "class_1": { + "template_1": 1, + "template_2": 1 + } + } +}); +met(); + + +// Two levels deep nested. +template = { + "All": { + "Any": { + "All": { + "Techs": "cartography phase_imperial", + }, + "Entities": { + "class_1": { + "Count": 3, + "Variants": 2 + } + }, + "Techs": "phase_city" + }, + "Techs": "!phase_town" + } +}; + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "IsTechnologyResearched": (tech) => tech === "phase_town", + "typeCountsByClass": { + "class_1": { + "template_1": 2 + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "IsTechnologyResearched": (tech) => tech === "phase_city", + "typeCountsByClass": { + "class_1": { + "template_1": 2 + } + } +}); +met(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "IsTechnologyResearched": (tech) => tech === "phase_imperial", + "typeCountsByClass": { + "class_1": { + "template_1": 2 + } + } +}); +notMet(); + +AddMock(playerEnt, IID_TechnologyManager, { + "classCounts": { + "class_1": 2 + }, + "IsTechnologyResearched": (tech) => tech === "cartography" || tech === "phase_imperial", + "typeCountsByClass": { + "class_1": { + "template_1": 2 + } + } +}); +met(); diff --git a/binaries/data/mods/public/simulation/templates/gaia/fauna_pig_trainable.xml b/binaries/data/mods/public/simulation/templates/gaia/fauna_pig_trainable.xml index 8ee7f98967..173b26818d 100644 --- a/binaries/data/mods/public/simulation/templates/gaia/fauna_pig_trainable.xml +++ b/binaries/data/mods/public/simulation/templates/gaia/fauna_pig_trainable.xml @@ -1,9 +1,11 @@ - - phase_town + + phase_town + + false diff --git a/binaries/data/mods/public/simulation/templates/special/spy.xml b/binaries/data/mods/public/simulation/templates/special/spy.xml index 3627249a59..6177432d4d 100644 --- a/binaries/data/mods/public/simulation/templates/special/spy.xml +++ b/binaries/data/mods/public/simulation/templates/special/spy.xml @@ -15,8 +15,10 @@ Spy Spy technologies/spy_trader.png - unlock_spies true + + unlock_spies + false diff --git a/binaries/data/mods/public/simulation/templates/structures/athen/gymnasium.xml b/binaries/data/mods/public/simulation/templates/structures/athen/gymnasium.xml index b902b75259..e9f0d25544 100644 --- a/binaries/data/mods/public/simulation/templates/structures/athen/gymnasium.xml +++ b/binaries/data/mods/public/simulation/templates/structures/athen/gymnasium.xml @@ -25,7 +25,9 @@ ConquestCritical CivSpecific Gymnasium -City Town structures/gymnasium.png - phase_town + + phase_town + 40 diff --git a/binaries/data/mods/public/simulation/templates/structures/brit/crannog.xml b/binaries/data/mods/public/simulation/templates/structures/brit/crannog.xml index 1dbafe0a5d..f97b48e0b8 100644 --- a/binaries/data/mods/public/simulation/templates/structures/brit/crannog.xml +++ b/binaries/data/mods/public/simulation/templates/structures/brit/crannog.xml @@ -16,7 +16,9 @@ CivSpecific Naval structures/crannog.png - phase_town + + phase_town + diff --git a/binaries/data/mods/public/simulation/templates/structures/cart/apartment.xml b/binaries/data/mods/public/simulation/templates/structures/cart/apartment.xml index 39366650f9..41ebb2d737 100644 --- a/binaries/data/mods/public/simulation/templates/structures/cart/apartment.xml +++ b/binaries/data/mods/public/simulation/templates/structures/cart/apartment.xml @@ -25,7 +25,9 @@ CivSpecific -Village Town structures/apartment.png - phase_town + + phase_town + 10 @@ -37,11 +39,11 @@ 10 + + 2 + structures/carthaginians/fndn_house.xml structures/carthaginians/apartment.xml - - 2 - diff --git a/binaries/data/mods/public/simulation/templates/structures/cart/wallset_short.xml b/binaries/data/mods/public/simulation/templates/structures/cart/wallset_short.xml index 6d63753167..400bd3b936 100644 --- a/binaries/data/mods/public/simulation/templates/structures/cart/wallset_short.xml +++ b/binaries/data/mods/public/simulation/templates/structures/cart/wallset_short.xml @@ -3,8 +3,10 @@ cart Low Wall - phase_village structures/palisade_wall.png + + phase_village + diff --git a/binaries/data/mods/public/simulation/templates/structures/gaul/assembly.xml b/binaries/data/mods/public/simulation/templates/structures/gaul/assembly.xml index 4c0b9ca429..146f875a68 100644 --- a/binaries/data/mods/public/simulation/templates/structures/gaul/assembly.xml +++ b/binaries/data/mods/public/simulation/templates/structures/gaul/assembly.xml @@ -30,7 +30,9 @@ ConquestCritical CivSpecific City Council structures/tholos.png - phase_city + + phase_city + 80 diff --git a/binaries/data/mods/public/simulation/templates/structures/gaul/tavern.xml b/binaries/data/mods/public/simulation/templates/structures/gaul/tavern.xml index d11172406a..b1c4fcea65 100644 --- a/binaries/data/mods/public/simulation/templates/structures/gaul/tavern.xml +++ b/binaries/data/mods/public/simulation/templates/structures/gaul/tavern.xml @@ -21,7 +21,9 @@ Taberna -Village Town structures/embassy_celtic.png - phase_town + + phase_town + 20 diff --git a/binaries/data/mods/public/simulation/templates/structures/han/academy.xml b/binaries/data/mods/public/simulation/templates/structures/han/academy.xml index 3e489b421a..59100a210d 100644 --- a/binaries/data/mods/public/simulation/templates/structures/han/academy.xml +++ b/binaries/data/mods/public/simulation/templates/structures/han/academy.xml @@ -30,7 +30,9 @@ Train Champions and research their technologies. -Village City Academy structures/embassy_italic.png - phase_city + + phase_city + diff --git a/binaries/data/mods/public/simulation/templates/structures/han/civil_centre.xml b/binaries/data/mods/public/simulation/templates/structures/han/civil_centre.xml index dc0a79fe58..bc17505677 100644 --- a/binaries/data/mods/public/simulation/templates/structures/han/civil_centre.xml +++ b/binaries/data/mods/public/simulation/templates/structures/han/civil_centre.xml @@ -31,13 +31,15 @@ structures/{civ}/civil_centre_court This greatly increases the health, capture resistance, and garrison capacity of this specific Civic Center. Unlock training of Heroes here and reduce its research and batch training times by half. - phase_city 300 300 upgrading + + phase_city + diff --git a/binaries/data/mods/public/simulation/templates/structures/han/civil_centre_court.xml b/binaries/data/mods/public/simulation/templates/structures/han/civil_centre_court.xml index 63e09c0568..85c3df31b2 100644 --- a/binaries/data/mods/public/simulation/templates/structures/han/civil_centre_court.xml +++ b/binaries/data/mods/public/simulation/templates/structures/han/civil_centre_court.xml @@ -18,8 +18,10 @@ Cháotíng Defensive ImperialCourt City CivCentre CivSpecific - phase_city structures/military_settlement.png + + phase_city + 30 diff --git a/binaries/data/mods/public/simulation/templates/structures/han/defense_tower.xml b/binaries/data/mods/public/simulation/templates/structures/han/defense_tower.xml index 63c480bb3b..7bac572e5e 100644 --- a/binaries/data/mods/public/simulation/templates/structures/han/defense_tower.xml +++ b/binaries/data/mods/public/simulation/templates/structures/han/defense_tower.xml @@ -11,24 +11,26 @@ han Fángyù Tǎ - - - structures/{civ}/defense_tower_great - This tower has greater range, greater attack, greater health, and is twice as difficult to capture. - phase_city - - 200 - - - upgrading - - 22.0 + + + structures/{civ}/defense_tower_great + This tower has greater range, greater attack, greater health, and is twice as difficult to capture. + + 200 + + + upgrading + + phase_city + + + structures/han/tower_large.xml diff --git a/binaries/data/mods/public/simulation/templates/structures/han/laozigate.xml b/binaries/data/mods/public/simulation/templates/structures/han/laozigate.xml index f30af04026..38b8d6142a 100644 --- a/binaries/data/mods/public/simulation/templates/structures/han/laozigate.xml +++ b/binaries/data/mods/public/simulation/templates/structures/han/laozigate.xml @@ -23,7 +23,9 @@ CivSpecific LaoziGate Town structures/paifang.png - phase_town + + phase_town + 20 diff --git a/binaries/data/mods/public/simulation/templates/structures/han/ministry.xml b/binaries/data/mods/public/simulation/templates/structures/han/ministry.xml index f71e9fc6f7..92f18bfe88 100644 --- a/binaries/data/mods/public/simulation/templates/structures/han/ministry.xml +++ b/binaries/data/mods/public/simulation/templates/structures/han/ministry.xml @@ -38,8 +38,10 @@ CivSpecific ImperialMinistry Town Train the Nine Ministers. Territory root. Research a powerful suite of Administrative technologies. - phase_town structures/imperial_ministry.png + + phase_town + 200 diff --git a/binaries/data/mods/public/simulation/templates/structures/han/wallset_palisade.xml b/binaries/data/mods/public/simulation/templates/structures/han/wallset_palisade.xml index 8e54399d3e..e6f875627e 100644 --- a/binaries/data/mods/public/simulation/templates/structures/han/wallset_palisade.xml +++ b/binaries/data/mods/public/simulation/templates/structures/han/wallset_palisade.xml @@ -6,7 +6,9 @@ Wall off an area. Build in own or neutral territory. -Wall Palisade structures/palisade_wall.png - phase_village + + phase_village + 0.95 diff --git a/binaries/data/mods/public/simulation/templates/structures/iber/monument.xml b/binaries/data/mods/public/simulation/templates/structures/iber/monument.xml index a52f3a2dc5..e6b42f209d 100644 --- a/binaries/data/mods/public/simulation/templates/structures/iber/monument.xml +++ b/binaries/data/mods/public/simulation/templates/structures/iber/monument.xml @@ -33,7 +33,9 @@ CivSpecific Monument Town structures/iberian_bull.png - phase_town + + phase_town + 20 diff --git a/binaries/data/mods/public/simulation/templates/structures/kush/pyramid_large.xml b/binaries/data/mods/public/simulation/templates/structures/kush/pyramid_large.xml index 37e289074e..d8b0c0ded0 100644 --- a/binaries/data/mods/public/simulation/templates/structures/kush/pyramid_large.xml +++ b/binaries/data/mods/public/simulation/templates/structures/kush/pyramid_large.xml @@ -27,8 +27,10 @@ mr ʿȝ -ConquestCritical CivSpecific City Pyramid - phase_city structures/kush_pyramid_big.png + + phase_city + 90 diff --git a/binaries/data/mods/public/simulation/templates/structures/kush/pyramid_small.xml b/binaries/data/mods/public/simulation/templates/structures/kush/pyramid_small.xml index cfbed911cd..2e4d3812a4 100644 --- a/binaries/data/mods/public/simulation/templates/structures/kush/pyramid_small.xml +++ b/binaries/data/mods/public/simulation/templates/structures/kush/pyramid_small.xml @@ -24,8 +24,10 @@ mr -ConquestCritical CivSpecific Village Pyramid - phase_village structures/kush_pyramid_small.png + + phase_village + 30 diff --git a/binaries/data/mods/public/simulation/templates/structures/kush/temple_amun.xml b/binaries/data/mods/public/simulation/templates/structures/kush/temple_amun.xml index 3d329cbbef..ef1a24ef46 100644 --- a/binaries/data/mods/public/simulation/templates/structures/kush/temple_amun.xml +++ b/binaries/data/mods/public/simulation/templates/structures/kush/temple_amun.xml @@ -30,7 +30,9 @@ CivSpecific -Town City TempleOfAmun structures/temple_epic.png - phase_city + + phase_city + 2 diff --git a/binaries/data/mods/public/simulation/templates/structures/maur/elephant_stable.xml b/binaries/data/mods/public/simulation/templates/structures/maur/elephant_stable.xml index 7ee685b050..5152d97b91 100644 --- a/binaries/data/mods/public/simulation/templates/structures/maur/elephant_stable.xml +++ b/binaries/data/mods/public/simulation/templates/structures/maur/elephant_stable.xml @@ -3,9 +3,11 @@ maur Vāraṇaśālā - phase_town CivSpecific -City Town + + phase_town + structures/mauryas/stable_elephant.xml diff --git a/binaries/data/mods/public/simulation/templates/structures/maur/tower_double.xml b/binaries/data/mods/public/simulation/templates/structures/maur/tower_double.xml index 1b877c743d..e3dca13e1b 100644 --- a/binaries/data/mods/public/simulation/templates/structures/maur/tower_double.xml +++ b/binaries/data/mods/public/simulation/templates/structures/maur/tower_double.xml @@ -18,7 +18,9 @@ Higher health tower with ramparts for up to 16 archers. Visibly garrisoned archers recieve a range and armor bonus. Only archers can garrison. Needs the murder holes tech to protect its foot. maur Udarka - phase_city + + phase_city + 40 @@ -29,52 +31,84 @@ - 212.50 + 2 + 12.5 + 0 - 212.52 + 2 + 12.5 + 2 - 212.5-2 + 2 + 12.5 + -2 - 012.52 + 0 + 12.5 + 2 - 012.5-2 + 0 + 12.5 + -2 - -212.50 + -2 + 12.5 + 0 - -212.52 + -2 + 12.5 + 2 - -212.5-2 + -2 + 12.5 + -2 - 2.118.00 + 2.1 + 18.0 + 0 - 2.118.02.1 + 2.1 + 18.0 + 2.1 - 2.118.0-2.1 + 2.1 + 18.0 + -2.1 - 018.02.1 + 0 + 18.0 + 2.1 - 018.0-2.1 + 0 + 18.0 + -2.1 - -2.118.00 + -2.1 + 18.0 + 0 - -2.118.02.1 + -2.1 + 18.0 + 2.1 - -2.118.0-2.1 + -2.1 + 18.0 + -2.1 diff --git a/binaries/data/mods/public/simulation/templates/structures/merc_camp_egyptian.xml b/binaries/data/mods/public/simulation/templates/structures/merc_camp_egyptian.xml index e0eb3857c5..88e045a564 100644 --- a/binaries/data/mods/public/simulation/templates/structures/merc_camp_egyptian.xml +++ b/binaries/data/mods/public/simulation/templates/structures/merc_camp_egyptian.xml @@ -30,7 +30,9 @@ MercenaryCamp Capture this structure to train mercenaries from Hellenistic Egypt. structures/military_settlement.png - phase_town + + phase_town + 20 diff --git a/binaries/data/mods/public/simulation/templates/structures/pers/ice_house.xml b/binaries/data/mods/public/simulation/templates/structures/pers/ice_house.xml index 04798f6b1c..172e3645b3 100644 --- a/binaries/data/mods/public/simulation/templates/structures/pers/ice_house.xml +++ b/binaries/data/mods/public/simulation/templates/structures/pers/ice_house.xml @@ -1,72 +1,74 @@ - - - - own - Yakhchal - - - 60 - - 100 - 100 - - - - - 12.0 - - - - 800 - decay|rubble/rubble_stone_3x3 - - - pers - Ice House - Yakhchāl - -City Village IceHouse - - CivSpecific - - phase_village - structures/yakhchal.png - - - 20 - 20 - - - - - - - - subterranean_aqueducts - - - - - 1.0 - - 2000 - - - - - interface/complete/building/complete_farmstead.xml - attack/destruction/building_collapse_large.xml - - - - false - 20 - 30000 - - - 20 - - - structures/persians/ice_house.xml - structures/fndn_4x4.xml - - + + + + own + Yakhchal + + + 60 + + 100 + 100 + + + + + 12.0 + + + + 800 + decay|rubble/rubble_stone_3x3 + + + pers + Ice House + Yakhchāl + -City Village IceHouse + + CivSpecific + + structures/yakhchal.png + + phase_village + + + + 20 + 20 + + + + + + + + subterranean_aqueducts + + + + + 1.0 + + 2000 + + + + + interface/complete/building/complete_farmstead.xml + attack/destruction/building_collapse_large.xml + + + + false + 20 + 30000 + + + 20 + + + structures/persians/ice_house.xml + structures/fndn_4x4.xml + + diff --git a/binaries/data/mods/public/simulation/templates/structures/ptol/mercenary_camp.xml b/binaries/data/mods/public/simulation/templates/structures/ptol/mercenary_camp.xml index 0ca6929ea9..62efdd353f 100644 --- a/binaries/data/mods/public/simulation/templates/structures/ptol/mercenary_camp.xml +++ b/binaries/data/mods/public/simulation/templates/structures/ptol/mercenary_camp.xml @@ -29,7 +29,9 @@ MercenaryCamp Cheap Barracks-like structure that is buildable in neutral territory, but casts no territory influence. Train Mercenaries. structures/mercenary_camp.png - phase_town + + phase_town + 20 diff --git a/binaries/data/mods/public/simulation/templates/structures/rome/army_camp.xml b/binaries/data/mods/public/simulation/templates/structures/rome/army_camp.xml index b12db1a931..d9d05e5ac8 100644 --- a/binaries/data/mods/public/simulation/templates/structures/rome/army_camp.xml +++ b/binaries/data/mods/public/simulation/templates/structures/rome/army_camp.xml @@ -75,7 +75,9 @@ ConquestCritical CivSpecific City ArmyCamp structures/roman_camp.png - phase_city + + phase_city + 100 diff --git a/binaries/data/mods/public/simulation/templates/structures/rome/temple_mars.xml b/binaries/data/mods/public/simulation/templates/structures/rome/temple_mars.xml index 310c6958a4..22247fae44 100644 --- a/binaries/data/mods/public/simulation/templates/structures/rome/temple_mars.xml +++ b/binaries/data/mods/public/simulation/templates/structures/rome/temple_mars.xml @@ -12,7 +12,9 @@ Temple of Mars Aedēs Mārtiālis -Town City TempleOfMars - phase_city + + phase_city + diff --git a/binaries/data/mods/public/simulation/templates/structures/rome/wallset_siege.xml b/binaries/data/mods/public/simulation/templates/structures/rome/wallset_siege.xml index 3dc23f45cd..7fdcf2bc98 100644 --- a/binaries/data/mods/public/simulation/templates/structures/rome/wallset_siege.xml +++ b/binaries/data/mods/public/simulation/templates/structures/rome/wallset_siege.xml @@ -8,7 +8,9 @@ CivSpecific SiegeWall structures/siege_wall.png - phase_city + + phase_city + diff --git a/binaries/data/mods/public/simulation/templates/structures/wallset_palisade.xml b/binaries/data/mods/public/simulation/templates/structures/wallset_palisade.xml index 3166af3dc9..655b65194b 100644 --- a/binaries/data/mods/public/simulation/templates/structures/wallset_palisade.xml +++ b/binaries/data/mods/public/simulation/templates/structures/wallset_palisade.xml @@ -5,7 +5,9 @@ Wall off an area. Build in own or neutral territory. -Wall Palisade structures/palisade_wall.png - phase_village + + phase_village + diff --git a/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre_military_colony.xml b/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre_military_colony.xml index c08bd7973f..4eac652a70 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre_military_colony.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre_military_colony.xml @@ -28,7 +28,9 @@ template_structure_civic_civil_centre_military_colony Colony structures/military_settlement.png - phase_town + + phase_town + 40 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_civic_house.xml b/binaries/data/mods/public/simulation/templates/template_structure_civic_house.xml index e4ca0bcaf6..d9b4af4d65 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_civic_house.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_civic_house.xml @@ -27,7 +27,9 @@ template_structure_civic_house Village House structures/house.png - phase_village + + phase_village + 15 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_civic_stoa.xml b/binaries/data/mods/public/simulation/templates/template_structure_civic_stoa.xml index 338003f258..b1b44342ff 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_civic_stoa.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_civic_stoa.xml @@ -29,7 +29,9 @@ -ConquestCritical Town Stoa structures/stoa.png - phase_town + + phase_town + 20 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_civic_temple.xml b/binaries/data/mods/public/simulation/templates/template_structure_civic_temple.xml index e6a1cf41db..c61cef6b6e 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_civic_temple.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_civic_temple.xml @@ -31,7 +31,9 @@ Train Healers and research healing technologies. Town Temple structures/temple.png - phase_town + + phase_town + 60 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_artillery.xml b/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_artillery.xml index 8696e39ee4..8b82979f57 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_artillery.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_artillery.xml @@ -55,7 +55,9 @@ template_structure_defensive_tower_artillery ArtilleryTower structures/tower_artillery.png - phase_city + + phase_city + 40 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_bolt.xml b/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_bolt.xml index 85c7466c51..e4bb79e355 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_bolt.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_bolt.xml @@ -52,7 +52,9 @@ template_structure_defensive_tower_bolt BoltTower structures/tower_bolt.png - phase_city + + phase_city + 40 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_sentry.xml b/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_sentry.xml index d383915599..c51758cb0c 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_sentry.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_sentry.xml @@ -34,7 +34,9 @@ Garrison Infantry for additional arrows. Needs the “Murder Holes” technology to protect its foot. SentryTower structures/sentry_tower.png - phase_village + + phase_village + 20 @@ -57,13 +59,15 @@ structures/{civ}/defense_tower Reinforce with stone and upgrade to a defense tower. - phase_town 50 100 upgrading + + phase_town + diff --git a/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_stone.xml b/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_stone.xml index 8e26a387b5..d5e651134b 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_stone.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_stone.xml @@ -32,7 +32,9 @@ Garrison Infantry for additional arrows. Needs the “Murder Holes” technology to protect its foot. StoneTower structures/defense_tower.png - phase_town + + phase_town + 20 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_defensive_wall.xml b/binaries/data/mods/public/simulation/templates/template_structure_defensive_wall.xml index 0b3e718f56..c7ed5d0baa 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_defensive_wall.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_defensive_wall.xml @@ -14,7 +14,9 @@ Wall off your town for a stout defense. Wall structures/wall.png - phase_town + + phase_town + diff --git a/binaries/data/mods/public/simulation/templates/template_structure_economic_farmstead.xml b/binaries/data/mods/public/simulation/templates/template_structure_economic_farmstead.xml index 46cf74a0e6..7fd10b9f4d 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_economic_farmstead.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_economic_farmstead.xml @@ -29,7 +29,9 @@ DropsiteFood Village Farmstead structures/farmstead.png - phase_village + + phase_village + 20 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_economic_market.xml b/binaries/data/mods/public/simulation/templates/template_structure_economic_market.xml index b140ce08d4..097318ff6d 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_economic_market.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_economic_market.xml @@ -27,7 +27,9 @@ Barter Trade Town Market structures/market.png - phase_town + + phase_town + 60 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_economic_storehouse.xml b/binaries/data/mods/public/simulation/templates/template_structure_economic_storehouse.xml index 59277b1fb8..fb5cc42743 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_economic_storehouse.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_economic_storehouse.xml @@ -27,7 +27,9 @@ DropsiteWood DropsiteMetal DropsiteStone Village Storehouse structures/storehouse.png - phase_village + + phase_village + 20 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_arsenal.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_arsenal.xml index 67d26ec2c6..3da594f9c8 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_military_arsenal.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_military_arsenal.xml @@ -27,7 +27,9 @@ Train Champion Infantry Crossbowmen, construct Siege Engines, and research Siege Engine technologies. City Arsenal structures/siege_workshop.png - phase_city + + phase_city + 60 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_barracks.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_barracks.xml index 6c42f8e3ba..24eb4a5980 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_military_barracks.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_military_barracks.xml @@ -28,7 +28,9 @@ Train Infantry and research Infantry technologies. Village Barracks structures/barracks.png - phase_village + + phase_village + 40 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_elephant_stable.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_elephant_stable.xml index 6889c61916..425def9bc1 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_military_elephant_stable.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_military_elephant_stable.xml @@ -27,8 +27,10 @@ template_structure_military_elephant_stable Train Elephants and research Elephant technologies. City ElephantStable - phase_city structures/stable_elephant.png + + phase_city + 40 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_embassy.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_embassy.xml index 794a90fe85..20ef6faa1a 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_military_embassy.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_military_embassy.xml @@ -22,7 +22,9 @@ Embassy template_structure_military_embassy Town Embassy - phase_town + + phase_town + diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_forge.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_forge.xml index f7ec78bc03..384082faf8 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_military_forge.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_military_forge.xml @@ -25,7 +25,9 @@ -ConquestCritical Town Forge structures/blacksmith.png - phase_town + + phase_town + 40 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml index d87e6188bc..723f651979 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml @@ -68,7 +68,9 @@ GarrisonFortress Defensive Fortress structures/fortress.png - phase_city + + phase_city + 60 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_range.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_range.xml index 0a59aa6830..13d66d8064 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_military_range.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_military_range.xml @@ -24,7 +24,9 @@ Train Ranged Infantry and research technologies. Village Range structures/range.png - phase_village + + phase_village + 40 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_stable.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_stable.xml index 03df5362a6..904bc92e97 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_military_stable.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_military_stable.xml @@ -28,7 +28,9 @@ Train Cavalry and research Cavalry technologies. Village Stable structures/stable_01.png - phase_village + + phase_village + 40 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml b/binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml index 1dbb5ffb44..750a726697 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml @@ -31,7 +31,9 @@ Raise Domestic Animals for immediate slaughter, or garrison them instead to gain a free trickle of food. Economic Village Corral structures/corral.png - phase_village + + phase_village + 20 diff --git a/binaries/data/mods/public/simulation/templates/template_structure_special.xml b/binaries/data/mods/public/simulation/templates/template_structure_special.xml index 958a8612dc..3755767a82 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_special.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_special.xml @@ -18,7 +18,9 @@ Special Structure City - phase_city + + phase_city + diff --git a/binaries/data/mods/public/simulation/templates/template_structure_wonder.xml b/binaries/data/mods/public/simulation/templates/template_structure_wonder.xml index dfb370707c..d96d68c989 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_wonder.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_wonder.xml @@ -40,7 +40,9 @@ ConquestCritical City Wonder structures/wonder.png - phase_city + + phase_city + 200 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_champion.xml b/binaries/data/mods/public/simulation/templates/template_unit_champion.xml index 5399e2c8f2..d8627d71e3 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_champion.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_champion.xml @@ -13,7 +13,9 @@ Human Soldier Champion Champion Unit - phase_city + + phase_city + 8 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml b/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml index 64c759fd11..9057c2ce18 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml @@ -19,7 +19,9 @@ FastMoving Cavalry Champion Cavalry - unlock_champion_cavalry + + unlock_champion_cavalry + 200 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic_cattle.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic_cattle.xml index 24fe6db56c..6efd1e925c 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic_cattle.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic_cattle.xml @@ -1,7 +1,9 @@ - phase_city + + phase_city + 2000 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_hero.xml b/binaries/data/mods/public/simulation/templates/template_unit_hero.xml index 82cfdedba8..7cfcd1f10a 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_hero.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_hero.xml @@ -25,7 +25,9 @@ Soldier Hero Hero technologies/laurel_wreath.png - phase_city + + phase_city + 400 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml b/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml index 6a6f29f518..45d0acae64 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml @@ -50,7 +50,9 @@ Light Warship Garrison units for transport and to increase firepower. Deals triple damage against Ships. Ranged Warship Bireme - phase_town + + phase_town + 80 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_ship_fire.xml b/binaries/data/mods/public/simulation/templates/template_unit_ship_fire.xml index cd7665dc73..32938cc1aa 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_ship_fire.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_ship_fire.xml @@ -40,7 +40,9 @@ Fire Ship Unrepairable. Gradually loses health. Can only attack Ships. Melee Warship Fireship - phase_town + + phase_town + diff --git a/binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml b/binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml index 2f2528ef53..434fa84bdb 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml @@ -19,7 +19,9 @@ Trade between docks. Garrison a Trader aboard for additional profit (+20% for each garrisoned). Gather profitable aquatic treasures. -ConquestCritical Trader Bribable - phase_town + + phase_town + 20 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml b/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml index e588ff98dd..8f658d3c6b 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml @@ -54,7 +54,9 @@ Heavy Warship Garrison units for transport and to increase firepower. Ranged Warship Quinquereme - phase_city + + phase_city + 200 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml b/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml index e8aa1d8d8f..6b7b9f56fb 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml @@ -50,7 +50,9 @@ Medium Warship Garrison units for transport and to increase firepower. Deals triple damage against Ships. Ranged Warship Trireme - phase_town + + phase_town + 140 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_siege.xml b/binaries/data/mods/public/simulation/templates/template_unit_siege.xml index b41767f9de..21fc97922e 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_siege.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_siege.xml @@ -15,7 +15,9 @@ -Organic Siege Siege - phase_city + + phase_city + pitch-roll diff --git a/binaries/data/mods/public/simulation/templates/template_unit_support_healer.xml b/binaries/data/mods/public/simulation/templates/template_unit_support_healer.xml index e81fb5bfec..393d1c9d12 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_support_healer.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_support_healer.xml @@ -27,8 +27,10 @@ Healer template_unit_support_healer Basic - phase_town Heal units. + + phase_town + 8 diff --git a/binaries/data/mods/public/simulation/templates/template_wallset.xml b/binaries/data/mods/public/simulation/templates/template_wallset.xml index fda40c44a3..994b249ec7 100644 --- a/binaries/data/mods/public/simulation/templates/template_wallset.xml +++ b/binaries/data/mods/public/simulation/templates/template_wallset.xml @@ -10,8 +10,10 @@ Wall off an area. Wall structures/wall.png - phase_town true + + phase_town + false diff --git a/binaries/data/mods/public/simulation/templates/units/athen/cavalry_swordsman_b.xml b/binaries/data/mods/public/simulation/templates/units/athen/cavalry_swordsman_b.xml index 1797eacc1b..b1f61381d0 100644 --- a/binaries/data/mods/public/simulation/templates/units/athen/cavalry_swordsman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/athen/cavalry_swordsman_b.xml @@ -10,7 +10,9 @@ Greek Cavalry Hippeús units/athen/cavalry_swordsman.png - phase_town + + phase_town + units/athen/cavalry_swordsman_a diff --git a/binaries/data/mods/public/simulation/templates/units/athen/champion_marine.xml b/binaries/data/mods/public/simulation/templates/units/athen/champion_marine.xml index fbdd5e56d2..2a19ed4c4a 100644 --- a/binaries/data/mods/public/simulation/templates/units/athen/champion_marine.xml +++ b/binaries/data/mods/public/simulation/templates/units/athen/champion_marine.xml @@ -4,7 +4,9 @@ Athenian Marine Epibátēs Athēnaîos units/athen/champion_marine.png - iphicratean_reforms + + iphicratean_reforms + units/athenians/infantry_swordsman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/athen/infantry_javelineer_b.xml b/binaries/data/mods/public/simulation/templates/units/athen/infantry_javelineer_b.xml index e035e83504..9df46ee91a 100644 --- a/binaries/data/mods/public/simulation/templates/units/athen/infantry_javelineer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/athen/infantry_javelineer_b.xml @@ -5,7 +5,9 @@ Thracian Peltast Peltastḗs Thrâx units/athen/infantry_javelinist.png - phase_town + + phase_town + units/athen/infantry_javelineer_a diff --git a/binaries/data/mods/public/simulation/templates/units/athen/infantry_marine_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/athen/infantry_marine_archer_b.xml index 74260067b8..d59a7e4de3 100644 --- a/binaries/data/mods/public/simulation/templates/units/athen/infantry_marine_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/athen/infantry_marine_archer_b.xml @@ -5,7 +5,9 @@ Cretan Mercenary Archer Toxótēs Krētikós units/mace/infantry_archer.png - iphicratean_reforms + + iphicratean_reforms + units/athen/infantry_marine_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/athen/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/athen/support_female_citizen_house.xml index 4b42c694bb..0c181b71a7 100644 --- a/binaries/data/mods/public/simulation/templates/units/athen/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/athen/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/brit/cavalry_swordsman_b.xml b/binaries/data/mods/public/simulation/templates/units/brit/cavalry_swordsman_b.xml index 9a179a37fb..da5efc7192 100644 --- a/binaries/data/mods/public/simulation/templates/units/brit/cavalry_swordsman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/brit/cavalry_swordsman_b.xml @@ -6,7 +6,9 @@ Eporedos Celtic Cavalry units/brit/cavalry_swordsman.png - phase_town + + phase_town + units/brit/cavalry_swordsman_a diff --git a/binaries/data/mods/public/simulation/templates/units/brit/champion_chariot.xml b/binaries/data/mods/public/simulation/templates/units/brit/champion_chariot.xml index 0f2ead431a..b6a2fb0227 100644 --- a/binaries/data/mods/public/simulation/templates/units/brit/champion_chariot.xml +++ b/binaries/data/mods/public/simulation/templates/units/brit/champion_chariot.xml @@ -11,7 +11,9 @@ units/brit/champion_chariot Chariot units/brit/champion_chariot.png - unlock_champion_chariots + + unlock_champion_chariots + units/britons/chariot_javelinist_c_m.xml diff --git a/binaries/data/mods/public/simulation/templates/units/brit/champion_infantry_swordsman.xml b/binaries/data/mods/public/simulation/templates/units/brit/champion_infantry_swordsman.xml index 6498fec14f..bf39b4255f 100644 --- a/binaries/data/mods/public/simulation/templates/units/brit/champion_infantry_swordsman.xml +++ b/binaries/data/mods/public/simulation/templates/units/brit/champion_infantry_swordsman.xml @@ -5,7 +5,9 @@ Brythonic Champion Argos units/brit/champion_infantry.png - unlock_champion_infantry + + unlock_champion_infantry + units/britons/infantry_swordsman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/brit/infantry_javelineer_b.xml b/binaries/data/mods/public/simulation/templates/units/brit/infantry_javelineer_b.xml index 04eb05d00d..ead6d94c7a 100644 --- a/binaries/data/mods/public/simulation/templates/units/brit/infantry_javelineer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/brit/infantry_javelineer_b.xml @@ -12,7 +12,9 @@ units/brit/infantry_javelineer_b Adretos units/brit/infantry_javelinist.png - phase_town + + phase_town + units/brit/infantry_javelineer_a diff --git a/binaries/data/mods/public/simulation/templates/units/brit/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/brit/support_female_citizen_house.xml index e402f5d23a..23c4b30b43 100644 --- a/binaries/data/mods/public/simulation/templates/units/brit/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/brit/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/cart/cavalry_spearman_ital_b.xml b/binaries/data/mods/public/simulation/templates/units/cart/cavalry_spearman_ital_b.xml index 0123ed5669..f9bed4d4d0 100644 --- a/binaries/data/mods/public/simulation/templates/units/cart/cavalry_spearman_ital_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/cart/cavalry_spearman_ital_b.xml @@ -6,7 +6,9 @@ Ḥayyāl Romaḥ Raḫūv units/cart/cavalry_spearman_ital_b units/cart/cavalry_spearman.png - phase_town + + phase_town + units/cart/cavalry_spearman_ital_a diff --git a/binaries/data/mods/public/simulation/templates/units/cart/cavalry_swordsman_gaul_b.xml b/binaries/data/mods/public/simulation/templates/units/cart/cavalry_swordsman_gaul_b.xml index 967d0cf207..4b3a2845e8 100644 --- a/binaries/data/mods/public/simulation/templates/units/cart/cavalry_swordsman_gaul_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/cart/cavalry_swordsman_gaul_b.xml @@ -6,7 +6,9 @@ Ḥayyāl Ḥerev Raḫūv units/cart/cavalry_swordsman_gaul_b units/cart/cavalry_swordsman_2.png - phase_town + + phase_town + units/cart/cavalry_swordsman_gaul_a diff --git a/binaries/data/mods/public/simulation/templates/units/cart/cavalry_swordsman_iber_b.xml b/binaries/data/mods/public/simulation/templates/units/cart/cavalry_swordsman_iber_b.xml index b6996430e9..095daab30a 100644 --- a/binaries/data/mods/public/simulation/templates/units/cart/cavalry_swordsman_iber_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/cart/cavalry_swordsman_iber_b.xml @@ -11,7 +11,9 @@ Ḥayyāl Ḥerev Raḫūv units/cart/cavalry_swordsman_iber_b units/cart/cavalry_swordsman.png - phase_town + + phase_town + units/cart/cavalry_swordsman_iber_a diff --git a/binaries/data/mods/public/simulation/templates/units/cart/infantry_javelineer_iber_b.xml b/binaries/data/mods/public/simulation/templates/units/cart/infantry_javelineer_iber_b.xml index 3d639f83bf..c6b2ef20c4 100644 --- a/binaries/data/mods/public/simulation/templates/units/cart/infantry_javelineer_iber_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/cart/infantry_javelineer_iber_b.xml @@ -14,7 +14,9 @@ Sǝḫīr Kidōn units/cart/infantry_javelineer_iber_b units/cart/infantry_javelinist.png - phase_town + + phase_town + units/cart/infantry_javelineer_iber_a diff --git a/binaries/data/mods/public/simulation/templates/units/cart/infantry_slinger_iber_b.xml b/binaries/data/mods/public/simulation/templates/units/cart/infantry_slinger_iber_b.xml index 2b4e1ffbcf..8fef77c406 100644 --- a/binaries/data/mods/public/simulation/templates/units/cart/infantry_slinger_iber_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/cart/infantry_slinger_iber_b.xml @@ -14,7 +14,9 @@ Qallāʿ Ibušimi units/cart/infantry_slinger_iber_b units/cart/infantry_slinger.png - phase_town + + phase_town + units/cart/infantry_slinger_iber_a diff --git a/binaries/data/mods/public/simulation/templates/units/cart/infantry_swordsman_gaul_b.xml b/binaries/data/mods/public/simulation/templates/units/cart/infantry_swordsman_gaul_b.xml index 154fb0a87f..a37e164424 100644 --- a/binaries/data/mods/public/simulation/templates/units/cart/infantry_swordsman_gaul_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/cart/infantry_swordsman_gaul_b.xml @@ -14,7 +14,9 @@ Seḫīr Ḥerev units/cart/infantry_swordsman_gaul_b units/cart/infantry_swordsman.png - phase_town + + phase_town + units/cart/infantry_swordsman_gaul_a diff --git a/binaries/data/mods/public/simulation/templates/units/cart/infantry_swordsman_ital_b.xml b/binaries/data/mods/public/simulation/templates/units/cart/infantry_swordsman_ital_b.xml index c8277742dc..d2566fc3cc 100644 --- a/binaries/data/mods/public/simulation/templates/units/cart/infantry_swordsman_ital_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/cart/infantry_swordsman_ital_b.xml @@ -14,7 +14,9 @@ Seḫīr Romaḥ units/cart/infantry_swordsman_ital_b units/cart/infantry_swordsman_2.png - phase_town + + phase_town + units/cart/infantry_swordsman_ital_a diff --git a/binaries/data/mods/public/simulation/templates/units/cart/ship_merchant.xml b/binaries/data/mods/public/simulation/templates/units/cart/ship_merchant.xml index 8b2781a752..dda40861f6 100644 --- a/binaries/data/mods/public/simulation/templates/units/cart/ship_merchant.xml +++ b/binaries/data/mods/public/simulation/templates/units/cart/ship_merchant.xml @@ -9,7 +9,9 @@ Seḥer Trade between docks. Garrison a Trader aboard for additional profit (+20% for each garrisoned). Gather profitable aquatic treasures. Carthaginians have +25% sea trading bonus. units/cart/ship_merchant.png - phase_village + + phase_village + diff --git a/binaries/data/mods/public/simulation/templates/units/cart/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/cart/support_female_citizen_house.xml index df6279d471..e895502bcb 100644 --- a/binaries/data/mods/public/simulation/templates/units/cart/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/cart/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/gaul/cavalry_swordsman_b.xml b/binaries/data/mods/public/simulation/templates/units/gaul/cavalry_swordsman_b.xml index fc99c3e6be..7f80d3d9e1 100644 --- a/binaries/data/mods/public/simulation/templates/units/gaul/cavalry_swordsman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/gaul/cavalry_swordsman_b.xml @@ -5,7 +5,9 @@ units/gaul/cavalry_swordsman_b Eporedos units/gaul/cavalry_swordsman.png - phase_town + + phase_town + units/gaul/cavalry_swordsman_a diff --git a/binaries/data/mods/public/simulation/templates/units/gaul/champion_fanatic.xml b/binaries/data/mods/public/simulation/templates/units/gaul/champion_fanatic.xml index cc7e9b4b27..d1997af531 100644 --- a/binaries/data/mods/public/simulation/templates/units/gaul/champion_fanatic.xml +++ b/binaries/data/mods/public/simulation/templates/units/gaul/champion_fanatic.xml @@ -12,7 +12,9 @@ Naked Fanatic Bariogaisatos units/gaul/champion_fanatic.png - phase_town + + phase_town + 12 diff --git a/binaries/data/mods/public/simulation/templates/units/gaul/champion_infantry_swordsman.xml b/binaries/data/mods/public/simulation/templates/units/gaul/champion_infantry_swordsman.xml index 77112c6b68..1acfba0fe5 100644 --- a/binaries/data/mods/public/simulation/templates/units/gaul/champion_infantry_swordsman.xml +++ b/binaries/data/mods/public/simulation/templates/units/gaul/champion_infantry_swordsman.xml @@ -4,7 +4,9 @@ gaul Soliduros units/gaul/champion_infantry.png - unlock_champion_infantry + + unlock_champion_infantry + units/gauls/infantry_swordsman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/gaul/infantry_slinger_b.xml b/binaries/data/mods/public/simulation/templates/units/gaul/infantry_slinger_b.xml index 2cacb88fae..395d1a5d5f 100644 --- a/binaries/data/mods/public/simulation/templates/units/gaul/infantry_slinger_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/gaul/infantry_slinger_b.xml @@ -10,7 +10,9 @@ units/gaul/infantry_slinger_b Talmoris units/gaul/infantry_slinger.png - phase_town + + phase_town + units/gaul/infantry_slinger_a diff --git a/binaries/data/mods/public/simulation/templates/units/gaul/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/gaul/support_female_citizen_house.xml index 5ad3bb1470..8eb16886d0 100644 --- a/binaries/data/mods/public/simulation/templates/units/gaul/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/gaul/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/han/cavalry_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/han/cavalry_archer_b.xml index c35a625234..4979750266 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/cavalry_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/cavalry_archer_b.xml @@ -5,7 +5,9 @@ units/han/cavalry_archer_b Gōng Qíbīng units/han/cavalry_archer.png - phase_town + + phase_town + units/han/cavalry_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/han/cavalry_crossbowman_b.xml b/binaries/data/mods/public/simulation/templates/units/han/cavalry_crossbowman_b.xml index a4ec518713..c5c8fb5a1b 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/cavalry_crossbowman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/cavalry_crossbowman_b.xml @@ -5,7 +5,9 @@ units/han/cavalry_crossbowman_b Han Cavalry Crossbowman units/han/cavalry_crossbowman.png - phase_town + + phase_town + units/han/cavalry_crossbowman_a diff --git a/binaries/data/mods/public/simulation/templates/units/han/cavalry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/han/cavalry_spearman_b.xml index 646815cc00..9fecdcb5be 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/cavalry_spearman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/cavalry_spearman_b.xml @@ -5,7 +5,9 @@ units/han/cavalry_spearman_b Máo Qíbīng units/han/cavalry_spearman.png - phase_town + + phase_town + units/han/cavalry_spearman_a diff --git a/binaries/data/mods/public/simulation/templates/units/han/champion_cavalry_spearman_academy.xml b/binaries/data/mods/public/simulation/templates/units/han/champion_cavalry_spearman_academy.xml index 437eb001bf..a728096c5e 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/champion_cavalry_spearman_academy.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/champion_cavalry_spearman_academy.xml @@ -5,7 +5,9 @@ Wu Wei Yin Cao Cao Guard units/han/champion_cavalry units/han/champion_cavalry_spearman.png - phase_city + + phase_city + units/han/cavalry_spearman_c_m.xml diff --git a/binaries/data/mods/public/simulation/templates/units/han/champion_chariot_academy.xml b/binaries/data/mods/public/simulation/templates/units/han/champion_chariot_academy.xml index be7dde87d8..46ed31db2d 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/champion_chariot_academy.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/champion_chariot_academy.xml @@ -9,8 +9,10 @@ Han War Chariot Zhanche Chariot - phase_city units/han/chariot.png + + phase_city + units/han/chariot_archer_m.xml diff --git a/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_archer_academy.xml b/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_archer_academy.xml index 116d6506e4..8d21691c25 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_archer_academy.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_archer_academy.xml @@ -6,7 +6,9 @@ Yǔ Lín units/han/champion_infantry_archer units/han/champion_infantry_archer.png - phase_city + + phase_city + units/han/infantry_archer_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_crossbowman_academy.xml b/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_crossbowman_academy.xml index 9caf4090cf..4f434b4524 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_crossbowman_academy.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_crossbowman_academy.xml @@ -4,7 +4,9 @@ han Juezhang units/han/champion_infantry_crossbowman.png - phase_city + + phase_city + units/han/infantry_crossbowman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_spearman_academy.xml b/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_spearman_academy.xml index 6413bbf02b..f9dd5ebcd5 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_spearman_academy.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/champion_infantry_spearman_academy.xml @@ -5,8 +5,10 @@ Palace Guard Spearman Hǔ Bēn units/han/champion_infantry_spearman - phase_city units/han/champion_infantry_swordsman.png + + phase_city + units/han/infantry_spearman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/han/infantry_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/han/infantry_archer_b.xml index 4affa81692..459ba74d76 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/infantry_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/infantry_archer_b.xml @@ -10,7 +10,9 @@ units/han/infantry_archer_b Shè Shǒu units/han/infantry_archer.png - phase_town + + phase_town + units/han/infantry_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/han/infantry_pikeman_b.xml b/binaries/data/mods/public/simulation/templates/units/han/infantry_pikeman_b.xml index 52e99a53f6..0764040c0c 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/infantry_pikeman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/infantry_pikeman_b.xml @@ -20,14 +20,13 @@ Halberdier Jǐ Bīng units/han/infantry_halberdman.png - phase_town + + phase_town + units/han/infantry_pikeman_a - - units/han/infantry_halberdman_b.xml - @@ -41,4 +40,7 @@ special/formations/anti_cavalry + + units/han/infantry_halberdman_b.xml + diff --git a/binaries/data/mods/public/simulation/templates/units/han/infantry_swordsman_special_b.xml b/binaries/data/mods/public/simulation/templates/units/han/infantry_swordsman_special_b.xml index 3be96af73e..2eec23fdcd 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/infantry_swordsman_special_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/infantry_swordsman_special_b.xml @@ -1,21 +1,23 @@ - - - - - -structures/wallset_palisade - - - - han - units/han/infantry_swordsman_b - Dāo Bīng - units/han/infantry_swordsman.png - phase_town - - - units/han/infantry_swordsman_special_a - - - units/han/infantry_swordsman_b.xml - - + + + + + -structures/wallset_palisade + + + + han + units/han/infantry_swordsman_b + Dāo Bīng + units/han/infantry_swordsman.png + + phase_town + + + + units/han/infantry_swordsman_special_a + + + units/han/infantry_swordsman_b.xml + + diff --git a/binaries/data/mods/public/simulation/templates/units/han/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/han/support_female_citizen_house.xml index 7e5af36552..0a7ea36b05 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/han/support_minister.xml b/binaries/data/mods/public/simulation/templates/units/han/support_minister.xml index 866a7a6fea..1ef35a5cf1 100644 --- a/binaries/data/mods/public/simulation/templates/units/han/support_minister.xml +++ b/binaries/data/mods/public/simulation/templates/units/han/support_minister.xml @@ -44,7 +44,9 @@ Organic Human Minister units/han/minister.png - phase_town + + phase_town + 150 diff --git a/binaries/data/mods/public/simulation/templates/units/iber/cavalry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/iber/cavalry_spearman_b.xml index 77b919ceed..9be6f9d47f 100644 --- a/binaries/data/mods/public/simulation/templates/units/iber/cavalry_spearman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/iber/cavalry_spearman_b.xml @@ -5,7 +5,9 @@ units/iber/cavalry_spearman_b Lantzari units/iber/cavalry_spearman.png - phase_town + + phase_town + units/iber/cavalry_spearman_a diff --git a/binaries/data/mods/public/simulation/templates/units/iber/champion_infantry_swordsman.xml b/binaries/data/mods/public/simulation/templates/units/iber/champion_infantry_swordsman.xml index 15f9016297..e31c860528 100644 --- a/binaries/data/mods/public/simulation/templates/units/iber/champion_infantry_swordsman.xml +++ b/binaries/data/mods/public/simulation/templates/units/iber/champion_infantry_swordsman.xml @@ -9,7 +9,9 @@ iber Leial Ezpatari units/iber/champion_infantry.png - unlock_champion_infantry + + unlock_champion_infantry + units/iberians/infantry_swordsman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/iber/infantry_slinger_b.xml b/binaries/data/mods/public/simulation/templates/units/iber/infantry_slinger_b.xml index 0b56c07cbd..5f84659619 100644 --- a/binaries/data/mods/public/simulation/templates/units/iber/infantry_slinger_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/iber/infantry_slinger_b.xml @@ -10,7 +10,9 @@ units/iber/infantry_slinger_b Habailari units/iber/infantry_slinger.png - phase_town + + phase_town + units/iber/infantry_slinger_a diff --git a/binaries/data/mods/public/simulation/templates/units/iber/infantry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/iber/infantry_spearman_b.xml index 4679848e20..458dbf91af 100644 --- a/binaries/data/mods/public/simulation/templates/units/iber/infantry_spearman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/iber/infantry_spearman_b.xml @@ -10,7 +10,9 @@ units/iber/infantry_spearman_b Ezkutari units/iber/infantry_spearman.png - phase_town + + phase_town + units/iber/infantry_spearman_a diff --git a/binaries/data/mods/public/simulation/templates/units/iber/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/iber/support_female_citizen_house.xml index 1509dba71b..cf576adff3 100644 --- a/binaries/data/mods/public/simulation/templates/units/iber/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/iber/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/kush/cavalry_javelineer_b.xml b/binaries/data/mods/public/simulation/templates/units/kush/cavalry_javelineer_b.xml index 798ee2ea8b..6de66c9862 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/cavalry_javelineer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/cavalry_javelineer_b.xml @@ -6,8 +6,10 @@ units/kush/cavalry_javelineer_b iry hr ssmwtt Napatan Light Cavalry - phase_village units/kush/cavalry_javelinist.png + + phase_village + units/kush/cavalry_javelineer_a diff --git a/binaries/data/mods/public/simulation/templates/units/kush/cavalry_javelineer_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/kush/cavalry_javelineer_merc_b.xml index 5241d2cd80..de1b558716 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/cavalry_javelineer_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/cavalry_javelineer_merc_b.xml @@ -18,7 +18,9 @@ nhw Bulahau gml Camel units/kush/camel_javelinist.png - phase_town + + phase_town + units/kush/cavalry_javelineer_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/kush/cavalry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/kush/cavalry_spearman_b.xml index 362fb98e4e..3e9c41bf5c 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/cavalry_spearman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/cavalry_spearman_b.xml @@ -7,7 +7,9 @@ Meroitic Heavy Cavalry Htr units/kush/cavalry_spearman.png - phase_town + + phase_town + units/kush/cavalry_spearman_a diff --git a/binaries/data/mods/public/simulation/templates/units/kush/champion_infantry_archer.xml b/binaries/data/mods/public/simulation/templates/units/kush/champion_infantry_archer.xml index 71d355d685..23b4af7944 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/champion_infantry_archer.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/champion_infantry_archer.xml @@ -6,7 +6,9 @@ Noble Archer Hry pdty units/kush/champion_archer.png - unlock_champion_infantry + + unlock_champion_infantry + units/kushites/infantry_archer_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/kush/infantry_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/kush/infantry_archer_b.xml index d4fba29146..0b56bbb4e1 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/infantry_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/infantry_archer_b.xml @@ -14,8 +14,10 @@ units/kush/infantry_archer_b Nubian Archer Pdty Nhsyw - phase_village units/kush/infantry_archer.png + + phase_village + units/kush/infantry_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/kush/infantry_javelineer_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/kush/infantry_javelineer_merc_b.xml index 77f1f724a2..887e9a66a7 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/infantry_javelineer_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/infantry_javelineer_merc_b.xml @@ -15,7 +15,9 @@ Noba Skirmisher nhw ʿhȝw Noba units/kush/infantry_javelinist.png - phase_town + + phase_town + units/kush/infantry_javelineer_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/kush/infantry_maceman_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/kush/infantry_maceman_merc_b.xml index 38ac1c12fc..a86e807e83 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/infantry_maceman_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/infantry_maceman_merc_b.xml @@ -15,7 +15,9 @@ Noba Maceman nhw Noba units/kush/infantry_maceman.png - phase_town + + phase_town + units/kush/infantry_maceman_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/kush/infantry_pikeman_b.xml b/binaries/data/mods/public/simulation/templates/units/kush/infantry_pikeman_b.xml index af67dcd1c7..568c03238d 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/infantry_pikeman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/infantry_pikeman_b.xml @@ -15,7 +15,9 @@ Meroitic Pikeman siȝwrd units/kush/infantry_pikeman.png - phase_town + + phase_town + units/kush/infantry_pikeman_a diff --git a/binaries/data/mods/public/simulation/templates/units/kush/infantry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/kush/infantry_spearman_b.xml index 56d81e2e91..7eeccbac78 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/infantry_spearman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/infantry_spearman_b.xml @@ -14,8 +14,10 @@ units/kush/infantry_spearman_b Nubian Spearman iry-rdwy Nhsyw - phase_village units/kush/infantry_spearman.png + + phase_village + units/kush/infantry_spearman_a diff --git a/binaries/data/mods/public/simulation/templates/units/kush/infantry_swordsman_b.xml b/binaries/data/mods/public/simulation/templates/units/kush/infantry_swordsman_b.xml index 299fd3c1b4..ead7034765 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/infantry_swordsman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/infantry_swordsman_b.xml @@ -15,7 +15,9 @@ Meroitic Swordsman knw hps units/kush/infantry_swordsman.png - phase_town + + phase_town + units/kush/infantry_swordsman_a diff --git a/binaries/data/mods/public/simulation/templates/units/kush/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/kush/support_female_citizen_house.xml index 0b379d5404..2ccf281d2e 100644 --- a/binaries/data/mods/public/simulation/templates/units/kush/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/kush/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/mace/cavalry_javelineer_b.xml b/binaries/data/mods/public/simulation/templates/units/mace/cavalry_javelineer_b.xml index 5734d57fa1..2f441259ab 100644 --- a/binaries/data/mods/public/simulation/templates/units/mace/cavalry_javelineer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/mace/cavalry_javelineer_b.xml @@ -7,7 +7,9 @@ Odrysian Skirmish Cavalry Hippakontistḕs Odrysós units/mace/cavalry_javelinist.png - phase_town + + phase_town + units/mace/cavalry_javelineer_a diff --git a/binaries/data/mods/public/simulation/templates/units/mace/champion_infantry_spearman.xml b/binaries/data/mods/public/simulation/templates/units/mace/champion_infantry_spearman.xml index 2e553d0de7..3d31d510bc 100644 --- a/binaries/data/mods/public/simulation/templates/units/mace/champion_infantry_spearman.xml +++ b/binaries/data/mods/public/simulation/templates/units/mace/champion_infantry_spearman.xml @@ -7,7 +7,9 @@ Hypaspistḗs units/mace/champion_infantry_spearman units/mace/hypaspist.png - unlock_champion_infantry + + unlock_champion_infantry + units/mace/champion_infantry_spearman_02 diff --git a/binaries/data/mods/public/simulation/templates/units/mace/champion_infantry_swordsman.xml b/binaries/data/mods/public/simulation/templates/units/mace/champion_infantry_swordsman.xml index 94be1af285..141195280e 100644 --- a/binaries/data/mods/public/simulation/templates/units/mace/champion_infantry_swordsman.xml +++ b/binaries/data/mods/public/simulation/templates/units/mace/champion_infantry_swordsman.xml @@ -11,7 +11,9 @@ Thracian Black Cloak Rhomphaiaphoros units/thrac/champion_infantry_swordsman.png - unlock_champion_infantry + + unlock_champion_infantry + units/macedonians/infantry_swordsman_c_thracian.xml diff --git a/binaries/data/mods/public/simulation/templates/units/mace/infantry_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/mace/infantry_archer_b.xml index 36d5e4ef17..6084e89291 100644 --- a/binaries/data/mods/public/simulation/templates/units/mace/infantry_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/mace/infantry_archer_b.xml @@ -7,7 +7,9 @@ Cretan Mercenary Archer Toxótēs Krētikós units/mace/infantry_archer.png - phase_town + + phase_town + units/mace/infantry_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/mace/infantry_slinger_b.xml b/binaries/data/mods/public/simulation/templates/units/mace/infantry_slinger_b.xml index 1d93195df5..68f7cf3f7f 100644 --- a/binaries/data/mods/public/simulation/templates/units/mace/infantry_slinger_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/mace/infantry_slinger_b.xml @@ -7,7 +7,9 @@ Rhodian Slinger Sphendonḗtēs Rhódios units/mace/infantry_slinger.png - phase_town + + phase_town + units/mace/infantry_slinger_a diff --git a/binaries/data/mods/public/simulation/templates/units/mace/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/mace/support_female_citizen_house.xml index d16c000113..438d1daf66 100644 --- a/binaries/data/mods/public/simulation/templates/units/mace/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/mace/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/maur/cavalry_swordsman_b.xml b/binaries/data/mods/public/simulation/templates/units/maur/cavalry_swordsman_b.xml index e729a384c2..9263ae037f 100644 --- a/binaries/data/mods/public/simulation/templates/units/maur/cavalry_swordsman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/maur/cavalry_swordsman_b.xml @@ -6,7 +6,9 @@ Indian Raiding Cavalry Aśvārohagaṇaḥ units/maur/cavalry_swordsman.png - phase_town + + phase_town + units/maur/cavalry_swordsman_a diff --git a/binaries/data/mods/public/simulation/templates/units/maur/champion_chariot.xml b/binaries/data/mods/public/simulation/templates/units/maur/champion_chariot.xml index eb17140964..f331022b89 100644 --- a/binaries/data/mods/public/simulation/templates/units/maur/champion_chariot.xml +++ b/binaries/data/mods/public/simulation/templates/units/maur/champion_chariot.xml @@ -11,7 +11,9 @@ units/maur/champion_chariot Chariot units/maur/champion_chariot.png - unlock_champion_chariots + + unlock_champion_chariots + units/mauryas/chariot_archer_c_m.xml diff --git a/binaries/data/mods/public/simulation/templates/units/maur/champion_infantry_maceman.xml b/binaries/data/mods/public/simulation/templates/units/maur/champion_infantry_maceman.xml index 0e11f1a004..1fbf624476 100644 --- a/binaries/data/mods/public/simulation/templates/units/maur/champion_infantry_maceman.xml +++ b/binaries/data/mods/public/simulation/templates/units/maur/champion_infantry_maceman.xml @@ -6,7 +6,9 @@ Yōddha units/maur/champion_infantry units/maur/champion_maceman.png - unlock_champion_infantry + + unlock_champion_infantry + units/mauryas/infantry_maceman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/maur/elephant_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/maur/elephant_archer_b.xml index c80d2fd620..ffca6f5f7d 100644 --- a/binaries/data/mods/public/simulation/templates/units/maur/elephant_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/maur/elephant_archer_b.xml @@ -6,7 +6,9 @@ Vachii Gaja units/maur/elephant_archer_b units/maur/elephant_archer.png - phase_town + + phase_town + units/maur/elephant_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/maur/hero_chandragupta_infantry.xml b/binaries/data/mods/public/simulation/templates/units/maur/hero_chandragupta_infantry.xml index a91acabde1..87a3ea9cdd 100644 --- a/binaries/data/mods/public/simulation/templates/units/maur/hero_chandragupta_infantry.xml +++ b/binaries/data/mods/public/simulation/templates/units/maur/hero_chandragupta_infantry.xml @@ -10,12 +10,14 @@ units/maur/hero_chandragupta This gives Chandragupta Maurya his War Elephant. - phase_city 200 200 + + phase_city + diff --git a/binaries/data/mods/public/simulation/templates/units/maur/infantry_swordsman_b.xml b/binaries/data/mods/public/simulation/templates/units/maur/infantry_swordsman_b.xml index 1119b1649d..f3d198f48e 100644 --- a/binaries/data/mods/public/simulation/templates/units/maur/infantry_swordsman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/maur/infantry_swordsman_b.xml @@ -17,7 +17,9 @@ Indian Swordsman Khadagdhari units/maur/infantry_swordsman.png - phase_town + + phase_town + units/maur/infantry_swordsman_a diff --git a/binaries/data/mods/public/simulation/templates/units/maur/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/maur/support_female_citizen_house.xml index 9d0c5492c6..ed7cfca5b5 100644 --- a/binaries/data/mods/public/simulation/templates/units/maur/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/maur/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_archer_b.xml index 7a1c4cdad6..f4ab00bfc3 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_archer_b.xml @@ -7,7 +7,9 @@ Parthian Horse Archer Asabāra Parθava units/pers/cavalry_archer.png - phase_town + + phase_town + units/pers/cavalry_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_a_trireme.xml b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_a_trireme.xml index cb49b3d72a..d8e441f47c 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_a_trireme.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_a_trireme.xml @@ -1,7 +1,9 @@ - equine_transports + + equine_transports + units/pers/cavalry_axeman_e_trireme diff --git a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_b.xml b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_b.xml index 76a1af252e..aac80a2109 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_b.xml @@ -7,7 +7,9 @@ Hyrcanian Cavalry Asabāra Varkaniya units/pers/cavalry_axeman.png - phase_town + + phase_town + units/pers/cavalry_axeman_a diff --git a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_b_trireme.xml b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_b_trireme.xml index 4866e996c0..8705cf5086 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_b_trireme.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_b_trireme.xml @@ -1,7 +1,9 @@ - equine_transports + + equine_transports + units/pers/cavalry_axeman_a_trireme diff --git a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_e_trireme.xml b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_e_trireme.xml index e8df27a710..f092de1ec4 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_e_trireme.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_axeman_e_trireme.xml @@ -1,6 +1,8 @@ - equine_transports + + equine_transports + diff --git a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_a_trireme.xml b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_a_trireme.xml index 10589b8754..936c63a596 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_a_trireme.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_a_trireme.xml @@ -1,7 +1,9 @@ - equine_transports + + equine_transports + units/pers/cavalry_javelineer_e_trireme diff --git a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_b_trireme.xml b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_b_trireme.xml index 1a1671f9fc..66d8421f26 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_b_trireme.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_b_trireme.xml @@ -1,7 +1,9 @@ - equine_transports + + equine_transports + units/pers/cavalry_javelineer_a_trireme diff --git a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_e_trireme.xml b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_e_trireme.xml index 572387f7e9..9d71699cde 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_e_trireme.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_javelineer_e_trireme.xml @@ -1,6 +1,8 @@ - equine_transports + + equine_transports + diff --git a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_spearman_b.xml index 2fdff39a20..1139c69ee1 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/cavalry_spearman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/cavalry_spearman_b.xml @@ -7,7 +7,9 @@ Cappadocian Cavalry Asabāra Katpatuka units/pers/cavalry_spearman.png - phase_town + + phase_town + units/pers/cavalry_spearman_a diff --git a/binaries/data/mods/public/simulation/templates/units/pers/champion_chariot.xml b/binaries/data/mods/public/simulation/templates/units/pers/champion_chariot.xml index b957a83248..7d4ea66fdb 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/champion_chariot.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/champion_chariot.xml @@ -11,7 +11,9 @@ Raθa Bābiruviya Chariot units/pers/chariot_archer.png - unlock_champion_chariots + + unlock_champion_chariots + units/persians/chariot_archer_e_m.xml diff --git a/binaries/data/mods/public/simulation/templates/units/pers/infantry_javelineer_b.xml b/binaries/data/mods/public/simulation/templates/units/pers/infantry_javelineer_b.xml index 28cc7d115a..c35c84bb58 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/infantry_javelineer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/infantry_javelineer_b.xml @@ -7,7 +7,9 @@ Lydian Auxiliary Pastiš Spardiya units/pers/infantry_javelinist.png - phase_town + + phase_town + units/pers/infantry_javelineer_a diff --git a/binaries/data/mods/public/simulation/templates/units/pers/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/pers/support_female_citizen_house.xml index f349450262..6136e28895 100644 --- a/binaries/data/mods/public/simulation/templates/units/pers/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/pers/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_archer_b.xml index 9b864cd7ce..133b040561 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_archer_b.xml @@ -17,7 +17,9 @@ Nabataean Camel Archer Mutsābiq Gamal Nabatu units/ptol/camel_archer.png - phase_village + + phase_village + units/ptol/cavalry_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_javelineer_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_javelineer_merc_b.xml index f0010a3bc7..44cd8f8b77 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_javelineer_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_javelineer_merc_b.xml @@ -6,7 +6,9 @@ Tarantine Settler Cavalry Hippeús Tarantînos units/hele/tarentine_cavalry_e.png - phase_town + + phase_town + units/ptol/cavalry_javelineer_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_spearman_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_spearman_merc_b.xml index 5201018f3d..62a67d0700 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_spearman_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/cavalry_spearman_merc_b.xml @@ -6,7 +6,9 @@ Macedonian Settler Cavalry Hippeús Makedonikós units/ptol/cavalry_spearman.png - phase_town + + phase_town + units/ptol/cavalry_spearman_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/champion_infantry_pikeman.xml b/binaries/data/mods/public/simulation/templates/units/ptol/champion_infantry_pikeman.xml index 09e5b2a22a..9abb9735e3 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/champion_infantry_pikeman.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/champion_infantry_pikeman.xml @@ -6,7 +6,9 @@ Royal Guard Infantry Phalangitès Agema units/ptol/champion_infantry.png - unlock_champion_infantry + + unlock_champion_infantry + units/ptolemies/infantry_pikeman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_archer_b.xml index 80f209c29e..b8b75be73b 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_archer_b.xml @@ -12,7 +12,9 @@ Cretan Mercenary Archer Toxótēs Krētikós units/mace/infantry_archer.png - phase_town + + phase_town + units/ptol/infantry_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_javelineer_b.xml b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_javelineer_b.xml index 72f4038ca1..c9734a9253 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_javelineer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_javelineer_b.xml @@ -12,7 +12,9 @@ Mercenary Thureos Skirmisher Thureophóros Akrobolistḗs units/ptol/infantry_javelinist_merc.png - phase_town + + phase_town + units/ptol/infantry_javelineer_a diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_slinger_b.xml b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_slinger_b.xml index 23a0a23837..85c9943be3 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_slinger_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_slinger_b.xml @@ -12,7 +12,9 @@ Judean Slinger Hebraikós Sphendonḗtēs units/ptol/infantry_slinger.png - phase_village + + phase_village + units/ptol/infantry_slinger_a diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_spearman_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_spearman_merc_b.xml index e00a7ec0a2..a69fd77355 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_spearman_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_spearman_merc_b.xml @@ -12,7 +12,9 @@ Mercenary Thureos Spearman Thureophóros Misthophóros units/ptol/infantry_spearman_2.png - phase_town + + phase_town + units/ptol/infantry_spearman_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_swordsman_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_swordsman_merc_b.xml index 4891b282b0..3490dd4288 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/infantry_swordsman_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/infantry_swordsman_merc_b.xml @@ -12,7 +12,9 @@ Gallikós Mistophorós units/ptol/infantry_swordsman_merc_b units/cart/infantry_swordsman.png - phase_town + + phase_town + units/ptol/infantry_swordsman_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/ptol/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/ptol/support_female_citizen_house.xml index 36c72fa9b7..99f88adaf8 100644 --- a/binaries/data/mods/public/simulation/templates/units/ptol/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/ptol/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/rome/cavalry_javelineer_b.xml b/binaries/data/mods/public/simulation/templates/units/rome/cavalry_javelineer_b.xml index d0b1499b24..75ffbab9c1 100644 --- a/binaries/data/mods/public/simulation/templates/units/rome/cavalry_javelineer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/rome/cavalry_javelineer_b.xml @@ -7,7 +7,9 @@ Eques Socius units/rome/cavalry_javelineer_b units/rome/cavalry_javelinist.png - phase_town + + phase_town + units/rome/cavalry_javelineer_a diff --git a/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_spear_gladiator.xml b/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_spear_gladiator.xml index 795b5f0d74..636bea84a3 100644 --- a/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_spear_gladiator.xml +++ b/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_spear_gladiator.xml @@ -21,7 +21,9 @@ Hoplomachus Elite units/rome/champion_infantry_gladiator_spear.png - phase_town + + phase_town + diff --git a/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_sword_gladiator.xml b/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_sword_gladiator.xml index c20f1c7341..146429454c 100644 --- a/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_sword_gladiator.xml +++ b/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_sword_gladiator.xml @@ -21,7 +21,9 @@ Murmillo Elite units/rome/champion_infantry_gladiator_sword.png - phase_town + + phase_town + diff --git a/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_swordsman.xml b/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_swordsman.xml index 9bda88aab4..ddbca09117 100644 --- a/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_swordsman.xml +++ b/binaries/data/mods/public/simulation/templates/units/rome/champion_infantry_swordsman.xml @@ -13,7 +13,9 @@ Extrāōrdinārius units/rome/champion_infantry_swordsman units/rome/champion_infantry.png - unlock_champion_infantry + + unlock_champion_infantry + units/romans/infantry_swordsman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/rome/infantry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/rome/infantry_spearman_b.xml index 69c38bd060..ccaaf9e26d 100644 --- a/binaries/data/mods/public/simulation/templates/units/rome/infantry_spearman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/rome/infantry_spearman_b.xml @@ -19,7 +19,9 @@ Veteran Spearman Triārius units/rome/infantry_spearman.png - phase_town + + phase_town + units/rome/infantry_spearman_a diff --git a/binaries/data/mods/public/simulation/templates/units/rome/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/rome/support_female_citizen_house.xml index eafd729b66..0afbac0754 100644 --- a/binaries/data/mods/public/simulation/templates/units/rome/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/rome/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/sele/cavalry_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/sele/cavalry_archer_b.xml index 9c9c25bef7..cac4483e1d 100644 --- a/binaries/data/mods/public/simulation/templates/units/sele/cavalry_archer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/sele/cavalry_archer_b.xml @@ -7,7 +7,9 @@ Dahae Horse Archer Hippotoxotès Dahae units/pers/cavalry_archer.png - phase_town + + phase_town + units/sele/cavalry_archer_a diff --git a/binaries/data/mods/public/simulation/templates/units/sele/cavalry_spearman_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/sele/cavalry_spearman_merc_b.xml index 0716e45d9e..228c7cc38f 100644 --- a/binaries/data/mods/public/simulation/templates/units/sele/cavalry_spearman_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/sele/cavalry_spearman_merc_b.xml @@ -7,7 +7,9 @@ Companion Cavalry Hippos Hetairike units/sele/cavalry_spearman_merc.png - phase_town + + phase_town + units/sele/cavalry_spearman_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/sele/champion_chariot.xml b/binaries/data/mods/public/simulation/templates/units/sele/champion_chariot.xml index 9424947f26..023527bfae 100644 --- a/binaries/data/mods/public/simulation/templates/units/sele/champion_chariot.xml +++ b/binaries/data/mods/public/simulation/templates/units/sele/champion_chariot.xml @@ -11,7 +11,9 @@ Drepanèphoros Chariot units/sele/champion_chariot.png - unlock_champion_chariots + + unlock_champion_chariots + units/seleucids/chariot_archer_c_m.xml diff --git a/binaries/data/mods/public/simulation/templates/units/sele/champion_infantry_pikeman.xml b/binaries/data/mods/public/simulation/templates/units/sele/champion_infantry_pikeman.xml index 4f2943fc30..8c23a1bd28 100644 --- a/binaries/data/mods/public/simulation/templates/units/sele/champion_infantry_pikeman.xml +++ b/binaries/data/mods/public/simulation/templates/units/sele/champion_infantry_pikeman.xml @@ -6,7 +6,9 @@ Silver Shield Argyraspis units/sele/champion_pikeman.png - traditional_army_sele + + traditional_army_sele + units/seleucids/infantry_pikeman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/sele/champion_infantry_swordsman.xml b/binaries/data/mods/public/simulation/templates/units/sele/champion_infantry_swordsman.xml index e2e65f7471..304d62c15e 100644 --- a/binaries/data/mods/public/simulation/templates/units/sele/champion_infantry_swordsman.xml +++ b/binaries/data/mods/public/simulation/templates/units/sele/champion_infantry_swordsman.xml @@ -6,7 +6,9 @@ Romanized Heavy Swordsman Thorakitès Rhomaïkós units/sele/champion_swordsman.png - reformed_army_sele + + reformed_army_sele + units/seleucids/infantry_swordsman_c.xml diff --git a/binaries/data/mods/public/simulation/templates/units/sele/infantry_archer_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/sele/infantry_archer_merc_b.xml index 51bf1e9a55..9e0f813671 100644 --- a/binaries/data/mods/public/simulation/templates/units/sele/infantry_archer_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/sele/infantry_archer_merc_b.xml @@ -7,7 +7,9 @@ Syrian Archer Toxótēs Syrías units/sele/infantry_archer.png - phase_town + + phase_town + units/sele/infantry_archer_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/sele/infantry_javelineer_b.xml b/binaries/data/mods/public/simulation/templates/units/sele/infantry_javelineer_b.xml index bde1b9bfb9..2e2fb13378 100644 --- a/binaries/data/mods/public/simulation/templates/units/sele/infantry_javelineer_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/sele/infantry_javelineer_b.xml @@ -7,7 +7,9 @@ Arab Javelineer Pezakontistès Aravikós units/sele/infantry_javelinist.png - phase_village + + phase_village + units/sele/infantry_javelineer_a diff --git a/binaries/data/mods/public/simulation/templates/units/sele/infantry_swordsman_merc_b.xml b/binaries/data/mods/public/simulation/templates/units/sele/infantry_swordsman_merc_b.xml index d4751990c4..8bd8509f18 100644 --- a/binaries/data/mods/public/simulation/templates/units/sele/infantry_swordsman_merc_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/sele/infantry_swordsman_merc_b.xml @@ -12,7 +12,9 @@ Thracian Mercenary Swordsman Rhomphaiaphoros Thrakikós units/sele/infantry_swordsman.png - phase_town + + phase_town + units/sele/infantry_swordsman_merc_a diff --git a/binaries/data/mods/public/simulation/templates/units/sele/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/sele/support_female_citizen_house.xml index d9ebec5941..7c1b6c531d 100644 --- a/binaries/data/mods/public/simulation/templates/units/sele/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/sele/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house + diff --git a/binaries/data/mods/public/simulation/templates/units/spart/cavalry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/spart/cavalry_spearman_b.xml index 2888560cb0..990c0c73fc 100644 --- a/binaries/data/mods/public/simulation/templates/units/spart/cavalry_spearman_b.xml +++ b/binaries/data/mods/public/simulation/templates/units/spart/cavalry_spearman_b.xml @@ -7,7 +7,9 @@ Greek Allied Cavalry Hippeús Symmakhikós units/spart/cavalry_spearman.png - phase_town + + phase_town + units/spart/cavalry_spearman_a diff --git a/binaries/data/mods/public/simulation/templates/units/spart/champion_infantry_swordsman.xml b/binaries/data/mods/public/simulation/templates/units/spart/champion_infantry_swordsman.xml index a0981df26b..038efa8863 100644 --- a/binaries/data/mods/public/simulation/templates/units/spart/champion_infantry_swordsman.xml +++ b/binaries/data/mods/public/simulation/templates/units/spart/champion_infantry_swordsman.xml @@ -18,7 +18,9 @@ Ékdromos Skirítēs Elite units/spart/champion_infantry_sword.png - phase_town + + phase_town + 3 diff --git a/binaries/data/mods/public/simulation/templates/units/spart/support_female_citizen_house.xml b/binaries/data/mods/public/simulation/templates/units/spart/support_female_citizen_house.xml index a6f9038acc..c5eabf05c7 100644 --- a/binaries/data/mods/public/simulation/templates/units/spart/support_female_citizen_house.xml +++ b/binaries/data/mods/public/simulation/templates/units/spart/support_female_citizen_house.xml @@ -4,6 +4,8 @@ 30 - unlock_females_house + + unlock_females_house +