diff --git a/code/modules/integrated_electronics/_defines.dm b/code/modules/integrated_electronics/_defines.dm
index e4c103d63fc..9e0fa6039c8 100644
--- a/code/modules/integrated_electronics/_defines.dm
+++ b/code/modules/integrated_electronics/_defines.dm
@@ -115,13 +115,16 @@
return null
/obj/item/integrated_circuit/interact(mob/user)
- if(get_dist(src, user) > 1)
+ if(get_dist(get_turf(src), user) > 1)
user.unset_machine(src)
return
var/HTML = "
[src.name]"
HTML += ""
HTML += "
"
+ HTML += "
\[Refresh\] | "
+ HTML += "\[Rename\]
"
+
HTML += ""
HTML += ""
HTML += ""
@@ -143,15 +146,15 @@
io = get_pin_ref("input",i)
if(io)
if(io.linked.len)
- words = "[io.name] [io.display_data()]
"
+ words = "[io.name] [io.display_data()]
"
for(var/datum/integrated_io/linked in io.linked)
- words += "\[[linked.name]\] \
- @ [linked.holder]
"
+ words += "\[[linked.name]\] \
+ @ [linked.holder]
"
else // "Click here!"
- words = "[io.name] [io.display_data()]
"
+ words = "[io.name] [io.display_data()]
"
for(var/datum/integrated_io/linked in io.linked)
- words += "\[[linked.name]\] \
- @ [linked.holder]
"
+ words += "\[[linked.name]\] \
+ @ [linked.holder]
"
if(outputs.len > inputs.len)
height = Floor(outputs.len / inputs.len)
//world << "I wrote [words] at ([i],[j])."
@@ -166,15 +169,15 @@
io = get_pin_ref("output",i)
if(io)
if(io.linked.len)
- words = "[io.name] [io.display_data()]
"
+ words = "[io.name] [io.display_data()]
"
for(var/datum/integrated_io/linked in io.linked)
- words += "\[[linked.name]\] \
- @ [linked.holder]
"
+ words += "\[[linked.name]\] \
+ @ [linked.holder]
"
else
- words = "[io.name] [io.display_data()]
"
+ words = "[io.name] [io.display_data()]
"
for(var/datum/integrated_io/linked in io.linked)
- words += "\[[linked.name]\] \
- @ [linked.holder]
"
+ words += "\[[linked.name]\] \
+ @ [linked.holder]
"
if(inputs.len > outputs.len)
height = Floor(inputs.len / outputs.len)
//world << "I wrote [words] at ([i],[j])."
@@ -190,15 +193,15 @@
io = get_pin_ref("activator",i)
if(io)
if(io.linked.len)
- words = "[io.name]
"
+ words = "[io.name]
"
for(var/datum/integrated_io/linked in io.linked)
- words += "\[[linked.name]\] \
- @ [linked.holder]
"
+ words += "\[[linked.name]\] \
+ @ [linked.holder]
"
else // "Click here!"
- words = "[io.name]
"
+ words = "[io.name]
"
for(var/datum/integrated_io/linked in io.linked)
- words += "\[[linked.name]\] \
- @ [linked.holder]
"
+ words += "\[[linked.name]\] \
+ @ [linked.holder]
"
HTML += ""
HTML += "| [words] | "
HTML += "
"
@@ -206,50 +209,47 @@
HTML += "
"
HTML += "
"
- HTML += "
Refresh"
HTML += "
[extended_desc]"
HTML += ""
- user << browse(HTML, "window=circuit-\ref[src];size=400x440;border=1;can_resize=1;can_close=1;can_minimize=1")
+ user << browse(HTML, "window=circuit-\ref[src];size=600x350;border=1;can_resize=1;can_close=1;can_minimize=1")
user.set_machine(src)
onclose(user, "circuit-\ref[src]")
- //user << sanitize(HTML, "window=debug;size=400x400;border=1;can_resize=1;can_close=1;can_minimize=1")
- //world << sanitize(HTML)
/obj/item/integrated_circuit/Topic(href, href_list[])
- if(..())
+ var/mob/living/user = locate(href_list["user"]) in mob_list
+ var/pin = locate(href_list["pin"]) in inputs + outputs + activators
+
+ if(!user || !user.Adjacent(get_turf(src)) )
return 1
- var/user = locate(href_list["user"]) in mob_list
- var/pin = locate(href_list["pin"]) in contents
- switch(href_list["action"])
- if("examine")
- examine(user)
- if("wire")
- if(ishuman(user) && Adjacent(user))
- var/mob/living/carbon/human/H = user
- var/obj/item/device/integrated_electronics/wirer/wirer = null
- if(istype(H.r_hand, /obj/item/device/integrated_electronics/wirer))
- wirer = H.r_hand
- else if(istype(H.l_hand, /obj/item/device/integrated_electronics/wirer))
- wirer = H.l_hand
+ if(href_list["wire"])
+ if(ishuman(user) && Adjacent(user))
+ var/mob/living/carbon/human/H = user
+ var/obj/item/device/integrated_electronics/wirer/wirer = null
+ if(istype(H.r_hand, /obj/item/device/integrated_electronics/wirer))
+ wirer = H.r_hand
+ else if(istype(H.l_hand, /obj/item/device/integrated_electronics/wirer))
+ wirer = H.l_hand
- if(wirer && pin)
- wirer.wire(pin, user)
- else
- user << "You can't do a whole lot without tools."
+ if(wirer && pin)
+ wirer.wire(pin, user)
+ else
+ user << "You can't do a whole lot without tools."
- //updateDialog()
- world << "[src] received Topic([href], [href_list]) call from [user]."
- world << "href_list contained [english_list(href_list)]."
- interact(user)
+ if(href_list["examine"])
+ examine(user)
+
+ if(href_list["rename"])
+ rename_component(user)
+
+ interact(user) // To refresh the UI.
/datum/integrated_io
var/name = "input/output"
var/obj/item/integrated_circuit/holder = null
var/data = null
-// var/datum/integrated_io/linked = null
var/list/linked = list()
var/io_type = DATA_CHANNEL
@@ -264,45 +264,6 @@
holder = null
..()
-/datum/integrated_io/Topic(href, href_list[])
- if(..())
- return 1
- var/user = locate(href_list["user"]) in mob_list
- switch(href_list["action"])
- // if("view")
- // var/HTML = "[src.name]"
- // HTML += "Parent: [holder]"
- // HTML += "Pin Type: [io_type]"
- // HTML += "Linked Pins:
"
- // for(var/datum/integrated_io/io in src.linked)
- // HTML += "[io.name] [io.display_data()] @ [io.holder]
"
- // HTML += "\[Wire This\]"
- //
- // HTML += ""
- // user << browse(HTML, "window=pin-\ref[src];size=400x400;border=1;can_resize=1;can_close=1;can_minimize=1")
-
- if("examine_holder")
- holder.examine(user)
-
- if("wire")
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- var/obj/item/device/integrated_electronics/wirer/wirer = null
- if(istype(H.r_hand, /obj/item/device/integrated_electronics/wirer))
- wirer = H.r_hand
- else if(istype(H.l_hand, /obj/item/device/integrated_electronics/wirer))
- wirer = H.l_hand
-
- if(wirer)
- wirer.wire(src, user)
-
-
-
- else
- user << "You can't do a whole lot without tools."
- //updateDialog()
- //world << "[src] inside [src.holder] was clicked by [user]."
-
/datum/integrated_io/proc/display_data()
if(!data)
return "(null)" // Empty data means nothing to show.
@@ -381,8 +342,10 @@
I.push_data()
/obj/item/integrated_circuit/proc/work()
+ if(last_used + 2 SECONDS > world.time) // All intergrated circuits have an internal cooldown of two seconds to protect from spam.
+ return 0
last_used = world.time
- return
+ return 1
/obj/item/integrated_circuit/proc/disconnect_all()
for(var/datum/integrated_io/input/I in inputs)
diff --git a/code/modules/integrated_electronics/_limits.dm b/code/modules/integrated_electronics/_limits.dm
deleted file mode 100644
index 6e706bbaa1b..00000000000
--- a/code/modules/integrated_electronics/_limits.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-#define MAX_NUMBER_MEMORY 10000
-#define MIN_NUMBER_MEMORY -10000
-#define MAX_STRING_MEMORY_LENGTH 20
-#define MAX_STRING_CONCATINATOR_LENGTH 250
-#define MIN_PULSER_TICK 5 SECONDS
-#define DEFAULT_PART_COOLDOWN 3 SECONDS
\ No newline at end of file
diff --git a/code/modules/integrated_electronics/arithmetic.dm b/code/modules/integrated_electronics/arithmetic.dm
index 4b7c627a7b7..5f5a4f1d2e6 100644
--- a/code/modules/integrated_electronics/arithmetic.dm
+++ b/code/modules/integrated_electronics/arithmetic.dm
@@ -29,16 +29,16 @@
icon_state = "addition"
/obj/item/integrated_circuit/arithmetic/addition/work()
- var/result = 0
- for(var/datum/integrated_io/input/I in inputs)
- I.pull_data()
- if(isnum(I.data))
- result = result + I.data
+ if(..())
+ var/result = 0
+ for(var/datum/integrated_io/input/I in inputs)
+ I.pull_data()
+ if(isnum(I.data))
+ result = result + I.data
- for(var/datum/integrated_io/output/O in outputs)
- O.data = result
- O.push_data()
- ..()
+ for(var/datum/integrated_io/output/O in outputs)
+ O.data = result
+ O.push_data()
// -Subtracting- //
@@ -48,16 +48,16 @@
icon_state = "subtraction"
/obj/item/integrated_circuit/arithmetic/subtraction/work()
- var/result = 0
- for(var/datum/integrated_io/input/I in inputs)
- I.pull_data()
- if(isnum(I.data))
- result = result - I.data
+ if(..())
+ var/result = 0
+ for(var/datum/integrated_io/input/I in inputs)
+ I.pull_data()
+ if(isnum(I.data))
+ result = result - I.data
- for(var/datum/integrated_io/output/O in outputs)
- O.data = result
- O.push_data()
- ..()
+ for(var/datum/integrated_io/output/O in outputs)
+ O.data = result
+ O.push_data()
// *Multiply* //
@@ -67,16 +67,16 @@
icon_state = "multiplication"
/obj/item/integrated_circuit/arithmetic/subtraction/work()
- var/result = 0
- for(var/datum/integrated_io/input/I in inputs)
- I.pull_data()
- if(isnum(I.data))
- result = result * I.data
+ if(..())
+ var/result = 0
+ for(var/datum/integrated_io/input/I in inputs)
+ I.pull_data()
+ if(isnum(I.data))
+ result = result * I.data
- for(var/datum/integrated_io/output/O in outputs)
- O.data = result
- O.push_data()
- ..()
+ for(var/datum/integrated_io/output/O in outputs)
+ O.data = result
+ O.push_data()
// /Division/ //
@@ -86,16 +86,16 @@
icon_state = "division"
/obj/item/integrated_circuit/arithmetic/division/work()
- var/result = 0
- for(var/datum/integrated_io/input/I in inputs)
- I.pull_data()
- if(isnum(I.data) && I.data != 0) //No runtimes here.
- result = result / I.data
+ if(..())
+ var/result = 0
+ for(var/datum/integrated_io/input/I in inputs)
+ I.pull_data()
+ if(isnum(I.data) && I.data != 0) //No runtimes here.
+ result = result / I.data
- for(var/datum/integrated_io/output/O in outputs)
- O.data = result
- O.push_data()
- ..()
+ for(var/datum/integrated_io/output/O in outputs)
+ O.data = result
+ O.push_data()
// Absolute //
@@ -107,16 +107,16 @@
number_of_outputs = 1
/obj/item/integrated_circuit/arithmetic/absolute/work()
- var/result = 0
- for(var/datum/integrated_io/input/I in inputs)
- I.pull_data()
- if(isnum(I.data) && I.data != 0)
- result = abs(result)
+ if(..())
+ var/result = 0
+ for(var/datum/integrated_io/input/I in inputs)
+ I.pull_data()
+ if(isnum(I.data) && I.data != 0)
+ result = abs(result)
- for(var/datum/integrated_io/output/O in outputs)
- O.data = result
- O.push_data()
- ..()
+ for(var/datum/integrated_io/output/O in outputs)
+ O.data = result
+ O.push_data()
// Averaging //
@@ -126,21 +126,21 @@
icon_state = "average"
/obj/item/integrated_circuit/arithmetic/average/work()
- var/result = 0
- var/inputs_used = 0
- for(var/datum/integrated_io/input/I in inputs)
- I.pull_data()
- if(isnum(I.data))
- inputs_used++
- result = result + I.data
+ if(..())
+ var/result = 0
+ var/inputs_used = 0
+ for(var/datum/integrated_io/input/I in inputs)
+ I.pull_data()
+ if(isnum(I.data))
+ inputs_used++
+ result = result + I.data
- if(inputs_used)
- result = result / inputs_used
+ if(inputs_used)
+ result = result / inputs_used
- for(var/datum/integrated_io/output/O in outputs)
- O.data = result
- O.push_data()
- ..()
+ for(var/datum/integrated_io/output/O in outputs)
+ O.data = result
+ O.push_data()
// Pi, because why the hell not? //
/obj/item/integrated_circuit/arithmetic/pi
@@ -151,7 +151,7 @@
number_of_outputs = 1
/obj/item/integrated_circuit/arithmetic/pi/work()
- var/datum/integrated_io/output/O = outputs[1]
- O.data = 3.14159
- O.push_data()
- ..()
\ No newline at end of file
+ if(..())
+ var/datum/integrated_io/output/O = outputs[1]
+ O.data = 3.14159
+ O.push_data()
\ No newline at end of file
diff --git a/code/modules/integrated_electronics/assemblies.dm b/code/modules/integrated_electronics/assemblies.dm
index 92faa84750f..97690b977f8 100644
--- a/code/modules/integrated_electronics/assemblies.dm
+++ b/code/modules/integrated_electronics/assemblies.dm
@@ -9,13 +9,13 @@
var/opened = 0
/obj/item/device/electronic_assembly/medium
- name = "electronic setup"
+ name = "electronic mechanism"
w_class = 3
max_components = 20
max_complexity = 50
/obj/item/device/electronic_assembly/large
- name = "electronic device"
+ name = "electronic machine"
w_class = 4
max_components = 30
max_complexity = 60
@@ -40,7 +40,7 @@
if(!opened)
for(var/obj/item/integrated_circuit/output/screen/S in contents)
if(S.stuff_to_display)
- user << "There's a little screen which displays '[S.stuff_to_display]'."
+ user << "There's a little screen labeled '[S.name]', which displays '[S.stuff_to_display]'."
else
var/obj/item/integrated_circuit/IC = input(user, "Which circuit do you want to examine?", "Examination") as null|anything in contents
if(IC)
@@ -86,6 +86,14 @@
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
opened = !opened
user << "You [opened ? "opened" : "closed"] \the [src]."
+ if(istype(I, /obj/item/device/integrated_electronics/wirer))
+ if(opened)
+ var/obj/item/integrated_circuit/IC = input(user, "Which circuit do you want to examine?", "Examination") as null|anything in contents
+ if(IC)
+ IC.examine(user)
+ else
+ user << "\The [src] isn't opened, so you can't fiddle with the internal components. \
+ Try using a crowbar."
/obj/item/device/electronic_assembly/attack_self(mob/user)
var/list/available_inputs = list()
diff --git a/code/modules/integrated_electronics/converters.dm b/code/modules/integrated_electronics/converters.dm
index c32197922d4..0bd21664195 100644
--- a/code/modules/integrated_electronics/converters.dm
+++ b/code/modules/integrated_electronics/converters.dm
@@ -20,33 +20,31 @@
icon_state = "addition"
/obj/item/integrated_circuit/converter/num2text/work()
- var/result = null
- var/datum/integrated_io/incoming = inputs[1]
- var/datum/integrated_io/outgoing = outputs[1]
- if(incoming.data && isnum(incoming.data))
- result = num2text(incoming.data)
+ if(..())
+ var/result = null
+ var/datum/integrated_io/incoming = inputs[1]
+ var/datum/integrated_io/outgoing = outputs[1]
+ if(incoming.data && isnum(incoming.data))
+ result = num2text(incoming.data)
- outgoing.data = result
- outgoing.push_data()
-
- ..()
+ outgoing.data = result
+ outgoing.push_data()
/obj/item/integrated_circuit/converter/text2num
- name = "number to string"
+ name = "string to number"
desc = "This circuit can convert a string variable into a number."
icon_state = "addition"
/obj/item/integrated_circuit/converter/text2num/work()
- var/result = null
- var/datum/integrated_io/incoming = inputs[1]
- var/datum/integrated_io/outgoing = outputs[1]
- if(incoming.data && istext(incoming.data))
- result = text2num(incoming.data)
+ if(..())
+ var/result = null
+ var/datum/integrated_io/incoming = inputs[1]
+ var/datum/integrated_io/outgoing = outputs[1]
+ if(incoming.data && istext(incoming.data))
+ result = text2num(incoming.data)
- outgoing.data = result
- outgoing.push_data()
-
- ..()
+ outgoing.data = result
+ outgoing.push_data()
/obj/item/integrated_circuit/converter/ref2text
name = "reference to string"
@@ -54,17 +52,16 @@
icon_state = "addition"
/obj/item/integrated_circuit/converter/ref2text/work()
- var/result = null
- var/datum/integrated_io/incoming = inputs[1]
- var/datum/integrated_io/outgoing = outputs[1]
- if(incoming.data && istype(incoming.data, /atom/))
- var/atom/A = incoming.data
- result = A.name
+ if(..())
+ var/result = null
+ var/datum/integrated_io/incoming = inputs[1]
+ var/datum/integrated_io/outgoing = outputs[1]
+ if(incoming.data && istype(incoming.data, /atom/))
+ var/atom/A = incoming.data
+ result = A.name
- outgoing.data = result
- outgoing.push_data()
-
- ..()
+ outgoing.data = result
+ outgoing.push_data()
/obj/item/integrated_circuit/converter/lowercase
name = "lowercase string converter"
@@ -72,16 +69,15 @@
icon_state = "addition"
/obj/item/integrated_circuit/converter/lowercase/work()
- var/result = null
- var/datum/integrated_io/incoming = inputs[1]
- var/datum/integrated_io/outgoing = outputs[1]
- if(incoming.data && istext(incoming.data))
- result = lowertext(incoming.data)
+ if(..())
+ var/result = null
+ var/datum/integrated_io/incoming = inputs[1]
+ var/datum/integrated_io/outgoing = outputs[1]
+ if(incoming.data && istext(incoming.data))
+ result = lowertext(incoming.data)
- outgoing.data = result
- outgoing.push_data()
-
- ..()
+ outgoing.data = result
+ outgoing.push_data()
/obj/item/integrated_circuit/converter/uppercase
name = "uppercase string converter"
@@ -89,13 +85,12 @@
icon_state = "addition"
/obj/item/integrated_circuit/converter/uppercase/work()
- var/result = null
- var/datum/integrated_io/incoming = inputs[1]
- var/datum/integrated_io/outgoing = outputs[1]
- if(incoming.data && istext(incoming.data))
- result = uppertext(incoming.data)
+ if(..())
+ var/result = null
+ var/datum/integrated_io/incoming = inputs[1]
+ var/datum/integrated_io/outgoing = outputs[1]
+ if(incoming.data && istext(incoming.data))
+ result = uppertext(incoming.data)
- outgoing.data = result
- outgoing.push_data()
-
- ..()
\ No newline at end of file
+ outgoing.data = result
+ outgoing.push_data()
\ No newline at end of file
diff --git a/code/modules/integrated_electronics/coordinate.dm b/code/modules/integrated_electronics/coordinate.dm
index 89fd592defd..04409907ac8 100644
--- a/code/modules/integrated_electronics/coordinate.dm
+++ b/code/modules/integrated_electronics/coordinate.dm
@@ -17,21 +17,21 @@
)
/obj/item/integrated_circuit/gps/work()
- var/turf/T = get_turf(src)
- var/datum/integrated_io/result_x = outputs[1]
- var/datum/integrated_io/result_y = outputs[2]
+ if(..())
+ var/turf/T = get_turf(src)
+ var/datum/integrated_io/result_x = outputs[1]
+ var/datum/integrated_io/result_y = outputs[2]
- result_x.data = null
- result_y.data = null
- if(!T)
- return
+ result_x.data = null
+ result_y.data = null
+ if(!T)
+ return
- result_x.data = T.x
- result_y.data = T.y
+ result_x.data = T.x
+ result_y.data = T.y
- for(var/datum/integrated_io/output/O in outputs)
- O.push_data()
- ..()
+ for(var/datum/integrated_io/output/O in outputs)
+ O.push_data()
/obj/item/integrated_circuit/abs_to_rel_coords
name = "abs to rel coordinate converter"
diff --git a/code/modules/integrated_electronics/data_transfer.dm b/code/modules/integrated_electronics/data_transfer.dm
index 9cdf354e76e..12380e9ccac 100644
--- a/code/modules/integrated_electronics/data_transfer.dm
+++ b/code/modules/integrated_electronics/data_transfer.dm
@@ -34,9 +34,10 @@
number_of_outputs = 8
/obj/item/integrated_circuit/transfer/splitter/work()
- var/datum/integrated_io/I = inputs[1]
- for(var/datum/integrated_io/output/O in outputs)
- O.data = I.data
+ if(..())
+ var/datum/integrated_io/I = inputs[1]
+ for(var/datum/integrated_io/output/O in outputs)
+ O.data = I.data
/obj/item/integrated_circuit/transfer/activator_splitter
name = "activator splitter"
@@ -57,12 +58,13 @@
)
/obj/item/integrated_circuit/transfer/activator_splitter/work()
- for(var/datum/integrated_io/activate/A in outputs)
- if(A == activators[1])
- continue
- if(A.linked.len)
- for(var/datum/integrated_io/activate/target in A.linked)
- target.holder.work()
+ if(..())
+ for(var/datum/integrated_io/activate/A in outputs)
+ if(A == activators[1])
+ continue
+ if(A.linked.len)
+ for(var/datum/integrated_io/activate/target in A.linked)
+ target.holder.work()
/obj/item/integrated_circuit/transfer/activator_splitter/medium
name = "four activator splitter"
diff --git a/code/modules/integrated_electronics/input_output.dm b/code/modules/integrated_electronics/input_output.dm
index 54e1165735c..8f9c2cac040 100644
--- a/code/modules/integrated_electronics/input_output.dm
+++ b/code/modules/integrated_electronics/input_output.dm
@@ -45,6 +45,31 @@
if(A.linked)
A.holder.work()
+/obj/item/integrated_circuit/input/textpad
+ name = "text pad"
+ desc = "This small text pad allows someone to input a string into the system."
+ icon_state = "numberpad"
+ number_of_inputs = 0
+ number_of_outputs = 1
+ number_of_activators = 1
+ complexity = 2
+ output_names = list(
+ "string entered"
+ )
+ activator_names = list(
+ "on entered"
+ )
+
+/obj/item/integrated_circuit/input/textpad/ask_for_input(mob/user)
+ var/new_input = input(user, "Enter some words, please.","Number pad") as text
+ if(new_input && istext(new_input))
+ var/datum/integrated_io/O = outputs[1]
+ O.data = new_input
+ O.push_data()
+ var/datum/integrated_io/A = activators[1]
+ if(A.linked)
+ A.holder.work()
+
/obj/item/integrated_circuit/output/screen
name = "screen"
desc = "This small screen can display a single piece of data, when the machine is examined closely."
diff --git a/code/modules/integrated_electronics/logic.dm b/code/modules/integrated_electronics/logic.dm
index 4a5d65c5f99..4d123c61d09 100644
--- a/code/modules/integrated_electronics/logic.dm
+++ b/code/modules/integrated_electronics/logic.dm
@@ -23,17 +23,17 @@
icon_state = "equal"
/obj/item/integrated_circuit/logic/equals/work()
- ..()
- var/datum/integrated_io/A = inputs[1]
- var/datum/integrated_io/B = inputs[2]
- var/datum/integrated_io/O = outputs[1]
- var/datum/integrated_io/P = activators[2]
- if(A.data == B.data)
- O.data = 1
- O.push_data()
- P.push_data()
- else
- O.data = 0
+ if(..())
+ var/datum/integrated_io/A = inputs[1]
+ var/datum/integrated_io/B = inputs[2]
+ var/datum/integrated_io/O = outputs[1]
+ var/datum/integrated_io/P = activators[2]
+ if(A.data == B.data)
+ O.data = 1
+ O.push_data()
+ P.push_data()
+ else
+ O.data = 0
/obj/item/integrated_circuit/logic/not
name = "not gate"
@@ -48,14 +48,14 @@
/obj/item/integrated_circuit/logic/not/work()
- ..()
- var/datum/integrated_io/A = inputs[1]
- var/datum/integrated_io/O = outputs[1]
- if(A.data)
- O.data = !A.data
- O.push_data()
- else
- O.data = 0
+ if(..())
+ var/datum/integrated_io/A = inputs[1]
+ var/datum/integrated_io/O = outputs[1]
+ if(A.data)
+ O.data = !A.data
+ O.push_data()
+ else
+ O.data = 0
/obj/item/integrated_circuit/logic/and
name = "and gate"
@@ -63,18 +63,18 @@
icon_state = "and"
/obj/item/integrated_circuit/logic/and/work()
- ..()
- var/datum/integrated_io/A = inputs[1]
- var/datum/integrated_io/B = inputs[2]
- var/datum/integrated_io/O = outputs[1]
- var/datum/integrated_io/P = activators[2]
- if(A.data && B.data)
- O.data = 1
- O.push_data()
- A.push_data()
- P.push_data()
- else
- O.data = 0
+ if(..())
+ var/datum/integrated_io/A = inputs[1]
+ var/datum/integrated_io/B = inputs[2]
+ var/datum/integrated_io/O = outputs[1]
+ var/datum/integrated_io/P = activators[2]
+ if(A.data && B.data)
+ O.data = 1
+ O.push_data()
+ A.push_data()
+ P.push_data()
+ else
+ O.data = 0
/obj/item/integrated_circuit/logic/or
name = "or gate"
@@ -82,18 +82,18 @@
icon_state = "or"
/obj/item/integrated_circuit/logic/or/work()
- ..()
- var/datum/integrated_io/A = inputs[1]
- var/datum/integrated_io/B = inputs[2]
- var/datum/integrated_io/O = outputs[1]
- var/datum/integrated_io/P = activators[2]
- if(A.data || B.data)
- O.data = 1
- O.push_data()
- A.push_data()
- P.push_data()
- else
- O.data = 0
+ if(..())
+ var/datum/integrated_io/A = inputs[1]
+ var/datum/integrated_io/B = inputs[2]
+ var/datum/integrated_io/O = outputs[1]
+ var/datum/integrated_io/P = activators[2]
+ if(A.data || B.data)
+ O.data = 1
+ O.push_data()
+ A.push_data()
+ P.push_data()
+ else
+ O.data = 0
/obj/item/integrated_circuit/logic/less_than
name = "less than gate"
@@ -101,18 +101,18 @@
icon_state = "less_than"
/obj/item/integrated_circuit/logic/less_than/work()
- ..()
- var/datum/integrated_io/A = inputs[1]
- var/datum/integrated_io/B = inputs[2]
- var/datum/integrated_io/O = outputs[1]
- var/datum/integrated_io/P = activators[2]
- if(A.data < B.data)
- O.data = 1
- O.push_data()
- A.push_data()
- P.push_data()
- else
- O.data = 0
+ if(..())
+ var/datum/integrated_io/A = inputs[1]
+ var/datum/integrated_io/B = inputs[2]
+ var/datum/integrated_io/O = outputs[1]
+ var/datum/integrated_io/P = activators[2]
+ if(A.data < B.data)
+ O.data = 1
+ O.push_data()
+ A.push_data()
+ P.push_data()
+ else
+ O.data = 0
/obj/item/integrated_circuit/logic/less_than_or_equal
name = "less than or equal gate"
@@ -120,18 +120,18 @@
icon_state = "less_than_or_equal"
/obj/item/integrated_circuit/logic/less_than_or_equal/work()
- ..()
- var/datum/integrated_io/A = inputs[1]
- var/datum/integrated_io/B = inputs[2]
- var/datum/integrated_io/O = outputs[1]
- var/datum/integrated_io/P = activators[2]
- if(A.data <= B.data)
- O.data = 1
- O.push_data()
- A.push_data()
- P.push_data()
- else
- O.data = 0
+ if(..())
+ var/datum/integrated_io/A = inputs[1]
+ var/datum/integrated_io/B = inputs[2]
+ var/datum/integrated_io/O = outputs[1]
+ var/datum/integrated_io/P = activators[2]
+ if(A.data <= B.data)
+ O.data = 1
+ O.push_data()
+ A.push_data()
+ P.push_data()
+ else
+ O.data = 0
/obj/item/integrated_circuit/logic/greater_than
name = "greater than gate"
@@ -139,18 +139,18 @@
icon_state = "greater_than"
/obj/item/integrated_circuit/logic/greater_than/work()
- ..()
- var/datum/integrated_io/A = inputs[1]
- var/datum/integrated_io/B = inputs[2]
- var/datum/integrated_io/O = outputs[1]
- var/datum/integrated_io/P = activators[2]
- if(A.data > B.data)
- O.data = 1
- O.push_data()
- A.push_data()
- P.push_data()
- else
- O.data = 0
+ if(..())
+ var/datum/integrated_io/A = inputs[1]
+ var/datum/integrated_io/B = inputs[2]
+ var/datum/integrated_io/O = outputs[1]
+ var/datum/integrated_io/P = activators[2]
+ if(A.data > B.data)
+ O.data = 1
+ O.push_data()
+ A.push_data()
+ P.push_data()
+ else
+ O.data = 0
/obj/item/integrated_circuit/logic/greater_than_or_equal
name = "greater_than or equal gate"
@@ -158,15 +158,15 @@
icon_state = "greater_than_or_equal"
/obj/item/integrated_circuit/logic/greater_than_or_equal/work()
- ..()
- var/datum/integrated_io/A = inputs[1]
- var/datum/integrated_io/B = inputs[2]
- var/datum/integrated_io/O = outputs[1]
- var/datum/integrated_io/P = activators[2]
- if(A.data >= B.data)
- O.data = 1
- O.push_data()
- A.push_data()
- P.push_data()
- else
- O.data = 0
\ No newline at end of file
+ if(..())
+ var/datum/integrated_io/A = inputs[1]
+ var/datum/integrated_io/B = inputs[2]
+ var/datum/integrated_io/O = outputs[1]
+ var/datum/integrated_io/P = activators[2]
+ if(A.data >= B.data)
+ O.data = 1
+ O.push_data()
+ A.push_data()
+ P.push_data()
+ else
+ O.data = 0
\ No newline at end of file
diff --git a/code/modules/integrated_electronics/manipulation.dm b/code/modules/integrated_electronics/manipulation.dm
index 5724c79ad8f..422f793f5de 100644
--- a/code/modules/integrated_electronics/manipulation.dm
+++ b/code/modules/integrated_electronics/manipulation.dm
@@ -1,4 +1,4 @@
-/obj/item/integrated_circuit/weapon_firing
+/obj/item/integrated_circuit/manipulation/weapon_firing
name = "weapon firing mechanism"
desc = "This somewhat complicated system allows one to slot in a gun, direct it towards a position, and remotely fire it."
extended_desc = "The firing mechanism can slot in most ranged weapons, ballistic and energy. \
@@ -18,11 +18,11 @@
)
var/obj/item/weapon/gun/installed_gun = null
-/obj/item/integrated_circuit/weapon_firing/Destroy()
+/obj/item/integrated_circuit/manipulation/weapon_firing/Destroy()
qdel(installed_gun)
..()
-/obj/item/integrated_circuit/weapon_firing/attackby(var/obj/O, var/mob/user)
+/obj/item/integrated_circuit/manipulation/weapon_firing/attackby(var/obj/O, var/mob/user)
if(istype(O, /obj/item/weapon/gun))
var/obj/item/weapon/gun/gun = O
if(installed_gun)
@@ -36,7 +36,7 @@
else
..()
-/obj/item/integrated_circuit/weapon_firing/attack_self(var/mob/user)
+/obj/item/integrated_circuit/manipulation/weapon_firing/attack_self(var/mob/user)
if(installed_gun)
installed_gun.forceMove(get_turf(src))
user << "You slide \the [installed_gun] out of the firing mechanism."
@@ -45,7 +45,7 @@
else
user << "There's no weapon to remove from the mechanism."
-/obj/item/integrated_circuit/weapon_firing/work()
+/obj/item/integrated_circuit/manipulation/weapon_firing/work()
if(!installed_gun)
return
@@ -84,4 +84,33 @@
if(!T)
return
- installed_gun.Fire_userless(T)
\ No newline at end of file
+ installed_gun.Fire_userless(T)
+
+/obj/item/integrated_circuit/manipulation/smoke
+ name = "smoke generator"
+ desc = "Unlike most electronics, creating smoke is completely intentional."
+ extended_desc = "This smoke generator creates clouds of smoke on command. It can also hold liquids inside, which will go \
+ into the smoke clouds when activated."
+ flags = OPENCONTAINER
+ complexity = 20
+ number_of_inputs = 0
+ number_of_outputs = 0
+ number_of_activators = 1
+ input_names = list()
+ activator_names = list(
+ "create smoke"
+ )
+
+/obj/item/integrated_circuit/manipulation/smoke/New()
+ ..()
+ create_reagents(100)
+
+/obj/item/integrated_circuit/manipulation/smoke/work()
+ if(..())
+ playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
+ var/datum/effect/effect/system/smoke_spread/chem/smoke_system = new()
+ smoke_system.set_up(reagents, 10, 0, get_turf(src))
+ spawn(0)
+ for(var/i = 1 to 8)
+ smoke_system.start()
+ reagents.clear_reagents()
diff --git a/code/modules/integrated_electronics/memory.dm b/code/modules/integrated_electronics/memory.dm
index b7929f95e15..3305cf0a939 100644
--- a/code/modules/integrated_electronics/memory.dm
+++ b/code/modules/integrated_electronics/memory.dm
@@ -18,11 +18,12 @@
user << "\The [src] has [O.data ? "'O.data'" : "nothing"] saved to address [i]."
/obj/item/integrated_circuit/memory/work()
- var/i
- for(i = 1, i <= inputs.len, i++)
- var/datum/integrated_io/I = inputs[i]
- var/datum/integrated_io/O = outputs[i]
- O.data = I.data
+ if(..())
+ var/i
+ for(i = 1, i <= inputs.len, i++)
+ var/datum/integrated_io/I = inputs[i]
+ var/datum/integrated_io/O = outputs[i]
+ O.data = I.data
/obj/item/integrated_circuit/memory/medium
name = "memory circuit"
@@ -61,8 +62,9 @@
)
/obj/item/integrated_circuit/memory/constant/work()
- var/datum/integrated_io/O = outputs[1]
- O.push_data()
+ if(..())
+ var/datum/integrated_io/O = outputs[1]
+ O.push_data()
/obj/item/integrated_circuit/memory/constant/attack_hand(mob/user)
var/datum/integrated_io/O = outputs[1]
diff --git a/code/modules/integrated_electronics/power.dm b/code/modules/integrated_electronics/power.dm
deleted file mode 100644
index 6760e8af533..00000000000
--- a/code/modules/integrated_electronics/power.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/obj/item/integrated_circuit/power
- var/charge = 0
- var/max_charge = 0
- var/power_generated = 0
-
-/obj/item/integrated_circuit/power/battery
- name = "micro powercell"
- desc = "An extremely small powercell, often used to power basic electronics, as a powersource or to use as a buffer."
- charge = 30
- max_charge = 30
-
-/obj/item/integrated_circuit/power/solar
- name = "micro photovoltaic cell"
- desc = "A tiny solar cell, often used for small electornics, such as calculators."
- power_generated = 5
-//photovoltaic
\ No newline at end of file
diff --git a/code/modules/integrated_electronics/time.dm b/code/modules/integrated_electronics/time.dm
index f076506222c..99c8a42436e 100644
--- a/code/modules/integrated_electronics/time.dm
+++ b/code/modules/integrated_electronics/time.dm
@@ -17,10 +17,10 @@
)
/obj/item/integrated_circuit/time/delay/work()
- ..()
- var/datum/integrated_io/out_pulse = activators[2]
- sleep(delay)
- out_pulse.push_data()
+ if(..())
+ var/datum/integrated_io/out_pulse = activators[2]
+ sleep(delay)
+ out_pulse.push_data()
/obj/item/integrated_circuit/time/delay/five_sec
name = "five-sec delay circuit"
diff --git a/code/modules/integrated_electronics/tools.dm b/code/modules/integrated_electronics/tools.dm
index 79ba8b95a2a..67005c85e6b 100644
--- a/code/modules/integrated_electronics/tools.dm
+++ b/code/modules/integrated_electronics/tools.dm
@@ -1,61 +1,3 @@
-/obj/item/device/integrated_electronics/debugger
- name = "debugger"
- desc = "This can be used to learn about, test, or find issues with your circuit designs."
- icon_state = "multitool"
- flags = CONDUCT
- w_class = 2
- var/datum/integrated_io/probe
- var/mode = "string"
- var/options = list("string", "number", "reference", "type", "null")
-
-/obj/item/device/integrated_electronics/debugger/New()
- ..()
- probe = new(src)
-
-/obj/item/device/integrated_electronics/debugger/attack_self(mob/user)
- var/temporary_data = null
- var/choice = input(user, "Please select a data type to use as input.", "data type", "string") as null|anything in options
- if(choice)
- switch(choice)
- if("string")
- temporary_data = sanitize(input(user, "Please write something in text.", "string input") as null|text)
- if(istext(temporary_data))
- probe.data = temporary_data
- if("number")
- temporary_data = sanitize(input(user, "Please give a number.", "number input") as null|num)
- if(isnum(temporary_data))
- probe.data = temporary_data
- if("reference")
- return
- if("type")
- return
- if("null")
- probe.data = null
-
-/obj/item/device/integrated_electronics/proc/select_io(mob/user, var/obj/target)
- var/obj/item/integrated_circuit/selected_circuit = null
- if(!istype(/obj/item/integrated_circuit, target))
- var/list/possible_circuits = list()
- for(var/obj/item/integrated_circuit/IC in target)
- possible_circuits.Add(IC)
- if(possible_circuits.len)
- selected_circuit = input(user, "Choose the circuit you want to work on.", "Circuit Selection") as null|anything in possible_circuits
- else if(istype(/obj/item/integrated_circuit, target))
- selected_circuit = target
-
- if(selected_circuit)
- var/list/possible_io = list()
- for(var/datum/integrated_io/I in selected_circuit.inputs)
- possible_io.Add(I)
- for(var/datum/integrated_io/O in selected_circuit.outputs)
- possible_io.Add(O)
- for(var/datum/integrated_io/A in selected_circuit.activators)
- possible_io.Add(A)
- if(possible_io.len)
- var/choice = input(user, "Choose the data channel you wish to select.", "Data Selection Selection") as null|anything in possible_io
- if(choice)
- return choice
-
#define WIRE "wire"
#define WIRING "wiring"
#define UNWIRE "unwire"
@@ -67,7 +9,8 @@
desc = "It's a small wiring tool, with a wire roll, electric soldering iron, wire cutter, and more in one package. \
The wires used are generally useful for small electronics, such as circuitboards and breadboards, as opposed to larger wires \
used for power or data transmission."
- icon_state = "multitool"
+ icon = 'icons/obj/hacktool.dmi'
+ icon_state = "hacktool-g"
flags = CONDUCT
w_class = 2
var/datum/integrated_io/selected_io = null
@@ -96,6 +39,7 @@
mode = WIRE
//io.updateDialog()
//selected_io.updateDialog()
+ selected_io.holder.interact(user) // This is to update the UI.
selected_io = null
else if(mode == UNWIRE)
@@ -120,6 +64,7 @@
\the [io.holder]'s [io.name]."
//io.updateDialog()
//selected_io.updateDialog()
+ selected_io.holder.interact(user) // This is to update the UI.
selected_io = null
mode = UNWIRE
else
@@ -128,79 +73,6 @@
return
return
-/obj/item/device/integrated_electronics/wirer/afterattack(atom/target, mob/user)
- if(isobj(target))
- if(mode == WIRE)
- selected_io = select_io(user, target)
- if(!selected_io)
- return
- user << "You attach a data wire to \the [target]'s [selected_io.name] data channel."
- mode = WIRING
- return
-
- else if(mode == WIRING)
- var/datum/integrated_io/second_io = select_io(user, target)
- if(selected_io == second_io)
- user << "Wiring \the [target]'s [selected_io.name] into itself is rather pointless."
- return
- else if(second_io)
- if(second_io.io_type != selected_io.io_type)
- user << "Those two types of channels are incompatable. The first is a [selected_io.io_type], \
- while the second is a [second_io.io_type]."
- return
-
- selected_io.linked |= second_io
- second_io.linked |= selected_io
-
-// selected_io.linked = second_io
-// second_io.linked = selected_io
- user << "You connect \the [selected_io.holder]'s [selected_io.name] to \the [target]'s [second_io.name]."
- mode = WIRE
- selected_io = null
- else if(mode == UNWIRE)
- selected_io = select_io(user, target)
- if(!selected_io)
- return
- if(!selected_io.linked.len)
- user << "There is nothing connected to \the [selected_io] data channel."
- return
- user << "You prepare to detach a data wire from \the [target]'s [selected_io.name] data channel."
- mode = UNWIRING
- return
-
- else if(mode == UNWIRING)
- var/datum/integrated_io/second_io = select_io(user, target)
- if(selected_io == second_io)
- user << "You can't wire a pin into each other, so unwiring \the [selected_io.holder] from \
- the same pin is rather moot."
- return
- else if(second_io)
- if(selected_io in second_io.linked)
- second_io.linked.Remove(selected_io)
- selected_io.linked.Remove(second_io)
- user << "You disconnect \the [selected_io.holder]'s [selected_io.name] from \
- \the [second_io.holder]'s [second_io.name]."
- else
- user << "\The [selected_io.holder]'s [selected_io.name] and \the [second_io.holder]'s \
- [second_io.name] are not connected."
- return
-/*
- var/datum/integrated_io/third_io = select_io(user, second_io.linked)
- if(third_io && selected_io in third_io.linked)
- third_io.linked.Remove(selected_io)
- selected_io.linked.Remove(second_io)
-*/
- mode = UNWIRE
- return
-/*
- var/datum/integrated_io/target_io = select_io(user, target)
- if(target_io && target_io.linked)
- user << "You disconnect \the [target_io.holder]'s [target_io.name] \
- from \the [target_io.linked.holder]'s [target_io.linked.linked]."
- if(target_io.linked.linked && target_io.linked.linked == target_io)
- target_io.linked.linked = null
- target_io.linked = null
-*/
/obj/item/device/integrated_electronics/wirer/attack_self(mob/user)
switch(mode)
if(WIRE)
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index c0ecdbfc3d5..943dd7a903b 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -1486,6 +1486,352 @@ CIRCUITS BELOW
build_path = /obj/item/weapon/cartridge/captain
sort_string = "VBAAO"
+
+
+/datum/design/item/wirer
+ name = "Custom wirer tool"
+ id = "wirer"
+ req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500)
+ build_path = /obj/item/device/integrated_electronics/wirer
+ sort_string = "VBVAA"
+
+
+
+/datum/design/item/custom_circuit_assembly
+ name = "Small custom assembly"
+ desc = "An customizable assembly for simple, small devices."
+ id = "assembly-small"
+ req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2, TECH_POWER = 2)
+ materials = list(DEFAULT_WALL_MATERIAL = 10000)
+ build_path = /obj/item/device/electronic_assembly
+ sort_string = "VCAAA"
+
+/datum/design/item/custom_circuit_assembly/medium
+ name = "Medium custom assembly"
+ desc = "An customizable assembly suited for more ambitious mechanisms."
+ id = "assembly-medium"
+ req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_POWER = 3)
+ materials = list(DEFAULT_WALL_MATERIAL = 20000)
+ build_path = /obj/item/device/electronic_assembly/medium
+
+/datum/design/item/custom_circuit_assembly/large
+ name = "Large custom assembly"
+ desc = "An customizable assembly for large machines."
+ id = "assembly-large"
+ req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_POWER = 4)
+ materials = list(DEFAULT_WALL_MATERIAL = 40000)
+ build_path = /obj/item/device/electronic_assembly/large
+
+/datum/design/circuit/integrated_circuit
+ req_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
+
+/datum/design/circuit/integrated_circuit/AssembleDesignName()
+ ..()
+ name = "Custom circuitry ([item_name])"
+
+/datum/design/circuit/integrated_circuit/AssembleDesignDesc()
+ if(!desc)
+ desc = "Allows for the construction of \a [name] custom circuit."
+
+/datum/design/circuit/integrated_circuit/arithmetic/AssembleDesignName()
+ ..()
+ name = "Custom circuitry \[Arithmetic\] ([item_name])"
+
+/datum/design/circuit/integrated_circuit/arithmetic/addition
+ id = "cc-addition"
+ build_path = /obj/item/integrated_circuit/arithmetic/addition
+ sort_string = "WAAAA"
+
+/datum/design/circuit/integrated_circuit/arithmetic/subtraction
+ id = "cc-subtraction"
+ build_path = /obj/item/integrated_circuit/arithmetic/subtraction
+ sort_string = "WAAAB"
+
+/datum/design/circuit/integrated_circuit/arithmetic/multiplication
+ id = "cc-multiplication"
+ build_path = /obj/item/integrated_circuit/arithmetic/multiplication
+ sort_string = "WAAAC"
+
+/datum/design/circuit/integrated_circuit/arithmetic/division
+ id = "cc-division"
+ build_path = /obj/item/integrated_circuit/arithmetic/division
+ sort_string = "WAAAD"
+
+/datum/design/circuit/integrated_circuit/arithmetic/absolute
+ id = "cc-absolute"
+ build_path = /obj/item/integrated_circuit/arithmetic/absolute
+ sort_string = "WAAAE"
+
+/datum/design/circuit/integrated_circuit/arithmetic/average
+ id = "cc-average"
+ build_path = /obj/item/integrated_circuit/arithmetic/average
+ sort_string = "WAAAF"
+
+/datum/design/circuit/integrated_circuit/arithmetic/pi
+ id = "cc-pi"
+ build_path = /obj/item/integrated_circuit/arithmetic/pi
+ sort_string = "WAAAG"
+
+
+
+/datum/design/circuit/integrated_circuit/converter/AssembleDesignName()
+ ..()
+ name = "Custom circuitry \[Conversion\] ([item_name])"
+
+/datum/design/circuit/integrated_circuit/converter/num2text
+ id = "cc-num2text"
+ build_path = /obj/item/integrated_circuit/converter/num2text
+ sort_string = "WAABA"
+
+/datum/design/circuit/integrated_circuit/converter/text2num
+ id = "cc-text2num"
+ build_path = /obj/item/integrated_circuit/converter/text2num
+ sort_string = "WAABB"
+
+/datum/design/circuit/integrated_circuit/converter/ref2text
+ id = "cc-ref2text"
+ build_path = /obj/item/integrated_circuit/converter/ref2text
+ sort_string = "WAABC"
+
+/datum/design/circuit/integrated_circuit/converter/lowercase
+ id = "cc-lowercase"
+ build_path = /obj/item/integrated_circuit/converter/lowercase
+ sort_string = "WAABD"
+
+/datum/design/circuit/integrated_circuit/converter/uppercase
+ id = "cc-uppercase"
+ build_path = /obj/item/integrated_circuit/converter/uppercase
+ sort_string = "WAABD"
+
+
+
+/datum/design/circuit/integrated_circuit/coordinate/AssembleDesignName()
+ ..()
+ name = "Custom circuitry \[Coordinate\] ([item_name])"
+
+/datum/design/circuit/integrated_circuit/coordinate/gps
+ id = "cc-gps"
+ build_path = /obj/item/integrated_circuit/gps
+ sort_string = "WAACA"
+
+/datum/design/circuit/integrated_circuit/coordinate/abs_to_rel_coords
+ id = "cc-abs_to_rel_coords"
+ build_path = /obj/item/integrated_circuit/abs_to_rel_coords
+ sort_string = "WAACB"
+
+
+
+/datum/design/circuit/integrated_circuit/transfer/AssembleDesignName()
+ ..()
+ name = "Custom circuitry \[Transfer\] ([item_name])"
+
+/datum/design/circuit/integrated_circuit/transfer/splitter
+ id = "cc-splitter"
+ build_path = /obj/item/integrated_circuit/transfer/splitter
+ sort_string = "WAADA"
+
+/datum/design/circuit/integrated_circuit/transfer/splitter4
+ id = "cc-splitter4"
+ build_path = /obj/item/integrated_circuit/transfer/splitter/medium
+ sort_string = "WAADB"
+
+/datum/design/circuit/integrated_circuit/transfer/splitter8
+ id = "cc-splitter8"
+ build_path = /obj/item/integrated_circuit/transfer/splitter/large
+ sort_string = "WAADC"
+
+/datum/design/circuit/integrated_circuit/transfer/activator_splitter
+ id = "cc-activator_splitter"
+ build_path = /obj/item/integrated_circuit/transfer/activator_splitter
+ sort_string = "WAADD"
+
+/datum/design/circuit/integrated_circuit/transfer/activator_splitter4
+ id = "cc-activator_splitter4"
+ build_path = /obj/item/integrated_circuit/transfer/activator_splitter/medium
+ sort_string = "WAADE"
+
+/datum/design/circuit/integrated_circuit/transfer/activator_splitter8
+ id = "cc-activator_splitter8"
+ build_path = /obj/item/integrated_circuit/transfer/activator_splitter/large
+ sort_string = "WAADF"
+
+
+
+/datum/design/circuit/integrated_circuit/input_output/AssembleDesignName()
+ ..()
+ name = "Custom circuitry \[Input/Output\] ([item_name])"
+
+/datum/design/circuit/integrated_circuit/input_output/button
+ id = "cc-button"
+ build_path = /obj/item/integrated_circuit/input/button
+ sort_string = "WAAEA"
+
+/datum/design/circuit/integrated_circuit/input_output/numberpad
+ id = "cc-numberpad"
+ build_path = /obj/item/integrated_circuit/input/numberpad
+ sort_string = "WAAEB"
+
+/datum/design/circuit/integrated_circuit/input_output/textpad
+ id = "cc-textpad"
+ build_path = /obj/item/integrated_circuit/input/textpad
+ sort_string = "WAAEC"
+
+/datum/design/circuit/integrated_circuit/input_output/screen
+ id = "cc-screen"
+ build_path = /obj/item/integrated_circuit/output/screen
+ sort_string = "WAAED"
+
+
+
+/datum/design/circuit/integrated_circuit/logic/AssembleDesignName()
+ ..()
+ name = "Custom circuitry \[Logic\] ([item_name])"
+
+/datum/design/circuit/integrated_circuit/logic/equals
+ id = "cc-equals"
+ build_path = /obj/item/integrated_circuit/logic/equals
+ sort_string = "WAAFA"
+
+/datum/design/circuit/integrated_circuit/logic/not
+ id = "cc-not"
+ build_path = /obj/item/integrated_circuit/logic/not
+ sort_string = "WAAFB"
+
+/datum/design/circuit/integrated_circuit/logic/and
+ id = "cc-and"
+ build_path = /obj/item/integrated_circuit/logic/and
+ sort_string = "WAAFC"
+
+/datum/design/circuit/integrated_circuit/logic/or
+ id = "cc-or"
+ build_path = /obj/item/integrated_circuit/logic/or
+ sort_string = "WAAFD"
+
+/datum/design/circuit/integrated_circuit/logic/less_than
+ id = "cc-less_than"
+ build_path = /obj/item/integrated_circuit/logic/less_than
+ sort_string = "WAAFE"
+
+/datum/design/circuit/integrated_circuit/logic/less_than_or_equal
+ id = "cc-less_than_or_equal"
+ build_path = /obj/item/integrated_circuit/logic/less_than_or_equal
+ sort_string = "WAAFF"
+
+/datum/design/circuit/integrated_circuit/logic/greater_than
+ id = "cc-greater_than"
+ build_path = /obj/item/integrated_circuit/logic/greater_than
+ sort_string = "WAAFG"
+
+/datum/design/circuit/integrated_circuit/logic/greater_than_or_equal
+ id = "cc-greater_than_or_equal"
+ build_path = /obj/item/integrated_circuit/logic/greater_than_or_equal
+ sort_string = "WAAFH"
+
+
+
+/datum/design/circuit/integrated_circuit/manipulation/AssembleDesignName()
+ ..()
+ name = "Custom circuitry \[Manipulation\] ([item_name])"
+
+/datum/design/circuit/integrated_circuit/manipulation/weapon_firing
+ id = "cc-weapon_firing"
+ build_path = /obj/item/integrated_circuit/manipulation/weapon_firing
+ sort_string = "WAAGA"
+ req_tech = list(TECH_ENGINEERING = 4, TECH_DATA = 4, TECH_COMBAT = 5)
+
+/datum/design/circuit/integrated_circuit/manipulation/weapon_firing
+ id = "cc-smoke"
+ build_path = /obj/item/integrated_circuit/manipulation/smoke
+ sort_string = "WAAGB"
+ req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 4, TECH_BIOMED = 5)
+
+
+
+/datum/design/circuit/integrated_circuit/memory/AssembleDesignName()
+ ..()
+ name = "Custom circuitry \[Memory\] ([item_name])"
+
+/datum/design/circuit/integrated_circuit/memory
+ id = "cc-memory"
+ build_path = /obj/item/integrated_circuit/memory
+ sort_string = "WAAHA"
+
+/datum/design/circuit/integrated_circuit/memory/medium
+ id = "cc-memory4"
+ build_path = /obj/item/integrated_circuit/memory/medium
+ sort_string = "WAAHB"
+
+/datum/design/circuit/integrated_circuit/memory/large
+ id = "cc-memory8"
+ build_path = /obj/item/integrated_circuit/memory/large
+ sort_string = "WAAHC"
+
+/datum/design/circuit/integrated_circuit/memory/huge
+ id = "cc-memory16"
+ build_path = /obj/item/integrated_circuit/memory/huge
+ sort_string = "WAAHD"
+
+/datum/design/circuit/integrated_circuit/memory/constant
+ id = "cc-constant"
+ build_path = /obj/item/integrated_circuit/memory/constant
+ sort_string = "WAAHH"
+
+/datum/design/circuit/integrated_circuit/time/AssembleDesignName()
+ ..()
+ name = "Custom circuitry \[Time\] ([item_name])"
+
+/datum/design/circuit/integrated_circuit/time/delay
+ id = "cc-delay"
+ build_path = /obj/item/integrated_circuit/time/delay
+ sort_string = "WAAIA"
+
+/datum/design/circuit/integrated_circuit/time/delay/five_sec
+ id = "cc-five_sec_delay"
+ build_path = /obj/item/integrated_circuit/time/delay/five_sec
+ sort_string = "WAAIB"
+
+/datum/design/circuit/integrated_circuit/time/delay/one_sec
+ id = "cc-one_sec_delay"
+ build_path = /obj/item/integrated_circuit/time/delay/one_sec
+ sort_string = "WAAIC"
+
+/datum/design/circuit/integrated_circuit/time/delay/half_sec
+ id = "cc-half_sec_delay"
+ build_path = /obj/item/integrated_circuit/time/delay/half_sec
+ sort_string = "WAAID"
+
+/datum/design/circuit/integrated_circuit/time/delay/tenth_sec
+ id = "cc-tenth_sec_delay"
+ build_path = /obj/item/integrated_circuit/time/delay/tenth_sec
+ sort_string = "WAAIF"
+
+/datum/design/circuit/integrated_circuit/time/delay/custom
+ id = "cc-custom_delay"
+ build_path = /obj/item/integrated_circuit/time/delay/custom
+ sort_string = "WAAIG"
+
+/datum/design/circuit/integrated_circuit/time/ticker
+ id = "cc-ticker"
+ build_path = /obj/item/integrated_circuit/time/ticker
+ sort_string = "WAAIH"
+
+/datum/design/circuit/integrated_circuit/time/ticker/slow
+ id = "cc-ticker_slow"
+ build_path = /obj/item/integrated_circuit/time/ticker/slow
+ sort_string = "WAAII"
+
+/datum/design/circuit/integrated_circuit/time/ticker/fast
+ id = "cc-ticker_fast"
+ build_path = /obj/item/integrated_circuit/time/ticker/fast
+ sort_string = "WAAIJ"
+ req_tech = list(TECH_ENGINEERING = 4, TECH_DATA = 4)
+
+/datum/design/circuit/integrated_circuit/time/clock
+ id = "cc-clock"
+ build_path = /obj/item/integrated_circuit/time/clock
+ sort_string = "WAAIK"
+
/* Uncomment if someone makes these buildable
/datum/design/circuit/general_alert
name = "general alert console"
diff --git a/polaris.dme b/polaris.dme
index a66d16b9930..f07fdb8f611 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -546,7 +546,7 @@
#include "code\game\machinery\requests_console.dm"
#include "code\game\machinery\robot_fabricator.dm"
#include "code\game\machinery\seed_extractor.dm"
-#include "code\game\machinery\sleeper.dm"
+#include "code\game\machinery\Sleeper.dm"
#include "code\game\machinery\spaceheater.dm"
#include "code\game\machinery\status_display.dm"
#include "code\game\machinery\status_display_ai.dm"
@@ -1366,7 +1366,6 @@
#include "code\modules\hydroponics\trays\tray_tools.dm"
#include "code\modules\hydroponics\trays\tray_update_icons.dm"
#include "code\modules\integrated_electronics\_defines.dm"
-#include "code\modules\integrated_electronics\_limits.dm"
#include "code\modules\integrated_electronics\arithmetic.dm"
#include "code\modules\integrated_electronics\assemblies.dm"
#include "code\modules\integrated_electronics\converters.dm"