diff --git a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj
index 8642956d8b..ac5fbd4237 100644
--- a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj
+++ b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj
@@ -35,6 +35,7 @@
+
@@ -51,4 +52,7 @@
OpenRA.FileFormats
+
+
+
\ No newline at end of file
diff --git a/OpenRA.Mods.TS/TSLoadScreen.cs b/OpenRA.Mods.TS/TSLoadScreen.cs
new file mode 100644
index 0000000000..bfb726866d
--- /dev/null
+++ b/OpenRA.Mods.TS/TSLoadScreen.cs
@@ -0,0 +1,92 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Drawing;
+using OpenRA.FileFormats;
+using OpenRA.Graphics;
+using OpenRA.Network;
+using OpenRA.Support;
+using OpenRA.Widgets;
+
+namespace OpenRA.Mods.TS
+{
+ public class TSLoadScreen : ILoadScreen
+ {
+ Dictionary Info;
+ static string[] Comments = new[] { "Updating EVA installation..." };
+
+ Stopwatch lastLoadScreen = new Stopwatch();
+ Rectangle StripeRect;
+ Sprite Stripe, Logo;
+ float2 LogoPos;
+
+ Renderer r;
+ public void Init(Dictionary info)
+ {
+ Info = info;
+ // Avoid standard loading mechanisms so we
+ // can display loadscreen as early as possible
+ r = Game.Renderer;
+ if (r == null) return;
+
+ var s = new Sheet(Info["LoadScreenImage"]);
+ Logo = new Sprite(s, new Rectangle(0,0,256,256), TextureChannel.Alpha);
+ Stripe = new Sprite(s, new Rectangle(256,0,256,256), TextureChannel.Alpha);
+ StripeRect = new Rectangle(0, Renderer.Resolution.Height/2 - 128, Renderer.Resolution.Width, 256);
+ LogoPos = new float2(Renderer.Resolution.Width/2 - 128, Renderer.Resolution.Height/2 - 128);
+ }
+
+ public void Display()
+ {
+ if (r == null)
+ return;
+
+ // Update text at most every 0.5 seconds
+ if (lastLoadScreen.ElapsedTime() < 0.5)
+ return;
+
+ if (r.Fonts == null)
+ return;
+
+ lastLoadScreen.Reset();
+ var text = Comments.Random(Game.CosmeticRandom);
+ var textSize = r.Fonts["Bold"].Measure(text);
+
+ r.BeginFrame(float2.Zero, 1f);
+ WidgetUtils.FillRectWithSprite(StripeRect, Stripe);
+ r.RgbaSpriteRenderer.DrawSprite(Logo, LogoPos);
+ r.Fonts["Bold"].DrawText(text, new float2(Renderer.Resolution.Width - textSize.X - 20, Renderer.Resolution.Height - textSize.Y - 20), Color.White);
+ r.EndFrame( new NullInputHandler() );
+ }
+
+ public void StartGame()
+ {
+ TestAndContinue();
+ }
+
+ void TestAndContinue()
+ {
+ Ui.ResetAll();
+ if (!FileSystem.Exists(Info["TestFile"]))
+ {
+ var args = new WidgetArgs()
+ {
+ { "continueLoading", () => TestAndContinue() },
+ { "installData", Info }
+ };
+ Ui.OpenWindow(Info["InstallerMenuWidget"], args);
+ }
+ else
+ Game.LoadShellMap();
+ }
+ }
+}
+
diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml
index 77c15fb7c3..cd6028d999 100644
--- a/mods/ts/mod.yaml
+++ b/mods/ts/mod.yaml
@@ -132,7 +132,7 @@ Music:
Movies:
-LoadScreen: RALoadScreen
+LoadScreen: TSLoadScreen
LoadScreenImage: mods/ts/uibits/loadscreen.png
InstallerMenuWidget: INSTALL_PANEL
TestFile: tibsun.mix