From e024d8e9155558a1875dc372ffab63d72191e584 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Thu, 5 Aug 2021 22:08:06 +0300 Subject: [PATCH] Adds scanner gate shells (#60558) --- code/__DEFINES/dcs/signals.dm | 9 +++ code/game/machinery/scan_gate.dm | 4 +- .../research/designs/wiremod_designs.dm | 12 ++++ code/modules/research/techweb/all_nodes.dm | 1 + code/modules/wiremod/shell/scanner_gate.dm | 66 ++++++++++++++++++ code/modules/wiremod/shell/shell_items.dm | 6 ++ icons/obj/machines/scangate.dmi | Bin 2461 -> 3219 bytes tgstation.dme | 1 + 8 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 code/modules/wiremod/shell/scanner_gate.dm diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 0db275ec1e1..10a587a4d53 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -1354,6 +1354,15 @@ /// Called in /obj/structure/moneybot/add_money(). (to_add) #define COMSIG_MONEYBOT_ADD_MONEY "moneybot_add_money" +/// Called when somebody passes through a scanner gate and it triggers +#define COMSIG_SCANGATE_PASS_TRIGGER "scangate_pass_trigger" + +/// Called when somebody passes through a scanner gate and it does not trigger +#define COMSIG_SCANGATE_PASS_NO_TRIGGER "scangate_pass_no_trigger" + +/// Called when something passes through a scanner gate shell +#define COMSIG_SCANGATE_SHELL_PASS "scangate_shell_pass" + // Merger datum signals /// Called on the object being added to a merger group: (datum/merger/new_merger) #define COMSIG_MERGER_ADDING "comsig_merger_adding" diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm index c052f69fe77..d5d0fb01b96 100644 --- a/code/game/machinery/scan_gate.dm +++ b/code/game/machinery/scan_gate.dm @@ -101,7 +101,7 @@ else to_chat(user, span_warning("You try to lock [src] with [W], but nothing happens.")) else - if(!locked && default_deconstruction_screwdriver(user, "scangate_open", "scangate", W)) + if(!locked && default_deconstruction_screwdriver(user, "[initial(icon_state)]_open", initial(icon_state), W)) return if(panel_open && is_wire_tool(W)) wires.interact(user) @@ -181,11 +181,13 @@ beep = !beep if(beep) alarm_beep() + SEND_SIGNAL(src, COMSIG_SCANGATE_PASS_TRIGGER, M) if(!ignore_signals) color = wires.get_color_of_wire(WIRE_ACCEPT) var/obj/item/assembly/assembly = wires.get_attached(color) assembly?.activate() else + SEND_SIGNAL(src, COMSIG_SCANGATE_PASS_NO_TRIGGER, M) if(!ignore_signals) color = wires.get_color_of_wire(WIRE_DENY) var/obj/item/assembly/assembly = wires.get_attached(color) diff --git a/code/modules/research/designs/wiremod_designs.dm b/code/modules/research/designs/wiremod_designs.dm index cd44e891f7e..15b87d807f7 100644 --- a/code/modules/research/designs/wiremod_designs.dm +++ b/code/modules/research/designs/wiremod_designs.dm @@ -376,6 +376,18 @@ build_type = PROTOLATHE | COMPONENT_PRINTER category = list("Circuitry", "Shells") +/datum/design/scanner_gate_shell + name = "Scanner Gate Shell" + desc = "A scanner gate shell that performs mid-depth scans on people when they pass through it." + id = "scanner_gate_shell" + materials = list( + /datum/material/glass = 4000, + /datum/material/iron = 12000, + ) + build_path = /obj/item/shell/scanner_gate + build_type = PROTOLATHE | COMPONENT_PRINTER + category = list("Circuitry", "Shells") + /datum/design/board/bci_implanter name = "Brain-Computer Interface Manipulation Chamber" desc = "A machine that, when given a brain-computer interface, will implant it into an occupant. Otherwise, will remove any brain-computer interfaces they already have." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index bc78d52e744..63c18592d5b 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -664,6 +664,7 @@ "door_shell", "controller_shell", "money_bot_shell", + "scanner_gate_shell", "scanner_shell", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) diff --git a/code/modules/wiremod/shell/scanner_gate.dm b/code/modules/wiremod/shell/scanner_gate.dm new file mode 100644 index 00000000000..312c690bd82 --- /dev/null +++ b/code/modules/wiremod/shell/scanner_gate.dm @@ -0,0 +1,66 @@ +/obj/structure/scanner_gate_shell + name = "circuit scanner gate" + desc = "A gate able to perform mid-depth scans on any organisms who pass under it." + icon = 'icons/obj/machines/scangate.dmi' + icon_state = "scangate_black" + var/scanline_timer + +/obj/structure/scanner_gate_shell/Initialize() + . = ..() + set_scanline("passive") + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = .proc/on_entered, + ) + AddElement(/datum/element/connect_loc, loc_connections) + + AddComponent(/datum/component/shell, list( + new /obj/item/circuit_component/scanner_gate() + ), SHELL_CAPACITY_LARGE, SHELL_FLAG_REQUIRE_ANCHOR) + +/obj/structure/scanner_gate_shell/wrench_act(mob/living/user, obj/item/tool) + set_anchored(!anchored) + tool.play_tool_sound(src) + balloon_alert(user, "You [anchored?"secure":"unsecure"] [src].") + return TRUE + +/obj/structure/scanner_gate_shell/proc/on_entered(datum/source, atom/movable/AM) + SIGNAL_HANDLER + set_scanline("scanning", 10) + SEND_SIGNAL(src, COMSIG_SCANGATE_SHELL_PASS, AM) + +/obj/structure/scanner_gate_shell/proc/set_scanline(type, duration) + cut_overlays() + deltimer(scanline_timer) + add_overlay(type) + if(duration) + scanline_timer = addtimer(CALLBACK(src, .proc/set_scanline, "passive"), duration, TIMER_STOPPABLE) + +/obj/item/circuit_component/scanner_gate + display_name = "Scanner Gate" + desc = "A gate able to perform mid-depth scans on any object that pass through it." + + circuit_flags = CIRCUIT_FLAG_OUTPUT_SIGNAL + + var/datum/port/output/scanned + + var/obj/structure/scanner_gate_shell/attached_gate + +/obj/item/circuit_component/scanner_gate/Initialize() + . = ..() + scanned = add_output_port("Scanned Object", PORT_TYPE_ATOM) + +/obj/item/circuit_component/scanner_gate/register_shell(atom/movable/shell) + . = ..() + if(istype(shell, /obj/structure/scanner_gate_shell)) + attached_gate = shell + RegisterSignal(attached_gate, COMSIG_SCANGATE_SHELL_PASS, .proc/on_trigger) + +/obj/item/circuit_component/scanner_gate/unregister_shell(atom/movable/shell) + UnregisterSignal(attached_gate, COMSIG_SCANGATE_SHELL_PASS) + attached_gate = null + return ..() + +/obj/item/circuit_component/scanner_gate/proc/on_trigger(datum/source, atom/movable/passed) + SIGNAL_HANDLER + scanned.set_output(passed) + trigger_output.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/wiremod/shell/shell_items.dm b/code/modules/wiremod/shell/shell_items.dm index 95e70d28ea0..4e6673e7c86 100644 --- a/code/modules/wiremod/shell/shell_items.dm +++ b/code/modules/wiremod/shell/shell_items.dm @@ -57,3 +57,9 @@ name = "brain-computer interface assembly" icon_state = "bci-open" shell_to_spawn = /obj/item/organ/cyberimp/bci + +/obj/item/shell/scanner_gate + name = "scanner gate assembly" + icon = 'icons/obj/machines/scangate.dmi' + icon_state = "scangate_black_open" + shell_to_spawn = /obj/structure/scanner_gate_shell diff --git a/icons/obj/machines/scangate.dmi b/icons/obj/machines/scangate.dmi index 08bc7a12847d045846cac501d64d3a34813a0151..6af8750414adebcd45d3d2fd26c88740984d2daf 100644 GIT binary patch literal 3219 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 literal 2461 zcmZ`*dpy&7AOGzVb6GSgm1~6)g%CP3n{~5cbX-H>$SHTF5Y09b<*6yh?Sv&^?!3KcpkMHOG`g}gG*Z2GVyx;FXK6ji6XW;UC8T$Z7|xm#xz_X`95#(4e4KXK_SNj@SOLT`B_Jv|p5E+kv~$0crnzf#%TB{b z0!)W3ZY;IRo{CV>1H;c*7yXg*Lq>aK>f^#+#}V`RKK09i5ttKeHhW8QH=Nje0tA5_ zB~MMv$KmF5Y*+;I|O2iuGylzCS}ilVQh{o=zix=KE?(bd3Q zRSq#?VyCeV(Jk34m$5(7MDe_?-9VMA_aAPRWjCJpveWaHK#5u45IxY9AjBED_Yge4 zK4pkm7r>i|uO^ypC1}Y}ZV5L>c}=`UBC%h%;yrhy z>-L;bc*aZV*R?pmqf7DkwK|IWvPH@IA5s&M? zRNQL-QMbA2$>nfBnV1n{i^B7VZu(8~X+`fxQlIBg3`O-BDAtvwY(`edz0S^l#%5QF zri&HdcQ393*(#Getw6~C!9+657 zE?dj>kTRNvc&ZNytd^Vax$rKk0R7jx6MZtoCai*UIDK++_s(US#h>7FGC6s9uV;DP z0qo+ieDC!8!;kP+TMn;C3Mi{m^c*RM%X(&lRHjdm*TDK1vFM_s@<*{@l@;LsO zW1ITlu+2d%%Z-(vU*EhszK%|+@Hd_|_Be1gN>M!3nHcvZnvS=K-*+Ws#X5_{!>~S* zIzC?=8~#0Ha(1>SzWS+T-0;NZIW@O_s!u4E6B6&d!hQ7os07;j-iKl*IDD<8ZE>vu z#E(FoR+=dq~%R`WoQ{%9D^FE^{`pIt`YvnzBT&XTV++!1*&esl&DosS_BQE~CRlS|xi^?Gk_4%+}FaW3Mcah@J{UU7e)DOnl3 zoLwPGSWiIF3*W4AzVQT8?=9TTL_FFY8 zqa8@0HMh@ljg1LHT!u7Wd~mbU6ypO744Ba?8)~qJ57veZ;*rtO6I;~-;#@jG;CdAK zz{TIq-osAYg5g)uCYiHzAPoi)?^YUYTlxC+?qo}IPJX@{ff3^Gnt0udw*OoR=oj|W zts~}?V&P^iOPO!4N>YHtXMpLV^eGP`;7iz>a`A-;1%J)u-CSgth8x#zBFa9X}w9rgqR()J- z`^-3jG}lu&(oqs6c(dcdgyM7&4GniI>kCXn>&x6gfM^*C^6TFT%%78&lmslS28&Q27 z=f{}3XF)n1dT~<$S4t!b#^!#((|h8VN%ICq@RpX61S3}usGB=Pg=JU;+x2p9EPo=l z+`lnwq{Q4^de4+77649=#0LycZ40*6guTfN^e_)I{av+*}qM&Lgw<6!z!#g@tEFzykvVkxf3S`ZhBM4yZ8_G$0U2 zS@Wj`n?QGzOmvJe8`Ftbx?}&+Ch~OIgYD{8+I&%LaJQo*ze1GHErs17f*itQL)5Me z0k8cb$|-P+x&`okve1es=@GyC%8HP$n5EK0WwTVCy1N&lSefw`k`l;3kCLBJ(OQ|dv`zXIUbjT-T1|T!d)pHaYncux;=CjVYIS(&wvuh zgDgy|q|y{@UytFmzaRFWX^?ih)=xVJct7foTOFFO?U(7wud2e&j2$RU@0U3%FIp7J zzHxfbqAeyXyRGQg4J){Qq`eN_^%%hz+h^;(4|{A=x9%GsXj~I3Vmh;y+1QwP!9jhW zX5)3zMlY9}xO4`q4Pr!a9`Q%ay*7^`FKP8zp%u^TWHfT>94}Y(DKy zu-;>3^i~3S<5%LwhL_cq=Loy+w99)^EdvhLJ&T+kGtl*y7d{qSCb=|qpHi!=^NfUvCB(1MQJ;3?Jf+&F3y7@4LynF&T0VvIV00E&l zrpw+ja+htpOfd@+PLn!wn=`2oFOua@2le`G^!0BSzx`!_Z>K?ykccT#?f${8|E!=y Yw!4nGX4IONFWt8Q+$qAzYOG)4-;;)>{{R30 diff --git a/tgstation.dme b/tgstation.dme index 37d774f9851..2ac00307e3b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3761,6 +3761,7 @@ #include "code\modules\wiremod\shell\drone.dm" #include "code\modules\wiremod\shell\moneybot.dm" #include "code\modules\wiremod\shell\scanner.dm" +#include "code\modules\wiremod\shell\scanner_gate.dm" #include "code\modules\wiremod\shell\server.dm" #include "code\modules\wiremod\shell\shell_items.dm" #include "code\modules\zombie\items.dm"