diff --git a/code/modules/integrated_electronics/_defines.dm b/code/modules/integrated_electronics/_defines.dm index c7092c6fc3..97acfd2c98 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 5f5a4f1d2e..3fc60c64f9 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 c9797fee45..7a837abbfa 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 18e75f0a5d..6a3ef7a065 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 4ef220c373..915fe0f17b 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 ddbdfb2cdd..b99543514a 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 c37e2e7863..c7bf1845a0 100644 Binary files a/icons/obj/electronic_assemblies.dmi and b/icons/obj/electronic_assemblies.dmi differ diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm index 025e54a9f4..fd5da3e50f 100644 --- a/maps/polaris-1.dmm +++ b/maps/polaris-1.dmm @@ -6100,7 +6100,7 @@ "cnp" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/turf/simulated/floor/tiled/dark,/area/storage/tech) "cnq" = (/turf/simulated/floor/tiled/dark,/area/storage/tech) "cnr" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/storage/tech) -"cns" = (/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/wirecutters,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech) +"cns" = (/obj/structure/table/steel,/obj/item/device/integrated_electronics/debugger{pixel_x = -5; pixel_y = 0},/obj/item/device/integrated_electronics/wirer{pixel_x = 5; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech) "cnt" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/powermonitor{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/stationalert_engineering{pixel_x = 1; pixel_y = -1},/obj/item/weapon/circuitboard/security/engineering,/obj/item/weapon/circuitboard/atmos_alert{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) "cnu" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/storage/tech) "cnv" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/arcade,/obj/item/weapon/circuitboard/message_monitor{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech) @@ -6150,7 +6150,7 @@ "con" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/cargo) "coo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/delivery) "cop" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech) -"coq" = (/obj/item/stack/cable_coil{pixel_x = -3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech) +"coq" = (/obj/structure/table/steel,/obj/item/weapon/storage/bag/circuits/basic,/turf/simulated/floor/plating,/area/storage/tech) "cor" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/storage/tech) "cos" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor/plating,/area/storage/tech) "cot" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/sign/directions/engineering{dir = 2; pixel_x = -32; pixel_z = -8},/obj/structure/sign/directions/medical{dir = 4; pixel_x = -32; pixel_y = 0},/obj/structure/sign/directions/cargo{dir = 2; pixel_x = -32; pixel_z = 8},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_four) @@ -6198,7 +6198,7 @@ "cpj" = (/turf/simulated/wall,/area/hallway/primary/port) "cpk" = (/obj/machinery/atmospherics/tvalve/mirrored/digital{name = "Waste to Space"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos) "cpl" = (/obj/machinery/cell_charger{pixel_y = 5},/obj/item/device/multitool,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech) -"cpm" = (/obj/machinery/light/small,/turf/simulated/floor,/area/storage/tech) +"cpm" = (/obj/machinery/light/small,/obj/structure/table/steel,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/turf/simulated/floor,/area/storage/tech) "cpn" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = -26},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor,/area/storage/tech) "cpo" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/storage/tech) "cpp" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor,/area/storage/tech)