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"))
continue;
// 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;
// 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.
@ -1436,15 +1436,15 @@ PETRA.AttackPlan.prototype.update = function(gameState, events)
let targetClassesUnit;
let targetClassesSiege;
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
{
if (this.target.hasClass("Fortress"))
targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Palisade", "StoneWall"], "vetoEntities": veto };
else if (this.target.hasClass("Palisade") || this.target.hasClass("StoneWall"))
targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Palisade", "Wall"], "vetoEntities": veto };
else if (this.target.hasClass("Palisade") || this.target.hasClass("Wall"))
targetClassesUnit = { "attack": ["Unit", "Structure"], "avoid": ["Fortress"], "vetoEntities": veto };
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"))
targetClassesSiege = { "attack": ["Structure"], "avoid": [], "vetoEntities": veto };
@ -1561,14 +1561,14 @@ PETRA.AttackPlan.prototype.update = function(gameState, events)
{
mStruct.sort((structa, structb) => {
let vala = structa.costSum();
if (structa.hasClass("Gates") && ent.canAttackClass("StoneWall"))
if (structa.hasClass("Gate") && ent.canAttackClass("Wall"))
vala += 10000;
else if (structa.hasDefensiveFire())
vala += 1000;
else if (structa.hasClass("ConquestCritical"))
vala += 200;
let valb = structb.costSum();
if (structb.hasClass("Gates") && ent.canAttackClass("StoneWall"))
if (structb.hasClass("Gate") && ent.canAttackClass("Wall"))
valb += 10000;
else if (structb.hasDefensiveFire())
valb += 1000;
@ -1576,7 +1576,7 @@ PETRA.AttackPlan.prototype.update = function(gameState, events)
valb += 200;
return valb - vala;
});
if (mStruct[0].hasClass("Gates"))
if (mStruct[0].hasClass("Gate"))
ent.attack(mStruct[0].id(), PETRA.allowCapture(gameState, ent, mStruct[0]));
else
{
@ -1676,18 +1676,18 @@ PETRA.AttackPlan.prototype.update = function(gameState, events)
{
mStruct.sort((structa, structb) => {
let vala = structa.costSum();
if (structa.hasClass("Gates") && ent.canAttackClass("StoneWall"))
if (structa.hasClass("Gate") && ent.canAttackClass("Wall"))
vala += 10000;
else if (structa.hasClass("ConquestCritical"))
vala += 100;
let valb = structb.costSum();
if (structb.hasClass("Gates") && ent.canAttackClass("StoneWall"))
if (structb.hasClass("Gate") && ent.canAttackClass("Wall"))
valb += 10000;
else if (structb.hasClass("ConquestCritical"))
valb += 100;
return valb - vala;
});
if (mStruct[0].hasClass("Gates"))
if (mStruct[0].hasClass("Gate"))
ent.attack(mStruct[0].id(), false);
else
{
@ -1833,11 +1833,11 @@ PETRA.AttackPlan.prototype.UpdateWalking = function(gameState, events)
if (!this.path[0][0] || !this.path[0][1])
API3.warn("Start: Problem with path " + uneval(this.path));
// 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)
continue;
let enemyClass = ent.hasClass("StoneWall") ? "StoneWall" : "Palisade";
let enemyClass = ent.hasClass("Wall") ? "Wall" : "Palisade";
// there are walls, so check if we can attack
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
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")))
continue;
@ -801,7 +801,7 @@ PETRA.BaseManager.prototype.assignToFoundations = function(gameState, noRepair)
target.getMetadata(PlayerID, "phaseUp") == true)
targetNB = 7;
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;
else if (target.hasClass("House") || target.hasClass("DropsiteWood"))
targetNB = 3;
@ -880,7 +880,7 @@ PETRA.BaseManager.prototype.assignToFoundations = function(gameState, noRepair)
if (gameState.ai.HQ.isNearInvadingArmy(target.position()))
{
if (target.healthLevel() > 0.5 ||
!target.hasClass("CivCentre") && !target.hasClass("StoneWall") &&
!target.hasClass("CivCentre") && !target.hasClass("Wall") &&
(!target.hasClass("Wonder") || !gameState.getVictoryConditions().has("wonder")))
continue;
}

View File

@ -282,7 +282,7 @@ PETRA.HQ.prototype.checkEvents = function(gameState, events)
let ent = gameState.getEntityById(evt.newentity);
if (!ent || ent.owner() != PlayerID)
continue;
if (ent.hasClass("BarterMarket") && this.maxFields)
if (ent.hasClass("Market") && this.maxFields)
this.maxFields = false;
if (ent.getMetadata(PlayerID, "base") === undefined)
continue;
@ -556,7 +556,7 @@ PETRA.HQ.prototype.checkPhaseRequirements = function(gameState, queues)
!queues.militaryBuilding.hasQueuedUnits() &&
!queues.defenseBuilding.hasQueuedUnits())
{
if (!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities() &&
if (!gameState.getOwnEntitiesByClass("Market", true).hasEntities() &&
this.canBuild(gameState, "structures/{civ}_market"))
{
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)
{
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)
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
return [-1, -1, -1, 0];
@ -1306,7 +1306,7 @@ PETRA.HQ.prototype.findMarketLocation = function(gameState, template)
let bestDistSq;
let bestGainMult;
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 cellSize = this.territoryMap.cellSize;
@ -1335,7 +1335,7 @@ PETRA.HQ.prototype.findMarketLocation = function(gameState, template)
let gainMultiplier;
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))
continue;
@ -1377,13 +1377,13 @@ PETRA.HQ.prototype.findMarketLocation = function(gameState, template)
let expectedGain = Math.round(bestGainMult * TradeGain(bestDistSq, gameState.sharedScript.mapSize));
if (this.Config.debug > 1)
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;
if (expectedGain < this.tradeManager.minimalGain)
{
if (template.hasClass("BarterMarket") &&
!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities())
idx = -1; // needed by queueplanBuilding manager to keep that market
if (template.hasClass("Market") &&
!gameState.getOwnEntitiesByClass("Market", true).hasEntities())
idx = -1; // Needed by queueplanBuilding manager to keep that Market.
else
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
if (queues.economicBuilding.hasQueuedUnits() ||
gameState.getOwnEntitiesByClass("Temple", true).hasEntities() ||
!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities())
!gameState.getOwnEntitiesByClass("Market", true).hasEntities())
return;
// Try to build a temple earlier if in regicide to recruit healer guards
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)
{
if (gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities() ||
if (gameState.getOwnEntitiesByClass("Market", true).hasEntities() ||
!this.canBuild(gameState, "structures/{civ}_market"))
return;
if (queues.economicBuilding.hasQueuedUnitsWithClass("BarterMarket"))
if (queues.economicBuilding.hasQueuedUnitsWithClass("Market"))
{
if (!queues.economicBuilding.paused)
{
@ -1902,7 +1902,7 @@ PETRA.HQ.prototype.buildBlacksmith = function(gameState, queues)
queues.militaryBuilding.hasQueuedUnits() || gameState.getOwnEntitiesByClass("Blacksmith", true).length)
return;
// Build a market before the blacksmith.
if (!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities())
if (!gameState.getOwnEntitiesByClass("Market", true).hasEntities())
return;
if (this.canBuild(gameState, "structures/{civ}_blacksmith"))
@ -2670,7 +2670,7 @@ PETRA.HQ.prototype.update = function(gameState, queues, events)
Engine.ProfileStart("Headquarters update");
this.turnCache = {};
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
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 (queues.dock.countQueuedUnitsWithClass("NavalMarket") === 0 &&
!gameState.getOwnStructures().filter(API3.Filters.and(API3.Filters.byClass("NavalMarket"), API3.Filters.isFoundation())).hasEntities() &&
if (queues.dock.countQueuedUnitsWithClass("Dock") === 0 &&
!gameState.getOwnStructures().filter(API3.Filters.and(API3.Filters.byClass("Dock"), API3.Filters.isFoundation())).hasEntities() &&
gameState.ai.HQ.canBuild(gameState, "structures/{civ}_dock"))
{
let dockStarted = false;
@ -745,8 +745,8 @@ PETRA.NavalManager.prototype.buildNavalStructures = function(gameState, queues)
if (!this.docks.filter(API3.Filters.byClass("Dock")).hasEntities() ||
this.docks.filter(API3.Filters.byClass("Shipyard")).hasEntities())
return;
// Use in priority resources to build a market
if (!gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities() &&
// Use in priority resources to build a Market.
if (!gameState.getOwnEntitiesByClass("Market", true).hasEntities() &&
gameState.ai.HQ.canBuild(gameState, "structures/{civ}_market"))
return;
let template;

View File

@ -54,10 +54,10 @@ PETRA.ConstructionPlan.prototype.start = function(gameState)
return;
}
if (this.metadata && this.metadata.expectedGain && (!this.template.hasClass("BarterMarket") ||
gameState.getOwnEntitiesByClass("BarterMarket", true).hasEntities()))
if (this.metadata && this.metadata.expectedGain && (!this.template.hasClass("Market") ||
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;
tradeManager.checkRoutes(gameState);
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())
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);
if (pos && pos[2] > 0)
@ -218,29 +218,29 @@ PETRA.ConstructionPlan.prototype.findGoodPosition = function(gameState)
if (struct.resourceDropsiteTypes() && struct.resourceDropsiteTypes().indexOf("food") != -1)
{
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
placement.addInfluence(x, z, 80/cellSize, -20);
placement.addInfluence(x, z, 80 / cellSize, -20);
}
else if (template.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;
}
else if (!ent.hasClass("StoneWall") || ent.hasClass("Gates"))
placement.addInfluence(x, z, 60/cellSize, -40); // and further away from other stuffs
else if (!ent.hasClass("Wall") || ent.hasClass("Gate"))
placement.addInfluence(x, z, 60 / cellSize, -40); // and further away from other stuffs
}
else if (template.hasClass("Farmstead") && (!ent.hasClass("Field") && !ent.hasClass("Corral") &&
(!ent.hasClass("StoneWall") || ent.hasClass("Gates"))))
placement.addInfluence(x, z, 100/cellSize, -25); // move farmsteads away to make room (StoneWall test needed for iber)
(!ent.hasClass("Wall") || ent.hasClass("Gate"))))
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"))
placement.addInfluence(x, z, 120/cellSize, -50);
placement.addInfluence(x, z, 120 / cellSize, -50);
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"))
placement.addInfluence(x, z, 60/cellSize, 40);
placement.addInfluence(x, z, 60 / cellSize, 40);
});
}
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
// and if our first market, put it on border if possible to maximize distance with next market
let favorBorder = template.hasClass("BarterMarket");
// and if our first market, put it on border if possible to maximize distance with next Market.
let favorBorder = template.hasClass("Market");
let disfavorBorder = gameState.currentPhase() > 1 && !template.hasDefensiveFire();
let favoredBase = this.metadata && (this.metadata.favoredBase ||
(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"))
radius = Math.floor((template.obstructionRadius().max + 8) / obstructions.cellSize);
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);
else
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;
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);
continue;

View File

@ -91,7 +91,7 @@ PETRA.TradeManager.prototype.trainMoreTraders = function(gameState, queues)
else
{
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");
else
metadata.base = this.tradeRoute.target.getMetadata(PlayerID, "base");
@ -214,7 +214,7 @@ PETRA.TradeManager.prototype.setTradingGoods = 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)
return false;
let resBarterCodes = Resources.GetBarterableCodes();
@ -335,7 +335,7 @@ PETRA.TradeManager.prototype.checkEvents = function(gameState, events)
for (let evt of events.EntityRenamed)
{
let ent = gameState.getEntityById(evt.newentity);
if (!ent || !ent.hasClass("Market"))
if (!ent || !ent.hasClass("Trade"))
continue;
for (let trader of this.traders.values())
{
@ -358,7 +358,7 @@ PETRA.TradeManager.prototype.checkEvents = function(gameState, events)
if (!evt.entityObj)
continue;
let ent = evt.entityObj;
if (!ent || !ent.hasClass("Market") || !gameState.isPlayerAlly(ent.owner()))
if (!ent || !ent.hasClass("Trade") || !gameState.isPlayerAlly(ent.owner()))
continue;
this.activateProspection(gameState);
return true;
@ -368,7 +368,7 @@ PETRA.TradeManager.prototype.checkEvents = function(gameState, events)
for (let evt of events.Create)
{
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()))
continue;
this.activateProspection(gameState);
@ -382,7 +382,7 @@ PETRA.TradeManager.prototype.checkEvents = function(gameState, events)
if (!gameState.isPlayerAlly(evt.from) && !gameState.isPlayerAlly(evt.to))
continue;
let ent = gameState.getEntityById(evt.entity);
if (!ent || ent.foundationProgress() !== undefined || !ent.hasClass("Market"))
if (!ent || ent.foundationProgress() !== undefined || !ent.hasClass("Trade"))
continue;
this.activateProspection(gameState);
return true;
@ -419,8 +419,8 @@ PETRA.TradeManager.prototype.checkRoutes = function(gameState, accessIndex)
return false;
}
let market1 = gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Market"), gameState.getOwnStructures());
let market2 = gameState.updatingCollection("diplo-ExclusiveAllyMarkets", API3.Filters.byClass("Market"), gameState.getExclusiveAllyEntities());
let market1 = gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Trade"), gameState.getOwnStructures());
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
{
this.tradeRoute = undefined;
@ -444,7 +444,7 @@ PETRA.TradeManager.prototype.checkRoutes = function(gameState, accessIndex)
if (!m1.position())
continue;
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())
{
if (onlyOurs && m1.id() >= m2.id())
@ -452,7 +452,7 @@ PETRA.TradeManager.prototype.checkRoutes = function(gameState, accessIndex)
if (!m2.position())
continue;
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 sea = sea1 && sea1 == sea2 ? sea1 : undefined;
if (!land && !sea)
@ -586,12 +586,12 @@ PETRA.TradeManager.prototype.checkTrader = function(gameState, ent)
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;
if (!gameState.ai.HQ.canBuild(gameState, "structures/{civ}_market"))
return;
if (!gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Market"), gameState.getOwnStructures()).hasEntities() &&
!gameState.updatingCollection("diplo-ExclusiveAllyMarkets", API3.Filters.byClass("Market"), gameState.getExclusiveAllyEntities()).hasEntities())
if (!gameState.updatingCollection("OwnMarkets", API3.Filters.byClass("Trade"), gameState.getOwnStructures()).hasEntities() &&
!gameState.updatingCollection("diplo-ExclusiveAllyMarkets", API3.Filters.byClass("Trade"), gameState.getExclusiveAllyEntities()).hasEntities())
return;
let template = gameState.getTemplate(gameState.applyCiv("structures/{civ}_market"));
if (!template)
@ -600,7 +600,7 @@ PETRA.TradeManager.prototype.prospectForNewMarket = function(gameState, queues)
let marketPos = gameState.ai.HQ.findMarketLocation(gameState, template);
if (!marketPos || marketPos[3] == 0) // marketPos[3] is the expected gain
{ // 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"));
else
this.routeProspection = false;
@ -621,7 +621,7 @@ PETRA.TradeManager.prototype.prospectForNewMarket = function(gameState, queues)
}
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");
if (!this.tradeRoute)
plan.queueToReset = "economicBuilding";

View File

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

View File

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

View File

@ -57,7 +57,7 @@ Identity.prototype.Schema =
"</element>" +
"</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'>" +
"<value>tokens</value>" +
"</attribute>" +
@ -65,7 +65,7 @@ Identity.prototype.Schema =
"</element>" +
"</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'>" +
"<value>tokens</value>" +
"</attribute>" +

View File

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

View File

@ -71,7 +71,7 @@
{
"Name": "Trademasters",
"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":

View File

@ -7,11 +7,11 @@
"requirementsTooltip": "Unlocked in Town Phase.",
"icon": "stone_blocks_brown.png",
"researchTime": 40,
"tooltip": "City walls -20% build time, but -1 crush armor level.",
"tooltip": "Walls −20% build time, but −1 crush armor.",
"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"
}

View File

@ -6,9 +6,9 @@
"tooltip": "Carthaginian Walls +100% build time, +100% stone cost, and +200% health.",
"requirements": { "civ": "cart" },
"modifications": [
{ "value": "Health/Max", "multiply": 3 },
{ "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",
"tooltip": "Mauryan City Walls −20% build time and −20% health.",
"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.",
"icon": "stone_blocks.png",
"researchTime": 40,
"tooltip": "City walls +2 crush armor levels, but +10% build time.",
"tooltip": "Walls +2 crush armor, but +10% build time.",
"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"
}

View File

@ -2,14 +2,19 @@
"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.",
"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.",
"icon": "crenelations.png",
"researchTime": 60,
"tooltip": "Build stone walls in neutral territory.",
"tooltip": "Build Walls in own or neutral territory.",
"modifications": [
{ "value": "BuildRestrictions/Territory", "replace": ["own", "neutral"] }
],
"affects": ["StoneWall"],
"affects": ["Wall"],
"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",
"bottom": "health_walls_geometric_masonry",
"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.",
"cost": { "food": 0, "wood": 0, "stone": 750, "metal": 750 },
"requirements": { "entity": { "class": "Town", "number": 4 } },
"requirementsTooltip": "Requires 4 new Town Phase structures (except Walls and Civic Centers).",
"requirements": {
"entity": {
"class": "Town",
"number": 4
}
},
"requirementsTooltip": "Requires 4 Town Structures.",
"supersedes": "phase_town_athen",
"replaces": ["phase_city"],
"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.",
"cost": { "food": 0, "wood": 0, "stone": 750, "metal": 750 },
"requirements": { "entity": { "class": "Town", "number": 4 } },
"requirementsTooltip": "Requires 4 new Town Phase structures (except Walls and Civic Centers).",
"requirements": {
"entity": {
"class": "Town",
"number": 4
}
},
"requirementsTooltip": "Requires 4 Town Structures.",
"supersedes": "phase_town_generic",
"replaces": ["phase_city"],
"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.",
"cost": { "food": 500, "wood": 500, "stone": 0, "metal": 0 },
"requirements": { "entity": { "class": "Village", "number": 5 } },
"requirementsTooltip": "Requires 5 Village Phase structures (except Palisades and Farm Fields).",
"requirements": {
"entity": {
"class": "Village",
"number": 5
}
},
"requirementsTooltip": "Requires 5 Village Structures.",
"supersedes": "phase_village",
"replaces": ["phase_town"],
"icon": "town_phase.png",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -9,12 +9,12 @@
<Height>8.0</Height>
</Footprint>
<Identity>
<GenericName>Island Settlement</GenericName>
<Civ>brit</Civ>
<Classes datatype="tokens">Naval</Classes>
<Icon>structures/crannog.png</Icon>
<Tooltip>Increase population limit and defend waterways.</Tooltip>
<GenericName>Island Settlement</GenericName>
<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>
</Identity>
<Obstruction>

View File

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

View File

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

View File

@ -12,7 +12,7 @@
<Identity>
<Civ>cart</Civ>
<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>
<Loot>
<stone>80</stone>

View File

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

View File

@ -31,9 +31,9 @@
<Civ>iber</Civ>
<GenericName>Revered Monument</GenericName>
<SpecificName>Gur Oroigarri</SpecificName>
<Classes datatype="tokens">Monument</Classes>
<Tooltip>Territory root.</Tooltip>
<VisibleClasses datatype="tokens">Monument</VisibleClasses>
<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>
<Loot>
<stone>20</stone>

View File

@ -7,8 +7,8 @@
<Civ>kush</Civ>
<GenericName>Temple of Apedemak</GenericName>
<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>
<Classes datatype="tokens">TempleOfApedemak</Classes>
<Tooltip>Train Healers and Apedamak Champions and research healing technologies.</Tooltip>
<VisibleClasses datatype="tokens">TempleOfApedemak</VisibleClasses>
</Identity>
<Obstruction>
<Static width="18" depth="30.0"/>

View File

@ -27,10 +27,9 @@
<Civ>kush</Civ>
<GenericName>Grand Temple of Amun</GenericName>
<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>
<Classes datatype="tokens">TempleOfAmun</Classes>
<VisibleClasses datatype="tokens">City -Town</VisibleClasses>
<RequiredTechnology>phase_city</RequiredTechnology>
</Identity>
<Loot>

View File

@ -14,10 +14,11 @@
</Footprint>
<Identity>
<Civ>maur</Civ>
<Classes datatype="tokens">ConquestCritical</Classes>
<SpecificName>Harmya</SpecificName>
<Icon>gaia/special_stoa.png</Icon>
<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>
<Loot>
<stone>40</stone>

View File

@ -31,9 +31,9 @@
<Civ>maur</Civ>
<GenericName>Edict Pillar of Ashoka</GenericName>
<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>
<Tooltip>The famous pillar of Ashoka. Increases the walk speed of traders. Buildings in the territory of the monument do not decay.</Tooltip>
</Identity>
<Loot>
<stone>20</stone>

View File

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

View File

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

View File

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

View File

@ -17,11 +17,11 @@
<Max op="mul">0.64</Max>
</Health>
<Identity>
<Classes datatype="tokens">Gates</Classes>
<SpecificName>Palisade Gate</SpecificName>
<GenericName>Palisade Gate</GenericName>
<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>
<Tooltip>Allow units access through a palisade wall. Can be locked to prevent access.</Tooltip>
</Identity>
<Loot>
<wood>4</wood>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_structure_special">
<BuildRestrictions>
<Category>Apadana</Category>
<Category>Palace</Category>
</BuildRestrictions>
<Cost>
<BuildTime>300</BuildTime>
@ -26,9 +26,10 @@
<Civ>pers</Civ>
<GenericName>Throne Hall</GenericName>
<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>
<Tooltip>"Satrapy Tribute": Gain a trickle of food, wood, stone, and metal resources. Train Champions and Heroes.</Tooltip>
</Identity>
<Loot>
<stone>60</stone>

View File

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

View File

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

View File

@ -23,7 +23,8 @@
<Civ>pers</Civ>
<GenericName>Palace</GenericName>
<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>
</Identity>
<Loot>

View File

@ -23,9 +23,8 @@
<Civ>ptol</Civ>
<GenericName>Lighthouse</GenericName>
<SpecificName>Pharos</SpecificName>
<Classes datatype="tokens">Lighthouse</Classes>
<VisibleClasses datatype="tokens">-City Town</VisibleClasses>
<Tooltip>Build along the shore to reveal the shorelines over the entire map. Very large vision range: 180 meters.</Tooltip>
<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 Lighthouse</VisibleClasses>
<Icon>structures/lighthouse.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology>
</Identity>

View File

@ -7,7 +7,6 @@
<Identity>
<Civ>ptol</Civ>
<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>
<Obstruction>
<Static width="32" depth="31"/>

View File

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

View File

@ -79,9 +79,10 @@
<Civ>rome</Civ>
<GenericName>Army Camp</GenericName>
<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>
<Classes datatype="tokens">ConquestCritical</Classes>
<VisibleClasses datatype="tokens">ArmyCamp</VisibleClasses>
<Icon>structures/roman_camp.png</Icon>
</Identity>
<Loot>
<xp>100</xp>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,8 +4,9 @@
<Civ>rome</Civ>
<GenericName>Siege Wall</GenericName>
<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>
<Tooltip>A wooden and turf palisade buildable in enemy and neutral territories.</Tooltip>
<RequiredTechnology>phase_city</RequiredTechnology>
</Identity>
<WallSet>

View File

@ -7,7 +7,6 @@
<Identity>
<Civ>sele</Civ>
<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>
<Obstruction>
<Static width="29" depth="29"/>

View File

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

View File

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

View File

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

View File

@ -86,7 +86,7 @@
<Identity>
<GenericName>Civic Center</GenericName>
<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>
<VisibleClasses datatype="tokens">Defensive CivilCentre</VisibleClasses>
<Icon>structures/civic_centre.png</Icon>

View File

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

View File

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

View File

@ -30,10 +30,10 @@
<Identity>
<GenericName>Stoa</GenericName>
<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>
<RequiredTechnology>phase_town</RequiredTechnology>
<VisibleClasses datatype="tokens">Town</VisibleClasses>
</Identity>
<Loot>
<stone>20</stone>

View File

@ -32,7 +32,7 @@
<Identity>
<GenericName>Temple</GenericName>
<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>
<Icon>structures/temple.png</Icon>
<RequiredTechnology>phase_town</RequiredTechnology>

View File

@ -17,12 +17,11 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_2x2</SpawnEntityOnDeath>
</Health>
<Identity>
<Classes datatype="tokens">Palisade</Classes>
<GenericName>Wooden Wall</GenericName>
<GenericName>Palisade</GenericName>
<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>
<RequiredTechnology>phase_village</RequiredTechnology>
</Identity>
<ProductionQueue disable=""/>
<RallyPoint disable=""/>

View File

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

View File

@ -51,7 +51,7 @@
<GenericName>Outpost</GenericName>
<SelectionGroupName>template_structure_defensive_tower_outpost</SelectionGroupName>
<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>
</Identity>
<Loot>

View File

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

View File

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

View File

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

View File

@ -16,11 +16,11 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_long</SpawnEntityOnDeath>
</Health>
<Identity>
<Classes datatype="tokens">Gates</Classes>
<GenericName>City Gate</GenericName>
<GenericName>Gate</GenericName>
<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>
<Tooltip>Allow units access through a city wall. Can be locked to prevent access.</Tooltip>
</Identity>
<Loot>
<stone>12</stone>

View File

@ -22,8 +22,8 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_wall_long</SpawnEntityOnDeath>
</Health>
<Identity>
<Classes datatype="tokens">LongWall</Classes>
<Tooltip>Long wall segments can be converted to gates.</Tooltip>
<Tooltip>Can be converted into a Gate.</Tooltip>
<Classes datatype="tokens">WallLong</Classes>
</Identity>
<Loot>
<stone>7</stone>
@ -32,7 +32,7 @@
<Upgrade>
<Gate>
<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>
<stone>60</stone>
</Cost>

View File

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

View File

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

View File

@ -53,7 +53,7 @@
<Identity>
<GenericName>Wall Turret</GenericName>
<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>
<Icon>structures/tower.png</Icon>
</Identity>

View File

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

View File

@ -24,13 +24,13 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_5x5</SpawnEntityOnDeath>
</Health>
<Identity>
<Classes datatype="tokens">BarterMarket</Classes>
<GenericName>Market</GenericName>
<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>
<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>
<Loot>
<wood>60</wood>

View File

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

View File

@ -25,7 +25,7 @@
<Identity>
<GenericName>Barracks</GenericName>
<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>
<Icon>structures/barracks.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology>

View File

@ -24,9 +24,8 @@
<Identity>
<GenericName>Dock</GenericName>
<SelectionGroupName>template_structure_military_dock</SelectionGroupName>
<Tooltip>Build upon a shoreline to construct naval vessels and to open sea trade. Research naval improvements.</Tooltip>
<Classes datatype="tokens">Naval NavalMarket</Classes>
<VisibleClasses datatype="tokens">Economic Village Market Dock</VisibleClasses>
<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>
<VisibleClasses datatype="tokens">Economic Naval Trade Village Dock</VisibleClasses>
<Icon>structures/dock.png</Icon>
</Identity>
<Loot>

View File

@ -17,9 +17,10 @@
<Identity>
<GenericName>Corral</GenericName>
<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>
<Icon>structures/corral.png</Icon>
<RequiredTechnology>phase_village</RequiredTechnology>
</Identity>
<Loot>
<wood>20</wood>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -46,10 +46,10 @@
<SpawnEntityOnDeath>decay|rubble/rubble_stone_6x6</SpawnEntityOnDeath>
</Health>
<Identity>
<Classes datatype="tokens">ConquestCritical</Classes>
<GenericName>Wonder</GenericName>
<SelectionGroupName>template_structure_wonder</SelectionGroupName>
<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>
<Icon>structures/wonder.png</Icon>
<RequiredTechnology>phase_city</RequiredTechnology>

View File

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

View File

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

View File

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

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