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
@@ -426,17 +426,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 (animals without UnitAI are dead animals).
+ // Assume entities which can attack, will attack.
+ return this.get("ResourceSupply/KillBeforeGather") &&
+ (!this.get("UnitAI") || !this.get("Attack"));
},
"walkSpeed": function() { return +this.get("UnitMotion/WalkSpeed"); },
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" +
"" +
"" +
"" +
@@ -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,
@@ -253,9 +274,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");
@@ -277,10 +296,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) {
@@ -298,10 +314,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");
},
@@ -323,15 +336,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) {
@@ -376,10 +385,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) {
@@ -408,10 +414,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;
}
@@ -432,14 +435,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;
@@ -612,10 +612,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;
}
@@ -625,10 +622,7 @@
return;
}
- if (this.IsAnimal())
- this.SetNextState("ANIMAL.GARRISON.APPROACHING");
- else
- this.SetNextState("INDIVIDUAL.GARRISON.APPROACHING");
+ this.SetNextState("INDIVIDUAL.GARRISON.APPROACHING");
},
"Order.Ungarrison": function() {
@@ -1302,14 +1296,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)
{
@@ -1396,13 +1382,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]);
@@ -1560,6 +1539,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");
+ },
},
},
@@ -2042,7 +2067,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;
@@ -3251,149 +3276,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()
@@ -3437,15 +3319,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() && !!Engine.QueryInterface(this.entity, IID_Attack) && this.GetStance().targetVisibleEnemies;
};
UnitAI.prototype.IsHealer = function()
@@ -3533,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");
@@ -3642,7 +3529,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())
@@ -3976,7 +3863,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;
@@ -5013,7 +4901,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;
@@ -5960,17 +5848,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 animals that will attack (us).
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;
};
@@ -6302,11 +6196,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
@@ -6360,15 +6252,20 @@
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);
+
+ // Only attack Gaia animals that will attack (us) automatically.
+ let cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI);
return cmpUnitAI && (!cmpUnitAI.IsAnimal() || cmpUnitAI.IsDangerousAnimal());
};
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,8 @@
GetHitpoints: function() { return 10; },
});
AddMock(enemy, IID_UnitAI, {
- IsAnimal: function() { return false; }
+ "IsAnimal": () => "false",
+ "IsDangerousAnimal": () => "false"
});
}
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_violent.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/gaia/fauna_wolf_arctic_violent.xml
+++ binaries/data/mods/public/simulation/templates/gaia/fauna_wolf_arctic_violent.xml
@@ -1,6 +1,6 @@
- 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
+ 40
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
@@ -4,7 +4,7 @@
Domestic
- domestic
+ standground
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,9 @@
- skittish
+ skittish
+
+ 0
+
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
-