diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index c955baea66..b3307066c3 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -356,6 +356,88 @@ var/global/list/##LIST_NAME = list();\
#define DEFAULT_OVERMAP_RANGE 0 // Makes general computers and devices be able to connect to other overmap z-levels on the same tile.
+/*
+ Used for wire name appearances. Replaces the color name on the left with the one on the right.
+ The color on the left is the one used as the actual color of the wire, but it doesn't look good when written.
+ So, we need to replace the name to something that looks better.
+*/
+#define LIST_COLOR_RENAME \
+ list( \
+ "rebeccapurple" = "dark purple",\
+ "darkslategrey" = "dark grey", \
+ "darkolivegreen"= "dark green", \
+ "darkslateblue" = "dark blue", \
+ "darkkhaki" = "khaki", \
+ "darkseagreen" = "light green",\
+ "midnightblue" = "blue", \
+ "lightgrey" = "light grey", \
+ "darkgrey" = "dark grey", \
+ "darkmagenta" = "dark magenta",\
+ "steelblue" = "blue", \
+ "goldenrod" = "gold" \
+ )
+
+/// Pure Black and white colorblindness. Every species except Vulpkanins and Tajarans will have this.
+#define GREYSCALE_COLOR_REPLACE \
+ list( \
+ "red" = "grey", \
+ "blue" = "grey", \
+ "green" = "grey", \
+ "orange" = "light grey", \
+ "brown" = "grey", \
+ "gold" = "light grey", \
+ "cyan" = "silver", \
+ "magenta" = "grey", \
+ "purple" = "grey", \
+ "pink" = "light grey" \
+ )
+
+/// Red colorblindness. Vulpkanins/Wolpins have this.
+#define PROTANOPIA_COLOR_REPLACE \
+ list( \
+ "red" = "darkolivegreen", \
+ "darkred" = "darkolivegreen", \
+ "green" = "yellow", \
+ "orange" = "goldenrod", \
+ "gold" = "goldenrod", \
+ "brown" = "darkolivegreen", \
+ "cyan" = "steelblue", \
+ "magenta" = "blue", \
+ "purple" = "darkslategrey", \
+ "pink" = "beige" \
+ )
+
+/// Green colorblindness.
+#define DEUTERANOPIA_COLOR_REPLACE \
+ list( \
+ "red" = "goldenrod", \
+ "green" = "tan", \
+ "yellow" = "tan", \
+ "orange" = "goldenrod", \
+ "gold" = "burlywood", \
+ "brown" = "saddlebrown",\
+ "cyan" = "lavender", \
+ "magenta" = "blue", \
+ "darkmagenta" = "darkslateblue", \
+ "purple" = "slateblue", \
+ "pink" = "thistle" \
+ )
+
+/// Yellow-Blue colorblindness. Tajarans/Farwas have this.
+#define TRITANOPIA_COLOR_REPLACE \
+ list( \
+ "red" = "rebeccapurple", \
+ "blue" = "darkslateblue", \
+ "green" = "darkolivegreen", \
+ "orange" = "darkkhaki", \
+ "gold" = "darkkhaki", \
+ "brown" = "rebeccapurple", \
+ "cyan" = "darkseagreen", \
+ "magenta" = "darkslateblue", \
+ "navy" = "darkslateblue", \
+ "purple" = "darkslateblue", \
+ "pink" = "lightgrey" \
+ )
//Various stuff used in Persistence
@@ -379,4 +461,4 @@ var/global/list/##LIST_NAME = list();\
#define FONT_HUGE(X) "[X]"
-#define FONT_GIANT(X) "[X]"
\ No newline at end of file
+#define FONT_GIANT(X) "[X]"
diff --git a/code/__defines/wires.dm b/code/__defines/wires.dm
new file mode 100644
index 0000000000..9fce2e8b87
--- /dev/null
+++ b/code/__defines/wires.dm
@@ -0,0 +1,122 @@
+// Wire defines for all machines/items.
+
+// Miscellaneous
+#define WIRE_DUD_PREFIX "__dud"
+
+// General
+#define WIRE_IDSCAN "ID Scan"
+#define WIRE_MAIN_POWER1 "Primary Power"
+#define WIRE_MAIN_POWER2 "Secondary Power"
+#define WIRE_AI_CONTROL "AI Control"
+#define WIRE_ELECTRIFY "Electrification"
+#define WIRE_SAFETY "Safety"
+
+// Vendors and smartfridges
+#define WIRE_THROW_ITEM "Item Throw"
+#define WIRE_CONTRABAND "Contraband"
+
+// Airlock
+#define WIRE_DOOR_BOLTS "Door Bolts"
+#define WIRE_BACKUP_POWER1 "Primary Backup Power"
+#define WIRE_BACKUP_POWER2 "Secondary Backup Power"
+#define WIRE_OPEN_DOOR "Door State"
+#define WIRE_SPEED "Door Timing"
+#define WIRE_BOLT_LIGHT "Bolt Lights"
+
+// Air alarm
+#define WIRE_SYPHON "Siphon"
+#define WIRE_AALARM "Atmospherics Alarm"
+
+// Camera
+#define WIRE_FOCUS "Focus"
+#define WIRE_CAM_LIGHT "Camera Light"
+#define WIRE_CAM_ALARM "Camera Alarm"
+
+// Grid Check
+#define WIRE_REBOOT "Reboot"
+#define WIRE_LOCKOUT "Lockout"
+#define WIRE_ALLOW_MANUAL1 "Manual Override 1"
+#define WIRE_ALLOW_MANUAL2 "Manual Override 2"
+#define WIRE_ALLOW_MANUAL3 "Manual Override 3"
+
+// Jukebox
+#define WIRE_POWER "Power"
+#define WIRE_JUKEBOX_HACK "Hack"
+#define WIRE_SPEEDUP "Speedup"
+#define WIRE_SPEEDDOWN "Speeddown"
+#define WIRE_REVERSE "Reverse"
+#define WIRE_START "Start"
+#define WIRE_STOP "Stop"
+#define WIRE_PREV "Prev"
+#define WIRE_NEXT "Next"
+
+// Mulebot
+#define WIRE_MOB_AVOIDANCE "Mob Avoidance"
+#define WIRE_LOADCHECK "Load Checking"
+#define WIRE_MOTOR1 "Primary Motor"
+#define WIRE_MOTOR2 "Secondary Motor"
+#define WIRE_REMOTE_RX "Signal Receiver"
+#define WIRE_REMOTE_TX "Signal Sender"
+#define WIRE_BEACON_RX "Beacon Receiver"
+
+// Explosives, bombs
+#define WIRE_EXPLODE "Explode" // Explodes if pulsed or cut while active, defuses a bomb that isn't active on cut.
+#define WIRE_EXPLODE_DELAY "Explode Delay" // Explodes immediately if cut, explodes 3 seconds later if pulsed.
+#define WIRE_DISARM "Disarm" // Explicit "disarming" wire.
+#define WIRE_BADDISARM "Bad Disarm" // Disarming wire, except it blows up anyways.
+#define WIRE_BOMB_UNBOLT "Unbolt" // Unbolts the bomb if cut, hint on pulsed.
+#define WIRE_BOMB_DELAY "Delay" // Raises the timer on pulse, does nothing on cut.
+#define WIRE_BOMB_PROCEED "Proceed" // Lowers the timer, explodes if cut while the bomb is active.
+#define WIRE_BOMB_ACTIVATE "Activate" // Will start a bombs timer if pulsed, will hint if pulsed while already active, will stop a timer a bomb on cut.
+
+// Nuclear bomb
+#define WIRE_BOMB_LIGHT "Bomb Light"
+#define WIRE_BOMB_TIMING "Bomb Timing"
+#define WIRE_BOMB_SAFETY "Bomb Safety"
+
+// Particle accelerator
+#define WIRE_PARTICLE_POWER "Power Toggle" // Toggles whether the PA is on or not.
+#define WIRE_PARTICLE_STRENGTH "Strength" // Determines the strength of the PA.
+#define WIRE_PARTICLE_INTERFACE "Interface" // Determines the interface showing up.
+#define WIRE_PARTICLE_POWER_LIMIT "Maximum Power" // Determines how strong the PA can be.
+
+// Autolathe
+#define WIRE_AUTOLATHE_HACK "Hack"
+#define WIRE_AUTOLATHE_DISABLE "Disable"
+
+// Radio
+#define WIRE_RADIO_SIGNAL "Signal"
+#define WIRE_RADIO_RECEIVER "Receiver"
+#define WIRE_RADIO_TRANSMIT "Transmitter"
+
+// Cyborg
+#define WIRE_BORG_LOCKED "Lockdown"
+#define WIRE_BORG_CAMERA "Camera"
+#define WIRE_BORG_LAWCHECK "Law Check"
+
+// Seed Storage
+#define WIRE_SEED_SMART "Smart"
+#define WIRE_SEED_LOCKDOWN "Lockdown"
+
+// Shield Generator
+#define WIRE_SHIELD_CONTROL "Shield Controls" // Cut to lock most shield controls. Mend to unlock them. Pulse does nothing.
+
+// SMES
+#define WIRE_SMES_RCON "RCon" // Remote control (AI and consoles), cut to disable
+#define WIRE_SMES_INPUT "Input" // Input wire, cut to disable input, pulse to disable for 60s
+#define WIRE_SMES_OUTPUT "Output" // Output wire, cut to disable output, pulse to disable for 60s
+#define WIRE_SMES_GROUNDING "Grounding" // Cut to quickly discharge causing sparks, pulse to only create few sparks
+#define WIRE_SMES_FAILSAFES "Failsafes" // Cut to disable failsafes, mend to reenable
+
+// Suit storage unit
+#define WIRE_SSU_UV "UV wire"
+
+// Tesla coil
+#define WIRE_TESLACOIL_ZAP "Zap"
+
+// RIGsuits
+#define WIRE_RIG_SECURITY "Security"
+#define WIRE_RIG_AI_OVERRIDE "AI Override"
+#define WIRE_RIG_SYSTEM_CONTROL "System Control"
+#define WIRE_RIG_INTERFACE_LOCK "Interface Lock"
+#define WIRE_RIG_INTERFACE_SHOCK "Interface Shock"
diff --git a/code/_global_vars/lists/misc.dm b/code/_global_vars/lists/misc.dm
index c10fcba530..adec2bf824 100644
--- a/code/_global_vars/lists/misc.dm
+++ b/code/_global_vars/lists/misc.dm
@@ -1,2 +1,5 @@
GLOBAL_LIST_INIT(speech_toppings, list("|" = "i", "+" = "b", "_" = "u"))
GLOBAL_LIST_EMPTY(meteor_list)
+
+/// List of wire colors for each object type of that round. One for airlocks, one for vendors, etc.
+GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value.
\ No newline at end of file
diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm
index f018a8e594..229412e93f 100644
--- a/code/datums/wires/airlock.dm
+++ b/code/datums/wires/airlock.dm
@@ -1,61 +1,53 @@
// Wires for airlocks
/datum/wires/airlock/secure
- random = 1
+ randomize = 1
wire_count = 14
- window_y = 680
/datum/wires/airlock
holder_type = /obj/machinery/door/airlock
wire_count = 12
- window_y = 570
+ proper_name = "Airlock"
-var/const/AIRLOCK_WIRE_IDSCAN = 1
-var/const/AIRLOCK_WIRE_MAIN_POWER1 = 2
-var/const/AIRLOCK_WIRE_MAIN_POWER2 = 4
-var/const/AIRLOCK_WIRE_DOOR_BOLTS = 8
-var/const/AIRLOCK_WIRE_BACKUP_POWER1 = 16
-var/const/AIRLOCK_WIRE_BACKUP_POWER2 = 32
-var/const/AIRLOCK_WIRE_OPEN_DOOR = 64
-var/const/AIRLOCK_WIRE_AI_CONTROL = 128
-var/const/AIRLOCK_WIRE_ELECTRIFY = 256
-var/const/AIRLOCK_WIRE_SAFETY = 512
-var/const/AIRLOCK_WIRE_SPEED = 1024
-var/const/AIRLOCK_WIRE_LIGHT = 2048
-
-/datum/wires/airlock/CanUse(var/mob/living/L)
+/datum/wires/airlock/interactable(mob/user)
var/obj/machinery/door/airlock/A = holder
- if(!istype(L, /mob/living/silicon))
+ if(!issilicon(user))
if(A.isElectrified())
- if(A.shock(L, 100))
- return 0
+ if(A.shock(user, 100))
+ return FALSE
if(A.p_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/airlock/GetInteractWindow()
+/datum/wires/airlock/New(atom/_holder)
+ wires = list(
+ WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_MAIN_POWER2, WIRE_DOOR_BOLTS,
+ WIRE_BACKUP_POWER1, WIRE_BACKUP_POWER2, WIRE_OPEN_DOOR, WIRE_AI_CONTROL,
+ WIRE_ELECTRIFY, WIRE_SAFETY, WIRE_SPEED, WIRE_BOLT_LIGHT
+ )
+ return ..()
+
+/datum/wires/airlock/get_status()
+ . = ..()
var/obj/machinery/door/airlock/A = holder
var/haspower = A.arePowerSystemsOn() //If there's no power, then no lights will be on.
- . += ..()
- . += show_hint(0x01, A.locked, "The door bolts have fallen!", "The door bolts look up.")
- . += show_hint(0x02, A.lights && haspower, "The door bolt lights are on.", "The door bolt lights are off!")
- . += show_hint(0x04, haspower, "The test light is on.", "The test light is off!")
- . += show_hint(0x08, A.backup_power_lost_until, "The backup power light is off!", "The backup power light is on.")
- . += show_hint(0x10, A.aiControlDisabled == 0 && !A.emagged && haspower, "The 'AI control allowed' light is on.", "The 'AI control allowed' light is off.")
- . += show_hint(0x20, A.safe == 0 && haspower, "The 'Check Wiring' light is on.", "The 'Check Wiring' light is off.")
- . += show_hint(0x40, A.normalspeed == 0 && haspower, "The 'Check Timing Mechanism' light is on.", "The 'Check Timing Mechanism' light is off.")
- . += show_hint(0x80, A.aiDisabledIdScanner == 0 && haspower, "The IDScan light is on.", "The IDScan light is off.")
-
-/datum/wires/airlock/UpdateCut(var/index, var/mended)
+ . += "The door bolts [A.locked ? "have fallen!" : "look up."]"
+ . += "The door bolt lights are [(A.lights && haspower) ? "on." : "off!"]"
+ . += "The test light is [haspower ? "on." : "off!"]"
+ . += "The backup power light is [A.backup_power_lost_until ? "off!" : "on."]"
+ . += "The 'AI control allowed' light is [(A.aiControlDisabled == 0 && !A.emagged && haspower) ? "on" : "off"]."
+ . += "The 'Check Wiring' light is [(A.safe == 0 && haspower) ? "on" : "off"]."
+ . += "The 'Check Timing Mechanism' light is [(A.normalspeed == 0 && haspower) ? "on" : "off"]."
+ . += "The IDScan light is [(A.aiDisabledIdScanner == 0 && haspower) ? "on" : "off."]"
+/datum/wires/airlock/on_cut(wire, mend)
var/obj/machinery/door/airlock/A = holder
- switch(index)
- if(AIRLOCK_WIRE_IDSCAN)
- A.aiDisabledIdScanner = !mended
- if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
-
- if(!mended)
+ switch(wire)
+ if(WIRE_IDSCAN)
+ A.aiDisabledIdScanner = !mend
+ if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2)
+ if(!mend)
//Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user.
A.loseMainPower()
A.shock(usr, 50)
@@ -63,9 +55,8 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
A.regainMainPower()
A.shock(usr, 50)
- if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
-
- if(!mended)
+ if(WIRE_BACKUP_POWER1, WIRE_BACKUP_POWER2)
+ if(!mend)
//Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
A.loseBackupPower()
A.shock(usr, 50)
@@ -73,16 +64,14 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
A.regainBackupPower()
A.shock(usr, 50)
- if(AIRLOCK_WIRE_DOOR_BOLTS)
-
- if(!mended)
+ if(WIRE_DOOR_BOLTS)
+ if(!mend)
//Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present)
A.lock(1)
A.update_icon()
- if(AIRLOCK_WIRE_AI_CONTROL)
-
- if(!mended)
+ if(WIRE_AI_CONTROL)
+ if(!mend)
//one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
//aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
if(A.aiControlDisabled == 0)
@@ -95,40 +84,41 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
else if(A.aiControlDisabled == 2)
A.aiControlDisabled = -1
- if(AIRLOCK_WIRE_ELECTRIFY)
- if(!mended)
+ if(WIRE_ELECTRIFY)
+ if(!mend)
//Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted.
A.electrify(-1)
else
A.electrify(0)
return // Don't update the dialog.
- if (AIRLOCK_WIRE_SAFETY)
- A.safe = mended
+ if (WIRE_SAFETY)
+ A.safe = mend
- if(AIRLOCK_WIRE_SPEED)
- A.autoclose = mended
- if(mended)
+ if(WIRE_SPEED)
+ A.autoclose = mend
+ if(mend)
if(!A.density)
A.close()
- if(AIRLOCK_WIRE_LIGHT)
- A.lights = mended
+ if(WIRE_BOLT_LIGHT)
+ A.lights = mend
A.update_icon()
-/datum/wires/airlock/UpdatePulsed(var/index)
-
+/datum/wires/airlock/on_pulse(wire)
var/obj/machinery/door/airlock/A = holder
- switch(index)
- if(AIRLOCK_WIRE_IDSCAN)
+ switch(wire)
+ if(WIRE_IDSCAN)
//Sending a pulse through flashes the red light on the door (if the door has power).
if(A.arePowerSystemsOn() && A.density)
A.do_animate("deny")
- if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
+
+ if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2)
//Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
A.loseMainPower()
- if(AIRLOCK_WIRE_DOOR_BOLTS)
+
+ if(WIRE_DOOR_BOLTS)
//one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
//raises them if they are down (only if power's on)
if(!A.locked)
@@ -136,10 +126,11 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
else
A.unlock()
- if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
+ if(WIRE_BACKUP_POWER1, WIRE_BACKUP_POWER2)
//two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
A.loseBackupPower()
- if(AIRLOCK_WIRE_AI_CONTROL)
+
+ if(WIRE_AI_CONTROL)
if(A.aiControlDisabled == 0)
A.aiControlDisabled = 1
else if(A.aiControlDisabled == -1)
@@ -152,24 +143,26 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
else if(A.aiControlDisabled == 2)
A.aiControlDisabled = -1
- if(AIRLOCK_WIRE_ELECTRIFY)
+ if(WIRE_ELECTRIFY)
//one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds.
A.electrify(30)
- if(AIRLOCK_WIRE_OPEN_DOOR)
+
+ if(WIRE_OPEN_DOOR)
//tries to open the door without ID
//will succeed only if the ID wire is cut or the door requires no access and it's not emagged
if(A.emagged) return
if(!A.requiresID() || A.check_access(null))
if(A.density) A.open()
else A.close()
- if(AIRLOCK_WIRE_SAFETY)
+
+ if(WIRE_SAFETY)
A.safe = !A.safe
if(!A.density)
A.close()
- if(AIRLOCK_WIRE_SPEED)
+ if(WIRE_SPEED)
A.normalspeed = !A.normalspeed
- if(AIRLOCK_WIRE_LIGHT)
+ if(WIRE_BOLT_LIGHT)
A.lights = !A.lights
A.update_icon()
diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm
index 7c56bd4e52..ed8477042b 100644
--- a/code/datums/wires/alarm.dm
+++ b/code/datums/wires/alarm.dm
@@ -1,94 +1,86 @@
/datum/wires/alarm
holder_type = /obj/machinery/alarm
wire_count = 5
+ proper_name = "Air alarm"
-var/const/AALARM_WIRE_IDSCAN = 1
-var/const/AALARM_WIRE_POWER = 2
-var/const/AALARM_WIRE_SYPHON = 4
-var/const/AALARM_WIRE_AI_CONTROL = 8
-var/const/AALARM_WIRE_AALARM = 16
+/datum/wires/alarm/New(atom/_holder)
+ wires = list(
+ WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_SYPHON,
+ WIRE_AI_CONTROL, WIRE_AALARM
+ )
+ return ..()
-/datum/wires/alarm/CanUse(var/mob/living/L)
+/datum/wires/alarm/interactable(mob/user)
var/obj/machinery/alarm/A = holder
if(A.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/alarm/GetInteractWindow()
+/datum/wires/alarm/get_status()
var/obj/machinery/alarm/A = holder
- . += ..()
- . += show_hint(0x1, A.locked, "The Air Alarm is locked.", "The Air Alarm is unlocked.")
- . += show_hint(0x2, A.shorted || (A.stat & (NOPOWER|BROKEN)), "The Air Alarm is offline.", "The Air Alarm is working properly!")
- . += show_hint(0x4, A.aidisabled, "The 'AI control allowed' light is off.", "The 'AI control allowed' light is on.")
+ . = ..()
+ . += "The Air Alarm is [A.locked ? "locked." : "unlocked."]"
+ . += "The Air Alarm is [(A.shorted || (A.stat & (NOPOWER|BROKEN))) ? "offline." : "working properly!"]"
+ . += "The 'AI control allowed' light is [A.aidisabled ? "off" : "on"]."
-/datum/wires/alarm/UpdateCut(var/index, var/mended)
+/datum/wires/alarm/on_cut(wire, mend)
var/obj/machinery/alarm/A = holder
- switch(index)
- if(AALARM_WIRE_IDSCAN)
- if(!mended)
- A.locked = 1
- //to_world("Idscan wire cut")
+ switch(wire)
+ if(WIRE_IDSCAN)
+ if(!mend)
+ A.locked = TRUE
- if(AALARM_WIRE_POWER)
+ if(WIRE_MAIN_POWER1)
A.shock(usr, 50)
- A.shorted = !mended
+ A.shorted = !mend
A.update_icon()
- //to_world("Power wire cut")
- if (AALARM_WIRE_AI_CONTROL)
- if (A.aidisabled == !mended)
- A.aidisabled = mended
- //to_world("AI Control Wire Cut")
+ if(WIRE_AI_CONTROL)
+ A.aidisabled = !mend
- if(AALARM_WIRE_SYPHON)
- if(!mended)
- A.mode = 3 // AALARM_MODE_PANIC
+ if(WIRE_SYPHON)
+ if(!mend)
+ A.mode = 3 // MODE_PANIC
A.apply_mode()
- //to_world("Syphon Wire Cut")
- if(AALARM_WIRE_AALARM)
- if (A.alarm_area.atmosalert(2, A))
+ if(WIRE_AALARM)
+ if(A.alarm_area.atmosalert(2, A))
A.post_alert(2)
A.update_icon()
+ ..()
-/datum/wires/alarm/UpdatePulsed(var/index)
+/datum/wires/alarm/on_pulse(wire)
var/obj/machinery/alarm/A = holder
- switch(index)
- if(AALARM_WIRE_IDSCAN)
+ switch(wire)
+ if(WIRE_IDSCAN)
A.locked = !A.locked
- // to_world("Idscan wire pulsed")
- if (AALARM_WIRE_POWER)
- // to_world("Power wire pulsed")
- if(A.shorted == 0)
- A.shorted = 1
+ if(WIRE_MAIN_POWER1)
+ if(!A.shorted)
+ A.shorted = TRUE
A.update_icon()
spawn(12000)
- if(A.shorted == 1)
- A.shorted = 0
+ if(A.shorted)
+ A.shorted = FALSE
A.update_icon()
-
- if (AALARM_WIRE_AI_CONTROL)
- // to_world("AI Control wire pulsed")
- if (A.aidisabled == 0)
- A.aidisabled = 1
+ if(WIRE_AI_CONTROL)
+ if(!A.aidisabled)
+ A.aidisabled = TRUE
A.updateDialog()
spawn(100)
- if (A.aidisabled == 1)
- A.aidisabled = 0
+ if(A.aidisabled)
+ A.aidisabled = FALSE
- if(AALARM_WIRE_SYPHON)
- // to_world("Syphon wire pulsed")
- if(A.mode == 1) // AALARM_MODE_SCRUB
- A.mode = 3 // AALARM_MODE_PANIC
+ if(WIRE_SYPHON)
+ if(A.mode == 1) // MODE_SCRUB
+ A.mode = 3 // MODE_PANIC
else
- A.mode = 1 // AALARM_MODE_SCRUB
+ A.mode = 1 // MODE_SCRUB
A.apply_mode()
- if(AALARM_WIRE_AALARM)
- // to_world("Aalarm wire pulsed")
- if (A.alarm_area.atmosalert(0, A))
+ if(WIRE_AALARM)
+ if(A.alarm_area.atmosalert(0, A))
A.post_alert(0)
A.update_icon()
diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm
index 1b7f43d21f..15e96298ad 100644
--- a/code/datums/wires/apc.dm
+++ b/code/datums/wires/apc.dm
@@ -1,76 +1,66 @@
/datum/wires/apc
holder_type = /obj/machinery/power/apc
wire_count = 4
+ proper_name = "APC"
-#define APC_WIRE_IDSCAN 1
-#define APC_WIRE_MAIN_POWER1 2
-#define APC_WIRE_MAIN_POWER2 4
-#define APC_WIRE_AI_CONTROL 8
+/datum/wires/apc/New(atom/_holder)
+ wires = list(WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_MAIN_POWER2, WIRE_AI_CONTROL)
+ return ..()
-/datum/wires/apc/GetInteractWindow()
+/datum/wires/apc/get_status()
+ . = ..()
var/obj/machinery/power/apc/A = holder
- . += ..()
- . += show_hint(0x1, A.locked, "The APC is locked.", "The APC is unlocked.")
- . += show_hint(0x2, A.shorted, "The APCs power has been shorted.", "The APC is working properly!")
- . += show_hint(0x4, A.aidisabled, "The 'AI control allowed' light is off.", "The 'AI control allowed' light is on.")
+ . += "The APC is [A.locked ? "" : "un"]locked."
+ . += A.shorted ? "The APCs power has been shorted." : "The APC is working properly!"
+ . += "The 'AI control allowed' light is [A.aidisabled ? "off" : "on"]."
-
-/datum/wires/apc/CanUse(var/mob/living/L)
+/datum/wires/apc/interactable(mob/user)
var/obj/machinery/power/apc/A = holder
if(A.wiresexposed)
return 1
return 0
-/datum/wires/apc/UpdatePulsed(var/index)
-
+/datum/wires/apc/on_pulse(wire)
var/obj/machinery/power/apc/A = holder
- switch(index)
-
- if(APC_WIRE_IDSCAN)
- A.locked = 0
+ switch(wire)
+ if(WIRE_IDSCAN)
+ A.locked = FALSE
spawn(300)
if(A)
- A.locked = 1
+ A.locked = TRUE
- if (APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2)
- if(A.shorted == 0)
- A.shorted = 1
+ if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2)
+ if(!A.shorted)
+ A.shorted = TRUE
spawn(1200)
- if(A && !IsIndexCut(APC_WIRE_MAIN_POWER1) && !IsIndexCut(APC_WIRE_MAIN_POWER2))
- A.shorted = 0
+ if(A && !is_cut(WIRE_MAIN_POWER1) && !is_cut(WIRE_MAIN_POWER2))
+ A.shorted = FALSE
- if (APC_WIRE_AI_CONTROL)
- if (A.aidisabled == 0)
- A.aidisabled = 1
+ if(WIRE_AI_CONTROL)
+ if(!A.aidisabled)
+ A.aidisabled = TRUE
spawn(10)
- if(A && !IsIndexCut(APC_WIRE_AI_CONTROL))
- A.aidisabled = 0
+ if(A && !is_cut(WIRE_AI_CONTROL))
+ A.aidisabled = FALSE
-/datum/wires/apc/UpdateCut(var/index, var/mended)
+/datum/wires/apc/on_cut(wire, mend)
var/obj/machinery/power/apc/A = holder
- switch(index)
- if(APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2)
-
- if(!mended)
- if(istype(usr, /mob/living))
+ switch(wire)
+ if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2)
+ if(!mend)
+ if(isliving(usr))
A.shock(usr, 50)
- A.shorted = 1
+ A.shorted = TRUE
- else if(!IsIndexCut(APC_WIRE_MAIN_POWER1) && !IsIndexCut(APC_WIRE_MAIN_POWER2))
- A.shorted = 0
- if(istype(usr, /mob/living))
+ else if(!is_cut(WIRE_MAIN_POWER1) && !is_cut(WIRE_MAIN_POWER2))
+ A.shorted = FALSE
+ if(isliving(usr))
A.shock(usr, 50)
- if(APC_WIRE_AI_CONTROL)
-
- if(!mended)
- if (A.aidisabled == 0)
- A.aidisabled = 1
- else
- if (A.aidisabled == 1)
- A.aidisabled = 0
+ if(WIRE_AI_CONTROL)
+ A.aidisabled = !mend
diff --git a/code/datums/wires/autolathe.dm b/code/datums/wires/autolathe.dm
index df625351b8..92f5f7facb 100644
--- a/code/datums/wires/autolathe.dm
+++ b/code/datums/wires/autolathe.dm
@@ -1,61 +1,54 @@
/datum/wires/autolathe
-
holder_type = /obj/machinery/autolathe
wire_count = 6
+ proper_name = "Autolathe"
-var/const/AUTOLATHE_HACK_WIRE = 1
-var/const/AUTOLATHE_SHOCK_WIRE = 2
-var/const/AUTOLATHE_DISABLE_WIRE = 4
+/datum/wires/autolathe/New(atom/_holder)
+ wires = list(WIRE_AUTOLATHE_HACK, WIRE_ELECTRIFY, WIRE_AUTOLATHE_DISABLE)
+ return ..()
-/datum/wires/autolathe/GetInteractWindow()
+/datum/wires/autolathe/get_status()
+ . = ..()
var/obj/machinery/autolathe/A = holder
- . += ..()
- . += show_hint(0x1, A.disabled, "The red light is off.", "The red light is on.")
- . += show_hint(0x2, A.shocked, "The green light is off.", "The green light is on.")
- . += show_hint(0x4, A.hacked, "The blue light is off.", "The blue light is on.")
+ . += "The red light is [A.disabled ? "off" : "on"]."
+ . += "The green light is [A.shocked ? "off" : "on"]."
+ . += "The blue light is [A.hacked ? "off" : "on"]."
-/datum/wires/autolathe/CanUse()
+/datum/wires/autolathe/interactable(mob/user)
var/obj/machinery/autolathe/A = holder
if(A.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/autolathe/proc/update_autolathe_ui(mob/living/user)
- if(CanUse(user))
- var/obj/machinery/autolathe/A = holder
- A.interact(user)
-
-/datum/wires/autolathe/UpdateCut(index, mended)
+/datum/wires/autolathe/on_cut(wire, mend)
var/obj/machinery/autolathe/A = holder
- switch(index)
- if(AUTOLATHE_HACK_WIRE)
- A.hacked = !mended
- if(AUTOLATHE_SHOCK_WIRE)
- A.shocked = !mended
- if(AUTOLATHE_DISABLE_WIRE)
- A.disabled = !mended
- update_autolathe_ui(usr)
+ switch(wire)
+ if(WIRE_AUTOLATHE_HACK)
+ A.hacked = !mend
+ if(WIRE_ELECTRIFY)
+ A.shocked = !mend
+ if(WIRE_AUTOLATHE_DISABLE)
+ A.disabled = !mend
+ ..()
-/datum/wires/autolathe/UpdatePulsed(index)
- if(IsIndexCut(index))
+/datum/wires/autolathe/on_pulse(wire)
+ if(is_cut(wire))
return
var/obj/machinery/autolathe/A = holder
- switch(index)
- if(AUTOLATHE_HACK_WIRE)
+ switch(wire)
+ if(WIRE_AUTOLATHE_HACK)
A.hacked = !A.hacked
spawn(50)
- if(A && !IsIndexCut(index))
+ if(A && !is_cut(wire))
A.hacked = 0
- update_autolathe_ui(usr)
- if(AUTOLATHE_SHOCK_WIRE)
+ if(WIRE_ELECTRIFY)
A.shocked = !A.shocked
spawn(50)
- if(A && !IsIndexCut(index))
+ if(A && !is_cut(wire))
A.shocked = 0
- if(AUTOLATHE_DISABLE_WIRE)
+ if(WIRE_AUTOLATHE_DISABLE)
A.disabled = !A.disabled
spawn(50)
- if(A && !IsIndexCut(index))
+ if(A && !is_cut(wire))
A.disabled = 0
- update_autolathe_ui(usr)
- update_autolathe_ui(usr)
+ ..()
\ No newline at end of file
diff --git a/code/datums/wires/camera.dm b/code/datums/wires/camera.dm
index 67210e2179..571e2a22e6 100644
--- a/code/datums/wires/camera.dm
+++ b/code/datums/wires/camera.dm
@@ -1,70 +1,64 @@
// Wires for cameras.
/datum/wires/camera
- random = 1
+ randomize = TRUE
holder_type = /obj/machinery/camera
wire_count = 6
+ proper_name = "Camera"
-/datum/wires/camera/GetInteractWindow()
+/datum/wires/camera/New(atom/_holder)
+ wires = list(WIRE_FOCUS, WIRE_MAIN_POWER1, WIRE_CAM_LIGHT, WIRE_CAM_ALARM)
+ return ..()
+
+/datum/wires/camera/get_status()
. = ..()
var/obj/machinery/camera/C = holder
- . += show_hint(0x1, C.view_range == initial(C.view_range), "The focus light is on.", "The focus light is off.")
- . += show_hint(0x2, C.can_use(), "The power link light is on.", "The power link light is off.")
- . += show_hint(0x4, C.light_disabled, "The camera light is off.", "The camera light is on.")
- . += show_hint(0x8, C.alarm_on, "The alarm light is on.", "The alarm light is off.")
- return .
+ . += "The focus light is [(C.view_range == initial(C.view_range)) ? "on" : "off"]."
+ . += "The power link light is [C.can_use() ? "on" : "off"]."
+ . += "The camera light is [C.light_disabled ? "off" : "on"]."
+ . += "The alarm light is [C.alarm_on ? "on" : "off"]."
-/datum/wires/camera/CanUse(var/mob/living/L)
+/datum/wires/camera/interactable(mob/user)
var/obj/machinery/camera/C = holder
return C.panel_open
-var/const/CAMERA_WIRE_FOCUS = 1
-var/const/CAMERA_WIRE_POWER = 2
-var/const/CAMERA_WIRE_LIGHT = 4
-var/const/CAMERA_WIRE_ALARM = 8
-var/const/CAMERA_WIRE_NOTHING1 = 16
-var/const/CAMERA_WIRE_NOTHING2 = 32
-
-/datum/wires/camera/UpdateCut(var/index, var/mended)
+/datum/wires/camera/on_cut(wire, mend)
var/obj/machinery/camera/C = holder
- switch(index)
- if(CAMERA_WIRE_FOCUS)
- var/range = (mended ? initial(C.view_range) : C.short_range)
+ switch(wire)
+ if(WIRE_FOCUS)
+ var/range = (mend ? initial(C.view_range) : C.short_range)
C.setViewRange(range)
- if(CAMERA_WIRE_POWER)
- if(C.status && !mended || !C.status && mended)
+ if(WIRE_MAIN_POWER1)
+ if(C.status && !mend || !C.status && mend)
C.deactivate(usr, 1)
- if(CAMERA_WIRE_LIGHT)
- C.light_disabled = !mended
+ if(WIRE_CAM_LIGHT)
+ C.light_disabled = !mend
- if(CAMERA_WIRE_ALARM)
- if(!mended)
+ if(WIRE_CAM_ALARM)
+ if(!mend)
C.triggerCameraAlarm()
else
C.cancelCameraAlarm()
- return
+ ..()
-/datum/wires/camera/UpdatePulsed(var/index)
+/datum/wires/camera/on_pulse(wire)
var/obj/machinery/camera/C = holder
- if(IsIndexCut(index))
+ if(is_cut(wire))
return
- switch(index)
- if(CAMERA_WIRE_FOCUS)
+ switch(wire)
+ if(WIRE_FOCUS)
var/new_range = (C.view_range == initial(C.view_range) ? C.short_range : initial(C.view_range))
C.setViewRange(new_range)
- if(CAMERA_WIRE_LIGHT)
+ if(WIRE_CAM_LIGHT)
C.light_disabled = !C.light_disabled
- if(CAMERA_WIRE_ALARM)
+ if(WIRE_CAM_ALARM)
C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*")
- return
+ ..()
/datum/wires/camera/proc/CanDeconstruct()
- if(IsIndexCut(CAMERA_WIRE_POWER) && IsIndexCut(CAMERA_WIRE_FOCUS) && IsIndexCut(CAMERA_WIRE_LIGHT) && IsIndexCut(CAMERA_WIRE_NOTHING1) && IsIndexCut(CAMERA_WIRE_NOTHING2))
- return 1
- else
- return 0
+ return is_all_cut()
diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm
index 6dc8e988ac..52b0150b66 100644
--- a/code/datums/wires/explosive.dm
+++ b/code/datums/wires/explosive.dm
@@ -1,30 +1,33 @@
/datum/wires/explosive
wire_count = 1
+ proper_name = "Explosive wires"
-var/const/WIRE_EXPLODE = 1
+/datum/wires/explosive/New(atom/_holder)
+ wires = list(WIRE_EXPLODE)
+ return ..()
/datum/wires/explosive/proc/explode()
return
-/datum/wires/explosive/UpdatePulsed(var/index)
- switch(index)
+/datum/wires/explosive/on_pulse(wire)
+ switch(wire)
if(WIRE_EXPLODE)
explode()
-/datum/wires/explosive/UpdateCut(var/index, var/mended)
- switch(index)
+/datum/wires/explosive/on_cut(wire, mend)
+ switch(wire)
if(WIRE_EXPLODE)
- if(!mended)
+ if(!mend)
explode()
/datum/wires/explosive/c4
holder_type = /obj/item/weapon/plastique
-/datum/wires/explosive/c4/CanUse(var/mob/living/L)
+/datum/wires/explosive/c4/interactable(mob/user)
var/obj/item/weapon/plastique/P = holder
if(P.open_panel)
- return 1
- return 0
+ return TRUE
+ return FALSE
/datum/wires/explosive/c4/explode()
var/obj/item/weapon/plastique/P = holder
diff --git a/code/datums/wires/grid_checker.dm b/code/datums/wires/grid_checker.dm
index 355f39ec18..42bc470e05 100644
--- a/code/datums/wires/grid_checker.dm
+++ b/code/datums/wires/grid_checker.dm
@@ -1,66 +1,64 @@
/datum/wires/grid_checker
holder_type = /obj/machinery/power/grid_checker
wire_count = 8
+ proper_name = "Grid Checker"
-var/const/GRID_CHECKER_WIRE_REBOOT = 1 // This wire causes the grid-check to end, if pulsed.
-var/const/GRID_CHECKER_WIRE_LOCKOUT = 2 // If cut or pulsed, locks the user out for half a minute.
-var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_1 = 4 // Needs to be cut for REBOOT to be possible.
-var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_2 = 8 // Needs to be cut for REBOOT to be possible.
-var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_3 = 16 // Needs to be cut for REBOOT to be possible.
-var/const/GRID_CHECKER_WIRE_SHOCK = 32 // Shocks the user if not wearing gloves.
-var/const/GRID_CHECKER_WIRE_NOTHING_1 = 64 // Does nothing, but makes it a bit harder.
-var/const/GRID_CHECKER_WIRE_NOTHING_2 = 128 // Does nothing, but makes it a bit harder.
+/datum/wires/grid_checker/New(atom/_holder)
+ wires = list(
+ WIRE_REBOOT, WIRE_LOCKOUT, WIRE_ALLOW_MANUAL1,
+ WIRE_ALLOW_MANUAL2, WIRE_ALLOW_MANUAL3, WIRE_ELECTRIFY
+ )
+ return ..()
-
-/datum/wires/grid_checker/CanUse(var/mob/living/L)
+/datum/wires/grid_checker/interactable(mob/user)
var/obj/machinery/power/grid_checker/G = holder
if(G.opened)
return TRUE
return FALSE
-
-/datum/wires/grid_checker/GetInteractWindow()
+/datum/wires/grid_checker/get_status()
var/obj/machinery/power/grid_checker/G = holder
- . += ..()
- . += show_hint(0x1, G.power_failing, "The green light is off.", "The green light is on.")
- . += show_hint(0x2, G.wire_locked_out, "The red light is on.", "The red light is off.")
- . += show_hint(0x4, G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3, "The blue light is on.", "The blue light is off.")
+ . = ..()
+ . += "The green light is [G.power_failing ? "off." : "on."]"
+ . += "The red light is [G.wire_locked_out ? "on." : "off."]"
+ . += "The blue light is [(G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3) ? "on." : "off."]"
-
-/datum/wires/grid_checker/UpdateCut(var/index, var/mended)
+/datum/wires/grid_checker/on_cut(wire, mend)
var/obj/machinery/power/grid_checker/G = holder
- switch(index)
- if(GRID_CHECKER_WIRE_LOCKOUT)
- G.wire_locked_out = !mended
- if(GRID_CHECKER_WIRE_ALLOW_MANUAL_1)
- G.wire_allow_manual_1 = !mended
- if(GRID_CHECKER_WIRE_ALLOW_MANUAL_2)
- G.wire_allow_manual_2 = !mended
- if(GRID_CHECKER_WIRE_ALLOW_MANUAL_3)
- G.wire_allow_manual_3 = !mended
- if(GRID_CHECKER_WIRE_SHOCK)
+ switch(wire)
+ if(WIRE_LOCKOUT)
+ G.wire_locked_out = !mend
+ if(WIRE_ALLOW_MANUAL1)
+ G.wire_allow_manual_1 = !mend
+ if(WIRE_ALLOW_MANUAL2)
+ G.wire_allow_manual_2 = !mend
+ if(WIRE_ALLOW_MANUAL3)
+ G.wire_allow_manual_3 = !mend
+ if(WIRE_ELECTRIFY)
if(G.wire_locked_out)
return
G.shock(usr, 70)
+ ..()
-
-/datum/wires/grid_checker/UpdatePulsed(var/index)
+/datum/wires/grid_checker/on_pulse(wire)
var/obj/machinery/power/grid_checker/G = holder
- switch(index)
- if(GRID_CHECKER_WIRE_REBOOT)
+ switch(wire)
+ if(WIRE_REBOOT)
if(G.wire_locked_out)
return
-
if(G.power_failing && G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3)
G.end_power_failure(TRUE)
- if(GRID_CHECKER_WIRE_LOCKOUT)
+
+ if(WIRE_LOCKOUT)
if(G.wire_locked_out)
return
G.wire_locked_out = TRUE
spawn(30 SECONDS)
G.wire_locked_out = FALSE
- if(GRID_CHECKER_WIRE_SHOCK)
+
+ if(WIRE_ELECTRIFY)
if(G.wire_locked_out)
return
- G.shock(usr, 70)
\ No newline at end of file
+ G.shock(usr, 70)
+ ..()
\ No newline at end of file
diff --git a/code/datums/wires/jukebox.dm b/code/datums/wires/jukebox.dm
index e207334ffd..125bbd78ef 100644
--- a/code/datums/wires/jukebox.dm
+++ b/code/datums/wires/jukebox.dm
@@ -1,42 +1,39 @@
/datum/wires/jukebox
- random = 1
+ randomize = TRUE
holder_type = /obj/machinery/media/jukebox
wire_count = 11
+ proper_name = "Jukebox"
-var/const/WIRE_POWER = 1
-var/const/WIRE_HACK = 2
-var/const/WIRE_SPEEDUP = 4
-var/const/WIRE_SPEEDDOWN = 8
-var/const/WIRE_REVERSE = 16
-var/const/WIRE_NOTHING1 = 32
-var/const/WIRE_NOTHING2 = 64
-var/const/WIRE_START = 128
-var/const/WIRE_STOP = 256
-var/const/WIRE_PREV = 512
-var/const/WIRE_NEXT = 1024
+/datum/wires/jukebox/New(atom/_holder)
+ wires = list(
+ WIRE_MAIN_POWER1, WIRE_JUKEBOX_HACK,
+ WIRE_SPEEDUP, WIRE_SPEEDDOWN, WIRE_REVERSE,
+ WIRE_START, WIRE_STOP, WIRE_PREV, WIRE_NEXT
+ )
+ return ..()
-/datum/wires/jukebox/CanUse(var/mob/living/L)
+/datum/wires/jukebox/interactable(mob/user)
var/obj/machinery/media/jukebox/A = holder
if(A.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
// Show the status of lights as a hint to the current state
-/datum/wires/jukebox/GetInteractWindow()
+/datum/wires/jukebox/get_status()
var/obj/machinery/media/jukebox/A = holder
- . += ..()
- . += show_hint(0x1, A.stat & (BROKEN|NOPOWER), "The power light is off.", "The power light is on.")
- . += show_hint(0x2, A.hacked, "The parental guidance light is off.", "The parental guidance light is on.")
- . += show_hint(0x4, IsIndexCut(WIRE_REVERSE), "The data light is hauntingly dark.", "The data light is glowing softly.")
+ . = ..()
+ . += "The power light is [A.stat & (BROKEN|NOPOWER) ? "off." : "on."]"
+ . += "The parental guidance light is [A.hacked ? "off." : "on."]"
+ . += "The data light is [is_cut(WIRE_REVERSE) ? "hauntingly dark." : "glowing softly."]"
// Give a hint as to what each wire does
-/datum/wires/jukebox/UpdatePulsed(var/index)
+/datum/wires/jukebox/on_pulse(wire)
var/obj/machinery/media/jukebox/A = holder
- switch(index)
- if(WIRE_POWER)
+ switch(wire)
+ if(WIRE_MAIN_POWER1)
holder.visible_message("[bicon(holder)] The power light flickers.")
A.shock(usr, 90)
- if(WIRE_HACK)
+ if(WIRE_JUKEBOX_HACK)
holder.visible_message("[bicon(holder)] The parental guidance light flickers.")
if(WIRE_REVERSE)
holder.visible_message("[bicon(holder)] The data light blinks ominously.")
@@ -55,24 +52,21 @@ var/const/WIRE_NEXT = 1024
else
A.shock(usr, 10) // The nothing wires give a chance to shock just for fun
-/datum/wires/jukebox/UpdateCut(var/index, var/mended)
+/datum/wires/jukebox/on_cut(wire, mend)
var/obj/machinery/media/jukebox/A = holder
- switch(index)
- if(WIRE_POWER)
+ switch(wire)
+ if(WIRE_MAIN_POWER1)
// TODO - Actually make machine electrified or something.
A.shock(usr, 90)
- if(WIRE_HACK)
- if(mended)
- A.set_hacked(0)
- else
- A.set_hacked(1)
+ if(WIRE_JUKEBOX_HACK)
+ A.set_hacked(!mend)
if(WIRE_SPEEDUP, WIRE_SPEEDDOWN, WIRE_REVERSE)
- var/newfreq = IsIndexCut(WIRE_REVERSE) ? -1 : 1;
- if (IsIndexCut(WIRE_SPEEDUP))
+ var/newfreq = is_cut(WIRE_REVERSE) ? -1 : 1;
+ if(is_cut(WIRE_SPEEDUP))
newfreq *= 2
- if (IsIndexCut(WIRE_SPEEDDOWN))
+ if(is_cut(WIRE_SPEEDDOWN))
newfreq *= 0.5
A.freq = newfreq
diff --git a/code/datums/wires/mines.dm b/code/datums/wires/mines.dm
index 372810988c..209fcc4c30 100644
--- a/code/datums/wires/mines.dm
+++ b/code/datums/wires/mines.dm
@@ -1,32 +1,29 @@
/datum/wires/mines
wire_count = 6
- random = 1
+ randomize = TRUE
holder_type = /obj/effect/mine
+ proper_name = "Explosive Wires"
-#define WIRE_DETONATE 1
-#define WIRE_TIMED_DET 2
-#define WIRE_DISARM 4
-#define WIRE_DUMMY_1 8
-#define WIRE_DUMMY_2 16
-#define WIRE_BADDISARM 32
+/datum/wires/mines/New(atom/_holder)
+ wires = list(WIRE_EXPLODE, WIRE_EXPLODE_DELAY, WIRE_DISARM, WIRE_BADDISARM)
+ return ..()
-/datum/wires/mines/GetInteractWindow()
+/datum/wires/mines/get_status()
. = ..()
- . += "
\n["Warning: detonation may occur even with proper equipment."]"
- return .
+ . += "\[Warning: detonation may occur even with proper equipment.]"
/datum/wires/mines/proc/explode()
return
-/datum/wires/mines/UpdateCut(var/index, var/mended)
+/datum/wires/mines/on_cut(wire, mend)
var/obj/effect/mine/C = holder
- switch(index)
- if(WIRE_DETONATE)
+ switch(wire)
+ if(WIRE_EXPLODE)
C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*")
C.explode()
- if(WIRE_TIMED_DET)
+ if(WIRE_EXPLODE_DELAY)
C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*")
C.explode()
@@ -35,30 +32,22 @@
new C.mineitemtype(get_turf(C))
spawn(0)
qdel(C)
- return
-
- if(WIRE_DUMMY_1)
- return
-
-
- if(WIRE_DUMMY_2)
- return
if(WIRE_BADDISARM)
C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*")
spawn(20)
C.explode()
- return
+ ..()
-/datum/wires/mines/UpdatePulsed(var/index)
+/datum/wires/mines/on_pulse(wire)
var/obj/effect/mine/C = holder
- if(IsIndexCut(index))
+ if(is_cut(wire))
return
- switch(index)
- if(WIRE_DETONATE)
+ switch(wire)
+ if(WIRE_EXPLODE)
C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*")
- if(WIRE_TIMED_DET)
+ if(WIRE_EXPLODE_DELAY)
C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*")
spawn(20)
C.explode()
@@ -66,16 +55,10 @@
if(WIRE_DISARM)
C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*")
- if(WIRE_DUMMY_1)
- C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*")
-
- if(WIRE_DUMMY_2)
- C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*")
-
if(WIRE_BADDISARM)
C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*")
- return
+ ..()
-/datum/wires/mines/CanUse(var/mob/living/L)
+/datum/wires/mines/interactable(mob/user)
var/obj/effect/mine/M = holder
return M.panel_open
diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm
index 3d90236b46..e3fd198b3b 100644
--- a/code/datums/wires/particle_accelerator.dm
+++ b/code/datums/wires/particle_accelerator.dm
@@ -1,52 +1,48 @@
/datum/wires/particle_acc/control_box
wire_count = 5
holder_type = /obj/machinery/particle_accelerator/control_box
+ proper_name = "Particle accelerator control"
-var/const/PARTICLE_TOGGLE_WIRE = 1 // Toggles whether the PA is on or not.
-var/const/PARTICLE_STRENGTH_WIRE = 2 // Determines the strength of the PA.
-var/const/PARTICLE_INTERFACE_WIRE = 4 // Determines the interface showing up.
-var/const/PARTICLE_LIMIT_POWER_WIRE = 8 // Determines how strong the PA can be.
-//var/const/PARTICLE_NOTHING_WIRE = 16 // Blank wire
+/datum/wires/particle_acc/control_box/New(atom/_holder)
+ wires = list(WIRE_PARTICLE_POWER, WIRE_PARTICLE_STRENGTH, WIRE_PARTICLE_INTERFACE, WIRE_PARTICLE_POWER_LIMIT)
+ return ..()
-/datum/wires/particle_acc/control_box/CanUse(var/mob/living/L)
+/datum/wires/particle_acc/control_box/interactable(mob/user)
var/obj/machinery/particle_accelerator/control_box/C = holder
if(C.construction_state == 2)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/particle_acc/control_box/UpdatePulsed(var/index)
+/datum/wires/particle_acc/control_box/on_pulse(wire)
var/obj/machinery/particle_accelerator/control_box/C = holder
- switch(index)
-
- if(PARTICLE_TOGGLE_WIRE)
+ switch(wire)
+ if(WIRE_PARTICLE_POWER)
C.toggle_power()
- if(PARTICLE_STRENGTH_WIRE)
+ if(WIRE_PARTICLE_STRENGTH)
C.add_strength()
- if(PARTICLE_INTERFACE_WIRE)
+ if(WIRE_PARTICLE_INTERFACE)
C.interface_control = !C.interface_control
- if(PARTICLE_LIMIT_POWER_WIRE)
+ if(WIRE_PARTICLE_POWER_LIMIT)
C.visible_message("[bicon(C)][C] makes a large whirring noise.")
-/datum/wires/particle_acc/control_box/UpdateCut(var/index, var/mended)
+/datum/wires/particle_acc/control_box/on_cut(wire, mend)
var/obj/machinery/particle_accelerator/control_box/C = holder
- switch(index)
-
- if(PARTICLE_TOGGLE_WIRE)
- if(C.active == !mended)
+ switch(wire)
+ if(WIRE_PARTICLE_POWER)
+ if(C.active == !mend)
C.toggle_power()
- if(PARTICLE_STRENGTH_WIRE)
-
+ if(WIRE_PARTICLE_STRENGTH)
for(var/i = 1; i < 3; i++)
C.remove_strength()
- if(PARTICLE_INTERFACE_WIRE)
- C.interface_control = mended
+ if(WIRE_PARTICLE_INTERFACE)
+ C.interface_control = mend
- if(PARTICLE_LIMIT_POWER_WIRE)
- C.strength_upper_limit = (mended ? 2 : 3)
+ if(WIRE_PARTICLE_POWER_LIMIT)
+ C.strength_upper_limit = (mend ? 2 : 3)
if(C.strength_upper_limit < C.strength)
C.remove_strength()
diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm
index d059a0b091..ddc5110839 100644
--- a/code/datums/wires/radio.dm
+++ b/code/datums/wires/radio.dm
@@ -1,41 +1,42 @@
/datum/wires/radio
holder_type = /obj/item/device/radio
wire_count = 3
+ proper_name = "Radio"
-var/const/WIRE_SIGNAL = 1
-var/const/WIRE_RECEIVE = 2
-var/const/WIRE_TRANSMIT = 4
+/datum/wires/radio/New(atom/_holder)
+ wires = list(WIRE_RADIO_SIGNAL, WIRE_RADIO_RECEIVER, WIRE_RADIO_TRANSMIT)
+ return ..()
-/datum/wires/radio/CanUse(var/mob/living/L)
+/datum/wires/radio/interactable(mob/user)
var/obj/item/device/radio/R = holder
if(R.b_stat)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/radio/UpdatePulsed(var/index)
+/datum/wires/radio/on_pulse(wire)
var/obj/item/device/radio/R = holder
- switch(index)
- if(WIRE_SIGNAL)
- R.listening = !R.listening && !IsIndexCut(WIRE_RECEIVE)
- R.broadcasting = R.listening && !IsIndexCut(WIRE_TRANSMIT)
+ switch(wire)
+ if(WIRE_RADIO_SIGNAL)
+ R.listening = !R.listening && !is_cut(WIRE_RADIO_RECEIVER)
+ R.broadcasting = R.listening && !is_cut(WIRE_RADIO_TRANSMIT)
- if(WIRE_RECEIVE)
- R.listening = !R.listening && !IsIndexCut(WIRE_SIGNAL)
+ if(WIRE_RADIO_RECEIVER)
+ R.listening = !R.listening && !is_cut(WIRE_RADIO_SIGNAL)
- if(WIRE_TRANSMIT)
- R.broadcasting = !R.broadcasting && !IsIndexCut(WIRE_SIGNAL)
- SSnanoui.update_uis(holder)
+ if(WIRE_RADIO_TRANSMIT)
+ R.broadcasting = !R.broadcasting && !is_cut(WIRE_RADIO_SIGNAL)
+ ..()
-/datum/wires/radio/UpdateCut(var/index, var/mended)
+/datum/wires/radio/on_cut(wire, mend)
var/obj/item/device/radio/R = holder
- switch(index)
- if(WIRE_SIGNAL)
- R.listening = mended && !IsIndexCut(WIRE_RECEIVE)
- R.broadcasting = mended && !IsIndexCut(WIRE_TRANSMIT)
+ switch(wire)
+ if(WIRE_RADIO_SIGNAL)
+ R.listening = mend && !is_cut(WIRE_RADIO_RECEIVER)
+ R.broadcasting = mend && !is_cut(WIRE_RADIO_TRANSMIT)
- if(WIRE_RECEIVE)
- R.listening = mended && !IsIndexCut(WIRE_SIGNAL)
+ if(WIRE_RADIO_RECEIVER)
+ R.listening = mend && !is_cut(WIRE_RADIO_SIGNAL)
- if(WIRE_TRANSMIT)
- R.broadcasting = mended && !IsIndexCut(WIRE_SIGNAL)
- SSnanoui.update_uis(holder)
+ if(WIRE_RADIO_TRANSMIT)
+ R.broadcasting = mend && !is_cut(WIRE_RADIO_SIGNAL)
+ ..()
diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm
index ed87a2b1fe..7beb91437e 100644
--- a/code/datums/wires/robot.dm
+++ b/code/datums/wires/robot.dm
@@ -1,76 +1,63 @@
/datum/wires/robot
- random = 1
+ randomize = TRUE
holder_type = /mob/living/silicon/robot
wire_count = 5
+ proper_name = "Cyborg"
-var/const/BORG_WIRE_LAWCHECK = 1
-var/const/BORG_WIRE_MAIN_POWER = 2 // The power wires do nothing whyyyyyyyyyyyyy
-var/const/BORG_WIRE_LOCKED_DOWN = 4
-var/const/BORG_WIRE_AI_CONTROL = 8
-var/const/BORG_WIRE_CAMERA = 16
+/datum/wires/robot/New(atom/_holder)
+ wires = list(WIRE_AI_CONTROL, WIRE_BORG_CAMERA, WIRE_BORG_LAWCHECK, WIRE_BORG_LOCKED)
+ return ..()
-/datum/wires/robot/GetInteractWindow()
+/datum/wires/robot/get_status()
. = ..()
var/mob/living/silicon/robot/R = holder
- . += show_hint(0x1, R.lawupdate, "The LawSync light is on.", "The LawSync light is off.")
- . += show_hint(0x2, R.connected_ai, "The AI link light is on.", "The AI link light is off.")
- . += show_hint(0x4, (!isnull(R.camera) && R.camera.status == 1), "The camera light is on.", "The camera light is off.")
- . += show_hint(0x8, R.lockdown, "The lockdown light is on.", "The lockdown light is off.")
- return .
-
-/datum/wires/robot/UpdateCut(var/index, var/mended)
+ . += "The LawSync light is [R.lawupdate ? "on" : "off"]."
+ . += "The AI link light is [R.connected_ai ? "on" : "off"]."
+ . += "The Camera light is [(R.camera && R.camera.status == 1) ? "on" : "off"]."
+ . += "The lockdown light is [R.lockcharge ? "on" : "off"]."
+/datum/wires/robot/on_cut(wire, mend)
var/mob/living/silicon/robot/R = holder
- switch(index)
- if(BORG_WIRE_LAWCHECK) //Cut the law wire, and the borg will no longer receive law updates from its AI
- if(!mended)
- if (R.lawupdate == 1)
+ switch(wire)
+ if(WIRE_BORG_LAWCHECK) //Cut the law wire, and the borg will no longer receive law updates from its AI
+ if(!mend)
+ if(R.lawupdate)
to_chat(R, "LawSync protocol engaged.")
+ R.lawsync()
R.show_laws()
else
- if (R.lawupdate == 0 && !R.emagged)
- R.lawupdate = 1
+ if(!R.lawupdate && !R.emagged)
+ R.lawupdate = TRUE
- if (BORG_WIRE_AI_CONTROL) //Cut the AI wire to reset AI control
- if(!mended)
+ if(WIRE_AI_CONTROL) //Cut the AI wire to reset AI control
+ if(!mend)
R.disconnect_from_ai()
- if (BORG_WIRE_CAMERA)
+ if(WIRE_BORG_CAMERA)
if(!isnull(R.camera) && !R.scrambledcodes)
- R.camera.status = mended
+ R.camera.status = mend
- if(BORG_WIRE_LAWCHECK) //Forces a law update if the borg is set to receive them. Since an update would happen when the borg checks its laws anyway, not much use, but eh
- if (R.lawupdate)
- R.lawsync()
+ if(WIRE_BORG_LOCKED)
+ R.SetLockdown(!mend)
+ ..()
- if(BORG_WIRE_LOCKED_DOWN)
- R.SetLockdown(!mended)
-
-
-/datum/wires/robot/UpdatePulsed(var/index)
+/datum/wires/robot/on_pulse(wire)
var/mob/living/silicon/robot/R = holder
- switch(index)
- if (BORG_WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI
+ switch(wire)
+ if(WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI
if(!R.emagged)
- var/mob/living/silicon/ai/new_ai = select_active_ai(R)
- R.connect_to_ai(new_ai)
+ R.connect_to_ai(select_active_ai(R))
- if (BORG_WIRE_CAMERA)
+ if(WIRE_BORG_CAMERA)
if(!isnull(R.camera) && R.camera.can_use() && !R.scrambledcodes)
R.visible_message("[R]'s camera lense focuses loudly.")
to_chat(R, "Your camera lense focuses loudly.")
- if(BORG_WIRE_LOCKED_DOWN)
+ if(WIRE_BORG_LOCKED)
R.SetLockdown(!R.lockdown) // Toggle
-/datum/wires/robot/CanUse(var/mob/living/L)
+/datum/wires/robot/interactable(mob/user)
var/mob/living/silicon/robot/R = holder
if(R.wiresexposed)
- return 1
- return 0
-
-/datum/wires/robot/proc/IsCameraCut()
- return wires_status & BORG_WIRE_CAMERA
-
-/datum/wires/robot/proc/LockedCut()
- return wires_status & BORG_WIRE_LOCKED_DOWN
+ return TRUE
+ return FALSE
diff --git a/code/datums/wires/seedstorage.dm b/code/datums/wires/seedstorage.dm
index 2a0e315a57..19414b6731 100644
--- a/code/datums/wires/seedstorage.dm
+++ b/code/datums/wires/seedstorage.dm
@@ -1,56 +1,58 @@
-#define SEED_WIRE_SMART 1
-#define SEED_WIRE_CONTRABAND 2
-#define SEED_WIRE_ELECTRIFY 4
-#define SEED_WIRE_LOCKDOWN 8
-
/datum/wires/seedstorage
holder_type = /obj/machinery/seed_storage
wire_count = 4
- random = 1
+ randomize = TRUE
+ proper_name = "Seed Storage"
-/datum/wires/seedstorage/CanUse(var/mob/living/L)
+/datum/wires/seedstorage/New(atom/_holder)
+ wires = list(WIRE_SEED_SMART, WIRE_CONTRABAND, WIRE_ELECTRIFY, WIRE_SEED_LOCKDOWN)
+ return ..()
+
+/datum/wires/seedstorage/interactable(mob/user)
var/obj/machinery/seed_storage/V = holder
if(V.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/seedstorage/GetInteractWindow()
+/datum/wires/seedstorage/get_status()
var/obj/machinery/seed_storage/V = holder
- . += ..()
- . += show_hint(0x1, V.seconds_electrified, "The orange light is off.", "The orange light is on.")
- . += show_hint(0x2, V.smart, "The red light is off.", "The red light is blinking.")
- . += show_hint(0x4, V.hacked || V.emagged, "The green light is on.", "The green light is off.")
- . += show_hint(0x8, V.lockdown, "The keypad lock is deployed.", "The keypad lock is retracted.")
+ . = ..()
+ . += "The orange light is [V.seconds_electrified ? "off." : "on."]"
+ . += "The red light is [V.smart ? "off." : "blinking."]"
+ . += "The green light is [(V.hacked || V.emagged) ? "on." : "off."]"
+ . += "The keypad lock light is [V.lockdown ? "deployed." : "retracted."]"
-/datum/wires/seedstorage/UpdatePulsed(var/index)
+/datum/wires/seedstorage/on_pulse(wire)
var/obj/machinery/seed_storage/V = holder
- switch(index)
- if(SEED_WIRE_SMART)
+ switch(wire)
+ if(WIRE_SEED_SMART)
V.smart = !V.smart
- if(SEED_WIRE_CONTRABAND)
+ if(WIRE_CONTRABAND)
V.hacked = !V.hacked
- if(SEED_WIRE_ELECTRIFY)
+ if(WIRE_ELECTRIFY)
V.seconds_electrified = 30
- if(SEED_WIRE_LOCKDOWN)
+ if(WIRE_SEED_LOCKDOWN)
V.lockdown = !V.lockdown
+ ..()
-/datum/wires/seedstorage/UpdateCut(var/index, var/mended)
+/datum/wires/seedstorage/on_cut(wire, mend)
var/obj/machinery/seed_storage/V = holder
- switch(index)
- if(SEED_WIRE_SMART)
- V.smart = 0
- if(SEED_WIRE_CONTRABAND)
- V.hacked = !mended
- if(SEED_WIRE_ELECTRIFY)
- if(mended)
+ switch(wire)
+ if(WIRE_SEED_SMART)
+ V.smart = FALSE
+ if(WIRE_CONTRABAND)
+ V.hacked = !mend
+ if(WIRE_ELECTRIFY)
+ if(mend)
V.seconds_electrified = 0
else
V.seconds_electrified = -1
- if(SEED_WIRE_LOCKDOWN)
- if(mended)
- V.lockdown = 1
+ if(WIRE_SEED_LOCKDOWN)
+ if(mend)
+ V.lockdown = TRUE
V.req_access = list()
V.req_one_access = list()
else
V.req_access = initial(V.req_access)
V.req_one_access = initial(V.req_one_access)
+ ..()
\ No newline at end of file
diff --git a/code/datums/wires/shield_generator.dm b/code/datums/wires/shield_generator.dm
index 201109de35..9ba0293591 100644
--- a/code/datums/wires/shield_generator.dm
+++ b/code/datums/wires/shield_generator.dm
@@ -1,46 +1,47 @@
/datum/wires/shield_generator
holder_type = /obj/machinery/power/shield_generator
wire_count = 5
+ proper_name = "Shield Generator"
-var/const/SHIELDGEN_WIRE_POWER = 1 // Cut to disable power input into the generator. Pulse does nothing. Mend to restore.
-var/const/SHIELDGEN_WIRE_HACK = 2 // Pulse to hack the generator, enabling hacked modes. Cut to unhack. Mend does nothing.
-var/const/SHIELDGEN_WIRE_CONTROL = 4 // Cut to lock most shield controls. Mend to unlock them. Pulse does nothing.
-var/const/SHIELDGEN_WIRE_AICONTROL = 8 // Cut to disable AI control. Mend to restore.
-var/const/SHIELDGEN_WIRE_NOTHING = 16 // A blank wire that doesn't have any specific function
+/datum/wires/shield_generator/New(atom/_holder)
+ wires = list(WIRE_MAIN_POWER1, WIRE_CONTRABAND, WIRE_AI_CONTROL, WIRE_SHIELD_CONTROL)
+ return ..()
-/datum/wires/shield_generator/CanUse(var/mob/living/L)
+/datum/wires/shield_generator/interactable(mob/user)
var/obj/machinery/power/shield_generator/S = holder
if(S.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/shield_generator/GetInteractWindow()
+/datum/wires/shield_generator/get_status()
var/obj/machinery/power/shield_generator/S = holder
- . += ..()
- . += show_hint(0x1, S.mode_changes_locked, "The orange light is on.", "The orange light is off.")
- . += show_hint(0x2, S.ai_control_disabled, "The blue light is off.", "The blue light is blinking.")
- . += show_hint(0x4, S.hacked, "The violet light is pulsing.", "The violet light is steady.")
- . += show_hint(0x8, S.input_cut, "The red light is off.", "The red light is on.")
+ . = ..()
+ . += "The orange light is [S.mode_changes_locked ? "on." : "off."]"
+ . += "The blue light is [S.ai_control_disabled ? "off." : "blinking."]"
+ . += "The violet light is [S.hacked ? "pulsing." : "steady."]"
+ . += "The red light is [S.input_cut ? "off." : "on."]"
-/datum/wires/shield_generator/UpdateCut(index, mended)
+/datum/wires/shield_generator/on_cut(wire, mend)
var/obj/machinery/power/shield_generator/S = holder
- switch(index)
- if(SHIELDGEN_WIRE_POWER)
- S.input_cut = !mended
- if(SHIELDGEN_WIRE_HACK)
- if(!mended)
- S.hacked = 0
+ switch(wire)
+ if(WIRE_MAIN_POWER1)
+ S.input_cut = !mend
+ if(WIRE_CONTRABAND)
+ if(!mend)
+ S.hacked = FALSE
if(S.check_flag(MODEFLAG_BYPASS))
S.toggle_flag(MODEFLAG_BYPASS)
if(S.check_flag(MODEFLAG_OVERCHARGE))
S.toggle_flag(MODEFLAG_OVERCHARGE)
- if(SHIELDGEN_WIRE_CONTROL)
- S.mode_changes_locked = !mended
- if(SHIELDGEN_WIRE_AICONTROL)
- S.ai_control_disabled = !mended
+ if(WIRE_SHIELD_CONTROL)
+ S.mode_changes_locked = !mend
+ if(WIRE_AI_CONTROL)
+ S.ai_control_disabled = !mend
+ ..()
-/datum/wires/shield_generator/UpdatePulsed(var/index)
+/datum/wires/shield_generator/on_pulse(wire)
var/obj/machinery/power/shield_generator/S = holder
- switch(index)
- if(SHIELDGEN_WIRE_HACK)
- S.hacked = 1
\ No newline at end of file
+ switch(wire)
+ if(WIRE_CONTRABAND)
+ S.hacked = TRUE
+ ..()
\ No newline at end of file
diff --git a/code/datums/wires/smartfridge.dm b/code/datums/wires/smartfridge.dm
index f69e153bbf..78b82939e2 100644
--- a/code/datums/wires/smartfridge.dm
+++ b/code/datums/wires/smartfridge.dm
@@ -1,47 +1,52 @@
/datum/wires/smartfridge
holder_type = /obj/machinery/smartfridge
wire_count = 3
+ proper_name = "Smartfridge"
+
+/datum/wires/smartfridge/New(atom/_holder)
+ wires = list(WIRE_ELECTRIFY, WIRE_IDSCAN, WIRE_THROW_ITEM)
+ return ..()
/datum/wires/smartfridge/secure
- random = 1
- wire_count = 4
+ randomize = TRUE
+ wire_count = 4 // 3 actual, 1 dud.
-var/const/SMARTFRIDGE_WIRE_ELECTRIFY = 1
-var/const/SMARTFRIDGE_WIRE_THROW = 2
-var/const/SMARTFRIDGE_WIRE_IDSCAN = 4
-
-/datum/wires/smartfridge/CanUse(var/mob/living/L)
+/datum/wires/smartfridge/interactable(mob/user)
var/obj/machinery/smartfridge/S = holder
+ if(iscarbon(user) && S.Adjacent(user) && S.seconds_electrified && S.shock(user, 100))
+ return FALSE
if(S.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/smartfridge/GetInteractWindow()
+/datum/wires/smartfridge/get_status()
+ . = ..()
var/obj/machinery/smartfridge/S = holder
- . += ..()
- . += show_hint(0x1, S.seconds_electrified, "The orange light is off.", "The orange light is on.")
- . += show_hint(0x2, S.shoot_inventory, "The red light is off.", "The red light is blinking.")
- . += show_hint(0x4, S.scan_id, "A purple light is on.", "A yellow light is on.")
+ . += "The orange light is [S.seconds_electrified ? "off" : "on"]."
+ . += "The red light is [S.shoot_inventory ? "off" : "blinking"]."
+ . += "A [S.scan_id ? "purple" : "yellow"] light is on."
-/datum/wires/smartfridge/UpdatePulsed(var/index)
+/datum/wires/smartfridge/on_pulse(wire)
var/obj/machinery/smartfridge/S = holder
- switch(index)
- if(SMARTFRIDGE_WIRE_THROW)
+ switch(wire)
+ if(WIRE_THROW_ITEM)
S.shoot_inventory = !S.shoot_inventory
- if(SMARTFRIDGE_WIRE_ELECTRIFY)
+ if(WIRE_ELECTRIFY)
S.seconds_electrified = 30
- if(SMARTFRIDGE_WIRE_IDSCAN)
+ if(WIRE_IDSCAN)
S.scan_id = !S.scan_id
+ ..()
-/datum/wires/smartfridge/UpdateCut(var/index, var/mended)
+/datum/wires/smartfridge/on_cut(wire, mend)
var/obj/machinery/smartfridge/S = holder
- switch(index)
- if(SMARTFRIDGE_WIRE_THROW)
- S.shoot_inventory = !mended
- if(SMARTFRIDGE_WIRE_ELECTRIFY)
- if(mended)
+ switch(wire)
+ if(WIRE_THROW_ITEM)
+ S.shoot_inventory = !mend
+ if(WIRE_ELECTRIFY)
+ if(mend)
S.seconds_electrified = 0
else
S.seconds_electrified = -1
- if(SMARTFRIDGE_WIRE_IDSCAN)
- S.scan_id = 1
+ if(WIRE_IDSCAN)
+ S.scan_id = TRUE
+ ..()
diff --git a/code/datums/wires/smes.dm b/code/datums/wires/smes.dm
index 1751bb6760..ad63c12522 100644
--- a/code/datums/wires/smes.dm
+++ b/code/datums/wires/smes.dm
@@ -1,59 +1,57 @@
/datum/wires/smes
holder_type = /obj/machinery/power/smes/buildable
wire_count = 5
+ proper_name = "SMES"
-var/const/SMES_WIRE_RCON = 1 // Remote control (AI and consoles), cut to disable
-var/const/SMES_WIRE_INPUT = 2 // Input wire, cut to disable input, pulse to disable for 60s
-var/const/SMES_WIRE_OUTPUT = 4 // Output wire, cut to disable output, pulse to disable for 60s
-var/const/SMES_WIRE_GROUNDING = 8 // Cut to quickly discharge causing sparks, pulse to only create few sparks
-var/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable
+/datum/wires/smes/New(atom/_holder)
+ wires = list(WIRE_SMES_RCON, WIRE_SMES_INPUT, WIRE_SMES_OUTPUT, WIRE_SMES_GROUNDING, WIRE_SMES_FAILSAFES)
+ return ..()
-
-/datum/wires/smes/CanUse(var/mob/living/L)
+/datum/wires/smes/interactable(mob/user)
var/obj/machinery/power/smes/buildable/S = holder
if(S.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-
-/datum/wires/smes/GetInteractWindow()
+/datum/wires/smes/get_status()
var/obj/machinery/power/smes/buildable/S = holder
- . += ..()
- . += show_hint(0x1, S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed, "The green light is off.", "The green light is on.")
- . += show_hint(0x2, S.safeties_enabled || S.grounding, "The red light is off.", "The red light is blinking.")
- . += show_hint(0x4, S.RCon, "The blue light is on.", "The blue light is off.")
+ . = ..()
+ . += "The green light is [(S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed) ? "off" : "on"]."
+ . += "The red light is [(S.safeties_enabled || S.grounding) ? "off" : "blinking"]."
+ . += "The blue light is [S.RCon ? "on" : "off"]."
-/datum/wires/smes/UpdateCut(var/index, var/mended)
+/datum/wires/smes/on_cut(wire, mend)
var/obj/machinery/power/smes/buildable/S = holder
- switch(index)
- if(SMES_WIRE_RCON)
- S.RCon = mended
- if(SMES_WIRE_INPUT)
- S.input_cut = !mended
- if(SMES_WIRE_OUTPUT)
- S.output_cut = !mended
- if(SMES_WIRE_GROUNDING)
- S.grounding = mended
- if(SMES_WIRE_FAILSAFES)
- S.safeties_enabled = mended
+ switch(wire)
+ if(WIRE_SMES_RCON)
+ S.RCon = mend
+ if(WIRE_SMES_INPUT)
+ S.input_cut = !mend
+ if(WIRE_SMES_OUTPUT)
+ S.output_cut = !mend
+ if(WIRE_SMES_GROUNDING)
+ S.grounding = mend
+ if(WIRE_SMES_FAILSAFES)
+ S.safeties_enabled = mend
+ ..()
-
-/datum/wires/smes/UpdatePulsed(var/index)
+/datum/wires/smes/on_pulse(wire)
var/obj/machinery/power/smes/buildable/S = holder
- switch(index)
- if(SMES_WIRE_RCON)
+ switch(wire)
+ if(WIRE_SMES_RCON)
if(S.RCon)
S.RCon = 0
spawn(10)
S.RCon = 1
- if(SMES_WIRE_INPUT)
+ if(WIRE_SMES_INPUT)
S.toggle_input()
- if(SMES_WIRE_OUTPUT)
+ if(WIRE_SMES_OUTPUT)
S.toggle_output()
- if(SMES_WIRE_GROUNDING)
+ if(WIRE_SMES_GROUNDING)
S.grounding = 0
- if(SMES_WIRE_FAILSAFES)
+ if(WIRE_SMES_FAILSAFES)
if(S.safeties_enabled)
S.safeties_enabled = 0
spawn(10)
- S.safeties_enabled = 1
\ No newline at end of file
+ S.safeties_enabled = 1
+ ..()
\ No newline at end of file
diff --git a/code/datums/wires/suit_storage_unit.dm b/code/datums/wires/suit_storage_unit.dm
index fe694d271a..97d3f98c84 100644
--- a/code/datums/wires/suit_storage_unit.dm
+++ b/code/datums/wires/suit_storage_unit.dm
@@ -1,47 +1,46 @@
/datum/wires/suit_storage_unit
holder_type = /obj/machinery/suit_cycler
wire_count = 3
+ proper_name = "Suit storage unit"
-var/const/SUIT_STORAGE_WIRE_ELECTRIFY = 1
-var/const/SUIT_STORAGE_WIRE_SAFETY = 2
-var/const/SUIT_STORAGE_WIRE_LOCKED = 4
+/datum/wires/suit_storage_unit/New(atom/_holder)
+ wires = list(WIRE_IDSCAN, WIRE_ELECTRIFY, WIRE_SAFETY)
+ return ..()
-/datum/wires/suit_storage_unit/CanUse(var/mob/living/L)
+/datum/wires/suit_storage_unit/interactable(mob/user)
var/obj/machinery/suit_cycler/S = holder
- if(!istype(L, /mob/living/silicon))
- if(S.electrified)
- if(S.shock(L, 100))
- return 0
+ if(iscarbon(user) && S.Adjacent(user) && S.electrified)
+ return !S.shock(user, 100)
if(S.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/suit_storage_unit/GetInteractWindow()
- var/obj/machinery/suit_cycler/S = holder
- . += ..()
- . += show_hint(0x1, S.electrified, "The orange light is off.", "The orange light is on.")
- . += show_hint(0x2, S.safeties, "The red light is off.", "The red light is blinking.")
- . += show_hint(0x4, S.locked, "The yellow light is on.", "The yellow light is off.")
+/datum/wires/suit_storage_unit/get_status()
+ . = ..()
+ var/obj/machinery/suit_cycler/A = holder
+ . += "The orange light is [A.electrified ? "off" : "on"]."
+ . += "The red light is [A.safeties ? "off" : "blinking"]."
+ . += "The yellow light is [A.locked ? "on" : "off"]."
-/datum/wires/suit_storage_unit/UpdatePulsed(var/index)
+/datum/wires/suit_storage_unit/on_pulse(wire)
var/obj/machinery/suit_cycler/S = holder
- switch(index)
- if(SUIT_STORAGE_WIRE_SAFETY)
+ switch(wire)
+ if(WIRE_SAFETY)
S.safeties = !S.safeties
- if(SUIT_STORAGE_WIRE_ELECTRIFY)
+ if(WIRE_ELECTRIFY)
S.electrified = 30
- if(SUIT_STORAGE_WIRE_LOCKED)
+ if(WIRE_IDSCAN)
S.locked = !S.locked
-/datum/wires/suit_storage_unit/UpdateCut(var/index, var/mended)
+/datum/wires/suit_storage_unit/on_cut(wire, mend)
var/obj/machinery/suit_cycler/S = holder
- switch(index)
- if(SUIT_STORAGE_WIRE_SAFETY)
- S.safeties = mended
- if(SUIT_STORAGE_WIRE_LOCKED)
- S.locked = mended
- if(SUIT_STORAGE_WIRE_ELECTRIFY)
- if(mended)
+ switch(wire)
+ if(WIRE_SAFETY)
+ S.safeties = mend
+ if(WIRE_IDSCAN)
+ S.locked = mend
+ if(WIRE_ELECTRIFY)
+ if(mend)
S.electrified = 0
else
S.electrified = -1
diff --git a/code/datums/wires/tesla_coil.dm b/code/datums/wires/tesla_coil.dm
index f176b8f139..30f15539b7 100644
--- a/code/datums/wires/tesla_coil.dm
+++ b/code/datums/wires/tesla_coil.dm
@@ -1,18 +1,21 @@
/datum/wires/tesla_coil
wire_count = 1
holder_type = /obj/machinery/power/tesla_coil
+ proper_name = "Tesla coil"
-var/const/WIRE_ZAP = 1
+/datum/wires/tesla_coil/New(atom/_holder)
+ wires = list(WIRE_TESLACOIL_ZAP)
+ return ..()
-/datum/wires/tesla_coil/CanUse(mob/living/L)
+/datum/wires/tesla_coil/interactable(mob/user)
var/obj/machinery/power/tesla_coil/T = holder
if(T && T.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/tesla_coil/UpdatePulsed(index)
+/datum/wires/tesla_coil/on_pulse(wire)
var/obj/machinery/power/tesla_coil/T = holder
- switch(index)
- if(WIRE_ZAP)
+ switch(wire)
+ if(WIRE_TESLACOIL_ZAP)
T.zap()
..()
diff --git a/code/datums/wires/vending.dm b/code/datums/wires/vending.dm
index 61aadf4b1b..33dc26f241 100644
--- a/code/datums/wires/vending.dm
+++ b/code/datums/wires/vending.dm
@@ -1,49 +1,53 @@
/datum/wires/vending
holder_type = /obj/machinery/vending
wire_count = 4
+ proper_name = "Vending machine"
-var/const/VENDING_WIRE_THROW = 1
-var/const/VENDING_WIRE_CONTRABAND = 2
-var/const/VENDING_WIRE_ELECTRIFY = 4
-var/const/VENDING_WIRE_IDSCAN = 8
+/datum/wires/vending/New(atom/_holder)
+ wires = list(WIRE_THROW_ITEM, WIRE_IDSCAN, WIRE_ELECTRIFY, WIRE_CONTRABAND)
+ return ..()
-/datum/wires/vending/CanUse(var/mob/living/L)
+/datum/wires/vending/interactable(mob/user)
var/obj/machinery/vending/V = holder
+ if(iscarbon(user) && V.seconds_electrified && V.shock(user, 100))
+ return FALSE
if(V.panel_open)
- return 1
- return 0
+ return TRUE
+ return FALSE
-/datum/wires/vending/GetInteractWindow()
+/datum/wires/vending/get_status()
var/obj/machinery/vending/V = holder
- . += ..()
- . += show_hint(0x1, V.seconds_electrified, "The orange light is off.", "The orange light is on.")
- . += show_hint(0x2, V.shoot_inventory, "The red light is off.", "The red light is blinking.")
- . += show_hint(0x4, V.categories & CAT_HIDDEN, "A green light is on.", "A green light is off.")
- . += show_hint(0x8, V.scan_id, "A purple light is on.", "A yellow light is on.")
+ . = ..()
+ . += "The orange light is [V.seconds_electrified ? "on" : "off"]."
+ . += "The red light is [V.shoot_inventory ? "off" : "blinking"]."
+ . += "The green light is [(V.categories & CAT_HIDDEN) ? "on" : "off"]."
+ . += "A [V.scan_id ? "purple" : "yellow"] light is on."
-/datum/wires/vending/UpdatePulsed(var/index)
+/datum/wires/vending/on_pulse(wire)
var/obj/machinery/vending/V = holder
- switch(index)
- if(VENDING_WIRE_THROW)
+ switch(wire)
+ if(WIRE_THROW_ITEM)
V.shoot_inventory = !V.shoot_inventory
- if(VENDING_WIRE_CONTRABAND)
+ if(WIRE_CONTRABAND)
V.categories ^= CAT_HIDDEN
- if(VENDING_WIRE_ELECTRIFY)
+ if(WIRE_ELECTRIFY)
V.seconds_electrified = 30
- if(VENDING_WIRE_IDSCAN)
+ if(WIRE_IDSCAN)
V.scan_id = !V.scan_id
+ ..()
-/datum/wires/vending/UpdateCut(var/index, var/mended)
+/datum/wires/vending/on_cut(wire, mend)
var/obj/machinery/vending/V = holder
- switch(index)
- if(VENDING_WIRE_THROW)
- V.shoot_inventory = !mended
- if(VENDING_WIRE_CONTRABAND)
+ switch(wire)
+ if(WIRE_THROW_ITEM)
+ V.shoot_inventory = !mend
+ if(WIRE_CONTRABAND)
V.categories &= ~CAT_HIDDEN
- if(VENDING_WIRE_ELECTRIFY)
- if(mended)
+ if(WIRE_ELECTRIFY)
+ if(mend)
V.seconds_electrified = 0
else
V.seconds_electrified = -1
- if(VENDING_WIRE_IDSCAN)
+ if(WIRE_IDSCAN)
V.scan_id = 1
+ ..()
\ No newline at end of file
diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm
index 645d7cc043..d37fbff0fe 100644
--- a/code/datums/wires/wires.dm
+++ b/code/datums/wires/wires.dm
@@ -1,340 +1,460 @@
-// Wire datums. Created by Giacomand.
-// Was created to replace a horrible case of copy and pasted code with no care for maintability.
-// Goodbye Door wires, Cyborg wires, Vending Machine wires, Autolathe wires
-// Protolathe wires, APC wires and Camera wires!
-
-#define MAX_FLAG 65535
-
-var/list/same_wires = list()
-// 14 colours, if you're adding more than 14 wires then add more colours here
-var/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown", "gold", "gray", "cyan", "navy", "purple", "pink", "black", "yellow")
/datum/wires
+ /// TRUE if the wires will be different every time a new wire datum is created.
+ var/randomize = FALSE
+ /// The atom the wires belong too. For example: an airlock.
+ var/atom/holder
+ /// The holder type; used to make sure that the holder is the correct type.
+ var/holder_type
+ /// The display name for the TGUI window. For example, given the var is "APC"...
+ /// When the TGUI window is opened, "wires" will be appended to it's title, and it would become "APC wires".
+ var/proper_name = "Unknown"
+ /// The total number of wires that our holder atom has.
+ var/wire_count = NONE
+ /// A list of all wires. For a list of valid wires defines that can go here, see `code/__DEFINES/wires.dm`
+ var/list/wires
+ /// A list of all cut wires. The same values that can go into `wires` will get added and removed from this list.
+ var/list/cut_wires
+ /// An associative list with the wire color as the key, and the wire define as the value.
+ var/list/colors
+ /// An associative list of signalers attached to the wires. The wire color is the key, and the signaler object reference is the value.
+ var/list/assemblies
- var/random = 0 // Will the wires be different for every single instance.
- var/atom/holder = null // The holder
- var/holder_type = null // The holder type; used to make sure that the holder is the correct type.
- var/wire_count = 0 // Max is 16
- var/wires_status = 0 // BITFLAG OF WIRES
-
- var/hint_states = 0 // BITFLAG OF HINT STATES (For tracking if they changed for bolding in UI)
- var/hint_states_initialized = FALSE // False until first time window is rendered.
-
- var/list/wires = list()
- var/list/signallers = list()
-
- var/table_options = " align='center'"
- var/row_options1 = " width='80px'"
- var/row_options2 = " width='260px'"
- var/window_x = 370
- var/window_y = 470
-
-// Note: Its assumed states are boolean. If you ever have a multi-state hint, you must implement that yourself.
-/datum/wires/proc/show_hint(flag, current_state, true_text, false_text)
- var/state_changed = FALSE
- if(hint_states_initialized)
- if(!(hint_states & flag) != !current_state) // NOT-ing to convert to boolean
- state_changed = TRUE
- if(current_state)
- hint_states |= flag
- return state_changed ? "
[true_text]" : "
[true_text]"
- else
- hint_states &= ~flag
- return state_changed ? "
[false_text]" : "
[false_text]"
-
-/datum/wires/New(var/atom/holder)
+/datum/wires/New(atom/_holder)
..()
- src.holder = holder
- if(!istype(holder, holder_type))
+ if(!istype(_holder, holder_type))
CRASH("Our holder is null/the wrong type!")
+
+ holder = _holder
+ cut_wires = list()
+ colors = list()
+ assemblies = list()
+
+ // Add in the appropriate amount of dud wires.
+ var/wire_len = length(wires)
+ if(wire_len < wire_count) // If the amount of "real" wires is less than the total we're suppose to have...
+ add_duds(wire_count - wire_len) // Add in the appropriate amount of duds to reach `wire_count`.
+
+ // If the randomize is true, we need to generate a new set of wires and ignore any wire color directories.
+ if(randomize)
+ randomize()
return
- // Generate new wires
- if(random)
- GenerateWires()
- // Get the same wires
+ if(!GLOB.wire_color_directory[holder_type])
+ randomize()
+ GLOB.wire_color_directory[holder_type] = colors
else
- // We don't have any wires to copy yet, generate some and then copy it.
- if(!same_wires[holder_type])
- GenerateWires()
- same_wires[holder_type] = src.wires.Copy()
- else
- var/list/wires = same_wires[holder_type]
- src.wires = wires // Reference the wires list.
+ colors = GLOB.wire_color_directory[holder_type]
/datum/wires/Destroy()
holder = null
- signallers.Cut()
+ for(var/color in colors)
+ detach_assembly(color)
return ..()
-/datum/wires/proc/GenerateWires()
- var/list/colours_to_pick = wireColours.Copy() // Get a copy, not a reference.
- var/list/indexes_to_pick = list()
- //Generate our indexes
- for(var/i = 1; i < MAX_FLAG && i < (1 << wire_count); i += i)
- indexes_to_pick += i
- colours_to_pick.len = wire_count // Downsize it to our specifications.
+/**
+ * Randomly generates a new set of wires. and corresponding colors from the given pool. Assigns the information as an associative list, to `colors`.
+ *
+ * In the `colors` list, the name of the color is the key, and the wire is the value.
+ * For example: `colors["red"] = WIRE_ELECTRIFY`. This will look like `list("red" = WIRE_ELECTRIFY)` internally.
+ */
+/datum/wires/proc/randomize()
+ var/static/list/possible_colors = list("red", "blue", "green", "darkmagenta", "orange", "brown", "gold", "grey", "cyan", "white", "purple", "pink", "darkslategrey", "yellow")
+ var/list/my_possible_colors = possible_colors.Copy()
- while(colours_to_pick.len && indexes_to_pick.len)
- // Pick and remove a colour
- var/colour = pick_n_take(colours_to_pick)
+ for(var/wire in shuffle(wires))
+ colors[pick_n_take(my_possible_colors)] = wire
- // Pick and remove an index
- var/index = pick_n_take(indexes_to_pick)
+/**
+ * Proc called when the user attempts to interact with wires UI.
+ *
+ * Checks if the user exists, is a mob, the wires are attached to something (`holder`) and makes sure `interactable(user)` returns TRUE.
+ * If all the checks succeed, open the TGUI interface for the user.
+ *
+ * Arugments:
+ * * user - the mob trying to interact with the wires.
+ */
+/datum/wires/proc/Interact(mob/user)
+ if(user && istype(user) && holder && interactable(user))
+ tgui_interact(user)
- src.wires[colour] = index
- //wires = shuffle(wires)
+/**
+ * Base proc, intended to be overriden. Wire datum specific checks you want to run before the TGUI is shown to the user should go here.
+ */
+/datum/wires/proc/interactable(mob/user)
+ return TRUE
+/// Users will be interacting with our holder object and not the wire datum directly, therefore we need to return the holder.
+/datum/wires/tgui_host()
+ return holder
-/datum/wires/proc/Interact(var/mob/living/user)
+/datum/wires/tgui_interact(mob/user, datum/tgui/ui = null)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Wires", "[proper_name] wires")
+ ui.open()
- var/html = null
- if(holder && CanUse(user))
- html = GetInteractWindow()
- hint_states_initialized = TRUE
- if(html)
- user.set_machine(holder)
- else
- user.unset_machine()
- // No content means no window.
- user << browse(null, "window=wires")
+/datum/wires/tgui_state(mob/user)
+ return GLOB.tgui_physical_state
+
+/datum/wires/tgui_data(mob/user)
+ var/list/data = list()
+ var/list/replace_colors
+
+ if(isliving(user))
+ var/mob/living/L = user
+ for(var/datum/modifier/M in L.modifiers)
+ if(!isnull(M.wire_colors_replace))
+ replace_colors = M.wire_colors_replace
+ break
+
+ var/list/wires_list = list()
+
+ for(var/color in colors)
+ var/replaced_color = color
+ var/color_name = color
+
+ if(color in replace_colors) // If this color is one that needs to be replaced using the colorblindness list.
+ replaced_color = replace_colors[color]
+ if(replaced_color in LIST_COLOR_RENAME) // If its an ugly written color name like "darkolivegreen", rename it to something like "dark green".
+ color_name = LIST_COLOR_RENAME[replaced_color]
+ else
+ color_name = replaced_color // Else just keep the normal color name
+
+ if(color in LIST_COLOR_RENAME)
+ color_name = LIST_COLOR_RENAME[color]
+
+ wires_list += list(list(
+ "seen_color" = replaced_color, // The color of the wire that the mob will see. This will be the same as `color` if the user is NOT colorblind.
+ "color_name" = color_name, // The wire's name. This will be the same as `color` if the user is NOT colorblind.
+ "color" = color, // The "real" color of the wire. No replacements.
+ "wire" = can_see_wire_info(user) && !is_dud_color(color) ? get_wire(color) : null, // Wire define information like "Contraband" or "Door Bolts".
+ "cut" = is_color_cut(color), // Whether the wire is cut or not. Used to display "cut" or "mend".
+ "attached" = is_attached(color) // Whether or not a signaler is attached to this wire.
+ ))
+ data["wires"] = wires_list
+
+ // Get the information shown at the bottom of wire TGUI window, such as "The red light is blinking", etc.
+ // If the user is colorblind, we need to replace these colors as well.
+ var/list/status = get_status()
+
+ if(replace_colors)
+ var/i
+ for(i in 1 to length(status))
+ for(var/color in replace_colors)
+ var/new_color = replace_colors[color]
+ if(new_color in LIST_COLOR_RENAME)
+ new_color = LIST_COLOR_RENAME[new_color]
+ if(findtext(status[i], color))
+ status[i] = replacetext(status[i], color, new_color)
+ break
+
+ data["status"] = status
+ return data
+
+/datum/wires/tgui_act(action, list/params)
+ if(..())
return
- var/datum/browser/popup = new(user, "wires", holder.name, window_x, window_y)
- popup.set_content(html)
- popup.set_title_image(user.browse_rsc_icon(holder.icon, holder.icon_state))
- popup.open()
-
-/datum/wires/proc/GetInteractWindow()
- var/html = "
| [capitalize(colour)] | " - html += "" - html += "[IsColourCut(colour) ? "Mend" : "Cut"]" - html += " Pulse" - html += " [IsAttached(colour) ? "Detach" : "Attach"] Signaller |