diff --git a/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_a.xml b/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_a.xml
index 6fa70ed69e..bdc610344f 100644
--- a/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_a.xml
+++ b/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_a.xml
@@ -25,7 +25,7 @@
-
+
@@ -33,6 +33,7 @@
+
skeletal/m_pants.dae
@@ -135,7 +136,7 @@
-
+
diff --git a/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_e.xml b/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_e.xml
index aeccdf24b3..250a9880ec 100644
--- a/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_e.xml
+++ b/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_e.xml
@@ -23,7 +23,7 @@
-
+
@@ -31,6 +31,7 @@
+
skeletal/m_tights.dae
@@ -119,7 +120,7 @@
-
+
diff --git a/binaries/data/mods/public/art/actors/units/celts/infantry_spearman_a.xml b/binaries/data/mods/public/art/actors/units/celts/infantry_spearman_a.xml
index 54ad6bdedc..5877392227 100644
--- a/binaries/data/mods/public/art/actors/units/celts/infantry_spearman_a.xml
+++ b/binaries/data/mods/public/art/actors/units/celts/infantry_spearman_a.xml
@@ -22,7 +22,7 @@
-
+
@@ -30,6 +30,7 @@
+
skeletal/m_pants_celt.dae
@@ -127,7 +128,7 @@
-
+
diff --git a/binaries/data/mods/public/art/actors/units/celts/infantry_spearman_e.xml b/binaries/data/mods/public/art/actors/units/celts/infantry_spearman_e.xml
index 244304fd86..017bc1f242 100644
--- a/binaries/data/mods/public/art/actors/units/celts/infantry_spearman_e.xml
+++ b/binaries/data/mods/public/art/actors/units/celts/infantry_spearman_e.xml
@@ -23,7 +23,7 @@
-
+
@@ -31,6 +31,7 @@
+
skeletal/m_pants_celt.dae
diff --git a/binaries/data/mods/public/art/actors/units/celts/super_unit_1.xml b/binaries/data/mods/public/art/actors/units/celts/super_unit_1.xml
index 0a461d0b25..7db6d8246d 100644
--- a/binaries/data/mods/public/art/actors/units/celts/super_unit_1.xml
+++ b/binaries/data/mods/public/art/actors/units/celts/super_unit_1.xml
@@ -4,11 +4,11 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_a.xml b/binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_a.xml
index 8da6ea394c..8bf2d8d93e 100644
--- a/binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_a.xml
+++ b/binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_a.xml
@@ -28,6 +28,7 @@
+
skeletal/m_tunic_short.dae
diff --git a/binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_e.xml b/binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_e.xml
index ae4910936c..d8b560a34c 100644
--- a/binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_e.xml
+++ b/binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_e.xml
@@ -27,6 +27,7 @@
+
skeletal/m_tunic_long.dae
diff --git a/binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_a.xml b/binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_a.xml
index 2029ffc857..cdbc5a02d4 100644
--- a/binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_a.xml
+++ b/binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_a.xml
@@ -27,9 +27,10 @@
-
+
+
@@ -61,7 +62,7 @@
-
+
@@ -69,23 +70,23 @@
-
-
+
+
-
+
-
-
+
+
@@ -93,7 +94,7 @@
-
+
@@ -102,25 +103,25 @@
-
-
+
+
-
-
+
+
-
+
-
-
+
+
@@ -128,7 +129,7 @@
-
+
diff --git a/binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_e.xml b/binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_e.xml
index 429c9230d8..3adef7c7b6 100644
--- a/binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_e.xml
+++ b/binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_e.xml
@@ -30,6 +30,7 @@
+
skeletal/m_tunic_long.dae
diff --git a/binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_a.xml b/binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_a.xml
index 260829fe93..9949e4005e 100644
--- a/binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_a.xml
+++ b/binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_a.xml
@@ -27,6 +27,7 @@
+
skeletal/m_tunic_short.dae
diff --git a/binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_e.xml b/binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_e.xml
index bfc5f70d07..e987c3aff9 100644
--- a/binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_e.xml
+++ b/binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_e.xml
@@ -27,6 +27,7 @@
+
skeletal/m_tunic_short.dae
diff --git a/binaries/data/mods/public/art/animation/biped/not used/inf_salute_a.psa b/binaries/data/mods/public/art/animation/biped/inf_salute_a.psa
similarity index 100%
rename from binaries/data/mods/public/art/animation/biped/not used/inf_salute_a.psa
rename to binaries/data/mods/public/art/animation/biped/inf_salute_a.psa
diff --git a/binaries/data/mods/public/art/animation/biped/not used/inf_salute_b.psa b/binaries/data/mods/public/art/animation/biped/inf_salute_b.psa
similarity index 100%
rename from binaries/data/mods/public/art/animation/biped/not used/inf_salute_b.psa
rename to binaries/data/mods/public/art/animation/biped/inf_salute_b.psa
diff --git a/binaries/data/mods/public/art/animation/biped/not used/inf_salute_c.psa b/binaries/data/mods/public/art/animation/biped/inf_salute_c.psa
similarity index 100%
rename from binaries/data/mods/public/art/animation/biped/not used/inf_salute_c.psa
rename to binaries/data/mods/public/art/animation/biped/inf_salute_c.psa
diff --git a/binaries/data/mods/public/art/animation/biped/not used/inf_salute_d.psa b/binaries/data/mods/public/art/animation/biped/inf_salute_d.psa
similarity index 100%
rename from binaries/data/mods/public/art/animation/biped/not used/inf_salute_d.psa
rename to binaries/data/mods/public/art/animation/biped/inf_salute_d.psa
diff --git a/binaries/data/mods/public/art/animation/biped/not used/inf_salute_e.psa b/binaries/data/mods/public/art/animation/biped/inf_salute_e.psa
similarity index 100%
rename from binaries/data/mods/public/art/animation/biped/not used/inf_salute_e.psa
rename to binaries/data/mods/public/art/animation/biped/inf_salute_e.psa
diff --git a/binaries/data/mods/public/gui/session/selection.js b/binaries/data/mods/public/gui/session/selection.js
index a60faefec5..ef3b015c93 100644
--- a/binaries/data/mods/public/gui/session/selection.js
+++ b/binaries/data/mods/public/gui/session/selection.js
@@ -203,6 +203,7 @@ EntitySelection.prototype.getTemplateNames = function()
// Update the selection to take care of changes (like units that have been killed)
EntitySelection.prototype.update = function()
{
+ this.checkRenamedEntities();
for each (var ent in this.selected)
{
var entState = GetEntityState(ent);
@@ -231,6 +232,30 @@ EntitySelection.prototype.update = function()
}
};
+/**
+ * Update selection if some selected entities was renamed
+ * (in case of unit promotion or finishing building structure)
+ */
+EntitySelection.prototype.checkRenamedEntities = function()
+{
+ var renamedEntities = Engine.GuiInterfaceCall("GetRenamedEntities", true);
+ if (renamedEntities.length > 0)
+ {
+ var removeFromSelectionList = [];
+ var addToSelectionList = [];
+ for each (var renamedEntity in renamedEntities)
+ {
+ if (this.selected[renamedEntity.entity])
+ {
+ removeFromSelectionList.push(renamedEntity.entity);
+ addToSelectionList.push(renamedEntity.newentity);
+ }
+ }
+ this.removeList(removeFromSelectionList);
+ this.addList(addToSelectionList);
+ }
+}
+
EntitySelection.prototype.addList = function(ents)
{
var selectionSize = this.toList().length;
diff --git a/binaries/data/mods/public/gui/session/selection_details.js b/binaries/data/mods/public/gui/session/selection_details.js
index bfa4d3dca3..f2bb48765c 100644
--- a/binaries/data/mods/public/gui/session/selection_details.js
+++ b/binaries/data/mods/public/gui/session/selection_details.js
@@ -65,6 +65,25 @@ function displaySingle(entState, template)
{
getGUIObjectByName("health").hidden = true;
}
+
+ // Experience
+ if (entState.promotion)
+ {
+ var experienceBar = getGUIObjectByName("experienceBar");
+ var experienceSize = experienceBar.size;
+ experienceSize.rtop = 100 - 100 * Math.max(0, Math.min(1, 1.0 * entState.promotion.curr / entState.promotion.req));
+ experienceBar.size = experienceSize;
+
+ var experience = "[font=\"serif-bold-13\"]XP [/font]" + entState.promotion.curr;
+ if (entState.promotion.curr < entState.promotion.req)
+ experience += "/" + entState.promotion.req;
+ getGUIObjectByName("experience").tooltip = experience;
+ getGUIObjectByName("experience").hidden = false;
+ }
+ else
+ {
+ getGUIObjectByName("experience").hidden = true;
+ }
// Resource stats
var resources = "";
@@ -256,7 +275,7 @@ function updateSelectionDetails()
supplementalDetailsPanel.hidden = false;
detailsPanel.hidden = false;
commandsPanel.hidden = false;
-
+
// Fill out commands panel for specific unit selected (or first unit of primary group)
updateUnitCommands(entState, supplementalDetailsPanel, commandsPanel, selection);
}
diff --git a/binaries/data/mods/public/gui/session/session.xml b/binaries/data/mods/public/gui/session/session.xml
index fa058427e8..c5709005c8 100644
--- a/binaries/data/mods/public/gui/session/session.xml
+++ b/binaries/data/mods/public/gui/session/session.xml
@@ -538,6 +538,13 @@
+
+
+
diff --git a/binaries/data/mods/public/gui/session/sprites.xml b/binaries/data/mods/public/gui/session/sprites.xml
index 32da4d0bc0..a6424409e3 100644
--- a/binaries/data/mods/public/gui/session/sprites.xml
+++ b/binaries/data/mods/public/gui/session/sprites.xml
@@ -714,6 +714,14 @@
+
+
+
+
+
+
+
+
diff --git a/binaries/data/mods/public/simulation/components/Armour.js b/binaries/data/mods/public/simulation/components/Armour.js
index cb1d00dc15..c361eddf19 100644
--- a/binaries/data/mods/public/simulation/components/Armour.js
+++ b/binaries/data/mods/public/simulation/components/Armour.js
@@ -19,12 +19,20 @@ Armour.prototype.Schema =
Armour.prototype.Init = function()
{
+ this.invulnerable = false;
};
Armour.prototype.Serialize = null; // we have no dynamic state to save
+Armour.prototype.SetInvulnerability = function(invulnerability)
+{
+ this.invulnerable = invulnerability;
+};
+
Armour.prototype.TakeDamage = function(hack, pierce, crush)
{
+ if (this.invulnerable)
+ return { "killed": false };
// Adjust damage values based on armour
var adjHack = Math.max(0, hack - this.template.Hack);
var adjPierce = Math.max(0, pierce - this.template.Pierce);
diff --git a/binaries/data/mods/public/simulation/components/Attack.js b/binaries/data/mods/public/simulation/components/Attack.js
index 9c733214b5..327f415aa4 100644
--- a/binaries/data/mods/public/simulation/components/Attack.js
+++ b/binaries/data/mods/public/simulation/components/Attack.js
@@ -211,7 +211,6 @@ Attack.prototype.PerformAttack = function(type, target)
/**
* Called when some units kills something (another unit, building, animal etc)
- * update player statistics only for now
*/
Attack.prototype.TargetKilled = function(killerEntity, targetEntity)
{
@@ -219,6 +218,13 @@ Attack.prototype.TargetKilled = function(killerEntity, targetEntity)
if (cmpKillerPlayerStatisticsTracker) cmpKillerPlayerStatisticsTracker.KilledEntity(targetEntity);
var cmpTargetPlayerStatisticsTracker = QueryOwnerInterface(targetEntity, IID_StatisticsTracker);
if (cmpTargetPlayerStatisticsTracker) cmpTargetPlayerStatisticsTracker.LostEntity(targetEntity);
+
+ // if unit can collect loot, lets try to collect it
+ var cmpLooter = Engine.QueryInterface(killerEntity, IID_Looter);
+ if (cmpLooter)
+ {
+ cmpLooter.Collect(targetEntity);
+ }
}
/**
diff --git a/binaries/data/mods/public/simulation/components/Formation.js b/binaries/data/mods/public/simulation/components/Formation.js
index 956046e24b..28314285ab 100644
--- a/binaries/data/mods/public/simulation/components/Formation.js
+++ b/binaries/data/mods/public/simulation/components/Formation.js
@@ -599,6 +599,20 @@ Formation.prototype.OnGlobalOwnershipChanged = function(msg)
this.RemoveMembers([msg.entity]);
};
+Formation.prototype.OnGlobalEntityRenamed = function(msg)
+{
+ if (this.members.indexOf(msg.entity) != -1)
+ {
+ this.members[this.members.indexOf(msg.entity)] = msg.newentity;
+
+ var cmpOldUnitAI = Engine.QueryInterface(msg.entity, IID_UnitAI);
+ cmpOldUnitAI.SetFormationController(INVALID_ENTITY);
+
+ var cmpNewUnitAI = Engine.QueryInterface(msg.newentity, IID_UnitAI);
+ cmpNewUnitAI.SetFormationController(this.entity);
+ }
+}
+
Formation.prototype.LoadFormation = function(formationName)
{
this.formationName = formationName;
diff --git a/binaries/data/mods/public/simulation/components/Foundation.js b/binaries/data/mods/public/simulation/components/Foundation.js
index c793fff434..dbfb4bc4c5 100644
--- a/binaries/data/mods/public/simulation/components/Foundation.js
+++ b/binaries/data/mods/public/simulation/components/Foundation.js
@@ -185,7 +185,7 @@ Foundation.prototype.Build = function(builderEnt, work)
var cmpPlayerStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker);
cmpPlayerStatisticsTracker.IncreaseConstructedBuildingsCounter();
-
+
var cmpIdentity = Engine.QueryInterface(building, IID_Identity);
if (cmpIdentity.GetClassesList().indexOf("CivCentre") != -1) cmpPlayerStatisticsTracker.IncreaseBuiltCivCentresCounter();
@@ -196,6 +196,8 @@ Foundation.prototype.Build = function(builderEnt, work)
Engine.PostMessage(this.entity, MT_ConstructionFinished,
{ "entity": this.entity, "newentity": building });
+ Engine.BroadcastMessage(MT_EntityRenamed, { entity: this.entity, newentity: building });
+
Engine.DestroyEntity(this.entity);
}
};
diff --git a/binaries/data/mods/public/simulation/components/GarrisonHolder.js b/binaries/data/mods/public/simulation/components/GarrisonHolder.js
index db08aa7594..e35b4df2c4 100644
--- a/binaries/data/mods/public/simulation/components/GarrisonHolder.js
+++ b/binaries/data/mods/public/simulation/components/GarrisonHolder.js
@@ -288,4 +288,12 @@ GarrisonHolder.prototype.OnDestroy = function()
}
};
+GarrisonHolder.prototype.OnGlobalEntityRenamed = function(msg)
+{
+ if (this.entities.indexOf(msg.entity) != -1)
+ {
+ this.entities[this.entities.indexOf(msg.entity)] = msg.newentity;
+ }
+}
+
Engine.RegisterComponentType(IID_GarrisonHolder, "GarrisonHolder", GarrisonHolder);
diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js
index 17f39d9123..6f5a1cd873 100644
--- a/binaries/data/mods/public/simulation/components/GuiInterface.js
+++ b/binaries/data/mods/public/simulation/components/GuiInterface.js
@@ -20,6 +20,7 @@ GuiInterface.prototype.Init = function()
this.placementEntity = undefined; // = undefined or [templateName, entityID]
this.rallyPoints = undefined;
this.notifications = [];
+ this.renamedEntities = [];
};
/*
@@ -91,6 +92,14 @@ GuiInterface.prototype.GetExtendedSimulationState = function(player)
return ret;
};
+GuiInterface.prototype.GetRenamedEntities = function(player, clearList)
+{
+ var result = this.renamedEntities;
+ if (clearList)
+ this.renamedEntities = [];
+ return result;
+};
+
GuiInterface.prototype.GetEntityState = function(player, ent)
{
var cmpTempMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager);
@@ -210,6 +219,15 @@ GuiInterface.prototype.GetEntityState = function(player, ent)
};
}
+ var cmpPromotion = Engine.QueryInterface(ent, IID_Promotion);
+ if (cmpPromotion)
+ {
+ ret.promotion = {
+ "curr": cmpPromotion.GetCurrentXp(),
+ "req": cmpPromotion.GetRequiredXp()
+ };
+ }
+
var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
ret.visibility = cmpRangeManager.GetLosVisibility(ent, player);
@@ -502,6 +520,11 @@ GuiInterface.prototype.SetRangeDebugOverlay = function(player, enabled)
cmpRangeManager.SetDebugOverlay(enabled);
};
+GuiInterface.prototype.OnGlobalEntityRenamed = function(msg)
+{
+ this.renamedEntities.push(msg);
+}
+
// List the GuiInterface functions that can be safely called by GUI scripts.
// (GUI scripts are non-deterministic and untrusted, so these functions must be
// appropriately careful. They are called with a first argument "player", which is
@@ -511,6 +534,7 @@ var exposedFunctions = {
"GetSimulationState": 1,
"GetExtendedSimulationState": 1,
+ "GetRenamedEntities": 1,
"GetEntityState": 1,
"GetTemplateData": 1,
"GetNextNotification": 1,
diff --git a/binaries/data/mods/public/simulation/components/Identity.js b/binaries/data/mods/public/simulation/components/Identity.js
index 5b9303c677..2984c37bbf 100644
--- a/binaries/data/mods/public/simulation/components/Identity.js
+++ b/binaries/data/mods/public/simulation/components/Identity.js
@@ -118,9 +118,7 @@ Identity.prototype.GetCiv = function()
Identity.prototype.GetRank = function()
{
- if (this.template.Rank)
- return this.template.Rank;
- return "";
+ return (this.template.Rank || "");
};
Identity.prototype.GetClassesList = function()
diff --git a/binaries/data/mods/public/simulation/components/Loot.js b/binaries/data/mods/public/simulation/components/Loot.js
index 856e41d0eb..6ae5242b7d 100644
--- a/binaries/data/mods/public/simulation/components/Loot.js
+++ b/binaries/data/mods/public/simulation/components/Loot.js
@@ -17,10 +17,21 @@ Loot.prototype.Schema =
"" +
"";
-/*
- * TODO: this all needs to be designed and implemented
- */
-
Loot.prototype.Serialize = null; // we have no dynamic state to save
+Loot.prototype.GetXp = function()
+{
+ return this.template.xp;
+};
+
+Loot.prototype.GetResources = function()
+{
+ return {
+ "food": +(this.template.food || 0),
+ "wood": +(this.template.wood || 0),
+ "metal": +(this.template.metal || 0),
+ "stone": +(this.template.stone || 0)
+ };
+};
+
Engine.RegisterComponentType(IID_Loot, "Loot", Loot);
diff --git a/binaries/data/mods/public/simulation/components/Looter.js b/binaries/data/mods/public/simulation/components/Looter.js
index f18ab418b7..706b50fbd2 100644
--- a/binaries/data/mods/public/simulation/components/Looter.js
+++ b/binaries/data/mods/public/simulation/components/Looter.js
@@ -2,10 +2,26 @@ function Looter() {}
Looter.prototype.Schema =
"";
-
-/*
- * TODO: this all needs to be designed and implemented
+
+/**
+ * Try to collect loot from target entity
*/
-
+Looter.prototype.Collect = function(targetEntity)
+{
+ var cmpLoot = Engine.QueryInterface(targetEntity, IID_Loot);
+ if (!cmpLoot)
+ return;
+
+ var xp = cmpLoot.GetXp();
+ if (xp > 0)
+ {
+ var cmpPromotion = Engine.QueryInterface(this.entity, IID_Promotion);
+ if (cmpPromotion)
+ cmpPromotion.IncreaseXp(xp);
+ }
+ var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
+ cmpPlayer.AddResources(cmpLoot.GetResources());
+}
+
Engine.RegisterComponentType(IID_Looter, "Looter", Looter);
diff --git a/binaries/data/mods/public/simulation/components/Promotion.js b/binaries/data/mods/public/simulation/components/Promotion.js
index afc85d4495..ecdb36eee0 100644
--- a/binaries/data/mods/public/simulation/components/Promotion.js
+++ b/binaries/data/mods/public/simulation/components/Promotion.js
@@ -4,12 +4,95 @@ Promotion.prototype.Schema =
"" +
"" +
"" +
- "" +
+ "" +
"" +
"";
-/*
- * TODO: this all needs to be designed and implemented
- */
+Promotion.prototype.Init = function()
+{
+ this.currentXp = 0;
+}
+
+Promotion.prototype.GetRequiredXp = function()
+{
+ return +(this.template.RequiredXp);
+};
+
+Promotion.prototype.GetCurrentXp = function()
+{
+ return this.currentXp;
+};
+
+Promotion.prototype.GetPromotedTemplateName = function()
+{
+ return this.template.Entity;
+}
+
+Promotion.prototype.Promote = function(promotedTemplateName)
+{
+ // Create promoted unit entity
+ var promotedUnitEntity = Engine.AddEntity(promotedTemplateName);
+
+ // Copy parameters from current entity to promoted one
+ var cmpCurrentUnitPosition = Engine.QueryInterface(this.entity, IID_Position);
+ var cmpPromotedUnitPosition = Engine.QueryInterface(promotedUnitEntity, IID_Position);
+ if (cmpCurrentUnitPosition.IsInWorld())
+ {
+ var pos = cmpCurrentUnitPosition.GetPosition2D();
+ cmpPromotedUnitPosition.JumpTo(pos.x, pos.y);
+ }
+ var rot = cmpCurrentUnitPosition.GetRotation();
+ cmpPromotedUnitPosition.SetYRotation(rot.y);
+ cmpPromotedUnitPosition.SetXZRotation(rot.x, rot.z);
+ var heightOffset = cmpCurrentUnitPosition.GetHeightOffset();
+ cmpPromotedUnitPosition.SetHeightOffset(heightOffset);
+
+ var cmpCurrentUnitOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
+ var cmpPromotedUnitOwnership = Engine.QueryInterface(promotedUnitEntity, IID_Ownership);
+ cmpPromotedUnitOwnership.SetOwner(cmpCurrentUnitOwnership.GetOwner());
+
+ var cmpPromotedUnitPromotion = Engine.QueryInterface(promotedUnitEntity, IID_Promotion);
+ if (cmpPromotedUnitPromotion)
+ cmpPromotedUnitPromotion.IncreaseXp(this.currentXp);
+
+ var cmpCurrentUnitResourceGatherer = Engine.QueryInterface(this.entity, IID_ResourceGatherer);
+ var cmpPromotedUnitResourceGatherer = Engine.QueryInterface(promotedUnitEntity, IID_ResourceGatherer);
+ if (cmpCurrentUnitResourceGatherer && cmpPromotedUnitResourceGatherer)
+ {
+ var carriedResorces = cmpCurrentUnitResourceGatherer.GetCarryingStatus();
+ cmpPromotedUnitResourceGatherer.GiveResources(carriedResorces);
+ }
+
+ var cmpCurrentUnitAI = Engine.QueryInterface(this.entity, IID_UnitAI);
+ var cmpPromotedUnitAI = Engine.QueryInterface(promotedUnitEntity, IID_UnitAI);
+ cmpPromotedUnitAI.Cheer();
+ var orders = cmpCurrentUnitAI.GetOrders();
+ cmpPromotedUnitAI.AddOrders(orders);
+
+ Engine.BroadcastMessage(MT_EntityRenamed, { entity: this.entity, newentity: promotedUnitEntity });
+
+ // Destroy current entity
+ Engine.DestroyEntity(this.entity);
+}
+
+Promotion.prototype.IncreaseXp = function(amount)
+{
+ this.currentXp += +(amount);
+
+ if (this.currentXp >= this.template.RequiredXp)
+ {
+ var promotionTemplate = this.template;
+ do
+ {
+ this.currentXp -= promotionTemplate.RequiredXp;
+ var promotedTemplateName = promotionTemplate.Entity;
+ var cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager);
+ var template = cmpTemplateManager.GetTemplate(promotedTemplateName);
+ promotionTemplate = template.Promotion || null;
+ }
+ while (promotionTemplate != null && this.currentXp >= promotionTemplate.RequiredXp);
+ this.Promote(promotedTemplateName);
+ }
+}
Engine.RegisterComponentType(IID_Promotion, "Promotion", Promotion);
diff --git a/binaries/data/mods/public/simulation/components/ResourceGatherer.js b/binaries/data/mods/public/simulation/components/ResourceGatherer.js
index 71162ae3db..c18c6293c0 100644
--- a/binaries/data/mods/public/simulation/components/ResourceGatherer.js
+++ b/binaries/data/mods/public/simulation/components/ResourceGatherer.js
@@ -85,6 +85,18 @@ ResourceGatherer.prototype.GetCarryingStatus = function()
return ret;
};
+/**
+ * Used to instantly give resources to unit
+ * @param resources The same structure as returned form GetCarryingStatus
+ */
+ResourceGatherer.prototype.GiveResources = function(resources)
+{
+ for each (var resource in resources)
+ {
+ this.carrying[resource.type] = +(resource.amount);
+ }
+};
+
/**
* Returns the generic type of one particular resource this unit is
* currently carrying, or undefined if none.
diff --git a/binaries/data/mods/public/simulation/components/UnitAI.js b/binaries/data/mods/public/simulation/components/UnitAI.js
index cbc955eaad..f6a353f185 100644
--- a/binaries/data/mods/public/simulation/components/UnitAI.js
+++ b/binaries/data/mods/public/simulation/components/UnitAI.js
@@ -110,6 +110,10 @@ var UnitFsmSpec = {
// ignore
},
+ "EntityRenamed": function(msg) {
+ // ignore
+ },
+
// Formation handlers:
"FormationLeave": function(msg) {
@@ -305,6 +309,10 @@ var UnitFsmSpec = {
this.SetNextState("INDIVIDUAL.GARRISON.GARRISONED");
}
},
+
+ "Order.Cheering": function(msg) {
+ this.SetNextState("INDIVIDUAL.CHEERING");
+ },
// States for the special entity representing a group of units moving in formation:
"FORMATIONCONTROLLER": {
@@ -533,6 +541,11 @@ var UnitFsmSpec = {
},
"COMBAT": {
+ "EntityRenamed": function(msg) {
+ if (this.order.data.target == msg.entity)
+ this.order.data.target = msg.newentity;
+ },
+
"Attacked": function(msg) {
// If we're already in combat mode, ignore anyone else
// who's attacking us
@@ -980,6 +993,26 @@ var UnitFsmSpec = {
},
},
+ "CHEERING": {
+ "enter": function() {
+ // Unit is invulnerable while cheering
+ var cmpDamageReceiver = Engine.QueryInterface(this.entity, IID_DamageReceiver);
+ cmpDamageReceiver.SetInvulnerability(true);
+ this.SelectAnimation("promotion");
+ this.StartTimer(4000, 4000);
+ return false;
+ },
+
+ "leave": function() {
+ this.StopTimer();
+ var cmpDamageReceiver = Engine.QueryInterface(this.entity, IID_DamageReceiver);
+ cmpDamageReceiver.SetInvulnerability(false);
+ },
+
+ "Timer": function(msg) {
+ this.FinishOrder();
+ },
+ },
},
"ANIMAL": {
@@ -1323,18 +1356,49 @@ UnitAI.prototype.PushOrder = function(type, data)
UnitAI.prototype.PushOrderFront = function(type, data)
{
var order = { "type": type, "data": data };
- this.orderQueue.unshift(order);
-
- this.order = order;
- UnitFsm.ProcessMessage(this, {"type": "Order."+this.order.type, "data": this.order.data});
+ // If current order is cheering then add new order after it
+ if (this.order && this.order.type == "Cheering")
+ {
+ var cheeringOrder = this.orderQueue.shift();
+ this.orderQueue.unshift(cheeringOrder, order);
+ }
+ else
+ {
+ this.orderQueue.unshift(order);
+ this.order = order;
+ UnitFsm.ProcessMessage(this, {"type": "Order."+this.order.type, "data": this.order.data});
+ }
};
UnitAI.prototype.ReplaceOrder = function(type, data)
{
- this.orderQueue = [];
- this.PushOrder(type, data);
+ // If current order is cheering then add new order after it
+ if (this.order && this.order.type == "Cheering")
+ {
+ var order = { "type": type, "data": data };
+ var cheeringOrder = this.orderQueue.shift();
+ this.orderQueue = [ cheeringOrder, order ];
+ }
+ else
+ {
+ this.orderQueue = [];
+ this.PushOrder(type, data);
+ }
};
+UnitAI.prototype.GetOrders = function()
+{
+ return this.orderQueue.slice();
+}
+
+UnitAI.prototype.AddOrders = function(orders)
+{
+ for each (var order in orders)
+ {
+ this.PushOrder(order.type, order.data);
+ }
+}
+
UnitAI.prototype.TimerHandler = function(data, lateness)
{
// Reset the timer
@@ -1402,6 +1466,11 @@ UnitAI.prototype.OnGlobalConstructionFinished = function(msg)
UnitFsm.ProcessMessage(this, {"type": "ConstructionFinished", "data": msg});
};
+UnitAI.prototype.OnGlobalEntityRenamed = function(msg)
+{
+ UnitFsm.ProcessMessage(this, {"type": "EntityRenamed", "entity": msg.entity, "newentity": msg.newentity});
+}
+
UnitAI.prototype.OnAttacked = function(msg)
{
UnitFsm.ProcessMessage(this, {"type": "Attacked", "data": msg});
@@ -1918,6 +1987,11 @@ UnitAI.prototype.Repair = function(target, autocontinue, queued)
this.AddOrder("Repair", { "target": target, "autocontinue": autocontinue }, queued);
};
+UnitAI.prototype.Cheer = function()
+{
+ this.AddOrder("Cheering", null, false);
+};
+
UnitAI.prototype.SetStance = function(stance)
{
if (g_Stances[stance])
diff --git a/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js b/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
index e3a228d939..99c9fd10d2 100644
--- a/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
+++ b/binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
@@ -5,6 +5,7 @@ Engine.LoadComponentScript("interfaces/Foundation.js");
Engine.LoadComponentScript("interfaces/GarrisonHolder.js");
Engine.LoadComponentScript("interfaces/Health.js");
Engine.LoadComponentScript("interfaces/Identity.js");
+Engine.LoadComponentScript("interfaces/Promotion.js");
Engine.LoadComponentScript("interfaces/RallyPoint.js");
Engine.LoadComponentScript("interfaces/ResourceDropsite.js");
Engine.LoadComponentScript("interfaces/ResourceGatherer.js");
diff --git a/binaries/data/mods/public/simulation/templates/template_unit.xml b/binaries/data/mods/public/simulation/templates/template_unit.xml
index 7f406682dd..911474fa83 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit.xml
@@ -92,6 +92,7 @@
false
false
+
true
false
diff --git a/binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml b/binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml
index 26e6b737d0..efa8b93e6e 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml
@@ -3,10 +3,10 @@
Cavalry
Cavalry CitizenSoldier Organic
- Basic
+ Basic
- 900
+ 900
pitch
diff --git a/binaries/data/mods/public/simulation/templates/template_unit_infantry.xml b/binaries/data/mods/public/simulation/templates/template_unit_infantry.xml
index 8e951f39f3..6fc3a091e8 100644
--- a/binaries/data/mods/public/simulation/templates/template_unit_infantry.xml
+++ b/binaries/data/mods/public/simulation/templates/template_unit_infantry.xml
@@ -3,10 +3,10 @@
Infantry
Infantry CitizenSoldier Organic
- Basic
+ Basic
- 600
+ 600
9
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_a.xml b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_a.xml
index bd05b037d2..e4b9249672 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- celt_cavalry_javelinist_e
+ units/celt_cavalry_javelinist_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_b.xml b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_b.xml
index 3de64a309d..d14c026b1a 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_b.xml
@@ -8,7 +8,7 @@
units/celt_cavalry_javelinist.png
- celt_cavalry_javelinist_a
+ units/celt_cavalry_javelinist_a
2.0
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_e.xml b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_e.xml
index 7d6531d7d0..ecfe9afbe9 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -29,4 +29,5 @@
units/celts/cavalry_javelinist_e.xml
+
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_a.xml b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_a.xml
index 346ed076ca..b57815a227 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- celt_cavalry_spearman_e
+ units/celt_cavalry_spearman_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_b.xml
index 7d9422e379..e2dc3cf369 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_b.xml
@@ -10,7 +10,7 @@
units/celt_cavalry_spearman.png
- celt_cavalry_spearman_a
+ units/celt_cavalry_spearman_a
10
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_e.xml b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_e.xml
index 88b47ba718..8391150c6d 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -28,4 +28,5 @@
units/celts/cavalry_spearman_e.xml
+
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_a.xml b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_a.xml
index dcf6588107..6baf53889a 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- celt_cavalry_swordsman_e
+ units/celt_cavalry_swordsman_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_b.xml b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_b.xml
index 43874b28ac..f96ad9627c 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_b.xml
@@ -8,7 +8,7 @@
units/celt_cavalry_swordsman.png
- celt_cavalry_swordsman_a
+ units/celt_cavalry_swordsman_a
3.0
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_e.xml b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_e.xml
index 4ea6536ad4..3de7f64bda 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -31,4 +31,5 @@
units/celts/cavalry_swordsman_e.xml
+
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_a.xml b/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_a.xml
index 39772929a5..91ef4c5398 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- celt_infantry_javelinist_e
+ units/celt_infantry_javelinist_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_b.xml b/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_b.xml
index 7574a5234d..9adc5ca7bd 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_b.xml
@@ -8,7 +8,7 @@
units/celt_infantry_javelinist.png
- celt_infantry_javelinist_a
+ units/celt_infantry_javelinist_a
2.0
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_e.xml b/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_e.xml
index c03fbc29c3..ee6384c1f5 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -29,4 +29,5 @@
units/celts/infantry_javelinist_e.xml
+
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_a.xml b/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_a.xml
index 03a6b17750..272dab41d0 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- celt_infantry_spearman_e
+ units/celt_infantry_spearman_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_b.xml
index 29988f3b94..5330045d3b 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_b.xml
@@ -8,7 +8,7 @@
units/celt_infantry_spearman.png
- celt_infantry_spearman_a
+ units/celt_infantry_spearman_a
3.0
diff --git a/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_e.xml b/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_e.xml
index 1e999f28cd..99f939f47e 100644
--- a/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -33,4 +33,5 @@
units/celts/infantry_spearman_e.xml
+
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_a.xml b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_a.xml
index f757cd1b0b..4b0757e45b 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- hele_cavalry_javelinist_e
+ units/hele_cavalry_javelinist_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_b.xml b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_b.xml
index 575a6303e1..4217966f52 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_b.xml
@@ -8,7 +8,7 @@
units/hele_cavalry_javelinist.png
- hele_cavalry_javelinist_a
+ units/hele_cavalry_javelinist_a
110
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_e.xml b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_e.xml
index afb8e318a6..e6e9066590 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -29,5 +29,5 @@
units/hellenes/cavalry_javelinist_e.xml
-
+
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_a.xml b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_a.xml
index 3d557a6f3c..f2b5197748 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- hele_cavalry_swordsman_e
+ units/hele_cavalry_swordsman_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_b.xml b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_b.xml
index 5cd34d36e8..87c1977abc 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_b.xml
@@ -8,7 +8,7 @@
units/hele_cavalry_swordsman.png
- hele_cavalry_swordsman_a
+ units/hele_cavalry_swordsman_a
110
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_e.xml b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_e.xml
index 6cefcb6377..0b973dd5db 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -31,5 +31,5 @@
units/hellenes/cavalry_swordsman_e.xml
-
+
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_a.xml b/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_a.xml
index cdaba9dec6..eaf2b53be1 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- hele_infantry_archer_e
+ units/hele_infantry_archer_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_b.xml b/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_b.xml
index d37a786a22..8aa3e693fb 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_b.xml
@@ -9,7 +9,7 @@
units/hele_infantry_archer.png
- hele_infantry_archer_a
+ units/hele_infantry_archer_a
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_e.xml b/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_e.xml
index c41d15a1b9..b32557e9b2 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -33,4 +33,5 @@
units/hellenes/infantry_archer_e.xml
+
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_a.xml b/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_a.xml
index b2ef9502ba..20b14f7451 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- hele_infantry_javelinist_e
+ units/hele_infantry_javelinist_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_b.xml b/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_b.xml
index af977dd301..43503f6029 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_b.xml
@@ -8,7 +8,7 @@
units/hele_infantry_javelinist.png
- hele_infantry_javelinist_a
+ units/hele_infantry_javelinist_a
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_e.xml b/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_e.xml
index 0cfa9da1da..694134ff6d 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -18,6 +18,7 @@
units/hellenes/infantry_javelinist_e.xml
+
110
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_a.xml b/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_a.xml
index d4c4d55c6c..987903072a 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_a.xml
@@ -1,10 +1,10 @@
- Advanced
+ Advanced
- hele_infantry_spearman_e
+ units/hele_infantry_spearman_e
0.75
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_b.xml
index 13984d9956..19bf589a38 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_b.xml
@@ -8,7 +8,7 @@
units/hele_infantry_spearman.png
- hele_infantry_spearman_a
+ units/hele_infantry_spearman_a
diff --git a/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_e.xml b/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_e.xml
index 0f2e6d5c74..6d72362575 100644
--- a/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_e.xml
@@ -1,7 +1,7 @@
- Elite
+ Elite
0.5
@@ -33,5 +33,5 @@
units/hellenes/infantry_spearman_e.xml
-
+
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_a.xml b/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_a.xml
index 39c6a8f1fa..3ae993e7a2 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_a.xml
@@ -1,7 +1,10 @@
+
+ Advanced
+
- iber_cavalry_spearman_e
+ units/iber_cavalry_spearman_e
units/iberians/cavalry_spearman_a.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_b.xml
index 90cf4a51cd..091f824935 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_b.xml
@@ -7,7 +7,7 @@
Armed like the light infantry, Iberian cavalry were often pursued as mercenaries, especially by the Carthaginians. Mounted on excellent horses and wielding high-grade swords they were capable of taking on heavy or light cavalry. As with all Iberians armor was scarce, but they wore the ubiquitous sinew caps made famous by the peoples of the peninsula.
- iber_cavalry_spearman_a
+ units/iber_cavalry_spearman_a
units/iberians/cavalry_spearman_b.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_e.xml b/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_e.xml
index a81c7c4edb..0d3e075e09 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_cavalry_spearman_e.xml
@@ -1,5 +1,8 @@
+
+ Elite
+
units/iberians/cavalry_spearman_e.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_a.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_a.xml
index cbfb35f588..c65bcae060 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_a.xml
@@ -1,7 +1,10 @@
+
+ Advanced
+
- iber_infantry_javelinist_e
+ units/iber_infantry_javelinist_e
units/iberians/infantry_javelinist_a.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_b.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_b.xml
index 982add24ec..8ffe9631bd 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_b.xml
@@ -7,7 +7,7 @@
units/cart_cavalry_javelinist.png
- iber_infantry_javelinist_a
+ units/iber_infantry_javelinist_a
units/iberians/infantry_javelinist_b.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_e.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_e.xml
index 6856c34585..7c6e0147da 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_javelinist_e.xml
@@ -1,5 +1,8 @@
+
+ Elite
+
units/iberians/infantry_javelinist_e.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_a.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_a.xml
index 7706fa2361..4602143873 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_a.xml
@@ -1,7 +1,10 @@
+
+ Advanced
+
- iber_infantry_slinger_e
+ units/iber_infantry_slinger_e
units/iberians/infantry_slinger_a.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_b.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_b.xml
index 97bb04dd85..49c4a5e65f 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_b.xml
@@ -7,7 +7,7 @@
Iberian slingers were the undisputed masters of the weapon and extracted a high toll of the enemy. Going into combat scantily clad at best, the slinger carried three slings tied around his waist, each of a different length allowing him to attack opponents from all ranges. Unlike other cultures, the Iberian slingers threw rocks instead of specially made lead shot.
- iber_infantry_slinger_a
+ units/iber_infantry_slinger_a
units/iberians/infantry_slinger_b.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_e.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_e.xml
index a43646f011..b0cbc84783 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_slinger_e.xml
@@ -1,5 +1,8 @@
+
+ Elite
+
units/iberians/infantry_slinger_e.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_a.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_a.xml
index 4a39704a57..5661c0ee60 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_a.xml
@@ -1,7 +1,10 @@
+
+ Advanced
+
- iber_infantry_spearman_e
+ units/iber_infantry_spearman_e
units/iberians/infantry_spearman_a.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_b.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_b.xml
index cf0c22299b..04ce1a8c17 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_b.xml
@@ -7,7 +7,7 @@
A long-bladed spear was a chief melee weapon of the Iberian infantry, often used after the javelins had been thrown. Typically carried by infantry known as scutarii for their long oval body shields, the spearmen would close in formation to attack their opponents. Usually lightly armored, they were quick and had a ferocious reputation.
- iber_infantry_spearman_a
+ units/iber_infantry_spearman_a
units/iberians/infantry_spearman_b.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_e.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_e.xml
index e9b37cf95f..a7bc2fae31 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_spearman_e.xml
@@ -1,5 +1,8 @@
+
+ Elite
+
units/iberians/infantry_spearman_e.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_a.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_a.xml
index c93b871a9c..3e455c0775 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_a.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_a.xml
@@ -1,7 +1,10 @@
+
+ Advanced
+
- iber_infantry_swordsman_e
+ units/iber_infantry_swordsman_e
units/iberians/infantry_swordsman_a.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_b.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_b.xml
index 6686dd6a01..d36cc3223d 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_b.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_b.xml
@@ -7,7 +7,7 @@
The Iberians were master sword-smiths and the falcata was their greatest creation. Wielded by superb swordsmen equipped with light armor and a buckler known as a caetra, they caused untold carnage. Thanks to this Iberian infantry were fast and agile unlike many of their opponents and could bite hard when they attacked. Their skill with sword and buckler were legendary, allowing them to go toe-to-toe with heavy infantry.
- iber_infantry_swordsman_a
+ units/iber_infantry_swordsman_a
units/iberians/infantry_swordsman_b.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_e.xml b/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_e.xml
index 753bf1cc2d..f4b228110c 100644
--- a/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_e.xml
+++ b/binaries/data/mods/public/simulation/templates/units/iber_infantry_swordsman_e.xml
@@ -1,5 +1,8 @@
+
+ Elite
+
units/iberians/infantry_swordsman_e.xml
diff --git a/binaries/data/mods/public/simulation/templates/units/mace_hypaspist.xml b/binaries/data/mods/public/simulation/templates/units/mace_hypaspist.xml
index 8db4195364..52670a9379 100644
--- a/binaries/data/mods/public/simulation/templates/units/mace_hypaspist.xml
+++ b/binaries/data/mods/public/simulation/templates/units/mace_hypaspist.xml
@@ -8,8 +8,8 @@
units/macedonian_hypaspist.png
- mace_argyraspis
- 500
+ units/mace_argyraspis
+ 500
diff --git a/binaries/data/mods/public/simulation/templates/units/rome_legionnaire_imperial.xml b/binaries/data/mods/public/simulation/templates/units/rome_legionnaire_imperial.xml
index 28c6eb304f..626f3972d5 100644
--- a/binaries/data/mods/public/simulation/templates/units/rome_legionnaire_imperial.xml
+++ b/binaries/data/mods/public/simulation/templates/units/rome_legionnaire_imperial.xml
@@ -8,8 +8,8 @@
units/rome_super_legion_imperial.png
- rome_centurio_imperial
- 700
+ units/rome_centurio_imperial
+ 700
10.0
diff --git a/binaries/data/mods/public/simulation/templates/units/rome_legionnaire_marian.xml b/binaries/data/mods/public/simulation/templates/units/rome_legionnaire_marian.xml
index 375a4a38ad..4beea35ee8 100644
--- a/binaries/data/mods/public/simulation/templates/units/rome_legionnaire_marian.xml
+++ b/binaries/data/mods/public/simulation/templates/units/rome_legionnaire_marian.xml
@@ -9,8 +9,8 @@
units/rome_super_legion_marian.png
- rome_legionnaire_imperial
- 500
+ units/rome_legionnaire_imperial
+ 500
units/romans/super_unit_3.xml