Index: binaries/data/mods/public/simulation/components/ResourceSupply.js
===================================================================
--- binaries/data/mods/public/simulation/components/ResourceSupply.js
+++ binaries/data/mods/public/simulation/components/ResourceSupply.js
@@ -3,18 +3,47 @@
ResourceSupply.prototype.Schema =
"Provides a supply of one particular type of resource." +
"" +
- "1000" +
+ "1000" +
+ "1000" +
"food.meat" +
"false" +
"25" +
"0.8" +
+ "" +
+ "" +
+ "2" +
+ "1000" +
+ "" +
+ "" +
+ "alive" +
+ "2" +
+ "1000" +
+ "500" +
+ "" +
+ "" +
+ "dead notGathered" +
+ "-2" +
+ "1000" +
+ "" +
+ "" +
+ "dead" +
+ "-1" +
+ "1000" +
+ "500" +
+ "" +
+ "" +
"" +
"" +
"" +
"" +
- "" +
+ "" +
"Infinity" +
"" +
+ "" +
+ "" +
+ "Infinity" +
+ "" +
+ "" +
"" +
Resources.BuildChoicesSchema(true, true) +
"" +
@@ -25,26 +54,79 @@
"" +
"" +
"" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "alive" +
+ "dead" +
+ "gathered" +
+ "notGathered" +
+ "" +
+ "" +
+ "
" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
"";
ResourceSupply.prototype.Init = function()
{
- // Current resource amount (non-negative)
- this.amount = this.GetMaxAmount();
+ // Current resource amount (non-negative).
+ this.maxAmount = +this.template.Max;
+ this.amount = +(this.template.Initial || this.GetMaxAmount());
// List of IDs for each player
this.gatherers = [];
+ this.activeGatherers = [];
let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
for (let i = 0; i < numPlayers; ++i)
+ {
this.gatherers.push([]);
+ this.activeGatherers.push([]);
+ }
let [type, subtype] = this.template.Type.split('.');
this.cachedType = { "generic": type, "specific": subtype };
+
+ if (this.template.Change)
+ {
+ this.timers = {};
+ this.cachedChanges = {};
+ this.RecalculateValues();
+ }
};
ResourceSupply.prototype.IsInfinite = function()
{
- return !isFinite(+this.template.Amount);
+ return !isFinite(+this.template.Max);
};
ResourceSupply.prototype.GetKillBeforeGather = function()
@@ -54,7 +136,7 @@
ResourceSupply.prototype.GetMaxAmount = function()
{
- return +this.template.Amount;
+ return this.maxAmount;
};
ResourceSupply.prototype.GetCurrentAmount = function()
@@ -73,6 +155,14 @@
};
/**
+ * @return {int} - The number of currently active gatherers.
+ */
+ResourceSupply.prototype.GetNumActiveGatherers = function()
+{
+ return this.activeGatherers.reduce((a, b) => a + b.length, 0);
+};
+
+/**
* @return {{ "generic": string, "specific": string }} An object containing the subtype and the generic type. All resources must have both.
*/
ResourceSupply.prototype.GetType = function()
@@ -116,25 +206,57 @@
*/
ResourceSupply.prototype.TakeResources = function(amount)
{
+ if (this.IsInfinite())
+ return { "amount": amount, "exhausted": false };
+
+ let oldAmount = this.GetCurrentAmount();
+ this.Change(-amount);
+
+ return {
+ "amount": oldAmount - this.GetCurrentAmount(),
+ "exhausted": this.amount == 0
+ };
+};
+
+/**
+ * Changes the amount of resources; posts messages when necessary and checks timers.
+ *
+ * @param {number} change - The amount to change the resources with (can be negative).
+ * @return {number} - The change in resourceSupply.
+ */
+ResourceSupply.prototype.Change = function(change)
+{
// Before changing the amount, activate Fogging if necessary to hide changes
let cmpFogging = Engine.QueryInterface(this.entity, IID_Fogging);
if (cmpFogging)
cmpFogging.Activate();
- if (this.IsInfinite())
- return { "amount": amount, "exhausted": false };
+ let oldAmount = this.amount;
+ this.amount = Math.min(Math.max(oldAmount + change, 0), this.GetMaxAmount());
- let oldAmount = this.GetCurrentAmount();
- this.amount = Math.max(0, oldAmount - amount);
-
- let isExhausted = this.GetCurrentAmount() == 0;
- // Remove entities that have been exhausted
- if (isExhausted)
+ // Remove entities that have been exhausted.
+ if (this.amount == 0)
Engine.DestroyEntity(this.entity);
- Engine.PostMessage(this.entity, MT_ResourceSupplyChanged, { "from": oldAmount, "to": this.GetCurrentAmount() });
+ // Do not send a message if the resource amount didn't change.
+ let actualChange = this.amount - oldAmount;
+ if (actualChange != 0)
+ Engine.PostMessage(this.entity, MT_ResourceSupplyChanged, {
+ "from": oldAmount,
+ "to": this.amount
+ });
+ this.CheckTimers();
+ return actualChange;
+};
- return { "amount": oldAmount - this.GetCurrentAmount(), "exhausted": isExhausted };
+/**
+ * Sets the amount of resources to the new value.
+ *
+ * @param {number} newValue - The value to set.
+ */
+ResourceSupply.prototype.SetAmount = function(newValue)
+{
+ this.Change(newValue - this.amount);
};
/**
@@ -158,12 +280,41 @@
};
/**
+ * Declares this gatherer to be actively gathering. I.e. in the UnitAI-state of gathering.
+ *
+ * @param {number} player - The playerID owning the gatherer.
+ * @param {number} entity - The entityID gathering.
+ *
+ * @return {boolean} - Whether the gatherer was successfully added to the gatherers list.
+ */
+ResourceSupply.prototype.AddActiveGatherer = function(player, entity)
+{
+ if (!this.AddGatherer(player, entity))
+ return false;
+
+ if (this.activeGatherers[player].indexOf(entity) == -1)
+ this.activeGatherers[player].push(entity);
+/*
+warn("Add Active Gatherer:");
+warn(uneval(this.activeGatherers));
+warn(uneval(this.gatherers));
+*/
+ this.CheckTimers();
+ return true;
+};
+
+/**
* @param {number} gathererID - The gatherer's entity id.
* @param {number} player - The gatherer's player id.
* @todo: Should this return false if the gatherer didn't gather from said resource?
*/
ResourceSupply.prototype.RemoveGatherer = function(gathererID, player)
{
+/*
+warn(uneval("Remove Gatherer:"));
+warn(uneval(this.activeGatherers));
+warn(uneval(this.gatherers));
+*/
// This can happen if the unit is dead
if (player == undefined || player == INVALID_PLAYER)
{
@@ -174,12 +325,189 @@
}
let index = this.gatherers[player].indexOf(gathererID);
+ if (index != -1)
+ {
+ this.gatherers[player].splice(index, 1);
+ // Broadcast message, mainly useful for the AIs.
+ Engine.PostMessage(this.entity, MT_ResourceSupplyNumGatherersChanged, { "to": this.GetNumGatherers() });
+ }
+
+ index = this.activeGatherers[player].indexOf(gathererID);
if (index == -1)
return;
- this.gatherers[player].splice(index, 1);
- // Broadcast message, mainly useful for the AIs.
- Engine.PostMessage(this.entity, MT_ResourceSupplyNumGatherersChanged, { "to": this.GetNumGatherers() });
+ this.activeGatherers[player].splice(index, 1);
+ this.CheckTimers();
+};
+
+/**
+ * Checks whether a timer ought to be added or removed.
+ */
+ResourceSupply.prototype.CheckTimers = function()
+{
+ if (!this.timers || this.IsInfinite())
+ return;
+/*
+warn(uneval("Check Timers:"));
+warn(uneval(this.activeGatherers));
+warn(uneval(this.gatherers));
+*/
+ for (let changeKey in this.template.Change)
+ {
+ if (!this.CheckState(changeKey))
+ {
+ this.StopTimer(changeKey);
+ continue;
+ }
+ let template = this.template.Change[changeKey];
+ if (this.amount < +(template.LowerLimit || -1) ||
+ this.amount > +(template.UpperLimit || this.GetMaxAmount()))
+ {
+ this.StopTimer(changeKey);
+ continue;
+ }
+
+ if (this.cachedChanges[changeKey] == 0)
+ {
+ this.StopTimer(changeKey)
+ continue;
+ }
+
+ // We need a timer, add one if not present yet.
+ // If there is a change of 0, the timer will stop after the first run.
+ if (!this.timers[changeKey])
+ this.AddTimer(changeKey);
+ }
+
+};
+
+/**
+ * This verifies whether the current state of the supply matches the ones needed
+ * for the specific timer to run.
+ *
+ * @param {string} changeKey - The name of the Change to verify the state for.
+ * @return {boolean} - Whether the timer may run.
+ */
+ResourceSupply.prototype.CheckState = function(changeKey)
+{
+ let template = this.template.Change[changeKey];
+ if (!template.State)
+ return true;
+
+ let states = template.State.split(" ");
+
+ let cmpHealth = Engine.QueryInterface(this.entity, IID_Health);
+ if (states.indexOf("alive") != -1 && !cmpHealth && states.indexOf("dead") == -1 ||
+ states.indexOf("dead") != -1 && cmpHealth && states.indexOf("alive") == -1)
+ return false;
+
+ let activeGatherers = this.GetNumActiveGatherers();
+ if (states.indexOf("gathered") != -1 && activeGatherers == 0 && states.indexOf("notGathered") == -1 ||
+ states.indexOf("notGathered") != -1 && activeGatherers > 0 && states.indexOf("gathered") == -1)
+ return false;
+
+ return true;
+};
+
+/**
+ * @param {string} changeKey - The name of the Change to apply to the entity.
+ */
+ResourceSupply.prototype.AddTimer = function(changeKey)
+{
+ if (this.timers[changeKey])
+ return;
+
+ let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
+ let interval = ApplyValueModificationsToEntity("ResourceSupply/Change/" + changeKey + "/Interval", +(this.template.Change[changeKey].Interval || 1000), this.entity);
+ this.timers[changeKey] = cmpTimer.SetInterval(this.entity, IID_ResourceSupply, "TimerTick", interval, interval, changeKey);
+};
+
+/**
+ * @param {string} changeKey - The name of the change to stop the timer for.
+ */
+ResourceSupply.prototype.StopTimer = function(changeKey)
+{
+ if (!this.timers[changeKey])
+ return;
+
+ let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
+ cmpTimer.CancelTimer(this.timers[changeKey]);
+ delete this.timers[changeKey];
+};
+
+/**
+ * @param {string} changeKey - The name of the change to apply to the entity.
+ */
+ResourceSupply.prototype.TimerTick = function(changeKey)
+{
+ let template = this.template.Change[changeKey];
+ if (!template)
+ {
+ this.StopTimer(changeKey);
+ return;
+ }
+
+ if (this.Change(this.cachedChanges[changeKey]) == 0)
+ this.StopTimer(changeKey);
+};
+
+/**
+ * Since the supposed changes can be affected by modifications, and applying those
+ * are slow, do not calculate them every timer tick.
+ */
+ResourceSupply.prototype.RecalculateValues = function()
+{
+ this.maxAmount = ApplyValueModificationsToEntity("ResourceSupply/Max", +this.template.Max, this.entity);
+ // Can't change when infinite.
+ if (!this.timers || this.IsInfinite())
+ return;
+
+ for (let changeKey in this.template.Change)
+ this.cachedChanges[changeKey] = ApplyValueModificationsToEntity("ResourceSupply/Change/" + changeKey + "/Value", +this.template.Change[changeKey].Value, this.entity);
+
+ this.CheckTimers();
+};
+
+/**
+ * @param {{ "component": string, "valueNames": string[] }} msg - Message containing a list of values that were changed.
+ */
+ResourceSupply.prototype.OnValueModification = function(msg)
+{
+ if (msg.component != "ResourceSupply")
+ return;
+
+ if (!this.timers || this.IsInfinite())
+ return;
+
+ this.RecalculateValues();
+};
+
+/**
+ * @param {{ "from": int, "to": int }} msg - Message containing the old new owner.
+ */
+ResourceSupply.prototype.OnOwnershipChanged = function(msg)
+{
+ if (msg.to == INVALID_PLAYER)
+ {
+ let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
+ for (let changeKey in this.timers)
+ cmpTimer.CancelTimer(this.timers[changeKey]);
+ }
+
+ if (!this.timers || this.IsInfinite())
+ return;
+
+ this.RecalculateValues();
+};
+
+/**
+ * @param {{ "entity": int, "newentity": int }} msg - Message to what the entity has been renamed.
+ */
+ResourceSupply.prototype.OnEntityRenamed = function(msg)
+{
+ let cmpResourceSupplyNew = Engine.QueryInterface(msg.newentity, IID_ResourceSupply);
+ if (cmpResourceSupplyNew)
+ cmpResourceSupplyNew.SetAmount(this.GetCurrentAmount());
};
Engine.RegisterComponentType(IID_ResourceSupply, "ResourceSupply", ResourceSupply);
Index: binaries/data/mods/public/simulation/components/UnitAI.js
===================================================================
--- binaries/data/mods/public/simulation/components/UnitAI.js
+++ binaries/data/mods/public/simulation/components/UnitAI.js
@@ -2236,7 +2236,7 @@
let cmpSupply;
if (cmpOwnership)
cmpSupply = Engine.QueryInterface(this.gatheringTarget, IID_ResourceSupply);
- if (!cmpSupply || !cmpSupply.AddGatherer(cmpOwnership.GetOwner(), this.entity))
+ if (!cmpSupply || !cmpSupply.AddActiveGatherer(cmpOwnership.GetOwner(), this.entity))
{
this.SetNextState("FINDINGNEWTARGET");
return true;
Index: binaries/data/mods/public/simulation/components/tests/test_ResourceSupply.js
===================================================================
--- binaries/data/mods/public/simulation/components/tests/test_ResourceSupply.js
+++ binaries/data/mods/public/simulation/components/tests/test_ResourceSupply.js
@@ -11,10 +11,15 @@
}
};
+Engine.LoadHelperScript("ValueModification.js");
+Engine.LoadComponentScript("interfaces/Health.js");
+Engine.LoadComponentScript("interfaces/ModifiersManager.js");
Engine.LoadComponentScript("interfaces/ResourceSupply.js");
+Engine.LoadComponentScript("interfaces/Timer.js");
Engine.LoadComponentScript("ResourceSupply.js");
+Engine.LoadComponentScript("Timer.js");
-const entity = 60;
+let entity = 60;
AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
"GetNumPlayers": () => 3
@@ -25,7 +30,8 @@
});
let template = {
- "Amount": 1000,
+ "Max": 1001,
+ "Initial": 1000,
"Type": "food.meat",
"KillBeforeGather": false,
"MaxGatherers": 2
@@ -37,7 +43,7 @@
TS_ASSERT(!cmpResourceSupply.GetKillBeforeGather());
-TS_ASSERT_EQUALS(cmpResourceSupply.GetMaxAmount(), 1000);
+TS_ASSERT_EQUALS(cmpResourceSupply.GetMaxAmount(), 1001);
TS_ASSERT_EQUALS(cmpResourceSupply.GetMaxGatherers(), 2);
@@ -63,6 +69,12 @@
cmpResourceSupply.RemoveGatherer(70, 1);
TS_ASSERT_EQUALS(cmpResourceSupply.GetNumGatherers(), 1);
+TS_ASSERT(cmpResourceSupply.AddActiveGatherer(1, 70));
+TS_ASSERT_EQUALS(cmpResourceSupply.GetNumGatherers(), 2);
+
+cmpResourceSupply.RemoveGatherer(70, 1);
+TS_ASSERT_EQUALS(cmpResourceSupply.GetNumGatherers(), 1);
+
TS_ASSERT_UNEVAL_EQUALS(cmpResourceSupply.GetCurrentAmount(), 1000);
TS_ASSERT_UNEVAL_EQUALS(cmpResourceSupply.TakeResources(300), { "amount": 300, "exhausted": false });
TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 700);
@@ -72,3 +84,657 @@
TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 0);
// The resource is not available when exhausted
TS_ASSERT(!cmpResourceSupply.IsAvailable(1, 70));
+cmpResourceSupply.RemoveGatherer(71, 1);
+TS_ASSERT_EQUALS(cmpResourceSupply.GetNumGatherers(), 0);
+
+
+// Test Change //
+
+let cmpTimer;
+let resourceSupply;
+function reset(template)
+{
+ cmpTimer = ConstructComponent(SYSTEM_ENTITY, "Timer");
+ resourceSupply = ConstructComponent(entity, "ResourceSupply", template);
+}
+
+// Decay.
+template = {
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Rotting": {
+ "Value": -1,
+ "Interval": 1000
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 1000);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 999);
+cmpTimer.OnUpdate({ "turnLength": 5 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 994);
+
+// Decay with minimum.
+template = {
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Rotting": {
+ "Value": -1,
+ "Interval": 1000,
+ "LowerLimit": 997
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 1000);
+cmpTimer.OnUpdate({ "turnLength": 3 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 997);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 996);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 996);
+
+// Decay with maximum.
+template = {
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Rotting": {
+ "Value": -1,
+ "Interval": 1000,
+ "UpperLimit": 995
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 1000);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 1000);
+
+// Decay with minimum and maximum.
+template = {
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Rotting": {
+ "Value": -1,
+ "Interval": 1000,
+ "UpperLimit": 995,
+ "LowerLimit": 990
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 1000);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 1000);
+resourceSupply.TakeResources(6);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 994);
+cmpTimer.OnUpdate({ "turnLength": 10 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 989);
+
+// Growth.
+template = {
+ "Initial": 995,
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 995);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 996);
+cmpTimer.OnUpdate({ "turnLength": 5 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 1000);
+
+// Growth with minimum.
+template = {
+ "Initial": 995,
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "LowerLimit": 997
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 995);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 995);
+
+// Growth with maximum.
+template = {
+ "Initial": 994,
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "UpperLimit": 995
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 994);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 995);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 996);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 996);
+
+// Growth with minimum and maximum.
+template = {
+ "Initial": 990,
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "UpperLimit": 995,
+ "LowerLimit": 990
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 990);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 991);
+cmpTimer.OnUpdate({ "turnLength": 8 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 996);
+
+// Growth when resources are taken again.
+template = {
+ "Initial": 995,
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 995);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 996);
+resourceSupply.TakeResources(6);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 990);
+cmpTimer.OnUpdate({ "turnLength": 5 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 995);
+
+// Decay when dead.
+template = {
+ "Max": 10,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Rotting": {
+ "Value": -1,
+ "Interval": 1000,
+ "State": "dead"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 10);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 9);
+
+// No growth when dead.
+template = {
+ "Max": 10,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "State": "alive"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+
+// Decay when dead or alive.
+template = {
+ "Max": 10,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Rotting": {
+ "Value": -1,
+ "Interval": 1000,
+ "State": "dead alive"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 10);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 9);
+
+AddMock(entity, IID_Health, { }); // Bring the entity to life.
+
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 8);
+
+// No decay when alive.
+template = {
+ "Max": 10,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Rotting": {
+ "Value": -1,
+ "Interval": 1000,
+ "State": "dead"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 10);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 10);
+
+// Growth when alive.
+template = {
+ "Max": 10,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "State": "alive"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 6);
+
+// Growth when dead or alive.
+template = {
+ "Max": 10,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "State": "dead alive"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 6);
+
+DeleteMock(entity, IID_Health); // "Kill" the entity.
+
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+
+// Decay *and* growth.
+template = {
+ "Max": 1000,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Rotting": {
+ "Value": -1,
+ "Interval": 1000
+ },
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 1000);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 1000);
+
+// Decay *and* growth with different health states.
+template = {
+ "Max": 10,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Rotting": {
+ "Value": -1,
+ "Interval": 1000,
+ "State": "dead"
+ },
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "State": "alive"
+ }
+ },
+ "MaxGatherers": 2
+};
+AddMock(entity, IID_Health, { }); // Bring the entity to life.
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 6);
+DeleteMock(entity, IID_Health); // "Kill" the entity.
+// We overshoot one due to lateness.
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 6);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+
+// Two effects with different limits.
+template = {
+ "Max": 20,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "SuperGrowth": {
+ "Value": 2,
+ "Interval": 1000,
+ "UpperLimit": 8
+ },
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "UpperLimit": 12
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 8);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 11);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 12);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 13);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 13);
+
+// Two effects with different limits.
+// This in an interesting case, where the order of the changes matters.
+template = {
+ "Max": 20,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "UpperLimit": 12
+ },
+ "SuperGrowth": {
+ "Value": 2,
+ "Interval": 1000,
+ "UpperLimit": 8
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 8);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 9);
+cmpTimer.OnUpdate({ "turnLength": 5 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 13);
+
+// Infinity with growth.
+template = {
+ "Max": Infinity,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), Infinity);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), Infinity);
+
+// Infinity with decay.
+template = {
+ "Max": Infinity,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Decay": {
+ "Value": -1,
+ "Interval": 1000
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), Infinity);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), Infinity);
+
+// Decay when not gathered.
+template = {
+ "Max": 10,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "ttt": {
+ "Value": -1,
+ "Interval": 1000,
+ "State": "notGathered"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 10);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 9);
+TS_ASSERT(resourceSupply.AddActiveGatherer(1, 70));
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 9);
+resourceSupply.RemoveGatherer(70, 1);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 8);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+
+// Grow when gathered.
+template = {
+ "Max": 10,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "State": "gathered"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+TS_ASSERT(resourceSupply.AddActiveGatherer(1, 70));
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 6);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+resourceSupply.RemoveGatherer(70, 1);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+
+// Grow when gathered or not.
+template = {
+ "Max": 10,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "State": "notGathered gathered"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 6);
+TS_ASSERT(resourceSupply.AddActiveGatherer(1, 70));
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 8);
+resourceSupply.RemoveGatherer(70, 1);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 9);
+
+// Grow when gathered and alive.
+template = {
+ "Max": 10,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Growth": {
+ "Value": 1,
+ "Interval": 1000,
+ "State": "alive gathered"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+TS_ASSERT(resourceSupply.AddActiveGatherer(1, 70));
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+AddMock(entity, IID_Health, { }); // Bring the entity to life.
+resourceSupply.CheckTimers(); // No other way to tell we've come to life.
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 6);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+resourceSupply.RemoveGatherer(70, 1);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+DeleteMock(entity, IID_Health); // "Kill" the entity.
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 7);
+
+// Decay when dead and not gathered.
+template = {
+ "Max": 10,
+ "Initial": 5,
+ "Type": "food.meat",
+ "KillBeforeGather": false,
+ "Change": {
+ "Decay": {
+ "Value": -1,
+ "Interval": 1000,
+ "State": "dead notGathered"
+ }
+ },
+ "MaxGatherers": 2
+};
+reset(template);
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 5);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 4);
+TS_ASSERT(resourceSupply.AddActiveGatherer(1, 70));
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 4);
+AddMock(entity, IID_Health, { }); // Bring the entity to life.
+resourceSupply.CheckTimers(); // No other way to tell we've come to life.
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 4);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 4);
+resourceSupply.RemoveGatherer(70, 1);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 4);
+DeleteMock(entity, IID_Health); // "Kill" the entity.
+resourceSupply.CheckTimers(); // No other way to tell we've died.
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 3);
+cmpTimer.OnUpdate({ "turnLength": 1 });
+TS_ASSERT_EQUALS(resourceSupply.GetCurrentAmount(), 2);
Index: binaries/data/mods/public/simulation/data/auras/structures/corral.json
===================================================================
--- /dev/null
+++ binaries/data/mods/public/simulation/data/auras/structures/corral.json
@@ -0,0 +1,11 @@
+{
+ "type": "range",
+ "radius": 20,
+ "affects": ["Unit"],
+ "modifications": [
+ { "value": "ResourceSupply/Change/Fatten/Value", "multiply": 2 }
+ ],
+ "auraDescription" : "Herdables +100% growth rate.",
+ "auraName": "Growing bonus",
+ "overlayIcon": "art/textures/ui/session/auras/farming.png"
+}
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_bear.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_bear.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_bear.xml
@@ -24,7 +24,7 @@
pitch
- 300
+ 300
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_boar.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_boar.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_boar.xml
@@ -24,7 +24,7 @@
pitch
- 150
+ 150
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_camel.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_camel.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_camel.xml
@@ -13,7 +13,7 @@
pitch
- 200
+ 200
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_chicken.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_chicken.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_chicken.xml
@@ -16,9 +16,22 @@
false
- 40
+ 800
+ 400
food.meat
5
+
+
+ 1
+ 1000
+ alive
+
+
+ -10
+ 1000
+ dead notGathered
+
+
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_african_bush.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_african_bush.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_african_bush.xml
@@ -16,7 +16,7 @@
75
- 800
+ 800
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_asian.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_asian.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_asian.xml
@@ -16,7 +16,7 @@
60
- 650
+ 650
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_north_african.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_north_african.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_north_african.xml
@@ -16,7 +16,7 @@
50
- 500
+ 500
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe.xml
@@ -16,7 +16,7 @@
pitch
- 350
+ 350
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe_infant.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe_infant.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_giraffe_infant.xml
@@ -13,7 +13,7 @@
pitch
- 150
+ 150
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_goat.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_goat.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_goat.xml
@@ -13,7 +13,7 @@
pitch
- 100
+ 100
food.meat
6
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_horse.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_horse.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_horse.xml
@@ -13,7 +13,7 @@
pitch
- 200
+ 200
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_muskox.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_muskox.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_muskox.xml
@@ -13,7 +13,7 @@
pitch
- 200
+ 200
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml
@@ -9,7 +9,7 @@
gaia/fauna_peacock.png
- 50
+ 50
food.meat
5
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_piglet.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_piglet.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_piglet.xml
@@ -9,7 +9,7 @@
true
- 10
+ 10
food.meat
1
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_rabbit.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_rabbit.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_rabbit.xml
@@ -19,7 +19,7 @@
pitch
- 50
+ 50
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_rhino.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_rhino.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_rhino.xml
@@ -24,7 +24,7 @@
pitch
- 300
+ 300
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_walrus.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_walrus.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_walrus.xml
@@ -31,7 +31,7 @@
pitch
- 300
+ 300
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_wildebeest.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_wildebeest.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_wildebeest.xml
@@ -13,7 +13,7 @@
pitch
- 150
+ 150
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/fauna_zebra.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_zebra.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_zebra.xml
@@ -13,7 +13,7 @@
pitch
- 150
+ 150
food.meat
Index: binaries/data/mods/public/simulation/templates/gaia/flora_bush_badlands.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_bush_badlands.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_bush_badlands.xml
@@ -4,7 +4,7 @@
Hardy Bush
- 75
+ 75
props/flora/bush_tempe_a.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_bush_temperate.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_bush_temperate.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_bush_temperate.xml
@@ -4,7 +4,7 @@
Bush
- 50
+ 50
flora/trees/temperate_bush_biome.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_bush_temperate_winter.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_bush_temperate_winter.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_bush_temperate_winter.xml
@@ -4,7 +4,7 @@
Bush
- 50
+ 50
flora/trees/temperate_bush_biome_winter.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_bush_tropic.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_bush_tropic.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_bush_tropic.xml
@@ -4,7 +4,7 @@
Bush
- 50
+ 50
flora/trees/tropic_bush_biome.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_bamboo_dragon.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_bamboo_dragon.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_bamboo_dragon.xml
@@ -11,7 +11,7 @@
- 1000
+ 1000
12
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_bamboo_single.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_bamboo_single.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_bamboo_single.xml
@@ -4,7 +4,7 @@
Bamboo
- 100
+ 100
1
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_banyan.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_banyan.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_banyan.xml
@@ -11,7 +11,7 @@
- 600
+ 600
12
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab.xml
@@ -11,7 +11,7 @@
- 400
+ 400
9
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab_1_sapling.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab_1_sapling.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab_1_sapling.xml
@@ -4,7 +4,7 @@
Baobab Sapling
- 50
+ 50
2
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab_3_mature.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab_3_mature.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab_3_mature.xml
@@ -11,7 +11,7 @@
- 600
+ 600
12
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab_4_dead.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab_4_dead.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_baobab_4_dead.xml
@@ -11,7 +11,7 @@
- 550
+ 550
12
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_cedar_atlas_1_sapling.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_cedar_atlas_1_sapling.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_cedar_atlas_1_sapling.xml
@@ -4,7 +4,7 @@
Atlas Cedar Sapling
- 50
+ 50
flora/trees/cedar_atlas_sapling.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_cedar_atlas_3_mature.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_cedar_atlas_3_mature.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_cedar_atlas_3_mature.xml
@@ -4,7 +4,7 @@
Atlas Cedar
- 350
+ 350
flora/trees/cedar_atlas.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_cedar_atlas_4_dead.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_cedar_atlas_4_dead.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_cedar_atlas_4_dead.xml
@@ -4,7 +4,7 @@
Dead Atlas Cedar
- 300
+ 300
flora/trees/cedar_atlas_dead.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_cretan_date_palm_patch.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_cretan_date_palm_patch.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_cretan_date_palm_patch.xml
@@ -11,7 +11,7 @@
- 300
+ 300
12
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_cretan_date_palm_short.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_cretan_date_palm_short.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_cretan_date_palm_short.xml
@@ -4,7 +4,7 @@
Cretan Date Palm
- 100
+ 100
flora/trees/palm_cretan_date_short.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_dead.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_dead.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_dead.xml
@@ -4,7 +4,7 @@
Dead Deciduous Tree
- 200
+ 200
flora/trees/temperate_dead_forest.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_elm.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_elm.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_elm.xml
@@ -4,7 +4,7 @@
Elm Tree
- 200
+ 200
flora/trees/elm.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_elm_dead.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_elm_dead.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_elm_dead.xml
@@ -4,7 +4,7 @@
Elm Tree
- 200
+ 200
flora/trees/elm_dead.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_euro_birch.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_euro_birch.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_euro_birch.xml
@@ -4,7 +4,7 @@
Silver Birch
- 300
+ 300
flora/trees/euro_birch_tree.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_fig.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_fig.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_fig.xml
@@ -10,7 +10,7 @@
- 500
+ 500
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_fir.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_fir.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_fir.xml
@@ -4,7 +4,7 @@
Fir Tree
- 200
+ 200
flora/trees/fir_tree.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_fir_sapling.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_fir_sapling.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_fir_sapling.xml
@@ -4,7 +4,7 @@
Fir Sapling
- 50
+ 50
flora/trees/fir_sapling.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_fir_winter.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_fir_winter.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_fir_winter.xml
@@ -4,7 +4,7 @@
Fir Tree
- 200
+ 200
flora/trees/fir_tree_winter.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_maple.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_maple.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_maple.xml
@@ -4,7 +4,7 @@
Maple
- 300
+ 300
flora/trees/temperate_maple_trees.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_oak_large.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_oak_large.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_oak_large.xml
@@ -4,7 +4,7 @@
Large Oak Tree
- 300
+ 300
flora/trees/oak_large.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_poplar_dead.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_poplar_dead.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_poplar_dead.xml
@@ -4,7 +4,7 @@
Dead Poplar
- 200
+ 200
flora/trees/poplar_dead.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_poplar_lombardy_autumn.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_poplar_lombardy_autumn.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_poplar_lombardy_autumn.xml
@@ -4,7 +4,7 @@
Poplar
- 200
+ 200
flora/trees/poplar_autumn.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_strangler.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_strangler.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_strangler.xml
@@ -11,7 +11,7 @@
- 500
+ 500
10
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_teak.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_teak.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_teak.xml
@@ -11,7 +11,7 @@
- 500
+ 500
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_temperate.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_temperate.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_temperate.xml
@@ -4,7 +4,7 @@
Deciduous Tree
- 200
+ 200
flora/trees/temperate_forest_biome_tree.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_temperate_autumn.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_temperate_autumn.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_temperate_autumn.xml
@@ -4,7 +4,7 @@
Deciduous Tree
- 200
+ 200
flora/trees/temperate_forest_biome_tree_autumn.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_temperate_winter.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_temperate_winter.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_temperate_winter.xml
@@ -4,7 +4,7 @@
Deciduous Tree
- 200
+ 200
flora/trees/temperate_forest_biome_tree_winter.xml
Index: binaries/data/mods/public/simulation/templates/gaia/flora_tree_tropic_rainforest.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/flora_tree_tropic_rainforest.xml
+++ binaries/data/mods/public/simulation/templates/gaia/flora_tree_tropic_rainforest.xml
@@ -4,7 +4,7 @@
Rainforest Tree
- 200
+ 200
flora/trees/tropic_forest_biome_tree.xml
Index: binaries/data/mods/public/simulation/templates/gaia/ruins/column_doric.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/ruins/column_doric.xml
+++ binaries/data/mods/public/simulation/templates/gaia/ruins/column_doric.xml
@@ -9,7 +9,7 @@
gaia/special_fence.png
- 500
+ 500
props/special/eyecandy/column_doric_fallen.xml
Index: binaries/data/mods/public/simulation/templates/gaia/ruins/pyramid_great.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/ruins/pyramid_great.xml
+++ binaries/data/mods/public/simulation/templates/gaia/ruins/pyramid_great.xml
@@ -15,7 +15,7 @@
-2.0
- 10000
+ 10000
120
Index: binaries/data/mods/public/simulation/templates/gaia/ruins/pyramid_minor.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/ruins/pyramid_minor.xml
+++ binaries/data/mods/public/simulation/templates/gaia/ruins/pyramid_minor.xml
@@ -12,7 +12,7 @@
- 5000
+ 5000
90
Index: binaries/data/mods/public/simulation/templates/gaia/ruins/standing_stone.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/ruins/standing_stone.xml
+++ binaries/data/mods/public/simulation/templates/gaia/ruins/standing_stone.xml
@@ -12,7 +12,7 @@
- 300
+ 300
props/special/eyecandy/standing_stones.xml
Index: binaries/data/mods/public/simulation/templates/gaia/ruins/stone_statues_egyptian.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/ruins/stone_statues_egyptian.xml
+++ binaries/data/mods/public/simulation/templates/gaia/ruins/stone_statues_egyptian.xml
@@ -12,7 +12,7 @@
- 300
+ 300
Index: binaries/data/mods/public/simulation/templates/gaia/ruins/stone_statues_kushite.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/ruins/stone_statues_kushite.xml
+++ binaries/data/mods/public/simulation/templates/gaia/ruins/stone_statues_kushite.xml
@@ -12,7 +12,7 @@
- 300
+ 300
Index: binaries/data/mods/public/simulation/templates/gaia/ruins/stone_statues_roman.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/ruins/stone_statues_roman.xml
+++ binaries/data/mods/public/simulation/templates/gaia/ruins/stone_statues_roman.xml
@@ -12,7 +12,7 @@
- 300
+ 300
Index: binaries/data/mods/public/simulation/templates/gaia/ruins/unfinished_greek_temple.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/ruins/unfinished_greek_temple.xml
+++ binaries/data/mods/public/simulation/templates/gaia/ruins/unfinished_greek_temple.xml
@@ -12,7 +12,7 @@
- 2000
+ 2000
30
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/food_barrel.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/food_barrel.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/food_barrel.xml
@@ -9,7 +9,7 @@
gaia/special_treasure_food.png
- 100
+ 100
treasure.food
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/food_barrels_buried.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/food_barrels_buried.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/food_barrels_buried.xml
@@ -16,7 +16,7 @@
0.0
- 200
+ 200
treasure.food
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/food_bin.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/food_bin.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/food_bin.xml
@@ -12,7 +12,7 @@
- 300
+ 300
treasure.food
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/food_crate.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/food_crate.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/food_crate.xml
@@ -12,7 +12,7 @@
- 200
+ 200
treasure.food
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/food_jars.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/food_jars.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/food_jars.xml
@@ -12,7 +12,7 @@
- 300
+ 300
treasure.food
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/food_persian_big.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/food_persian_big.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/food_persian_big.xml
@@ -12,7 +12,7 @@
- 600
+ 600
treasure.food
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/food_persian_small.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/food_persian_small.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/food_persian_small.xml
@@ -12,7 +12,7 @@
- 400
+ 400
treasure.food
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/golden_fleece.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/golden_fleece.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/golden_fleece.xml
@@ -8,7 +8,7 @@
Golden Fleece
- 1000
+ 1000
treasure.metal
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/metal.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/metal.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/metal.xml
@@ -8,7 +8,7 @@
Secret Box
- 300
+ 300
treasure.metal
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/metal_persian_big.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/metal_persian_big.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/metal_persian_big.xml
@@ -11,7 +11,7 @@
- 500
+ 500
treasure.metal
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/metal_persian_small.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/metal_persian_small.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/metal_persian_small.xml
@@ -11,7 +11,7 @@
- 300
+ 300
treasure.metal
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/pegasus.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/pegasus.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/pegasus.xml
@@ -8,7 +8,7 @@
Pegasus
- 1000
+ 1000
treasure.metal
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck.xml
@@ -15,7 +15,7 @@
0.0
- 500
+ 500
treasure.wood
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_debris.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_debris.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_debris.xml
@@ -18,7 +18,7 @@
0.0
- 200
+ 200
treasure.food
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_ram_bow.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_ram_bow.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_ram_bow.xml
@@ -15,7 +15,7 @@
0.0
- 550
+ 550
treasure.wood
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_sail_boat.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_sail_boat.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_sail_boat.xml
@@ -15,7 +15,7 @@
0.0
- 400
+ 400
treasure.wood
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_sail_boat_cut.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_sail_boat_cut.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/shipwreck_sail_boat_cut.xml
@@ -15,7 +15,7 @@
0.0
- 450
+ 450
treasure.wood
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/standing_stone.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/standing_stone.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/standing_stone.xml
@@ -11,7 +11,7 @@
- 300
+ 300
treasure.stone
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/stone.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/stone.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/stone.xml
@@ -11,7 +11,7 @@
- 300
+ 300
treasure.stone
Index: binaries/data/mods/public/simulation/templates/gaia/treasure/wood.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/treasure/wood.xml
+++ binaries/data/mods/public/simulation/templates/gaia/treasure/wood.xml
@@ -11,7 +11,7 @@
- 300
+ 300
treasure.wood
Index: binaries/data/mods/public/simulation/templates/template_gaia_fish.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_fish.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_fish.xml
@@ -26,7 +26,7 @@
false
- 1000
+ 1000
food.fish
4
Index: binaries/data/mods/public/simulation/templates/template_gaia_flora.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_flora.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_flora.xml
@@ -16,7 +16,7 @@
false
- 200
+ 200
wood.tree
8
Index: binaries/data/mods/public/simulation/templates/template_gaia_flora_bush_berry.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_flora_bush_berry.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_flora_bush_berry.xml
@@ -13,7 +13,7 @@
false
- 200
+ 200
food.fruit
Index: binaries/data/mods/public/simulation/templates/template_gaia_flora_tree_fruit.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_flora_tree_fruit.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_flora_tree_fruit.xml
@@ -15,7 +15,7 @@
- 400
+ 400
food.fruit
Index: binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral.xml
@@ -11,7 +11,7 @@
false
- 1000
+ 1000
metal.ore
12
Index: binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral_slabs.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral_slabs.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_geo_mineral_slabs.xml
@@ -8,7 +8,7 @@
- 5000
+ 5000
24
Index: binaries/data/mods/public/simulation/templates/template_gaia_geo_rock.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_geo_rock.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_geo_rock.xml
@@ -11,7 +11,7 @@
false
- 1000
+ 1000
stone.rock
12
Index: binaries/data/mods/public/simulation/templates/template_gaia_geo_rock_slabs.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_geo_rock_slabs.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_geo_rock_slabs.xml
@@ -8,7 +8,7 @@
- 5000
+ 5000
24
Index: binaries/data/mods/public/simulation/templates/template_gaia_ruins.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_ruins.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_ruins.xml
@@ -18,7 +18,7 @@
false
- 500
+ 500
stone.ruins
1
Index: binaries/data/mods/public/simulation/templates/template_gaia_treasure.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_gaia_treasure.xml
+++ binaries/data/mods/public/simulation/templates/template_gaia_treasure.xml
@@ -18,7 +18,7 @@
false
- 300
+ 300
1
Index: binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml
+++ binaries/data/mods/public/simulation/templates/template_structure_resource_corral.xml
@@ -1,5 +1,8 @@
+
+ structures/corral
+
50
Index: binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml
+++ binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml
@@ -44,7 +44,7 @@
false
- Infinity
+ Infinity
food.grain
5
0.90
Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_herd.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_fauna_herd.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_fauna_herd.xml
@@ -8,7 +8,7 @@
true
- 100
+ 100
food.meat
8
Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt.xml
@@ -12,7 +12,7 @@
true
- 100
+ 100
food.meat
8
Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish_elephant_infant.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish_elephant_infant.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish_elephant_infant.xml
@@ -16,7 +16,7 @@
pitch
- 100
+ 100
food.meat
Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml
@@ -21,7 +21,7 @@
true
- 2000
+ 2000
food.fish
5