From 0f9d75231211eb2e5f794d6674295386279e4d33 Mon Sep 17 00:00:00 2001 From: Markus Date: Fri, 21 Feb 2025 13:06:30 +0100 Subject: [PATCH 1/3] works --- code/modules/mapping/mapping_helpers.dm | 95 ++++++++++++++++++++++--- code/modules/power/apc/apc_main.dm | 31 ++++++++ 2 files changed, 118 insertions(+), 8 deletions(-) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 76b262fca71c5..8410cf7b2071f 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -328,19 +328,38 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/effect/mapping_helpers) log_mapping("[src] failed to find air alarm at [AREACOORD(src)].") qdel(src) -//APC helpers -/obj/effect/mapping_helpers/apc - /obj/effect/mapping_helpers/apc/Initialize(mapload) . = ..() if(!mapload) log_mapping("[src] spawned outside of mapload!") - return - var/obj/machinery/power/apc/apc = locate(/obj/machinery/power/apc) in loc - if(!apc) - log_mapping("[src] failed to find an APC at [AREACOORD(src)]") + return INITIALIZE_HINT_QDEL + var/obj/machinery/power/apc/target = locate(/obj/machinery/power/apc) in loc + if(isnull(target)) + var/area/target_area = get_area(target) + log_mapping("[src] failed to find an apc at [AREACOORD(src)] ([target_area.type]).") else - payload(apc) + payload(target) + + return INITIALIZE_HINT_LATELOAD + +/obj/effect/mapping_helpers/apc/LateInitialize() + . = ..() + var/obj/machinery/power/apc/target = locate(/obj/machinery/power/apc) in loc + + if(isnull(target)) + qdel(src) + return + if(target.unlocked) + target.unlock() + if(target.syndicate_access) + target.give_syndicate_access() + if(target.away_engine_access) + target.give_away_engine_access() + if(target.exploration_access) + target.give_exploration_access() + + target.update_icon() + qdel(src) /obj/effect/mapping_helpers/apc/proc/payload(obj/machinery/power/apc/payload) return @@ -351,8 +370,68 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/effect/mapping_helpers) /obj/effect/mapping_helpers/apc/discharged/payload(obj/machinery/power/apc/apc) var/obj/item/stock_parts/cell/C = apc.get_cell() + if(isnull(C)) + return + C.charge = 0 + C.update_icon() + qdel(src) + +/obj/effect/mapping_helpers/apc/charge + name = "apc zero change helper" + icon_state = "apc_nopower" + var/charge_percentage = 100 + +/obj/effect/mapping_helpers/apc/charge/payload(obj/machinery/power/apc/apc) + var/obj/item/stock_parts/cell/C = apc.get_cell() + if(isnull(C)) + return + + C.charge = C.maxcharge * charge_percentage / 100 + + C.update_icon() + qdel(src) + +/obj/effect/mapping_helpers/airalarm/unlocked + name = "apc unlocked interface helper" + icon_state = "apc_unlocked_interface_helper" + +/obj/effect/mapping_helpers/apc/unlocked/payload(obj/machinery/power/apc/target) + if(!target.locked) + var/area/area = get_area(target) + log_mapping("[src] at [AREACOORD(src)] [(area.type)] tried to unlock the [target] but it's already unlocked!") + target.unlocked = TRUE + +/obj/effect/mapping_helpers/apc/syndicate_access + name = "apc syndicate access helper" + icon_state = "apc_syndicate_access_helper" + +/obj/effect/mapping_helpers/apc/syndicate_access/payload(obj/machinery/power/apc/target) + if(!target.syndicate_access) + var/area/area = get_area(target) + log_mapping("[src] at [AREACOORD(src)] [(area.type)] tried to adjust [target]'s access to syndicate access but it's already changed!") + target.syndicate_access = TRUE + +/obj/effect/mapping_helpers/apc/exploration_access + name = "apc exploration access helper" + icon_state = "apc_exploration_access_helper" + +/obj/effect/mapping_helpers/apc/exploration_access/payload(obj/machinery/power/apc/target) + if(!target.exploration_access) + var/area/area = get_area(target) + log_mapping("[src] at [AREACOORD(src)] [(area.type)] tried to adjust [target]'s access to exploration acess but it's already changed!") + target.exploration_access = TRUE + +/obj/effect/mapping_helpers/apc/away_engine_access + name = "apc away engine access helper" + icon_state = "apc_away_engine_access_helper" + +/obj/effect/mapping_helpers/apc/away_engine_access/payload(obj/machinery/power/apc/target) + if(!target.away_engine_access) + var/area/area = get_area(target) + log_mapping("[src] at [AREACOORD(src)] [(area.type)] tried to adjust [target]'s access to away engine access but it's already changed!") + target.away_engine_access = TRUE //needs to do its thing before spawn_rivers() is called diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 1560e3d352ba0..6137e30e92abd 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -130,6 +130,16 @@ /// To prevent sound loop bugs var/apc_sound_stage = null + //Access helpers for APCs + /// Used for APC helper called unlocked to make APC unlocked. + var/unlocked = FALSE + /// Used for APC helper called syndicate_access to make APC's required access syndicate_access. + var/syndicate_access = FALSE + /// Used for APC helper called away_engine_access to make APC's required access away_engine_access. + var/away_engine_access = FALSE + /// Used for APC helper called exploration_access to make APC's required access exploration_access. + var/exploration_access = FALSE + armor_type = /datum/armor/power_apc /datum/armor/power_apc @@ -665,3 +675,24 @@ icon_state = "power_mod" custom_price = 5 desc = "Heavy-duty switching circuits for power control." + +/// Used for unlocked apc helper, which unlocks the apc. +/obj/machinery/power/apc/proc/unlock() + locked = FALSE + req_access = null + req_one_access = null + +/// Used for syndicate_access apc helper, which sets apc's required access to syndicate_access. +/obj/machinery/power/apc/proc/give_syndicate_access() + req_access = null + req_one_access = list(ACCESS_SYNDICATE) + +///Used for away_general_access apc helper, which set apc's required access to away_general_access. +/obj/machinery/power/apc/proc/give_away_engine_access() + req_access = null + req_one_access = list(ACCESS_AWAY_ENGINE) + +///Used for away_general_access air alarm helper, which set air alarm's required access to away_general_access. +/obj/machinery/power/apc/proc/give_exploration_access() + req_access = null + req_one_access = list(ACCESS_EXPLORATION) From cb6528787d8292b2ba3d4ffbf722a9c797ea3bfe Mon Sep 17 00:00:00 2001 From: Markus Date: Fri, 21 Feb 2025 13:33:44 +0100 Subject: [PATCH 2/3] now with sprites! --- _maps/map_files/EchoStation/EchoStation.dmm | 8 ++++-- _maps/map_files/FlandStation/FlandStation.dmm | 4 ++- _maps/map_files/Mining/Lavaland.dmm | 4 ++- _maps/map_files/RadStation/RadStation.dmm | 8 ++++-- code/modules/mapping/mapping_helpers.dm | 24 +++++------------- code/modules/power/apc/apc_main.dm | 2 -- icons/effects/mapping_helpers.dmi | Bin 15262 -> 16402 bytes 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/_maps/map_files/EchoStation/EchoStation.dmm b/_maps/map_files/EchoStation/EchoStation.dmm index 80e02a78507c1..d57f02a047a35 100644 --- a/_maps/map_files/EchoStation/EchoStation.dmm +++ b/_maps/map_files/EchoStation/EchoStation.dmm @@ -6203,7 +6203,9 @@ name = "Vacant Office APC"; pixel_y = 24 }, -/obj/effect/mapping_helpers/apc/discharged, +/obj/effect/mapping_helpers/apc/charge{ + charge_percentage = 0 + }, /obj/structure/light_construct{ dir = 1 }, @@ -6997,7 +6999,9 @@ anchored = 1 }, /obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/discharged, +/obj/effect/mapping_helpers/apc/charge{ + charge_percentage = 0 + }, /obj/structure/cable/yellow{ icon_state = "0-2" }, diff --git a/_maps/map_files/FlandStation/FlandStation.dmm b/_maps/map_files/FlandStation/FlandStation.dmm index 00c725220b766..18bd17186f10f 100644 --- a/_maps/map_files/FlandStation/FlandStation.dmm +++ b/_maps/map_files/FlandStation/FlandStation.dmm @@ -89560,7 +89560,9 @@ /area/maintenance/department/security/brig) "wLf" = ( /obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/discharged, +/obj/effect/mapping_helpers/apc/charge{ + charge_percentage = 0 + }, /obj/structure/cable/yellow{ icon_state = "0-2" }, diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index ff1ab687bc36e..862b17737ce61 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -2166,7 +2166,9 @@ /obj/machinery/power/apc/auto_name/directional/south{ cell_type = /obj/item/stock_parts/cell/high/empty }, -/obj/effect/mapping_helpers/apc/discharged, +/obj/effect/mapping_helpers/apc/charge{ + charge_percentage = 0 + }, /turf/open/floor/iron, /area/mine/science) "pb" = ( diff --git a/_maps/map_files/RadStation/RadStation.dmm b/_maps/map_files/RadStation/RadStation.dmm index a580ce215d52e..91cc4078b8cf1 100644 --- a/_maps/map_files/RadStation/RadStation.dmm +++ b/_maps/map_files/RadStation/RadStation.dmm @@ -14007,7 +14007,9 @@ /obj/structure/cable/yellow{ icon_state = "0-4" }, -/obj/effect/mapping_helpers/apc/discharged, +/obj/effect/mapping_helpers/apc/charge{ + charge_percentage = 0 + }, /turf/open/floor/wood, /area/vacant_room/office) "ewZ" = ( @@ -61232,7 +61234,9 @@ /obj/effect/turf_decal/siding/wood/corner{ dir = 1 }, -/obj/effect/mapping_helpers/apc/discharged, +/obj/effect/mapping_helpers/apc/charge{ + charge_percentage = 0 + }, /turf/open/floor/wood, /area/library) "tzV" = ( diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 8410cf7b2071f..b5b2c3341563a 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -328,6 +328,10 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/effect/mapping_helpers) log_mapping("[src] failed to find air alarm at [AREACOORD(src)].") qdel(src) +/obj/effect/mapping_helpers/apc + name = "apc helpers" + icon_state = "apc_helper" + /obj/effect/mapping_helpers/apc/Initialize(mapload) . = ..() if(!mapload) @@ -364,22 +368,8 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/effect/mapping_helpers) /obj/effect/mapping_helpers/apc/proc/payload(obj/machinery/power/apc/payload) return -/obj/effect/mapping_helpers/apc/discharged - name = "apc zero change helper" - icon_state = "apc_nopower" - -/obj/effect/mapping_helpers/apc/discharged/payload(obj/machinery/power/apc/apc) - var/obj/item/stock_parts/cell/C = apc.get_cell() - if(isnull(C)) - return - - C.charge = 0 - - C.update_icon() - qdel(src) - /obj/effect/mapping_helpers/apc/charge - name = "apc zero change helper" + name = "apc change helper" icon_state = "apc_nopower" var/charge_percentage = 100 @@ -393,9 +383,9 @@ CREATION_TEST_IGNORE_SUBTYPES(/obj/effect/mapping_helpers) C.update_icon() qdel(src) -/obj/effect/mapping_helpers/airalarm/unlocked +/obj/effect/mapping_helpers/apc/unlocked name = "apc unlocked interface helper" - icon_state = "apc_unlocked_interface_helper" + icon_state = "apc_unlocked_helper" /obj/effect/mapping_helpers/apc/unlocked/payload(obj/machinery/power/apc/target) if(!target.locked) diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 6137e30e92abd..24559c63dd8a0 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -679,8 +679,6 @@ /// Used for unlocked apc helper, which unlocks the apc. /obj/machinery/power/apc/proc/unlock() locked = FALSE - req_access = null - req_one_access = null /// Used for syndicate_access apc helper, which sets apc's required access to syndicate_access. /obj/machinery/power/apc/proc/give_syndicate_access() diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index 7bbf36ca43dd391927674848f667efea9e26e66f..162df2e994879888cc40b59b532aa4284793460f 100644 GIT binary patch literal 16402 zcma)jbyQSQ`|cSA3F(kdk&;G`4rxJBluiL9q>*NZk}l~SQb43Zx=~t6M7q0&9P%E% z-?#1`cip?zoweZ1oSC!F-fuqpeV-Gip{9uUkm?}-0C+EzdZ3nPJDXef2^&Kc!Gk8q;|PCA>qy)+zk(ecRC`YQGXI3! z@P?YSE31=ryWi!5tN`;+mYZS^IvXe|8MJweA+KYes!txMKPljBbh)_k@2x%vj! zXjt7+gRh?x&GLUS<4G-N-F-O6GNVX;(ei*0W`XzVB>0$$iQxuQO2eivZ%d7$nw}x? zghpg+<#no^Cd<`Z76Zw${-EHhwfx;eJg9Y++Pi>PlKU>)ICxn39S5hrbrn|1V$x4l zfB!_26K5E^@N{^Ut0;_0N+2FQqfn=!U>rAujwQK0mpG)hjiALfP z=Dj@Zv#U>SwKS0KK1K|s>&dA*XmY-=8mByAE*0XfJ|=RK@jA#dnY6#DDuzKx-e>6X zMgF1%00!Wt+zV}wjJ+0bAJU1NySp?y;yea_bfq9dVl?6h4G)wjdZV3DiC9=af%_}WKyEy4A5lh(S&Xz?-g8hLSWNGjV- zcFsq#z6AHiA3)il8Y{O@xWZH0yu)WZxof8~iGAU(_!?>OoerJpm0LLbZhO}}m76!m2d@G#AyjaIe}mtPdMul`M_ESMLp$rrIZ8_^tz7F0|+N=FwJX`k*RgHQv z80uFq64#M{8YePw(K_+xxnms5Exq*q z!TIGEOh73z>QLEMbfx?INfyP;CrbO2tH%hxu32)v%RT-<<%6)V&(!2CiL^a|AO0;G zUPc_3&HR+uTY;maJT%yKthvLs;~HK=%t1Zp+OIR%&ay-@4y#+<<15~FBm3r96Yrj~ zIQ%`r1Q-bR85rE`bGY<9(9%3eYLN6O)u%{$ljs!x=iRt9jCV(C!pL-OJtl_WWJqk( zrDD+1SPa+VLz@wgeetp#Pduuf^!AV6Itvblp+sY6a#7?AU%$(jaxgwy)-;ik9lXk*eLv2XZCsTEu2iJYU;gsWK51gl1_hCWAiT8BDPrf1gVKEi7@nitNv^ zVdDk9d%5whw;G0coH#PeITlGw!rSgVW2bZFh+gaSt(_*STZ`y0f$Ei>zA08@v2P5g(%otbA_ZLHjvS`C(#*ZVMH|qqBDleTv)O zg>B%ZdL~07Tur1?oYCC#_< z?vG-Hb}pbkO$bZ9SeN)Vo##S%_!Ol0EaeW*2dZ+dTS=20mMw(P3d`YBR10s&5;58} zpxJ+Zp7Xt6GrgSIFdu!o*c3JFmCvJp+L+4{Kq!x~xa4m@gxbt264eV66dAx@7;N$*k@;sf)iFa6hRN62#9e}@&0ZeP=lVroI^ z(8jH`4j={} zkM_P0)tl`{G&3^vt1~EM=X_vlow?w&@4ulU|8z?NDiYHq$yDj^Uthck;zj#ZD&9Y5 zQ~DqDJY77QxUKUo^x%YL52%-kNJs+Xm=w+1;Sh@Fb`-GTBW(k};dgeo|}bObp_2X6bH?$ii**--__;q~RWcHH)B z!(sn9U8kaueV&hacR%N`5q5UPKY%a|{^zhe-0El4giXh76aoT|3OV|Dzt(Yd!dkb) z*UN9(KG@qUSX;CI&XR~AVO0ZwzhrhY~aD(hS;AGzEFBz^sDw6ICJIB%`4!&W+n=L;ptl3F^_{3m<)w=y9YO-U0WL zqQ}aQg40ydwXYq2yxw>r`?_+iU6Ryq9gKtcku)O20I&0^l7NuVFa$F+x@b$%qg;QGaj`QAKtGb>NBk%CQg>#Eo*tEBg4tD{Zg{kh|=-Ve#Atb6<) z%}T&u&XuUsmaQk6e5aM-Xer!$k48yz0_x9W+p#vErjH@JYsnPM%30KsXrM4E&IWNU z#8X0BCMGr~%jx%DzI*|SLuZyYQN%v461k~bQ*!1B1PDfn|>eTK7fhsuqNz!VSlIzr3uHAr$!n3%a<7UfS)Ch zU-;0Si>MyHN|+wB?D&c1=lV+e;447so9tzwbw(YC=pmUHhBD6I){S6#NfY?vK74HC zr;J1!ql0fZ0C3Neo6EFoS>&cQ`eyb5_|tgC`oE1nWNBmOF3ak9Bo+74Uy0L?v2}$> z0fPYpgeP^wKj~uzPkYY`N3lOtiV*FQ65#UVhji6Uc>SRuW;XIwaK)_R9B_*G?caBR z8SBrzf4on1j3o$~%jXuHK@X3o^QI4jlLb%Dx)spS{-nXx(mx0-fL`b)Azj6pqD!as z`Cn)DJp!Wu$^`F3@NrlAyPUWs9&eaicV26G_Pt+fSv3qBLm$^LO|oqGft^^-vZT+8 z_!XG`I%J?$>ah*1$`WYA<{WUAy(1WLkQ`aL+!^^y4**U|-BPJks&~U$7{CbZjj7)| z!rbj zS<@RmqBa8U7t5<@Ay$n_3BH1ZhT7KKJ z`~a2nnf44K$Qt@t?nZMv?XBl^i&fvGnjfz>Fk5OrQ(H(b4f~OXKYe6h{IPr%C!bZ> z*i@yp6&W}M?VTAPsO6QNcFJzSXKNTuv`3zA|A-|g-t=PM5};aA+2KIwPWkuVIS<*Y zzK^!=qY$>S>NsSNDSxitIyGFLc%3Z>k zGgw%D|9G=+Ol2mbb^a|5wmcxzCh6ijAh&-$WNIAU2f!gX2!U7kV-?(wC7nzpd=&cV z`WaPaa+t!mUz!Hd(^twk^B0J;FT z6}yhI9(8|y&`R@6ze(`2R@&1v8J7%EJCI^?Ht5U z7kHYtH7jMu<~mXeyyya!wultrnYYEsJlvH#Yk9@x)(F}Cyz%s%%xCCv2gWvQtdXe= z(QL52B`%yz7pB$pn``}nI$XFDDCfyjvlv??49b6`CrT6Iz}FsTg{Q5GI4B`igC7BG zQs-AzgiMa(HI^KavHv3<2TEY2*X7(ImJhF^BBzkkTu|N6{K+yg)2L&kuV{~%fv>6< zf;;GsoPK}#^v&Or+K@WV>_GVaq3HgzLa)#jC}wb&K!$XK`W}9UIYBh>4-x=-U3KeM z+SP)06tCPTVeBq10g@x@0yeXy#1p4?-C{%t_osKU@3WE0otRQdO88k z+hWMhLKbAT9Udl)&PIxwY6zz^x8eZVXNO4-w5Oqyh65I_uHUE?WL%S&w4&Tp``+I) z>?$mtJmNK2Y3k1%+a-_^(T`YIKmwc|zq4$vNWzpzCW!&BvmZ-W5o(eqcQ4{*>eVI( z$cdI{I^3M^a*ih_YrJQ9-nOTbNI+>h_7TncWMSQV)m zO}0@X1;h5{KYr!;oD2CFJ~kU1baR~!TUNbkGd$LhPq^lpZ2s$->+u?9uSVPN4ue|R ziZ9H(D8vI-nLlv=Dl;O&Jg;Brs_MN1wbzL=7dve-MFSW2=qXZBPFPV6{ENLdWId-p zck?n0pHxwD9I)HuMzUTzqrCH9j(Proa;*$_Fi96?iZn9ID&MB&8Sv}>O3pd9!(8Yt zmT0#0=lys;^}>l`1B`Z=gv+!~ytrS_H!Ww*Zsb|LPO3ga+nZ8pX@8VM+NZ3W%yAT- zzT6OwO(pn;h=mjOa(bk-)m&-K|B7B=bv;AGW%_kt1V=as#FPsC9cM7tD2hS_9-h_JN?=!f$qhV zvzxiUyw$=bQtYXF|$ws$`13bJ?au02JHB zy_h>x`MI>bj=MH<=kDq@S@Y<9Pw(k0@2fibq384X-pDellm(8mD0DH( zgU(?vZZhy_-v_9A`3((kj{&sY>(z{t_?=O5p0{5Q*XmYFl0hpw?sFk{7~q|&p+Vul z?zMr--=f{S7Fg;d9e$s?F^$r-!&^LD_ws^$ym;}u;4!W^wh}6>{HP=dFT$=~5fcsW z-Kn90OGM_4P4a8d5KPjPYlYFr26^&(>SrlYiihWG$?-fseJ}G3RMv2q|8t#q{UjF9 zm?Zh^V8=tYEy&`z@pjxxw)%>|7!REHD=$3>{QC=?>W1VCyY-QYeRXfq`6)qI;fn8Q zyq(5kXThMc6)tVz{E!x%l&+W|<--tD)nipCoJ|n9C9p)O8^CPR;8Q~0?t`4=fI?o3 z;4lQw(9Y?5cnrwdkBac3ZamglH+GrS@mW1jzYx^_`VrA`-I~;0wd$Q0fob|N!}C=7 z0EeNDjy7jeefR$gX88GUH#av_vXr>c1(7c)&9{^fYFFL+#%G}n{RhVVV*e={Ep7)k zTXZHr<=e|T&pl(6()imNPk`3gQzTTx-eZD7FW6Z&K&}mp{sFKiTU5mG6J|e9`j=oM zJ2h&96hA)O>R2#asC^}CbCiGUfa^!6t}PYgpJzo@uh`%@@k(p$g2SY*CCO(EDfkgh zcgEAm_o7Kq7X^FE_0@g-NbwV|UDTs(q@V*@eR31VtbunydLybbxb4DABt+fQ=QI-s z5&3}7`%F81VGZ3G@zzsDuk|k-ytd%{&F8_h#eCHTll4!fNL{4rmtio~4ouTa2CcQ- z7<`J+_2MbCeUK6HJl�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 G`2PU8=Z3og From 4395ca3cd064e75acd5749ffa3d71df6986e085c Mon Sep 17 00:00:00 2001 From: Markus Date: Fri, 21 Feb 2025 14:14:40 +0100 Subject: [PATCH 3/3] fixes air alarms not properly setting access --- code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 95abc99ca066c..42d709582c90f 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -676,11 +676,13 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) /// Used for syndicate_access air alarm helper, which sets air alarm's required access to syndicate_access. /obj/machinery/airalarm/proc/give_syndicate_access() - req_access = list(ACCESS_SYNDICATE) + req_access = null + req_one_access = list(ACCESS_SYNDICATE) ///Used for away_general_access air alarm helper, which set air alarm's required access to away_general_access. /obj/machinery/airalarm/proc/give_away_general_access() - req_access = list(ACCESS_AWAY_GENERAL) + req_access = null + req_one_access = list(ACCESS_AWAY_GENERAL) ///Used for engine_access air alarm helper, which set air alarm's required access to away_general_access. /obj/machinery/airalarm/proc/give_engine_access()