Index: ps/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js +++ ps/trunk/binaries/data/mods/public/simulation/ai/common-api/entity.js @@ -437,17 +437,11 @@ "isPackable": function() { return this.get("Pack") != undefined; }, - /** - * Returns whether this is an animal that is too difficult to hunt. - */ "isHuntable": function() { - 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 (dead animals can be used). + // Assume entities which can attack, will attack. + return this.get("ResourceSupply/KillBeforeGather") && + (!this.get("Health") || !this.get("Attack")); }, "walkSpeed": function() { return +this.get("UnitMotion/WalkSpeed"); }, Index: ps/trunk/binaries/data/mods/public/simulation/components/UnitAI.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/UnitAI.js +++ ps/trunk/binaries/data/mods/public/simulation/components/UnitAI.js @@ -10,6 +10,8 @@ "defensive" + "passive" + "standground" + + "skittish" + + "passive-defensive" + "" + "" + "" + @@ -34,16 +36,6 @@ "" + "" + "" + - "" + - "" + - "violent" + - "aggressive" + - "defensive" + - "passive" + - "skittish" + - "domestic" + - "" + - "" + "" + "" + "" + @@ -69,6 +61,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) @@ -81,6 +74,7 @@ "targetVisibleEnemies": true, "targetAttackersAlways": true, "respondFlee": false, + "respondFleeOnSight": false, "respondChase": true, "respondChaseBeyondVision": true, "respondStandGround": false, @@ -91,6 +85,7 @@ "targetVisibleEnemies": true, "targetAttackersAlways": false, "respondFlee": false, + "respondFleeOnSight": false, "respondChase": true, "respondChaseBeyondVision": false, "respondStandGround": false, @@ -101,6 +96,7 @@ "targetVisibleEnemies": true, "targetAttackersAlways": false, "respondFlee": false, + "respondFleeOnSight": false, "respondChase": false, "respondChaseBeyondVision": false, "respondStandGround": false, @@ -111,6 +107,7 @@ "targetVisibleEnemies": false, "targetAttackersAlways": false, "respondFlee": true, + "respondFleeOnSight": false, "respondChase": false, "respondChaseBeyondVision": false, "respondStandGround": false, @@ -121,17 +118,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, @@ -283,9 +304,7 @@ this.StopMoving(); this.FinishOrder(); - if (this.IsAnimal()) - this.SetNextState("ANIMAL.IDLE"); - else if (this.IsFormationMember()) + if (this.IsFormationMember()) this.SetNextState("FORMATIONMEMBER.IDLE"); else this.SetNextState("INDIVIDUAL.IDLE"); @@ -307,10 +326,7 @@ this.SetHeldPosition(this.order.data.x, this.order.data.z); 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) { @@ -328,10 +344,7 @@ this.SetHeldPosition(this.order.data.x, this.order.data.z); 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,15 +366,11 @@ { // We are already at the target, or can't move at all this.FinishOrder(); - return true; + return; } 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) { @@ -406,10 +415,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) { @@ -438,10 +444,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; } @@ -462,14 +465,11 @@ 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) { - if (this.IsAnimal() || !this.AbleToMove()) + if (!this.AbleToMove()) { this.FinishOrder(); return; @@ -642,10 +642,7 @@ if (this.IsGarrisoned()) { - if (this.IsAnimal()) - this.SetNextState("ANIMAL.GARRISON.GARRISONED"); - else - this.SetNextState("INDIVIDUAL.GARRISON.GARRISONED"); + this.SetNextState("INDIVIDUAL.GARRISON.GARRISONED"); return; } @@ -665,10 +662,7 @@ return; } - if (this.IsAnimal()) - this.SetNextState("ANIMAL.GARRISON.APPROACHING"); - else - this.SetNextState("INDIVIDUAL.GARRISON.APPROACHING"); + this.SetNextState("INDIVIDUAL.GARRISON.APPROACHING"); }, "Order.Ungarrison": function() { @@ -1393,14 +1387,6 @@ }, "enter": function() { - if (this.IsAnimal()) - { - 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) { @@ -1487,13 +1473,6 @@ // States for entities not part of a formation: "INDIVIDUAL": { - - "enter": function() { - if (this.IsAnimal()) - error("Animal got moved into INDIVIDUAL.* state"); - return false; - }, - "Attacked": function(msg) { if (this.GetStance().targetAttackersAlways || !this.order || !this.order.data || !this.order.data.force) this.RespondToTargetedEntities([msg.data.attacker]); @@ -1663,6 +1642,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"); + }, }, }, @@ -2165,7 +2190,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; @@ -3388,149 +3413,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() { - this.SetNextState("FEEDING"); - return true; - }, - }, - - "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); - }, - - "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() { - 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", - - "COMBAT": "INDIVIDUAL.COMBAT", - - "WALKING": "INDIVIDUAL.WALKING", // reuse the same walking behaviour for animals - // only used for domestic animals - - "CHEERING": { - "enter": function() { - this.SelectAnimation("promotion"); - this.StartTimer(this.cheeringTime); - 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(); - }, - }, - - "GARRISON": "INDIVIDUAL.GARRISON", - }, }; UnitAI.prototype.Init = function() @@ -3574,15 +3456,22 @@ return (this.formationController != INVALID_ENTITY); }; +/** + * For now, entities with a RoamDistance are animals. + */ UnitAI.prototype.IsAnimal = function() { - return (this.template.NaturalBehaviour ? true : false); + return !!this.template.RoamDistance; }; +/** + * ToDo: Make this not needed by fixing gaia + * range queries in BuildingAI and UnitAI regarding + * animals and other gaia entities. + */ UnitAI.prototype.IsDangerousAnimal = function() { - return (this.IsAnimal() && (this.template.NaturalBehaviour == "violent" || - this.template.NaturalBehaviour == "aggressive")); + return this.IsAnimal() && this.GetStance().targetVisibleEnemies && !!Engine.QueryInterface(this.entity, IID_Attack); }; UnitAI.prototype.IsHealer = function() @@ -3680,9 +3569,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"); @@ -3788,8 +3675,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()) @@ -4132,7 +4018,8 @@ UnitAI.prototype.WillMoveFromFoundation = function(target, checkPacking = true) { - if (!IsOwnedByAllyOfEntity(this.entity, target) && + let cmpUnitAI = Engine.QueryInterface(target, IID_UnitAI); + if (!IsOwnedByAllyOfEntity(this.entity, target) && cmpUnitAI && !cmpUnitAI.IsAnimal() && !Engine.QueryInterface(SYSTEM_ENTITY, IID_CeasefireManager).IsCeasefireActive() || checkPacking && this.IsPacking() || this.CanPack() || !this.AbleToMove()) return false; @@ -5188,7 +5075,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; @@ -6181,17 +6068,22 @@ 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; + let cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI); return cmpUnitAI && (!cmpUnitAI.IsAnimal() || cmpUnitAI.IsDangerousAnimal()); }; 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; }; @@ -6523,11 +6415,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 @@ -6581,15 +6471,19 @@ 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); + + let cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI); return cmpUnitAI && (!cmpUnitAI.IsAnimal() || cmpUnitAI.IsDangerousAnimal()); }; Index: ps/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js +++ ps/trunk/binaries/data/mods/public/simulation/components/tests/test_UnitAI.js @@ -205,7 +205,8 @@ GetHitpoints: function() { return 10; }, }); AddMock(enemy, IID_UnitAI, { - IsAnimal: function() { return false; } + "IsAnimal": () => "false", + "IsDangerousAnimal": () => "false" }); } else if (mode == 2) Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_camel_trainable.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_camel_trainable.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_camel_trainable.xml @@ -1,7 +1,7 @@ - domestic + passive false Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_horse_trainable.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_horse_trainable.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_horse_trainable.xml @@ -1,7 +1,7 @@ - domestic + passive false Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_peacock.xml @@ -31,7 +31,6 @@ 2.5 - domestic 4.0 12.0 2000 Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_shark.xml @@ -35,7 +35,6 @@ - passive 100.0 60.0 100000 Index: ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_wolf_arctic_violent.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_wolf_arctic_violent.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/gaia/fauna_wolf_arctic_violent.xml @@ -1,6 +1,6 @@ - violent + violent Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_bird.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_bird.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_bird.xml @@ -22,7 +22,6 @@ passive - passive false false false Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml @@ -31,6 +31,7 @@ + passive false false 8.0 @@ -47,6 +48,6 @@ true - 0 + 60 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_breed_passive.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_breed_passive.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_breed_passive.xml @@ -1,8 +1,5 @@ - - passive - 10 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_herd_domestic.xml @@ -4,7 +4,7 @@ Domestic - domestic + standground 6 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_aggressive.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_aggressive.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_aggressive.xml @@ -17,9 +17,6 @@ 20 - aggressive + aggressive - - 10 - Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive.xml @@ -1,6 +1,6 @@ - defensive + passive-defensive Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_passive.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_passive.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_passive.xml @@ -1,6 +1,6 @@ - passive + passive Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish.xml @@ -1,6 +1,9 @@ - skittish + skittish + + 0 + Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_violent.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_violent.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_violent.xml @@ -14,9 +14,6 @@ - violent + violent - - 10 - Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_whale.xml @@ -38,7 +38,7 @@ 5.0 - skittish + skittish 60.0 60.0 100000 @@ -46,6 +46,9 @@ 1 2 + + 0 + ship-small 1.8 Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_aggressive.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_aggressive.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_aggressive.xml @@ -17,9 +17,6 @@ 20 - aggressive + aggressive - - 10 - Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_defensive.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_defensive.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_defensive.xml @@ -4,6 +4,6 @@ 15 - defensive + passive-defensive Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_passive.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_passive.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_passive.xml @@ -1,6 +1,6 @@ - passive + passive Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_violent.xml =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_violent.xml +++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_fauna_wild_violent.xml @@ -17,9 +17,6 @@ 20 - violent + violent - - 10 -