Clean up market classes:

template_structure_economic_market.xml → Market
template_structure_military_dock.xml → Dock
<Market/TradeType> node → Trade
requirement for bartering: BarterMarket → Barter

Change Petra accordingly


Also changing:
    Renamed the Gates class to Gate, LongWall to WallLong (cf.
WallTower), and StoneWall to Wall, to match their template file names.
Adjusted AI code, technologies, and templates accordingly.
    Entity build restrictions:
        renamed Apadana to Palace;
        replaced UniqueStructure with IshtarGate and TempleOfVesta.
        added Council to the (unbuildable) spart_gerousia.xml, since
it's functionally identical to athen_prytaneion.xml.
    Introduced the following classes:
        Council, IshtarGate, Library, TempleOfVesta, and Theater, to
match their build restrictions.
        WallMedium and WallShort, to complement the already existing
WallLong and WallTower classes.
        Stoa, TempleOfMars, and TriumphalArch, for completeness.
    Made the ArmyCamp, Colony, Gate, Lighthouse, Naval, Palace,
Palisade, SiegeWall, and StoneWall classes visible.
    Deleted the now unused Apadana, Kennel, SpecialBuilding classes.
    Removed the Village class from outposts and palisades, because those
are not supposed to count towards the phase technology requirements.
        Slightly rephrased the phase technology requirements tooltips.
    Corrected the <GenericName> of the various palisade files.
    Updated Structure tooltips from D2578 that have not already been
committed elsewhere.

Patch By: Nescio
Differenital Revision: D2892

This was SVN commit r23865.
This commit is contained in:
bb 2020-07-21 19:45:30 +00:00
parent e428678b7e
commit 2ef3fd7a77
103 changed files with 264 additions and 241 deletions

View File

@ -1064,7 +1064,7 @@ PETRA.AttackPlan.prototype.checkTargetObstruction = function(gameState, target,
if (!struct.position() || !struct.get("Obstruction") || struct.hasClass("Field")) if (!struct.position() || !struct.get("Obstruction") || struct.hasClass("Field"))
continue; continue;
// we consider that we can reach the target, but nonetheless check that we did not cross any enemy gate // we consider that we can reach the target, but nonetheless check that we did not cross any enemy gate
if (dist < radius + 10 && !struct.hasClass("Gates")) if (dist < radius + 10 && !struct.hasClass("Gate"))
continue; continue;
// Check that we are really blocked by this structure, i.e. advancing by 1+0.8(clearance)m // Check that we are really blocked by this structure, i.e. advancing by 1+0.8(clearance)m
// in the target direction would bring us inside its obstruction. // in the target direction would bring us inside its obstruction.
@ -1436,15 +1436,15 @@ PETRA.AttackPlan.prototype.update = function(gameState, events)
let targetClassesUnit; let targetClassesUnit;
let targetClassesSiege; let targetClassesSiege;
if (this.type == "Rush") if (this.type == "Rush")
targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Palisade", "StoneWall", "Tower", "Fortress"], "vetoEntities": veto }; targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Palisade", "Wall", "Tower", "Fortress"], "vetoEntities": veto };
else else
{ {
if (this.target.hasClass("Fortress")) if (this.target.hasClass("Fortress"))
targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Palisade", "StoneWall"], "vetoEntities": veto }; targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Palisade", "Wall"], "vetoEntities": veto };
else if (this.target.hasClass("Palisade") || this.target.hasClass("StoneWall")) else if (this.target.hasClass("Palisade") || this.target.hasClass("Wall"))
targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Fortress"], "vetoEntities": veto }; targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Fortress"], "vetoEntities": veto };
else else
targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Palisade", "StoneWall", "Fortress"], "vetoEntities": veto }; targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Palisade", "Wall", "Fortress"], "vetoEntities": veto };
} }
if (this.target.hasClass("Structure")) if (this.target.hasClass("Structure"))
targetClassesSiege = { "attack": ["Structure"], "avoid": [], "vetoEntities": veto }; targetClassesSiege = { "attack": ["Structure"], "avoid": [], "vetoEntities": veto };
@ -1561,14 +1561,14 @@ PETRA.AttackPlan.prototype.update = function(gameState, events)
{ {
mStruct.sort((structa, structb) => { mStruct.sort((structa, structb) => {
let vala = structa.costSum(); let vala = structa.costSum();
if (structa.hasClass("Gates") && ent.canAttackClass("StoneWall")) if (structa.hasClass("Gate") && ent.canAttackClass("Wall"))
vala += 10000; vala += 10000;
else if (structa.hasDefensiveFire()) else if (structa.hasDefensiveFire())
vala += 1000; vala += 1000;
else if (structa.hasClass("ConquestCritical")) else if (structa.hasClass("ConquestCritical"))
vala += 200; vala += 200;
let valb = structb.costSum(); let valb = structb.costSum();
if (structb.hasClass("Gates") && ent.canAttackClass("StoneWall")) if (structb.hasClass("Gate") && ent.canAttackClass("Wall"))
valb += 10000; valb += 10000;
else if (structb.hasDefensiveFire()) else if (structb.hasDefensiveFire())
valb += 1000; valb += 1000;
@ -1576,7 +1576,7 @@ PETRA.AttackPlan.prototype.update = function(gameState, events)
valb += 200; valb += 200;
return valb - vala; return valb - vala;
}); });
if (mStruct[0].hasClass("Gates")) if (mStruct[0].hasClass("Gate"))
ent.attack(mStruct[0].id(), PETRA.allowCapture(gameState, ent, mStruct[0])); ent.attack(mStruct[0].id(), PETRA.allowCapture(gameState, ent, mStruct[0]));
else else
{ {
@ -1676,18 +1676,18 @@ PETRA.AttackPlan.prototype.update = function(gameState, events)
{ {
mStruct.sort((structa, structb) => { mStruct.sort((structa, structb) => {
let vala = structa.costSum(); let vala = structa.costSum();
if (structa.hasClass("Gates") && ent.canAttackClass("StoneWall")) if (structa.hasClass("Gate") && ent.canAttackClass("Wall"))
vala += 10000; vala += 10000;
else if (structa.hasClass("ConquestCritical")) else if (structa.hasClass("ConquestCritical"))
vala += 100; vala += 100;
let valb = structb.costSum(); let valb = structb.costSum();
if (structb.hasClass("Gates") && ent.canAttackClass("StoneWall")) if (structb.hasClass("Gate") && ent.canAttackClass("Wall"))
valb += 10000; valb += 10000;
else if (structb.hasClass("ConquestCritical")) else if (structb.hasClass("ConquestCritical"))
valb += 100; valb += 100;
return valb - vala; return valb - vala;
}); });
if (mStruct[0].hasClass("Gates")) if (mStruct[0].hasClass("Gate"))
ent.attack(mStruct[0].id(), false); ent.attack(mStruct[0].id(), false);
else else
{ {
@ -1833,11 +1833,11 @@ PETRA.AttackPlan.prototype.UpdateWalking = function(gameState, events)
if (!this.path[0][0] || !this.path[0][1]) if (!this.path[0][0] || !this.path[0][1])
API3.warn("Start: Problem with path " + uneval(this.path)); API3.warn("Start: Problem with path " + uneval(this.path));
// We're stuck, presumably. Check if there are no walls just close to us. // We're stuck, presumably. Check if there are no walls just close to us.
for (let ent of gameState.getEnemyStructures().filter(API3.Filters.byClass(["Palisade", "StoneWall"])).values()) for (let ent of gameState.getEnemyStructures().filter(API3.Filters.byClass(["Palisade", "Wall"])).values())
{ {
if (API3.SquareVectorDistance(this.position, ent.position()) > 800) if (API3.SquareVectorDistance(this.position, ent.position()) > 800)
continue; continue;
let enemyClass = ent.hasClass("StoneWall") ? "StoneWall" : "Palisade"; let enemyClass = ent.hasClass("Wall") ? "Wall" : "Palisade";
// there are walls, so check if we can attack // there are walls, so check if we can attack
if (this.unitCollection.filter(API3.Filters.byCanAttackClass(enemyClass)).hasEntities()) if (this.unitCollection.filter(API3.Filters.byCanAttackClass(enemyClass)).hasEntities())
{ {

View File

@ -781,7 +781,7 @@ PETRA.BaseManager.prototype.assignToFoundations = function(gameState, noRepair)
continue; // we do not build fields continue; // we do not build fields
if (gameState.ai.HQ.isNearInvadingArmy(target.position())) if (gameState.ai.HQ.isNearInvadingArmy(target.position()))
if (!target.hasClass("CivCentre") && !target.hasClass("StoneWall") && if (!target.hasClass("CivCentre") && !target.hasClass("Wall") &&
(!target.hasClass("Wonder") || !gameState.getVictoryConditions().has("wonder"))) (!target.hasClass("Wonder") || !gameState.getVictoryConditions().has("wonder")))
continue; continue;
@ -801,7 +801,7 @@ PETRA.BaseManager.prototype.assignToFoundations = function(gameState, noRepair)
target.getMetadata(PlayerID, "phaseUp") == true) target.getMetadata(PlayerID, "phaseUp") == true)
targetNB = 7; targetNB = 7;
else if (target.hasClass("Barracks") || target.hasClass("Range") || target.hasClass("Stable") || else if (target.hasClass("Barracks") || target.hasClass("Range") || target.hasClass("Stable") ||
target.hasClass("Tower") || target.hasClass("Market")) target.hasClass("Tower") || target.hasClass("Market"))
targetNB = 4; targetNB = 4;
else if (target.hasClass("House") || target.hasClass("DropsiteWood")) else if (target.hasClass("House") || target.hasClass("DropsiteWood"))
targetNB = 3; targetNB = 3;
@ -880,7 +880,7 @@ PETRA.BaseManager.prototype.assignToFoundations = function(gameState, noRepair)
if (gameState.ai.HQ.isNearInvadingArmy(target.position())) if (gameState.ai.HQ.isNearInvadingArmy(target.position()))
{ {
if (target.healthLevel() > 0.5 || if (target.healthLevel() > 0.5 ||
!target.hasClass("CivCentre") && !target.hasClass("StoneWall") && !target.hasClass("CivCentre") && !target.hasClass("Wall") &&
(!target.hasClass("Wonder") || !gameState.getVictoryConditions().has("wonder"))) (!target.hasClass("Wonder") || !gameState.getVictoryConditions().has("wonder")))
continue; continue;
} }

View File

@ -282,7 +282,7 @@ PETRA.HQ.prototype.checkEvents = function(gameState, events)
let ent = gameState.getEntityById(evt.newentity); let ent = gameState.getEntityById(evt.newentity);
if (!ent || ent.owner() != PlayerID) if (!ent || ent.owner() != PlayerID)
continue; continue;
if (ent.hasClass("BarterMarket") && this.maxFields) if (ent.hasClass("Market") && this.maxFields)
this.maxFields = false; this.maxFields = false;
if (ent.getMetadata(PlayerID, "base") === undefined) if (ent.getMetadata(PlayerID, "base") === undefined)
continue; continue;
@ -556,7 +556,7 @@ PETRA.HQ.prototype.checkPhaseRequirements = function(gameState, queues)
!queues.militaryBuilding.hasQueuedUnits() && !queues.militaryBuilding.hasQueuedUnits() &&
!queues.defenseBuilding.hasQueuedUnits()) !queues.defenseBuilding.hasQueuedUnits())
{ {
if (!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities() && if (!gameState.getOwnEntitiesByClass("Market", true).hasEntities() &&
this.canBuild(gameState, "structures/{civ}_market")) this.canBuild(gameState, "structures/{civ}_market"))
{ {
plan = new PETRA.ConstructionPlan(gameState, "structures/{civ}_market", { "phaseUp": true }); plan = new PETRA.ConstructionPlan(gameState, "structures/{civ}_market", { "phaseUp": true });
@ -1281,9 +1281,9 @@ PETRA.HQ.prototype.findStrategicCCLocation = function(gameState, template)
*/ */
PETRA.HQ.prototype.findMarketLocation = function(gameState, template) PETRA.HQ.prototype.findMarketLocation = function(gameState, template)
{ {
let markets = gameState.updatingCollection("diplo-ExclusiveAllyMarkets", API3.Filters.byClass("Market"), gameState.getExclusiveAllyEntities()).toEntityArray(); let markets = gameState.updatingCollection("diplo-ExclusiveAllyMarkets", API3.Filters.byClass("Trade"), gameState.getExclusiveAllyEntities()).toEntityArray();
if (!markets.length) if (!markets.length)
markets = gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Market"), gameState.getOwnStructures()).toEntityArray(); markets = gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Trade"), gameState.getOwnStructures()).toEntityArray();
if (!markets.length) // this is the first market. For the time being, place it arbitrarily by the ConstructionPlan if (!markets.length) // this is the first market. For the time being, place it arbitrarily by the ConstructionPlan
return [-1, -1, -1, 0]; return [-1, -1, -1, 0];
@ -1306,7 +1306,7 @@ PETRA.HQ.prototype.findMarketLocation = function(gameState, template)
let bestDistSq; let bestDistSq;
let bestGainMult; let bestGainMult;
let radius = Math.ceil(template.obstructionRadius().max / obstructions.cellSize); let radius = Math.ceil(template.obstructionRadius().max / obstructions.cellSize);
let isNavalMarket = template.hasClass("NavalMarket"); let isNavalMarket = template.hasClass("Naval") && template.hasClass("Trade");
let width = this.territoryMap.width; let width = this.territoryMap.width;
let cellSize = this.territoryMap.cellSize; let cellSize = this.territoryMap.cellSize;
@ -1335,7 +1335,7 @@ PETRA.HQ.prototype.findMarketLocation = function(gameState, template)
let gainMultiplier; let gainMultiplier;
for (let market of markets) for (let market of markets)
{ {
if (isNavalMarket && market.hasClass("NavalMarket")) if (isNavalMarket && template.hasClass("Naval") && template.hasClass("Trade"))
{ {
if (PETRA.getSeaAccess(gameState, market) != gameState.ai.accessibility.getAccessValue(pos, true)) if (PETRA.getSeaAccess(gameState, market) != gameState.ai.accessibility.getAccessValue(pos, true))
continue; continue;
@ -1377,13 +1377,13 @@ PETRA.HQ.prototype.findMarketLocation = function(gameState, template)
let expectedGain = Math.round(bestGainMult * TradeGain(bestDistSq, gameState.sharedScript.mapSize)); let expectedGain = Math.round(bestGainMult * TradeGain(bestDistSq, gameState.sharedScript.mapSize));
if (this.Config.debug > 1) if (this.Config.debug > 1)
API3.warn("this would give a trading gain of " + expectedGain); API3.warn("this would give a trading gain of " + expectedGain);
// do not keep it if gain is too small, except if this is our first BarterMarket // Do not keep it if gain is too small, except if this is our first Market.
let idx; let idx;
if (expectedGain < this.tradeManager.minimalGain) if (expectedGain < this.tradeManager.minimalGain)
{ {
if (template.hasClass("BarterMarket") && if (template.hasClass("Market") &&
!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities()) !gameState.getOwnEntitiesByClass("Market", true).hasEntities())
idx = -1; // needed by queueplanBuilding manager to keep that market idx = -1; // Needed by queueplanBuilding manager to keep that Market.
else else
return false; return false;
} }
@ -1538,7 +1538,7 @@ PETRA.HQ.prototype.buildTemple = function(gameState, queues)
// at least one market (which have the same queue) should be build before any temple // at least one market (which have the same queue) should be build before any temple
if (queues.economicBuilding.hasQueuedUnits() || if (queues.economicBuilding.hasQueuedUnits() ||
gameState.getOwnEntitiesByClass("Temple", true).hasEntities() || gameState.getOwnEntitiesByClass("Temple", true).hasEntities() ||
!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities()) !gameState.getOwnEntitiesByClass("Market", true).hasEntities())
return; return;
// Try to build a temple earlier if in regicide to recruit healer guards // Try to build a temple earlier if in regicide to recruit healer guards
if (this.currentPhase < 3 && !gameState.getVictoryConditions().has("regicide")) if (this.currentPhase < 3 && !gameState.getVictoryConditions().has("regicide"))
@ -1554,11 +1554,11 @@ PETRA.HQ.prototype.buildTemple = function(gameState, queues)
PETRA.HQ.prototype.buildMarket = function(gameState, queues) PETRA.HQ.prototype.buildMarket = function(gameState, queues)
{ {
if (gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities() || if (gameState.getOwnEntitiesByClass("Market", true).hasEntities() ||
!this.canBuild(gameState, "structures/{civ}_market")) !this.canBuild(gameState, "structures/{civ}_market"))
return; return;
if (queues.economicBuilding.hasQueuedUnitsWithClass("BarterMarket")) if (queues.economicBuilding.hasQueuedUnitsWithClass("Market"))
{ {
if (!queues.economicBuilding.paused) if (!queues.economicBuilding.paused)
{ {
@ -1902,7 +1902,7 @@ PETRA.HQ.prototype.buildBlacksmith = function(gameState, queues)
queues.militaryBuilding.hasQueuedUnits() || gameState.getOwnEntitiesByClass("Blacksmith", true).length) queues.militaryBuilding.hasQueuedUnits() || gameState.getOwnEntitiesByClass("Blacksmith", true).length)
return; return;
// Build a market before the blacksmith. // Build a market before the blacksmith.
if (!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities()) if (!gameState.getOwnEntitiesByClass("Market", true).hasEntities())
return; return;
if (this.canBuild(gameState, "structures/{civ}_blacksmith")) if (this.canBuild(gameState, "structures/{civ}_blacksmith"))
@ -2670,7 +2670,7 @@ PETRA.HQ.prototype.update = function(gameState, queues, events)
Engine.ProfileStart("Headquarters update"); Engine.ProfileStart("Headquarters update");
this.turnCache = {}; this.turnCache = {};
this.territoryMap = PETRA.createTerritoryMap(gameState); this.territoryMap = PETRA.createTerritoryMap(gameState);
this.canBarter = gameState.getOwnEntitiesByClass("BarterMarket", true).filter(API3.Filters.isBuilt()).hasEntities(); this.canBarter = gameState.getOwnEntitiesByClass("Market", true).filter(API3.Filters.isBuilt()).hasEntities();
// TODO find a better way to update // TODO find a better way to update
if (this.currentPhase != gameState.currentPhase()) if (this.currentPhase != gameState.currentPhase())
{ {

View File

@ -713,8 +713,8 @@ PETRA.NavalManager.prototype.buildNavalStructures = function(gameState, queues)
if (gameState.ai.HQ.getAccountedPopulation(gameState) > this.Config.Economy.popForDock) if (gameState.ai.HQ.getAccountedPopulation(gameState) > this.Config.Economy.popForDock)
{ {
if (queues.dock.countQueuedUnitsWithClass("NavalMarket") === 0 && if (queues.dock.countQueuedUnitsWithClass("Dock") === 0 &&
!gameState.getOwnStructures().filter(API3.Filters.and(API3.Filters.byClass("NavalMarket"), API3.Filters.isFoundation())).hasEntities() && !gameState.getOwnStructures().filter(API3.Filters.and(API3.Filters.byClass("Dock"), API3.Filters.isFoundation())).hasEntities() &&
gameState.ai.HQ.canBuild(gameState, "structures/{civ}_dock")) gameState.ai.HQ.canBuild(gameState, "structures/{civ}_dock"))
{ {
let dockStarted = false; let dockStarted = false;
@ -745,8 +745,8 @@ PETRA.NavalManager.prototype.buildNavalStructures = function(gameState, queues)
if (!this.docks.filter(API3.Filters.byClass("Dock")).hasEntities() || if (!this.docks.filter(API3.Filters.byClass("Dock")).hasEntities() ||
this.docks.filter(API3.Filters.byClass("Shipyard")).hasEntities()) this.docks.filter(API3.Filters.byClass("Shipyard")).hasEntities())
return; return;
// Use in priority resources to build a market // Use in priority resources to build a Market.
if (!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities() && if (!gameState.getOwnEntitiesByClass("Market", true).hasEntities() &&
gameState.ai.HQ.canBuild(gameState, "structures/{civ}_market")) gameState.ai.HQ.canBuild(gameState, "structures/{civ}_market"))
return; return;
let template; let template;

View File

@ -54,10 +54,10 @@ PETRA.ConstructionPlan.prototype.start = function(gameState)
return; return;
} }
if (this.metadata && this.metadata.expectedGain && (!this.template.hasClass("BarterMarket") || if (this.metadata && this.metadata.expectedGain && (!this.template.hasClass("Market") ||
gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities())) gameState.getOwnEntitiesByClass("Market", true).hasEntities()))
{ {
// Check if this market is still worth building (others may have been built making it useless) // Check if this Market is still worth building (others may have been built making it useless).
let tradeManager = gameState.ai.HQ.tradeManager; let tradeManager = gameState.ai.HQ.tradeManager;
tradeManager.checkRoutes(gameState); tradeManager.checkRoutes(gameState);
if (!tradeManager.isNewMarketWorth(this.metadata.expectedGain)) if (!tradeManager.isNewMarketWorth(this.metadata.expectedGain))
@ -161,7 +161,7 @@ PETRA.ConstructionPlan.prototype.findGoodPosition = function(gameState)
if (!template.hasClass("Fortress") || gameState.getOwnEntitiesByClass("Fortress", true).hasEntities()) if (!template.hasClass("Fortress") || gameState.getOwnEntitiesByClass("Fortress", true).hasEntities())
return false; return false;
} }
else if (template.hasClass("Market")) // Docks (i.e. NavalMarket) are done before else if (template.hasClass("Market")) // Docks are done before.
{ {
let pos = HQ.findMarketLocation(gameState, template); let pos = HQ.findMarketLocation(gameState, template);
if (pos && pos[2] > 0) if (pos && pos[2] > 0)
@ -218,29 +218,29 @@ PETRA.ConstructionPlan.prototype.findGoodPosition = function(gameState)
if (struct.resourceDropsiteTypes() && struct.resourceDropsiteTypes().indexOf("food") != -1) if (struct.resourceDropsiteTypes() && struct.resourceDropsiteTypes().indexOf("food") != -1)
{ {
if (template.hasClass("Field") || template.hasClass("Corral")) if (template.hasClass("Field") || template.hasClass("Corral"))
placement.addInfluence(x, z, 80/cellSize, 50); placement.addInfluence(x, z, 80 / cellSize, 50);
else // If this is not a field add a negative influence because we want to leave this area for fields else // If this is not a field add a negative influence because we want to leave this area for fields
placement.addInfluence(x, z, 80/cellSize, -20); placement.addInfluence(x, z, 80 / cellSize, -20);
} }
else if (template.hasClass("House")) else if (template.hasClass("House"))
{ {
if (ent.hasClass("House")) if (ent.hasClass("House"))
{ {
placement.addInfluence(x, z, 60/cellSize, 40); // houses are close to other houses placement.addInfluence(x, z, 60 / cellSize, 40); // houses are close to other houses
alreadyHasHouses = true; alreadyHasHouses = true;
} }
else if (!ent.hasClass("StoneWall") || ent.hasClass("Gates")) else if (!ent.hasClass("Wall") || ent.hasClass("Gate"))
placement.addInfluence(x, z, 60/cellSize, -40); // and further away from other stuffs placement.addInfluence(x, z, 60 / cellSize, -40); // and further away from other stuffs
} }
else if (template.hasClass("Farmstead") && (!ent.hasClass("Field") && !ent.hasClass("Corral") && else if (template.hasClass("Farmstead") && (!ent.hasClass("Field") && !ent.hasClass("Corral") &&
(!ent.hasClass("StoneWall") || ent.hasClass("Gates")))) (!ent.hasClass("Wall") || ent.hasClass("Gate"))))
placement.addInfluence(x, z, 100/cellSize, -25); // move farmsteads away to make room (StoneWall test needed for iber) placement.addInfluence(x, z, 100 / cellSize, -25); // move farmsteads away to make room (Wall test needed for iber)
else if (template.hasClass("GarrisonFortress") && ent.hasClass("House")) else if (template.hasClass("GarrisonFortress") && ent.hasClass("House"))
placement.addInfluence(x, z, 120/cellSize, -50); placement.addInfluence(x, z, 120 / cellSize, -50);
else if (template.hasClass("Military")) else if (template.hasClass("Military"))
placement.addInfluence(x, z, 40/cellSize, -40); placement.addInfluence(x, z, 40 / cellSize, -40);
else if (template.genericName() == "Rotary Mill" && ent.hasClass("Field")) else if (template.genericName() == "Rotary Mill" && ent.hasClass("Field"))
placement.addInfluence(x, z, 60/cellSize, 40); placement.addInfluence(x, z, 60 / cellSize, 40);
}); });
} }
if (template.hasClass("Farmstead")) if (template.hasClass("Farmstead"))
@ -256,8 +256,8 @@ PETRA.ConstructionPlan.prototype.findGoodPosition = function(gameState)
} }
// Requires to be inside our territory, and inside our base territory if required // Requires to be inside our territory, and inside our base territory if required
// and if our first market, put it on border if possible to maximize distance with next market // and if our first market, put it on border if possible to maximize distance with next Market.
let favorBorder = template.hasClass("BarterMarket"); let favorBorder = template.hasClass("Market");
let disfavorBorder = gameState.currentPhase() > 1 && !template.hasDefensiveFire(); let disfavorBorder = gameState.currentPhase() > 1 && !template.hasDefensiveFire();
let favoredBase = this.metadata && (this.metadata.favoredBase || let favoredBase = this.metadata && (this.metadata.favoredBase ||
(this.metadata.militaryBase ? HQ.findBestBaseForMilitary(gameState) : undefined)); (this.metadata.militaryBase ? HQ.findBestBaseForMilitary(gameState) : undefined));
@ -319,7 +319,7 @@ PETRA.ConstructionPlan.prototype.findGoodPosition = function(gameState)
this.type == gameState.applyCiv("structures/{civ}_elephant_stables")) this.type == gameState.applyCiv("structures/{civ}_elephant_stables"))
radius = Math.floor((template.obstructionRadius().max + 8) / obstructions.cellSize); radius = Math.floor((template.obstructionRadius().max + 8) / obstructions.cellSize);
else if (template.resourceDropsiteTypes() === undefined && !template.hasClass("House") && else if (template.resourceDropsiteTypes() === undefined && !template.hasClass("House") &&
!template.hasClass("Field") && !template.hasClass("BarterMarket")) !template.hasClass("Field") && !template.hasClass("Market"))
radius = Math.ceil((template.obstructionRadius().max + 4) / obstructions.cellSize); radius = Math.ceil((template.obstructionRadius().max + 4) / obstructions.cellSize);
else else
radius = Math.ceil(template.obstructionRadius().max / obstructions.cellSize); radius = Math.ceil(template.obstructionRadius().max / obstructions.cellSize);

View File

@ -199,7 +199,7 @@ PETRA.ResearchManager.prototype.update = function(gameState, queues)
{ {
let template = techs[i][1]._template; let template = techs[i][1]._template;
if (template.affects && template.affects.length === 1 && if (template.affects && template.affects.length === 1 &&
(template.affects[0] === "Healer" || template.affects[0] === "Outpost" || template.affects[0] === "StoneWall")) (template.affects[0] === "Healer" || template.affects[0] === "Outpost" || template.affects[0] === "Wall"))
{ {
techs.splice(i--, 1); techs.splice(i--, 1);
continue; continue;

View File

@ -91,7 +91,7 @@ PETRA.TradeManager.prototype.trainMoreTraders = function(gameState, queues)
else else
{ {
template = gameState.applyCiv("units/{civ}_support_trader"); template = gameState.applyCiv("units/{civ}_support_trader");
if (!this.tradeRoute.source.hasClass("NavalMarket")) if (!this.tradeRoute.source.hasClass("Naval"))
metadata.base = this.tradeRoute.source.getMetadata(PlayerID, "base"); metadata.base = this.tradeRoute.source.getMetadata(PlayerID, "base");
else else
metadata.base = this.tradeRoute.target.getMetadata(PlayerID, "base"); metadata.base = this.tradeRoute.target.getMetadata(PlayerID, "base");
@ -214,7 +214,7 @@ PETRA.TradeManager.prototype.setTradingGoods = function(gameState)
*/ */
PETRA.TradeManager.prototype.performBarter = function(gameState) PETRA.TradeManager.prototype.performBarter = function(gameState)
{ {
let barterers = gameState.getOwnEntitiesByClass("BarterMarket", true).filter(API3.Filters.isBuilt()).toEntityArray(); let barterers = gameState.getOwnEntitiesByClass("Barter", true).filter(API3.Filters.isBuilt()).toEntityArray();
if (barterers.length == 0) if (barterers.length == 0)
return false; return false;
let resBarterCodes = Resources.GetBarterableCodes(); let resBarterCodes = Resources.GetBarterableCodes();
@ -335,7 +335,7 @@ PETRA.TradeManager.prototype.checkEvents = function(gameState, events)
for (let evt of events.EntityRenamed) for (let evt of events.EntityRenamed)
{ {
let ent = gameState.getEntityById(evt.newentity); let ent = gameState.getEntityById(evt.newentity);
if (!ent || !ent.hasClass("Market")) if (!ent || !ent.hasClass("Trade"))
continue; continue;
for (let trader of this.traders.values()) for (let trader of this.traders.values())
{ {
@ -358,7 +358,7 @@ PETRA.TradeManager.prototype.checkEvents = function(gameState, events)
if (!evt.entityObj) if (!evt.entityObj)
continue; continue;
let ent = evt.entityObj; let ent = evt.entityObj;
if (!ent || !ent.hasClass("Market") || !gameState.isPlayerAlly(ent.owner())) if (!ent || !ent.hasClass("Trade") || !gameState.isPlayerAlly(ent.owner()))
continue; continue;
this.activateProspection(gameState); this.activateProspection(gameState);
return true; return true;
@ -368,7 +368,7 @@ PETRA.TradeManager.prototype.checkEvents = function(gameState, events)
for (let evt of events.Create) for (let evt of events.Create)
{ {
let ent = gameState.getEntityById(evt.entity); let ent = gameState.getEntityById(evt.entity);
if (!ent || ent.foundationProgress() !== undefined || !ent.hasClass("Market") || if (!ent || ent.foundationProgress() !== undefined || !ent.hasClass("Trade") ||
!gameState.isPlayerAlly(ent.owner())) !gameState.isPlayerAlly(ent.owner()))
continue; continue;
this.activateProspection(gameState); this.activateProspection(gameState);
@ -382,7 +382,7 @@ PETRA.TradeManager.prototype.checkEvents = function(gameState, events)
if (!gameState.isPlayerAlly(evt.from) && !gameState.isPlayerAlly(evt.to)) if (!gameState.isPlayerAlly(evt.from) && !gameState.isPlayerAlly(evt.to))
continue; continue;
let ent = gameState.getEntityById(evt.entity); let ent = gameState.getEntityById(evt.entity);
if (!ent || ent.foundationProgress() !== undefined || !ent.hasClass("Market")) if (!ent || ent.foundationProgress() !== undefined || !ent.hasClass("Trade"))
continue; continue;
this.activateProspection(gameState); this.activateProspection(gameState);
return true; return true;
@ -419,8 +419,8 @@ PETRA.TradeManager.prototype.checkRoutes = function(gameState, accessIndex)
return false; return false;
} }
let market1 = gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Market"), gameState.getOwnStructures()); let market1 = gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Trade"), gameState.getOwnStructures());
let market2 = gameState.updatingCollection("diplo-ExclusiveAllyMarkets", API3.Filters.byClass("Market"), gameState.getExclusiveAllyEntities()); let market2 = gameState.updatingCollection("diplo-ExclusiveAllyMarkets", API3.Filters.byClass("Trade"), gameState.getExclusiveAllyEntities());
if (market1.length + market2.length < 2) // We have to wait ... markets will be built soon if (market1.length + market2.length < 2) // We have to wait ... markets will be built soon
{ {
this.tradeRoute = undefined; this.tradeRoute = undefined;
@ -444,7 +444,7 @@ PETRA.TradeManager.prototype.checkRoutes = function(gameState, accessIndex)
if (!m1.position()) if (!m1.position())
continue; continue;
let access1 = PETRA.getLandAccess(gameState, m1); let access1 = PETRA.getLandAccess(gameState, m1);
let sea1 = m1.hasClass("NavalMarket") ? PETRA.getSeaAccess(gameState, m1) : undefined; let sea1 = m1.hasClass("Naval") ? PETRA.getSeaAccess(gameState, m1) : undefined;
for (let m2 of market2.values()) for (let m2 of market2.values())
{ {
if (onlyOurs && m1.id() >= m2.id()) if (onlyOurs && m1.id() >= m2.id())
@ -452,7 +452,7 @@ PETRA.TradeManager.prototype.checkRoutes = function(gameState, accessIndex)
if (!m2.position()) if (!m2.position())
continue; continue;
let access2 = PETRA.getLandAccess(gameState, m2); let access2 = PETRA.getLandAccess(gameState, m2);
let sea2 = m2.hasClass("NavalMarket") ? PETRA.getSeaAccess(gameState, m2) : undefined; let sea2 = m2.hasClass("Naval") ? PETRA.getSeaAccess(gameState, m2) : undefined;
let land = access1 == access2 ? access1 : undefined; let land = access1 == access2 ? access1 : undefined;
let sea = sea1 && sea1 == sea2 ? sea1 : undefined; let sea = sea1 && sea1 == sea2 ? sea1 : undefined;
if (!land && !sea) if (!land && !sea)
@ -586,12 +586,12 @@ PETRA.TradeManager.prototype.checkTrader = function(gameState, ent)
PETRA.TradeManager.prototype.prospectForNewMarket = function(gameState, queues) PETRA.TradeManager.prototype.prospectForNewMarket = function(gameState, queues)
{ {
if (queues.economicBuilding.hasQueuedUnitsWithClass("Market") || queues.dock.hasQueuedUnitsWithClass("Market")) if (queues.economicBuilding.hasQueuedUnitsWithClass("Trade") || queues.dock.hasQueuedUnitsWithClass("Trade"))
return; return;
if (!gameState.ai.HQ.canBuild(gameState, "structures/{civ}_market")) if (!gameState.ai.HQ.canBuild(gameState, "structures/{civ}_market"))
return; return;
if (!gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Market"), gameState.getOwnStructures()).hasEntities() && if (!gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Trade"), gameState.getOwnStructures()).hasEntities() &&
!gameState.updatingCollection("diplo-ExclusiveAllyMarkets", API3.Filters.byClass("Market"), gameState.getExclusiveAllyEntities()).hasEntities()) !gameState.updatingCollection("diplo-ExclusiveAllyMarkets", API3.Filters.byClass("Trade"), gameState.getExclusiveAllyEntities()).hasEntities())
return; return;
let template = gameState.getTemplate(gameState.applyCiv("structures/{civ}_market")); let template = gameState.getTemplate(gameState.applyCiv("structures/{civ}_market"));
if (!template) if (!template)
@ -600,7 +600,7 @@ PETRA.TradeManager.prototype.prospectForNewMarket = function(gameState, queues)
let marketPos = gameState.ai.HQ.findMarketLocation(gameState, template); let marketPos = gameState.ai.HQ.findMarketLocation(gameState, template);
if (!marketPos || marketPos[3] == 0) // marketPos[3] is the expected gain if (!marketPos || marketPos[3] == 0) // marketPos[3] is the expected gain
{ // no position found { // no position found
if (gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities()) if (gameState.getOwnEntitiesByClass("Market", true).hasEntities())
gameState.ai.HQ.buildManager.setUnbuildable(gameState, gameState.applyCiv("structures/{civ}_market")); gameState.ai.HQ.buildManager.setUnbuildable(gameState, gameState.applyCiv("structures/{civ}_market"));
else else
this.routeProspection = false; this.routeProspection = false;
@ -621,7 +621,7 @@ PETRA.TradeManager.prototype.prospectForNewMarket = function(gameState, queues)
} }
if (!this.tradeRoute) if (!this.tradeRoute)
gameState.ai.queueManager.changePriority("economicBuilding", 2*this.Config.priorities.economicBuilding); gameState.ai.queueManager.changePriority("economicBuilding", 2 * this.Config.priorities.economicBuilding);
let plan = new PETRA.ConstructionPlan(gameState, "structures/{civ}_market"); let plan = new PETRA.ConstructionPlan(gameState, "structures/{civ}_market");
if (!this.tradeRoute) if (!this.tradeRoute)
plan.queueToReset = "economicBuilding"; plan.queueToReset = "economicBuilding";

View File

@ -55,7 +55,7 @@ Barter.prototype.PlayerHasMarket = function(playerID)
{ {
var cmpFoundation = Engine.QueryInterface(entity, IID_Foundation); var cmpFoundation = Engine.QueryInterface(entity, IID_Foundation);
var cmpIdentity = Engine.QueryInterface(entity, IID_Identity); var cmpIdentity = Engine.QueryInterface(entity, IID_Identity);
if (!cmpFoundation && cmpIdentity && cmpIdentity.HasClass("BarterMarket")) if (!cmpFoundation && cmpIdentity && cmpIdentity.HasClass("Barter"))
return true; return true;
} }
return false; return false;

View File

@ -495,7 +495,7 @@ GuiInterface.prototype.GetEntityState = function(player, ent)
"req": cmpPromotion.GetRequiredXp() "req": cmpPromotion.GetRequiredXp()
}; };
if (!cmpFoundation && cmpIdentity && cmpIdentity.HasClass("BarterMarket")) if (!cmpFoundation && cmpIdentity && cmpIdentity.HasClass("Barter"))
ret.isBarterMarket = true; ret.isBarterMarket = true;
let cmpHeal = Engine.QueryInterface(ent, IID_Heal); let cmpHeal = Engine.QueryInterface(ent, IID_Heal);

View File

@ -57,7 +57,7 @@ Identity.prototype.Schema =
"</element>" + "</element>" +
"</optional>" + "</optional>" +
"<optional>" + "<optional>" +
"<element name='Classes' a:help='Optional list of space-separated classes applying to this entity. Choices include: AfricanElephant, Animal, Apadana, ArmyCamp, Ashoka, BarterMarket, Celt, CitizenSoldier, CivCentre, Colony, ConquestCritical, Domestic, DropsiteFood, DropsiteMetal, DropsiteStone, DropsiteWood, FemaleCitizen, FishingBoat, ForestPlant, GarrisonFortress, Gates, Human, Iberian, Immortal, IndianElephant, Italian, Juggernaut, Kennel, Lighthouse, LongWall, MercenaryCamp, Naval, NavalMarket, Organic, Palace, Palisade, Player, PtolemyIV, SeaCreature, SiegeWall, SpecialBuilding, StoneWall, Structure, Syssiton, Theater, Unit, WallTower.'>" + "<element name='Classes' a:help='Optional list of space-separated classes applying to this entity. Choices include: AfricanElephant, Animal, Ashoka, Barter, Celt, CitizenSoldier, CivCentre, ConquestCritical, Domestic, DropsiteFood, DropsiteMetal, DropsiteStone, DropsiteWood, FemaleCitizen, ForestPlant, GarrisonFortress, Human, Iberian, Immortal, IndianElephant, Italian, Juggernaut, MercenaryCamp, Organic, Player, PtolemyIV, SeaCreature, Structure, Unit, WallLong, WallMedium, WallShort, WallTower.'>" +
"<attribute name='datatype'>" + "<attribute name='datatype'>" +
"<value>tokens</value>" + "<value>tokens</value>" +
"</attribute>" + "</attribute>" +
@ -65,7 +65,7 @@ Identity.prototype.Schema =
"</element>" + "</element>" +
"</optional>" + "</optional>" +
"<optional>" + "<optional>" +
"<element name='VisibleClasses' a:help='Optional list of space-separated classes applying to this entity. These classes will also be visible in various GUI elements. If the classes need spaces, underscores will be replaced with spaces. Choices include: Archer, ArtilleryTower, Axeman, Barracks, Bireme, Blacksmith, BoltShooter, BoltTower, Camel, Cavalry, Champion, Chariot, Citizen, City, Civic, CivilCentre, Clubman, Corral, Crossbowman, Defensive, Dock, Dog, Economic, Elephant, ElephantStable, Embassy, Farmstead, Field, Fireship, Fortress, Healer, Hero, House, Infantry, Javelinist, Maceman, Melee, Market, Mercenary, Military, Outpost, Pikeman, Quadrireme, Quinquereme, Ram, Range, Ranged, Relic, Resource, SentryTower, Ship, Shipyard, Siege, SiegeTower, Slave, Slinger, Soldier, Spearman, Stable, StoneThrower, StoneTower, Storehouse, Support, Swordsman, Temple, Tower, Town, Trader, Trireme, Village, Warship, Wonder, Worker, Workshop.'>" + "<element name='VisibleClasses' a:help='Optional list of space-separated classes applying to this entity. These classes will also be visible in various GUI elements. If the classes need spaces, underscores will be replaced with spaces. Choices include: Archer, ArmyCamp, ArtilleryTower, Axeman, Barracks, Bireme, Blacksmith, BoltShooter, BoltTower, Camel, Cavalry, Champion, Chariot, Citizen, City, Civic, CivilCentre, Clubman, Colony, Corral, Council, Crossbowman, Defensive, Dock, Dog, Economic, Elephant, ElephantStable, Embassy, Farmstead, Field, Fireship, FishingBoat, Fortress, Gate, Gymnasium, Healer, Hero, House, Infantry, IshtarGate, Javelinist, Library, Lighthouse, Maceman, Melee, Market, Mercenary, MerchantShip, Military, Naval, Outpost, Palace, Pikeman, Pillar, Quadrireme, Quinquereme, Ram, Range, Ranged, Relic, Resource, SentryTower, Ship, Shipyard, Siege, SiegeTower, SiegeWall, Slave, Slinger, Soldier, Spearman, Stable, Stoa, StoneThrower, StoneTower, Storehouse, Support, Swordsman, Syssiton, Temple, TempleOfAmun, TempleOfApedemak, TempleOfMars, TempleOfVesta, Theater, Tower, Town, Trade, Trader, Trireme, TriumphalArch, Village, Wall, Warship, Wonder, Worker, Workshop.'>" +
"<attribute name='datatype'>" + "<attribute name='datatype'>" +
"<value>tokens</value>" + "<value>tokens</value>" +
"</attribute>" + "</attribute>" +

View File

@ -1,10 +1,10 @@
{ {
"type": "global", "type": "global",
"affects": ["Market"], "affects": ["Trade"],
"affectedPlayers": ["ExclusiveMutualAlly"], "affectedPlayers": ["ExclusiveMutualAlly"],
"modifications": [ "modifications": [
{ "value": "Market/InternationalBonus", "add": 0.1 } { "value": "Market/InternationalBonus", "add": 0.1 }
], ],
"auraName": "Trademasters", "auraName": "Trademasters",
"auraDescription": "Allied Markets +10% international trade bonus." "auraDescription": "Allies +10% international trade bonus."
} }

View File

@ -71,7 +71,7 @@
{ {
"Name": "Trademasters", "Name": "Trademasters",
"History": "The Phoenicians and Carthaginians were broadly known as the greatest trading civilization of the ancient and classical world.", "History": "The Phoenicians and Carthaginians were broadly known as the greatest trading civilization of the ancient and classical world.",
"Description": "Allied Markets +10% international trade bonus." "Description": "Allies +10% international trade bonus."
} }
], ],
"Structures": "Structures":

View File

@ -7,11 +7,11 @@
"requirementsTooltip": "Unlocked in Town Phase.", "requirementsTooltip": "Unlocked in Town Phase.",
"icon": "stone_blocks_brown.png", "icon": "stone_blocks_brown.png",
"researchTime": 40, "researchTime": 40,
"tooltip": "City walls -20% build time, but -1 crush armor level.", "tooltip": "Walls −20% build time, but −1 crush armor.",
"modifications": [ "modifications": [
{ "value": "Cost/BuildTime", "multiply": 0.8 }, { "value": "Armour/Crush", "add": -1 },
{ "value": "Armour/Crush", "add": -1 } { "value": "Cost/BuildTime", "multiply": 0.8 }
], ],
"affects": ["StoneWall"], "affects": ["Wall"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml" "soundComplete": "interface/alarm/alarm_upgradearmory.xml"
} }

View File

@ -6,9 +6,9 @@
"tooltip": "Carthaginian Walls +100% build time, +100% stone cost, and +200% health.", "tooltip": "Carthaginian Walls +100% build time, +100% stone cost, and +200% health.",
"requirements": { "civ": "cart" }, "requirements": { "civ": "cart" },
"modifications": [ "modifications": [
{ "value": "Health/Max", "multiply": 3 },
{ "value": "Cost/BuildTime", "multiply": 2 }, { "value": "Cost/BuildTime", "multiply": 2 },
{ "value": "Cost/Resources/stone", "multiply": 2 } { "value": "Cost/Resources/stone", "multiply": 2 },
{ "value": "Health/Max", "multiply": 3 }
], ],
"affects": ["StoneWall"] "affects": ["Wall"]
} }

View File

@ -6,8 +6,8 @@
"icon": "wooden_walls.png", "icon": "wooden_walls.png",
"tooltip": "Mauryan City Walls −20% build time and −20% health.", "tooltip": "Mauryan City Walls −20% build time and −20% health.",
"modifications": [ "modifications": [
{ "value": "Health/Max", "multiply": 0.8 }, { "value": "Cost/BuildTime", "multiply": 0.8 },
{ "value": "Cost/BuildTime", "multiply": 0.8 } { "value": "Health/Max", "multiply": 0.8 }
], ],
"affects": ["StoneWall"] "affects": ["Wall"]
} }

View File

@ -7,11 +7,11 @@
"requirementsTooltip": "Unlocked in Town Phase.", "requirementsTooltip": "Unlocked in Town Phase.",
"icon": "stone_blocks.png", "icon": "stone_blocks.png",
"researchTime": 40, "researchTime": 40,
"tooltip": "City walls +2 crush armor levels, but +10% build time.", "tooltip": "Walls +2 crush armor, but +10% build time.",
"modifications": [ "modifications": [
{ "value": "Cost/BuildTime", "multiply": 1.1 }, { "value": "Armour/Crush", "add": 2 },
{ "value": "Armour/Crush", "add": 2 } { "value": "Cost/BuildTime", "multiply": 1.1 }
], ],
"affects": ["StoneWall"], "affects": ["Wall"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml" "soundComplete": "interface/alarm/alarm_upgradearmory.xml"
} }

View File

@ -2,14 +2,19 @@
"genericName": "Athenian Long Walls", "genericName": "Athenian Long Walls",
"description": "The Long Walls of Athens were constructed under the auspices of the wily Themistocles and extended 6 km from the city to the port of Piraeus. This secured the city's sea supply routes and prevented an enemy from starving out the city during a siege.", "description": "The Long Walls of Athens were constructed under the auspices of the wily Themistocles and extended 6 km from the city to the port of Piraeus. This secured the city's sea supply routes and prevented an enemy from starving out the city during a siege.",
"cost": { "food": 0, "wood": 0, "stone": 250, "metal": 250 }, "cost": { "food": 0, "wood": 0, "stone": 250, "metal": 250 },
"requirements": { "all": [{ "tech": "phase_city" }, { "civ": "athen" }] }, "requirements": {
"all": [
{ "tech": "phase_city" },
{ "civ": "athen" }
]
},
"requirementsTooltip": "Unlocked in City Phase.", "requirementsTooltip": "Unlocked in City Phase.",
"icon": "crenelations.png", "icon": "crenelations.png",
"researchTime": 60, "researchTime": 60,
"tooltip": "Build stone walls in neutral territory.", "tooltip": "Build Walls in own or neutral territory.",
"modifications": [ "modifications": [
{ "value": "BuildRestrictions/Territory", "replace": ["own", "neutral"] } { "value": "BuildRestrictions/Territory", "replace": ["own", "neutral"] }
], ],
"affects": ["StoneWall"], "affects": ["Wall"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml" "soundComplete": "interface/alarm/alarm_upgradearmory.xml"
} }

View File

@ -1,5 +1,5 @@
{ {
"genericName": "Walls build time vs. Health", "genericName": "Wall armor vs build time.",
"top": "buildtime_walls_rubble", "top": "buildtime_walls_rubble",
"bottom": "health_walls_geometric_masonry", "bottom": "health_walls_geometric_masonry",
"requirements": { "notciv": "iber" } "requirements": { "notciv": "iber" }

View File

@ -5,8 +5,13 @@
}, },
"description": "Advances from a bustling town to a veritable metropolis, full of the wonders of modern technology. This is the Athenian city phase, where metal gathering rates are boosted because of the 'Silver Owls' bonus.", "description": "Advances from a bustling town to a veritable metropolis, full of the wonders of modern technology. This is the Athenian city phase, where metal gathering rates are boosted because of the 'Silver Owls' bonus.",
"cost": { "food": 0, "wood": 0, "stone": 750, "metal": 750 }, "cost": { "food": 0, "wood": 0, "stone": 750, "metal": 750 },
"requirements": { "entity": { "class": "Town", "number": 4 } }, "requirements": {
"requirementsTooltip": "Requires 4 new Town Phase structures (except Walls and Civic Centers).", "entity": {
"class": "Town",
"number": 4
}
},
"requirementsTooltip": "Requires 4 Town Structures.",
"supersedes": "phase_town_athen", "supersedes": "phase_town_athen",
"replaces": ["phase_city"], "replaces": ["phase_city"],
"icon": "city_phase.png", "icon": "city_phase.png",

View File

@ -6,8 +6,13 @@
}, },
"description": "Advances from a bustling town to a veritable metropolis, full of the wonders of modern technology.", "description": "Advances from a bustling town to a veritable metropolis, full of the wonders of modern technology.",
"cost": { "food": 0, "wood": 0, "stone": 750, "metal": 750 }, "cost": { "food": 0, "wood": 0, "stone": 750, "metal": 750 },
"requirements": { "entity": { "class": "Town", "number": 4 } }, "requirements": {
"requirementsTooltip": "Requires 4 new Town Phase structures (except Walls and Civic Centers).", "entity": {
"class": "Town",
"number": 4
}
},
"requirementsTooltip": "Requires 4 Town Structures.",
"supersedes": "phase_town_generic", "supersedes": "phase_town_generic",
"replaces": ["phase_city"], "replaces": ["phase_city"],
"icon": "city_phase.png", "icon": "city_phase.png",

View File

@ -5,8 +5,13 @@
}, },
"description": "Advances from a small village to a bustling town, ready to expand rapidly. This is the Athenian town phase, where metal gathering rates are boosted because of the 'Silver Owls' bonus.", "description": "Advances from a small village to a bustling town, ready to expand rapidly. This is the Athenian town phase, where metal gathering rates are boosted because of the 'Silver Owls' bonus.",
"cost": { "food": 500, "wood": 500, "stone": 0, "metal": 0 }, "cost": { "food": 500, "wood": 500, "stone": 0, "metal": 0 },
"requirements": { "entity": { "class": "Village", "number": 5 } }, "requirements": {
"requirementsTooltip": "Requires 5 Village Phase structures (except Palisades and Farm Fields).", "entity": {
"class": "Village",
"number": 5
}
},
"requirementsTooltip": "Requires 5 Village Structures.",
"supersedes": "phase_village", "supersedes": "phase_village",
"replaces": ["phase_town"], "replaces": ["phase_town"],
"icon": "town_phase.png", "icon": "town_phase.png",

View File

@ -6,8 +6,13 @@
}, },
"description": "Advances from a small village to a bustling town, ready to expand rapidly.", "description": "Advances from a small village to a bustling town, ready to expand rapidly.",
"cost": { "food": 500, "wood": 500, "stone": 0, "metal": 0 }, "cost": { "food": 500, "wood": 500, "stone": 0, "metal": 0 },
"requirements": { "entity": { "class": "Village", "number": 5 } }, "requirements": {
"requirementsTooltip": "Requires 5 Village Phase structures (except Palisades and Farm Fields).", "entity": {
"class": "Village",
"number": 5
}
},
"requirementsTooltip": "Requires 5 Village Structures.",
"supersedes": "phase_village", "supersedes": "phase_village",
"replaces": ["phase_town"], "replaces": ["phase_town"],
"icon": "town_phase.png", "icon": "town_phase.png",

View File

@ -6,10 +6,10 @@
"requirementsTooltip": "Unlocked in Town Phase.", "requirementsTooltip": "Unlocked in Town Phase.",
"icon": "sibylline_books.png", "icon": "sibylline_books.png",
"researchTime": 40, "researchTime": 40,
"tooltip": "Market +10% International Bonus.", "tooltip": "+10% international trade bonus.",
"modifications": [ "modifications": [
{ "value": "Market/InternationalBonus", "add": 0.1 } { "value": "Market/InternationalBonus", "add": 0.1 }
], ],
"affects": ["Market"], "affects": ["Trade"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml" "soundComplete": "interface/alarm/alarm_upgradearmory.xml"
} }

View File

@ -20,7 +20,7 @@
<Fortress>10</Fortress> <Fortress>10</Fortress>
<Wonder>1</Wonder> <Wonder>1</Wonder>
<Hero>1</Hero> <Hero>1</Hero>
<Apadana>1</Apadana> <Palace>1</Palace>
<Embassy>3</Embassy> <Embassy>3</Embassy>
<Monument>5</Monument> <Monument>5</Monument>
<Pillar>0</Pillar> <Pillar>0</Pillar>
@ -29,12 +29,13 @@
<Library>1</Library> <Library>1</Library>
<Lighthouse>1</Lighthouse> <Lighthouse>1</Lighthouse>
<Juggernaut>1</Juggernaut> <Juggernaut>1</Juggernaut>
<UniqueBuilding>1</UniqueBuilding> <IshtarGate>1</IshtarGate>
<Hall>2</Hall> <Hall>2</Hall>
<Stoa>2</Stoa> <Stoa>2</Stoa>
<PyramidSmall>4</PyramidSmall> <PyramidSmall>4</PyramidSmall>
<PyramidLarge>2</PyramidLarge> <PyramidLarge>2</PyramidLarge>
<TempleOfAmun>1</TempleOfAmun> <TempleOfAmun>1</TempleOfAmun>
<TempleOfVesta>1</TempleOfVesta>
<Gladiator>0</Gladiator> <Gladiator>0</Gladiator>
<WarDog>20</WarDog> <WarDog>20</WarDog>
</Limits> </Limits>

View File

@ -19,10 +19,11 @@
</Health> </Health>
<Identity> <Identity>
<Civ>athen</Civ> <Civ>athen</Civ>
<Classes datatype="tokens">ConquestCritical</Classes>
<GenericName>Gymnasium</GenericName> <GenericName>Gymnasium</GenericName>
<SpecificName>Gymnasion</SpecificName> <SpecificName>Gymnasion</SpecificName>
<Tooltip>Train Champions.</Tooltip> <Tooltip>Train Champions.</Tooltip>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">Gymnasium</VisibleClasses>
<Icon>structures/gymnasium.png</Icon> <Icon>structures/gymnasium.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -19,10 +19,11 @@
</Health> </Health>
<Identity> <Identity>
<Civ>athen</Civ> <Civ>athen</Civ>
<Classes datatype="tokens">ConquestCritical</Classes>
<GenericName>Council Chamber</GenericName> <GenericName>Council Chamber</GenericName>
<SpecificName>Prytaneion</SpecificName> <SpecificName>Prytaneion</SpecificName>
<Tooltip>Train Heroes and research technologies.</Tooltip> <Tooltip>Train Heroes and research technologies.</Tooltip>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">Council</VisibleClasses>
<Icon>structures/tholos.png</Icon> <Icon>structures/tholos.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -9,12 +9,12 @@
<Height>8.0</Height> <Height>8.0</Height>
</Footprint> </Footprint>
<Identity> <Identity>
<GenericName>Island Settlement</GenericName>
<Civ>brit</Civ> <Civ>brit</Civ>
<Classes datatype="tokens">Naval</Classes> <GenericName>Island Settlement</GenericName>
<Icon>structures/crannog.png</Icon>
<Tooltip>Increase population limit and defend waterways.</Tooltip>
<SpecificName>Cranogion</SpecificName> <SpecificName>Cranogion</SpecificName>
<Tooltip>Build upon a shoreline in own, neutral, or allied territory. Acquire large tracts of territory. Territory root. Dropsite for food, wood, stone, and metal. Train Citizens, construct Ships, and research technologies. Garrison Soldiers for additional arrows.</Tooltip>
<VisibleClasses datatype="tokens">Naval</VisibleClasses>
<Icon>structures/crannog.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology> <RequiredTechnology>phase_town</RequiredTechnology>
</Identity> </Identity>
<Obstruction> <Obstruction>

View File

@ -9,7 +9,7 @@
<Identity> <Identity>
<Civ>brit</Civ> <Civ>brit</Civ>
<SpecificName>Uxelon</SpecificName> <SpecificName>Uxelon</SpecificName>
<Tooltip>Does not shoot or garrison.</Tooltip> <Tooltip disable=""/>
</Identity> </Identity>
<Obstruction> <Obstruction>
<Static width="10" depth="9"/> <Static width="10" depth="9"/>

View File

@ -40,11 +40,11 @@
</Health> </Health>
<Identity> <Identity>
<Civ>cart</Civ> <Civ>cart</Civ>
<Classes datatype="tokens">ConquestCritical</Classes>
<GenericName>Naval Shipyard</GenericName> <GenericName>Naval Shipyard</GenericName>
<SpecificName>Cothon</SpecificName> <SpecificName>Cothon</SpecificName>
<VisibleClasses datatype="tokens">-City Shipyard Town</VisibleClasses> <Tooltip>Build upon a shoreline in own, neutral, or allied territory. Acquire large tracts of territory. Territory root. Construct Warships and research technologies.</Tooltip>
<Tooltip>Construct and repair mighty warships.</Tooltip> <Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">Naval -City Town Shipyard</VisibleClasses>
<Icon>structures/uber_dock.png</Icon> <Icon>structures/uber_dock.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology> <RequiredTechnology>phase_town</RequiredTechnology>
</Identity> </Identity>

View File

@ -12,7 +12,7 @@
<Identity> <Identity>
<Civ>cart</Civ> <Civ>cart</Civ>
<SpecificName>Maqdaš</SpecificName> <SpecificName>Maqdaš</SpecificName>
<Tooltip>Train Healers and Champions and research healing technologies. Garrison units to heal them at a quick rate.</Tooltip> <Tooltip>Train Healers and Champions and research healing technologies.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<stone>80</stone> <stone>80</stone>

View File

@ -9,7 +9,7 @@
<Identity> <Identity>
<Civ>gaul</Civ> <Civ>gaul</Civ>
<SpecificName>Uxelon</SpecificName> <SpecificName>Uxelon</SpecificName>
<Tooltip>Does not shoot or garrison.</Tooltip> <Tooltip disable=""/>
</Identity> </Identity>
<Obstruction> <Obstruction>
<Static width="8" depth="8"/> <Static width="8" depth="8"/>

View File

@ -31,9 +31,9 @@
<Civ>iber</Civ> <Civ>iber</Civ>
<GenericName>Revered Monument</GenericName> <GenericName>Revered Monument</GenericName>
<SpecificName>Gur Oroigarri</SpecificName> <SpecificName>Gur Oroigarri</SpecificName>
<Classes datatype="tokens">Monument</Classes> <Tooltip>Territory root.</Tooltip>
<VisibleClasses datatype="tokens">Monument</VisibleClasses>
<Icon>structures/iberian_bull.png</Icon> <Icon>structures/iberian_bull.png</Icon>
<Tooltip>All units within vision of this monument will fight harder. Buildings in the territory of the monument do not decay.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<stone>20</stone> <stone>20</stone>

View File

@ -7,8 +7,8 @@
<Civ>kush</Civ> <Civ>kush</Civ>
<GenericName>Temple of Apedemak</GenericName> <GenericName>Temple of Apedemak</GenericName>
<SpecificName>Pr-ʿIprmk</SpecificName> <SpecificName>Pr-ʿIprmk</SpecificName>
<Tooltip>Train priests to heal your troops. Train Meroitic Temple Guards. Garrison units to heal them at a quick rate.</Tooltip> <Tooltip>Train Healers and Apedamak Champions and research healing technologies.</Tooltip>
<Classes datatype="tokens">TempleOfApedemak</Classes> <VisibleClasses datatype="tokens">TempleOfApedemak</VisibleClasses>
</Identity> </Identity>
<Obstruction> <Obstruction>
<Static width="18" depth="30.0"/> <Static width="18" depth="30.0"/>

View File

@ -27,10 +27,9 @@
<Civ>kush</Civ> <Civ>kush</Civ>
<GenericName>Grand Temple of Amun</GenericName> <GenericName>Grand Temple of Amun</GenericName>
<SpecificName>Pr-ʿImn</SpecificName> <SpecificName>Pr-ʿImn</SpecificName>
<Tooltip>Train priests to heal your troops. Train Napatan Temple Guards and research unique technologies. Garrison units to heal them at a quick rate.</Tooltip> <Tooltip>Train Healers and Amun Champions and research healing technologies.</Tooltip>
<VisibleClasses datatype="tokens">-Town City TempleOfAmun</VisibleClasses>
<Icon>structures/temple_epic.png</Icon> <Icon>structures/temple_epic.png</Icon>
<Classes datatype="tokens">TempleOfAmun</Classes>
<VisibleClasses datatype="tokens">City -Town</VisibleClasses>
<RequiredTechnology>phase_city</RequiredTechnology> <RequiredTechnology>phase_city</RequiredTechnology>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -14,10 +14,11 @@
</Footprint> </Footprint>
<Identity> <Identity>
<Civ>maur</Civ> <Civ>maur</Civ>
<Classes datatype="tokens">ConquestCritical</Classes>
<SpecificName>Harmya</SpecificName> <SpecificName>Harmya</SpecificName>
<Icon>gaia/special_stoa.png</Icon>
<Tooltip>Train Female Citizens, Champions, and Heroes.</Tooltip> <Tooltip>Train Female Citizens, Champions, and Heroes.</Tooltip>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">Palace</VisibleClasses>
<Icon>gaia/special_stoa.png</Icon>
</Identity> </Identity>
<Loot> <Loot>
<stone>40</stone> <stone>40</stone>

View File

@ -31,9 +31,9 @@
<Civ>maur</Civ> <Civ>maur</Civ>
<GenericName>Edict Pillar of Ashoka</GenericName> <GenericName>Edict Pillar of Ashoka</GenericName>
<SpecificName>Śāsana Stambha Aśokā</SpecificName> <SpecificName>Śāsana Stambha Aśokā</SpecificName>
<Classes datatype="tokens">Pillar</Classes> <Tooltip>Territory root.</Tooltip>
<VisibleClasses datatype="tokens">Pillar</VisibleClasses>
<Icon>structures/ashoka_pillar.png</Icon> <Icon>structures/ashoka_pillar.png</Icon>
<Tooltip>The famous pillar of Ashoka. Increases the walk speed of traders. Buildings in the territory of the monument do not decay.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<stone>20</stone> <stone>20</stone>

View File

@ -10,9 +10,6 @@
<Square width="4" depth="10"/> <Square width="4" depth="10"/>
<Height>6</Height> <Height>6</Height>
</Footprint> </Footprint>
<Identity>
<SpecificName>Palisade Curve</SpecificName>
</Identity>
<Loot> <Loot>
<wood>2</wood> <wood>2</wood>
</Loot> </Loot>

View File

@ -10,9 +10,6 @@
<Square width="1.5" depth="3"/> <Square width="1.5" depth="3"/>
<Height>5</Height> <Height>5</Height>
</Footprint> </Footprint>
<Identity>
<SpecificName>Palisade End</SpecificName>
</Identity>
<Loot> <Loot>
<wood>1</wood> <wood>1</wood>
</Loot> </Loot>

View File

@ -6,7 +6,6 @@
<Height>9.0</Height> <Height>9.0</Height>
</Footprint> </Footprint>
<Identity> <Identity>
<SpecificName>Palisade Fort</SpecificName>
<GenericName>Wooden Tower</GenericName> <GenericName>Wooden Tower</GenericName>
<Icon>structures/palisade_fort.png</Icon> <Icon>structures/palisade_fort.png</Icon>
<Classes datatype="tokens">Palisade</Classes> <Classes datatype="tokens">Palisade</Classes>

View File

@ -17,11 +17,11 @@
<Max op="mul">0.64</Max> <Max op="mul">0.64</Max>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">Gates</Classes> <GenericName>Palisade Gate</GenericName>
<SpecificName>Palisade Gate</SpecificName>
<SelectionGroupName>structures/palisades_gate</SelectionGroupName> <SelectionGroupName>structures/palisades_gate</SelectionGroupName>
<Tooltip>Allow units access through Palisades. Can be locked to prevent access.</Tooltip>
<VisibleClasses datatype="tokens">Gate</VisibleClasses>
<Icon>structures/wooden_gate.png</Icon> <Icon>structures/wooden_gate.png</Icon>
<Tooltip>Allow units access through a palisade wall. Can be locked to prevent access.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<wood>4</wood> <wood>4</wood>

View File

@ -14,7 +14,7 @@
<Max op="mul">0.75</Max> <Max op="mul">0.75</Max>
</Health> </Health>
<Identity> <Identity>
<SpecificName>Palisade</SpecificName> <Tooltip>Can be converted into a Palisade Gate.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<wood>3</wood> <wood>3</wood>
@ -28,11 +28,11 @@
<Upgrade> <Upgrade>
<Gate> <Gate>
<Entity>structures/palisades_gate</Entity> <Entity>structures/palisades_gate</Entity>
<Tooltip>Allow units access through Palisades. Can be locked to prevent access.</Tooltip>
<Cost> <Cost>
<wood>20</wood> <wood>20</wood>
</Cost> </Cost>
<Time>5</Time> <Time>5</Time>
<Tooltip>This will allow you to let units circulate through your fortifications.</Tooltip>
<Variant>upgrading</Variant> <Variant>upgrading</Variant>
</Gate> </Gate>
</Upgrade> </Upgrade>

View File

@ -13,9 +13,6 @@
<Health> <Health>
<Max op="mul">0.5</Max> <Max op="mul">0.5</Max>
</Health> </Health>
<Identity>
<SpecificName>Palisade</SpecificName>
</Identity>
<Loot> <Loot>
<wood>2</wood> <wood>2</wood>
</Loot> </Loot>

View File

@ -13,9 +13,6 @@
<Health> <Health>
<Max op="mul">0.25</Max> <Max op="mul">0.25</Max>
</Health> </Health>
<Identity>
<SpecificName>Palisade</SpecificName>
</Identity>
<Loot> <Loot>
<wood>1</wood> <wood>1</wood>
</Loot> </Loot>

View File

@ -14,7 +14,7 @@
<Max op="mul">0.5</Max> <Max op="mul">0.5</Max>
</Health> </Health>
<Identity> <Identity>
<SpecificName>Angle Spike</SpecificName> <GenericName>Angle Spike</GenericName>
</Identity> </Identity>
<Loot> <Loot>
<wood>1</wood> <wood>1</wood>

View File

@ -14,7 +14,7 @@
<Max op="mul">0.2</Max> <Max op="mul">0.2</Max>
</Health> </Health>
<Identity> <Identity>
<SpecificName>Small Spikes</SpecificName> <GenericName>Small Spikes</GenericName>
</Identity> </Identity>
<Loot> <Loot>
<wood>1</wood> <wood>1</wood>

View File

@ -14,7 +14,7 @@
<Max op="mul">0.5</Max> <Max op="mul">0.5</Max>
</Health> </Health>
<Identity> <Identity>
<SpecificName>Tall Spikes</SpecificName> <GenericName>Tall Spikes</GenericName>
</Identity> </Identity>
<Loot> <Loot>
<wood>2</wood> <wood>2</wood>

View File

@ -10,9 +10,6 @@
<Square width="3" depth="10"/> <Square width="3" depth="10"/>
<Height>6</Height> <Height>6</Height>
</Footprint> </Footprint>
<Identity>
<SpecificName>Palisade</SpecificName>
</Identity>
<Loot> <Loot>
<wood>2</wood> <wood>2</wood>
</Loot> </Loot>

View File

@ -13,10 +13,6 @@
<Health> <Health>
<Max op="mul">0.75</Max> <Max op="mul">0.75</Max>
</Health> </Health>
<Identity>
<SpecificName>Palisade</SpecificName>
<Classes datatype="tokens">Tower</Classes>
</Identity>
<Loot> <Loot>
<wood>1</wood> <wood>1</wood>
</Loot> </Loot>

View File

@ -11,7 +11,7 @@
<Height>12.0</Height> <Height>12.0</Height>
</Footprint> </Footprint>
<Identity> <Identity>
<SpecificName>Watchtower</SpecificName> <GenericName>Watchtower</GenericName>
</Identity> </Identity>
<Loot> <Loot>
<wood>3</wood> <wood>3</wood>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_structure_special"> <Entity parent="template_structure_special">
<BuildRestrictions> <BuildRestrictions>
<Category>Apadana</Category> <Category>Palace</Category>
</BuildRestrictions> </BuildRestrictions>
<Cost> <Cost>
<BuildTime>300</BuildTime> <BuildTime>300</BuildTime>
@ -26,9 +26,10 @@
<Civ>pers</Civ> <Civ>pers</Civ>
<GenericName>Throne Hall</GenericName> <GenericName>Throne Hall</GenericName>
<SpecificName>Apadāna</SpecificName> <SpecificName>Apadāna</SpecificName>
<Classes datatype="tokens">Apadana ConquestCritical Palace</Classes> <Tooltip>Train Champions and Heroes.</Tooltip>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">Palace</VisibleClasses>
<Icon>structures/palace.png</Icon> <Icon>structures/palace.png</Icon>
<Tooltip>"Satrapy Tribute": Gain a trickle of food, wood, stone, and metal resources. Train Champions and Heroes.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<stone>60</stone> <stone>60</stone>

View File

@ -23,9 +23,10 @@
</Health> </Health>
<Identity> <Identity>
<Civ>pers</Civ> <Civ>pers</Civ>
<Classes datatype="tokens">ConquestCritical</Classes>
<GenericName>Gate of All Nations</GenericName> <GenericName>Gate of All Nations</GenericName>
<SpecificName>Duvarθi Visadahyu</SpecificName> <SpecificName>Duvarθi Visadahyu</SpecificName>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">Hall</VisibleClasses>
<Icon>structures/pers_hall.png</Icon> <Icon>structures/pers_hall.png</Icon>
<Tooltip>Train Champions.</Tooltip> <Tooltip>Train Champions.</Tooltip>
</Identity> </Identity>

View File

@ -4,7 +4,7 @@
structures/loyalty_regen structures/loyalty_regen
</Auras> </Auras>
<BuildRestrictions> <BuildRestrictions>
<Category>UniqueBuilding</Category> <Category>IshtarGate</Category>
</BuildRestrictions> </BuildRestrictions>
<Capturable disable=""/> <Capturable disable=""/>
<Cost> <Cost>
@ -26,10 +26,10 @@
</Health> </Health>
<Identity> <Identity>
<Civ>pers</Civ> <Civ>pers</Civ>
<GenericName>Persian Special Building</GenericName> <GenericName>Ishtar Gate of Babylon</GenericName>
<SpecificName>Ishtar Gate of Babylon</SpecificName> <Tooltip>Territory root.</Tooltip>
<Tooltip>Increases the loyalty regeneration of nearby structures, making them harder to capture.</Tooltip>
<Classes datatype="tokens">ConquestCritical</Classes> <Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">IshtarGate</VisibleClasses>
<Icon>structures/pers_gate.png</Icon> <Icon>structures/pers_gate.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -23,7 +23,8 @@
<Civ>pers</Civ> <Civ>pers</Civ>
<GenericName>Palace</GenericName> <GenericName>Palace</GenericName>
<SpecificName>Taçara</SpecificName> <SpecificName>Taçara</SpecificName>
<Classes datatype="tokens">ConquestCritical Palace</Classes> <Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">Palace</VisibleClasses>
<Icon>structures/palace.png</Icon> <Icon>structures/palace.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -23,9 +23,8 @@
<Civ>ptol</Civ> <Civ>ptol</Civ>
<GenericName>Lighthouse</GenericName> <GenericName>Lighthouse</GenericName>
<SpecificName>Pharos</SpecificName> <SpecificName>Pharos</SpecificName>
<Classes datatype="tokens">Lighthouse</Classes> <Tooltip>Build upon a shoreline in own, neutral, or allied territory. Reveal the shorelines over the entire map. Very large vision range.</Tooltip>
<VisibleClasses datatype="tokens">-City Town</VisibleClasses> <VisibleClasses datatype="tokens">-City Town Lighthouse</VisibleClasses>
<Tooltip>Build along the shore to reveal the shorelines over the entire map. Very large vision range: 180 meters.</Tooltip>
<Icon>structures/lighthouse.png</Icon> <Icon>structures/lighthouse.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology> <RequiredTechnology>phase_town</RequiredTechnology>
</Identity> </Identity>

View File

@ -7,7 +7,6 @@
<Identity> <Identity>
<Civ>ptol</Civ> <Civ>ptol</Civ>
<SpecificName>Klērouchia</SpecificName> <SpecificName>Klērouchia</SpecificName>
<Tooltip>This is the Ptolemaic expansion building, similar to Civic Centers for other factions. It is weaker and carries a smaller territory influence, but is cheaper and built faster. Train settler-soldiers of various nationalities.</Tooltip>
</Identity> </Identity>
<Obstruction> <Obstruction>
<Static width="32" depth="31"/> <Static width="32" depth="31"/>

View File

@ -20,7 +20,8 @@
<Civ>rome</Civ> <Civ>rome</Civ>
<GenericName>Triumphal Arch</GenericName> <GenericName>Triumphal Arch</GenericName>
<SpecificName>Arcus Triumphālis</SpecificName> <SpecificName>Arcus Triumphālis</SpecificName>
<Classes datatype="tokens">ConquestCritical</Classes> <Tooltip>Territory root.</Tooltip>
<VisibleClasses datatype="tokens">TriumphalArch</VisibleClasses>
<Icon>structures/arch.png</Icon> <Icon>structures/arch.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -79,9 +79,10 @@
<Civ>rome</Civ> <Civ>rome</Civ>
<GenericName>Army Camp</GenericName> <GenericName>Army Camp</GenericName>
<SpecificName>Castra</SpecificName> <SpecificName>Castra</SpecificName>
<Classes datatype="tokens">ArmyCamp ConquestCritical</Classes>
<Icon>structures/roman_camp.png</Icon>
<Tooltip>Build in neutral or enemy territory. Train Citizen-Soldiers and construct Siege Engines. Garrison Soldiers for additional arrows.</Tooltip> <Tooltip>Build in neutral or enemy territory. Train Citizen-Soldiers and construct Siege Engines. Garrison Soldiers for additional arrows.</Tooltip>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">ArmyCamp</VisibleClasses>
<Icon>structures/roman_camp.png</Icon>
</Identity> </Identity>
<Loot> <Loot>
<xp>100</xp> <xp>100</xp>

View File

@ -30,7 +30,7 @@
<Civ>rome</Civ> <Civ>rome</Civ>
<GenericName>Siege Wall Gate</GenericName> <GenericName>Siege Wall Gate</GenericName>
<SpecificName>Porta Circummūnītiōnis</SpecificName> <SpecificName>Porta Circummūnītiōnis</SpecificName>
<Classes datatype="tokens">SiegeWall</Classes> <VisibleClasses datatype="tokens">SiegeWall</VisibleClasses>
<Icon>structures/wooden_gate.png</Icon> <Icon>structures/wooden_gate.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -31,9 +31,8 @@
<SelectionGroupName>structures/rome_wallset_siege</SelectionGroupName> <SelectionGroupName>structures/rome_wallset_siege</SelectionGroupName>
<GenericName>Siege Wall</GenericName> <GenericName>Siege Wall</GenericName>
<SpecificName>Mūrus Circummūnītiōnis</SpecificName> <SpecificName>Mūrus Circummūnītiōnis</SpecificName>
<Classes datatype="tokens">SiegeWall</Classes> <VisibleClasses datatype="tokens">SiegeWall</VisibleClasses>
<Icon>structures/siege_wall.png</Icon> <Icon>structures/siege_wall.png</Icon>
<Tooltip>A wooden and turf palisade buildable in enemy and neutral territories.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<wood>12</wood> <wood>12</wood>

View File

@ -31,9 +31,8 @@
<SelectionGroupName>structures/rome_wallset_siege</SelectionGroupName> <SelectionGroupName>structures/rome_wallset_siege</SelectionGroupName>
<GenericName>Siege Wall</GenericName> <GenericName>Siege Wall</GenericName>
<SpecificName>Mūrus Circummūnītiōnis</SpecificName> <SpecificName>Mūrus Circummūnītiōnis</SpecificName>
<Classes datatype="tokens">SiegeWall</Classes> <VisibleClasses datatype="tokens">SiegeWall</VisibleClasses>
<Icon>structures/siege_wall.png</Icon> <Icon>structures/siege_wall.png</Icon>
<Tooltip>A wooden and turf palisade buildable in enemy and neutral territories.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<wood>8</wood> <wood>8</wood>

View File

@ -31,9 +31,8 @@
<SelectionGroupName>structures/rome_wallset_siege</SelectionGroupName> <SelectionGroupName>structures/rome_wallset_siege</SelectionGroupName>
<GenericName>Siege Wall</GenericName> <GenericName>Siege Wall</GenericName>
<SpecificName>Mūrus Circummūnītiōnis</SpecificName> <SpecificName>Mūrus Circummūnītiōnis</SpecificName>
<Classes datatype="tokens">SiegeWall</Classes> <VisibleClasses datatype="tokens">SiegeWall</VisibleClasses>
<Icon>structures/siege_wall.png</Icon> <Icon>structures/siege_wall.png</Icon>
<Tooltip>A wooden and turf palisade buildable in enemy and neutral territories.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<wood>4</wood> <wood>4</wood>

View File

@ -30,7 +30,7 @@
<Civ>rome</Civ> <Civ>rome</Civ>
<GenericName>Siege Wall Tower</GenericName> <GenericName>Siege Wall Tower</GenericName>
<SpecificName>Turris Circummūnītiōnis</SpecificName> <SpecificName>Turris Circummūnītiōnis</SpecificName>
<Classes datatype="tokens">SiegeWall</Classes> <VisibleClasses datatype="tokens">SiegeWall</VisibleClasses>
<Icon>structures/siege_wall.png</Icon> <Icon>structures/siege_wall.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -11,6 +11,8 @@
<Civ>rome</Civ> <Civ>rome</Civ>
<GenericName>Temple of Mars</GenericName> <GenericName>Temple of Mars</GenericName>
<SpecificName>Aedēs Mārtiālis</SpecificName> <SpecificName>Aedēs Mārtiālis</SpecificName>
<VisibleClasses datatype="tokens">-Town City TempleOfMars</VisibleClasses>
<RequiredTechnology>phase_city</RequiredTechnology>
</Identity> </Identity>
<Obstruction> <Obstruction>
<Static width="20.0" depth="40.0"/> <Static width="20.0" depth="40.0"/>

View File

@ -4,7 +4,7 @@
structures/loyalty_regen structures/loyalty_regen
</Auras> </Auras>
<BuildRestrictions> <BuildRestrictions>
<Category>UniqueBuilding</Category> <Category>TempleOfVesta</Category>
</BuildRestrictions> </BuildRestrictions>
<Footprint replace=""> <Footprint replace="">
<Circle radius="11.0"/> <Circle radius="11.0"/>
@ -15,8 +15,9 @@
</Health> </Health>
<Identity> <Identity>
<GenericName>Temple of Vesta</GenericName> <GenericName>Temple of Vesta</GenericName>
<Icon>structures/temple_vesta.png</Icon>
<SpecificName>Aedēs Vestālis</SpecificName> <SpecificName>Aedēs Vestālis</SpecificName>
<VisibleClasses datatype="tokens">TempleOfVesta</VisibleClasses>
<Icon>structures/temple_vesta.png</Icon>
</Identity> </Identity>
<Obstruction> <Obstruction>
<Static width="19.0" depth="19.0"/> <Static width="19.0" depth="19.0"/>

View File

@ -4,8 +4,9 @@
<Civ>rome</Civ> <Civ>rome</Civ>
<GenericName>Siege Wall</GenericName> <GenericName>Siege Wall</GenericName>
<SpecificName>Mūrus Circummūnītiōnis</SpecificName> <SpecificName>Mūrus Circummūnītiōnis</SpecificName>
<Tooltip>Wall off an area. Build in own, neutral, or enemy territory.</Tooltip>
<VisibleClasses datatype="tokens">SiegeWall</VisibleClasses>
<Icon>structures/siege_wall.png</Icon> <Icon>structures/siege_wall.png</Icon>
<Tooltip>A wooden and turf palisade buildable in enemy and neutral territories.</Tooltip>
<RequiredTechnology>phase_city</RequiredTechnology> <RequiredTechnology>phase_city</RequiredTechnology>
</Identity> </Identity>
<WallSet> <WallSet>

View File

@ -7,7 +7,6 @@
<Identity> <Identity>
<Civ>sele</Civ> <Civ>sele</Civ>
<SpecificName>Klērouchia</SpecificName> <SpecificName>Klērouchia</SpecificName>
<Tooltip>This is the Seleucid expansion building, similar to Civic Centers for other factions. It is weaker and carries a smaller territory influence, but is cheaper and built faster. Train settler-soldiers of various nationalities.</Tooltip>
</Identity> </Identity>
<Obstruction> <Obstruction>
<Static width="29" depth="29"/> <Static width="29" depth="29"/>

View File

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_structure_special"> <Entity parent="template_structure_special">
<BuildRestrictions>
<Category>Council</Category>
</BuildRestrictions>
<Cost> <Cost>
<BuildTime>200</BuildTime> <BuildTime>200</BuildTime>
<Resources> <Resources>
@ -16,10 +19,11 @@
</Health> </Health>
<Identity> <Identity>
<Civ>spart</Civ> <Civ>spart</Civ>
<Classes datatype="tokens">ConquestCritical</Classes>
<GenericName>Spartan Senate</GenericName> <GenericName>Spartan Senate</GenericName>
<SpecificName>Gerousia</SpecificName> <SpecificName>Gerousia</SpecificName>
<Tooltip>Train Heroes.</Tooltip> <Tooltip>Train Heroes.</Tooltip>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">Council</VisibleClasses>
<Icon>structures/tholos.png</Icon> <Icon>structures/tholos.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -20,10 +20,11 @@
</Health> </Health>
<Identity> <Identity>
<Civ>spart</Civ> <Civ>spart</Civ>
<Classes datatype="tokens">ConquestCritical Syssiton</Classes>
<GenericName>Military Mess Hall</GenericName> <GenericName>Military Mess Hall</GenericName>
<SpecificName>Syssition</SpecificName> <SpecificName>Syssition</SpecificName>
<Tooltip>Train Champions and Heroes.</Tooltip> <Tooltip>Train Champions and Heroes.</Tooltip>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">Syssiton</VisibleClasses>
<Icon>structures/syssition.png</Icon> <Icon>structures/syssition.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_wallset"> <Entity parent="template_wallset">
<Identity> <Identity>
<GenericName>Wooden Wall</GenericName> <GenericName>Palisade</GenericName>
<SpecificName>Palisade</SpecificName> <VisibleClasses datatype="tokens">-Wall Palisade</VisibleClasses>
<Classes datatype="tokens">-StoneWall Palisade</Classes>
<Icon>structures/palisade_wall.png</Icon> <Icon>structures/palisade_wall.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology> <RequiredTechnology>phase_village</RequiredTechnology>
</Identity> </Identity>

View File

@ -86,7 +86,7 @@
<Identity> <Identity>
<GenericName>Civic Center</GenericName> <GenericName>Civic Center</GenericName>
<SelectionGroupName>template_structure_civic_civil_centre</SelectionGroupName> <SelectionGroupName>template_structure_civic_civil_centre</SelectionGroupName>
<Tooltip>Build to acquire large tracts of territory. Train citizens.</Tooltip> <Tooltip>Build in own or neutral territory. Acquire large tracts of territory. Territory root. Dropsite for food, wood, stone, and metal. Train Citizens and research technologies. Garrison Soldiers for additional arrows.</Tooltip>
<Classes datatype="tokens">CivCentre</Classes> <Classes datatype="tokens">CivCentre</Classes>
<VisibleClasses datatype="tokens">Defensive CivilCentre</VisibleClasses> <VisibleClasses datatype="tokens">Defensive CivilCentre</VisibleClasses>
<Icon>structures/civic_centre.png</Icon> <Icon>structures/civic_centre.png</Icon>

View File

@ -25,8 +25,8 @@
</Health> </Health>
<Identity> <Identity>
<GenericName>Military Colony</GenericName> <GenericName>Military Colony</GenericName>
<Classes datatype="tokens">Colony</Classes>
<SelectionGroupName>template_structure_civic_civil_centre_military_colony</SelectionGroupName> <SelectionGroupName>template_structure_civic_civil_centre_military_colony</SelectionGroupName>
<VisibleClasses datatype="tokens">Colony</VisibleClasses>
<Icon>structures/military_settlement.png</Icon> <Icon>structures/military_settlement.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology> <RequiredTechnology>phase_town</RequiredTechnology>
</Identity> </Identity>

View File

@ -32,10 +32,10 @@
</Health> </Health>
<Identity> <Identity>
<GenericName>House</GenericName> <GenericName>House</GenericName>
<Tooltip>Increase the population limit.</Tooltip>
<VisibleClasses datatype="tokens">Village House</VisibleClasses>
<SelectionGroupName>template_structure_civic_house</SelectionGroupName> <SelectionGroupName>template_structure_civic_house</SelectionGroupName>
<VisibleClasses datatype="tokens">Village House</VisibleClasses>
<Icon>structures/house.png</Icon> <Icon>structures/house.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology>
</Identity> </Identity>
<Loot> <Loot>
<wood>15</wood> <wood>15</wood>

View File

@ -30,10 +30,10 @@
<Identity> <Identity>
<GenericName>Stoa</GenericName> <GenericName>Stoa</GenericName>
<SelectionGroupName>template_structure_civic_stoa</SelectionGroupName> <SelectionGroupName>template_structure_civic_stoa</SelectionGroupName>
<Tooltip>Recruit special units.</Tooltip> <Tooltip>Train Mercenary Champions.</Tooltip>
<VisibleClasses datatype="tokens">Town Stoa</VisibleClasses>
<Icon>gaia/special_stoa.png</Icon> <Icon>gaia/special_stoa.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology> <RequiredTechnology>phase_town</RequiredTechnology>
<VisibleClasses datatype="tokens">Town</VisibleClasses>
</Identity> </Identity>
<Loot> <Loot>
<stone>20</stone> <stone>20</stone>

View File

@ -32,7 +32,7 @@
<Identity> <Identity>
<GenericName>Temple</GenericName> <GenericName>Temple</GenericName>
<SelectionGroupName>template_structure_civic_temple</SelectionGroupName> <SelectionGroupName>template_structure_civic_temple</SelectionGroupName>
<Tooltip>Train Healers and research healing technologies. Garrison units to heal them at a quick rate.</Tooltip> <Tooltip>Train Healers and research healing technologies.</Tooltip>
<VisibleClasses datatype="tokens">Town Temple</VisibleClasses> <VisibleClasses datatype="tokens">Town Temple</VisibleClasses>
<Icon>structures/temple.png</Icon> <Icon>structures/temple.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology> <RequiredTechnology>phase_town</RequiredTechnology>

View File

@ -17,12 +17,11 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_2x2</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_2x2</SpawnEntityOnDeath>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">Palisade</Classes> <GenericName>Palisade</GenericName>
<GenericName>Wooden Wall</GenericName>
<SelectionGroupName>template_structure_defensive_palisade</SelectionGroupName> <SelectionGroupName>template_structure_defensive_palisade</SelectionGroupName>
<Tooltip>Wall off your town for a stout defense.</Tooltip> <Tooltip>Wall off an area.</Tooltip>
<VisibleClasses datatype="tokens">Palisade</VisibleClasses>
<Icon>gaia/special_palisade.png</Icon> <Icon>gaia/special_palisade.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology>
</Identity> </Identity>
<ProductionQueue disable=""/> <ProductionQueue disable=""/>
<RallyPoint disable=""/> <RallyPoint disable=""/>

View File

@ -49,6 +49,7 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_2x2</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_2x2</SpawnEntityOnDeath>
</Health> </Health>
<Identity> <Identity>
<GenericName>Tower</GenericName>
<VisibleClasses datatype="tokens">Tower</VisibleClasses> <VisibleClasses datatype="tokens">Tower</VisibleClasses>
</Identity> </Identity>
<Sound> <Sound>

View File

@ -51,7 +51,7 @@
<GenericName>Outpost</GenericName> <GenericName>Outpost</GenericName>
<SelectionGroupName>template_structure_defensive_tower_outpost</SelectionGroupName> <SelectionGroupName>template_structure_defensive_tower_outpost</SelectionGroupName>
<Tooltip>Build in own or neutral territory. Slowly converts to Gaia while in neutral territory.</Tooltip> <Tooltip>Build in own or neutral territory. Slowly converts to Gaia while in neutral territory.</Tooltip>
<VisibleClasses datatype="tokens">Village -Tower Outpost</VisibleClasses> <VisibleClasses datatype="tokens">-Tower Outpost</VisibleClasses>
<Icon>structures/outpost.png</Icon> <Icon>structures/outpost.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -37,6 +37,7 @@
<Tooltip>Garrison Infantry for additional arrows. Needs the “Murder Holes” technology to protect its foot.</Tooltip> <Tooltip>Garrison Infantry for additional arrows. Needs the “Murder Holes” technology to protect its foot.</Tooltip>
<VisibleClasses datatype="tokens">Village SentryTower</VisibleClasses> <VisibleClasses datatype="tokens">Village SentryTower</VisibleClasses>
<Icon>structures/sentry_tower.png</Icon> <Icon>structures/sentry_tower.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology>
</Identity> </Identity>
<Loot> <Loot>
<wood>20</wood> <wood>20</wood>

View File

@ -28,7 +28,7 @@
<Max>1000</Max> <Max>1000</Max>
</Health> </Health>
<Identity> <Identity>
<GenericName>Defense Tower</GenericName> <GenericName>Stone Tower</GenericName>
<SelectionGroupName>template_structure_defensive_tower_stone</SelectionGroupName> <SelectionGroupName>template_structure_defensive_tower_stone</SelectionGroupName>
<Tooltip>Garrison Infantry for additional arrows. Needs the “Murder Holes” technology to protect its foot.</Tooltip> <Tooltip>Garrison Infantry for additional arrows. Needs the “Murder Holes” technology to protect its foot.</Tooltip>
<VisibleClasses datatype="tokens">Town StoneTower</VisibleClasses> <VisibleClasses datatype="tokens">Town StoneTower</VisibleClasses>

View File

@ -12,10 +12,10 @@
<Height>8.0</Height> <Height>8.0</Height>
</Footprint> </Footprint>
<Identity> <Identity>
<Classes datatype="tokens">StoneWall</Classes> <GenericName>Wall</GenericName>
<GenericName>Stone Wall</GenericName>
<SelectionGroupName>template_structure_defensive_wall</SelectionGroupName> <SelectionGroupName>template_structure_defensive_wall</SelectionGroupName>
<Tooltip>Wall off your town for a stout defense.</Tooltip> <Tooltip>Wall off your town for a stout defense.</Tooltip>
<VisibleClasses datatype="tokens">Wall</VisibleClasses>
<Icon>structures/wall.png</Icon> <Icon>structures/wall.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology> <RequiredTechnology>phase_town</RequiredTechnology>
</Identity> </Identity>

View File

@ -16,11 +16,11 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_long</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_long</SpawnEntityOnDeath>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">Gates</Classes> <GenericName>Gate</GenericName>
<GenericName>City Gate</GenericName>
<SelectionGroupName>template_structure_defensive_wall_gate</SelectionGroupName> <SelectionGroupName>template_structure_defensive_wall_gate</SelectionGroupName>
<Tooltip>Allow units access through Walls. Can be locked to prevent access.</Tooltip>
<VisibleClasses datatype="tokens">Gate</VisibleClasses>
<Icon>structures/gate.png</Icon> <Icon>structures/gate.png</Icon>
<Tooltip>Allow units access through a city wall. Can be locked to prevent access.</Tooltip>
</Identity> </Identity>
<Loot> <Loot>
<stone>12</stone> <stone>12</stone>

View File

@ -22,8 +22,8 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_long</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_long</SpawnEntityOnDeath>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">LongWall</Classes> <Tooltip>Can be converted into a Gate.</Tooltip>
<Tooltip>Long wall segments can be converted to gates.</Tooltip> <Classes datatype="tokens">WallLong</Classes>
</Identity> </Identity>
<Loot> <Loot>
<stone>7</stone> <stone>7</stone>
@ -32,7 +32,7 @@
<Upgrade> <Upgrade>
<Gate> <Gate>
<Entity>structures/{civ}_wall_gate</Entity> <Entity>structures/{civ}_wall_gate</Entity>
<Tooltip>This will allow you to let units circulate through your fortifications.</Tooltip> <Tooltip>Allow units access through Walls. Can be locked to prevent access.</Tooltip>
<Cost> <Cost>
<stone>60</stone> <stone>60</stone>
</Cost> </Cost>

View File

@ -21,6 +21,9 @@
<Max>2000</Max> <Max>2000</Max>
<SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_medium</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_medium</SpawnEntityOnDeath>
</Health> </Health>
<Identity>
<Classes datatype="tokens">WallMedium</Classes>
</Identity>
<Loot> <Loot>
<stone>5</stone> <stone>5</stone>
</Loot> </Loot>

View File

@ -10,6 +10,9 @@
<Max>1000</Max> <Max>1000</Max>
<SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_short</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_short</SpawnEntityOnDeath>
</Health> </Health>
<Identity>
<Classes datatype="tokens">WallShort</Classes>
</Identity>
<Loot> <Loot>
<stone>3</stone> <stone>3</stone>
</Loot> </Loot>

View File

@ -53,7 +53,7 @@
<Identity> <Identity>
<GenericName>Wall Turret</GenericName> <GenericName>Wall Turret</GenericName>
<SelectionGroupName>template_structure_defensive_wall_tower</SelectionGroupName> <SelectionGroupName>template_structure_defensive_wall_tower</SelectionGroupName>
<Tooltip>Garrison Infantry for additional arrows. Needs the “Murder Holes” technology to protect its foot.</Tooltip> <Tooltip>Garrison Infantry for additional arrows.</Tooltip>
<Classes datatype="tokens">WallTower</Classes> <Classes datatype="tokens">WallTower</Classes>
<Icon>structures/tower.png</Icon> <Icon>structures/tower.png</Icon>
</Identity> </Identity>

View File

@ -26,12 +26,13 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_4x4</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_4x4</SpawnEntityOnDeath>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">DropsiteFood</Classes>
<GenericName>Farmstead</GenericName> <GenericName>Farmstead</GenericName>
<SelectionGroupName>template_structure_economic_farmstead</SelectionGroupName> <SelectionGroupName>template_structure_economic_farmstead</SelectionGroupName>
<Icon>structures/farmstead.png</Icon> <Tooltip>Dropsite for food. Research food gathering technologies.</Tooltip>
<Tooltip>Dropsite for the food resource. Research food gathering improvements.</Tooltip> <Classes datatype="tokens">DropsiteFood</Classes>
<VisibleClasses datatype="tokens">Village Farmstead</VisibleClasses> <VisibleClasses datatype="tokens">Village Farmstead</VisibleClasses>
<Icon>structures/farmstead.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology>
</Identity> </Identity>
<Loot> <Loot>
<wood>20</wood> <wood>20</wood>

View File

@ -24,13 +24,13 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_5x5</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_5x5</SpawnEntityOnDeath>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">BarterMarket</Classes>
<GenericName>Market</GenericName> <GenericName>Market</GenericName>
<SelectionGroupName>template_structure_economic_market</SelectionGroupName> <SelectionGroupName>template_structure_economic_market</SelectionGroupName>
<Tooltip>Barter resources. Establish trade routes. Train Traders and research trade and barter technologies.</Tooltip>
<Classes datatype="tokens">Barter</Classes>
<VisibleClasses datatype="tokens">Trade Town Market</VisibleClasses>
<Icon>structures/market.png</Icon> <Icon>structures/market.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology> <RequiredTechnology>phase_town</RequiredTechnology>
<Tooltip>Create trade units to trade between other markets. Barter resources. Research trading and bartering improvements.</Tooltip>
<VisibleClasses datatype="tokens">Town Market</VisibleClasses>
</Identity> </Identity>
<Loot> <Loot>
<wood>60</wood> <wood>60</wood>

View File

@ -27,12 +27,13 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_3x3</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_3x3</SpawnEntityOnDeath>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">DropsiteWood DropsiteMetal DropsiteStone</Classes>
<GenericName>Storehouse</GenericName> <GenericName>Storehouse</GenericName>
<SelectionGroupName>template_structure_economic_storehouse</SelectionGroupName> <SelectionGroupName>template_structure_economic_storehouse</SelectionGroupName>
<Icon>structures/storehouse.png</Icon> <Tooltip>Dropsite for wood, stone, and metal. Research gathering technologies.</Tooltip>
<Tooltip>Dropsite for wood, stone, and metal resources. Research gathering improvements for these resources.</Tooltip> <Classes datatype="tokens">DropsiteWood DropsiteMetal DropsiteStone</Classes>
<VisibleClasses datatype="tokens">Village Storehouse</VisibleClasses> <VisibleClasses datatype="tokens">Village Storehouse</VisibleClasses>
<Icon>structures/storehouse.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology>
</Identity> </Identity>
<Loot> <Loot>
<wood>20</wood> <wood>20</wood>

View File

@ -25,7 +25,7 @@
<Identity> <Identity>
<GenericName>Barracks</GenericName> <GenericName>Barracks</GenericName>
<SelectionGroupName>template_structure_military_barracks</SelectionGroupName> <SelectionGroupName>template_structure_military_barracks</SelectionGroupName>
<Tooltip>Train citizen-soldiers. Research training improvements.</Tooltip> <Tooltip>Train Citizen Soldiers and research technologies.</Tooltip>
<VisibleClasses datatype="tokens">Village Barracks</VisibleClasses> <VisibleClasses datatype="tokens">Village Barracks</VisibleClasses>
<Icon>structures/barracks.png</Icon> <Icon>structures/barracks.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology> <RequiredTechnology>phase_village</RequiredTechnology>

View File

@ -24,9 +24,8 @@
<Identity> <Identity>
<GenericName>Dock</GenericName> <GenericName>Dock</GenericName>
<SelectionGroupName>template_structure_military_dock</SelectionGroupName> <SelectionGroupName>template_structure_military_dock</SelectionGroupName>
<Tooltip>Build upon a shoreline to construct naval vessels and to open sea trade. Research naval improvements.</Tooltip> <Tooltip>Build upon a shoreline in own, neutral, or allied territory. Dropsite for food, wood, stone, and metal. Establish trade routes. Construct Ships and research Ship technologies.</Tooltip>
<Classes datatype="tokens">Naval NavalMarket</Classes> <VisibleClasses datatype="tokens">Economic Naval Trade Village Dock</VisibleClasses>
<VisibleClasses datatype="tokens">Economic Village Market Dock</VisibleClasses>
<Icon>structures/dock.png</Icon> <Icon>structures/dock.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -17,9 +17,10 @@
<Identity> <Identity>
<GenericName>Corral</GenericName> <GenericName>Corral</GenericName>
<SelectionGroupName>template_structure_resource_corral</SelectionGroupName> <SelectionGroupName>template_structure_resource_corral</SelectionGroupName>
<Tooltip>Raise herd animals for food. Task domestic animals here to gain a trickle of food or other bonus (Not yet implemented).</Tooltip> <Tooltip>Raise Domestic Animals for food.</Tooltip>
<VisibleClasses datatype="tokens">Village Corral</VisibleClasses> <VisibleClasses datatype="tokens">Village Corral</VisibleClasses>
<Icon>structures/corral.png</Icon> <Icon>structures/corral.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology>
</Identity> </Identity>
<Loot> <Loot>
<wood>20</wood> <wood>20</wood>

View File

@ -30,9 +30,7 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_6x6</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_6x6</SpawnEntityOnDeath>
</Health> </Health>
<Identity> <Identity>
<GenericName>Special Building</GenericName> <GenericName>Special Structure</GenericName>
<Tooltip>This is a special building unique to a particular civilization.</Tooltip>
<Classes datatype="tokens">SpecialBuilding</Classes>
<VisibleClasses datatype="tokens">City</VisibleClasses> <VisibleClasses datatype="tokens">City</VisibleClasses>
<RequiredTechnology>phase_city</RequiredTechnology> <RequiredTechnology>phase_city</RequiredTechnology>
</Identity> </Identity>

View File

@ -18,9 +18,9 @@
<Max>2000</Max> <Max>2000</Max>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">Amphitheater</Classes>
<GenericName>Amphitheater</GenericName> <GenericName>Amphitheater</GenericName>
<SelectionGroupName>template_structure_special_amphitheater</SelectionGroupName> <SelectionGroupName>template_structure_special_amphitheater</SelectionGroupName>
<VisibleClasses datatype="tokens">Amphitheater</VisibleClasses>
<Icon>structures/theater.png</Icon> <Icon>structures/theater.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -23,7 +23,7 @@
<Identity> <Identity>
<GenericName>Library</GenericName> <GenericName>Library</GenericName>
<SelectionGroupName>template_structure_special_library</SelectionGroupName> <SelectionGroupName>template_structure_special_library</SelectionGroupName>
<Tooltip>Research special technologies.</Tooltip> <VisibleClasses datatype="tokens">Library</VisibleClasses>
<Icon>structures/library_scroll.png</Icon> <Icon>structures/library_scroll.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -19,6 +19,7 @@
<Identity> <Identity>
<GenericName>Rotary Mill</GenericName> <GenericName>Rotary Mill</GenericName>
<SelectionGroupName>template_structure_special_rotarymill</SelectionGroupName> <SelectionGroupName>template_structure_special_rotarymill</SelectionGroupName>
<VisibleClasses datatype="tokens">RotaryMill</VisibleClasses>
<Icon>structures/rotarymill.png</Icon> <Icon>structures/rotarymill.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -21,9 +21,9 @@
<Max>2000</Max> <Max>2000</Max>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">Theater</Classes>
<GenericName>Theater</GenericName> <GenericName>Theater</GenericName>
<SelectionGroupName>template_structure_special_theater</SelectionGroupName> <SelectionGroupName>template_structure_special_theater</SelectionGroupName>
<VisibleClasses datatype="tokens">Theater</VisibleClasses>
<Icon>structures/theater.png</Icon> <Icon>structures/theater.png</Icon>
</Identity> </Identity>
<Loot> <Loot>

View File

@ -46,10 +46,10 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_6x6</SpawnEntityOnDeath> <SpawnEntityOnDeath>decay|rubble/rubble_stone_6x6</SpawnEntityOnDeath>
</Health> </Health>
<Identity> <Identity>
<Classes datatype="tokens">ConquestCritical</Classes>
<GenericName>Wonder</GenericName> <GenericName>Wonder</GenericName>
<SelectionGroupName>template_structure_wonder</SelectionGroupName> <SelectionGroupName>template_structure_wonder</SelectionGroupName>
<Tooltip>Bring glory to your civilization and add large tracts of land to your empire.</Tooltip> <Tooltip>Bring glory to your civilization and add large tracts of land to your empire.</Tooltip>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">City Wonder</VisibleClasses> <VisibleClasses datatype="tokens">City Wonder</VisibleClasses>
<Icon>structures/wonder.png</Icon> <Icon>structures/wonder.png</Icon>
<RequiredTechnology>phase_city</RequiredTechnology> <RequiredTechnology>phase_city</RequiredTechnology>

View File

@ -10,7 +10,7 @@
<Capture>2.5</Capture> <Capture>2.5</Capture>
<MaxRange>4</MaxRange> <MaxRange>4</MaxRange>
<RepeatTime>1000</RepeatTime> <RepeatTime>1000</RepeatTime>
<RestrictedClasses datatype="tokens">Field Palisade SiegeWall StoneWall</RestrictedClasses> <RestrictedClasses datatype="tokens">Field Palisade Wall</RestrictedClasses>
</Capture> </Capture>
<Slaughter> <Slaughter>
<Damage> <Damage>

View File

@ -5,7 +5,7 @@
<Capture>5</Capture> <Capture>5</Capture>
<MaxRange>4</MaxRange> <MaxRange>4</MaxRange>
<RepeatTime>1000</RepeatTime> <RepeatTime>1000</RepeatTime>
<RestrictedClasses datatype="tokens">Field Palisade SiegeWall StoneWall</RestrictedClasses> <RestrictedClasses datatype="tokens">Field Palisade Wall</RestrictedClasses>
</Capture> </Capture>
</Attack> </Attack>
<Identity> <Identity>

View File

@ -10,7 +10,7 @@
<Capture>10</Capture> <Capture>10</Capture>
<MaxRange>4</MaxRange> <MaxRange>4</MaxRange>
<RepeatTime>1000</RepeatTime> <RepeatTime>1000</RepeatTime>
<RestrictedClasses datatype="tokens">Field Palisade SiegeWall StoneWall</RestrictedClasses> <RestrictedClasses datatype="tokens">Field Palisade Wall</RestrictedClasses>
</Capture> </Capture>
</Attack> </Attack>
<Auras datatype="tokens"> <Auras datatype="tokens">

Some files were not shown because too many files have changed in this diff Show More