diff --git a/OpenRA.Game/Traits/Render/RenderBuildingWarFactory.cs b/OpenRA.Game/Traits/Render/RenderBuildingWarFactory.cs index 053ba3b9a3..969fba8f4c 100644 --- a/OpenRA.Game/Traits/Render/RenderBuildingWarFactory.cs +++ b/OpenRA.Game/Traits/Render/RenderBuildingWarFactory.cs @@ -53,7 +53,7 @@ namespace OpenRA.Traits public void Tick(Actor self) { if (isOpen && !self.World.WorldActor.traits.Get() - .GetUnitsAt(((1/24f) * self.CenterLocation).ToInt2()).Any()) + .GetUnitsAt(((1f/Game.CellSize) * self.CenterLocation).ToInt2()).Any()) { isOpen = false; roof.PlayBackwardsThen(GetPrefix(self) + "build-top", () => roof.Play(GetPrefix(self) + "idle-top")); diff --git a/OpenRA.Game/Traits/World/UnitInfluence.cs b/OpenRA.Game/Traits/World/UnitInfluence.cs index a3be7ef6a6..fc99253521 100644 --- a/OpenRA.Game/Traits/World/UnitInfluence.cs +++ b/OpenRA.Game/Traits/World/UnitInfluence.cs @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using OpenRA.FileFormats; namespace OpenRA.Traits { @@ -33,10 +34,12 @@ namespace OpenRA.Traits public class UnitInfluence : ITick { List[,] influence; + Map map; public UnitInfluence( Actor self ) { - int size = self.World.Map.MapSize; + map = self.World.Map; + var size = self.World.Map.MapSize; influence = new List[size, size]; for (int i = 0; i < size; i++) for (int j = 0; j < size; j++) @@ -88,8 +91,10 @@ namespace OpenRA.Traits throw new InvalidOperationException( "UIM: Sanity check failed B" ); } + Actor[] noActors = { }; public IEnumerable GetUnitsAt( int2 a ) { + if (!map.IsInMap(a)) return noActors; return influence[ a.X, a.Y ]; } diff --git a/mods/cnc/infantry.yaml b/mods/cnc/infantry.yaml index e69de29bb2..7cd14831bc 100644 --- a/mods/cnc/infantry.yaml +++ b/mods/cnc/infantry.yaml @@ -0,0 +1,57 @@ +E1: + Inherits: ^Infantry + Buildable: + TechLevel: 1 + Owner: gdi, nod + Cost: 100 + Description: Minigunner + LongDesc: General-purpose infantry. Strong vs Infantry\n Weak vs Vehicles + Icon: e1icnh + Selectable: + Bounds: 12,17,0,-6 + Unit: + HP: 50 + Speed: 4 + AttackBase: + PrimaryWeapon: M16 + TakeCover: + +E2: + Inherits: ^Infantry + Buildable: + TechLevel: 1 + Owner: gdi + Cost: 160 + Description: Grenadier + LongDesc: Infantry armed with grenades. \n Strong vs Buildings, Infantry\n Weak vs Vehicles + Icon: e2icnh + Selectable: + Bounds: 12,17,0,-6 + Unit: + HP: 50 + Speed: 4 + AttackBase: + PrimaryWeapon: Grenade + PrimaryOffset: 0,0,0,-10 + FireDelay: 15 + TakeCover: + +E3: + Inherits: ^Infantry + Buildable: + TechLevel: 2 + Owner: nod + Cost: 300 + Description: Rocket Soldier + LongDesc: Anti-tank/Anti-aircraft infantry. \n Strong vs Tanks, Aircraft\n Weak vs Infantry + Icon: e3icnh + Selectable: + Bounds: 12,17,0,-6 + Unit: + HP: 45 + Speed: 3 + AttackBase: + PrimaryWeapon: Rockets + PrimaryOffset: 0,0,0,-10 + FireDelay: 15 + TakeCover: \ No newline at end of file diff --git a/mods/cnc/sequences-infantry.xml b/mods/cnc/sequences-infantry.xml index b95c7315aa..fec15e2db2 100644 --- a/mods/cnc/sequences-infantry.xml +++ b/mods/cnc/sequences-infantry.xml @@ -1,7 +1,84 @@  - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mods/cnc/weapons.ini b/mods/cnc/weapons.ini index 7e27c9cbfb..ca4b5d71be 100644 --- a/mods/cnc/weapons.ini +++ b/mods/cnc/weapons.ini @@ -71,7 +71,7 @@ Report=GUN18 [M16] Damage=15 ROF=20 -Range=2 +Range=4 Projectile=Invisible Speed=100 Warhead=SA @@ -82,7 +82,7 @@ Report=MGUN2 [Rockets] Damage=30 ROF=60 -Range=4 +Range=6 Projectile=HeatSeeker Speed=25 Warhead=AP @@ -123,7 +123,7 @@ Report=FLAMER2 [Grenade] Damage=50 ROF=50 -Range=3.25 +Range=5 Projectile=Lobbed Speed=5 Warhead=HE @@ -335,6 +335,7 @@ AA=yes Image=DRAGON ROT=5 Rotates=yes +Trail=smokey ; anti aircraft missile [AAMissile]