diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 77f0de7b043..59ef2d936b0 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -121,6 +121,8 @@ "name" = category, "items" = null ) + if(cat_obj["name"] == "Illegal Parts" && !illegal_upgraded) + continue var/list/circuit_list = SScircuit.circuit_fabricator_recipe_list[category] var/list/items = list() for(var/path in circuit_list) @@ -226,6 +228,8 @@ /obj/item/weapon/disk/integrated_circuit/upgrade/illegal name = "integrated circuit printer upgrade disk - illegal designs" desc = "Install this into your integrated circuit printer to enhance it. This one adds new, but illegal designs to the printer." + icon_state = "upgrade_disk_illegal" + origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 4, TECH_ILLEGAL = 1) // To be implemented later. /obj/item/weapon/disk/integrated_circuit/upgrade/clone diff --git a/code/modules/integrated_electronics/subtypes/cryptography.dm b/code/modules/integrated_electronics/subtypes/cryptography.dm new file mode 100644 index 00000000000..81bc3d150f0 --- /dev/null +++ b/code/modules/integrated_electronics/subtypes/cryptography.dm @@ -0,0 +1,89 @@ +/obj/item/integrated_circuit/cryptography + complexity = 3 + inputs = list("input" = IC_PINTYPE_STRING) + outputs = list("result" = IC_PINTYPE_STRING) + activators = list("compute" = IC_PINTYPE_PULSE_IN, "on computed" = IC_PINTYPE_PULSE_OUT) + category_text = "Cryptography" + power_draw_per_use = 10 + +// HASH FUNCTIONS + +/obj/item/integrated_circuit/cryptography/hash_md5 + name = "MD5 hash circuit" + desc = "Message-Digest Algorithm 5" + extended_desc = "This circuit will take a string input and generates the MD5 hash of it." + icon_state = "template" + spawn_flags = IC_SPAWN_RESEARCH + +/obj/item/integrated_circuit/cryptography/hash_md5/do_work() + var/result = "" + for(var/datum/integrated_io/I in inputs) + I.pull_data() + if(!isnull(I.data)) + result = md5(I.data) + + set_pin_data(IC_OUTPUT, 1, result) + push_data() + activate_pin(2) + +/obj/item/integrated_circuit/cryptography/hash_sha1 + name = "SHA1 hash circuit" + desc = "Secure Hash Algorithm 1" + extended_desc = "This circuit will take a string input and generates the SHA1 hash of it." + icon_state = "template" + spawn_flags = IC_SPAWN_RESEARCH + power_draw_per_use = 20 + +/obj/item/integrated_circuit/cryptography/hash_sha1/do_work() + var/result = "" + for(var/datum/integrated_io/I in inputs) + I.pull_data() + if(!isnull(I.data)) + result = sha1(I.data) + + set_pin_data(IC_OUTPUT, 1, result) + push_data() + activate_pin(2) + + +// ENCRYPTION/DECRYPTION + +/obj/item/integrated_circuit/cryptography/rot13 + name = "rot13 circuit" + desc = "A very simple encryption circuit." + extended_desc = "The 'rotation' field will default to 13 if no custom number is supplied. This circuit rotates every letter by X in the alphabet." + icon_state = "template" + inputs = list( + "input" = IC_PINTYPE_STRING, + "rotation" = IC_PINTYPE_NUMBER + ) + spawn_flags = IC_SPAWN_RESEARCH + +/obj/item/integrated_circuit/cryptography/rot13/do_work() + var/result = "" + + var/input = get_pin_data(IC_INPUT, 1) + var/rotation = get_pin_data(IC_INPUT, 2) + + var/string_len = length(input) + + if(!isnum(rotation)) + rotation = 13 + + for(var/i = 1, i <= string_len, i++) + var/ascii = text2ascii(input, i) + if(ascii >= 65 && ascii <= 90) + ascii += rotation + if(ascii > 90) + ascii -= 26 + + else if(ascii >= 97 && ascii <= 122) + ascii += rotation + if(ascii > 122) + ascii -= 26 + + result += ascii2text(ascii) + + set_pin_data(IC_OUTPUT, 1, result) + push_data() + activate_pin(2) \ No newline at end of file diff --git a/code/modules/integrated_electronics/subtypes/illegal.dm b/code/modules/integrated_electronics/subtypes/illegal.dm new file mode 100644 index 00000000000..d28a0e0dd99 --- /dev/null +++ b/code/modules/integrated_electronics/subtypes/illegal.dm @@ -0,0 +1,7 @@ +/obj/item/integrated_circuit/illegal + complexity = 3 + inputs = list("input" = IC_PINTYPE_STRING) + outputs = list("result" = IC_PINTYPE_STRING) + activators = list("compute" = IC_PINTYPE_PULSE_IN, "on computed" = IC_PINTYPE_PULSE_OUT) + category_text = "Illegal Parts" + power_draw_per_use = 50 \ No newline at end of file diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 855c01c5391..c4de28811ff 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -441,12 +441,19 @@ origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2) power_draw_per_use = 50 var/datum/exonet_protocol/exonet = null + var/obj/machinery/exonet_node/node = null + +/obj/item/integrated_circuit/input/EPv2/proc/get_connection_to_tcomms() + if(node && node.on) + return can_telecomm(src,node) + return 0 /obj/item/integrated_circuit/input/EPv2/New() ..() exonet = new(src) exonet.make_address("EPv2_circuit-\ref[src]") desc += "
This circuit's EPv2 address is: [exonet.address]" + node = get_exonet_node() /obj/item/integrated_circuit/input/EPv2/Destroy() if(exonet) @@ -461,7 +468,15 @@ var/text = get_pin_data(IC_INPUT, 3) if(target_address && istext(target_address)) - exonet.send_message(target_address, message, text) + if(!get_connection_to_tcomms()) + set_pin_data(IC_OUTPUT, 1, null) + set_pin_data(IC_OUTPUT, 2, "Error: Cannot connect to Exonet node.") + set_pin_data(IC_OUTPUT, 3, "error") + + push_data() + activate_pin(2) + else + exonet.send_message(target_address, message, text) /obj/item/integrated_circuit/input/receive_exonet_message(var/atom/origin_atom, var/origin_address, var/message, var/text) set_pin_data(IC_OUTPUT, 1, origin_address) diff --git a/icons/obj/integrated_electronics/electronic_tools.dmi b/icons/obj/integrated_electronics/electronic_tools.dmi index 975f2fc9a81..821265acccc 100644 Binary files a/icons/obj/integrated_electronics/electronic_tools.dmi and b/icons/obj/integrated_electronics/electronic_tools.dmi differ diff --git a/vorestation.dme b/vorestation.dme index be1923eada8..7a0cd277dd5 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2493,7 +2493,9 @@ #include "code\modules\integrated_electronics\subtypes\arithmetic.dm" #include "code\modules\integrated_electronics\subtypes\built_in.dm" #include "code\modules\integrated_electronics\subtypes\converters.dm" +#include "code\modules\integrated_electronics\subtypes\cryptography.dm" #include "code\modules\integrated_electronics\subtypes\data_transfer.dm" +#include "code\modules\integrated_electronics\subtypes\illegal.dm" #include "code\modules\integrated_electronics\subtypes\input.dm" #include "code\modules\integrated_electronics\subtypes\lists.dm" #include "code\modules\integrated_electronics\subtypes\logic.dm"