diff --git a/code/modules/integrated_electronics/_defines.dm b/code/modules/integrated_electronics/_defines.dm index c7092c6fc35..97acfd2c981 100644 --- a/code/modules/integrated_electronics/_defines.dm +++ b/code/modules/integrated_electronics/_defines.dm @@ -98,7 +98,7 @@ if(!M.canmove || M.stat || M.restrained()) return - var/input = sanitizeSafe(input("What do you want to name the circuit?", ,""), MAX_NAME_LEN) + var/input = sanitizeSafe(input("What do you want to name the circuit?", "Rename", src.name), MAX_NAME_LEN) if(src && input) M << "The circuit '[src.name]' is now labeled '[input]'." @@ -372,7 +372,7 @@ for(var/datum/integrated_io/input/I in inputs) I.push_data() -/obj/item/integrated_circuit/proc/work() +/obj/item/integrated_circuit/proc/work(var/datum/integrated_io/io) if(last_used + cooldown_per_use > world.time) // All intergrated circuits have an internal cooldown, to protect from spam. return 0 last_used = world.time diff --git a/code/modules/integrated_electronics/arithmetic.dm b/code/modules/integrated_electronics/arithmetic.dm index 5f5a4f1d2e6..3fc60c64f9c 100644 --- a/code/modules/integrated_electronics/arithmetic.dm +++ b/code/modules/integrated_electronics/arithmetic.dm @@ -154,4 +154,30 @@ if(..()) var/datum/integrated_io/output/O = outputs[1] O.data = 3.14159 - O.push_data() \ No newline at end of file + O.push_data() + +// Random // +/obj/item/integrated_circuit/arithmetic/random + name = "random number generator circuit" + desc = "This gives a random (integer) number between values A and B inclusive." + icon_state = "random" + number_of_inputs = 2 + number_of_outputs = 1 + number_of_activators = 1 + input_names = list( + "L", + "H" + ) + +/obj/item/integrated_circuit/arithmetic/random/work() + if(..()) + var/result = 0 + var/datum/integrated_io/L = inputs[1] + var/datum/integrated_io/H = inputs[2] + + if(isnum(L.data) && isnum(H.data)) + result = rand(L.data, H.data) + + for(var/datum/integrated_io/output/O in outputs) + O.data = result + O.push_data() \ No newline at end of file diff --git a/code/modules/integrated_electronics/converters.dm b/code/modules/integrated_electronics/converters.dm index c9797fee45f..7a837abbfa3 100644 --- a/code/modules/integrated_electronics/converters.dm +++ b/code/modules/integrated_electronics/converters.dm @@ -92,5 +92,42 @@ if(incoming.data && istext(incoming.data)) result = uppertext(incoming.data) + outgoing.data = result + outgoing.push_data() + +/obj/item/integrated_circuit/converter/concatenatior + name = "concatenatior" + desc = "This joins many strings together to get one big string." + complexity = 4 + number_of_inputs = 8 + number_of_outputs = 1 + number_of_activators = 1 + input_names = list( + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H" + ) + output_names = list( + "result" + ) + activator_names = list( + "concatenate" + ) + + +/obj/item/integrated_circuit/converter/concatenatior/work() + if(..()) + var/result = null + for(var/datum/integrated_io/input/I in inputs) + I.pull_data() + if(istext(I.data)) + result = result + I.data + + var/datum/integrated_io/outgoing = outputs[1] outgoing.data = result outgoing.push_data() \ No newline at end of file diff --git a/code/modules/integrated_electronics/input_output.dm b/code/modules/integrated_electronics/input_output.dm index 18e75f0a5d6..6a3ef7a065b 100644 --- a/code/modules/integrated_electronics/input_output.dm +++ b/code/modules/integrated_electronics/input_output.dm @@ -307,4 +307,65 @@ /obj/item/integrated_circuit/output/screen/work() var/datum/integrated_io/I = inputs[1] - stuff_to_display = I.data \ No newline at end of file + stuff_to_display = I.data + +/obj/item/integrated_circuit/output/light + name = "light" + desc = "This light can turn on and off on command." + icon_state = "light_adv" +// icon_state = "light" + complexity = 4 + number_of_inputs = 0 + number_of_outputs = 0 + number_of_activators = 1 + activator_names = list( + "toggle light" + ) + var/light_toggled = 0 + var/light_brightness = 3 + var/light_rgb = "#FFFFFF" + +/obj/item/integrated_circuit/output/light/work() + if(..()) + light_toggled = !light_toggled + update_lighting() + +/obj/item/integrated_circuit/output/light/proc/update_lighting() + if(light_toggled) + set_light(l_range = light_brightness, l_power = light_brightness, l_color = light_rgb) + else + set_light(0) + +/obj/item/integrated_circuit/output/light/advanced/update_lighting() + var/datum/integrated_io/R = inputs[1] + var/datum/integrated_io/G = inputs[2] + var/datum/integrated_io/B = inputs[3] + var/datum/integrated_io/brightness = inputs[4] + + if(isnum(R.data) && isnum(G.data) && isnum(B.data) && isnum(brightness.data)) + R.data = Clamp(R.data, 0, 255) + G.data = Clamp(G.data, 0, 255) + B.data = Clamp(B.data, 0, 255) + brightness.data = Clamp(brightness.data, 0, 6) + light_rgb = rgb(R.data, G.data, B.data) + light_brightness = brightness.data + + ..() + +/obj/item/integrated_circuit/output/light/advanced + name = "advanced light" + desc = "This light can turn on and off on command, in any color, and in various brightness levels." + icon_state = "light_adv" + complexity = 8 + number_of_inputs = 4 + number_of_outputs = 0 + number_of_activators = 1 + input_names = list( + "R", + "G", + "B", + "Brightness" + ) + +/obj/item/integrated_circuit/output/light/advanced/on_data_written() + update_lighting() \ No newline at end of file diff --git a/code/modules/integrated_electronics/tools.dm b/code/modules/integrated_electronics/tools.dm index 4ef220c3736..915fe0f17ba 100644 --- a/code/modules/integrated_electronics/tools.dm +++ b/code/modules/integrated_electronics/tools.dm @@ -9,8 +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 = 'icons/obj/hacktool.dmi' - icon_state = "hacktool-g" + icon = 'icons/obj/electronic_assemblies.dmi' + icon_state = "wirer-wire" flags = CONDUCT w_class = 2 var/datum/integrated_io/selected_io = null @@ -19,11 +19,15 @@ /obj/item/device/integrated_electronics/wirer/New() ..() +/obj/item/device/integrated_electronics/wirer/update_icon() + icon_state = "wirer-[mode]" + /obj/item/device/integrated_electronics/wirer/proc/wire(var/datum/integrated_io/io, mob/user) if(mode == WIRE) selected_io = io user << "You attach a data wire to \the [selected_io.holder]'s [selected_io.name] data channel." mode = WIRING + update_icon() else if(mode == WIRING) if(io == selected_io) user << "Wiring \the [selected_io.holder]'s [selected_io.name] into itself is rather pointless." @@ -37,6 +41,7 @@ user << "You connect \the [selected_io.holder]'s [selected_io.name] to \the [io.holder]'s [io.name]." mode = WIRE + update_icon() //io.updateDialog() //selected_io.updateDialog() selected_io.holder.interact(user) // This is to update the UI. @@ -50,6 +55,7 @@ return user << "You prepare to detach a data wire from \the [selected_io.holder]'s [selected_io.name] data channel." mode = UNWIRING + update_icon() return else if(mode == UNWIRING) @@ -67,6 +73,7 @@ selected_io.holder.interact(user) // This is to update the UI. selected_io = null mode = UNWIRE + update_icon() else user << "\The [selected_io.holder]'s [selected_io.name] and \the [io.holder]'s \ [io.name] are not connected." @@ -89,6 +96,7 @@ user << "You decide not to disconnect the data channel." selected_io = null mode = UNWIRE + update_icon() user << "You set \the [src] to [mode]." #undef WIRE @@ -100,8 +108,8 @@ name = "circuit debugger" desc = "This small tool allows one working with custom machinery to directly set data to a specific pin, useful for writing \ settings to specific circuits, or for debugging purposes. It can also pulse activation pins." - icon = 'icons/obj/hacktool.dmi' - icon_state = "hacktool" + icon = 'icons/obj/electronic_assemblies.dmi' + icon_state = "debugger" flags = CONDUCT w_class = 2 var/data_to_write = null diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index ddbdfb2cdd5..b99543514aa 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1581,6 +1581,11 @@ CIRCUITS BELOW build_path = /obj/item/integrated_circuit/arithmetic/pi sort_string = "WAAAG" +/datum/design/circuit/integrated_circuit/arithmetic/random + id = "cc-random" + build_path = /obj/item/integrated_circuit/arithmetic/random + sort_string = "WAAAH" + /datum/design/circuit/integrated_circuit/converter/AssembleDesignName() @@ -1612,6 +1617,11 @@ CIRCUITS BELOW build_path = /obj/item/integrated_circuit/converter/uppercase sort_string = "WAABD" +/datum/design/circuit/integrated_circuit/converter/concatenatior + id = "cc-concatenatior" + build_path = /obj/item/integrated_circuit/converter/concatenatior + sort_string = "WAABC" + /datum/design/circuit/integrated_circuit/coordinate/AssembleDesignName() @@ -1712,6 +1722,15 @@ CIRCUITS BELOW build_path = /obj/item/integrated_circuit/input/signaler sort_string = "WAAEJ" +/datum/design/circuit/integrated_circuit/input_output/light + id = "cc-light" + build_path = /obj/item/integrated_circuit/output/light + sort_string = "WAAEH" + +/datum/design/circuit/integrated_circuit/input_output/adv_light + id = "cc-adv_light" + build_path = /obj/item/integrated_circuit/output/light/advanced + sort_string = "WAAEI" /datum/design/circuit/integrated_circuit/logic/AssembleDesignName() @@ -1776,7 +1795,7 @@ CIRCUITS BELOW id = "cc-smoke" build_path = /obj/item/integrated_circuit/manipulation/smoke sort_string = "WAAGB" - req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_BIOMED = 4) + req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_BIO = 4) /datum/design/circuit/integrated_circuit/manipulation/locomotion name = "locomotion" diff --git a/icons/obj/electronic_assemblies.dmi b/icons/obj/electronic_assemblies.dmi index c37e2e78637..c7bf1845a04 100644 Binary files a/icons/obj/electronic_assemblies.dmi and b/icons/obj/electronic_assemblies.dmi differ