Ticket #697: units_promotion.diff
File units_promotion.diff, 44.3 KB (added by , 13 years ago) |
---|
-
binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_a.xml
33 33 <animation file="infantry/general/death/inf_04.psa" name="Death" speed="400"/> 34 34 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 35 35 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 36 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 36 37 </animations> 37 38 <mesh>skeletal/m_pants.dae</mesh> 38 39 <props> -
binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_e.xml
31 31 <animation file="infantry/general/death/inf_04.psa" name="Death" speed="400"/> 32 32 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 33 33 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 34 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 34 35 </animations> 35 36 <mesh>skeletal/m_tights.dae</mesh> 36 37 <props> -
binaries/data/mods/public/art/actors/units/celts/infantry_spearman_a.xml
30 30 <animation file="infantry/general/death/inf_04.psa" name="Death" speed="400"/> 31 31 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 32 32 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 33 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 33 34 </animations> 34 35 <mesh>skeletal/m_pants_celt.dae</mesh> 35 36 <props> -
binaries/data/mods/public/art/actors/units/celts/infantry_spearman_e.xml
31 31 <animation file="infantry/general/death/inf_04.psa" name="Death" speed="400"/> 32 32 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 33 33 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 34 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 34 35 </animations> 35 36 <mesh>skeletal/m_pants_celt.dae</mesh> 36 37 <props> -
binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_a.xml
28 28 <animation file="infantry/general/death/inf_04.psa" name="Death" speed="400"/> 29 29 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 30 30 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 31 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 31 32 </animations> 32 33 <mesh>skeletal/m_tunic_short.dae</mesh> 33 34 <props> -
binaries/data/mods/public/art/actors/units/hellenes/infantry_archer_e.xml
27 27 <animation file="infantry/general/death/inf_04.psa" name="Death" speed="400"/> 28 28 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 29 29 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 30 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 30 31 </animations> 31 32 <mesh>skeletal/m_tunic_long.dae</mesh> 32 33 <props> -
binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_a.xml
30 30 <animation file="infantry/general/death/inf_05.psa" name="Death" speed="600"/> 31 31 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 32 32 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 33 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 33 34 </animations> 34 35 <props> 35 36 <prop actor="props/units/heads/floppy_b.xml" attachpoint="helmet"/> -
binaries/data/mods/public/art/actors/units/hellenes/infantry_javelinist_e.xml
30 30 <animation file="infantry/general/death/inf_05.psa" name="Death" speed="600"/> 31 31 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 32 32 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 33 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 33 34 </animations> 34 35 <mesh>skeletal/m_tunic_long.dae</mesh> 35 36 <props> -
binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_a.xml
27 27 <animation file="infantry/general/death/inf_04.psa" name="Death" speed="400"/> 28 28 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 29 29 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 30 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 30 31 </animations> 31 32 <mesh>skeletal/m_tunic_short.dae</mesh> 32 33 <props> -
binaries/data/mods/public/art/actors/units/hellenes/infantry_spearman_e.xml
27 27 <animation file="infantry/general/death/inf_04.psa" name="Death" speed="400"/> 28 28 <animation file="infantry/general/death/inf_06.psa" name="Death" speed="500"/> 29 29 <animation file="infantry/general/death/inf_07.psa" name="Death" speed="400"/> 30 <animation file="biped/not used/inf_salute_c.psa" name="Promotion" speed="288"/> 30 31 </animations> 31 32 <mesh>skeletal/m_tunic_short.dae</mesh> 32 33 <props> -
binaries/data/mods/public/gui/session/selection.js
190 190 // Update the selection to take care of changes (like units that have been killed) 191 191 EntitySelection.prototype.update = function() 192 192 { 193 this.checkRenamedEntities(); 193 194 for each (var ent in this.selected) 194 195 { 195 196 var entState = GetEntityState(ent); … … 218 219 } 219 220 }; 220 221 222 /** 223 * Update selection if some selected entities was renamed 224 * (in case of unit promotion or finishing building structure) 225 */ 226 EntitySelection.prototype.checkRenamedEntities = function() 227 { 228 var renamedEntities = Engine.GuiInterfaceCall("GetRenamedEntities", true); 229 if (renamedEntities.length > 0) 230 { 231 var selectedEntities = this.toList(); 232 var removeFromSelectionList = []; 233 var addToSelectionList = []; 234 for each (var renamedEntity in renamedEntities) 235 { 236 if (selectedEntities.indexOf(renamedEntity.oldEntityId) != -1) 237 { 238 removeFromSelectionList.push(renamedEntity.oldEntityId); 239 addToSelectionList.push(renamedEntity.newEntityId); 240 } 241 } 242 this.removeList(removeFromSelectionList); 243 this.addList(addToSelectionList); 244 } 245 } 246 221 247 EntitySelection.prototype.addList = function(ents) 222 248 { 223 249 var selectionSize = this.toList().length; -
binaries/data/mods/public/gui/session/selection_details.js
65 65 { 66 66 getGUIObjectByName("health").hidden = true; 67 67 } 68 69 // Experience 70 if (entState.promotion) 71 { 72 var experienceBar = getGUIObjectByName("experienceBar"); 73 var experienceSize = experienceBar.size; 74 experienceSize.rtop = 100 - 100 * Math.max(0, Math.min(1, 1.0 * entState.promotion.curr / entState.promotion.req)); 75 experienceBar.size = experienceSize; 68 76 77 experience = "[font=\"serif-bold-13\"]XP [/font]" + entState.promotion.curr; 78 if (entState.promotion.curr < entState.promotion.req) experience += "/" + entState.promotion.req; 79 getGUIObjectByName("experience").tooltip = experience; 80 getGUIObjectByName("experience").hidden = false; 81 } 82 else 83 { 84 getGUIObjectByName("experience").hidden = true; 85 } 86 69 87 // Resource stats 70 88 var resources = ""; 71 89 var resourceType = ""; -
binaries/data/mods/public/gui/session/session.xml
498 498 <object type="image" sprite="resourceForeground" ghost="true" name="resourceBar"/> 499 499 <object type="image" sprite="statsBarShader" ghost="true"/> 500 500 </object> 501 502 <!-- Experience bar --> 503 <object size="46 0 58 100%" type="image" name="experience" tooltip="XP" tooltip_style="snToolTip"> 504 <object type="image" sprite="experienceBackground" ghost="true"/> 505 <object type="image" sprite="experienceForeground" ghost="true" name="experienceBar"/> 506 <object type="image" sprite="statsBarShader" ghost="true"/> 507 </object> 501 508 </object> 502 509 503 510 <!-- Specific Name --> -
binaries/data/mods/public/gui/session/sprites.xml
706 706 <sprite name="staminaForeground"> 707 707 <image backcolor="blue"/> 708 708 </sprite> 709 710 <sprite name="experienceBackground"> 711 <image backcolor="darkgray"/> 712 </sprite> 709 713 714 <sprite name="experienceForeground"> 715 <image backcolor="white"/> 716 </sprite> 717 710 718 <!-- ================================ ================================ --> 711 719 <!-- Chat --> 712 720 <!-- ================================ ================================ --> -
binaries/data/mods/public/simulation/components/Armour.js
19 19 20 20 Armour.prototype.Init = function() 21 21 { 22 this.invulnerable = false; 22 23 }; 23 24 25 Armour.prototype.SetInvulnerability = function(invulnerability) 26 { 27 this.invulnerable = invulnerability; 28 }; 29 24 30 Armour.prototype.TakeDamage = function(hack, pierce, crush) 25 31 { 32 if (this.invulnerable) return { "killed": false }; 26 33 // Adjust damage values based on armour 27 34 var adjHack = Math.max(0, hack - this.template.Hack); 28 35 var adjPierce = Math.max(0, pierce - this.template.Pierce); -
binaries/data/mods/public/simulation/components/Attack.js
205 205 206 206 /** 207 207 * Called when some units kills something (another unit, building, animal etc) 208 * update player statistics only for now209 208 */ 210 209 Attack.prototype.TargetKilled = function(killerEntity, targetEntity) 211 210 { … … 213 212 if (cmpKillerPlayerStatisticsTracker) cmpKillerPlayerStatisticsTracker.KilledEntity(targetEntity); 214 213 var cmpTargetPlayerStatisticsTracker = QueryOwnerInterface(targetEntity, IID_StatisticsTracker); 215 214 if (cmpTargetPlayerStatisticsTracker) cmpTargetPlayerStatisticsTracker.LostEntity(targetEntity); 215 216 // if unit can collect loot, lets try to collect it 217 var cmpLooter = Engine.QueryInterface(killerEntity, IID_Looter); 218 if (cmpLooter) 219 { 220 cmpLooter.Collect(targetEntity); 221 } 216 222 } 217 223 218 224 /** -
binaries/data/mods/public/simulation/components/Foundation.js
121 121 Engine.PostMessage(this.entity, MT_ConstructionFinished, 122 122 { "entity": this.entity, "newentity": building }); 123 123 124 Engine.BroadcastMessage(MT_EntityRenamed, { oldEntityId: this.entity, newEntityId: building }); 125 124 126 Engine.DestroyEntity(this.entity); 125 127 } 126 128 }; -
binaries/data/mods/public/simulation/components/GuiInterface.js
1 1 function GuiInterface() 2 2 { 3 3 this.notifications = []; 4 this.renamedEntities = []; 4 5 } 5 6 6 7 GuiInterface.prototype.Schema = … … 81 82 return ret; 82 83 }; 83 84 85 GuiInterface.prototype.GetRenamedEntities = function(player, clearList) 86 { 87 var result = this.renamedEntities.slice(); 88 if (clearList) this.renamedEntities = []; 89 return result; 90 }; 91 84 92 GuiInterface.prototype.GetEntityState = function(player, ent) 85 93 { 86 94 var cmpTempMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); … … 199 207 }; 200 208 } 201 209 210 var cmpPromotion = Engine.QueryInterface(ent, IID_Promotion); 211 if (cmpPromotion) 212 { 213 ret.promotion = { 214 "curr": cmpPromotion.GetCurr(), 215 "req": cmpPromotion.GetReq() 216 }; 217 } 218 202 219 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 203 220 ret.visibility = cmpRangeManager.GetLosVisibility(ent, player); 204 221 … … 462 479 cmpRangeManager.SetDebugOverlay(enabled); 463 480 }; 464 481 482 GuiInterface.prototype.OnGlobalEntityRenamed = function(msg) 483 { 484 this.renamedEntities.push(msg); 485 } 486 465 487 // List the GuiInterface functions that can be safely called by GUI scripts. 466 488 // (GUI scripts are non-deterministic and untrusted, so these functions must be 467 489 // appropriately careful. They are called with a first argument "player", which is … … 471 493 472 494 "GetSimulationState": 1, 473 495 "GetExtendedSimulationState": 1, 496 "GetRenamedEntities": 1, 474 497 "GetEntityState": 1, 475 498 "GetTemplateData": 1, 476 499 "GetNextNotification": 1, -
binaries/data/mods/public/simulation/components/Identity.js
112 112 113 113 Identity.prototype.GetRank = function() 114 114 { 115 if (this.template.Rank) 116 return this.template.Rank; 117 return ""; 115 return (this.template.Rank || ""); 118 116 }; 119 117 118 Identity.prototype.SetRank = function(newRank) 119 { 120 this.template.Rank = newRank; 121 }; 122 120 123 Identity.prototype.GetClassesList = function() 121 124 { 122 125 if (this.template.Classes) -
binaries/data/mods/public/simulation/components/interfaces/Messages.js
1 /** 2 * Broadcast message 3 * sent when one entity is changed to other: 4 * from Foundation component when building constuction is done 5 * and from Promotion component when unit is promoted 6 * Data: { oldEntityId: <integer>, newEntityId: <integer> } 7 */ 8 Engine.RegisterMessageType("EntityRenamed"); -
binaries/data/mods/public/simulation/components/Loot.js
17 17 "<element name='metal'><data type='nonNegativeInteger'/></element>" + 18 18 "</optional>"; 19 19 20 /* 21 * TODO: this all needs to be designed and implemented 22 */ 20 Loot.prototype.GetXp = function() 21 { 22 return this.template.xp; 23 }; 23 24 25 Loot.prototype.GetResources = function() 26 { 27 return { 28 "food": +(this.template.food || 0), 29 "wood": +(this.template.wood || 0), 30 "metal": +(this.template.metal || 0), 31 "stone": +(this.template.stone || 0) 32 }; 33 }; 34 24 35 Engine.RegisterComponentType(IID_Loot, "Loot", Loot); -
binaries/data/mods/public/simulation/components/Looter.js
3 3 Looter.prototype.Schema = 4 4 "<empty/>"; 5 5 6 /* 7 * T ODO: this all needs to be designed and implemented6 /** 7 * Try to collect loot from target entity 8 8 */ 9 9 Looter.prototype.Collect = function(targetEntity) 10 { 11 var cmpLoot = Engine.QueryInterface(targetEntity, IID_Loot); 12 if (!cmpLoot) return; 13 14 var xp = cmpLoot.GetXp(); 15 if (xp > 0) 16 { 17 var cmpPromotion = Engine.QueryInterface(this.entity, IID_Promotion); 18 if (cmpPromotion) cmpPromotion.IncreaseXp(xp); 19 } 20 var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player); 21 cmpPlayer.AddResources(cmpLoot.GetResources()); 22 } 23 10 24 Engine.RegisterComponentType(IID_Looter, "Looter", Looter); 11 25 -
binaries/data/mods/public/simulation/components/Promotion.js
6 6 "</element>" + 7 7 "<element name='Req'>" + 8 8 "<data type='positiveInteger'/>" + 9 "</element>"; 9 "</element>" + 10 "<optional>" + 11 "<element name='Curr'>" + 12 "<data type='positiveInteger'/>" + 13 "</element>" + 14 "</optional>"; 10 15 11 /* 12 * TODO: this all needs to be designed and implemented 13 */ 16 Promotion.prototype.Init = function() 17 { 18 this.curr = +(this.template.Curr || 0); 19 } 20 21 Promotion.prototype.GetReq = function() 22 { 23 return +(this.template.Req); 24 }; 14 25 26 Promotion.prototype.GetCurr = function() 27 { 28 return +(this.curr || 0); 29 }; 30 31 Promotion.prototype.GetPromotedTemplateName = function() 32 { 33 if (this.template.Entity) return this.template.Entity; 34 // TODO: check for name with following suffix b -> a -> e 35 return null; 36 } 37 38 Promotion.prototype.CanPromote = function() 39 { 40 var cmpIdentity = Engine.QueryInterface(this.entity, IID_Identity); 41 if (cmpIdentity.GetRank == "" || cmpIdentity.GetRank == "Elite") return false; 42 if (!this.GetPromotedTemplateName()) return false; 43 return true; 44 } 45 46 Promotion.prototype.Promote = function() 47 { 48 // Create promoted unit entity 49 var promotedUnitEntity = Engine.AddEntity(this.GetPromotedTemplateName()); 50 51 // Copy parameters from current entity to promoted one 52 var cmpCurrentUnitPosition = Engine.QueryInterface(this.entity, IID_Position); 53 var cmpPromotedUnitPosition = Engine.QueryInterface(promotedUnitEntity, IID_Position); 54 var pos = cmpCurrentUnitPosition.GetPosition(); 55 cmpPromotedUnitPosition.JumpTo(pos.x, pos.z); 56 var rot = cmpCurrentUnitPosition.GetRotation(); 57 cmpPromotedUnitPosition.SetYRotation(rot.y); 58 cmpPromotedUnitPosition.SetXZRotation(rot.x, rot.z); 59 60 var cmpCurrentUnitOwnership = Engine.QueryInterface(this.entity, IID_Ownership); 61 var cmpPromotedUnitOwnership = Engine.QueryInterface(promotedUnitEntity, IID_Ownership); 62 cmpPromotedUnitOwnership.SetOwner(cmpCurrentUnitOwnership.GetOwner()); 63 64 var cmpPromotedUnitPromotion = Engine.QueryInterface(promotedUnitEntity, IID_Promotion); 65 if (cmpPromotedUnitPromotion) 66 cmpPromotedUnitPromotion.IncreaseXp(this.curr - this.template.Req); 67 68 var cmpCurrentUnitResourceGatherer = Engine.QueryInterface(this.entity, IID_ResourceGatherer); 69 var cmpPromotedUnitResourceGatherer = Engine.QueryInterface(promotedUnitEntity, IID_ResourceGatherer); 70 if (cmpCurrentUnitResourceGatherer && cmpPromotedUnitResourceGatherer) 71 { 72 var carriedResorces = cmpCurrentUnitResourceGatherer.GetCarryingStatus(); 73 cmpPromotedUnitResourceGatherer.GiveResources(carriedResorces); 74 } 75 76 var cmpCurrentUnitAI = Engine.QueryInterface(this.entity, IID_UnitAI); 77 var cmpPromotedUnitAI = Engine.QueryInterface(promotedUnitEntity, IID_UnitAI); 78 cmpPromotedUnitAI.Cheer(); 79 var orders = cmpCurrentUnitAI.GetOrders(); 80 cmpPromotedUnitAI.AddOrders(orders); 81 82 Engine.BroadcastMessage(MT_EntityRenamed, { oldEntityId: this.entity, newEntityId: promotedUnitEntity }); 83 84 // Destroy current entity 85 Engine.DestroyEntity(this.entity); 86 } 87 88 Promotion.prototype.IncreaseXp = function(amount) 89 { 90 this.curr += +(amount); 91 if (this.CanPromote() && this.curr >= this.template.Req) 92 { 93 this.Promote(); 94 } 95 } 96 15 97 Engine.RegisterComponentType(IID_Promotion, "Promotion", Promotion); -
binaries/data/mods/public/simulation/components/ResourceGatherer.js
81 81 "amount": this.carrying[type], 82 82 "max": +this.template.Capacities[type] 83 83 }); 84 } 84 } 85 85 return ret; 86 86 }; 87 87 88 88 /** 89 * Used to instantly give resources to unit 90 * @param resources The same structure as returned form GetCarryingStatus 91 */ 92 ResourceGatherer.prototype.GiveResources = function(resources) 93 { 94 for each (var resource in resources) 95 { 96 this.carrying[resource.type] = +(resource.amount); 97 } 98 }; 99 100 /** 89 101 * Returns the type of one particular resource this unit is 90 102 * currently carrying, or undefined if none. 91 103 */ -
binaries/data/mods/public/simulation/components/tests/test_GuiInterface.js
5 5 Engine.LoadComponentScript("interfaces/GarrisonHolder.js"); 6 6 Engine.LoadComponentScript("interfaces/Health.js"); 7 7 Engine.LoadComponentScript("interfaces/Identity.js"); 8 Engine.LoadComponentScript("interfaces/Promotion.js"); 8 9 Engine.LoadComponentScript("interfaces/RallyPoint.js"); 9 10 Engine.LoadComponentScript("interfaces/ResourceDropsite.js"); 10 11 Engine.LoadComponentScript("interfaces/ResourceGatherer.js"); -
binaries/data/mods/public/simulation/components/UnitAI.js
191 191 this.SetNextState("INDIVIDUAL.GARRISON.GARRISONED"); 192 192 } 193 193 }, 194 195 "Order.Cheering": function(msg) { 196 this.SetNextState("INDIVIDUAL.CHEERING"); 197 }, 194 198 195 199 // States for the special entity representing a group of units moving in formation: 196 200 "FORMATIONCONTROLLER": { … … 693 697 }, 694 698 }, 695 699 700 "CHEERING": { 701 "enter": function() { 702 // Unit is invulnerable while cheering 703 var cmpDamageReceiver = Engine.QueryInterface(this.entity, IID_DamageReceiver); 704 cmpDamageReceiver.SetInvulnerability(true); 705 this.SelectAnimation("promotion"); 706 this.StartTimer(4000, 4000); 707 return false; 708 }, 709 710 "leave": function() { 711 this.StopTimer(); 712 713 }, 714 715 "Timer": function(msg) { 716 var cmpDamageReceiver = Engine.QueryInterface(this.entity, IID_DamageReceiver); 717 cmpDamageReceiver.SetInvulnerability(false); 718 this.FinishOrder(); 719 }, 720 }, 696 721 }, 697 722 }; 698 723 … … 839 864 UnitAI.prototype.PushOrderFront = function(type, data) 840 865 { 841 866 var order = { "type": type, "data": data }; 842 this.orderQueue.unshift(order); 843 844 this.order = order; 845 UnitFsm.ProcessMessage(this, {"type": "Order."+this.order.type, "data": this.order.data}); 867 // If current order is cheering then add new order after it 868 if (this.order && this.order.type == "Cheering") 869 { 870 var cheeringOrder = this.orderQueue.shift(); 871 this.orderQueue.unshift(cheeringOrder, order); 872 } 873 else 874 { 875 this.orderQueue.unshift(order); 876 this.order = order; 877 UnitFsm.ProcessMessage(this, {"type": "Order."+this.order.type, "data": this.order.data}); 878 } 846 879 }; 847 880 848 881 UnitAI.prototype.ReplaceOrder = function(type, data) 849 882 { 850 this.orderQueue = []; 851 this.PushOrder(type, data); 883 // If current order is cheering then add new order after it 884 if (this.order && this.order.type == "Cheering") 885 { 886 var order = { "type": type, "data": data }; 887 var cheeringOrder = this.orderQueue.shift(); 888 this.orderQueue = [ cheeringOrder, order ]; 889 } 890 else 891 { 892 this.orderQueue = []; 893 this.PushOrder(type, data); 894 } 852 895 }; 853 896 897 UnitAI.prototype.GetOrders = function() 898 { 899 return this.orderQueue.slice(); 900 } 901 902 UnitAI.prototype.AddOrders = function(orders) 903 { 904 for each (var order in orders) 905 { 906 this.PushOrder(order.type, order.data); 907 } 908 } 909 854 910 UnitAI.prototype.TimerHandler = function(data, lateness) 855 911 { 856 912 // Reset the timer … … 1285 1341 this.AddOrder("Repair", { "target": target }, queued); 1286 1342 }; 1287 1343 1344 UnitAI.prototype.Cheer = function() 1345 { 1346 this.AddOrder("Cheering", null, false); 1347 }; 1348 1288 1349 UnitAI.prototype.SetStance = function(stance) 1289 1350 { 1290 1351 if (g_Stances[stance]) -
binaries/data/mods/public/simulation/templates/template_unit.xml
83 83 <RetainInFog>false</RetainInFog> 84 84 <AlwaysVisible>false</AlwaysVisible> 85 85 </Vision> 86 <Looter /> 86 87 </Entity> -
binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> celt_cavalry_javelinist_e</Entity>7 <Entity>units/celt_cavalry_javelinist_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_b.xml
8 8 <Icon>units/celt_cavalry_javelinist.png</Icon> 9 9 </Identity> 10 10 <Promotion> 11 <Entity> celt_cavalry_javelinist_a</Entity>11 <Entity>units/celt_cavalry_javelinist_a</Entity> 12 12 </Promotion> 13 13 <Armour> 14 14 <Hack>2.0</Hack> -
binaries/data/mods/public/simulation/templates/units/celt_cavalry_javelinist_e.xml
29 29 <VisualActor> 30 30 <Actor>units/celts/cavalry_javelinist_e.xml</Actor> 31 31 </VisualActor> 32 <Promotion disable="" /> 32 33 </Entity> -
binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> celt_cavalry_spearman_e</Entity>7 <Entity>units/celt_cavalry_spearman_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_b.xml
10 10 <Icon>units/celt_cavalry_spearman.png</Icon> 11 11 </Identity> 12 12 <Promotion> 13 <Entity> celt_cavalry_spearman_a</Entity>13 <Entity>units/celt_cavalry_spearman_a</Entity> 14 14 </Promotion> 15 15 <Cost> 16 16 <BuildTime>10</BuildTime> -
binaries/data/mods/public/simulation/templates/units/celt_cavalry_spearman_e.xml
28 28 <VisualActor> 29 29 <Actor>units/celts/cavalry_spearman_e.xml</Actor> 30 30 </VisualActor> 31 <Promotion disable="" /> 31 32 </Entity> -
binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> celt_cavalry_swordsman_e</Entity>7 <Entity>units/celt_cavalry_swordsman_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_b.xml
8 8 <Icon>units/celt_cavalry_swordsman.png</Icon> 9 9 </Identity> 10 10 <Promotion> 11 <Entity> celt_cavalry_swordsman_a</Entity>11 <Entity>units/celt_cavalry_swordsman_a</Entity> 12 12 </Promotion> 13 13 <Armour> 14 14 <Hack>3.0</Hack> -
binaries/data/mods/public/simulation/templates/units/celt_cavalry_swordsman_e.xml
31 31 <VisualActor> 32 32 <Actor>units/celts/cavalry_swordsman_e.xml</Actor> 33 33 </VisualActor> 34 <Promotion disable="" /> 34 35 </Entity> -
binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> celt_infantry_javelinist_e</Entity>7 <Entity>units/celt_infantry_javelinist_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_b.xml
8 8 <Icon>units/celt_infantry_javelinist.png</Icon> 9 9 </Identity> 10 10 <Promotion> 11 <Entity> celt_infantry_javelinist_a</Entity>11 <Entity>units/celt_infantry_javelinist_a</Entity> 12 12 </Promotion> 13 13 <Armour> 14 14 <Hack>2.0</Hack> -
binaries/data/mods/public/simulation/templates/units/celt_infantry_javelinist_e.xml
29 29 <VisualActor> 30 30 <Actor>units/celts/infantry_javelinist_e.xml</Actor> 31 31 </VisualActor> 32 <Promotion disable="" /> 32 33 </Entity> -
binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> celt_infantry_spearman_e</Entity>7 <Entity>units/celt_infantry_spearman_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_b.xml
8 8 <Icon>units/celt_infantry_spearman.png</Icon> 9 9 </Identity> 10 10 <Promotion> 11 <Entity> celt_infantry_spearman_a</Entity>11 <Entity>units/celt_infantry_spearman_a</Entity> 12 12 </Promotion> 13 13 <Armour> 14 14 <Hack>3.0</Hack> -
binaries/data/mods/public/simulation/templates/units/celt_infantry_spearman_e.xml
33 33 <VisualActor> 34 34 <Actor>units/celts/infantry_spearman_e.xml</Actor> 35 35 </VisualActor> 36 <Promotion disable="" /> 36 37 </Entity> -
binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> hele_cavalry_javelinist_e</Entity>7 <Entity>units/hele_cavalry_javelinist_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_b.xml
8 8 <Icon>units/hele_cavalry_javelinist.png</Icon> 9 9 </Identity> 10 10 <Promotion> 11 <Entity> hele_cavalry_javelinist_a</Entity>11 <Entity>units/hele_cavalry_javelinist_a</Entity> 12 12 </Promotion> 13 13 <Vision> 14 14 <Range>110</Range> -
binaries/data/mods/public/simulation/templates/units/hele_cavalry_javelinist_e.xml
29 29 <VisualActor> 30 30 <Actor>units/hellenes/cavalry_javelinist_e.xml</Actor> 31 31 </VisualActor> 32 32 <Promotion disable="" /> 33 33 </Entity> -
binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> hele_cavalry_swordsman_e</Entity>7 <Entity>units/hele_cavalry_swordsman_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_b.xml
8 8 <Icon>units/hele_cavalry_swordsman.png</Icon> 9 9 </Identity> 10 10 <Promotion> 11 <Entity> hele_cavalry_swordsman_a</Entity>11 <Entity>units/hele_cavalry_swordsman_a</Entity> 12 12 </Promotion> 13 13 <Vision> 14 14 <Range>110</Range> -
binaries/data/mods/public/simulation/templates/units/hele_cavalry_swordsman_e.xml
31 31 <VisualActor> 32 32 <Actor>units/hellenes/cavalry_swordsman_e.xml</Actor> 33 33 </VisualActor> 34 34 <Promotion disable="" /> 35 35 </Entity> -
binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> hele_infantry_archer_e</Entity>7 <Entity>units/hele_infantry_archer_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_b.xml
9 9 <Icon>units/hele_infantry_archer.png</Icon> 10 10 </Identity> 11 11 <Promotion> 12 <Entity> hele_infantry_archer_a</Entity>12 <Entity>units/hele_infantry_archer_a</Entity> 13 13 </Promotion> 14 14 <Cost> 15 15 <Resources> -
binaries/data/mods/public/simulation/templates/units/hele_infantry_archer_e.xml
33 33 <VisualActor> 34 34 <Actor>units/hellenes/infantry_archer_e.xml</Actor> 35 35 </VisualActor> 36 <Promotion disable="" /> 36 37 </Entity> -
binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> hele_infantry_javelinist_e</Entity>7 <Entity>units/hele_infantry_javelinist_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_b.xml
8 8 <Icon>units/hele_infantry_javelinist.png</Icon> 9 9 </Identity> 10 10 <Promotion> 11 <Entity> hele_infantry_javelinist_a</Entity>11 <Entity>units/hele_infantry_javelinist_a</Entity> 12 12 </Promotion> 13 13 <Cost> 14 14 <Resources> -
binaries/data/mods/public/simulation/templates/units/hele_infantry_javelinist_e.xml
22 22 <VisualActor> 23 23 <Actor>units/hellenes/infantry_javelinist_e.xml</Actor> 24 24 </VisualActor> 25 <Promotion disable="" /> 25 26 </Entity> -
binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_a.xml
4 4 <Rank>Advanced</Rank> 5 5 </Identity> 6 6 <Promotion> 7 <Entity> hele_infantry_spearman_e</Entity>7 <Entity>units/hele_infantry_spearman_e</Entity> 8 8 </Promotion> 9 9 <ResourceGatherer> 10 10 <BaseSpeed>0.75</BaseSpeed> -
binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_b.xml
8 8 <Icon>units/hele_infantry_spearman.png</Icon> 9 9 </Identity> 10 10 <Promotion> 11 <Entity> hele_infantry_spearman_a</Entity>11 <Entity>units/hele_infantry_spearman_a</Entity> 12 12 </Promotion> 13 13 <Cost> 14 14 <Resources> -
binaries/data/mods/public/simulation/templates/units/hele_infantry_spearman_e.xml
33 33 <VisualActor> 34 34 <Actor>units/hellenes/infantry_spearman_e.xml</Actor> 35 35 </VisualActor> 36 36 <Promotion disable="" /> 37 37 </Entity>