diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 2bee1af4cdb..0c122622acb 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -309,6 +309,7 @@ m_amt = 50 g_amt = 20 origin_tech = "magnets=1;engineering=1" + var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage /obj/item/blueprints name = "station blueprints" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index e48d0c44f56..d56b83bad31 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -458,6 +458,7 @@ var/registered = null var/assignment = null var/obj/item/weapon/photo/PHOTO = null + var/dorm = 0 // determines if this ID has claimed a dorm already /obj/item/weapon/card/id/gold name = "identification card" @@ -1668,6 +1669,63 @@ rating = 3 m_amt = 80 +// Subspace stock parts + +/obj/item/weapon/stock_parts/subspace/ansible + name = "Subspace Ansible" + icon_state = "subspace_ansible" + desc = "A compact module capable of sensing extradimensional activity." + origin_tech = "programming=3;magnets=5;materials=4;bluespace=2" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/filter + name = "Hyperwave Filter" + icon_state = "hyperwave_filter" + desc = "A tiny device capable of filtering and converting super-intense radiowaves." + origin_tech = "programming=4;magnets=2" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/amplifier + name = "Subspace Amplifier" + icon_state = "subspace_amplifier" + desc = "A compact micro-machine capable of amplifying weak subspace transmissions." + origin_tech = "programming=3;magnets=4;materials=4;bluespace=2" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/treatment + name = "Subspace Treatment Disk" + icon_state = "treatment_disk" + desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." + origin_tech = "programming=3;magnets=2;materials=5;bluespace=2" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/analyzer + name = "Subspace Wavelength Analyzer" + icon_state = "treatment_disk" + desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." + origin_tech = "programming=3;magnets=4;materials=4;bluespace=2" + m_amt = 30 + g_amt = 10 + +/obj/item/weapon/stock_parts/subspace/crystal + name = "Ansible Crystal" + icon_state = "ansible_crystal" + desc = "A crystal made from pure glass used to transmit laser databursts to subspace." + origin_tech = "magnets=4;materials=4;bluespace=2" + g_amt = 50 + +/obj/item/weapon/stock_parts/subspace/transmitter + name = "Subspace Transmitter" + icon_state = "subspace_transmitter" + desc = "A large piece of equipment used to open a window into the subspace dimension." + origin_tech = "magnets=5;materials=5;bluespace=3" + m_amt = 50 + + /obj/item/weapon/ectoplasm name = "ectoplasm" desc = "spooky" diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index b813c76ef5b..7d00f02fdef 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -234,3 +234,73 @@ obj/item/weapon/circuitboard/rdserver "/obj/item/weapon/stock_parts/micro_laser" = 1, "/obj/item/weapon/stock_parts/console_screen" = 1, "/obj/item/weapon/cable_coil" = 2,) + + +// Telecomms circuit boards: + +/obj/item/weapon/circuitboard/telecomms/receiver + name = "Circuit Board (Subspace Receiver)" + build_path = "/obj/machinery/telecomms/receiver" + board_type = "machine" + origin_tech = "programming=4;engineering=3;bluespace=2" + frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Manipulators, and 1 Advanced Scanning Module." + req_components = list( + "/obj/item/weapon/stock_parts/subspace/ansible" = 1, + "/obj/item/weapon/stock_parts/subspace/filter" = 1, + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/weapon/stock_parts/scanning_module/adv" = 1) + +/obj/item/weapon/circuitboard/telecomms/bus + name = "Circuit Board (Bus Mainframe)" + build_path = "/obj/machinery/telecomms/bus" + board_type = "machine" + origin_tech = "programming=4;engineering=4" + frame_desc = "Requires 2 Manipulators, 1 Cable Coil and 1 Hyperwave Filter." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/weapon/cable_coil" = 1, + "/obj/item/weapon/stock_parts/subspace/filter" = 1) + +/obj/item/weapon/circuitboard/telecomms/processor + name = "Circuit Board (Processor Unit)" + build_path = "/obj/machinery/telecomms/processor" + board_type = "machine" + origin_tech = "programming=4;engineering=4" + frame_desc = "Requires 5 Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 5, + "/obj/item/weapon/stock_parts/subspace/filter" = 1, + "/obj/item/weapon/stock_parts/subspace/treatment" = 2, + "/obj/item/weapon/stock_parts/subspace/analyzer" = 1, + "/obj/item/weapon/cable_coil" = 2, + "/obj/item/weapon/stock_parts/subspace/amplifier" = 1) + +/obj/item/weapon/circuitboard/telecomms/server + name = "Circuit Board (Telecommunication Server)" + build_path = "/obj/machinery/telecomms/server" + board_type = "machine" + origin_tech = "programming=4;engineering=4" + frame_desc = "Requires 2 Manipulators, 1 Cable Coil and 1 Hyperwave Filter." + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/weapon/cable_coil" = 1, + "/obj/item/weapon/stock_parts/subspace/filter" = 1) + +/obj/item/weapon/circuitboard/telecomms/broadcaster + name = "Circuit Board (Bus Mainframe)" + build_path = "/obj/machinery/telecomms/broadcaster" + board_type = "machine" + origin_tech = "programming=4;engineering=4;bluespace=2" + frame_desc = "Requires 2 Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal, 1 Subspace Transmitter, 1 Subspace Amplifier and 4 High-Powered Micro-Lasers. " + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 2, + "/obj/item/weapon/cable_coil" = 1, + "/obj/item/weapon/stock_parts/subspace/filter" = 1, + "/obj/item/weapon/stock_parts/subspace/crystal" = 1, + "/obj/item/weapon/stock_parts/subspace/transmitter" = 1, + "/obj/item/weapon/stock_parts/subspace/amplifier" = 1, + "/obj/item/weapon/stock_parts/micro_laser/high" = 4) + + + + diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 7687a04959a..437ee6daeb3 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -7,7 +7,7 @@ /obj/machinery/telecomms/broadcaster - name = "subspace broadcaster" + name = "Subspace Broadcaster" icon = 'stationobjs.dmi' icon_state = "broadcaster" desc = "A dish-shaped machine used to broadcast processed subspace signals." @@ -31,6 +31,11 @@ signal.data["done"] = 1 // mark the signal as being broadcasted + // Search for the original signal and mark it as done as well + var/datum/signal/original = signal.data["original"] + if(original) + original.data["done"] = 1 + /* --- Do a snazzy animation! --- */ flick("broadcaster_send", src) @@ -295,7 +300,5 @@ else R.show_message(rendered, 2) - // If the signal doesn't need to be used by intercoms or anything: - diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index b8092cad6f8..f28f31d4ed5 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -59,26 +59,36 @@ var/race // The actual race of the mob var/language = "Human" // MMIs, pAIs, Cyborgs and humans all speak Human var/mobtype = "[C.parameters["mobtype"]]" - switch(mobtype) + var/mob/M = new mobtype - if("/mob/living/carbon/human") - race = "Human" + if(istype(M, /mob/living/carbon/human)) + race = "Human" - if("/mob/living/carbon/monkey") - race = "Monkey" - language = race + else if(istype(M, /mob/living/carbon/monkey)) + race = "Monkey" + language = race - if("/mob/living/carbon/metroid") - race = "Metroid" - language = race + else if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/metroid)) + race = "Alien" + language = race - if("/mob/living/carbon/alien") - race = "Alien" - language = race - - if(findtext("C.parameters["mobtype"]", "/mob/living/silicon")) + else if(istype(M, /mob/living/silicon)) race = "Artificial Life" + else if(istype(M, /mob/living/simple_animal/corgi)) + race = "Dog" + language = race + + else if(istype(M, /mob/living/simple_animal/cat)) + race = "Cat" + language = race + + else + race = "Unidentifiable" + language = race + + del(M) + // -- If the orator is a human, or universal translate is active, OR mob has universal speech on -- if(language == "Human" || universal_translate || C.parameters["uspeech"]) @@ -139,7 +149,7 @@ if("scan") if(servers.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" + temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" else for(var/obj/machinery/telecomms/server/T in range(25, src)) @@ -147,9 +157,9 @@ servers.Add(T) if(!servers.len) - temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" + temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" else - temp = "- [servers.len] SERVERS PROBED & BUFFERED -" + temp = "- [servers.len] SERVERS PROBED & BUFFERED -" screen = 0 @@ -158,20 +168,28 @@ var/datum/comm_log_entry/D = SelectedServer.log_entries[text2num(href_list["delete"])] - temp = "- DELETED ENTRY: [D.name] -" + temp = "- DELETED ENTRY: [D.name] -" SelectedServer.log_entries.Remove(D) del(D) + else + temp = "- FAILED: NO SELECTED MACHINE -" if(href_list["input"]) var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text - if(newnet && usr in range(1, src)) - network = newnet - screen = 0 - machines = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" + + if(newnet && usr in range(1, src) && newnet != network) + if(length(newnet) > 15) + temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" + + else + + network = newnet + screen = 0 + machines = list() + temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" updateUsrDialog() return diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index ce3818d14fc..b1e7e627435 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -16,9 +16,11 @@ list/links = list() // list of machines this machine is linked to traffic = 0 // value increases as traffic increases list/autolinkers = list() // list of text/number values to link with - id = "" // identification string + id = "NULL" // identification string network = "NULL" // the network of the machinery + list/freq_listening = list() // list of frequencies to tune into: if none, will listen to all + machinetype = 0 // just a hacky way of preventing alike machines from pairing @@ -48,6 +50,13 @@ // receive information from linked machinery ..() + proc/is_freq_listening(datum/signal/signal) + // return 1 if found, 0 if not found + if((signal.frequency in freq_listening) || (!freq_listening.len)) + return 1 + else + return 0 + New() ..() if(autolinkers.len) @@ -68,7 +77,7 @@ */ /obj/machinery/telecomms/receiver - name = "subspace receiver" + name = "Subspace Receiver" icon = 'stationobjs.dmi' icon_state = "broadcast receiver" desc = "This machine has a dish-like shape and green lights. It is designed to detect and process subspace radio activity." @@ -77,18 +86,16 @@ use_power = 1 idle_power_usage = 30 machinetype = 1 - var - list/freq_listening = list() // list of frequencies that are being tuned into - // you can use "ALL" on any machine using this var receive_signal(datum/signal/signal) if(signal.transmission_method == 2) - if( (signal.frequency in freq_listening) || ("ALL" in freq_listening) ) // detect subspace signals + if(is_freq_listening(signal)) // detect subspace signals var/datum/signal/copy = new copy.copy_from(signal) // copy information to new signal + copy.data["original"] = signal relay_information(copy) // ideally relay the information to bus units @@ -103,7 +110,7 @@ */ /obj/machinery/telecomms/bus - name = "bus mainframe" + name = "Bus Mainframe" icon = 'stationobjs.dmi' icon_state = "bus1" desc = "A mighty piece of hardware used to send massive amounts of data quickly." @@ -115,20 +122,21 @@ receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - if(signal.data["compression"]) // if signal is still compressed from subspace transmission - // send to one linked processor unit + if(is_freq_listening(signal)) + if(signal.data["compression"]) // if signal is still compressed from subspace transmission + // send to one linked processor unit - var/send_to_processor = relay_information(signal, "/obj/machinery/telecomms/processor", 1) + var/send_to_processor = relay_information(signal, "/obj/machinery/telecomms/processor", 1) - if(!send_to_processor) // failed to send to a processor, relay information anyway + if(!send_to_processor) // failed to send to a processor, relay information anyway + relay_information(signal, "/obj/machinery/telecomms/server") + + + else // the signal has been decompressed by a processor unit + // send to all linked server units relay_information(signal, "/obj/machinery/telecomms/server") - else // the signal has been decompressed by a processor unit - // send to all linked server units - relay_information(signal, "/obj/machinery/telecomms/server") - - /* The processor is a very simple machine that decompresses subspace signals and @@ -137,7 +145,7 @@ */ /obj/machinery/telecomms/processor - name = "processor unit" + name = "Processor Unit" icon = 'stationobjs.dmi' icon_state = "processor_on" desc = "This machine is used to process large quantities of information." @@ -149,8 +157,9 @@ receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - signal.data["compression"] = 0 // uncompress subspace signal - relay_direct_information(signal, machine_from) // send the signal back to the machine + if(is_freq_listening(signal)) + signal.data["compression"] = 0 // uncompress subspace signal + relay_direct_information(signal, machine_from) // send the signal back to the machine @@ -163,7 +172,7 @@ /obj/machinery/telecomms/server - name = "telecommunication server" + name = "Telecommunication Server" icon = 'stationobjs.dmi' icon_state = "comm_server" desc = "A machine used to store data and network statistics." @@ -173,14 +182,13 @@ idle_power_usage = 15 machinetype = 4 var - list/freq_listening = list() list/log_entries = list() receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(signal.data["message"] && !signal.data["compression"]) - if( (signal.frequency in freq_listening) || ("ALL" in freq_listening) ) + if(is_freq_listening(signal)) // if signal contains discernable data diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index de1f36d8646..71d61628706 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -95,7 +95,7 @@ if("probe") if(machines.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" + temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" else for(var/obj/machinery/telecomms/T in range(25, src)) @@ -103,9 +103,9 @@ machines.Add(T) if(!machines.len) - temp = "- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -" + temp = "- FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN \[[network]\] -" else - temp = "- [machines.len] ENTITIES LOCATED & BUFFERED -" + temp = "- [machines.len] ENTITIES LOCATED & BUFFERED -" screen = 0 @@ -113,11 +113,15 @@ if(href_list["input"]) var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text - if(newnet && usr in range(1, src)) - network = newnet - screen = 0 - machines = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" + if(newnet && usr in range(1, src) && newnet != network) + if(length(newnet) > 15) + temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" + + else + network = newnet + screen = 0 + machines = list() + temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" updateUsrDialog() return diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 0babc79fccb..5c9ad3cef24 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -478,6 +478,51 @@ datum build_path = "/obj/item/weapon/aiModule/tyrant" + +/////////////////////////////////// +/////Subspace Telecomms//////////// +/////////////////////////////////// + subspace_receiver + name = "Circuit Design (Subspace Receiver)" + desc = "Allows for the construction of Subspace Receiver equipment." + id = "s-receiver" + req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + + telecomms_bus + name = "Circuit Design (Bus Mainframe)" + desc = "Allows for the construction of Telecommunications Bus Mainframes." + id = "s-bus" + req_tech = list("programming" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + + telecomms_processor + name = "Circuit Design (Processor Unit)" + desc = "Allows for the construction of Telecommunications Processor equipment." + id = "s-processor" + req_tech = list("programming" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + + telecomms_server + name = "Circuit Design (Subspace Receiver)" + desc = "Allows for the construction of Telecommunications Servers." + id = "s-server" + req_tech = list("programming" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + + subspace_broadcaster + name = "Circuit Design (Subspace Broadcaster)" + desc = "Allows for the construction of Subspace Broadcasting equipment." + id = "s-broadcaster" + req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + + /////////////////////////////////// /////Non-Board Computer Stuff////// /////////////////////////////////// @@ -897,6 +942,71 @@ datum reliability_base = 75 build_path = "/obj/item/weapon/stock_parts/matter_bin/super" + + + subspace_ansible + name = "Subspace Ansible" + desc = "A compact module capable of sensing extradimensional activity." + id = "s-ansible" + req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 80, "$silver" = 20) + build_path = "/obj/item/weapon/stock_parts/subspace/ansible" + + hyperwave_filter + name = "Hyperwave Filter" + desc = "A tiny device capable of filtering and converting super-intense radiowaves." + id = "s-filter" + req_tech = list("programming" = 3, "magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 40, "$silver" = 10) + build_path = "/obj/item/weapon/stock_parts/subspace/filter" + + subspace_amplifier + name = "Subspace Amplifier" + desc = "A compact micro-machine capable of amplifying weak subspace transmissions." + id = "s-amplifier" + req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15) + build_path = "/obj/item/weapon/stock_parts/subspace/amplifier" + + subspace_treatment + name = "Subspace Treatment Disk" + desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." + id = "s-amplifier" + req_tech = list("programming" = 3, "magnets" = 2, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$silver" = 20) + build_path = "/obj/item/weapon/stock_parts/subspace/treatment" + + subspace_analyzer + name = "Subspace Treatment Disk" + desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." + id = "s-amplifier" + req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$gold" = 15) + build_path = "/obj/item/weapon/stock_parts/subspace/analyzer" + + subspace_crystal + name = "Ansible Crystal" + desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." + id = "s-amplifier" + req_tech = list("magnets" = 4, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20) + build_path = "/obj/item/weapon/stock_parts/subspace/crystal" + + subspace_transmitter + name = "Subspace Transmitter" + desc = "A large piece of equipment used to open a window into the subspace dimension." + id = "s-amplifier" + req_tech = list("magnets" = 5, "materials" = 5, "bluespace" = 3) + build_type = PROTOLATHE + materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15) + build_path = "/obj/item/weapon/stock_parts/subspace/transmitter" + //////////////////////////////////////// //////////////////Power///////////////// //////////////////////////////////////// diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index 6c7baeccfca..8d1e646f0ff 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index 6856b3da237..5af3cce8f9c 100644 Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ