diff --git a/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalcomp.png b/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalcomp.png
index 3bcb19786..e6d317588 100644
Binary files a/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalcomp.png and b/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalcomp.png differ
diff --git a/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml b/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml
index 4da203057..687e98788 100644
--- a/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml
+++ b/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml
@@ -449,6 +449,40 @@
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- = pulseInterval)
+ {
+ item.SendSignal(0, "1", "signal_out", null);
+ phase -= pulseInterval;
+ }
+ break;
+ case WaveType.Square:
+ phase = (phase + deltaTime * frequency) % 1.0f;
+ item.SendSignal(0, phase < 0.5f ? "0" : "1", "signal_out", null);
+ break;
+ case WaveType.Sine:
+ phase = (phase + deltaTime * frequency) % 1.0f;
+ item.SendSignal(0, Math.Sin(phase * MathHelper.TwoPi).ToString(CultureInfo.InvariantCulture), "signal_out", null);
+ break;
+ }
+ }
+
+ public override void ReceiveSignal(int stepsTaken, string signal, Connection connection, Item source, Character sender, float power = 0.0f)
+ {
+ switch (connection.Name)
+ {
+ case "set_frequency":
+ case "frequency_in":
+ float newFrequency;
+ if (float.TryParse(signal, out newFrequency))
+ {
+ Frequency = newFrequency;
+ }
+ IsActive = true;
+ break;
+ case "set_outputtype":
+ case "set_wavetype":
+ WaveType newOutputType;
+ if (Enum.TryParse(signal, out newOutputType))
+ {
+ OutputType = newOutputType;
+ }
+ break;
+ }
+ }
+ }
+}