Index: binaries/data/mods/public/gui/reference/common/TemplateParser.js =================================================================== --- binaries/data/mods/public/gui/reference/common/TemplateParser.js +++ binaries/data/mods/public/gui/reference/common/TemplateParser.js @@ -82,7 +82,7 @@ if (template.ResourceSupply) parsed.supply = { "type": template.ResourceSupply.Type.split("."), - "amount": template.ResourceSupply.Amount, + "amount": template.ResourceSupply.Max, }; if (parsed.upgrades) 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,22 +54,70 @@ "" + "" + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "alive" + + "dead" + + "gathered" + + "notGathered" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + ""; ResourceSupply.prototype.Init = function() { - // Current resource amount (non-negative) - this.amount = this.GetMaxAmount(); + this.amount = +(this.template.Initial || this.template.Max); + // Includes the ones that are tasked but not here yet, i.e. approaching. this.gatherers = []; + this.activeGatherers = []; let [type, subtype] = this.template.Type.split('.'); this.cachedType = { "generic": type, "specific": subtype }; + + if (this.template.Change) + { + this.timers = {}; + this.cachedChanges = {}; + } }; ResourceSupply.prototype.IsInfinite = function() { - return !isFinite(+this.template.Amount); + return !isFinite(+this.template.Max); }; ResourceSupply.prototype.GetKillBeforeGather = function() @@ -50,7 +127,7 @@ ResourceSupply.prototype.GetMaxAmount = function() { - return +this.template.Amount; + return this.maxAmount; }; ResourceSupply.prototype.GetCurrentAmount = function() @@ -69,6 +146,14 @@ }; /** + * @return {number} - The number of currently active gatherers. + */ +ResourceSupply.prototype.GetNumActiveGatherers = function() +{ + return this.activeGatherers.length; +}; + +/** * @return {{ "generic": string, "specific": string }} An object containing the subtype and the generic type. All resources must have both. */ ResourceSupply.prototype.GetType = function() @@ -128,25 +213,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.GetCurrentAmount(); - this.amount = Math.max(0, oldAmount - amount); + let oldAmount = this.amount; + this.amount = Math.min(Math.max(oldAmount + change, 0), this.GetMaxAmount()); - 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); }; /** @@ -169,17 +286,193 @@ }; /** + * 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(entity) +{ + if (!this.AddGatherer(entity)) + return false; + + if (this.activeGatherers.indexOf(entity) == -1) + { + this.activeGatherers.push(entity); + this.CheckTimers(); + } + return true; +}; + +/** * @param {number} gathererID - The gatherer's entity id. * @todo: Should this return false if the gatherer didn't gather from said resource? */ ResourceSupply.prototype.RemoveGatherer = function(gathererID) { let index = this.gatherers.indexOf(gathererID); + if (index != -1) + { + this.gatherers.splice(index, 1); + Engine.PostMessage(this.entity, MT_ResourceSupplyNumGatherersChanged, { "to": this.GetNumGatherers() }); + } + + index = this.activeGatherers.indexOf(gathererID); if (index == -1) return; + this.activeGatherers.splice(index, 1); + this.CheckTimers(); +}; - this.gatherers.splice(index, 1); - Engine.PostMessage(this.entity, MT_ResourceSupplyNumGatherersChanged, { "to": this.GetNumGatherers() }); +/** + * Checks whether a timer ought to be added or removed. + */ +ResourceSupply.prototype.CheckTimers = function() +{ + if (!this.template.Change || this.IsInfinite()) + return; + + 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; + } + + if (!this.timers[changeKey]) + this.StartTimer(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; + 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.StartTimer = 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.Change(this.cachedChanges[changeKey])) + 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); + if (!this.template.Change || 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; + + this.RecalculateValues(); +}; + +/** + * @param {{ "from": number, "to": number }} 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]); + } + else + this.RecalculateValues(); +}; + +/** + * @param {{ "entity": number, "newentity": number }} 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 @@ -2429,7 +2429,7 @@ // Check if the resource is full. // Will only be added if we're not already in. let cmpSupply = Engine.QueryInterface(this.gatheringTarget, IID_ResourceSupply); - if (!cmpSupply || !cmpSupply.AddGatherer(this.entity)) + if (!cmpSupply || !cmpSupply.AddActiveGatherer(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,19 +30,21 @@ }); let template = { - "Amount": 1000, + "Max": "1001", + "Initial": "1000", "Type": "food.meat", - "KillBeforeGather": false, - "MaxGatherers": 2 + "KillBeforeGather": "false", + "MaxGatherers": "2" }; let cmpResourceSupply = ConstructComponent(entity, "ResourceSupply", template); +cmpResourceSupply.OnOwnershipChanged({ "to": 1 }); TS_ASSERT(!cmpResourceSupply.IsInfinite()); TS_ASSERT(!cmpResourceSupply.GetKillBeforeGather()); -TS_ASSERT_EQUALS(cmpResourceSupply.GetMaxAmount(), 1000); +TS_ASSERT_EQUALS(cmpResourceSupply.GetMaxAmount(), 1001); TS_ASSERT_EQUALS(cmpResourceSupply.GetMaxGatherers(), 2); @@ -63,6 +70,18 @@ cmpResourceSupply.RemoveGatherer(70); TS_ASSERT_EQUALS(cmpResourceSupply.GetNumGatherers(), 1); +TS_ASSERT(cmpResourceSupply.AddActiveGatherer(70)); +TS_ASSERT_EQUALS(cmpResourceSupply.GetNumGatherers(), 2); + +cmpResourceSupply.RemoveGatherer(70); +TS_ASSERT_EQUALS(cmpResourceSupply.GetNumGatherers(), 1); + +TS_ASSERT(cmpResourceSupply.AddActiveGatherer(70)); +TS_ASSERT_EQUALS(cmpResourceSupply.GetNumGatherers(), 2); + +cmpResourceSupply.RemoveGatherer(70); +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 +91,658 @@ TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 0); // The resource is not available when exhausted TS_ASSERT(!cmpResourceSupply.IsAvailableTo(70)); + +cmpResourceSupply.RemoveGatherer(71); +TS_ASSERT_EQUALS(cmpResourceSupply.GetNumGatherers(), 0); + + +// Test Changes. + +let cmpTimer; +function reset(newTemplate) +{ + cmpTimer = ConstructComponent(SYSTEM_ENTITY, "Timer"); + cmpResourceSupply = ConstructComponent(entity, "ResourceSupply", newTemplate); + cmpResourceSupply.OnOwnershipChanged({ "to": 1 }); +} + +// Decay. +template = { + "Max": "1000", + "Type": "food.meat", + "KillBeforeGather": "false", + "Change": { + "Rotting": { + "Value": "-1", + "Interval": "1000" + } + }, + "MaxGatherers": "2" +}; +reset(template); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 1000); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 999); +cmpTimer.OnUpdate({ "turnLength": 5 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 1000); +cmpTimer.OnUpdate({ "turnLength": 3 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 997); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 996); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 1000); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 1000); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 1000); +cmpResourceSupply.TakeResources(6); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 994); +cmpTimer.OnUpdate({ "turnLength": 10 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 995); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 996); +cmpTimer.OnUpdate({ "turnLength": 5 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 995); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 994); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 995); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 996); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 990); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 991); +cmpTimer.OnUpdate({ "turnLength": 8 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 995); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 996); +cmpResourceSupply.TakeResources(6); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 990); +cmpTimer.OnUpdate({ "turnLength": 5 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 10); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 10); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 9); + +AddMock(entity, IID_Health, {}); // Bring the entity to life. + +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 10); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 6); + +DeleteMock(entity, IID_Health); // "Kill" the entity. + +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 7); + +// Decay *and* growth. +template = { + "Max": "10", + "Type": "food.meat", + "KillBeforeGather": "false", + "Change": { + "Rotting": { + "Value": "-1", + "Interval": "1000" + }, + "Growth": { + "Value": "1", + "Interval": "1000" + } + }, + "MaxGatherers": "2" +}; +reset(template); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 10); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 10); + +// 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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 6); +DeleteMock(entity, IID_Health); // "Kill" the entity. +// We overshoot one due to lateness. +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 7); + +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 6); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 8); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 11); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 12); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 13); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 8); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 9); +cmpTimer.OnUpdate({ "turnLength": 5 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), Infinity); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), Infinity); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), Infinity); + +// Decay when not gathered. +template = { + "Max": "10", + "Type": "food.meat", + "KillBeforeGather": "false", + "Change": { + "Decay": { + "Value": "-1", + "Interval": "1000", + "State": "notGathered" + } + }, + "MaxGatherers": "2" +}; +reset(template); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 10); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 9); +TS_ASSERT(cmpResourceSupply.AddActiveGatherer(70)); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 9); +cmpResourceSupply.RemoveGatherer(70); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 8); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 5); +TS_ASSERT(cmpResourceSupply.AddActiveGatherer(70)); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 6); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 7); +cmpResourceSupply.RemoveGatherer(70, 1); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 7); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 6); +TS_ASSERT(cmpResourceSupply.AddActiveGatherer(70)); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 7); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 8); +cmpResourceSupply.RemoveGatherer(70); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 5); +TS_ASSERT(cmpResourceSupply.AddActiveGatherer(70)); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 5); +AddMock(entity, IID_Health, { }); // Bring the entity to life. +cmpResourceSupply.CheckTimers(); // No other way to tell we've come to life. +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 6); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 7); +cmpResourceSupply.RemoveGatherer(70); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 7); +DeleteMock(entity, IID_Health); // "Kill" the entity. +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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(cmpResourceSupply.GetCurrentAmount(), 5); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 4); +TS_ASSERT(cmpResourceSupply.AddActiveGatherer(70)); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 4); +AddMock(entity, IID_Health, {}); // Bring the entity to life. +cmpResourceSupply.CheckTimers(); // No other way to tell we've come to life. +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 4); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 4); +cmpResourceSupply.RemoveGatherer(70); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 4); +DeleteMock(entity, IID_Health); // "Kill" the entity. +cmpResourceSupply.CheckTimers(); // No other way to tell we've died. +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.GetCurrentAmount(), 3); +cmpTimer.OnUpdate({ "turnLength": 1 }); +TS_ASSERT_EQUALS(cmpResourceSupply.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": ["Animal"], + "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_boar.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_boar.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_boar.xml @@ -25,7 +25,7 @@ gaia/fauna_boar.png - 150 + 150 3.0 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 @@ gaia/fauna_camel.png - 200 + 200 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_cattle_cow.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_cattle_cow.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_cattle_cow.xml @@ -19,7 +19,7 @@ gaia/fauna_cow.png - 300 + 300 5 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_cattle_sanga.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_cattle_sanga.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_cattle_sanga.xml @@ -19,7 +19,7 @@ gaia/fauna_sanga.png - 300 + 300 5 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_cattle_zebu.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_cattle_zebu.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_cattle_zebu.xml @@ -19,7 +19,7 @@ gaia/fauna_zebu.png - 300 + 300 5 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 @@ -19,7 +19,7 @@ upright - 40 + 40 5 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_donkey.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_donkey.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_donkey.xml @@ -13,7 +13,7 @@ gaia/fauna_donkey.png - 200 + 200 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 10.0 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 8.0 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 7.5 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 @@ -13,7 +13,7 @@ gaia/fauna_giraffe.png - 350 + 350 14.0 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 @@ gaia/fauna_giraffe.png - 150 + 150 8.5 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 @@ -19,8 +19,21 @@ gaia/fauna_goat.png - 70 + 500 + 100 2 + + + 1 + 1000 + alive + + + -2 + 1000 + dead notGathered + + Index: binaries/data/mods/public/simulation/templates/gaia/fauna_hippopotamus.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_hippopotamus.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_hippopotamus.xml @@ -26,7 +26,7 @@ 50 - 400 + 400 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 @@ gaia/fauna_horse.png - 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 @@ gaia/fauna_muskox.png - 200 + 200 4.5 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 @@ -16,7 +16,7 @@ upright - 50 + 50 5 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_pig.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_pig.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_pig.xml @@ -19,7 +19,7 @@ gaia/fauna_pig.png - 150 + 150 4 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 @@ -11,7 +11,7 @@ Piglet - 10 + 10 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 @@ -16,7 +16,7 @@ false - 50 + 50 2.0 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_rhinoceros_white.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_rhinoceros_white.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_rhinoceros_white.xml @@ -25,7 +25,7 @@ gaia/fauna_rhino.png - 300 + 300 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_sheep.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_sheep.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_sheep.xml @@ -19,7 +19,7 @@ gaia/fauna_sheep.png - 100 + 100 3 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 @@ -27,7 +27,7 @@ gaia/fauna_walrus.png - 300 + 300 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 @@ gaia/fauna_wildebeest.png - 150 + 150 4.0 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 @@ gaia/fauna_zebra.png - 150 + 150 3.5 Index: binaries/data/mods/public/simulation/templates/gaia/fruit/apple.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/apple.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/apple.xml @@ -4,7 +4,7 @@ Apple - 400 + 400 flora/trees/apple_bloom.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/banana.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/banana.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/banana.xml @@ -4,7 +4,7 @@ Banana - 400 + 400 flora/trees/banana.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/berry_01.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/berry_01.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/berry_01.xml @@ -4,7 +4,7 @@ Berries - 200 + 200 props/flora/berry_bush.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/berry_02.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/berry_02.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/berry_02.xml @@ -4,7 +4,7 @@ Berries - 200 + 200 props/flora/berry_bush_02.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/berry_03.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/berry_03.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/berry_03.xml @@ -4,7 +4,7 @@ Berries - 200 + 200 props/flora/berry_bush_03.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/berry_04.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/berry_04.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/berry_04.xml @@ -4,7 +4,7 @@ Berries - 200 + 200 props/flora/berry_bush_autumn_01.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/berry_05.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/berry_05.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/berry_05.xml @@ -4,7 +4,7 @@ Berries - 200 + 200 props/flora/bush_berries_large.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/date.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/date.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/date.xml @@ -4,7 +4,7 @@ Date Palm - 400 + 400 flora/trees/palm_date_new_fruit.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/fig.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/fig.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/fig.xml @@ -10,7 +10,7 @@ - 500 + 500 flora/trees/fig.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/grapes.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/grapes.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/grapes.xml @@ -5,7 +5,7 @@ gaia/flora_bush_grapes.png - 200 + 200 props/flora/forage_grapes.xml Index: binaries/data/mods/public/simulation/templates/gaia/fruit/olive.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fruit/olive.xml +++ binaries/data/mods/public/simulation/templates/gaia/fruit/olive.xml @@ -4,7 +4,7 @@ Olive - 400 + 400 flora/trees/olive.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/gaia/tree/acacia.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/acacia.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/acacia.xml @@ -4,7 +4,7 @@ Acacia - 200 + 200 flora/trees/acacia.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/aleppo_pine.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/aleppo_pine.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/aleppo_pine.xml @@ -4,7 +4,7 @@ Aleppo Pine - 200 + 200 flora/trees/aleppo_pine.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/bamboo.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/bamboo.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/bamboo.xml @@ -4,7 +4,7 @@ Bamboo - 200 + 200 flora/trees/bamboo.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/bamboo_dragon.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/bamboo_dragon.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/bamboo_dragon.xml @@ -11,7 +11,7 @@ - 1000 + 1000 12 Index: binaries/data/mods/public/simulation/templates/gaia/tree/bamboo_single.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/bamboo_single.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/bamboo_single.xml @@ -4,7 +4,7 @@ Bamboo - 100 + 100 1 Index: binaries/data/mods/public/simulation/templates/gaia/tree/banyan.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/banyan.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/banyan.xml @@ -11,7 +11,7 @@ - 600 + 600 12 Index: binaries/data/mods/public/simulation/templates/gaia/tree/baobab.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/baobab.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/baobab.xml @@ -11,7 +11,7 @@ - 400 + 400 9 Index: binaries/data/mods/public/simulation/templates/gaia/tree/baobab_1_sapling.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/baobab_1_sapling.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/baobab_1_sapling.xml @@ -4,7 +4,7 @@ Baobab Sapling - 50 + 50 2 Index: binaries/data/mods/public/simulation/templates/gaia/tree/baobab_2_young.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/baobab_2_young.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/baobab_2_young.xml @@ -4,7 +4,7 @@ Young Baobab - 200 + 200 flora/trees/baobab_new_young.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/baobab_3_mature.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/baobab_3_mature.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/baobab_3_mature.xml @@ -11,7 +11,7 @@ - 600 + 600 12 Index: binaries/data/mods/public/simulation/templates/gaia/tree/baobab_4_dead.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/baobab_4_dead.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/baobab_4_dead.xml @@ -11,7 +11,7 @@ - 550 + 550 12 Index: binaries/data/mods/public/simulation/templates/gaia/tree/bush_badlands.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/bush_badlands.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/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/tree/bush_temperate.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/bush_temperate.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/bush_temperate.xml @@ -4,7 +4,7 @@ Bush - 50 + 50 flora/trees/temperate_bush_biome.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/bush_temperate_winter.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/bush_temperate_winter.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/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/tree/bush_tropic.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/bush_tropic.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/bush_tropic.xml @@ -4,7 +4,7 @@ Bush - 50 + 50 flora/trees/tropic_bush_biome.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/carob.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/carob.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/carob.xml @@ -4,7 +4,7 @@ Carob - 200 + 200 flora/trees/carob.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/cedar_atlas_1_sapling.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cedar_atlas_1_sapling.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/tree/cedar_atlas_2_young.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cedar_atlas_2_young.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/cedar_atlas_2_young.xml @@ -4,7 +4,7 @@ Atlas Cedar - 200 + 200 flora/trees/cedar_atlas_young.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/cedar_atlas_3_mature.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cedar_atlas_3_mature.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/tree/cedar_atlas_4_dead.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cedar_atlas_4_dead.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/cedar_atlas_4_dead.xml @@ -4,7 +4,7 @@ Atlas Cedar - 300 + 300 flora/trees/cedar_atlas_dead.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/cretan_date_palm_patch.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cretan_date_palm_patch.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/cretan_date_palm_patch.xml @@ -11,7 +11,7 @@ - 300 + 300 12 Index: binaries/data/mods/public/simulation/templates/gaia/tree/cretan_date_palm_short.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cretan_date_palm_short.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/tree/cretan_date_palm_tall.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cretan_date_palm_tall.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/cretan_date_palm_tall.xml @@ -4,7 +4,7 @@ Cretan Date Palm - 200 + 200 flora/trees/palm_cretan_date_tall.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/cypress.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cypress.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/cypress.xml @@ -4,7 +4,7 @@ Cypress - 200 + 200 flora/trees/mediterranean_cypress.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/cypress_wild.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cypress_wild.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/cypress_wild.xml @@ -4,7 +4,7 @@ Cypress - 200 + 200 flora/trees/cypress_mediterranean_wild.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/cypress_windswept.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/cypress_windswept.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/cypress_windswept.xml @@ -4,7 +4,7 @@ Cypress - 200 + 200 flora/trees/cypress_mediterranean_windswept.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/date_palm.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/date_palm.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/date_palm.xml @@ -4,7 +4,7 @@ Date Palm - 200 + 200 flora/trees/palm_date_new.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/date_palm_dead.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/date_palm_dead.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/date_palm_dead.xml @@ -4,7 +4,7 @@ Date Palm - 200 + 200 flora/trees/palm_date_dead.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/dead.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/dead.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/dead.xml @@ -4,7 +4,7 @@ Deciduous Tree - 200 + 200 flora/trees/temperate_dead_forest.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/elm.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/elm.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/elm.xml @@ -4,7 +4,7 @@ Elm - 200 + 200 flora/trees/elm.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/elm_dead.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/elm_dead.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/elm_dead.xml @@ -4,7 +4,7 @@ Elm - 200 + 200 flora/trees/elm_dead.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/euro_beech.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/euro_beech.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/euro_beech.xml @@ -4,7 +4,7 @@ European Beech - 200 + 200 flora/trees/european_beech.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/euro_beech_aut.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/euro_beech_aut.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/euro_beech_aut.xml @@ -4,7 +4,7 @@ European Beech - 200 + 200 flora/trees/european_beech_aut.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/euro_birch.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/euro_birch.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/tree/fir.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/fir.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/fir.xml @@ -4,7 +4,7 @@ Fir - 200 + 200 flora/trees/fir_tree.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/fir_sapling.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/fir_sapling.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/tree/fir_winter.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/fir_winter.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/fir_winter.xml @@ -4,7 +4,7 @@ Fir - 200 + 200 flora/trees/fir_tree_winter.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/juniper_prickly.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/juniper_prickly.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/juniper_prickly.xml @@ -4,7 +4,7 @@ Prickly Juniper - 200 + 200 flora/trees/juniper_prickly.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/mangrove.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/mangrove.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/mangrove.xml @@ -4,7 +4,7 @@ Mangrove - 200 + 200 flora/trees/mangrove.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/maple.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/maple.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/maple.xml @@ -4,7 +4,7 @@ Maple - 300 + 300 flora/trees/temperate_maple_trees.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/medit_fan_palm.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/medit_fan_palm.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/medit_fan_palm.xml @@ -4,7 +4,7 @@ Mediterranean Fan Palm - 200 + 200 flora/trees/palm_medit_fan_new.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/oak.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/oak.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/oak.xml @@ -4,7 +4,7 @@ Oak - 200 + 200 flora/trees/oak.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/oak_aut.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/oak_aut.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/oak_aut.xml @@ -4,7 +4,7 @@ Oak - 200 + 200 flora/trees/oak_aut.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/oak_aut_new.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/oak_aut_new.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/oak_aut_new.xml @@ -4,7 +4,7 @@ Oak - 200 + 200 flora/trees/oak_new_aut.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/oak_dead.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/oak_dead.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/oak_dead.xml @@ -4,7 +4,7 @@ Oak - 200 + 200 flora/trees/oak_dead.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/oak_holly.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/oak_holly.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/oak_holly.xml @@ -4,7 +4,7 @@ Holly Oak - 200 + 200 flora/trees/oak_holly.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/oak_hungarian.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/oak_hungarian.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/oak_hungarian.xml @@ -4,7 +4,7 @@ Hungarian Oak - 200 + 200 flora/trees/oak_hungarian.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/oak_hungarian_autumn.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/oak_hungarian_autumn.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/oak_hungarian_autumn.xml @@ -4,7 +4,7 @@ Hungarian Oak - 200 + 200 flora/trees/oak_hungarian_autumn.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/oak_large.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/oak_large.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/oak_large.xml @@ -4,7 +4,7 @@ Large Oak - 300 + 300 flora/trees/oak_large.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/oak_new.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/oak_new.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/oak_new.xml @@ -4,7 +4,7 @@ Oak - 200 + 200 flora/trees/oak_new.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/palm_areca.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/palm_areca.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/palm_areca.xml @@ -4,7 +4,7 @@ Areca Palm - 200 + 200 flora/trees/palm_areca.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/palm_doum.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/palm_doum.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/palm_doum.xml @@ -4,7 +4,7 @@ Doum Palm - 200 + 200 flora/trees/palm_doum.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/palm_palmyra.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/palm_palmyra.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/palm_palmyra.xml @@ -4,7 +4,7 @@ Palmyra Palm - 200 + 200 flora/trees/palm_palmyra.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/palm_tropic.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/palm_tropic.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/palm_tropic.xml @@ -4,7 +4,7 @@ Palm - 200 + 200 flora/trees/palm_tropical_tall.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/palm_tropical.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/palm_tropical.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/palm_tropical.xml @@ -4,7 +4,7 @@ Tropical Palm - 200 + 200 flora/trees/palm_tropical.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/pine.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/pine.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/pine.xml @@ -4,7 +4,7 @@ Pine - 200 + 200 flora/trees/pine.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/pine_black.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/pine_black.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/pine_black.xml @@ -4,7 +4,7 @@ Black Pine - 200 + 200 flora/trees/pine_black.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/pine_black_dead.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/pine_black_dead.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/pine_black_dead.xml @@ -4,7 +4,7 @@ Black Pine - 200 + 200 flora/trees/pine_black_dead.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/pine_maritime.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/pine_maritime.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/pine_maritime.xml @@ -4,7 +4,7 @@ Maritime Pine - 200 + 200 flora/trees/pine_maritime.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/pine_maritime_short.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/pine_maritime_short.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/pine_maritime_short.xml @@ -4,7 +4,7 @@ Maritime Pine - 200 + 200 flora/trees/pine_maritime_short.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/pine_w.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/pine_w.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/pine_w.xml @@ -4,7 +4,7 @@ Pine - 200 + 200 flora/trees/pine_w.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/poplar.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/poplar.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/poplar.xml @@ -4,7 +4,7 @@ Poplar - 200 + 200 flora/trees/poplar.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/poplar_dead.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/poplar_dead.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/poplar_dead.xml @@ -4,7 +4,7 @@ Poplar - 200 + 200 flora/trees/poplar_dead.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/poplar_lombardy.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/poplar_lombardy.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/poplar_lombardy.xml @@ -4,7 +4,7 @@ Black Poplar - 200 + 200 flora/trees/poplar_lombardy.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/poplar_lombardy_autumn.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/poplar_lombardy_autumn.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/tree/poplar_lombardy_dead.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/poplar_lombardy_dead.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/poplar_lombardy_dead.xml @@ -4,7 +4,7 @@ Black Poplar - 200 + 200 flora/trees/poplar_lombardy_dead.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/senegal_date_palm.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/senegal_date_palm.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/senegal_date_palm.xml @@ -4,7 +4,7 @@ Senegal Date Palm - 200 + 200 flora/trees/palm_senegal_date.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/strangler.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/strangler.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/strangler.xml @@ -11,7 +11,7 @@ - 500 + 500 10 Index: binaries/data/mods/public/simulation/templates/gaia/tree/tamarix.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/tamarix.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/tamarix.xml @@ -4,7 +4,7 @@ Tamarix - 200 + 200 flora/trees/tamarix.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/teak.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/teak.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/teak.xml @@ -11,7 +11,7 @@ - 500 + 500 flora/trees/teak.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/temperate.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/temperate.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/tree/temperate_autumn.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/temperate_autumn.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/tree/temperate_winter.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/temperate_winter.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/tree/toona.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/toona.xml +++ binaries/data/mods/public/simulation/templates/gaia/tree/toona.xml @@ -4,7 +4,7 @@ Toona - 200 + 200 flora/trees/tree_tropic.xml Index: binaries/data/mods/public/simulation/templates/gaia/tree/tropic_rainforest.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/tree/tropic_rainforest.xml +++ binaries/data/mods/public/simulation/templates/gaia/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/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_fruit.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_gaia_fruit.xml +++ binaries/data/mods/public/simulation/templates/template_gaia_fruit.xml @@ -20,7 +20,7 @@ false - 1 + 1 food.fruit 8 Index: binaries/data/mods/public/simulation/templates/template_gaia_ore.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_gaia_ore.xml +++ binaries/data/mods/public/simulation/templates/template_gaia_ore.xml @@ -21,7 +21,7 @@ false - 1000 + 1000 metal.ore 12 Index: binaries/data/mods/public/simulation/templates/template_gaia_ore_large.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_gaia_ore_large.xml +++ binaries/data/mods/public/simulation/templates/template_gaia_ore_large.xml @@ -8,7 +8,7 @@ - 5000 + 5000 24 Index: binaries/data/mods/public/simulation/templates/template_gaia_rock.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_gaia_rock.xml +++ binaries/data/mods/public/simulation/templates/template_gaia_rock.xml @@ -21,7 +21,7 @@ false - 1000 + 1000 stone.rock 12 Index: binaries/data/mods/public/simulation/templates/template_gaia_rock_large.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_gaia_rock_large.xml +++ binaries/data/mods/public/simulation/templates/template_gaia_rock_large.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_gaia_tree.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_gaia_tree.xml +++ binaries/data/mods/public/simulation/templates/template_gaia_tree.xml @@ -20,7 +20,7 @@ false - 1 + 1 wood.tree 8 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 @@ -45,7 +45,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 @@ -5,7 +5,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 @@ -8,7 +8,7 @@ true - 100 + 100 food.meat 8 Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_aggressive_bear.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_aggressive_bear.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_aggressive_bear.xml @@ -13,7 +13,7 @@ - 300 + 300 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 @@ -4,7 +4,7 @@ Elephant - 100 + 100 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 @@ -20,7 +20,7 @@ true - 2000 + 2000 food.fish 5