X?rF3j+g#2XXg_pTn%ONDvbb zsN-VV_AlVNUR+bc>v$sR=@xU{_ z#|Ks3+iUxOIFZLe`dpI==VVTC$I46H?n?p~ySJv%gNhw~w~6ZZ+-S$j=R~B#u2Fvk z#vKji4qgBrlYxRWwL`et#}#!mBcLhjtflq!cNSGR>*zC-BBA<`Wl_1HI)|Pp!^MMB zFdT|JhDVBt&tmuG;v&0C%&ssFK4;uQ+H3oYru?Z(e)s)u87<|2{>rm azcd!|Mm z$&;!98yy?V`2Fg`$=dha=%{4sggDm>_M(<0+eocnF-*ki1n!bPwmsbKmX;>$-Gz># zboV|T-V=d#rfM=K3k)9xOtMQ^>crg3*=7Ty=l*|qJHCa=B6XKv)q+nE_5 !Oa?dA`q0lJ?uo%zCx8LGZ<8h78HRdex{&_=n!ejMoxvNZ(<8?sJfE&1Ld-7 z3ml|;1>;qB*)JN`{dH0U1X0CW=b$4>iIBdpLQ`N&5mTKl6yiqj995*$!j}FASnD>b zR#U5M)^_R+`ZssVSso756%~AZ8d*N_rQ++G+vF(_N^SCzujN7VKc iu%w z$6L!mo9eap)e*0xBCh~I%#Zu${H~THTqpY#jx0t(?vPk3MMf+88hmjAnj9CJC%Nyt zVZwYyV}wv6w-6Ex7a+aWdXrt>PygBpvl)=?G8rUHu6QEY`KY{Fwfs%52|Mj19G8^c zDsg^AKUujkES(%R?Ih6c3q^O^$cC30^Ji=XR@YO|#9p=PQ9Uh|BK+$tiX>_i5LBXc z)dAdLWUbj!{J$0OHt^s7&9bHJ>7{i3qu)>ZI#k6ESr|d2Pm;dvoXt$|0hyHaCVHy3 z>jeq_nx?v|c3XGEPz6@bFnSfKW5qvhqLL)xBL4D@r1aV6!Yi%KM#DjTK1H<5@0;Ps zRHVY#+;^Lb#KVqC@#aVRR;aQw;=*_>$_+}v43ZZ9wHP&be|T{(P=WQ~RZ{2Us7Tx{ z$yO(qgv}=&h9I$RNLPyctxL+cK ?`>Hbz>izT#maLDS{{&awo{`FenTi0%=-tSEDwE(RYytJ|7 zdnIyVY~W^18&Quv`-=Vk-o$KeT4h^8WEL^yuoX}}>uxZ)+mr@d!+de%5HsCqk&pk+ z7w1pgRD&A3-h5@;zHyGQT%HDSvR6F5P)wCa_N`Ee{h>N+?&Kx_&3~a%gRfkjpOpLI zciz>24@vIO#LR_Cp3?F~mPE5_QXELKx!J*z`-AIcB7#^y4YI(JXlz?;_Ua$o<>pka zI|@b|Qoa3ZeAVOjQi_^ZGPKg$f$Qwus%tOYO#N#*tS N=M|dbRVWoWum>jg>|?|%y43jG9nA(|T!K6JWGEkBp|S^RAdjF6e@W^j zycfX4iZwiv+mmqlpJEolzPx<#D=}5)9e&-|p2b|VdXHqZ!eiC}L|9hZD|*CGs8L-1 z9G`7t_7P*z!3+uF$MmrY?k@@YKU-=8d)-jwwIlJJI%m!g2?%>~R)FT&*lWf=Ri><} ztE9g=#sq1+gi*t5Bkts#0W|U!X9j({9{4s?X~4LWl2kpN^k$OnwEdWl$|~|T**r_) zTMrxrW2(&L1$c{I^)t-NSIvl0L=iXZp;!G+jXY?d6-E03e+qWDefVxxtosv;gyi~G zLaI`pn7QwjO%Xa(L6|nGF2PTPp24cN+WYKW(KKo4ZL7=r3b_{=GMPTScFN=bNN36; zea3CXCl_P~0MFFaDhBe$R6^K^5u>4HH)C76v>e3OC5QJsyt_{!tG@|De@JKYp%(VW zPiKDrej3425HcuEj;}riIdzayCr~8#RP$VKeX*g{joATcJ2BKd>)9`vj?*KF)1VCa zYiZ%j2Apr@(fO0(6m +a0aaGXRp7x3zubsWQle@aXs_ z_q<$F>lRt;jbO0!7_zIQrW9ahuQIb$^FV!zUW@4l?YH1Pzswg5@>z@Zb>=I0H%k!3 z!D*qc^;&BEN|2&jPMs$)pBO<*Y7%Z)g?DtEMPCJ#?$|<5?Bnx|iU^<{rVN% +tU#abJu))WBo!xgxk#TL~sM{KQa)|dUxF{ zu6V!1*%}2}@VdN#K3JiGAlZcuFu>o45iPKj9dEUeV;ck7zi}7P#s8Mzrueao%81^c zn^JyEN}$$#MFB+LbB4gF*H=j!qDB@_wzB-T&>I^uCOY);b}z~^hRJxxtpnH;jLNRY z<=mzBwA $e~XWPg1>45cK%j42=g{w{!oo80YlpJdJ*MwBYAQs7mhF}@p^r!A>TO^a6I~J zH_8Yxa@fbGWDwa0A<^_42|{2$pLl(sDDxwhwpF-bOg9r}AMzuEw2MVtPNUcUoDEKO zH7o*jK&6_joMIVdASilWSax(lasQWMX*%GxQr3r9|6Eiz Bm^Y-J9B@HOvU`${4@J$ES42d=y3jR=y~zA3yjQVqSA-{?_-7 zcQ-lPVB$1mu;yfVglv(`;T?Gl8D!po@w&O+Xw=Oca2`5_pG%Ly9glxik^m^n2+tLh zmAJL2eh2h6V;#eI=M?_Jo`=%SMZ2{;t;A4L~Vi7i@2Vpgc{bgSbwC3woVr3!KeA z)Pao*Oc{s#bZO9F{Kw2$2kcy>wjqQ9ztCrXGv_q`I7*_7>UXZxd q8-osd)q!6o=g!KE=D5ccXqlZjeL!RLEm2I+`OR=qk~T=6 zbrQ&bHu~+Xu1E59muhdCN`2SF3Uu|rCj{X=(RY!BYD8MIt^5B;UMNIk>yG>%daDSc zX0uV7Ryv_fyCH8^C=8UFYyq`Yj^(+W*Yv|=^k#-9E#(||I*R-Q<1tB(3m^9!5_s$Z zQ;`+vQ!(D$ic3FcJ1N?5-Bl*!C^AHt`LICFil2vT!@m||!>*AL5Nf0b+4epkk2i|! z>8?$;m!hRcYv#vg5`&2_pMc @NO%0moMQC$gVSMzL2M( zV%PgMfK2Y(Tv{!<0RXY}j{(5u!Gj}+hUqijE6I&IG0LruzXwXjn9*N10U)K`#V!DZ zSWgh<-~iLNX6`2n8PDS%$-9V8?73q9bQ66G8Zg`3zTF+`YMRPvbO$bpS!mAl1EWS` z2=lioJCW*gfeRGK;brv{Q}w&+a-vX(qdaNWMJ#B|MeHKdl_4hlIx6%Y&IpqjLGs)7 zw3N031^%2J@=s?YQadt`Qv3LfXl@DL%kkF`5S?G-4Zr)p9mURH-It;hl{*LH(F1Z* zV#9`YX~GNd6U_g=&IKPe@on!<;&Ku(d|BO^_i``d{nil!a;<3{N+y1FXoBfA7Y!5L zhyX4@-;TAQ9{!r`j3!@%nBEZ~qfhY1D-U552-% UKO`&x`URD>bsg#^RTh-nibokaqu5XlEaM}^l#@WR~cLdAgA7`ko!>xkNi zffyuxiYh@nUFz)db@QbkCJ>QB{i7`f@ypt_irE#jCkbsm<&~vimG }X^|z^dx2uw+=9B% zY60?~hIG=AyRu}gM=ah1YV7Uwv&m#5M;$*vxV~k|gl`d1h|MBsW1&QcPyx)xG+^WV z69hMXMeA|aZ5Z{Rkw)VG{v*gZy8bT(lD(`IWl6|u`s2AQzlZlR&HD9*>}@R)Cs7?d zuohrD-4^`EKf57}iDL4NJYKk^RW!j13jgx!M_FcfSIf8sItYrV{+l&mOH#q;TBn64 zfnSK`Z{>yr?kt58g30+O-O4V+Fq8HeBbZ#Xth{@g`k~r2x6EVu#1ql5=aWX~DvueC zGa04nv69a$>r~S;xiT!>3aMnQ>;+ Wpdosm`>AN%Wvs0)WHaHRM~0fN663y?VkW3DWCsD*z0yQRWU8L~W|v z>t>FPQnaN66AvN7&1lDn9Y}{KeR`r0ZB*$*ESn~Nc$v1bwFv28Ve@_&uG*bhXnzai z)!`UpcX6>Hs?J3c-pAW8p!@UVxo2qEH^!$ILs}{RZ+aOZ>|%Qy@ijc`-Twt<8Bwbk zf(9Q>RxNI46RlW0*NdS!k^JwwTe|%3kVzZ z)se{)? zQd-JP`{sk4Abu0e!i@a)|HQBWX<%@+(9%;5w=B8wsvJZW5mLUp>|z<$D(3h2XJWu| z^RE`zGW=wu?r!kQD}BaSU}O{40l66h%I5fd*#^1L{ZBl2H1s~{qafY+@4ecs?N7;d zFSNfgUXN>zP4Fql4;J^y;&^s`AZx*h=q-l !*_N^7t`iZ8mAgYulcW zV%ndcmaa7ahHS)$H3(~T(n$jsL{!7&+4hu{w>CW;U7OCcLIxoBh@hd`BC+Ev|4`3= z@2nL882as=(({2kiWh#LP)e}se6kF8tqR+T0u%PZ`);c0R8r<>k~B)oBxI`Hi!3aX z$pJVRe5!mrF@8_MC>Lz7I*F#szXV(R?0O9RG(*Zr$RFC*BTsKY$~hl)=r8a;5Ncb+Ea+TOTGr z11xJVS;XJ^h%r1?){f^Gt m>oRzv$7*i%oW=A{AKegj2ge|E+Abo@$d>V z{5Eg+ Y7O#g-3RnFYQ#t#{ +%9_XrYCH9F9SJertF-T-|b2D=DQTu_H2 z8U&NGsrpKF2GB3O`A(3Bb-bd-U80%;Wa2w{!lU-#=oMFc<2BE-sY@TuGr`E$%cc=Y zCoHxpx~pq66Y4BG&Q7f6;*Sq6rJikgmt0(+XAFNNk=!l(x6}$%>!e=0_6A~$m1HI5 z`WhQ9NJY1%;F)~oYn8Izi#2elKg;Ug@%v@sb2jvB<)C+Wdg@Qj*I22a->rDaCgTR4 zTsHJvF1gf57_l{0*EpL! dkqAc-BAzweLZ& z?Iks<{2Mf`_F=*A<9yZWGlOZg>pri$B08)=njfQXzUS_GR;TCvih0@3!FlECTFdf* zm<-txh~EF*!h2r4ZMXerKy6ma14HF0db$=>nf$l6V`L@g?{H6#*^zJTW!t;-ZSbaU zIpYuJ3_Q31MJ@9FNR2j28_?nWn+pKYTi5RbsErY OSz|d*Z;s9TX=+XVqERnhzHi&E_^pn)r{V*T?%UpNIQfyKS zCP-6ubs62)`*2}5@&NnB`e6~;26xA9+uQ0Mcr-}|geZ_UgbI0;=`f;yMZEAi=w#-t zgB$&5+)OHoXRgJ?`TX2=0Zo&GFSaAkbvaKr?Rx&cuikzP+8Vj)nRSJf=R{Gm6k|x+ zY4*^X3&O|e&a*GKfsq~O*Okvo8yY0VmHOT3)1UiINeYXalr*YddB!Z&^fs=ZG=lmo zE>k@01MSa03@U%|CwzB{V&t&kWuAcyGuH3&z^qYHWSns^h|r0iNe)k)9$~j54KC3O z3n&_1VVOnaQ5Q)XZ`>u_`)5wiC5=Jb;}Rj&x~(jeVk|V=+)7wTrgQbz+=sK#>^55` zA9ITnDwB`%@1=M9JS63~#u5vf;>>ct&mJluW>gGqeb&P)f=o$&2|ftgXecH7zLBNo z^VQQotrXg}?U0$NKib`m_f5F`UM?HauACNC&s=IZvvoS5)cL?_TzZCB!MjeaZ6&_1 z_u7II629=aL6&oRVwTpH!E2g70Pyz3UjDB564jn$TE*QPDQ)`R(aleL# qJ;Zec?q>zBnoWA!ueS-V6v*PRU9^NLmM#8Yml)B%BX+3q97baB!+~ zy^UWGHKA6t0cvy>I$M2qkt^9%{JhG?^iAz^zkc+K%QDA}(Jw#2#2PGQA# Date: Wed, 21 Apr 2021 23:42:20 +0100 Subject: [PATCH 02/17] bad code, but tidier code --- code/game/machinery/Beacon.dm | 2 +- code/game/machinery/magnet.dm | 2 +- code/game/machinery/navbeacon.dm | 2 +- code/game/objects/structures/safe.dm | 2 +- code/game/turfs/simulated/floor/plating.dm | 6 ++++-- code/game/turfs/simulated/floor/transparent.dm | 1 + code/game/turfs/turf.dm | 1 + code/modules/atmospherics/machinery/atmospherics.dm | 2 +- code/modules/atmospherics/machinery/pipes/cap.dm | 2 +- code/modules/atmospherics/machinery/pipes/manifold.dm | 2 +- code/modules/atmospherics/machinery/pipes/manifold4w.dm | 2 +- .../atmospherics/machinery/pipes/simple/pipe_simple.dm | 2 +- code/modules/power/cable.dm | 6 +++--- code/modules/power/terminal.dm | 2 +- code/modules/recycling/disposal.dm | 8 ++++---- 15 files changed, 23 insertions(+), 19 deletions(-) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 83ff9fcf168..94e3b354d47 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -26,7 +26,7 @@ Beacon.syndicate = syndicate Beacon.area_bypass = area_bypass Beacon.cc_beacon = cc_beacon - if(!istype(T, /turf/simulated/floor/transparent)) + if(!T.transparent_floor) hide(T.intact) /obj/machinery/bluespace_beacon/proc/destroy_beacon() diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index a9eb8b4de3c..c6ae20c6831 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -32,7 +32,7 @@ /obj/machinery/magnetic_module/New() ..() var/turf/T = loc - if(!istype(T, /turf/simulated/floor/transparent)) + if(!T.transparent_floor) hide(T.intact) center = T diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index ef3d6928aa1..c3d64752f4e 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -26,7 +26,7 @@ set_codes() var/turf/T = loc - if(!istype(T, /turf/simulated/floor/transparent)) + if(!T.transparent_floor) hide(T.intact) if(!codes || !codes.len) log_runtime(EXCEPTION("Empty codes datum at ([x],[y],[z])"), src, list("codes_txt: '[codes_txt]'")) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 252da89083a..b06df5ecc06 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -368,7 +368,7 @@ GLOBAL_LIST_EMPTY(safes) /obj/structure/safe/floor/Initialize() . = ..() var/turf/T = loc - if(!istype(T, /turf/simulated/floor/transparent)) + if(!T.transparent_floor) hide(T.intact) /obj/structure/safe/floor/hide(intact) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 27f860e53ad..96d7339b876 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -76,7 +76,7 @@ return TRUE var/obj/item/stack/sheet/glass/R = C if(R.get_amount() < 2) - to_chat(user, "You need two glass to make a glass floor!") + to_chat(user, "You need two sheets of glass to build a glass floor!") return TRUE else to_chat(user, "You begin swapping the plating for glass...") @@ -86,6 +86,7 @@ playsound(src, C.usesound, 80, 1) R.use(2) to_chat(user, "You swap the plating for glass.") + new /obj/item/stack/sheet/metal(src, 2) return TRUE else if(istype(C, /obj/item/stack/sheet/rglass)) @@ -94,7 +95,7 @@ return TRUE var/obj/item/stack/sheet/rglass/R = C if(R.get_amount() < 2) - to_chat(user, "You need two reinforced glass to make a reinforced glass floor!") + to_chat(user, "You need two sheets of reinforced glass to build a reinforced glass floor!") return TRUE else to_chat(user, "You begin swapping the plating for reinforced glass...") @@ -104,6 +105,7 @@ playsound(src, C.usesound, 80, 1) R.use(2) to_chat(user, "You swap the plating for reinforced glass.") + new /obj/item/stack/sheet/metal(src, 2) return TRUE /turf/simulated/floor/plating/screwdriver_act(mob/user, obj/item/I) diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm index 8e9b6d10e43..ead098688ed 100644 --- a/code/game/turfs/simulated/floor/transparent.dm +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -13,6 +13,7 @@ layer = TRANSPARENT_TURF_LAYER keep_dir = FALSE intact = FALSE + transparent_floor = TRUE /turf/simulated/floor/transparent/glass/Initialize(mapload) . = ..() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 4678bd94ce4..36381b72ecc 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -6,6 +6,7 @@ var/intact = TRUE var/turf/baseturf = /turf/space var/slowdown = 0 //negative for faster, positive for slower + var/transparent_floor = FALSE //true for transparent floors ///Properties for open tiles (/floor) /// All the gas vars, on the turf, are meant to be utilized for initializing a gas datum and setting its first gas values; the turf vars are never further modified at runtime; it is never directly used for calculations by the atmospherics system. diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm index 8e965c88685..46c44ae2c0d 100644 --- a/code/modules/atmospherics/machinery/atmospherics.dm +++ b/code/modules/atmospherics/machinery/atmospherics.dm @@ -165,7 +165,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/attackby(obj/item/W, mob/user) if(can_unwrench && istype(W, /obj/item/wrench)) var/turf/T = get_turf(src) - if(istype(T, /turf/simulated/floor/transparent)) + if(T.transparent_floor) to_chat(user, "You must remove the glass first.") return if(level == 1 && isturf(T) && T.intact) diff --git a/code/modules/atmospherics/machinery/pipes/cap.dm b/code/modules/atmospherics/machinery/pipes/cap.dm index bf3b7f43d2e..ef04c024708 100644 --- a/code/modules/atmospherics/machinery/pipes/cap.dm +++ b/code/modules/atmospherics/machinery/pipes/cap.dm @@ -76,7 +76,7 @@ break var/turf/T = get_turf(src) // hide if turf is not intact - if(!istype(T) || istype(T, /turf/simulated/floor/transparent)) + if(!istype(T) || T.transparent_floor) return hide(T.intact) update_icon() diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index b28f18f92ba..0acbcd9884d 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -55,7 +55,7 @@ node3 = target break var/turf/T = src.loc // hide if turf is not intact - if(istype(T, /turf/simulated/floor/transparent)) + if(T.transparent_floor) return hide(T.intact) update_icon() diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index 75f2db8aabf..c6daf11da6e 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -162,7 +162,7 @@ break var/turf/T = src.loc // hide if turf is not intact - if(!istype(T, /turf/simulated/floor/transparent)) + if(!T.transparent_floor) hide(T.intact) update_icon() diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm index a4ecfc583d9..7e14946e61e 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm @@ -68,7 +68,7 @@ break var/turf/T = loc // hide if turf is not intact - if(!istype(T, /turf/simulated/floor/transparent)) + if(!T.transparent_floor) hide(T.intact) update_icon() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b48c03376cf..50d7ff6db8d 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -70,7 +70,7 @@ By design, d1 is the smallest direction and d2 is the highest var/turf/T = get_turf(src) // hide if turf is not intact LAZYADD(GLOB.cable_list, src) //add it to the global cable list - if(istype(T, /turf/simulated/floor/transparent)) + if(T.transparent_floor) return if(level == 1) hide(T.intact) @@ -165,7 +165,7 @@ By design, d1 is the smallest direction and d2 is the highest // /obj/structure/cable/attackby(obj/item/W, mob/user) var/turf/T = get_turf(src) - if(istype(T, /turf/simulated/floor/transparent)) + if(T.transparent_floor) to_chat(user, "You must remove the glass first.") return if(T.intact) @@ -210,7 +210,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/wirecutter_act(mob/user, obj/item/I) . = TRUE var/turf/T = get_turf(src) - if(istype(T, /turf/simulated/floor/transparent)) + if(T.transparent_floor) to_chat(user, "You must remove the glass first.") return if(T.intact) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index b2284eba265..d8fc709a656 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -15,7 +15,7 @@ /obj/machinery/power/terminal/Initialize(mapload) . = ..() var/turf/T = get_turf(src) - if(istype(T, /turf/simulated/floor/transparent)) + if(T.transparent_floor) return if(level == 1) hide(T.intact) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index f259ee40ac1..2b3f4765c91 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -758,7 +758,7 @@ // update the icon_state to reflect hidden status /obj/structure/disposalpipe/proc/update() var/turf/T = get_turf(src) - if(istype(T, /turf/simulated/floor/transparent)) + if(T.transparent_floor) update_icon() return hide(T.intact && !istype(T, /turf/space)) // space never hides pipes @@ -893,8 +893,8 @@ /obj/structure/disposalpipe/attackby(obj/item/I, mob/user, params) var/turf/T = get_turf(src) - if(T.intact || istype(T, /turf/simulated/floor/transparent)) - to_chat(user, "You must remove the plating first.") + if(T.intact || T.transparent_floor) + to_chat(user, "You must remove the [T.transparent_floor ? "glass": "plating"] first.") return // prevent interaction with T-scanner revealed pipes and pipes under glass add_fingerprint(user) @@ -904,7 +904,7 @@ var/turf/T = get_turf(src) if(!I.tool_use_check(user, 0)) return - if(istype(T, /turf/simulated/floor/transparent)) + if(T.transparent_floor) to_chat(user, "You must remove the glass first.") return WELDER_ATTEMPT_SLICING_MESSAGE From ae3f42caa993705a3f04e76a972edcc9a6b8afa3 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Thu, 22 Apr 2021 08:56:20 +0100 Subject: [PATCH 03/17] made this work --- .../game/turfs/simulated/floor/transparent.dm | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm index ead098688ed..cab4bad2390 100644 --- a/code/game/turfs/simulated/floor/transparent.dm +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -27,19 +27,35 @@ if(!C || !user) return if(istype(C, /obj/item/crowbar)) - to_chat(user, "You begin removing the glass...") - playsound(src, C.usesound, 80, 1) - if(do_after(user, 30 * C.toolspeed, target = src)) - if(!istype(src, /turf/simulated/floor/transparent)) + var/obj/item/stack/R = user.get_inactive_hand() + if(istype(R, /obj/item/stack/sheet/metal)) + if(R.get_amount() < 2) //not enough metal in the stack + to_chat(user, "You also need to hold two sheets of metal to dismantle a glass floor!") return - if(istype(src, /turf/simulated/floor/transparent/glass/reinforced)) - new /obj/item/stack/sheet/rglass(src, 2) else - new /obj/item/stack/sheet/glass(src, 2) - ChangeTurf(/turf/simulated/floor/plating) + to_chat(user, "You begin replacing the glass...") + playsound(src, C.usesound, 80, 1) + if(do_after(user, 30 * C.toolspeed, target = src)) + if(!src.transparent_floor) + return + if(istype(src, /turf/simulated/floor/transparent/glass/reinforced)) + new /obj/item/stack/sheet/rglass(src, 2) + else + new /obj/item/stack/sheet/glass(src, 2) + R.use(2) + ChangeTurf(/turf/simulated/floor/plating) + else //not holding metal at all + to_chat(user, "You also need to hold two sheets of metal to dismantle a glass floor!") + return /turf/simulated/floor/transparent/glass/reinforced name = "reinforced glass floor" desc = "Do jump on it, it can take it. Promise..." icon = 'icons/turf/floors/reinf_glass.dmi' + thermal_conductivity = 0.025 + heat_capacity = 325000 + +/turf/simulated/floor/transparent/glass/reinforced/acid_act(acidpwr, acid_volume) + acidpwr = min(acidpwr, 50) + . = ..() From cce71b734d11770a14a5b6b1ad97b21a53bc9ec0 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Thu, 22 Apr 2021 10:20:45 +0100 Subject: [PATCH 04/17] no pipe interaction, metal swapping, transparency --- .../game/turfs/simulated/floor/transparent.dm | 4 ++-- .../atmospherics/machinery/atmospherics.dm | 11 +++++++---- icons/turf/floors/glass.dmi | Bin 3595 -> 3595 bytes 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm index cab4bad2390..58b9b718b71 100644 --- a/code/game/turfs/simulated/floor/transparent.dm +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -8,8 +8,8 @@ smooth = SMOOTH_MORE canSmoothWith = list(/turf/simulated/floor/transparent) footstep = FOOTSTEP_PLATING - light_power = 0.75 - light_range = 2 + light_power = 0.45 + light_range = 3 layer = TRANSPARENT_TURF_LAYER keep_dir = FALSE intact = FALSE diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm index 46c44ae2c0d..652766e6e25 100644 --- a/code/modules/atmospherics/machinery/atmospherics.dm +++ b/code/modules/atmospherics/machinery/atmospherics.dm @@ -163,14 +163,14 @@ Pipelines + Other Objects -> Pipe network //(De)construction /obj/machinery/atmospherics/attackby(obj/item/W, mob/user) + var/turf/T = get_turf(src) if(can_unwrench && istype(W, /obj/item/wrench)) - var/turf/T = get_turf(src) if(T.transparent_floor) to_chat(user, "You must remove the glass first.") return if(level == 1 && isturf(T) && T.intact) to_chat(user, "You must remove the plating first.") - return 1 + return var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() add_fingerprint(user) @@ -184,14 +184,14 @@ Pipelines + Other Objects -> Pipe network playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You begin to unfasten \the [src]...") if(internal_pressure > 2*ONE_ATMOSPHERE) - to_chat(user, "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?") + to_chat(user, "As you begin unwrenching \the [src] a gust of air blows in your face... maybe you should reconsider?") unsafe_wrenching = TRUE //Oh dear oh dear if(do_after(user, 40 * W.toolspeed, target = src) && !QDELETED(src)) user.visible_message( \ "[user] unfastens \the [src].", \ "You have unfastened \the [src].", \ - "You hear ratchet.") + "You hear ratcheting.") investigate_log("was REMOVED by [key_name(usr)]", "atmos") for(var/obj/item/clothing/shoes/magboots/usermagboots in user.get_equipped_items()) @@ -206,6 +206,9 @@ Pipelines + Other Objects -> Pipe network unsafe_pressure_release(user,internal_pressure) deconstruct(TRUE) else + if(T.transparent_floor) + to_chat(user, "You must remove the glass first.") + return return ..() //Called when an atmospherics object is unwrenched while having a large pressure difference diff --git a/icons/turf/floors/glass.dmi b/icons/turf/floors/glass.dmi index 2f25a8ec7eb3ce224c73dfb2559febdc1cd7dc22..5d1e0ceac13ff9954e7de2357f4380c21be6ed1d 100644 GIT binary patch delta 2918 zcmai!3s_TE636G>n*<1tL;)YXlIkK94ANFy>La;Ti&YAx6|6-oQE3IELJJBO;a;pt zze<6c3Y4N;+tnf^kamml1-X@0Y83;N5-m>`ky1gP@(jtI1b6rA?zg+)`x4HXbI#2C z=QnfQ?YNuT2BWNAAYz#V^~YaY)}Xxg+%5n4ZwaIA9X6}oDtaepou9qF^|_15OL{JP ze%!ul$NA` 5NJvvr> 32A97pYc1q0&|ME@%VKpQE54+@|wkk z@L|b)*JLPh(R>$j^CNXAe8v;fd>UGQ9!!y(Q>wZ1l)i*0(3#KP?fe+5S)U0)45BI` zC57414}sYCgq%B4>0|?0B03chtQ7;+F^(Z!adwap(n^|GL;>0~?+9t&h(UW`B=W~x z$Q<7m13V%=4n~YS2AZI^?}q`fb3lSNe0|>uWO)8YSWLvPH{DhUCb%qLr@Scvqd>k7 zQ`@mE#t<$Ehmud eE#_VcD)HfxH+qiVb?buO6 zXWpt=Y%qcoGCvY#_wspI%k0+IGa-W4PQaO8S8_ce+?H{!;P z?!C9nUUIXd)?@zK4WZKW=DTI%fnT5HvfucungDeI1iPxc;m-r8KsjwmmzOZ-+ zmR5m~uB13T`2c*fmF0;c#Wb5kS8<0!g>bA^02uzyIF50>gI1dr$BHe{g< KC^d% zg0@oktDD`;tlawQ+l8LatDxs8o~M@(A_3Gxoyi;c^qP7b4m}5;w1xHLviB-R{)CgL z*ACc`Iy#GX7DpSG?`C6%E7T^B4_pp$IixT1BLeAcl!FxnUFGpeJ-dL&AN9It#WHi+ z594(j=3^`~%{6PP7-EblDSM7m#gkBGJqu>?UYc&nI0iTG;dPugJbpCU3;j19XU!zd z-ZPJJm)1q39m0QGM&Wz7s2lMx`pH?8G1A9o23JS3Nk}gO3$!6%VWI%wC!}!<4&E}$ zQO1BSQRvVR!8T!w4?g`k)MXyct$2U#XN3Q=bZke0Ee(rryy63RyaJ*eGW6lGSBn}t zy5|74`9u-oPHqo1jsqFp^%9Ar(3PCP H)~pQKrtsTgZ~wC3TY^y0MvtPW=$ z8ZpK-z4gb%<|&8Gj5p3qfrU>7(vuPR??&rSWk@18Y3_S&*dG_#16U*AZo-3xOsd1M zo5WBvB66&iyR3aFq@N1~DDk>+!i?T^k(rgHMl? K|q@nk1 zL-)@1YXNLYfZdvYh_({DUr_{>3{O0yjKM-*hTUbUVp;mpN}jnh5JB6uT$Bn{jP=RP zHMNg1najVMoD!H>AbzFHWp}AFnj5!~9u=9H;C*X?r4(>p(oC7SW+2Gk|8?1#oN`+z z>l6i=5Dey&8(H)Sl7@#G_9Gbt_#=i4Sh4by&0NY=hD74$3=#~^!2EwL #1N1(on$a4g$yEExt=ego j`-2-2$eV?Dv#0-N{6u8wK5r$*){(M9>?6eH zp;ody&}Bt~le}h$tO8bgWS3tGu&Y+|==8kO(ZO}5gHT+spEr=W{H+Ln{3G23j=Z)r zyDBxLxBv#a;sf==!^5p7@vHZ>B2E1Qx*|(9IT~ zKly-XGD7cilc zX?b-n6cyL3Kf nj({5YnqGp9Xk~&+KM-@Ec8%YMOk`lWV&Q}DyY!o z(zGs=S2Ue4+23G1bgcd4g#H6QElK5gP@f&hy1B}?tZ`g#G@Q<6f;S}&XaBBAlkS?z z^Rv2TGU_%RO1h;DLfzBn(sA~IHX?76G#D;-7yNowanf=w_`1AjP_dfJ2E9%PmtX2C zrQdr4YfA}9?BQ>A^nqo`_5-hueWyBTAOB(P7aG}u{Hbo#j4gwybmv^4wxrn}(tVgv z+xLpLBfreLhU%A+T=vvfBJ*9*wnwAg!pnj%tS;{Gk;#ypiJEP` H{wp31y}wD>it-z( z{i3$qX6@+1cY?mBcf2+AvZGb2anlI&e@E`uN%X*RrfcgzME1h7-(33Efo!( z6_J= ^XXWmTqL4zD1^&H=6I`A#hP9QbPFvlX zGA|it^!HkuZEq#pW?LHW2^-HoH&XczynN_@CwSp(;RfvX^xY;X-ERRWVm~A(_An=k z;xM+LMl{_WaHfRcQPEw!_tgrlG}TZa>{wFpSac~P+Vq29*E>4_eb&Diy0&b!{P5oa D`l69z delta 2908 zcmai0d0bOh7C!I2Y=k8^%2JAwYDEf0V--aNlHyoI2Sf#>P&AGmTu@AvDvI!Kv{I|T ziZx)ZRf)BXDaC>chD9-!5$Xzp3W^9wE#j~Tvq+LRH!w55&irP1|K#0!&OP^>@B7Yq zIp}%Nv&fF1&u&m{zjtuq>}TPLL|~PJaw+G%hiz!z(KAOABokvMexJs1>zh1Y^Y&mx z*wmbF+)&>NCyb8dC!Qlmo?M&=XTU zr9HA)bJ)usHQA#bu-fUfZNU;rYXVvKJ{-OMD4;fpSQLAqX9X0){t7S>+UculljzK; z=m&8@>z03d>8aII`?zCeIUK%P9#amf0_p4dPz~ZcpNQaWbF!n 0^!4~(M?yj z6H^vs)4&JY28;tBqlhTN8RbjhY*ywN hw)BA@S~e#sR;b zGg61#s_doxP|RtopDWI&+S$Ez<8kH$sREEMfNeL8j(u~VmIIDk5JXq^>B1^D$H0Av zp*AtW&JXNnwF iW6{v=-SD4)RumwT~@~HWkp3#Zd^^MFIj(=vMPD6ob<^*vZaks zZ+ya;BbxJ5AhF3q3cf(fm(=u?98*rE{ARPIKsqBn0+tYBd|+Kx7%7Awei0zpZFK7H zQ5?8JwXvK9$feG(>}?3h0KHw?ti8%C%A1y(ZHI_9Bf-N#U?jxIt1|*~{k^2O;z{wd zw9|yUgZ2thH+=9~JXNG|tD?jK7}$k1N0x(`CyOMC9JG@y^9qB1aRa}gCDSxul%O)U z_FdREJjVry{`Q@ji|tW$p*OlW+(^yvmklM!S~B)DO{?OU>Jy-y7#ib>f>+Idddoiw zwtM1K e%7x9rPX6s 22qPsh761=jL!k#&Yr-a^;02|Ykt< FU)Zs*N5LNC{9K8EJ|fGu5Bi z({}wOL<38 E)<6y^Fsm3%`<_9*4NC$l08F`NiGXh4aJ3eB9S;Q!D ab*UBpTpp zkC?y1EtCWSr;sElD|y4$s0nTgAdQkg-rLSqc_UE);(xP*y2<$F3OAmFpQbA`Ppv7< zq7Nxb2=Qf^^od;*dUG}F9MM+V<66lUIe38xR+Jr-b=!k}hgV#q;hIaP0J%bfK>#hh z?)MXI!-gk>=U#{uVuCT52#+=!!Q|*9`gddK&t{xEslJV&_CYuQW#Mctu~%`N+kWm? zXQnz=QhenWo*z#rwaI-PC{Odo(Ja*fS4GO=JLaU%D0Qpia--noLw #wqK@d-82BeC)BxSp}K=tk+VK&s S&=n_ZYMzTWlqio|QiD$U?Skr$7p@&lUr<00>#Y+Zz+rwWG`NE^ z`n7NZ=2fb19r!F==nMXbEj#e&RdFsbhj7jJZ3api%Xg=xjvq1OCGghUSiCeuWA1UW zlmFksgNJXJh$igsVu85EORrGFIGJtKlTm1Nx)U7Kf#GDkgYClqW<>NLB?Z2Cq VIJLRyGTbe36FDY`zzjMJeCqgd0E=E4R=2-TX#Lj zgL$0WsvDDX<3O@?spVm9=O(89IWn~}j}G)5GBxh!qjL$=<@;vM%lez^?4*Vdmsg~m z8?^b+H{7QNXGEx>=>=cj<*zy65;fgVn^ySwv;-n4l&$3y5_HJRkW&9bBJ%vsA$=HY z8{>&T?DHxGax*ErwMEhQ!N)(AS-RXj8(i9reJxxylq!?Z(%!0DEmqG^1K|s=BMwJh zwR@LoN@A W!hX-FIAzeq`C&PwSx{8wY2z3GM7!=8ShWjU!SQa-1 z)i4PcXnF;{aC{55RPSF_(p%NMb+|DjIJwJ;|6>(ZxwOSyee*;GSus>mQnC^)uHj c;d(l1;CkNnN|ASkyw^(lLGOzY zZIZF2d`WVlfmjt7UMj$C73QbSGnCOSuUFh3dz!$7{g8wjGbTN|S4$OGf_|#+!3aqW zL}m-t33T^|XyZ#B=pfA|8z?4=$>^JDiYsnSX^NbDmMlLdvr_X9d9jPCN97d($CkgN zEt52Rppru)!pV1%C4b= 6bx$Ns59Yb8!?=BVP&qgI#l3g1@V=h{$pVu7u U?&7tqrGTIC1(Co1F;uqaZ-kPWCIA2c From ff4c9fac105999e0546c115fead709d8e76ebec9 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Thu, 22 Apr 2021 10:38:49 +0100 Subject: [PATCH 05/17] consistent space lighting --- code/game/turfs/simulated/floor.dm | 2 +- code/game/turfs/simulated/floor/transparent.dm | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index f2eaec50d35..abf1bfa3076 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -30,7 +30,7 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama var/list/broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") var/list/burnt_states = list("floorscorched1", "floorscorched2") var/list/prying_tool_list = list(TOOL_CROWBAR) //What tool/s can we use to pry up the tile? - var/keep_dir = TRUE + var/keep_dir = TRUE //When false, resets dir to default on changeturf() var/footstep = FOOTSTEP_FLOOR var/barefootstep = FOOTSTEP_HARD_BAREFOOT diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm index 58b9b718b71..ace15cdda61 100644 --- a/code/game/turfs/simulated/floor/transparent.dm +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -8,8 +8,8 @@ smooth = SMOOTH_MORE canSmoothWith = list(/turf/simulated/floor/transparent) footstep = FOOTSTEP_PLATING - light_power = 0.45 - light_range = 3 + light_power = 0.25 + light_range = 2 layer = TRANSPARENT_TURF_LAYER keep_dir = FALSE intact = FALSE @@ -20,7 +20,7 @@ var/image/I = image('icons/turf/space.dmi', src, SPACE_ICON_STATE) I.plane = PLANE_SPACE underlays += I - dir = 2 + dir = 2 //dirs that are not 2 cause smoothing jank icon_state = "" //Prevents default icon appearing behind the glass /turf/simulated/floor/transparent/attackby(obj/item/C as obj, mob/user as mob, params) @@ -51,10 +51,10 @@ /turf/simulated/floor/transparent/glass/reinforced name = "reinforced glass floor" - desc = "Do jump on it, it can take it. Promise..." + desc = "Jump on it, it can cope. Promise..." icon = 'icons/turf/floors/reinf_glass.dmi' - thermal_conductivity = 0.025 - heat_capacity = 325000 + thermal_conductivity = 0.035 + heat_capacity = 50000 /turf/simulated/floor/transparent/glass/reinforced/acid_act(acidpwr, acid_volume) acidpwr = min(acidpwr, 50) From ce7653174e27a119cd0c9b18da2675d09d0bc96b Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Thu, 22 Apr 2021 16:54:40 +0100 Subject: [PATCH 06/17] 3/4 perspective --- icons/turf/floors/glass.dmi | Bin 3595 -> 3655 bytes icons/turf/floors/reinf_glass.dmi | Bin 9255 -> 6081 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/turf/floors/glass.dmi b/icons/turf/floors/glass.dmi index 5d1e0ceac13ff9954e7de2357f4380c21be6ed1d..1a2a4c555b475cb43dbaf78c23b319b50fb3c131 100644 GIT binary patch literal 3655 zcmb7G2~< DoPD@FHOv0?vgS904-IF^S9NqmwaKfWOg4$L)}-1tUFM&+i5WIt zQkHi2XmL~4;wOG DV!DApEZX z=Z#MnN%wo5&Rdo_%n5yQ=U9E_aeh>X!F< |@xEHd4l=YsHJ--LZKn*3zjY*K2+9g6^f? z*{8<1*(S9%8kR dMWQt1$I07d41fEgKVD7~Ou0xU zP_Mh&{&+8e16^xIr@1 b>)SHwF3N9MgCs290(!8S@j)^5T-D<6)g&sIjB($`7B+edXFKkVMfNMp2R?>- zwfw!6HP%$FxNxC6E9XSAj~v<0eHt)f(ajiCmrp@Ty%PB_$TI0x6z^~r!-jGEoB!<~ zmJ?wGMBW-L7|>sI(=yxax+Smyo*>_YB~G3MrQisQVD%DQxy2$N@EsAOz_bG-A3}JK zpnDm*d$AkdGk`J^yk`nW_;^pZp |^k3s9p11kvs{WGpSF(@e^rZXQmX^w(Qw?70DMtB!hkvA|Hoi67-bz86Ia-cXDS^ z4<6@og4a=*sBPHhmTe^!+RQSwCBuVIox M9b6vDtdtK-jzLqBRBl@ACST}jZR|6TU(2=>;QONJmX z61*n~@3X>!wCnd>P>~O1=#YlsX)N-dc8v#Ar}7s9+lee^ZNqF(nk<91kMbgeNOK-7 zQ!!{ct0(I{IMm3;KL4N3|4RJ3YX9-49?Jg^G~Z1e>VCwC5>4WfHc8Fq3`MT?fehJ` zJ*=l+R=uV`Yym$2E3v*eR1J0LyTP46edAcDdCm8M80G+Y>P_Zqj=Z8%p7;pif(kcO zA4!=WgR0*(T)BaSHYQNt@XJ1$0LGq9cCd@U@*ICrPSIO4n-RoQWq0E+0I=)H%+Kz0v1c+vuqk;D7B9V zgWpC5L5Sui!Be|?EJ`M-Mv*CHX$lp5Kp_bIwWW>*sbg3!Oc )g! #MEtFUrx27zV`E2cp z#HWt+&tg&V1MUpOXlY;Du{+FLY+o_dO`&RBcp~_WsJl7YxBSUv7!c<~nHFq-n;ArS zvAVs`{|cK;Lg7v$*Bm1Vi!;k-Q;I_WA@lq*akv(Fwd GKC; zsz9gg+qyz=?Vp=a;786E+dv4ik9gX qXe}F0BB2oCFMOk(gdOY#198Aqofrp ci^wA8kFLNO>7pPBEqaU;U|W1$G%=RI(C zKG;D;;0#?AJEaN}73l}-$iZgaB(wZV9fjwcgtbX)gA)otzlwDu?N7|vy6eCk^JthM zvBwYPgC{~E8nEXYkbNBT11u#093*tw_nl`4snUZGV|R8EP_CLh6AzYzVCd&3*HAw= z=Qx8kzBHTG&)7dTKICJTCLq0T2?kaeo?L9be7T0C8rRE$r&lq4+yDo2SXh=Tus} A8FYAOD?uMGZE?7N|9;dg zi|BHxAndd!gxZMvyZrZ88{#*To}PR|;bBEmNqnMjDmWLv6OLBbuTF%s>XG4}b29`Z zQFjD^itg4je!R*u6Y|X9oLHk2Xf>J#Q%h1}wHhljbW|DJP~vG1+j xLd{G^dIr-j!|7!ykpK<0=Q8)*GMDDg|zep9*lmP$zexy%V)- z9MgyAp|(?@pB=yW5823YT9?!0eOYDUW?Y!^HX|UW!lBhL`}hJnHup=%w;6>7EXrsD zBcLO-d0H-7eQ8hs;0k7>)|Mh@n`RDvIm&x>j#j4axOi3F&atjpaI^P*6UQDJ%Ux)D zWy`ZLv2msf3tu#G`or+OzcdfJF;ZT_`!lRBvliEM6@WZ0&^F#ELNr<&rj>uqaA zwIbV~c1#*1Q9)@~^Hg0Ve0k2cfu*#pNC##*a$}gER~OU%RLv_T5x&EyvtIdXc_S`< z1)NCUklDRzPEWE}+_?M#)GpSvH53_Sjf2Q!Zkp X6h(7WpnHaz>g za=+KP{6%L+gu%bwNq&4b#U`>-XZF14xCbanzL&=$zo^IEjXojIE>9B3@;rn4zNuYK z2^SGT^scJUm(Hy|asTc6&QrFC0}PE;=UWzZjZU~Q(W~+8D^asLuGk)HUbyK(Ku1T^ zg5tJXXM? Dkg>-jLK;9!y%LcaNZ`2*g#)@G1wK&Vhdw;|R}s^3ZX-|P2_J_ScMP^Cy@}IV zdh!TJgI_goML)3w8mJf30n5iTjpS(ge?<5~0f=S4i%JsO2bzm1w=&H@!O<#zeS2uq zuQ#B+3>U|#mTfSw9>3j-ix)r+b|u0np*hU@dRl6m^jkn#t)IZ8y%l#WI p(AtYc^OhiZ1n|i<%`-zbA2Z~H|A<>44#a+wL^_F4Q zA tOKf5$cBUx5gU^=V`ErKxu~vjTv${+?h0!!0p+fNwRe*tVR%Cz2#Byy7*KEO zt%a`c+r405go;;v@tFxo@lz{cCK2YPDGwHn@EN^|6ZafJEs}>|`36jb+6Uzr6LscE zHBR?^rz;;&zb4-^G#fWxU6?Kz%*S(MCzDYSyPq#lsyjNg!_b7X5~A=8ue^U+7^iQ< zBoZix+J~BjjR$cO<8a|~h?sET$+WQj*#Vb{Oq KFk#yHgnWmO#)S%-^yVQRJxA?m2BlerS51!J)#9wdr@Sg zJf3o$vzFJv`HKjg -jQ-$gvn@HY~I=M8~?tYfAUrv|4#5i)f1Uc9o9K87X4StO2SLZBL GKE?3?@*;rtdA)Do^w!OYV4Q7Z`x27jYNb$&rN z(yLqACjqwlcskOM+z?8Pdk?i&IXW7PEyxi}9tytE&MK(k f+ c8%ZUt zSF1IOV9$|eV1nAdBkW*j@PTPH6m)&8YTw*^(}l@$F?gp30)!H)>%p#B{Ue=fZ?OZ- ze8SZ^H~v78fR!rZ;zlJOrHf@^-CXxD4Aig$*-DPFtwlyW=DLu1rJC&|HPj&6X=uSE z4adr*g<~2%OBu53uP*D5W0ulZ8&?gY3!88agM1+P1gL=^_*|S3$y8WoJPM59Gc@3U z+A7x~MOa7?XnIHc2pXqh%D)%#{#k;&wQf )xA zJYs?RS}3 @co8gy?U5{(e_L=+S~?SCz*Sv8wt1LS+t zftshz7kTh$Ah=118*n31&zYNzb_|5EZ}@MAU)XR`=7b4^EDp61Ou*?AH$b{V{53-| zB>}m6E~LOjUNTEs01K>>@~*lV+zRffs1sxl_ASxuhRoERg5HSvTUP3Yy{x#*lb5w7 z703Eyrb6%YFxR^N{{F_3_>E^uo5HH8R6(M2bkODORsrM41WjQEDx`|B=l2FG>eTJQ z@NPr#G(R6WRbIJ{I&t~IR4Pc>RyIHMsf#)$PE}Qyr)vrpSlDQfW^^pQIX5T3$z>!* zsuWb3D-@yib^G-w!(8|lJpD1Xx+GoW)EH;3{L~-^)z)ndmWUiR739V@u8nsbAM;GJ zzB*pvD@Y#?AML4D#~f@vIa2qT9_1Lzv;JyV;=P3qxi!OeYSoz}+Iv+*f6}joaqgdt zr8o)iYt$91Vj}M=J(1?R&08|slq*wKxqHL4_SDB2!6!L8?>q92zTm}t#`8nUJMZfA zY--OMtSQ z?)Q}~r*d^l6g}=FpE y?9@pL!38P(QKCg}TwkmIl*@8O=F4Mfm#p?&xt5HuBn7YF=H#vdfCjV(AcO z4}y_N!%bri*5i&{1A`|VUlM8VEpj!z&wEIBbkb@pY{?L|;Z{#=?2hOnQE#=^%~<5z zZ7t?hRMA~q`1KhbLzLD>9}zbOEhZ$zS _-z CSx~6} diff --git a/icons/turf/floors/reinf_glass.dmi b/icons/turf/floors/reinf_glass.dmi index f206b4f3dfccb094d87f0c7c1f3d177e8461a49a..bb8d82712c80a91c26b9767eed56d8bbe099e55c 100644 GIT binary patch literal 6081 zcmZu#3pkVQ|9_rsY))ecF>NWKdP7oMsf`FJsr;mPvsXn3V;!8DM}&|=2TF2ylS3tX zB@`JV<(N>3*@TIl4|AIRpXojQuHXN ^X>3L8?fp `8=zIR9wJA?zVTXzbp;3Ud2`oFAuQ_2Vef`JwXtNx?;3$X}EV-kB zzMjuH>OhbsM4vcDS>}!`_AHHNJ1s91SJ-PT;g `(&J91qR(Be82D*p|a=L=%uwn zPiY|bbx_i<50+_waP*k&Px|!qBj(gP{?*$XsL_jK{pJDPFM)v|<;k8}fK%b=Q@^^* zQ 0U%uHO+?(;C04u{((Fh1w(OJ8b{&7A1DR*rOk7Z{tX1R;N)5-T(wY>z z{s0nhDbyLOX{M)CetinKv>AJ?hwkc7?bI`86iKd i@SUd?5ZbtBj$2+<3nHUr 4@f{F; znYuroBC5eEaHB8uU4!%CH5J>5V?DV1+oe@1Sh>Gj%PzEEC^8IbdmOcS0668LLZZrG z^}MFoN5|V@G1z#O_h6G9k~BG$xZ`sN(s9wD4Cs7wQVs8R2*t5)^8N*J?l3WsOi@5@ zZU)u+SYC7*Pl9t|b+}pN9{gD`v{B7e5)b0A&PfoX W){zh#l)BLd*Y(pa8yssq*`5zwCFJN(4KO~7RDBhy+BL-^{FNeS5 z37*CcIZ`YxP;C4udP^KwA8jMjFNRcsy=XKVgVr8KOTv$Tx136__N__n+bdOI6diJq z0MH~mAZa@dw{dK~9WQ+{P|pZqfgqli5z{M{@na_OU60B8EGMBvLP$oeU_C6;_3zpx zN0kRad>7NG;(|x<$q=9w4Bw!aR&jsrqu&Xs3sSdq eM4rdF2yFf=W1t{5p{yH zM6r0rGs7jhZ^M5|M FI8+S*SCJAm7N#Yka5 zJM2O(FRV>I3F}uvkZ<5%5O5;~tpV39|0Owl0=P}4#_@VP@b55a3l D4lT>-hM2P zgdsBHwHl~iWI28+5b!n1Z9lNvmsVcfON8c(W4Ar{tiZbAdFBaX7e90*?i*R(%++Se zp@w!x+5oNbP*DPfAvYJ^aF&$*7v%h&$2yPLTUa4fQf2T&Jf{uMIfvi~Xmk(6;0Vo+ zMD+n}m7(!p_ane1JHYD7e>gj_dfCD({k_W?fXq_gek8b50VIk)X3a;dJOdJEd*m=g z#Q62J-@J&BQAGkiJwSMyU;O|%G|#Oe5BiJiS7YWrlzxt5Zr6cQNu;cTPJGHI)yd6< zEgyK!^$hxuq1***lY*Jvw~cdyjA#9V@wQ`?ZRC; 3X>Bw#z)Z`o59AdVw?NxI#4!lo9wc6<~;3U+jfZvtT7%k#DD3) z*qo6RH-FS9;wFRjw1Zj)#B4k_DdBUsuNZAb=!}GU=n@|0+0!#S@dZZcZS|PU=L%2D zgKoWWu1s(ju~hsC+|KgXFMx;7S4qX%-a{txpth)%?=wYW+CTl6>61*FyV>A$z`~FA z7tUO*+>sT=vVRY<{g&q}e`eDklCu8-l!(nf&% R2? >?xl-_r& z^697H@(prpgYl=W!0A*!FgCUowxMmt7LA$N|@7 hU+~ufC4wSr?;ihVXazv)|_1 zebTp(x1dB`JJAE>f*i18Mbd!jyn8r@L1TZ7Q>Ce+hi-hUiXncDab_62TCr0x{xok4 zN7q|-)^%S-Q;5Ge1y#@_+xjp~%>^~mpxw4ID&2T^RH8g_qmceLU9xDRsi{{lRu0jj zNEK1G`Gm `BF_@&ZME92O_7|I3Pcyov5OO(hEu@GM@n(J NOm}fHn_SFDxd1*XpU{lnn;+q1yA+7$*oMu*-gXD< z+@TejIND-Sf&r~EKhk9{R(nVWYf~mDV?aY9`#*Jm_eG~!RYE1$%3OiWX*%?ru);uJ zFuSx@mY)@i@Ox8z&V^FIX3`5+zq~=2Gd>Xj_AfhDgFf0#DEwz?Y|K&!QoSkRJ%c)g zSHZ8w=WI2H87h}Sqo1ayzsKhqp);F8DibP0HZn3{TG@#fHy1}gYWT-t5M>bWp!2uW zoUzD|NgHC)=iYJAxj(cd-irOjA%FMk D{`ul(e?y(m1S)tV*=%t40=K9^XlD?4m>Ky|I)pI< zOvsh&Kr8orHIey2yy8>nZW#v*FzAUWy-}$Q@96 g5P(b$!3VY4iILg%h%X=$DlDKzIOs-HF;a_a%4OO`?McO-`=|1 zaxXL`3$xSR;PoX+8EJn1YblMsxX{9B#G3Bl>@U~!e=0ijOe5pHDMmBPySf$AcbNBg z%jRF)gwyEzDtoA0XsrY7CT|>L`V~1`lUv)v^cxaf+K(;Zxdg#7cD79nFuXM0wwS*j z{drQxUO%kjcy8sb4&A$mMYtjytGI#Zd_fGlZMw;azaItzaUSP|xBCExJ=CAxnDjBT zCm#gLSeq2&wCH@itm`bo+SaQYqN?hiu1S~ZIZ@512ic 966?OJ5 -Nvh8R{Kl&ndt4W|IfN4_0QZ%{D!HZcZA)?vpMaZ7b4#3s zdu4#v!M*tV9t%2eWg9!y g9LQ^@ayZY)7Bfrw#gapwxGbg0 z@z=Mdag&Y4k9f`F;_#O(pCmHXQ2EaPPnrqtlt8Y1Dx$Hi*Wt@}^~c%0w#|g4@i)bP za3iuuB63nG=dzS~-iH%XUl4u|ST4AGB1kgs@0XXd=s_3weGNYS$TBD5t>T)M^o=(| zjp!JykPa~#6Ll1>DMd{QCxV5j9XEyGMNjFJ#bI04py$3 y$Hm?--)!ugy$JTb0&kB_js* zST)sjoHPwvcM9kH2zzUBGg;Xo5SO5XkCr>y9`By2$#Wk5MPuvL>KIy-S>_SAxO$t* zW^O>m!xk1N1?ypG4UM?|E?%b?Yqmb$MUhRmo|!c`j65y*R^!Go1IaN5{r0cT2I$B% zkv)mELo}x>x`<_sg8%B>qH_SLEP4l4oS^Q3t}cv3!PI^5Js57iys)sK*``2bDsjIQ z{1i8U;UBCAf9UG!j%B0*^$bk&dZT*>C_6~3_h!;0YR?ES78xTp?ps W3Z1D^bIf@p(bW{#gd^=DmZv8aDF0^VUb zu>^Ojs=?mufdpikgwM}12DO3=niH6EM)L4bu3hhM;hF*?Cf!wnH2 8*4|thu^sYI=V|{*~T^_luAK74OF_UKxA8&9B<%F!hNMHFQ zu*-tomKT$5x*C;WqHLx2liu!r!TNV_u|}fWO>lspJ<;1FdIjt7wBe&tG}SQV`d|*w zxbUvhN5qRm3&!wH{p|We@E-G9OB}cGJA3kHj(#m!CNJ~YGaq`K1bqD>&2ZJlz_zYdY|E>Gq?6GV!Cn3o;gnOb^{$CaYQYrVLMl)+x5yra|Lwqap!sQO zo&>EqxhECavhKDmkkq8+B-~FkcuG+XX UT(-ejg;BJ5urMxop}wb@cU++&Z}FpqgaP97 zgMk-z$REe2tn#yaD5HJPO7MC9Vz|$*UTaY`4U7CT1N!(@qZM{o`^Cj)gX-m!`|*03 zP$|=;)UdcnhkiZn#K>6wWnobQZR1uh|C9SkuCV9vwcYaR4-AX?mmSjb`vsp&U$l$H z315OVB!9($_)3sDgCN-)U1atzoM?P(3i*y!Y=H8{2#4JGuZ5Gsfvz-bi#zhHLJuzw zL#h;>lO#|5mh2QDNC5hm1b#0s&kB@ro6BPX`0hc00cA`Pa#z3T8}I$@B8$}vsvy3c zh}3g*Qrg1-BuFev5=*|xv)(ya39EO1$SZGl<;tRoOtr$Nwl8LXWZ!@n;#vkm rVABe1Rp7)<>7Tl~@_Hf)7-0p`AUDSXGru zW_{++#>VnJ>qC+2Ie
3z`!TTmnT9)@B<;sSu-&a8h<4 Gx1HWhTG^1V-!S_t`TU5u-=I)u;3y1Ii<( 3nl!ZdxJR^8a;zH|3CD$39VFIaIPc&kaV`N8Yg #$g sa1RWdZ)lRn=6O(F5Nd4^6C(u9WURmWc#?Y!zLN(m&8$tIn$WKNAL!u!QUCw| literal 9255 zcmY* vIl!o6IaTVuYA=?#af6 z`|8}Uzcg@f`m4_j(-n*bcf8I>#XC|uKh#g>i2T*le`7(*F-n$D=?$YY!x1g~79K~b z`zMLsh+}!$;a%4U$tO^1DD@5MFE ^z+=d2%~e@bj6NZusxtXKmB@#E z(!VPCQDrDkmYFv^8-zy=oyNg`7KIxFRkBKDGR|PH*W2SKGZGlxHwgGe-}(*%0281h zFQey?vX!d&`ngh7Q_SSeVBFX=IGL;$xuRFFoBv5}Gj3oTwI_dW8FSG~&2I#rd^hL> zil}y%`4hRl7#>F`QAa2m87?wY5Cm7vKd>UdDNHTO3r$s!Y&t}=BP>)Ln5Xp%&aVmz zb*l?CexJQ7vp1M6Db&r=c$z9!z1{M~xSF*2{g4fAKr^EG&=+6x>zMeai&*=K`wtVn z3z87IU+2RcN0B{nV5SExHhyf33)l!HyQ%*4X#R%D9p+f8vqRBHC}w?V`^cAzm~`a7 zSZLek0RZ*m<6RbHiU31QT;tTUXE*@LnTu=jpbAeDunC|Eq-ulro7Pr2HI$7{NqIc( zloZ!}Q*UdCXlF3+au+HW`Y^>Qr{Q Q+N `lJ&p00d< za)lH_JX(b7#cLtO8i VgbNA%H1@Acdo?rwR>wm>=!=}|~- zTV#tU;3>-*rV@BVlAg(!?Ks)>o#kPNkGgMp;`&D%P9K@NG(i;qnTt+y-hw2nRFZ=` zPJmJlZ|Iowk0xgB3~E cnvhiu#K_Rv4H|lwatay!NydX_{#LyN$|h1ndKfix ziEsfjJQX~O19hjAHfxBWs=E4xK$7F8?tMKwohPgm<1;f=Z$5`@-~3}WQ?<9HfjDd? zHM|kSC{ Y5m-0)&JTN}b+z1KyQ3GF$7`WAaLK$_}fVbho+WWyT1<8RYClmdZ z@EPCPCn`TJRxZqZwT3+R&L^sqsV29MH O1&HM7n#m9rCo9KgM3A z;9#Pqs#j+}K+zg-T|jmJ5+Ut<%;73&JpL)EgmFai%;#nt kbY3R%B;69N-O4qbHNbzJg0t>T4ZhO1F;H>x`QvNWOJWDoEu{ZTA zkGf@iW`C?ON{A%BZwWUbL^z|ctllYa16HjKL%$bB-4%< miVV8HO3kh;a+Nf6n; zKL(k#ToTKOWN4%TR7FCG9k&`f=cbpe6ELXVz&*-6wMjt!TdR TmNKd3|5l@k4{B=WU4BjbSJe(tD63@^~x6zU{&fJi0+iFT7bEZ$PbjRof zKQod0-?UFz=2HHAsQ(<@8WyQ9nxw0vtm>LWR(0>*I)g$rR4^tQBaMcAKfv%xed^O` z?LCH@!Wl@n)4XnvoOn7KHe7A5#4HUgibcE}V6;1$+7eRF)1{75T-=CZ5g&LU9=mfH zBAga35NpY9W>$Y{|0}O7^xS}@s7~@Uc^11@pn;7WF6d$Oq4u}$)hqgqGX%5}R9e1P zraZGX%>Av`#d-03GoYYDA~T_hUhok-$C3+g{InnoIoP@}a=|+Z=#Wm8%7nYRk-*v4 z^Qj;1(GL5W+rW#GnJ9k>l{$_`n|Mg`E3vWiz)eh|Go*}X@id%jGFO#UR9SO(QJEoj z0db#sjD=AgJO-2)c9kw%xmT%V0b7X^BQ6t#5cOtjrmTw1InpA _lbg-mKOyJ5>DeJGAgS64#!4_N^6=KGo(jzE`EuZQX zJEykJ5ZdYJ(j&gr_Bx@IT{cqc=@OFil!eONWs@E0(;4( z X?rF3j+g#2XXg_pTn%ONDvbb zsN-VV_AlVNUR+bc>v$sR=@xU{_ z#|Ks3+iUxOIFZLe`dpI==VVTC$I46H?n?p~ySJv%gNhw~w~6ZZ+-S$j=R~B#u2Fvk z#vKji4qgBrlYxRWwL`et#}#!mBcLhjtflq!cNSGR>*zC-BBA<`Wl_1HI)|Pp!^MMB zFdT|JhDVBt&tmuG;v&0C%&ssFK4;uQ+H3oYru?Z(e)s)u87<|2{>rm azcd!|Mm z$&;!98yy?V`2Fg`$=dha=%{4sggDm>_M(<0+eocnF-*ki1n!bPwmsbKmX;>$-Gz># zboV|T-V=d#rfM=K3k)9xOtMQ^>crg3*=7Ty=l*|qJHCa=B6XKv)q+nE_5 !Oa?dA`q0lJ?uo%zCx8LGZ<8h78HRdex{&_=n!ejMoxvNZ(<8?sJfE&1Ld-7 z3ml|;1>;qB*)JN`{dH0U1X0CW=b$4>iIBdpLQ`N&5mTKl6yiqj995*$!j}FASnD>b zR#U5M)^_R+`ZssVSso756%~AZ8d*N_rQ++G+vF(_N^SCzujN7VKc iu%w z$6L!mo9eap)e*0xBCh~I%#Zu${H~THTqpY#jx0t(?vPk3MMf+88hmjAnj9CJC%Nyt zVZwYyV}wv6w-6Ex7a+aWdXrt>PygBpvl)=?G8rUHu6QEY`KY{Fwfs%52|Mj19G8^c zDsg^AKUujkES(%R?Ih6c3q^O^$cC30^Ji=XR@YO|#9p=PQ9Uh|BK+$tiX>_i5LBXc z)dAdLWUbj!{J$0OHt^s7&9bHJ>7{i3qu)>ZI#k6ESr|d2Pm;dvoXt$|0hyHaCVHy3 z>jeq_nx?v|c3XGEPz6@bFnSfKW5qvhqLL)xBL4D@r1aV6!Yi%KM#DjTK1H<5@0;Ps zRHVY#+;^Lb#KVqC@#aVRR;aQw;=*_>$_+}v43ZZ9wHP&be|T{(P=WQ~RZ{2Us7Tx{ z$yO(qgv}=&h9I$RNLPyctxL+cK ?`>Hbz>izT#maLDS{{&awo{`FenTi0%=-tSEDwE(RYytJ|7 zdnIyVY~W^18&Quv`-=Vk-o$KeT4h^8WEL^yuoX}}>uxZ)+mr@d!+de%5HsCqk&pk+ z7w1pgRD&A3-h5@;zHyGQT%HDSvR6F5P)wCa_N`Ee{h>N+?&Kx_&3~a%gRfkjpOpLI zciz>24@vIO#LR_Cp3?F~mPE5_QXELKx!J*z`-AIcB7#^y4YI(JXlz?;_Ua$o<>pka zI|@b|Qoa3ZeAVOjQi_^ZGPKg$f$Qwus%tOYO#N#*tS N=M|dbRVWoWum>jg>|?|%y43jG9nA(|T!K6JWGEkBp|S^RAdjF6e@W^j zycfX4iZwiv+mmqlpJEolzPx<#D=}5)9e&-|p2b|VdXHqZ!eiC}L|9hZD|*CGs8L-1 z9G`7t_7P*z!3+uF$MmrY?k@@YKU-=8d)-jwwIlJJI%m!g2?%>~R)FT&*lWf=Ri><} ztE9g=#sq1+gi*t5Bkts#0W|U!X9j({9{4s?X~4LWl2kpN^k$OnwEdWl$|~|T**r_) zTMrxrW2(&L1$c{I^)t-NSIvl0L=iXZp;!G+jXY?d6-E03e+qWDefVxxtosv;gyi~G zLaI`pn7QwjO%Xa(L6|nGF2PTPp24cN+WYKW(KKo4ZL7=r3b_{=GMPTScFN=bNN36; zea3CXCl_P~0MFFaDhBe$R6^K^5u>4HH)C76v>e3OC5QJsyt_{!tG@|De@JKYp%(VW zPiKDrej3425HcuEj;}riIdzayCr~8#RP$VKeX*g{joATcJ2BKd>)9`vj?*KF)1VCa zYiZ%j2Apr@(fO0(6m +a0aaGXRp7x3zubsWQle@aXs_ z_q<$F>lRt;jbO0!7_zIQrW9ahuQIb$^FV!zUW@4l?YH1Pzswg5@>z@Zb>=I0H%k!3 z!D*qc^;&BEN|2&jPMs$)pBO<*Y7%Z)g?DtEMPCJ#?$|<5?Bnx|iU^<{rVN% +tU#abJu))WBo!xgxk#TL~sM{KQa)|dUxF{ zu6V!1*%}2}@VdN#K3JiGAlZcuFu>o45iPKj9dEUeV;ck7zi}7P#s8Mzrueao%81^c zn^JyEN}$$#MFB+LbB4gF*H=j!qDB@_wzB-T&>I^uCOY);b}z~^hRJxxtpnH;jLNRY z<=mzBwA $e~XWPg1>45cK%j42=g{w{!oo80YlpJdJ*MwBYAQs7mhF}@p^r!A>TO^a6I~J zH_8Yxa@fbGWDwa0A<^_42|{2$pLl(sDDxwhwpF-bOg9r}AMzuEw2MVtPNUcUoDEKO zH7o*jK&6_joMIVdASilWSax(lasQWMX*%GxQr3r9|6Eiz Bm^Y-J9B@HOvU`${4@J$ES42d=y3jR=y~zA3yjQVqSA-{?_-7 zcQ-lPVB$1mu;yfVglv(`;T?Gl8D!po@w&O+Xw=Oca2`5_pG%Ly9glxik^m^n2+tLh zmAJL2eh2h6V;#eI=M?_Jo`=%SMZ2{;t;A4L~Vi7i@2Vpgc{bgSbwC3woVr3!KeA z)Pao*Oc{s#bZO9F{Kw2$2kcy>wjqQ9ztCrXGv_q`I7*_7>UXZxd q8-osd)q!6o=g!KE=D5ccXqlZjeL!RLEm2I+`OR=qk~T=6 zbrQ&bHu~+Xu1E59muhdCN`2SF3Uu|rCj{X=(RY!BYD8MIt^5B;UMNIk>yG>%daDSc zX0uV7Ryv_fyCH8^C=8UFYyq`Yj^(+W*Yv|=^k#-9E#(||I*R-Q<1tB(3m^9!5_s$Z zQ;`+vQ!(D$ic3FcJ1N?5-Bl*!C^AHt`LICFil2vT!@m||!>*AL5Nf0b+4epkk2i|! z>8?$;m!hRcYv#vg5`&2_pMc @NO%0moMQC$gVSMzL2M( zV%PgMfK2Y(Tv{!<0RXY}j{(5u!Gj}+hUqijE6I&IG0LruzXwXjn9*N10U)K`#V!DZ zSWgh<-~iLNX6`2n8PDS%$-9V8?73q9bQ66G8Zg`3zTF+`YMRPvbO$bpS!mAl1EWS` z2=lioJCW*gfeRGK;brv{Q}w&+a-vX(qdaNWMJ#B|MeHKdl_4hlIx6%Y&IpqjLGs)7 zw3N031^%2J@=s?YQadt`Qv3LfXl@DL%kkF`5S?G-4Zr)p9mURH-It;hl{*LH(F1Z* zV#9`YX~GNd6U_g=&IKPe@on!<;&Ku(d|BO^_i``d{nil!a;<3{N+y1FXoBfA7Y!5L zhyX4@-;TAQ9{!r`j3!@%nBEZ~qfhY1D-U552-% UKO`&x`URD>bsg#^RTh-nibokaqu5XlEaM}^l#@WR~cLdAgA7`ko!>xkNi zffyuxiYh@nUFz)db@QbkCJ>QB{i7`f@ypt_irE#jCkbsm<&~vimG }X^|z^dx2uw+=9B% zY60?~hIG=AyRu}gM=ah1YV7Uwv&m#5M;$*vxV~k|gl`d1h|MBsW1&QcPyx)xG+^WV z69hMXMeA|aZ5Z{Rkw)VG{v*gZy8bT(lD(`IWl6|u`s2AQzlZlR&HD9*>}@R)Cs7?d zuohrD-4^`EKf57}iDL4NJYKk^RW!j13jgx!M_FcfSIf8sItYrV{+l&mOH#q;TBn64 zfnSK`Z{>yr?kt58g30+O-O4V+Fq8HeBbZ#Xth{@g`k~r2x6EVu#1ql5=aWX~DvueC zGa04nv69a$>r~S;xiT!>3aMnQ>;+ Wpdosm`>AN%Wvs0)WHaHRM~0fN663y?VkW3DWCsD*z0yQRWU8L~W|v z>t>FPQnaN66AvN7&1lDn9Y}{KeR`r0ZB*$*ESn~Nc$v1bwFv28Ve@_&uG*bhXnzai z)!`UpcX6>Hs?J3c-pAW8p!@UVxo2qEH^!$ILs}{RZ+aOZ>|%Qy@ijc`-Twt<8Bwbk zf(9Q>RxNI46RlW0*NdS!k^JwwTe|%3kVzZ z)se{)? zQd-JP`{sk4Abu0e!i@a)|HQBWX<%@+(9%;5w=B8wsvJZW5mLUp>|z<$D(3h2XJWu| z^RE`zGW=wu?r!kQD}BaSU}O{40l66h%I5fd*#^1L{ZBl2H1s~{qafY+@4ecs?N7;d zFSNfgUXN>zP4Fql4;J^y;&^s`AZx*h=q-l !*_N^7t`iZ8mAgYulcW zV%ndcmaa7ahHS)$H3(~T(n$jsL{!7&+4hu{w>CW;U7OCcLIxoBh@hd`BC+Ev|4`3= z@2nL882as=(({2kiWh#LP)e}se6kF8tqR+T0u%PZ`);c0R8r<>k~B)oBxI`Hi!3aX z$pJVRe5!mrF@8_MC>Lz7I*F#szXV(R?0O9RG(*Zr$RFC*BTsKY$~hl)=r8a;5Ncb+Ea+TOTGr z11xJVS;XJ^h%r1?){f^Gt m>oRzv$7*i%oW=A{AKegj2ge|E+Abo@$d>V z{5Eg+ Y7O#g-3RnFYQ#t#{ +%9_XrYCH9F9SJertF-T-|b2D=DQTu_H2 z8U&NGsrpKF2GB3O`A(3Bb-bd-U80%;Wa2w{!lU-#=oMFc<2BE-sY@TuGr`E$%cc=Y zCoHxpx~pq66Y4BG&Q7f6;*Sq6rJikgmt0(+XAFNNk=!l(x6}$%>!e=0_6A~$m1HI5 z`WhQ9NJY1%;F)~oYn8Izi#2elKg;Ug@%v@sb2jvB<)C+Wdg@Qj*I22a->rDaCgTR4 zTsHJvF1gf57_l{0*EpL! dkqAc-BAzweLZ& z?Iks<{2Mf`_F=*A<9yZWGlOZg>pri$B08)=njfQXzUS_GR;TCvih0@3!FlECTFdf* zm<-txh~EF*!h2r4ZMXerKy6ma14HF0db$=>nf$l6V`L@g?{H6#*^zJTW!t;-ZSbaU zIpYuJ3_Q31MJ@9FNR2j28_?nWn+pKYTi5RbsErY OSz|d*Z;s9TX=+XVqERnhzHi&E_^pn)r{V*T?%UpNIQfyKS zCP-6ubs62)`*2}5@&NnB`e6~;26xA9+uQ0Mcr-}|geZ_UgbI0;=`f;yMZEAi=w#-t zgB$&5+)OHoXRgJ?`TX2=0Zo&GFSaAkbvaKr?Rx&cuikzP+8Vj)nRSJf=R{Gm6k|x+ zY4*^X3&O|e&a*GKfsq~O*Okvo8yY0VmHOT3)1UiINeYXalr*YddB!Z&^fs=ZG=lmo zE>k@01MSa03@U%|CwzB{V&t&kWuAcyGuH3&z^qYHWSns^h|r0iNe)k)9$~j54KC3O z3n&_1VVOnaQ5Q)XZ`>u_`)5wiC5=Jb;}Rj&x~(jeVk|V=+)7wTrgQbz+=sK#>^55` zA9ITnDwB`%@1=M9JS63~#u5vf;>>ct&mJluW>gGqeb&P)f=o$&2|ftgXecH7zLBNo z^VQQotrXg}?U0$NKib`m_f5F`UM?HauACNC&s=IZvvoS5)cL?_TzZCB!MjeaZ6&_1 z_u7II629=aL6&oRVwTpH!E2g70Pyz3UjDB564jn$TE*QPDQ)`R(aleL# qJ;Zec?q>zBnoWA!ueS-V6v*PRU9^NLmM#8Yml)B%BX+3q97baB!+~ zy^UWGHKA6t0cvy>I$M2qkt^9%{JhG?^iAz^zkc+K%QDA}(Jw#2#2PGQA# Date: Thu, 22 Apr 2021 19:32:15 +0100 Subject: [PATCH 07/17] fixes pipe issues --- code/game/turfs/simulated/floor.dm | 4 +++ .../atmospherics/machinery/atmospherics.dm | 25 +++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index abf1bfa3076..6c010b0498a 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -133,6 +133,10 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama W.icon_plating = old_plating if(W.keep_dir) W.dir = old_dir + if(W.transparent_floor) + var/obj/machinery/atmospherics/R + for(R in W) + R.update_icon() W.update_icon() return W diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm index 652766e6e25..8d21004326b 100644 --- a/code/modules/atmospherics/machinery/atmospherics.dm +++ b/code/modules/atmospherics/machinery/atmospherics.dm @@ -68,10 +68,13 @@ Pipelines + Other Objects -> Pipe network // Icons/overlays/underlays /obj/machinery/atmospherics/update_icon() var/turf/T = get_turf(loc) - if(!T || level == 2 || !T.intact) - plane = GAME_PLANE - else + if(T.transparent_floor) plane = FLOOR_PLANE + else + if(!T || level == 2 || !T.intact) + plane = GAME_PLANE + else + plane = FLOOR_PLANE /obj/machinery/atmospherics/proc/update_pipe_image() pipe_image = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) //the 20 puts it above Byond's darkness (not its opacity view) @@ -92,15 +95,18 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/add_underlay(turf/T, obj/machinery/atmospherics/node, direction, icon_connect_type) if(node) - if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe) && !T.transparent_floor) //underlays += SSair.icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node)) underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) else //underlays += SSair.icon_manager.get_atmos_icon("underlay_intact", direction, color_cache_name(node)) underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) else - //underlays += SSair.icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color) - underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type) + if(T.transparent_floor) //we want to keep pipes under transparent floors connected normally + underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) + else + //underlays += SSair.icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color) + underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type) /obj/machinery/atmospherics/proc/update_underlays() if(check_icon_cache()) @@ -340,12 +346,15 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/add_underlay_adapter(turf/T, obj/machinery/atmospherics/node, direction, icon_connect_type) //modified from add_underlay, does not make exposed underlays if(node) - if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe) && !T.transparent_floor) underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) else underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) else - underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "retracted" + icon_connect_type) + if(T.transparent_floor) //we want to keep pipes under transparent floors connected normally + underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) + else + underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "retracted" + icon_connect_type) /obj/machinery/atmospherics/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) From da9b4a80c9eec54659db00437180e9b5de5f0523 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Thu, 22 Apr 2021 20:53:46 +0100 Subject: [PATCH 08/17] mochi review --- code/game/machinery/Beacon.dm | 2 +- code/game/machinery/magnet.dm | 2 +- code/game/machinery/navbeacon.dm | 2 +- code/game/turfs/simulated/floor/plating.dm | 8 ++--- .../game/turfs/simulated/floor/transparent.dm | 32 ++++++++++--------- code/game/turfs/turf.dm | 2 +- .../atmospherics/machinery/atmospherics.dm | 4 +-- code/modules/power/cable.dm | 4 +-- code/modules/recycling/disposal.dm | 4 +-- 9 files changed, 31 insertions(+), 29 deletions(-) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 94e3b354d47..01eb2cb2075 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -4,7 +4,7 @@ name = "Bluespace Gigabeacon" desc = "A device that draws power from bluespace and creates a permanent tracking beacon." level = 1 // underfloor - layer = 2.5 + layer = WIRE_LAYER+0.001 anchored = 1 use_power = IDLE_POWER_USE idle_power_usage = 0 diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index c6ae20c6831..1a5a5ced2ec 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -11,7 +11,7 @@ name = "Electromagnetic Generator" desc = "A device that uses station power to create points of magnetic energy." level = 1 // underfloor - layer = 2.5 + layer = WIRE_LAYER+0.001 anchored = 1 use_power = IDLE_POWER_USE idle_power_usage = 50 diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index c3d64752f4e..7edbfaa217c 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -8,7 +8,7 @@ name = "navigation beacon" desc = "A radio beacon used for bot navigation." level = 1 // underfloor - layer = 2.5 + layer = WIRE_LAYER+0.001 anchored = 1 max_integrity = 500 armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 96d7339b876..2d3658e6626 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -80,10 +80,10 @@ return TRUE else to_chat(user, "You begin swapping the plating for glass...") - if(do_after(user, 30 * C.toolspeed, target = src)) + if(do_after(user, 3 SECONDS * C.toolspeed, target = src)) if(R.get_amount() >= 2 && !istype(src, /turf/simulated/floor/transparent/glass)) ChangeTurf(/turf/simulated/floor/transparent/glass) - playsound(src, C.usesound, 80, 1) + playsound(src, C.usesound, 80, TRUE) R.use(2) to_chat(user, "You swap the plating for glass.") new /obj/item/stack/sheet/metal(src, 2) @@ -99,10 +99,10 @@ return TRUE else to_chat(user, "You begin swapping the plating for reinforced glass...") - if(do_after(user, 30 * C.toolspeed, target = src)) + if(do_after(user, 3 SECONDS * C.toolspeed, target = src)) if(R.get_amount() >= 2 && !istype(src, /turf/simulated/floor/transparent/glass/reinforced)) ChangeTurf(/turf/simulated/floor/transparent/glass/reinforced) - playsound(src, C.usesound, 80, 1) + playsound(src, C.usesound, 80, TRUE) R.use(2) to_chat(user, "You swap the plating for reinforced glass.") new /obj/item/stack/sheet/metal(src, 2) diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm index ace15cdda61..0e9b292e73b 100644 --- a/code/game/turfs/simulated/floor/transparent.dm +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -6,7 +6,7 @@ baseturf = /turf/space broken_states = list("damaged1", "damaged2", "damaged3") smooth = SMOOTH_MORE - canSmoothWith = list(/turf/simulated/floor/transparent) + canSmoothWith = list(/turf/simulated/floor/transparent/glass) footstep = FOOTSTEP_PLATING light_power = 0.25 light_range = 2 @@ -20,32 +20,34 @@ var/image/I = image('icons/turf/space.dmi', src, SPACE_ICON_STATE) I.plane = PLANE_SPACE underlays += I - dir = 2 //dirs that are not 2 cause smoothing jank + dir = SOUTH //dirs that are not 2 cause smoothing jank icon_state = "" //Prevents default icon appearing behind the glass -/turf/simulated/floor/transparent/attackby(obj/item/C as obj, mob/user as mob, params) +/turf/simulated/floor/transparent/glass/attackby(obj/item/C, mob/user, params) if(!C || !user) return if(istype(C, /obj/item/crowbar)) var/obj/item/stack/R = user.get_inactive_hand() if(istype(R, /obj/item/stack/sheet/metal)) if(R.get_amount() < 2) //not enough metal in the stack - to_chat(user, "You also need to hold two sheets of metal to dismantle a glass floor!") + to_chat(user, "You also need to hold two sheets of metal to dismantle [src]!") return else to_chat(user, "You begin replacing the glass...") - playsound(src, C.usesound, 80, 1) - if(do_after(user, 30 * C.toolspeed, target = src)) - if(!src.transparent_floor) - return - if(istype(src, /turf/simulated/floor/transparent/glass/reinforced)) - new /obj/item/stack/sheet/rglass(src, 2) - else - new /obj/item/stack/sheet/glass(src, 2) - R.use(2) - ChangeTurf(/turf/simulated/floor/plating) + playsound(src, C.usesound, 80, TRUE) + if(do_after(user, 3 SECONDS * C.toolspeed, target = src)) + if(R.get_amount() >= 2 && !istype(src, /turf/simulated/floor/plating)) + if(!transparent_floor) + return + if(istype(src, /turf/simulated/floor/transparent/glass/reinforced)) + new /obj/item/stack/sheet/rglass(src, 2) + else + new /obj/item/stack/sheet/glass(src, 2) + R.use(2) + ChangeTurf(/turf/simulated/floor/plating) + else //not holding metal at all - to_chat(user, "You also need to hold two sheets of metal to dismantle a glass floor!") + to_chat(user, "You also need to hold two sheets of metal to dismantle [src]!") return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 36381b72ecc..61f2e4674ab 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -6,7 +6,7 @@ var/intact = TRUE var/turf/baseturf = /turf/space var/slowdown = 0 //negative for faster, positive for slower - var/transparent_floor = FALSE //true for transparent floors + var/transparent_floor = FALSE //used to check if pipes should be visible under the turf or not ///Properties for open tiles (/floor) /// All the gas vars, on the turf, are meant to be utilized for initializing a gas datum and setting its first gas values; the turf vars are never further modified at runtime; it is never directly used for calculations by the atmospherics system. diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm index 8d21004326b..42f7a088b13 100644 --- a/code/modules/atmospherics/machinery/atmospherics.dm +++ b/code/modules/atmospherics/machinery/atmospherics.dm @@ -172,7 +172,7 @@ Pipelines + Other Objects -> Pipe network var/turf/T = get_turf(src) if(can_unwrench && istype(W, /obj/item/wrench)) if(T.transparent_floor) - to_chat(user, "You must remove the glass first.") + to_chat(user, "You can't interact with something that's under the floor!") return if(level == 1 && isturf(T) && T.intact) to_chat(user, "You must remove the plating first.") @@ -213,7 +213,7 @@ Pipelines + Other Objects -> Pipe network deconstruct(TRUE) else if(T.transparent_floor) - to_chat(user, "You must remove the glass first.") + to_chat(user, "You can't interact with something that's under the floor!") return return ..() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 50d7ff6db8d..6cd675af8aa 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -166,7 +166,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/attackby(obj/item/W, mob/user) var/turf/T = get_turf(src) if(T.transparent_floor) - to_chat(user, "You must remove the glass first.") + to_chat(user, "You can't interact with something that's under the floor!") return if(T.intact) return @@ -211,7 +211,7 @@ By design, d1 is the smallest direction and d2 is the highest . = TRUE var/turf/T = get_turf(src) if(T.transparent_floor) - to_chat(user, "You must remove the glass first.") + to_chat(user, "You can't interact with something that's under the floor!") return if(T.intact) return diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 2b3f4765c91..835d669ef4b 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -894,7 +894,7 @@ /obj/structure/disposalpipe/attackby(obj/item/I, mob/user, params) var/turf/T = get_turf(src) if(T.intact || T.transparent_floor) - to_chat(user, "You must remove the [T.transparent_floor ? "glass": "plating"] first.") + to_chat(user, "You can't interact with something that's under the floor!") return // prevent interaction with T-scanner revealed pipes and pipes under glass add_fingerprint(user) @@ -905,7 +905,7 @@ if(!I.tool_use_check(user, 0)) return if(T.transparent_floor) - to_chat(user, "You must remove the glass first.") + to_chat(user, "You can't interact with something that's under the floor!") return WELDER_ATTEMPT_SLICING_MESSAGE if(!I.use_tool(src, user, 30, volume = I.tool_volume)) From d50c7273fcb91ce8b17af226916938649a755df9 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Fri, 23 Apr 2021 19:55:09 +0100 Subject: [PATCH 09/17] more fixes --- code/game/machinery/pipe/construction.dm | 6 ++++++ code/game/objects/items/devices/pipe_painter.dm | 4 ++-- code/game/objects/obj_defense.dm | 4 ++-- code/game/turfs/simulated/floor/transparent.dm | 2 +- code/modules/atmospherics/machinery/atmospherics.dm | 9 +++++++-- code/modules/power/cable.dm | 12 ++++-------- code/modules/recycling/disposal.dm | 2 +- 7 files changed, 23 insertions(+), 16 deletions(-) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 69166311caa..009f135401c 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -333,12 +333,18 @@ fixdir() var/pipe_dir = get_pipe_dir() + var/turf/T = get_turf(loc) for(var/obj/machinery/atmospherics/M in src.loc) if((M.initialize_directions & pipe_dir) && M.check_connect_types_construction(M,src)) // matches at least one direction on either type of pipe to_chat(user, "There is already a pipe of the same type at this location.") return 1 + if(pipe_type in list(PIPE_SUPPLY_STRAIGHT, PIPE_SUPPLY_BENT, PIPE_SCRUBBERS_STRAIGHT, PIPE_SCRUBBERS_BENT, PIPE_HE_STRAIGHT, PIPE_HE_BENT, PIPE_SUPPLY_MANIFOLD, PIPE_SCRUBBERS_MANIFOLD, PIPE_SUPPLY_MANIFOLD4W, PIPE_SCRUBBERS_MANIFOLD4W, PIPE_UVENT, PIPE_SUPPLY_CAP, PIPE_SCRUBBERS_CAP, PIPE_PASV_VENT, PIPE_DP_VENT, PIPE_PASSIVE_GATE)) + if(T.transparent_floor) //stops jank with transparent floors and pipes + to_chat(user, "You can only fix simple pipes and devices over glass floors!.") + return 1 + switch(pipe_type) //What kind of heartless person thought of doing this? if(PIPE_SIMPLE_STRAIGHT, PIPE_SIMPLE_BENT) var/obj/machinery/atmospherics/pipe/simple/P = new( src.loc ) diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm index 5fb3f3dc597..ca133ec05a6 100644 --- a/code/game/objects/items/devices/pipe_painter.dm +++ b/code/game/objects/items/devices/pipe_painter.dm @@ -24,8 +24,8 @@ return var/turf/T = P.loc - if(P.level < 2 && T.level==1 && isturf(T) && T.intact) - to_chat(user, "You must remove the plating first.") + if(P.level < 2 && T.level==1 && isturf(T) && T.intact && !T.transparent_floor) + to_chat(user, "You must remove the floor tiling first.") return playsound(loc, usesound, 30, TRUE) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index b796740a60b..63132c315fb 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -90,7 +90,7 @@ /obj/blob_act(obj/structure/blob/B) if(isturf(loc)) var/turf/T = loc - if(T.intact && level == 1) //the blob doesn't destroy thing below the floor + if(T.intact && level == 1 || T.transparent_floor) //the blob doesn't destroy thing below the floor return take_damage(400, BRUTE, "melee", 0, get_dir(src, B)) @@ -199,7 +199,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e /obj/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) if(isturf(loc)) var/turf/T = loc - if(T.intact && level == 1) //fire can't damage things hidden below the floor. + if(T.intact && level == 1 || T.transparent_floor) //fire can't damage things hidden below the floor. return ..() if(exposed_temperature && !(resistance_flags & FIRE_PROOF)) diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm index 0e9b292e73b..d5d4b4a6397 100644 --- a/code/game/turfs/simulated/floor/transparent.dm +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -20,7 +20,7 @@ var/image/I = image('icons/turf/space.dmi', src, SPACE_ICON_STATE) I.plane = PLANE_SPACE underlays += I - dir = SOUTH //dirs that are not 2 cause smoothing jank + dir = SOUTH //dirs that are not 2/south cause smoothing jank icon_state = "" //Prevents default icon appearing behind the glass /turf/simulated/floor/transparent/glass/attackby(obj/item/C, mob/user, params) diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm index 42f7a088b13..b5426fcc001 100644 --- a/code/modules/atmospherics/machinery/atmospherics.dm +++ b/code/modules/atmospherics/machinery/atmospherics.dm @@ -171,7 +171,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/attackby(obj/item/W, mob/user) var/turf/T = get_turf(src) if(can_unwrench && istype(W, /obj/item/wrench)) - if(T.transparent_floor) + if(T.transparent_floor && istype(src, /obj/machinery/atmospherics/pipe)) to_chat(user, "You can't interact with something that's under the floor!") return if(level == 1 && isturf(T) && T.intact) @@ -249,7 +249,12 @@ Pipelines + Other Objects -> Pipe network dir = D initialize_directions = P var/turf/T = loc - level = T.intact ? 2 : 1 + if(!T.transparent_floor) + level = T.intact ? 2 : 1 + else + level = 2 + plane = GAME_PLANE + layer = GAS_PIPE_VISIBLE_LAYER add_fingerprint(usr) if(!SSair.initialized) //If there's no atmos subsystem, we can't really initialize pipenets SSair.machinery_to_construct.Add(src) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 6cd675af8aa..a1b3cb8b8f6 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -165,11 +165,9 @@ By design, d1 is the smallest direction and d2 is the highest // /obj/structure/cable/attackby(obj/item/W, mob/user) var/turf/T = get_turf(src) - if(T.transparent_floor) + if(T.transparent_floor || T.intact) to_chat(user, "You can't interact with something that's under the floor!") return - if(T.intact) - return else if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = W @@ -210,11 +208,9 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/wirecutter_act(mob/user, obj/item/I) . = TRUE var/turf/T = get_turf(src) - if(T.transparent_floor) + if(T.transparent_floor || T.intact) to_chat(user, "You can't interact with something that's under the floor!") return - if(T.intact) - return if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return if(shock(user, 50)) @@ -712,7 +708,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai var/turf/T = get_turf(C) - if(!isturf(T) || T.intact) // sanity checks, also stop use interacting with T-scanner revealed cable + if(!isturf(T) || T.intact || T.transparent_floor) // sanity checks, also stop use interacting with T-scanner revealed cable return if(get_dist(C, user) > 1) // make sure it's close enough @@ -728,7 +724,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai // one end of the clicked cable is pointing towards us if(C.d1 == dirn || C.d2 == dirn) - if(U.intact) // can't place a cable if the floor is complete + if(U.intact || U.transparent_floor) // can't place a cable if the floor is complete to_chat(user, "You can't lay cable there unless the floor tiles are removed!") return else diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 835d669ef4b..62c121f1ffa 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -1210,7 +1210,7 @@ return var/turf/T = src.loc - if(T.intact) + if(T.intact || T.transparent_floor) return // prevent interaction with T-scanner revealed pipes src.add_fingerprint(user) From c7db5e0d168a4515e2fa6adef9ee274ef9082b3e Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Fri, 23 Apr 2021 20:58:28 +0100 Subject: [PATCH 10/17] fixes final steelslayer issue --- code/game/machinery/pipe/construction.dm | 2 +- code/modules/atmospherics/machinery/atmospherics.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 009f135401c..cbea83d439e 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -507,7 +507,7 @@ user.visible_message( \ "[user] fastens the [src].", \ "You have fastened the [src].", \ - "You hear ratchet.") + "You hear ratcheting.") qdel(src) // remove the pipe item return diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm index b5426fcc001..7064cd84430 100644 --- a/code/modules/atmospherics/machinery/atmospherics.dm +++ b/code/modules/atmospherics/machinery/atmospherics.dm @@ -171,7 +171,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/attackby(obj/item/W, mob/user) var/turf/T = get_turf(src) if(can_unwrench && istype(W, /obj/item/wrench)) - if(T.transparent_floor && istype(src, /obj/machinery/atmospherics/pipe)) + if(T.transparent_floor && istype(src, /obj/machinery/atmospherics/pipe) && layer != GAS_PIPE_VISIBLE_LAYER) //pipes on GAS_PIPE_VISIBLE_LAYER are above the transparent floor and should be interactable to_chat(user, "You can't interact with something that's under the floor!") return if(level == 1 && isturf(T) && T.intact) From 557d4e4af5d69a9c628a3060b0e4ad371f6cc036 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Sat, 1 May 2021 20:33:40 +0100 Subject: [PATCH 11/17] moar glass! --- code/game/turfs/simulated/floor/plating.dm | 42 ++++++--------- .../game/turfs/simulated/floor/transparent.dm | 51 ++++++++++++++---- icons/turf/floors/glass.dmi | Bin 3655 -> 2316 bytes icons/turf/floors/plasmaglass.dmi | Bin 0 -> 1514 bytes icons/turf/floors/plastitaniumglass.dmi | Bin 0 -> 1336 bytes icons/turf/floors/reinf_glass.dmi | Bin 6081 -> 3885 bytes icons/turf/floors/reinf_plasmaglass.dmi | Bin 0 -> 2677 bytes icons/turf/floors/titaniumglass.dmi | Bin 0 -> 1279 bytes 8 files changed, 59 insertions(+), 34 deletions(-) create mode 100644 icons/turf/floors/plasmaglass.dmi create mode 100644 icons/turf/floors/plastitaniumglass.dmi create mode 100644 icons/turf/floors/reinf_plasmaglass.dmi create mode 100644 icons/turf/floors/titaniumglass.dmi diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 2d3658e6626..8a98d2f4616 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -70,41 +70,33 @@ to_chat(user, "This section is too damaged to support a tile! Use a welder to fix the damage.") return TRUE - else if(istype(C, /obj/item/stack/sheet/glass)) + else if(is_glass_sheet(C)) if(broken || burnt) to_chat(user, "Repair the plating first!") return TRUE - var/obj/item/stack/sheet/glass/R = C + var/obj/item/stack/sheet/R = C if(R.get_amount() < 2) - to_chat(user, "You need two sheets of glass to build a glass floor!") + to_chat(user, "You need two sheets of [C] to build a [C] floor!") return TRUE else - to_chat(user, "You begin swapping the plating for glass...") + to_chat(user, "You begin swapping the plating for [C]...") if(do_after(user, 3 SECONDS * C.toolspeed, target = src)) if(R.get_amount() >= 2 && !istype(src, /turf/simulated/floor/transparent/glass)) - ChangeTurf(/turf/simulated/floor/transparent/glass) + if(istype(C, /obj/item/stack/sheet/plasmaglass)) //So, what type of glass floor do we want today? + ChangeTurf(/turf/simulated/floor/transparent/glass/plasma) + else if(istype(C, /obj/item/stack/sheet/plasmarglass)) + ChangeTurf(/turf/simulated/floor/transparent/glass/reinforced/plasma) + else if(istype(C, /obj/item/stack/sheet/glass)) + ChangeTurf(/turf/simulated/floor/transparent/glass) + else if(istype(C, /obj/item/stack/sheet/rglass)) + ChangeTurf(/turf/simulated/floor/transparent/glass/reinforced) + else if(istype(C, /obj/item/stack/sheet/titaniumglass)) + ChangeTurf(/turf/simulated/floor/transparent/glass/titanium) + else if(istype(C, /obj/item/stack/sheet/plastitaniumglass)) + ChangeTurf(/turf/simulated/floor/transparent/glass/titanium/plastic) playsound(src, C.usesound, 80, TRUE) R.use(2) - to_chat(user, "You swap the plating for glass.") - new /obj/item/stack/sheet/metal(src, 2) - return TRUE - - else if(istype(C, /obj/item/stack/sheet/rglass)) - if(broken || burnt) - to_chat(user, "Repair the plating first!") - return TRUE - var/obj/item/stack/sheet/rglass/R = C - if(R.get_amount() < 2) - to_chat(user, "You need two sheets of reinforced glass to build a reinforced glass floor!") - return TRUE - else - to_chat(user, "You begin swapping the plating for reinforced glass...") - if(do_after(user, 3 SECONDS * C.toolspeed, target = src)) - if(R.get_amount() >= 2 && !istype(src, /turf/simulated/floor/transparent/glass/reinforced)) - ChangeTurf(/turf/simulated/floor/transparent/glass/reinforced) - playsound(src, C.usesound, 80, TRUE) - R.use(2) - to_chat(user, "You swap the plating for reinforced glass.") + to_chat(user, "You swap the plating for [C].") new /obj/item/stack/sheet/metal(src, 2) return TRUE diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm index d5d4b4a6397..7b8904bef33 100644 --- a/code/game/turfs/simulated/floor/transparent.dm +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -1,12 +1,11 @@ /turf/simulated/floor/transparent/glass name = "glass floor" - desc = "Don't jump on it, or do, I'm not your mom." + desc = "Don't jump on it... Or do, I'm not your mom." icon = 'icons/turf/floors/glass.dmi' icon_state = "unsmooth" baseturf = /turf/space - broken_states = list("damaged1", "damaged2", "damaged3") - smooth = SMOOTH_MORE - canSmoothWith = list(/turf/simulated/floor/transparent/glass) + smooth = SMOOTH_TRUE + canSmoothWith = list(/turf/simulated/floor/transparent/glass, /turf/simulated/floor/transparent/glass/reinforced, /turf/simulated/floor/transparent/glass/plasma, /turf/simulated/floor/transparent/glass/reinforced/plasma) footstep = FOOTSTEP_PLATING light_power = 0.25 light_range = 2 @@ -30,24 +29,32 @@ var/obj/item/stack/R = user.get_inactive_hand() if(istype(R, /obj/item/stack/sheet/metal)) if(R.get_amount() < 2) //not enough metal in the stack - to_chat(user, "You also need to hold two sheets of metal to dismantle [src]!") + to_chat(user, "You also need to hold two sheets of metal to dismantle \the [src]!") return else - to_chat(user, "You begin replacing the glass...") + to_chat(user, "You begin replacing \the [src]...") playsound(src, C.usesound, 80, TRUE) if(do_after(user, 3 SECONDS * C.toolspeed, target = src)) if(R.get_amount() >= 2 && !istype(src, /turf/simulated/floor/plating)) if(!transparent_floor) return - if(istype(src, /turf/simulated/floor/transparent/glass/reinforced)) + if(istype(src, /turf/simulated/floor/transparent/glass/reinforced)) //What material is returned? Depends on the turf new /obj/item/stack/sheet/rglass(src, 2) - else + else if(istype(src, /turf/simulated/floor/transparent/glass)) new /obj/item/stack/sheet/glass(src, 2) + else if(istype(src, /turf/simulated/floor/transparent/glass/plasma)) + new /obj/item/stack/sheet/plasmaglass(src, 2) + else if(istype(src, /turf/simulated/floor/transparent/glass/reinforced/plasma)) + new /obj/item/stack/sheet/plasmarglass(src, 2) + else if(istype(src, /turf/simulated/floor/transparent/glass/titanium)) + new /obj/item/stack/sheet/titaniumglass(src, 2) + else if(istype(src, /turf/simulated/floor/transparent/glass/titanium/plastic)) + new /obj/item/stack/sheet/plastitaniumglass(src, 2) R.use(2) ChangeTurf(/turf/simulated/floor/plating) else //not holding metal at all - to_chat(user, "You also need to hold two sheets of metal to dismantle [src]!") + to_chat(user, "You also need to hold two sheets of metal to dismantle \the [src]!") return @@ -61,3 +68,29 @@ /turf/simulated/floor/transparent/glass/reinforced/acid_act(acidpwr, acid_volume) acidpwr = min(acidpwr, 50) . = ..() + +/turf/simulated/floor/transparent/glass/plasma + name = "plasma glass floor" + desc = "Wait, was space always that color?" + icon = 'icons/turf/floors/plasmaglass.dmi' + thermal_conductivity = 0.030 + heat_capacity = 75000 + +/turf/simulated/floor/transparent/glass/reinforced/plasma + name = "reinforced plasma glass floor" + desc = "For when you REALLY don't want your floor choice to suffocate everyone." + icon = 'icons/turf/floors/reinf_plasmaglass.dmi' + thermal_conductivity = 0.025 + heat_capacity = 325000 + +/turf/simulated/floor/transparent/glass/titanium + name = "titanium glass floor" + canSmoothWith = list(/turf/simulated/floor/transparent/glass/titanium, /turf/simulated/floor/transparent/glass/titanium/plastic) + desc = "Stylish AND strong!" + icon = 'icons/turf/floors/titaniumglass.dmi' + thermal_conductivity = 0.025 + heat_capacity = 325000 + +/turf/simulated/floor/transparent/glass/titanium/plastic + name = "plastitanium glass floor" + icon = 'icons/turf/floors/plastitaniumglass.dmi' diff --git a/icons/turf/floors/glass.dmi b/icons/turf/floors/glass.dmi index 1a2a4c555b475cb43dbaf78c23b319b50fb3c131..1d0f13d0c06891b3eb875b250ddb8c4626fa4f2e 100644 GIT binary patch literal 2316 zcmaJ@c{CeX7mrd~scD&^9Tg0^45bxIOA|{J9j#j05F$=B_9Q5^HDN4`7S$@HrDFIn zYDr7W2x9Ep7)q1WKDMT$VUQ4sBop8H=FIu#Oy`gH?z!)s`|iEJ-~FBQ?p?iNuPA?1 z9smF+IyyjI#kP2F$x4g&^x*&lv1yHS_lSg|Zuvz7g+&HoF#teJVdk%| Tr zyLF!$n2^aiDcM@FGS+U#+|wFj1qZ*!bk|QG01^_4dw0D}pV3lrQ!X}F{^K~kT5XYB zQv~XN6g88YN20sEsC)q8BoT_DOx06Cax@m<-YPl4Un)Z?V_(K^avy`f?msXxW|~B_ z%94zmu#kU$$WqH%?&K*4SL m@Rr*$2Fv0D!E#Bh=bGrjRv#Ch%*Ry7cdDNp&D8gsGu!v6hswx$I4+ @w zj}3ikUtf`aP5u};$CupL2ft76x$r5pOs8jX|ER&$FMiTPV3z0YpzS*8Kd(HrTv|3C zUz@gAZf4@zy2GzTi=r9Mqs`G36%(BVrQ_KyDt2}C^=^Y?yhewSeiZ+0hf!fn(edPV zD-2FZHEUp!W`&WHWq1U%Ytu3hZG}Sf13?2#x;b_T!2+A>0fo-5tI_iHrIWv3_bbRV zOi$~hQmJ+(1br$8=~GnbQ8N_?ia RlyxvVzC6nS&V{P|e9{C#7$VTp!(f?f zd3?Vuh2os}l9IEHh!ly!CSYyGzzm+jml(uDj>5+oW|2W{vPg-!0ZX&ew0QmzE2DxP z#q_>60tL G~J?D-@)v_45U;I bBSXh@_i>fs%z~zH(^&NmrvNfusqEG{v z&NEHC-K>cIZb{Ny{h-}YShUha_EJo2L=vVWV?gHRr_IgrQxn1s{ru0+^;hLDwx*ri z;M2}e+#C3F*&{4_TOfq8@AG{8c|+ZU-V^rVe@wU{CJeRf@O=Iy !`UM#}{3b?$QwpzR8ss_%%pwzXB7dGVWdOXvA@4~)bLz4XMsoT01` zezIm?rEbptJ9sO$Ah1?U8>nc%@@EI+&w~DMj?T?0_3`JXas=F_1|sR-C+xoua8Rmu z#Iv<08xN>C1W7fxkf^N f@6W3$(DPca4IHd_0eg0I+Vy(vAIUVMJi;80v zwGPhUahS#=eC_t*rt<>E@GrNV0>(uxbO`#*rD-8KEsYWT)GRw{TDx_B>2})yrvhhX z;`rvgg^7upLI$wP->;2K4!-7hWQ32T@{Esb89HC7zHfF^@yJ0!PZscg-}BrrtBww) z%!p3Wh|)$HSxY`62<|piT`bT0=2FU8y&Ik{chHxE1Nu?QPrY9_vYZ5wp2F=pETn>! zaE-ZnDeWR8rl1{eFA~Mdm}M;maW<#$kC?`Z&+a+7W)Xx6K3y9n^n@_c>Nk@ttaQjR zjt-avUcBVsQg*?OGrQ?g6fKb1UIWMNvb$;8Ok{|6EUHd`8JUR@d|+MXaPcuOqg`;6 zeR@A8Pbn#Fy)%ZOoBBSr!^qb03oT3K97YY%yH@zVoXJ2yns(R6RJ|tW>W}yTKGX>) zzbdn{cMylXimVkCHd0u?*+@YNZH*ukFRr+^94wh{vsTaUOm2O>#B)X&doVu^@22y- z^*9Uz=PE22|Afa=J~PZy@U?*x2P0$Q#9mV=Q% *Z#x6v z#DMmrdEvFMlg0UHyp`M_&xOR5P_LV}^UHu5q2cOAGIqxZ-`>ErVn4YieBdYLt*3T} ztE a2+<%M*~%;9?1Zk+y=tDs6a_@VlGFX`Pg2$f13{;{6f64$bfx)N zTuJrdV?Ndu`5aNYQh`P;;<#cIZFO2Ld|ipy_LJUxchd!5RE>x?G+AI$`MgZgZTwvT zz%4%`dFd_VYz;{|=5lS#=@R_JMo8wjq-@rpD^bEJ-|W}2qUF;IDX1zE@;Yc-7`u?N z8K!pemJiWhkw@N=tEZ9r`9Ek-8LrtdpN;BSF^gpD=2DE2!%Sc?7KyM}+d~DtQ^Hdy z_V*#8e7I~*c7i23BXsz+^UXSeKJIiLFNoB#*^p2ZzLbmRt65#1upTuu9I{B`8C%9) z&-cc7L7FJc4Lh1BtndRSkCdqDV9}?y;2rldo0QWJeuNgZ^h%^(7gzg|HKsfJl_5Og z5C{E4wFW$# DoPD@FHOv0?vgS904-IF^S9NqmwaKfWOg4$L)}-1tUFM&+i5WIt zQkHi2XmL~4;wOG DV!DApEZX z=Z#MnN%wo5&Rdo_%n5yQ=U9E_aeh>X!F< |@xEHd4l=YsHJ--LZKn*3zjY*K2+9g6^f? z*{8<1*(S9%8kR dMWQt1$I07d41fEgKVD7~Ou0xU zP_Mh&{&+8e16^xIr@1 b>)SHwF3N9MgCs290(!8S@j)^5T-D<6)g&sIjB($`7B+edXFKkVMfNMp2R?>- zwfw!6HP%$FxNxC6E9XSAj~v<0eHt)f(ajiCmrp@Ty%PB_$TI0x6z^~r!-jGEoB!<~ zmJ?wGMBW-L7|>sI(=yxax+Smyo*>_YB~G3MrQisQVD%DQxy2$N@EsAOz_bG-A3}JK zpnDm*d$AkdGk`J^yk`nW_;^pZp |^k3s9p11kvs{WGpSF(@e^rZXQmX^w(Qw?70DMtB!hkvA|Hoi67-bz86Ia-cXDS^ z4<6@og4a=*sBPHhmTe^!+RQSwCBuVIox M9b6vDtdtK-jzLqBRBl@ACST}jZR|6TU(2=>;QONJmX z61*n~@3X>!wCnd>P>~O1=#YlsX)N-dc8v#Ar}7s9+lee^ZNqF(nk<91kMbgeNOK-7 zQ!!{ct0(I{IMm3;KL4N3|4RJ3YX9-49?Jg^G~Z1e>VCwC5>4WfHc8Fq3`MT?fehJ` zJ*=l+R=uV`Yym$2E3v*eR1J0LyTP46edAcDdCm8M80G+Y>P_Zqj=Z8%p7;pif(kcO zA4!=WgR0*(T)BaSHYQNt@XJ1$0LGq9cCd@U@*ICrPSIO4n-RoQWq0E+0I=)H%+Kz0v1c+vuqk;D7B9V zgWpC5L5Sui!Be|?EJ`M-Mv*CHX$lp5Kp_bIwWW>*sbg3!Oc )g! #MEtFUrx27zV`E2cp z#HWt+&tg&V1MUpOXlY;Du{+FLY+o_dO`&RBcp~_WsJl7YxBSUv7!c<~nHFq-n;ArS zvAVs`{|cK;Lg7v$*Bm1Vi!;k-Q;I_WA@lq*akv(Fwd GKC; zsz9gg+qyz=?Vp=a;786E+dv4ik9gX qXe}F0BB2oCFMOk(gdOY#198Aqofrp ci^wA8kFLNO>7pPBEqaU;U|W1$G%=RI(C zKG;D;;0#?AJEaN}73l}-$iZgaB(wZV9fjwcgtbX)gA)otzlwDu?N7|vy6eCk^JthM zvBwYPgC{~E8nEXYkbNBT11u#093*tw_nl`4snUZGV|R8EP_CLh6AzYzVCd&3*HAw= z=Qx8kzBHTG&)7dTKICJTCLq0T2?kaeo?L9be7T0C8rRE$r&lq4+yDo2SXh=Tus} A8FYAOD?uMGZE?7N|9;dg zi|BHxAndd!gxZMvyZrZ88{#*To}PR|;bBEmNqnMjDmWLv6OLBbuTF%s>XG4}b29`Z zQFjD^itg4je!R*u6Y|X9oLHk2Xf>J#Q%h1}wHhljbW|DJP~vG1+j xLd{G^dIr-j!|7!ykpK<0=Q8)*GMDDg|zep9*lmP$zexy%V)- z9MgyAp|(?@pB=yW5823YT9?!0eOYDUW?Y!^HX|UW!lBhL`}hJnHup=%w;6>7EXrsD zBcLO-d0H-7eQ8hs;0k7>)|Mh@n`RDvIm&x>j#j4axOi3F&atjpaI^P*6UQDJ%Ux)D zWy`ZLv2msf3tu#G`or+OzcdfJF;ZT_`!lRBvliEM6@WZ0&^F#ELNr<&rj>uqaA zwIbV~c1#*1Q9)@~^Hg0Ve0k2cfu*#pNC##*a$}gER~OU%RLv_T5x&EyvtIdXc_S`< z1)NCUklDRzPEWE}+_?M#)GpSvH53_Sjf2Q!Zkp g(J()_2biO1_i5^N26j>toFWUGM8no6;{OMRD dZX5 zzh9DXeqJ1JcmK-HIu*}Cnd?7g!a}dld;YUAyh&@(BYFPQOI0*;%(fj3nV5R>-tlko z`=_bQ=_1AyLy{f7U3-=sduqC%4ar4FY_Wq^w znLXz7@0@q()Vj)VX-2+%TP3D^JGGagM4ItX7ek_J!v-aX2tkE490Fl19NJ7RqKt>M zye@xv?Jj%5uw{WjQ?+F8!+-znckkY9{Wnzl$X@w%>-N|ENDF)R -2S*@#$awx0f7$d-d#=GbtScP0waU$8*n%^;`B^?)H`+ zDol5@j+IW?nYov9ch;mOcemdZUU18H#fr1p(>Xr8tlJ@$_4`-$d-j~)btc=loi|^z zxvtaQVYk`&v?;IF&u2J$>Wq2LqFt}m9X1<%=AEB?yXM$`r-rnvX-4m|uGbuUUZKhY z_aeIcI95;IFLJ!b?#-t2>?wBf+rK-1QkKB28WK)$LvDU&-c?#@zeuImP5E`*k#qd& zTF-8q7B+l06p2p{ekN3AcR=T~m2mvS#GN4@^BAsQzkY3NiQR#(Rcn(D-L-!0<@dO5 zYmxrL&U5S$^>*>Q|NMUa^_=*V?Fne{0=EwmUFrL4zq_yen{s|@uKk_jcVBn!++T0Q zgey`Zn!D1bPtLqL*_mTjc3!RS)^op9U+%qE{%h+4U}Q%5v{ih6{^rSd4|mT=A$B`C z-&aMZ|NZgnZ*_#8?)CmIP0!q`-@fjCTDi`mZ~NvXKV7fOSBf4wuiX9bVn)e=sSCJ% z*EoEy+p_D{zB= Booi hE_s `$mb&5_7~u#Hj7 zyjTAA%5}|U6-CLvAX%wJpy}7&fA@|H%g?*b7SVHBqxf sODrxgq@ y}Kz3lrn-=#A}Uix_*J12fvZ{A4*p2LZLb;kmXqu1LX{#jjBWo2V; zFCP~d$G3j{`r|tP|2=>Ee!ut51F!kp@8*^3Jes$rmg)W4-7>}vo(yh`@87>aemr{9 zH_km^zrxI>VsGB$4l9Gc9S|$y@3lZdn~a9wx`=Q^Ts$`sVxZWH-m L1T_RYJlMUg;k=C2^P^JCiI&?OBp8IR{J)SR^gx$&3zI<~w*vzs zivTv_z*NS0zt6ATZ>d`SpCRmjutEa^69*RJhWUZGYNfnP&lR!%?@VK15N6bo TQr_}4 zo>7T0Cr9w&FQtrG3}%~pFa0vRu#&~#r(4l$>4(#W9J&R%C(QeN$~te>KFLRGcyYNK z=ocT}4PV!HePVp`r!NDKGA#Z!H =eJcXGZObDd}mnByk|RKfmMg>0hP~h zkHsf$2yJ+re8wn#Lv_RB$kM$rjK*ihw{Tb*@6PjPFt=8Xk6!W%9H3YEL1DF`4s8Ed zW>Cnjl6PSE%=Crr2g5a+dhCG-4&WaV4bP>*)}1`#>#BR@es%D*?c0u28wE$Fc7OeT zZ`!Y`GivkGGIjE|{<|mrd4KP+9qPut*D^N#yXQW+hWGhS^UXZsSwOjV -zp3i?EE8OApPlh#Y8)Ck4*??Gl7nE2I++>z}{_GBO#3PoDU4=K^mbLF( zoR@$0(=3LreC4R++%4`Yd))qTum#8%_H6e^iu*9hvhLj{js+H#tU3wbe*ZOmUMJ{d za~_z?AF&_M+_zLrD!7HAE1vP#jDH8VKbZZe)O2p%VFrz~TK^+=Y8@C@8<;>I319%Z zor{6-jYz_iOAO2Fr!fcoVTgDa&>183;Kxoz5qk! %Q+4Hy5YP8+U93 z0ARE8F^5y2q^-3L%HTJZ6TBZ3^*GNzVjO~^1EWGCVnVT30pL3M0sGCyM*XeHKM;0J zyPxm3s;PN=`%i;-2*v~Ed9Ny73cYc)siI#MewRRFNzNV2>P}Al?r!h$(z$=8*yh&j z9LttRu>;AOrCg69db*|X=G~mwgSyF O+piZ1|%cqu_fJ-P>TGWdHcyb*)}iM6vrOz1D7| zj^Nn`<>UutX=O)DE+Zjy$9}8+Z@#|$(n(itEzg2bB!4wgT7)W1;%*NN41|8V9pr6p zVG;N#oT?O7xg%7@E9?q$dGp6@Ts_oJx+J~^05xAe=D%)k)m}2=H;2O|E19Ifm(2iR zYwFSGmubJ5iiASp?dLI2-2(U71FD&zAO&h+Zb*XzgVqDU)Yp?emoMGN*{*EY#f@qL z0MExb|7gKZ|LvE0B6q|#nzs&G&b+PsJ$Eqa&D$E|&UXa`PTfq)?(Xhf!Zsj%norex z4h6D%cDM|utJJoJKlI)96?l8-P=LQ+!8R^(i4ppYwYkxx!iriQIQ+?HmR&W>S|mhV zX8a}%?t3xFBB|M _tu4)vmhoh}g15iM7YpxP8Qf^xj(w3Dol0{YixJ+mJ zY5J#84S}9&9T9%!v#26)XBr&K8gf?HF5+(?)@@;eP7Iy*KtC?;rc}fnFrOjZARN&z zs44uIX1_o9G|Zb%;A1<~ql;FH#ypYZ8AqOqn7aY`sAp%?nXX4dsYuEHv6WvX`TkjU z5xAP!tzebahV(xX0yEe4PxEUiFCI&6wD}fZThF9vz)bGV`1V%$z6sYMm0kG2kT*~F zRcF*}bN1&pwhV~~QkI%n)H^R9Y0UmM8l~OM Y3&5SXQp0Eod%(t7fO%&a+W$dIKr3z{k=YmxrN4?$ANE@8D#DB; z9MS7!2mibk1C);*6iBRP2?%cjMY(-(^Xb0x8KY(}V&`OgnE^7%cs-nWSng0YWW>#* z0~5oBjebagK20f7ZlCwq|KQPosdi4P$K!uP=*!QJl8;*5?$UAmOm{bEMLmf!>5AUg zrG5rmxUzhI&UF`L#P1ckqVSi6f~TX@W6)!JgWWgh4i}tt+286nN&E~(cO9)HFyPk8 za?70SMYDJP1EqG Yh`_`w@fguII$>R@KvLacti#WZx?ZOirB8ZjkJlBoGqbK z_V0nI7}$wM)% UM zhdUbsqE4$HA0+}S35+@nUHc)1%E^QqX%WHrg&|&rxfuhM&}S&4CyHS(bAnr#^2?&U zP?)*h $na&@&)EiA8CPaW_N2{|S|Z@z~o zj+;@eqj&EtmwapD3{4kPn=ZJgRH#J5i9#Ig;F&XrXWcpfd|VDME=Jd%_ZqrlpU+qy z=pP=wnWu7%uQVU5TV}Abskvjqcq2!D#181AU|D>JC$XOkC9ZYCnc|Ig+EH*~Ji$~; z$GG@6f#4_EHAwbe4ebsi)j;Vx M}9np?( 6mkcbw(domvtx<#+oDC;3)6^2a&Yyh7ok4 z T$PQVYfk%q5?VyOIJEx0^6`w zJO0&v13W+ho?WI3b-H@ 4FHwk!AbYgP98e#L*CU_fjXXb-d6i{O|cyR8^Y{Yxh-X*(%jbo`Y@p{naab zHXerq(|P~GI2Rb?$)q`=<)BWA#WKa2{1yfnf4S36IJ6*OY7>{n_H5eZyG=&f;J&(c zE{MDgs>myq z_PN5az&bMKgJr2%Ufz2MHsN~2#i*o!tE-hNNw;b(F4@O1 p2HUY`1XrNBJ@TT+G=srNOCPg#>9?${6NZ&A zr*=(Y7{e=YSn+w+J~<<2#>u?|)#f*$2Mz?^ID}xDYmI^TfyjyX|5;o}8Sc;>X%QzQ zL|;dzC4&~LXac>K(l76>UQr9<^m#`(gu__`&!kbtEh@+K5AI)KsrcnV)dha}mLY~S z2GNx+y>QRAV<0~S?=4Tj=aBFZgSCn;dzq4FgcaCo?AQ3e6CtSJY3Woz#H!lg^zX8x zeTLKga4OmFnGRe}SAE`W5#MkFOgMaI=&Bl)NvSA%-o_tz#~HVrO8vc)yl+E$RLvQ= zdmn3_^R(-wv|7pkDMD*C;i;@Ks-qC$+sK;9T%4P3)E^?yn4Pw#eZKGPuuCT_Ia%8s zw$|t*Eae9lRlRfi#54pd*zbXn$(BFAIOmO=!z|7JXn16V2<*&;H!<<=NxgO@a*&Ak zhOX3lJCHI))Q_0irBk)xYh*%z2#BAj{4C_>PZWb~b=t=Sj5GIa>GK?Db++EcJViFh z4FDA92a&!UKrkatP7*f?h!~4av9PvM!p!$)>%Da4Ieb;SsorgYv%Bj>VSRB;ancT4 zH=bG7-!JcA>w^YQ){4yVt7hKKY!S7HaBwv~(>GG?JI=Gavy@r!b 9*cFD?JAm{L z UGePit=GU%mIUFDH1OXPfj|Cb6^mw0 z&QAW5WLfL~HNKP{i{1;10P}bxuXZ0NckG;rS2nn#11pqbVGq~4K4Z6FRUPL`Clzd^ zSlCEe{mE}rHJ_>qcqiw!gnF;)^D(lZXuB@yBo1w+^#fN&37S{l$5*?|5usG%zr}S) zS_Q-#!t2`q5Z_1^rw#ss@`ARR9waMgLAiTnv9`2Q-+Ek~i;%wwz0?-bi_lsemL>ej zC1qzEIPV^v<@kksZ R8I30q4I3<;Z^Jyaq6AYBSc?SxKZY)%O;PbkWUk!DJ`HEzIE%JUF_x7pC;Sk zHgWRBDZXHGGBxqAkH+$hT2k*}=%@N~2Wks)%+{~MgOltizF4d468K98<^oP783Mk4 O0q3JG4kh;fH~$UJ)5}f( literal 6081 zcmZu#3pkVQ|9_rsY))ecF>NWKdP7oMsf`FJsr;mPvsXn3V;!8DM}&|=2TF2ylS3tX zB@`JV<(N>3*@TIl4|AIRpXojQuHXN ^X>3L8?fp `8=zIR9wJA?zVTXzbp;3Ud2`oFAuQ_2Vef`JwXtNx?;3$X}EV-kB zzMjuH>OhbsM4vcDS>}!`_AHHNJ1s91SJ-PT;g `(&J91qR(Be82D*p|a=L=%uwn zPiY|bbx_i<50+_waP*k&Px|!qBj(gP{?*$XsL_jK{pJDPFM)v|<;k8}fK%b=Q@^^* zQ 0U%uHO+?(;C04u{((Fh1w(OJ8b{&7A1DR*rOk7Z{tX1R;N)5-T(wY>z z{s0nhDbyLOX{M)CetinKv>AJ?hwkc7?bI`86iKd i@SUd?5ZbtBj$2+<3nHUr 4@f{F; znYuroBC5eEaHB8uU4!%CH5J>5V?DV1+oe@1Sh>Gj%PzEEC^8IbdmOcS0668LLZZrG z^}MFoN5|V@G1z#O_h6G9k~BG$xZ`sN(s9wD4Cs7wQVs8R2*t5)^8N*J?l3WsOi@5@ zZU)u+SYC7*Pl9t|b+}pN9{gD`v{B7e5)b0A&PfoX W){zh#l)BLd*Y(pa8yssq*`5zwCFJN(4KO~7RDBhy+BL-^{FNeS5 z37*CcIZ`YxP;C4udP^KwA8jMjFNRcsy=XKVgVr8KOTv$Tx136__N__n+bdOI6diJq z0MH~mAZa@dw{dK~9WQ+{P|pZqfgqli5z{M{@na_OU60B8EGMBvLP$oeU_C6;_3zpx zN0kRad>7NG;(|x<$q=9w4Bw!aR&jsrqu&Xs3sSdq eM4rdF2yFf=W1t{5p{yH zM6r0rGs7jhZ^M5|M FI8+S*SCJAm7N#Yka5 zJM2O(FRV>I3F}uvkZ<5%5O5;~tpV39|0Owl0=P}4#_@VP@b55a3l D4lT>-hM2P zgdsBHwHl~iWI28+5b!n1Z9lNvmsVcfON8c(W4Ar{tiZbAdFBaX7e90*?i*R(%++Se zp@w!x+5oNbP*DPfAvYJ^aF&$*7v%h&$2yPLTUa4fQf2T&Jf{uMIfvi~Xmk(6;0Vo+ zMD+n}m7(!p_ane1JHYD7e>gj_dfCD({k_W?fXq_gek8b50VIk)X3a;dJOdJEd*m=g z#Q62J-@J&BQAGkiJwSMyU;O|%G|#Oe5BiJiS7YWrlzxt5Zr6cQNu;cTPJGHI)yd6< zEgyK!^$hxuq1***lY*Jvw~cdyjA#9V@wQ`?ZRC; 3X>Bw#z)Z`o59AdVw?NxI#4!lo9wc6<~;3U+jfZvtT7%k#DD3) z*qo6RH-FS9;wFRjw1Zj)#B4k_DdBUsuNZAb=!}GU=n@|0+0!#S@dZZcZS|PU=L%2D zgKoWWu1s(ju~hsC+|KgXFMx;7S4qX%-a{txpth)%?=wYW+CTl6>61*FyV>A$z`~FA z7tUO*+>sT=vVRY<{g&q}e`eDklCu8-l!(nf&% R2? >?xl-_r& z^697H@(prpgYl=W!0A*