Index: binaries/data/mods/public/art/actors/structures/gauls/ambush_camp.xml
===================================================================
--- binaries/data/mods/public/art/actors/structures/gauls/ambush_camp.xml
+++ binaries/data/mods/public/art/actors/structures/gauls/ambush_camp.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+ structural/field_propped_8x8.dae
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/art/actors/structures/plot_ambush.xml
===================================================================
--- binaries/data/mods/public/art/actors/structures/plot_ambush.xml
+++ binaries/data/mods/public/art/actors/structures/plot_ambush.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+ structural/field_propped_8x8.dae
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ basic_trans.xml
+
Index: binaries/data/mods/public/simulation/components/Attack.js
===================================================================
--- binaries/data/mods/public/simulation/components/Attack.js
+++ binaries/data/mods/public/simulation/components/Attack.js
@@ -220,6 +220,19 @@
return [];
};
+Attack.prototype.IsTargetHidden = function(target)
+{
+ let cmpIdentity = Engine.QueryInterface(target, IID_Identity);
+ if (!cmpIdentity)
+ return false;
+
+ let targetClasses = cmpIdentity.GetClassesList();
+ if (targetClasses.includes("Hidden"))
+ return true;
+ else
+ return false;
+};
+
Attack.prototype.CanAttack = function(target, wantedTypes)
{
const cmpFormation = Engine.QueryInterface(target, IID_Formation);
Index: binaries/data/mods/public/simulation/components/BuildRestrictions.js
===================================================================
--- binaries/data/mods/public/simulation/components/BuildRestrictions.js
+++ binaries/data/mods/public/simulation/components/BuildRestrictions.js
@@ -136,16 +136,23 @@
passClassName = "building-land";
}
+
var cmpObstruction = Engine.QueryInterface(this.entity, IID_Obstruction);
if (!cmpObstruction)
return result; // Fail
+ let cmpIdentityInterface = Engine.QueryInterface(this.entity, IID_Identity);
+ let VisibleClasses = cmpIdentityInterface.GetClassesList();
if (this.template.Category == "Wall")
{
// for walls, only test the center point
var ret = cmpObstruction.CheckFoundation(passClassName, true);
}
+ else if (VisibleClasses.includes("Hidden"))
+ {
+ var ret = "success";
+ }
else
{
var ret = cmpObstruction.CheckFoundation(passClassName, false);
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
@@ -6410,6 +6410,9 @@
if (!cmpAttack.CanAttack(e))
return false;
+ if (cmpAttack.IsTargetHidden(e))
+ return false;
+
let cmpOwnership = Engine.QueryInterface(e, IID_Ownership);
if (cmpOwnership && cmpOwnership.GetOwner() > 0)
return true;
@@ -6426,6 +6429,7 @@
if (!attackfilter(ent))
continue;
let pref = cmpAttack.GetPreference(ent);
+
if (pref === null || pref === undefined)
entsWithoutPref.push(ent);
else if (!entsByPreferences[pref])
Index: binaries/data/mods/public/simulation/templates/structures/gaul/ambush_camp.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/structures/gaul/ambush_camp.xml
+++ binaries/data/mods/public/simulation/templates/structures/gaul/ambush_camp.xml
@@ -0,0 +1,86 @@
+
+
+
+ own ally neutral enemy
+ AmbushCamp
+
+ AmbushCamp
+ 80
+
+
+
+ 3
+ 10.0
+ 3.0
+
+
+ 50
+
+ 100
+ 100
+ 100
+
+
+
+
+ 12.0
+
+
+ 20
+ 0.1
+ Unit
+ Infantry
+ 0
+ 6
+
+
+ 100
+ decay|rubble/rubble_rome_sb
+
+
+ rome
+ Army Camp
+ Castra
+ Build everywhere. Garrison Infantry to ambush the enemy.
+ CivSpecific
+ City AmbushCamp Hidden
+ structures/roman_camp.png
+ phase_village
+
+
+
+ false
+ false
+
+
+
+
+ 5
+ 5
+ 3
+
+
+
+
+
+
+ interface/complete/building/complete_broch.xml
+ attack/weapon/bow_attack.xml
+ attack/impact/arrow_impact.xml
+
+
+
+ 2
+
+
+ 30
+
+
+ structures/gauls/ambush_camp.xml
+ structures/plot_ambush.xml
+
+
+ 29.5
+ 8
+
+
Index: binaries/data/mods/public/simulation/templates/units/gaul/infantry_javelineer_b.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/units/gaul/infantry_javelineer_b.xml
+++ binaries/data/mods/public/simulation/templates/units/gaul/infantry_javelineer_b.xml
@@ -3,6 +3,7 @@
structures/gaul/assembly
+ structures/gaul/ambush_camp
Index: binaries/data/mods/public/simulation/templates/units/gaul/infantry_slinger_b.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/units/gaul/infantry_slinger_b.xml
+++ binaries/data/mods/public/simulation/templates/units/gaul/infantry_slinger_b.xml
@@ -3,6 +3,7 @@
structures/gaul/assembly
+ structures/gaul/ambush_camp
Index: binaries/data/mods/public/simulation/templates/units/gaul/infantry_spearman_b.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/units/gaul/infantry_spearman_b.xml
+++ binaries/data/mods/public/simulation/templates/units/gaul/infantry_spearman_b.xml
@@ -3,6 +3,7 @@
structures/gaul/assembly
+ structures/gaul/ambush_camp