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