1
0
forked from 0ad/0ad

Only have capturing entities contribute to the capture regenrate.

Only entities which have capture attack themselves will contribute to
the regen-rate of a structure.
The `garrisonRegenRate` is now a multiplier how much each unit
contributes their strength.

Quite some gameplay change, but we can experiment with this.

Differential revision: https://code.wildfiregames.com/D4679
Comments by: @chrstgtr, @marder, @wraitii
This was SVN commit r27142.
This commit is contained in:
Freagarach 2022-10-10 05:36:27 +00:00
parent a315f90980
commit 856e876148
18 changed files with 252 additions and 219 deletions

View File

@ -345,6 +345,8 @@ Attack.prototype.GetFullAttackRange = function()
Attack.prototype.GetAttackEffectsData = function(type, splash)
{
let template = this.template[type];
if (!template)
return undefined;
if (splash)
template = template.Splash;
return AttackHelper.GetAttackEffectsData("Attack/" + type + (splash ? "/Splash" : ""), template, this.entity);

View File

@ -7,7 +7,7 @@ Capturable.prototype.Schema =
"<element name='RegenRate' a:help='Number of capture points that are regenerated per second in favour of the owner.'>" +
"<ref name='nonNegativeDecimal'/>" +
"</element>" +
"<element name='GarrisonRegenRate' a:help='Number of capture points that are regenerated per second and per garrisoned unit in favour of the owner.'>" +
"<element name='GarrisonRegenRate' a:help='Factor how much each garrisoned entity will add capture points to the regeneration per second in favour of the owner.'>" +
"<ref name='nonNegativeDecimal'/>" +
"</element>";
@ -182,11 +182,22 @@ Capturable.prototype.RegisterCapturePointsChanged = function()
Capturable.prototype.GetRegenRate = function()
{
let cmpGarrisonHolder = Engine.QueryInterface(this.entity, IID_GarrisonHolder);
const cmpGarrisonHolder = Engine.QueryInterface(this.entity, IID_GarrisonHolder);
if (!cmpGarrisonHolder)
return this.regenRate;
return this.regenRate + this.GetGarrisonRegenRate() * cmpGarrisonHolder.GetEntities().length;
let total = this.regenRate;
const garrisonRegenRate = this.GetGarrisonRegenRate();
for (const entity of cmpGarrisonHolder.GetEntities())
{
const captureStrength = Engine.QueryInterface(entity, IID_Attack)?.GetAttackEffectsData("Capture")?.Capture;
if (!captureStrength)
continue;
total += captureStrength * garrisonRegenRate;
}
return total;
};
Capturable.prototype.TimerTick = function()

View File

@ -14,13 +14,18 @@ var testData = {
"playerID": 1,
"regenRate": 2,
"garrisonedEntities": [30, 31, 32, 33],
"garrisonRegenRate": 5,
"garrisonRegenRate": 2,
"decay": false,
"decayRate": 30,
"maxCapturePoints": 3000,
"neighbours": [20, 0, 20, 10]
};
const testCaptureAttacks = {
"30": 1.5,
"32": 2.0
};
function testCapturable(testData, test_function)
{
ResetState();
@ -81,7 +86,20 @@ function testCapturable(testData, test_function)
"GetConnectedNeighbours": () => testData.neighbours
});
TS_ASSERT_EQUALS(cmpCapturable.GetRegenRate(), testData.regenRate + testData.garrisonRegenRate * testData.garrisonedEntities.length);
let regenRate = testData.regenRate;
for (const entity of testData.garrisonedEntities)
{
if (testCaptureAttacks[entity] === undefined)
continue;
AddMock(entity, IID_Attack, {
"GetAttackEffectsData": (type) => {
return type === "Capture" ? { "Capture": testCaptureAttacks[entity] } : undefined;
},
});
regenRate += testCaptureAttacks[entity] * testData.garrisonRegenRate;
}
TS_ASSERT_EQUALS(cmpCapturable.GetRegenRate(), regenRate);
test_function(cmpCapturable);
Engine.PostMessage = (ent, iid, message) => {};
}
@ -142,13 +160,13 @@ function testRegen(testData, capturePointsIn, capturePointsOut, regenerating)
});
}
// With our testData, the total regen rate is 22. That should be taken from the ennemies
testRegen(testData, [12, 2950, 2, 36], [1, 2972, 2, 25], true);
// With our testData, the total regen rate is 9. That should be taken from the enemies
testRegen(testData, [12, 2950, 2, 36], [7.5, 2959, 2, 31.5], true);
testRegen(testData, [0, 2994, 2, 4], [0, 2998, 2, 0], true);
testRegen(testData, [0, 2998, 2, 0], [0, 2998, 2, 0], false);
// If the regeneration rate becomes negative, capture points are given in favour of gaia
testData.regenRate = -32;
testData.regenRate = -19;
// With our testData, the total regen rate is -12. That should be taken from all players to gaia
testRegen(testData, [100, 2800, 50, 50], [112, 2796, 46, 46], true);
testData.regenRate = 2;
@ -167,6 +185,8 @@ function testDecay(testData, capturePointsIn, capturePointsOut)
});
}
testData.decay = true;
testData.regenRate = 8;
testData.garrisonRegenRate = 4;
// With our testData, the decay rate is 30, that should be given to all neighbours with weights [20/50, 0, 20/50, 10/50], then it regens.
testDecay(testData, [2900, 35, 10, 55], [2901, 27, 22, 50]);
testData.decay = false;

View File

@ -2,8 +2,8 @@
"type": "garrison",
"affects": ["Structure"],
"modifications": [
{ "value": "Capturable/GarrisonRegenRate", "add": 2 }
{ "value": "Capturable/GarrisonRegenRate", "add": 1 }
],
"auraName": "Inspired Defense",
"auraDescription": "When garrisoned, the Structure has +2 capture points garrison regeneration rate."
"auraDescription": "When garrisoned, the Structure has +1 capture points garrison regeneration rate."
}

View File

@ -19,9 +19,9 @@
"replaces": ["phase_city"],
"icon": "city_phase.png",
"researchTime": 60,
"tooltip": "Advance to City Phase, which unlocks more entities and technologies. Civic Centers +50% territory influence radius. Structures +9 capture points regeneration rate per garrisoned unit. Workers +10% metal gather rate.",
"tooltip": "Advance to City Phase, which unlocks more entities and technologies. Civic Centers +50% territory influence radius. Structures +1 capture points regeneration rate for garrisoned units. Workers +10% metal gather rate.",
"modifications": [
{ "value": "Capturable/GarrisonRegenRate", "add": 9, "affects": "Structure" },
{ "value": "Capturable/GarrisonRegenRate", "add": 1, "affects": "Structure" },
{ "value": "ResourceGatherer/Rates/metal.ore", "multiply": 1.1, "affects": "Worker" },
{ "value": "TerritoryInfluence/Radius", "multiply": 1.5, "affects": "CivCentre" }
],

View File

@ -23,9 +23,9 @@
"replaces": ["phase_city"],
"icon": "city_phase.png",
"researchTime": 60,
"tooltip": "Advance to City Phase, which unlocks more entities and technologies. Civic Centers +50% territory influence radius. Structures +9 capture points regeneration rate per garrisoned unit.",
"tooltip": "Advance to City Phase, which unlocks more entities and technologies. Civic Centers +50% territory influence radius. Structures +1 capture points regeneration rate for garrisoned units.",
"modifications": [
{ "value": "Capturable/GarrisonRegenRate", "add": 9, "affects": "Structure" },
{ "value": "Capturable/GarrisonRegenRate", "add": 1, "affects": "Structure" },
{ "value": "TerritoryInfluence/Radius", "multiply": 1.5, "affects": "CivCentre" }
],
"soundComplete": "interface/alarm/alarm_phase.xml"

View File

@ -16,9 +16,9 @@
"replaces": ["phase_city"],
"icon": "city_phase.png",
"researchTime": 60,
"tooltip": "Advance to City Phase, which unlocks more entities and technologies. Civic Centers +50% territory influence radius. Structures +9 capture points regeneration rate per garrisoned unit. Stable −10% batch training time.",
"tooltip": "Advance to City Phase, which unlocks more entities and technologies. Civic Centers +50% territory influence radius. Structures +1 capture points regeneration rate for garrisoned units. Stable −10% batch training time.",
"modifications": [
{ "value": "Capturable/GarrisonRegenRate", "add": 9, "affects": "Structure" },
{ "value": "Capturable/GarrisonRegenRate", "add": 1, "affects": "Structure" },
{ "value": "Trainer/BatchTimeModifier", "add": -0.1, "affects": "Stable" },
{ "value": "TerritoryInfluence/Radius", "multiply": 1.5, "affects": "CivCentre" }
],

View File

@ -19,9 +19,9 @@
"replaces": ["phase_town"],
"icon": "town_phase.png",
"researchTime": 30,
"tooltip": "Advance to Town Phase, which unlocks more entities and technologies. Civic Centers +30% territory influence radius. Structures +7 capture points regeneration rate per garrisoned unit. Workers +10% metal gather rate.",
"tooltip": "Advance to Town Phase, which unlocks more entities and technologies. Civic Centers +30% territory influence radius. Structures +0.5 capture points regeneration rate for garrisoned units. Workers +10% metal gather rate.",
"modifications": [
{ "value": "Capturable/GarrisonRegenRate", "add": 7, "affects": "Structure" },
{ "value": "Capturable/GarrisonRegenRate", "add": 0.5, "affects": "Structure" },
{ "value": "ResourceGatherer/Rates/metal.ore", "multiply": 1.1, "affects": "Worker" },
{ "value": "TerritoryInfluence/Radius", "multiply": 1.3, "affects": "CivCentre" }
],

View File

@ -23,9 +23,9 @@
"replaces": ["phase_town"],
"icon": "town_phase.png",
"researchTime": 30,
"tooltip": "Advance to Town Phase, which unlocks more entities and technologies. Civic Centers +30% territory influence radius. Structures +7 capture points regeneration rate per garrisoned unit.",
"tooltip": "Advance to Town Phase, which unlocks more entities and technologies. Civic Centers +30% territory influence radius. Structures +0.5 capture points regeneration rate for garrisoned units.",
"modifications": [
{ "value": "Capturable/GarrisonRegenRate", "add": 7, "affects": "Structure" },
{ "value": "Capturable/GarrisonRegenRate", "add": 0.5, "affects": "Structure" },
{ "value": "TerritoryInfluence/Radius", "multiply": 1.3, "affects": "CivCentre" }
],
"soundComplete": "interface/alarm/alarm_phase.xml"

View File

@ -16,9 +16,9 @@
"replaces": ["phase_town"],
"icon": "town_phase.png",
"researchTime": 30,
"tooltip": "Advance to Town Phase, which unlocks more entities and technologies. Civic Centers +30% territory influence radius. Structures +7 capture points regeneration rate per garrisoned unit. Stable −10% batch training time.",
"tooltip": "Advance to Town Phase, which unlocks more entities and technologies. Civic Centers +30% territory influence radius. Structures +0.5 capture points regeneration rate for garrisoned units. Stable −10% batch training time.",
"modifications": [
{ "value": "Capturable/GarrisonRegenRate", "add": 7, "affects": "Structure" },
{ "value": "Capturable/GarrisonRegenRate", "add": 0.5, "affects": "Structure" },
{ "value": "Trainer/BatchTimeModifier", "add": -0.1, "affects": "Stable" },
{ "value": "TerritoryInfluence/Radius", "multiply": 1.3, "affects": "CivCentre" }
],

View File

@ -10,7 +10,7 @@
</BuildRestrictions>
<Capturable>
<CapturePoints op="mul">4</CapturePoints>
<GarrisonRegenRate>10</GarrisonRegenRate>
<GarrisonRegenRate>2</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>500</BuildTime>

View File

@ -41,7 +41,7 @@
<Capturable>
<CapturePoints op="mul">3</CapturePoints>
<RegenRate>10.0</RegenRate>
<GarrisonRegenRate>3.0</GarrisonRegenRate>
<GarrisonRegenRate>1</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>250</BuildTime>

View File

@ -6,7 +6,7 @@
<Capturable>
<CapturePoints>25</CapturePoints>
<RegenRate>0</RegenRate>
<GarrisonRegenRate>5</GarrisonRegenRate>
<GarrisonRegenRate>1</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>20</BuildTime>

View File

@ -6,7 +6,7 @@
<Capturable>
<CapturePoints>25</CapturePoints>
<RegenRate>0</RegenRate>
<GarrisonRegenRate>5</GarrisonRegenRate>
<GarrisonRegenRate>1</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>20</BuildTime>

View File

@ -1,64 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_structure_special">
<BuildRestrictions>
<Territory>own neutral enemy</Territory>
</BuildRestrictions>
<Capturable>
<CapturePoints>25</CapturePoints>
<RegenRate>0</RegenRate>
<GarrisonRegenRate>5</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>20</BuildTime>
<Resources>
<wood>50</wood>
</Resources>
</Cost>
<Footprint>
<Square width="12.0" depth="11.0"/>
<Height>5.0</Height>
</Footprint>
<GarrisonHolder>
<Max>5</Max>
<EjectHealth>0.1</EjectHealth>
<EjectClassesOnDestroy datatype="tokens">Unit</EjectClassesOnDestroy>
<List datatype="tokens">Support Infantry</List>
<BuffHeal>0</BuffHeal>
<LoadingRange>2</LoadingRange>
</GarrisonHolder>
<Health>
<Max>100</Max>
<SpawnEntityOnDeath>decay|rubble/rubble_stone_3x3</SpawnEntityOnDeath>
</Health>
<Identity>
<Civ>ptol</Civ>
<SpecificName>Desert Army Tent</SpecificName>
<GenericName>Tent</GenericName>
<Icon>structures/mercenary_camp.png</Icon>
<VisibleClasses datatype="tokens">Tent</VisibleClasses>
<Tooltip>A temporary shelter for soldiers. +5 population bonus.</Tooltip>
</Identity>
<Obstruction>
<Static width="10.0" depth="10.0"/>
</Obstruction>
<Population>
<Bonus>5</Bonus>
</Population>
<Sound>
<SoundGroups>
<select>interface/select/building/sel_universal.xml</select>
<constructed>interface/complete/building/complete_universal.xml</constructed>
<death>attack/destruction/building_collapse_large.xml</death>
</SoundGroups>
</Sound>
<StatusBars>
<HeightOffset>6.0</HeightOffset>
</StatusBars>
<TerritoryDecay>
<DecayRate>1</DecayRate>
</TerritoryDecay>
<TerritoryInfluence disable=""/>
<VisualActor>
<Actor>structures/tent_big.xml</Actor>
</VisualActor>
</Entity>
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_structure_special">
<BuildRestrictions>
<Territory>own neutral enemy</Territory>
</BuildRestrictions>
<Capturable>
<CapturePoints>25</CapturePoints>
<RegenRate>0</RegenRate>
<GarrisonRegenRate>1</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>20</BuildTime>
<Resources>
<wood>50</wood>
</Resources>
</Cost>
<Footprint>
<Square width="12.0" depth="11.0"/>
<Height>5.0</Height>
</Footprint>
<GarrisonHolder>
<Max>5</Max>
<EjectHealth>0.1</EjectHealth>
<EjectClassesOnDestroy datatype="tokens">Unit</EjectClassesOnDestroy>
<List datatype="tokens">Support Infantry</List>
<BuffHeal>0</BuffHeal>
<LoadingRange>2</LoadingRange>
</GarrisonHolder>
<Health>
<Max>100</Max>
<SpawnEntityOnDeath>decay|rubble/rubble_stone_3x3</SpawnEntityOnDeath>
</Health>
<Identity>
<Civ>ptol</Civ>
<SpecificName>Desert Army Tent</SpecificName>
<GenericName>Tent</GenericName>
<Icon>structures/mercenary_camp.png</Icon>
<VisibleClasses datatype="tokens">Tent</VisibleClasses>
<Tooltip>A temporary shelter for soldiers. +5 population bonus.</Tooltip>
</Identity>
<Obstruction>
<Static width="10.0" depth="10.0"/>
</Obstruction>
<Population>
<Bonus>5</Bonus>
</Population>
<Sound>
<SoundGroups>
<select>interface/select/building/sel_universal.xml</select>
<constructed>interface/complete/building/complete_universal.xml</constructed>
<death>attack/destruction/building_collapse_large.xml</death>
</SoundGroups>
</Sound>
<StatusBars>
<HeightOffset>6.0</HeightOffset>
</StatusBars>
<TerritoryDecay>
<DecayRate>1</DecayRate>
</TerritoryDecay>
<TerritoryInfluence disable=""/>
<VisualActor>
<Actor>structures/tent_big.xml</Actor>
</VisualActor>
</Entity>

View File

@ -1,64 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_structure_special">
<BuildRestrictions>
<Territory>own neutral enemy</Territory>
</BuildRestrictions>
<Capturable>
<CapturePoints>25</CapturePoints>
<RegenRate>0</RegenRate>
<GarrisonRegenRate>5</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>20</BuildTime>
<Resources>
<wood>50</wood>
</Resources>
</Cost>
<Footprint>
<Square width="9.0" depth="9.0"/>
<Height>5.0</Height>
</Footprint>
<GarrisonHolder>
<Max>5</Max>
<EjectHealth>0.1</EjectHealth>
<EjectClassesOnDestroy datatype="tokens">Unit</EjectClassesOnDestroy>
<List datatype="tokens">Support Infantry</List>
<BuffHeal>0</BuffHeal>
<LoadingRange>2</LoadingRange>
</GarrisonHolder>
<Health>
<Max>100</Max>
<SpawnEntityOnDeath>decay|rubble/rubble_stone_3x3</SpawnEntityOnDeath>
</Health>
<Identity>
<Civ>mace</Civ>
<SpecificName>Macedonian Army Tent</SpecificName>
<GenericName>Tent</GenericName>
<Icon>structures/mercenary_camp.png</Icon>
<VisibleClasses datatype="tokens">Tent</VisibleClasses>
<Tooltip>A temporary shelter for soldiers. +5 population bonus.</Tooltip>
</Identity>
<Obstruction>
<Static width="8.0" depth="8.0"/>
</Obstruction>
<Population>
<Bonus>5</Bonus>
</Population>
<Sound>
<SoundGroups>
<select>interface/select/building/sel_universal.xml</select>
<constructed>interface/complete/building/complete_universal.xml</constructed>
<death>attack/destruction/building_collapse_large.xml</death>
</SoundGroups>
</Sound>
<StatusBars>
<HeightOffset>6.0</HeightOffset>
</StatusBars>
<TerritoryDecay>
<DecayRate>1</DecayRate>
</TerritoryDecay>
<TerritoryInfluence disable=""/>
<VisualActor>
<Actor>structures/tent_greek.xml</Actor>
</VisualActor>
</Entity>
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_structure_special">
<BuildRestrictions>
<Territory>own neutral enemy</Territory>
</BuildRestrictions>
<Capturable>
<CapturePoints>25</CapturePoints>
<RegenRate>0</RegenRate>
<GarrisonRegenRate>1</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>20</BuildTime>
<Resources>
<wood>50</wood>
</Resources>
</Cost>
<Footprint>
<Square width="9.0" depth="9.0"/>
<Height>5.0</Height>
</Footprint>
<GarrisonHolder>
<Max>5</Max>
<EjectHealth>0.1</EjectHealth>
<EjectClassesOnDestroy datatype="tokens">Unit</EjectClassesOnDestroy>
<List datatype="tokens">Support Infantry</List>
<BuffHeal>0</BuffHeal>
<LoadingRange>2</LoadingRange>
</GarrisonHolder>
<Health>
<Max>100</Max>
<SpawnEntityOnDeath>decay|rubble/rubble_stone_3x3</SpawnEntityOnDeath>
</Health>
<Identity>
<Civ>mace</Civ>
<SpecificName>Macedonian Army Tent</SpecificName>
<GenericName>Tent</GenericName>
<Icon>structures/mercenary_camp.png</Icon>
<VisibleClasses datatype="tokens">Tent</VisibleClasses>
<Tooltip>A temporary shelter for soldiers. +5 population bonus.</Tooltip>
</Identity>
<Obstruction>
<Static width="8.0" depth="8.0"/>
</Obstruction>
<Population>
<Bonus>5</Bonus>
</Population>
<Sound>
<SoundGroups>
<select>interface/select/building/sel_universal.xml</select>
<constructed>interface/complete/building/complete_universal.xml</constructed>
<death>attack/destruction/building_collapse_large.xml</death>
</SoundGroups>
</Sound>
<StatusBars>
<HeightOffset>6.0</HeightOffset>
</StatusBars>
<TerritoryDecay>
<DecayRate>1</DecayRate>
</TerritoryDecay>
<TerritoryInfluence disable=""/>
<VisualActor>
<Actor>structures/tent_greek.xml</Actor>
</VisualActor>
</Entity>

View File

@ -1,64 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_structure_special">
<BuildRestrictions>
<Territory>own neutral enemy</Territory>
</BuildRestrictions>
<Capturable>
<CapturePoints>25</CapturePoints>
<RegenRate>0</RegenRate>
<GarrisonRegenRate>5</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>20</BuildTime>
<Resources>
<wood>50</wood>
</Resources>
</Cost>
<Footprint>
<Square width="11.0" depth="11.0"/>
<Height>5.0</Height>
</Footprint>
<GarrisonHolder>
<Max>5</Max>
<EjectHealth>0.1</EjectHealth>
<EjectClassesOnDestroy datatype="tokens">Unit</EjectClassesOnDestroy>
<List datatype="tokens">Support Infantry</List>
<BuffHeal>0</BuffHeal>
<LoadingRange>2</LoadingRange>
</GarrisonHolder>
<Health>
<Max>100</Max>
<SpawnEntityOnDeath>decay|rubble/rubble_stone_3x3</SpawnEntityOnDeath>
</Health>
<Identity>
<Civ>rome</Civ>
<SpecificName>Roman Army Tent</SpecificName>
<GenericName>Tent</GenericName>
<Icon>structures/mercenary_camp.png</Icon>
<VisibleClasses datatype="tokens">Tent</VisibleClasses>
<Tooltip>A temporary shelter for soldiers. +5 population bonus.</Tooltip>
</Identity>
<Obstruction>
<Static width="8.0" depth="8.0"/>
</Obstruction>
<Population>
<Bonus>5</Bonus>
</Population>
<Sound>
<SoundGroups>
<select>interface/select/building/sel_universal.xml</select>
<constructed>interface/complete/building/complete_universal.xml</constructed>
<death>attack/destruction/building_collapse_large.xml</death>
</SoundGroups>
</Sound>
<StatusBars>
<HeightOffset>6.0</HeightOffset>
</StatusBars>
<TerritoryDecay>
<DecayRate>1</DecayRate>
</TerritoryDecay>
<TerritoryInfluence disable=""/>
<VisualActor>
<Actor>props/structures/romans/rome_tent.xml</Actor>
</VisualActor>
</Entity>
<?xml version="1.0" encoding="utf-8"?>
<Entity parent="template_structure_special">
<BuildRestrictions>
<Territory>own neutral enemy</Territory>
</BuildRestrictions>
<Capturable>
<CapturePoints>25</CapturePoints>
<RegenRate>0</RegenRate>
<GarrisonRegenRate>1</GarrisonRegenRate>
</Capturable>
<Cost>
<BuildTime>20</BuildTime>
<Resources>
<wood>50</wood>
</Resources>
</Cost>
<Footprint>
<Square width="11.0" depth="11.0"/>
<Height>5.0</Height>
</Footprint>
<GarrisonHolder>
<Max>5</Max>
<EjectHealth>0.1</EjectHealth>
<EjectClassesOnDestroy datatype="tokens">Unit</EjectClassesOnDestroy>
<List datatype="tokens">Support Infantry</List>
<BuffHeal>0</BuffHeal>
<LoadingRange>2</LoadingRange>
</GarrisonHolder>
<Health>
<Max>100</Max>
<SpawnEntityOnDeath>decay|rubble/rubble_stone_3x3</SpawnEntityOnDeath>
</Health>
<Identity>
<Civ>rome</Civ>
<SpecificName>Roman Army Tent</SpecificName>
<GenericName>Tent</GenericName>
<Icon>structures/mercenary_camp.png</Icon>
<VisibleClasses datatype="tokens">Tent</VisibleClasses>
<Tooltip>A temporary shelter for soldiers. +5 population bonus.</Tooltip>
</Identity>
<Obstruction>
<Static width="8.0" depth="8.0"/>
</Obstruction>
<Population>
<Bonus>5</Bonus>
</Population>
<Sound>
<SoundGroups>
<select>interface/select/building/sel_universal.xml</select>
<constructed>interface/complete/building/complete_universal.xml</constructed>
<death>attack/destruction/building_collapse_large.xml</death>
</SoundGroups>
</Sound>
<StatusBars>
<HeightOffset>6.0</HeightOffset>
</StatusBars>
<TerritoryDecay>
<DecayRate>1</DecayRate>
</TerritoryDecay>
<TerritoryInfluence disable=""/>
<VisualActor>
<Actor>props/structures/romans/rome_tent.xml</Actor>
</VisualActor>
</Entity>

View File

@ -9,7 +9,7 @@
<Capturable>
<CapturePoints>500</CapturePoints>
<RegenRate>0.5</RegenRate>
<GarrisonRegenRate>5.0</GarrisonRegenRate>
<GarrisonRegenRate>1.0</GarrisonRegenRate>
</Capturable>
<Cost>
<Population>0</Population>