diff --git a/ShiftOS.WinForms/ShiftOS.WinForms.csproj b/ShiftOS.WinForms/ShiftOS.WinForms.csproj
index 432a417..65c658f 100644
--- a/ShiftOS.WinForms/ShiftOS.WinForms.csproj
+++ b/ShiftOS.WinForms/ShiftOS.WinForms.csproj
@@ -476,6 +476,7 @@
+
diff --git a/ShiftOS.WinForms/Viruses/ConsoleGarble.cs b/ShiftOS.WinForms/Viruses/ConsoleGarble.cs
new file mode 100644
index 0000000..2b83846
--- /dev/null
+++ b/ShiftOS.WinForms/Viruses/ConsoleGarble.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ShiftOS.Engine;
+using System.Windows.Forms;
+
+namespace ShiftOS.WinForms.Viruses
+{
+ [Virus("console_garble", "Console Garbler", "Sends random characters to stdout which can muck up your Terminal. The threatlevel determines the rate at which characters are sent.")]
+ public class ConsoleGarble : IVirus
+ {
+ Timer timer = null;
+ Random rnd = null;
+
+ public void Disinfect()
+ {
+ timer.Stop();
+ timer = null;
+ rnd = null;
+ }
+
+ public void Infect(int threatlevel)
+ {
+ rnd = new Random();
+ timer = new Timer();
+ timer.Interval = 6000 / threatlevel;
+ timer.Tick += (o, a) =>
+ {
+ var oldFG = ConsoleEx.ForegroundColor;
+ var oldBG = ConsoleEx.BackgroundColor;
+ var character = (char)rnd.Next(255);
+ while (!char.IsLetterOrDigit(character))
+ character = (char)rnd.Next(255);
+ var ccolormax = Enum.GetValues(typeof(ConsoleColor)).Cast().Max();
+
+ ConsoleEx.BackgroundColor = (ConsoleColor)rnd.Next(ccolormax);
+ ConsoleEx.ForegroundColor = (ConsoleColor)rnd.Next(ccolormax);
+
+ Console.Write(character);
+ ConsoleEx.OnFlush?.Invoke();
+
+ ConsoleEx.BackgroundColor = oldBG;
+ ConsoleEx.ForegroundColor = oldFG;
+ };
+ timer.Start();
+ }
+ }
+}
diff --git a/ShiftOS_TheReturn/VirusManager.cs b/ShiftOS_TheReturn/VirusManager.cs
index f4a7fc6..31152cc 100644
--- a/ShiftOS_TheReturn/VirusManager.cs
+++ b/ShiftOS_TheReturn/VirusManager.cs
@@ -50,6 +50,11 @@ namespace ShiftOS.Engine
{
infection.ThreatLevel = threatlevel;
}
+ else
+ {
+ return;
+ //no need to reinfect with a lower threatlevel
+ }
}
else
{