From faa797b23a02fd8269b5411b9a74d920555d0901 Mon Sep 17 00:00:00 2001 From: Neerti Date: Sat, 17 Sep 2016 12:36:46 -0400 Subject: [PATCH 1/2] Even More Sodding Circuits Adds new RNG circuit, to make random numbers each time. Adds new Concatenating circuit, so you can make lots of small strings into one big one. Adds new light and advanced light circuit. Basic just has a normal light that can be toggled. Advanced allows it to be any color using RGB, and a brightness between 0 and 6. New sprites for the debugger and wirer, by Mechoid. Hopefully finally fixes smoke generator from being unobtainable. --- .../integrated_electronics/_defines.dm | 4 +- .../integrated_electronics/arithmetic.dm | 28 +++++++- .../integrated_electronics/converters.dm | 37 ++++++++++ .../integrated_electronics/input_output.dm | 63 +++++++++++++++++- code/modules/integrated_electronics/tools.dm | 16 +++-- code/modules/research/designs.dm | 21 +++++- icons/obj/electronic_assemblies.dmi | Bin 13583 -> 16928 bytes 7 files changed, 160 insertions(+), 9 deletions(-) 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 c37e2e786375e74028d7fddbdf52df087b7a342a..c7bf1845a046a66b1e0e3b98d896041218524988 100644 GIT binary patch literal 16928 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 literal 13583 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 Date: Sat, 17 Sep 2016 12:55:15 -0400 Subject: [PATCH 2/2] Adds basic circuit kit and spare circuit tools to Tech Storage. --- maps/polaris-1.dmm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm index 025e54a9f47..fd5da3e50fc 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)