Index: binaries/data/mods/public/simulation/ai/common-api/entity.js =================================================================== --- binaries/data/mods/public/simulation/ai/common-api/entity.js +++ binaries/data/mods/public/simulation/ai/common-api/entity.js @@ -430,13 +430,12 @@ * Returns whether this is an animal that is too difficult to hunt. */ "isHuntable": function() { - if(!this.get("ResourceSupply/KillBeforeGather")) + if (!this.get("ResourceSupply/KillBeforeGather")) return false; - // do not hunt retaliating animals (animals without UnitAI are dead animals) - let behaviour = this.get("UnitAI/NaturalBehaviour"); - return !behaviour || - behaviour != "violent" && behaviour != "aggressive" && behaviour != "defensive"; + // Do not hunt retaliating animals (animals without UnitAI are dead animals). + // Assume entities which can attack, will attack. + return !this.get("UnitAI") || !this.get("Attack"); }, "walkSpeed": function() { return +this.get("UnitMotion/WalkSpeed"); }, Index: binaries/data/mods/public/simulation/components/BuildingAI.js =================================================================== --- binaries/data/mods/public/simulation/components/BuildingAI.js +++ binaries/data/mods/public/simulation/components/BuildingAI.js @@ -179,17 +179,16 @@ */ BuildingAI.prototype.OnRangeUpdate = function(msg) { - - var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); + let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); if (!cmpAttack) return; - // Target enemy units except non-dangerous animals + // Target enemy units except ones that don't start to attack us out of the blue. if (msg.tag == this.gaiaUnitsQuery) { msg.added = msg.added.filter(e => { let cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI); - return cmpUnitAI && (!cmpUnitAI.IsAnimal() || cmpUnitAI.IsDangerousAnimal()); + return cmpUnitAI && cmpUnitAI.GetStance().targetVisibleEnemies; }); } else if (msg.tag != this.enemyUnitsQuery) 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 @@ -10,6 +10,8 @@ "defensive" + "passive" + "standground" + + "skittish" + + "passive-defensive" + "" + "" + "" + @@ -26,16 +28,6 @@ "" + "" + "" + - "" + - "" + - "violent" + - "aggressive" + - "defensive" + - "passive" + - "skittish" + - "domestic" + - "" + - "" + "" + "" + "" + @@ -61,6 +53,7 @@ // possibly overriding user orders! // There are some response options, triggered when targets are detected: // respondFlee: run away +// respondFleeOnSight: run away when an enemy is sighted // respondChase: start chasing after the enemy // respondChaseBeyondVision: start chasing, and don't stop even if it's out // of this unit's vision range (though still visible to the player) @@ -73,6 +66,7 @@ "targetVisibleEnemies": true, "targetAttackersAlways": true, "respondFlee": false, + "respondFleeOnSight": false, "respondChase": true, "respondChaseBeyondVision": true, "respondStandGround": false, @@ -83,6 +77,7 @@ "targetVisibleEnemies": true, "targetAttackersAlways": false, "respondFlee": false, + "respondFleeOnSight": false, "respondChase": true, "respondChaseBeyondVision": false, "respondStandGround": false, @@ -93,6 +88,7 @@ "targetVisibleEnemies": true, "targetAttackersAlways": false, "respondFlee": false, + "respondFleeOnSight": false, "respondChase": false, "respondChaseBeyondVision": false, "respondStandGround": false, @@ -103,6 +99,7 @@ "targetVisibleEnemies": false, "targetAttackersAlways": false, "respondFlee": true, + "respondFleeOnSight": false, "respondChase": false, "respondChaseBeyondVision": false, "respondStandGround": false, @@ -113,17 +110,41 @@ "targetVisibleEnemies": true, "targetAttackersAlways": false, "respondFlee": false, + "respondFleeOnSight": false, "respondChase": false, "respondChaseBeyondVision": false, "respondStandGround": true, "respondHoldGround": false, "selectable": true }, + "skittish": { + "targetVisibleEnemies": false, + "targetAttackersAlways": false, + "respondFlee": true, + "respondFleeOnSight": true, + "respondChase": false, + "respondChaseBeyondVision": false, + "respondStandGround": false, + "respondHoldGround": false, + "selectable": false + }, + "passive-defensive": { + "targetVisibleEnemies": false, + "targetAttackersAlways": false, + "respondFlee": false, + "respondFleeOnSight": false, + "respondChase": false, + "respondChaseBeyondVision": false, + "respondStandGround": false, + "respondHoldGround": true, + "selectable": false + }, "none": { // Only to be used by AI or trigger scripts "targetVisibleEnemies": false, "targetAttackersAlways": false, "respondFlee": false, + "respondFleeOnSight": false, "respondChase": false, "respondChaseBeyondVision": false, "respondStandGround": false, @@ -263,10 +284,7 @@ this.StopMoving(); this.FinishOrder(); - // No orders left, we're an individual now - if (this.IsAnimal()) - this.SetNextState("ANIMAL.IDLE"); - else if (this.IsFormationMember()) + if (this.IsFormationMember()) this.SetNextState("FORMATIONMEMBER.IDLE"); else this.SetNextState("INDIVIDUAL.IDLE"); @@ -293,10 +311,7 @@ this.SetHeldPosition(this.order.data.x, this.order.data.z); // It's not too bad if we don't arrive at exactly the right position. this.order.data.relaxed = true; - if (this.IsAnimal()) - this.SetNextState("ANIMAL.WALKING"); - else - this.SetNextState("INDIVIDUAL.WALKING"); + this.SetNextState("INDIVIDUAL.WALKING"); }, "Order.WalkAndFight": function(msg) { @@ -319,10 +334,7 @@ this.SetHeldPosition(this.order.data.x, this.order.data.z); // It's not too bad if we don't arrive at exactly the right position. this.order.data.relaxed = true; - if (this.IsAnimal()) - this.SetNextState("ANIMAL.WALKING"); // WalkAndFight not applicable for animals - else - this.SetNextState("INDIVIDUAL.WALKINGANDFIGHTING"); + this.SetNextState("INDIVIDUAL.WALKINGANDFIGHTING"); }, @@ -353,11 +365,7 @@ // It's not too bad if we don't arrive at exactly the right position. this.order.data.relaxed = true; - - if (this.IsAnimal()) - this.SetNextState("ANIMAL.WALKING"); - else - this.SetNextState("INDIVIDUAL.WALKING"); + this.SetNextState("INDIVIDUAL.WALKING"); }, "Order.PickupUnit": function(msg) { @@ -402,10 +410,7 @@ }, "Order.Flee": function(msg) { - if (this.IsAnimal()) - this.SetNextState("ANIMAL.FLEEING"); - else - this.SetNextState("INDIVIDUAL.FLEEING"); + this.SetNextState("INDIVIDUAL.FLEEING"); }, "Order.Attack": function(msg) { @@ -446,10 +451,7 @@ if (!this.EnsureCorrectPackStateForAttack(false)) return; - if (this.IsAnimal()) - this.SetNextState("ANIMAL.COMBAT.ATTACKING"); - else - this.SetNextState("INDIVIDUAL.COMBAT.ATTACKING"); + this.SetNextState("INDIVIDUAL.COMBAT.ATTACKING"); return; } @@ -474,10 +476,7 @@ if (!this.EnsureCorrectPackStateForAttack(true)) return; - if (this.IsAnimal()) - this.SetNextState("ANIMAL.COMBAT.APPROACHING"); - else - this.SetNextState("INDIVIDUAL.COMBAT.APPROACHING"); + this.SetNextState("INDIVIDUAL.COMBAT.APPROACHING"); }, "Order.Patrol": function(msg) { @@ -637,10 +636,7 @@ } else if (this.IsGarrisoned()) { - if (this.IsAnimal()) - this.SetNextState("ANIMAL.GARRISON.GARRISONED"); - else - this.SetNextState("INDIVIDUAL.GARRISON.GARRISONED"); + this.SetNextState("INDIVIDUAL.GARRISON.GARRISONED"); return; } @@ -653,10 +649,7 @@ return; } - if (this.IsAnimal()) - this.SetNextState("ANIMAL.GARRISON.APPROACHING"); - else - this.SetNextState("INDIVIDUAL.GARRISON.APPROACHING"); + this.SetNextState("INDIVIDUAL.GARRISON.APPROACHING"); }, "Order.Ungarrison": function() { @@ -1323,15 +1316,6 @@ }, "enter": function() { - if (this.IsAnimal()) - { - // Animals can't go in formation. - warn("Entity " + this.entity + " was put in FORMATIONMEMBER state but is an animal"); - this.FinishOrder(); - this.SetNextState("ANIMAL.IDLE"); - return true; - } - let cmpFormation = Engine.QueryInterface(this.formationController, IID_Formation); if (cmpFormation) { @@ -1420,13 +1404,6 @@ // States for entities not part of a formation: "INDIVIDUAL": { - "enter": function() { - // Sanity-checking - if (this.IsAnimal()) - error("Animal got moved into INDIVIDUAL.* state"); - return false; - }, - "Attacked": function(msg) { // Respond to attack if we always target attackers or during unforced orders if (this.GetStance().targetAttackersAlways || !this.order || !this.order.data || !this.order.data.force) @@ -1583,6 +1560,52 @@ this.isIdle = true; Engine.PostMessage(this.entity, MT_UnitIdleChanged, { "idle": this.isIdle }); } + + // Go linger first to prevent all roaming entities + // to move all at the same time on map init. + if (this.template.RoamDistance) + this.SetNextState("LINGERING"); + }, + + "ROAMING": { + "enter": function() { + this.SetFacePointAfterMove(false); + this.MoveRandomly(+this.template.RoamDistance); + this.StartTimer(randIntInclusive(+this.template.RoamTimeMin, +this.template.RoamTimeMax)); + return false; + }, + + "leave": function() { + this.StopMoving(); + this.StopTimer(); + this.SetFacePointAfterMove(true); + }, + + "Timer": function(msg) { + this.SetNextState("LINGERING"); + }, + + "MovementUpdate": function() { + this.MoveRandomly(+this.template.RoamDistance); + }, + }, + + "LINGERING": { + "enter": function() { + // ToDo: rename animations? + this.SelectAnimation("feeding"); + this.StartTimer(randIntInclusive(+this.template.FeedTimeMin, +this.template.FeedTimeMax)); + return false; + }, + + "leave": function() { + this.ResetAnimation(); + this.StopTimer(); + }, + + "Timer": function(msg) { + this.SetNextState("ROAMING"); + }, }, }, @@ -1996,9 +2019,7 @@ cmpBuildingAI.SetUnitAITarget(this.order.data.target); return false; } - - let cmpUnitAI = Engine.QueryInterface(this.order.data.target, IID_UnitAI); - this.shouldCheer = cmpUnitAI && (!cmpUnitAI.IsAnimal() || cmpUnitAI.IsDangerousAnimal()); + this.shouldCheer = true; return false; }, @@ -2040,7 +2061,7 @@ } // PerformAttack might have triggered messages that moved us to another state. - // (use 'ends with' to handle animals/formation members copying our state). + // (use 'ends with' to handle formation members copying our state). if (!this.GetCurrentState().endsWith("COMBAT.ATTACKING")) return; @@ -3260,154 +3281,6 @@ }, }, }, - - "ANIMAL": { - "Attacked": function(msg) { - if (this.template.NaturalBehaviour == "skittish" || - this.template.NaturalBehaviour == "passive") - { - this.Flee(msg.data.attacker, false); - } - else if (this.IsDangerousAnimal() || this.template.NaturalBehaviour == "defensive") - { - if (this.CanAttack(msg.data.attacker)) - this.Attack(msg.data.attacker, false); - } - else if (this.template.NaturalBehaviour == "domestic") - { - // Never flee, stop what we were doing - this.SetNextState("IDLE"); - } - }, - - "Order.LeaveFoundation": function(msg) { - // Move a tile outside the building - if (this.CheckTargetRangeExplicit(msg.data.target, g_LeaveFoundationRange, -1)) - { - this.FinishOrder(); - return; - } - this.order.data.min = g_LeaveFoundationRange; - this.SetNextState("WALKING"); - }, - - "IDLE": { - // (We need an IDLE state so that FinishOrder works) - - "enter": function() { - // Start feeding immediately - this.SetNextState("FEEDING"); - return true; - }, - }, - - "ROAMING": { - "enter": function() { - // Walk in a random direction - this.SetFacePointAfterMove(false); - this.MoveRandomly(+this.template.RoamDistance); - // Set a random timer to switch to feeding state - this.StartTimer(randIntInclusive(+this.template.RoamTimeMin, +this.template.RoamTimeMax)); - return false; - }, - - "leave": function() { - this.StopMoving(); - this.StopTimer(); - this.SetFacePointAfterMove(true); - }, - - "LosRangeUpdate": function(msg) { - if (msg && msg.data && msg.data.added && msg.data.added.length) - this.RespondToSightedEntities(msg.data.added); - }, - - "LosAttackRangeUpdate": function(msg) { - if (this.IsDangerousAnimal() && msg && msg.data && msg.data.added && msg.data.added.length) - this.AttackVisibleEntity(msg.data.added); - - // TODO: if two units enter our range together, we'll attack the - // first and then the second won't trigger another LosAttackRangeUpdate - // so we won't notice it. Probably we should do something with - // ResetActiveQuery in ROAMING.enter/FEEDING.enter in order to - // find any units that are already in range. - }, - - "Timer": function(msg) { - this.SetNextState("FEEDING"); - }, - - "MovementUpdate": function() { - this.MoveRandomly(+this.template.RoamDistance); - }, - }, - - "FEEDING": { - "enter": function() { - // Stop and eat for a while - this.SelectAnimation("feeding"); - this.StopMoving(); - this.StartTimer(randIntInclusive(+this.template.FeedTimeMin, +this.template.FeedTimeMax)); - return false; - }, - - "leave": function() { - this.ResetAnimation(); - this.StopTimer(); - }, - - "LosRangeUpdate": function(msg) { - if (msg && msg.data && msg.data.added && msg.data.added.length) - this.RespondToSightedEntities(msg.data.added); - }, - - "LosAttackRangeUpdate": function(msg) { - if (this.template.NaturalBehaviour == "violent" && msg && msg.data && msg.data.added && msg.data.added.length) - this.AttackVisibleEntity(msg.data.added); - }, - - "Timer": function(msg) { - this.SetNextState("ROAMING"); - }, - }, - - "FLEEING": "INDIVIDUAL.FLEEING", // reuse the same fleeing behaviour for animals - - "COMBAT": "INDIVIDUAL.COMBAT", // reuse the same combat behaviour for animals - - "WALKING": "INDIVIDUAL.WALKING", // reuse the same walking behaviour for animals - // only used for domestic animals - - "CHEERING": { - "enter": function() { - this.SelectAnimation("promotion"); - this.StartTimer(2800); - return false; - }, - - "leave": function() { - this.StopTimer(); - this.ResetAnimation(); - }, - - "LosRangeUpdate": function(msg) { - if (msg && msg.data && msg.data.added && msg.data.added.length) - this.RespondToSightedEntities(msg.data.added); - }, - - "LosAttackRangeUpdate": function(msg) { - if (this.template.NaturalBehaviour == "violent" && msg && msg.data && msg.data.added && msg.data.added.length) - this.AttackVisibleEntity(msg.data.added); - }, - - "Timer": function(msg) { - this.FinishOrder(); - }, - }, - - // Reuse the same garrison behaviour for animals. - "GARRISON": "INDIVIDUAL.GARRISON", - }, }; UnitAI.prototype.Init = function() @@ -3451,17 +3324,13 @@ return (this.formationController != INVALID_ENTITY); }; +// Can be removed after D1960. UnitAI.prototype.IsAnimal = function() { - return (this.template.NaturalBehaviour ? true : false); -}; - -UnitAI.prototype.IsDangerousAnimal = function() -{ - return (this.IsAnimal() && (this.template.NaturalBehaviour == "violent" || - this.template.NaturalBehaviour == "aggressive")); + return !!this.template.RoamDistance; }; +// Can be removed after D1960. UnitAI.prototype.IsDomestic = function() { var cmpIdentity = Engine.QueryInterface(this.entity, IID_Identity); @@ -3553,9 +3422,7 @@ UnitAI.prototype.OnCreate = function() { - if (this.IsAnimal()) - this.UnitFsm.Init(this, "ANIMAL.FEEDING"); - else if (this.IsFormationController()) + if (this.IsFormationController()) this.UnitFsm.Init(this, "FORMATIONCONTROLLER.IDLE"); else this.UnitFsm.Init(this, "INDIVIDUAL.IDLE"); @@ -3665,7 +3532,7 @@ UnitAI.prototype.SetupRangeQueries = function() { // Only skittish animals use this for now. - if (this.template.NaturalBehaviour && this.template.NaturalBehaviour == "skittish") + if (this.GetStance().respondFleeOnSight) this.SetupLOSRangeQuery(); if (this.IsHealer()) @@ -5057,7 +4924,7 @@ if (!ents || !ents.length) return false; - if (this.template.NaturalBehaviour && this.template.NaturalBehaviour == "skittish") + if (this.GetStance().respondFleeOnSight) { this.Flee(ents[0], false); return true; @@ -6007,17 +5874,23 @@ return []; let attackfilter = function(e) { + if (!cmpAttack.CanAttack(e)) + return false; + let cmpOwnership = Engine.QueryInterface(e, IID_Ownership); if (cmpOwnership && cmpOwnership.GetOwner() > 0) return true; + + // Only attack Gaia entities that will attack (us). let cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI); - return cmpUnitAI && (!cmpUnitAI.IsAnimal() || cmpUnitAI.IsDangerousAnimal()); + return cmpUnitAI && cmpUnitAI.GetStance().targetVisibleEnemies; }; let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); let entities = cmpRangeManager.ResetActiveQuery(this.losAttackRangeQuery); - let targets = entities.filter(function(v) { return cmpAttack.CanAttack(v) && attackfilter(v); }) - .sort(function(a, b) { return cmpAttack.CompareEntitiesByPreference(a, b); }); + let targets = entities.filter(attackfilter).sort(function(a, b) { + return cmpAttack.CompareEntitiesByPreference(a, b); + }); return targets; }; @@ -6360,11 +6233,9 @@ && this.GetCurrentState() == "FORMATIONCONTROLLER.COMBAT.ATTACKING"; }; -//// Animal specific functions //// - UnitAI.prototype.MoveRandomly = function(distance) { - // To minimize drift all across the map, animals describe circles + // To minimize drift all across the map, describe circles // approximated by polygons. // And to avoid getting stuck in obstacles or narrow spaces, each side // of the polygon is obtained by trying to go away from a point situated @@ -6418,16 +6289,21 @@ if (!ents.length) return false; - var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); + let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); if (!cmpAttack) return false; - var attackfilter = function(e) { - var cmpOwnership = Engine.QueryInterface(e, IID_Ownership); + let attackfilter = function(e) { + if (!cmpAttack.CanAttack(e)) + return false; + + let cmpOwnership = Engine.QueryInterface(e, IID_Ownership); if (cmpOwnership && cmpOwnership.GetOwner() > 0) return true; - var cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI); - return cmpUnitAI && (!cmpUnitAI.IsAnimal() || cmpUnitAI.IsDangerousAnimal()); + + // Only attack Gaia entities that will attack (us) automatically. + let cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI); + return cmpUnitAI && cmpUnitAI.GetStance().targetVisibleEnemies; }; let entsByPreferences = {}; Index: binaries/data/mods/public/simulation/components/tests/test_UnitAI.js =================================================================== --- binaries/data/mods/public/simulation/components/tests/test_UnitAI.js +++ binaries/data/mods/public/simulation/components/tests/test_UnitAI.js @@ -204,7 +204,7 @@ GetHitpoints: function() { return 10; }, }); AddMock(enemy, IID_UnitAI, { - IsAnimal: function() { return false; } + "GetStance": function() { return { "targetVisibleEnemies": true } } }); } else if (mode == 2) Index: binaries/data/mods/public/simulation/templates/gaia/fauna_camel_trainable.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_camel_trainable.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_camel_trainable.xml @@ -1,7 +1,7 @@ - domestic + passive false Index: binaries/data/mods/public/simulation/templates/gaia/fauna_horse_trainable.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_horse_trainable.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_horse_trainable.xml @@ -1,7 +1,7 @@ - domestic + passive false 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 @@ -31,7 +31,6 @@ 2.5 - domestic 4.0 12.0 2000 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml @@ -35,7 +35,6 @@ - passive 100.0 60.0 100000 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_wolf_arctic_domestic.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_wolf_arctic_domestic.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_wolf_arctic_domestic.xml @@ -4,6 +4,6 @@ Domestic - violent + violent Index: binaries/data/mods/public/simulation/templates/template_bird.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_bird.xml +++ binaries/data/mods/public/simulation/templates/template_bird.xml @@ -22,7 +22,6 @@ passive - passive false false false Index: binaries/data/mods/public/simulation/templates/template_unit_fauna.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna.xml @@ -28,6 +28,7 @@ + passive false false 8.0 @@ -44,6 +45,6 @@ true - 0 + 80 Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_breed_passive.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_breed_passive.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_breed_passive.xml @@ -1,8 +1,5 @@ - - passive - 10 Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic.xml @@ -3,9 +3,6 @@ Domestic - - domestic - 6 Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_aggressive.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_aggressive.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_aggressive.xml @@ -17,9 +17,6 @@ 20 - aggressive + aggressive - - 10 - Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive.xml @@ -1,6 +1,6 @@ - defensive + passive-defensive Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_passive.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_passive.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_passive.xml @@ -1,6 +1,6 @@ - passive + passive Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish.xml @@ -1,6 +1,6 @@ - skittish + skittish 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 @@ -25,4 +25,7 @@ actor/fauna/animal/elephant_trained.xml + + 20 + Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_violent.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_violent.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_violent.xml @@ -14,9 +14,6 @@ - violent + violent - - 10 - 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 @@ -39,7 +39,7 @@ 5.0 - skittish + skittish 60.0 60.0 100000 Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_aggressive.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_aggressive.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_aggressive.xml @@ -17,9 +17,6 @@ 20 - aggressive + aggressive - - 10 - Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_defensive.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_defensive.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_defensive.xml @@ -4,6 +4,6 @@ 15 - defensive + passive-defensive Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_passive.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_passive.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_passive.xml @@ -1,6 +1,6 @@ - passive + passive Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_violent.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_violent.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_violent.xml @@ -17,9 +17,6 @@ 20 - violent + violent - - 10 -