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