diff --git a/OpenRa.Game/Bullet.cs b/OpenRa.Game/Bullet.cs index 2c54b7dc88..f8e0ad9c7d 100644 --- a/OpenRa.Game/Bullet.cs +++ b/OpenRa.Game/Bullet.cs @@ -59,9 +59,15 @@ namespace OpenRa.Game t += 40; if (t > TotalTime()) /* remove finished bullets */ - { - Game.world.AddFrameEndTask(w => w.Remove(this)); - Game.world.AddFrameEndTask(w => w.Add(new Explosion(Dest))); + { + Game.world.AddFrameEndTask(w => + { + w.Remove(this); + w.Add(new Explosion(Dest, Warhead.Explosion)); + + if (Warhead.ImpactSound != null) + Game.PlaySound(Warhead.ImpactSound + ".aud", false); + }); var maxSpread = GetMaximumSpread(); var hitActors = Game.FindUnitsInCircle(Dest, GetMaximumSpread()); diff --git a/OpenRa.Game/Explosion.cs b/OpenRa.Game/Explosion.cs index 4ad50360da..223d8efa23 100644 --- a/OpenRa.Game/Explosion.cs +++ b/OpenRa.Game/Explosion.cs @@ -13,13 +13,15 @@ namespace OpenRa.Game Animation anim; int2 pos; - public Explosion(int2 pixelPos) + public Explosion(int2 pixelPos, int style) { this.pos = pixelPos; - anim = new Animation("veh-hit3"); - anim.PlayThen("idle", () => Game.world.AddFrameEndTask(w => w.Remove(this))); - Game.PlaySound("kaboom25.aud", false); + anim = new Animation("explosion"); + if (style != 0) + anim.PlayThen(style.ToString(), () => Game.world.AddFrameEndTask(w => w.Remove(this))); + else + Game.world.AddFrameEndTask(w => w.Remove(this)); } public void Tick() { anim.Tick(); } diff --git a/OpenRa.Game/GameRules/WarheadInfo.cs b/OpenRa.Game/GameRules/WarheadInfo.cs index 6b783cadaf..db0d306b4e 100644 --- a/OpenRa.Game/GameRules/WarheadInfo.cs +++ b/OpenRa.Game/GameRules/WarheadInfo.cs @@ -16,6 +16,8 @@ namespace OpenRa.Game.GameRules public readonly bool Ore = false; public readonly int Explosion = 0; public readonly int InfDeath = 0; + public readonly string ImpactSound = null; + public readonly string WaterImpactSound = null; public float EffectivenessAgainst(ArmorType at) { return Verses[ (int)at ]; } } diff --git a/OpenRa.Game/Graphics/Animation.cs b/OpenRa.Game/Graphics/Animation.cs index e29362129f..55c98fc8c4 100644 --- a/OpenRa.Game/Graphics/Animation.cs +++ b/OpenRa.Game/Graphics/Animation.cs @@ -13,7 +13,7 @@ namespace OpenRa.Game.Graphics public Animation( string name ) { this.name = name.ToLowerInvariant(); - Play( "idle" ); + // Play( "idle" ); } public Sprite Image diff --git a/OpenRa.Game/Traits/RenderBuildingWarFactory.cs b/OpenRa.Game/Traits/RenderBuildingWarFactory.cs index c4b13a8a3f..c7b1b432e4 100644 --- a/OpenRa.Game/Traits/RenderBuildingWarFactory.cs +++ b/OpenRa.Game/Traits/RenderBuildingWarFactory.cs @@ -37,7 +37,8 @@ namespace OpenRa.Game.Traits public override void Tick(Actor self) { base.Tick(self); - roof.Tick(); + if (doneBuilding) + roof.Tick(); var b = self.Bounds; if (isOpen && !Game.SelectUnitsInBox( diff --git a/SequenceEditor/Program.cs b/SequenceEditor/Program.cs index 217b724775..8bd1692655 100644 --- a/SequenceEditor/Program.cs +++ b/SequenceEditor/Program.cs @@ -19,15 +19,22 @@ namespace SequenceEditor public static Bitmap[] LoadAndResolve( string shp ) { - var reader = new ShpReader(FileSystem.OpenWithExts(shp, ".shp", ".tem", ".sno", ".int")); - return reader.Select(ih => - { - var bmp = new Bitmap(reader.Width, reader.Height); - for (var j = 0; j < bmp.Height; j++) - for (var i = 0; i < bmp.Width; i++) - bmp.SetPixel(i, j, Pal.GetColor(ih.Image[j * bmp.Width + i])); - return bmp; - }).ToArray(); + try + { + var reader = new ShpReader(FileSystem.OpenWithExts(shp, ".shp", ".tem", ".sno", ".int")); + return reader.Select(ih => + { + var bmp = new Bitmap(reader.Width, reader.Height); + for (var j = 0; j < bmp.Height; j++) + for (var i = 0; i < bmp.Width; i++) + bmp.SetPixel(i, j, Pal.GetColor(ih.Image[j * bmp.Width + i])); + return bmp; + }).ToArray(); + } + catch + { + return new Bitmap[] { }; + } } public static void Save() @@ -80,10 +87,6 @@ namespace SequenceEditor if (UnitName == null) return; - Shps[UnitName] = LoadAndResolve(UnitName); - - /* todo: load supplemental SHPs */ - var xpath = string.Format("//unit[@name=\"{0}\"]/sequence", UnitName); foreach (XmlElement e in Doc.SelectNodes(xpath)) { diff --git a/sequences.xml b/sequences.xml index 576230aa7b..44148f2de2 100644 --- a/sequences.xml +++ b/sequences.xml @@ -393,9 +393,6 @@ - - - @@ -460,4 +457,12 @@ + + + + + + + + \ No newline at end of file diff --git a/units.ini b/units.ini index c972e651ad..93f8ecbf15 100755 --- a/units.ini +++ b/units.ini @@ -465,3 +465,6 @@ HollowPoint Super Organic Nuke + +[HE] +ImpactSound=kaboom25 \ No newline at end of file