From 46e4dce2b5242b38d6c1398b73b796cf08413b2b Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Tue, 21 Nov 2023 19:40:42 -0600 Subject: [PATCH 01/89] a thing --- code/modules/guncrafting/lathe.dm | 24 ++++++++++++++++++++++++ icons/obj/guncrafting.dmi | Bin 0 -> 2238 bytes shiptest.dme | 1 + 3 files changed, 25 insertions(+) create mode 100644 code/modules/guncrafting/lathe.dm create mode 100644 icons/obj/guncrafting.dmi diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm new file mode 100644 index 000000000000..add8008603e1 --- /dev/null +++ b/code/modules/guncrafting/lathe.dm @@ -0,0 +1,24 @@ +/obj/structure/lathe + name = "Machine Lathe" + desc = "You could make alot of things with this." + icon = 'icons/obj/guncrafting.dmi' + icon_state = "lathe" + density = TRUE + anchored = FALSE + var/obj/item/work_piece = FALSE + +/obj/structure/lathe/AltClick(mob/user) + if(work_piece) + vis_contents -= work_piece + work_piece.forceMove(drop_location()) + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(work_piece) + work_piece = FALSE + +/obj/structure/lathe/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/gun)) + I.forceMove(src) + work_piece = I + vis_contents += work_piece + + diff --git a/icons/obj/guncrafting.dmi b/icons/obj/guncrafting.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4f4ff6072ea3a02af610374c244f776a196cd707 GIT binary patch literal 2238 zcmV;v2toIWP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80001OdQ@0+L}hbh za%pgMX>V=-0C=1w$2$suFc1a6I(v$T>BV20Mk10z?-0mp0)8M_^!gTdGaBPGyA^hE z^l&cezF;ua4XHN;i7@CpQjyah<xdeW41?<M61gH3QZ6uPNp0Dm{99vME$rgx12-NT z8NWtmcK`qg3`s;mR9J<@m*0;hRTalS_tvlOneOSH>7L)Riz_?0D;O3<i3Smf5Ftbp zTtoDQWZ{9t2mcBmd^H9_;)BFQVxkYCkeDC?h`$ot9bk1?*xx-fJJY|WtGlbatLon4 zL+|uXGfM($;z=s0d#mc4&pG$r@4cl~S6BIen!C60)KgChfQXE}BqC_7$NH2~Jonsl z>c0h0tE;Q5zWk#6<!^sy>QaTW?{i^kp6NylH;RUoN+BZjvRT6NG==&O)BQfLh+wTn zDTPuWpJgw&3-I-CKB{(FEva7Fpb!Ln_SO~rbEj#?KBd^D==%(eq0?^T9J_;=x7Ikj zxyj0bCGr<51b}nRp{EoA^d}|&n2aLaYj9f!7C3ovV+>|A1gF;4n6;Kdp+GxL$+d+! z?cqC`*cievB*^86Q^S@Y(-+~;p+hvc>SSD(>A5T-P>A%X8d@oOOL^u7K1PI@V|RQs zKx7m>V`zsV@4a`HFGdkNu1i4#R|H=v(oTo9ci!e`7}FRGxOnmu2a^ObhNu!V9|Y93 z#xn-jT8s#)rPu@#tvP-2<i6n;&8&92jRnpdLpGBk?>LmKB~DWmpn%YIQAtc8O)(<) zo(sN@s}xORxZLkEnIudrMb2?hnG92og8^J?aUEwLz^DTGe4eD!VagbK$pEW0{UpKo zJ}wXdJ*~mdaIRY?t2NCyL3%x^B1FDV#TYL4dSo4kDXqzAO<jbJwYa$)%~tE90VZ8& zCkZ=o%x0_2dz~Iugp-~Jz};y|-f`$ULSPKF!GN&aqh~Evgvr4GUxY*{`o^F|h>T$% zf~OR2r$asVJ{sV@d++7tbI;>xjiWVdo=dry=gEg30N{5oy+Xa!p$G(8BO=tAJG?IP ziI(8h)YN`}H~#RFoH})idZEBUW9ak-l#6-ltq$$#I{iURwHZ<>4Eq*D_yD-`$O^g1 zEXE3s9zrCkp*M($<9MhKC<e)ZdaHv)@$9qDj?t<QOYzfBKRuGcC%^w~vXeP_QIAHW z#;<?BI?A@$Y;xz36)M{`5_?@aJ*_yfIEOKYR=bO}marR<3TUnO0gUS_@XRyMs9i^A z*4|?MgVWU4&$Dsi1AIr1f*d(?fcwKPr9zGq6BDDWRLJqwMo2cuke`?!2t1V5`-1=E z$3K$M5C9xMeq0>Kp;#=Avi$4mEBx@jhX8o-wV%PBJ>p=s$tB0(_AXrBlfdm=IAaX+ z-7c4w=FzFb(HdhcKYii}d86OwYncppeDAy0=fLsf$E8#%QLopr*7A+JZlfnIzUT4t z=YNSYhA$ucJb~{M$be?pVdvBt1UTt?lnOa!ibWbbJJeepR+0pAIb56Ysp(1X?<HJ` zB5EQ$Rwz&%4EW>fD)&72@bw`mm&;@_86Nn;=a6e{r8Ku4x`|vy<GCJFo{*niCQ&{n zP1%WKR=N>08{5b~&oZ;I&EalDnx-`Cb@XI`<tueAM-d%ka9x+0F=)rZUaO{t;dWcC zR_XWqIF7^Y^3BXl`eZW!)|=qyEw|vgF2O{OBnrvuVenLhW}4D4hK4aj))E;*&swT+ zOb~c%_xsFcGAKZRg6HuM$6<FexB$NI(`YpCJde!O3|Yq#rHYIzSQ3mgL7`Y6>_&(v zde&q4D_<h*by4ZA4h*+sj|A7z+?>zjIS%WC0bv|tfJB5hdp(jQ;X98!bR8f`5>{4L z*xK5{w|x>-B%}L8L5^f+hbZo%T^HAN$!4?Ur}A`b8zhrHk#R8n4xX!-$Yc<I5`e5q z=%kv$-FGpFWAct=YI=?{ufERw{5)shS>wTPJ$8K+xUNgD*CW;$vOqYnMBNBKKf_cI z5GaG^xj2ph!o>UnwN^yV_K6Ei0Qj~~tcP-2EEJfCWAa&#tBp1~?GZM%=ytm}j>Btf z|KbO`6%Y|Bl?njA_|0#}bYbuD?2}0Dhriu5$8lI+Umrbl0fHbP3`26c95*k{0${9V zW_pHNy-sOnhB!&c1OYocO#l`b7Di4tuU=(wVF6<;>l+(bE2PGZWTRA?Artsit2NfE zjp5-Y2!=`RO7Y{5KfWLLKQ!61L4CLiyZtY`@PZmuVArOnr)f5u`*y64YvoppPfty8 zX?`B16xLcC$H7|5u_)qK>+7Q!yEX<eH#bMK*(Bq+Bl=+i0w}cJla*3q(ky@|MUu^O zczc_HwP;|{aqyL*ZOmAV8v<-?Z6P8&>Uy+|VNl92(dhH%T8(>VXPM9%S1DTM41ap( z0*@>%qLl)rXe9}+TFb`vHX?$jHNsHoj0mx{pcGqMTVqul1E|;QIF3Ulia5WpfHjt* zaflWn91M7~RKj&#j$GL$t2NbrpVLcA#Bt2w?QJ}zIGoROVR@M}P4Rsn5h3aKInwWQ zVPj(y<Awk$D=VBkcaB7an>II5Ko7`jO(MdrwHg4)wahxkaPZ0%1|o=3WVI&mI2_&F z9Q_NljKPTD6$&V&Mlo&(;JU-+<#roi>tWddUu)hE!_j?gExy)V>~x5&CD`-Z_HL^+ z_TA{d+Z~H>Lx5fLK68+TJ?q?Bp|Y_~p-`k+t5GZ#hZ9l2cQl=L8>L{jJWI7!!_k`M zrNuFyn^&*G`O720+XrBbp;D<}jN$TDop;~A01OY2;kE2@x#8@+P}wA(&m$tV+ihTY ztly~ZjM|lIV=U0FkKI`N0LtYu&1REwxjZ_S{jcrBi4zir;h4_+8<9yOno&Xl0ssI2 M07*qoM6N<$f*#>GR{#J2 literal 0 HcmV?d00001 diff --git a/shiptest.dme b/shiptest.dme index e1b52aaaac6b..412bbd5f8c7e 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2161,6 +2161,7 @@ #include "code\modules\games\cas.dm" #include "code\modules\games\kotahi.dm" #include "code\modules\games\tarot.dm" +#include "code\modules\guncrafting\lathe.dm" #include "code\modules\holiday\easter.dm" #include "code\modules\holiday\foreign_calendar.dm" #include "code\modules\holiday\holidays.dm" From 55d0b191ca048f0c8f415d850abd546429ccea6a Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Tue, 21 Nov 2023 21:25:54 -0600 Subject: [PATCH 02/89] kinda workin --- code/modules/guncrafting/lathe.dm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index add8008603e1..431203385fd4 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -15,10 +15,22 @@ user.put_in_hands(work_piece) work_piece = FALSE +/* +/obj/structure/lathe/attack_hand(mob/user) + if(work_piece) + var/list/choose_options = list() + choose_options += list("Screwdriver" = image(icon = 'icons/obj/tools.dmi', icon_state = "screwdriver_nuke")) + var/picked_option = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) + if(picked_option) + if(picked_option == "Screwdriver") + work_piece.screwdriver_act(user, /obj/item/screwdriver) +*/ + /obj/structure/lathe/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/gun)) + if(!work_piece && istype(I, /obj/item/gun)) I.forceMove(src) work_piece = I + work_piece.vis_flags |= VIS_INHERIT_ID vis_contents += work_piece - - + else + work_piece.attackby(I, user) From 809d2049af08b834bd911fe15fdf7031d2bb3f19 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Tue, 21 Nov 2023 22:34:41 -0600 Subject: [PATCH 03/89] this uhh is not working. gonna rework this all --- code/modules/guncrafting/lathe.dm | 23 ++++++++++++++++------- icons/obj/guncrafting.dmi | Bin 2238 -> 2411 bytes 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 431203385fd4..540aaa71e21c 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -15,22 +15,31 @@ user.put_in_hands(work_piece) work_piece = FALSE -/* /obj/structure/lathe/attack_hand(mob/user) - if(work_piece) + if(istype(work_piece, /obj/item/work_piece)) + var/obj/item/work_piece/to_work = work_piece var/list/choose_options = list() choose_options += list("Screwdriver" = image(icon = 'icons/obj/tools.dmi', icon_state = "screwdriver_nuke")) var/picked_option = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) if(picked_option) if(picked_option == "Screwdriver") - work_piece.screwdriver_act(user, /obj/item/screwdriver) -*/ + to_work.improve_item(user) /obj/structure/lathe/attackby(obj/item/I, mob/user) - if(!work_piece && istype(I, /obj/item/gun)) + if(!work_piece && istype(I, /obj/item/work_piece)) I.forceMove(src) work_piece = I work_piece.vis_flags |= VIS_INHERIT_ID vis_contents += work_piece - else - work_piece.attackby(I, user) + +/obj/item/work_piece + name = "Work Piece" + desc = "A piece of metal that can be worked on." + icon = 'icons/obj/guncrafting.dmi' + icon_state = "work_piece" + var/steps_left = 5 + +/obj/item/work_piece/proc/improve_item(mob/user) + if(steps_left >= 0 && do_after(user, 20, target = src)) + steps_left-- + to_chat(user, "You made some progress on the work piece. You only have [steps_left] steps left.") diff --git a/icons/obj/guncrafting.dmi b/icons/obj/guncrafting.dmi index 4f4ff6072ea3a02af610374c244f776a196cd707..9f4de524fb8840ffb7c7f65d06855f2c7a08f53f 100644 GIT binary patch literal 2411 zcmV-x36%DUP)<h;3K|Lk000e1NJLTq002M$001Be1^@s6qMd$(0001UdQ@0+L}hbh za%pgMX>V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex7wuvIWN;^NFm z%}mcIfpCgT5=&AQY!#Gp5=$~tmAE)lGK-28Y!wW-IMa#}b5kK~xGG!<loee4Tohb< zJ-GltH6piBQ)p=b00^^5L_t(&f#sR)k6cw9$3N%Xr<vWEo!Q;lhi-vlrHid#D2fmh zL?o6-(`bS<L=!>+B#>z0D_{5r_`<iw(2)4T#zbPGFRVaff-E3D2HOf%S}c9qhwjeI z&d$@Fxew?3d@=2~gRSfWwVU{Tb<er?p5OU?f9Ia_J?E;qxjFuy;jS+{`Q(!VAR+?~ zi3nQjfjXrW&p!LCy4D@M)=+bEbIiSXME>xnKQnS}o|5l#W@d`f)jDn%0^llzh|tMq zX_Q7ORM!~oc6mtzYb{DCl-jr!TS+(<;0s?qpw{YjDPLHm5CnYU)>-`1Cuqh#<FQN8 z_lb<5)okMIy@Rngj&o{hiP@WG$e*1j0Gvw=dP*TccW4NJ;V{I#B+l|p(;Pj!cpYe7 z9sN(>*zw~`SWBT$pqZxRn!=>^@EuKT42?#EAeSRf4a<H^SA?BAcT!ufl5t%|C$oq^ zA=LfRpp~LClV>vWF(QoZy<_VN5E@0t7@Ca+Cr_T@GhxV@>rxQG6~R}EwAJGHn}1_Z zBW5*<ID7OMJCX!3hHyS+DhQ}*jb{w5wHOgpU9kitT65y)(d$U{%IME*&1Mq|ylV{E zOoqJUFm5eznxX&&G+Y;z#1zsLBZBX_;QP2rQ8R|~-7dpP!l+W@90!%jFyc5Ez_k|F zajw>n>xTXa$mjDUtrjE3&`Bb!)^w8u<NLTk0CcnlKf~#Em8{m(;soh*D2ovKKJ&(K zzSAM=IE-jbPHU<nw5-L=<*3!`*N^E{&=+9Xg=Uhl7RM~ro1AQQup%7wJOJ)VQ}T{O z+Ytg|s6-Ksc889&SP_P!2w#LmDZ0j>MF@={62Vgnx7DH=d)JNV)zBB<{`>CZ#nXrJ zw8qhz<DN^YnCFRy9suCiFT6yx-l7NuS|cJ<YHPeIvZ*C-WMt$cC-Gt60=)K{7v$Kn zV^j+Tb{Ipe6HzMWsn%OG%L{a)m~ySbc%fG}Ey6#6J9p2L8_r^^;OL$RNowdsF>xIC z`~iw6iKy0FSQLj29ojM;04^D!^?3T}r~5YWiEn<D>~M}w*kN_G!Y`hm>u0-Gt8wS< zS>{(NB=+CV(bI~XwoPJ;q26p`t)<ZpNd>glTVDX^iQs9)-Ft3ea<YU7EL~jTjgyNc zR`9f9ypUsmWOzPs*dLkxyUzy>`?@KAnH;AbcIYM%m9-{D7$E<{AADcF{oU_<C^3#4 zJ|tJWci_>dHq>^14mf!5pg4|0u~_V9`Hv?q@SXb~>;-$}$FOdXu%le#oa1nN8_ut5 z@b)&mZ46WGHs@xh(5b@F8e=R!dh9WIt=r}EnGAP)<Le)qBtS4U{2z5u*xpdva7loJ z2M@~l_&C*S6>BYDy6ZMN;^KQAKRNs}j4|B3_frJEPaqMsMvJv$ZzI4_-($RxW2{(Y zb#0Amy~S*jKrV-C6K)tC=8K(#3t>n_gog_S%2C8`=jOO~-$NVf<dsOi-}6TfACirX zg1!+dl}cnX86NobCy`5Kr8Kwgypdc+<GCIqo{*o|PNIBFnz9zh%(g?u7FUqJpJHrr zg<b8CG)<{htLWhZ+b>i(ABMDy!F63K#-JSsEB`gI|1)UlZFkG%GTm+$$8nh0elugk zKG{rw^@iAU%Pn}WOE8op2^(Z}k9;aZElpW9hE-z-ttB*uj<uBIm>}?2>2{gSWKe(r z1<&KJj>ASi&?AQr$!4<;y-#3MbAa#rtgf!&c^;XOF|v*&Ocfbdup}5~h(fVIqa7lm z=va^KpZhFnr;SQ4`+(k-*dxJpG&kq-c#gwD6w!!d43LQMdZ$B@Bz$fEgPSI{QSzIC z3y>rUv$L}-FE8WUE{Q6V(OtqIN3ym?7`M@`i|e{%vsv;ZdD@jll3}0FIGAn=&(#cN zGKk;HSXL#pQcdBWyNKeLyki*|o#gG8Uu9})ic@bMXWv&I-VmXUjDpL=H=6kY0RUXr zrPJvU>kL_-5m~}^h@T&0BnSwU!Sh@kM*v}HYMM$tBxk$Cg&6>R+a=aLyIU+27>Z-^ zS&xgWO?29!vARsV-NtboUOD~`zV$wxJMidJ>d4_kveB$=mV93T5n+CQ9)O?z@>c^7 ztUn&xjOBgryO-fO4hstlSG;#6d=OHbfeR1>0gXn3TrS7W+a>@o)-pCaMx|P1d~A$3 zNyr2NYil(CwoOm>8(F$|k!{n{7;9NrT*O)-HKuPH#>dCV1U}_*g@y8J?{Fmut|hMx zqwfSCdE}9gY+aId8>IJU`f~kq&po##Eb+jp@aX6$wOZ{1@7PN9Iv*Pu;oQ^|N-3<h zIF5t0mc3!f&leW@F}4Z@1elzhq*kku@p{!Fa%mU~pwN0<R+SpC#sY{^B-t#xR#u3t zMFYc*gRc}#V+LYu6$}Wlyu6HvaKQCw8bdUmVQ96>?<*DVotR)qYh0zMmoohB%`@!Z zwhgTmC`CO<c-dMOS5^=aJgpIWPRoc8TMJ6Dyu5sUm|g_~0#vJ29LHfk40(5Y8fz?j z;s#oTMilY-_&BcXvirgcS*<B|yPTMrA&z5qt*qcF#jbpwGuyY5rYXMfBO)Z-F1x#3 z&MYqWV{8=+2rxT4%jwgnNkq7DX$b{%fUMReBHUW30FcnjY|9vST)03af+$5+Yx0i6 zo~5P!zks?i7!kZe0i{$w##X_A0Iu6Bo^LksweAgDz}K308jb#SY%RXloNcv;ttD9Z z+w84+ec-+Rb-O(fW2@kbz41Q2gXwkaytTso;sS+2k#eO%u~_U)gaW>!X*HWD1rwzS z%9RR^)@+~IHqhqM#f$Ln`M%-WD(DMfjA4F$9%BsWm#e(>&KaP0h}pQ5{amg$d!LzK zBA?GAA~c&#pm(gkSXt|r=gX@DfiAakIo4J|Uw~4nM6Fh%R4VbzGtXQTlk)iEk4vM` d*it9M{{mp^Tz8l8zw7`2002ovPDHLkV1hWfl|=vm literal 2238 zcmV;v2toIWP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80001OdQ@0+L}hbh za%pgMX>V=-0C=1w$2$suFc1a6I(v$T>BV20Mk10z?-0mp0)8M_^!gTdGaBPGyA^hE z^l&cezF;ua4XHN;i7@CpQjyah<xdeW41?<M61gH3QZ6uPNp0Dm{99vME$rgx12-NT z8NWtmcK`qg3`s;mR9J<@m*0;hRTalS_tvlOneOSH>7L)Riz_?0D;O3<i3Smf5Ftbp zTtoDQWZ{9t2mcBmd^H9_;)BFQVxkYCkeDC?h`$ot9bk1?*xx-fJJY|WtGlbatLon4 zL+|uXGfM($;z=s0d#mc4&pG$r@4cl~S6BIen!C60)KgChfQXE}BqC_7$NH2~Jonsl z>c0h0tE;Q5zWk#6<!^sy>QaTW?{i^kp6NylH;RUoN+BZjvRT6NG==&O)BQfLh+wTn zDTPuWpJgw&3-I-CKB{(FEva7Fpb!Ln_SO~rbEj#?KBd^D==%(eq0?^T9J_;=x7Ikj zxyj0bCGr<51b}nRp{EoA^d}|&n2aLaYj9f!7C3ovV+>|A1gF;4n6;Kdp+GxL$+d+! z?cqC`*cievB*^86Q^S@Y(-+~;p+hvc>SSD(>A5T-P>A%X8d@oOOL^u7K1PI@V|RQs zKx7m>V`zsV@4a`HFGdkNu1i4#R|H=v(oTo9ci!e`7}FRGxOnmu2a^ObhNu!V9|Y93 z#xn-jT8s#)rPu@#tvP-2<i6n;&8&92jRnpdLpGBk?>LmKB~DWmpn%YIQAtc8O)(<) zo(sN@s}xORxZLkEnIudrMb2?hnG92og8^J?aUEwLz^DTGe4eD!VagbK$pEW0{UpKo zJ}wXdJ*~mdaIRY?t2NCyL3%x^B1FDV#TYL4dSo4kDXqzAO<jbJwYa$)%~tE90VZ8& zCkZ=o%x0_2dz~Iugp-~Jz};y|-f`$ULSPKF!GN&aqh~Evgvr4GUxY*{`o^F|h>T$% zf~OR2r$asVJ{sV@d++7tbI;>xjiWVdo=dry=gEg30N{5oy+Xa!p$G(8BO=tAJG?IP ziI(8h)YN`}H~#RFoH})idZEBUW9ak-l#6-ltq$$#I{iURwHZ<>4Eq*D_yD-`$O^g1 zEXE3s9zrCkp*M($<9MhKC<e)ZdaHv)@$9qDj?t<QOYzfBKRuGcC%^w~vXeP_QIAHW z#;<?BI?A@$Y;xz36)M{`5_?@aJ*_yfIEOKYR=bO}marR<3TUnO0gUS_@XRyMs9i^A z*4|?MgVWU4&$Dsi1AIr1f*d(?fcwKPr9zGq6BDDWRLJqwMo2cuke`?!2t1V5`-1=E z$3K$M5C9xMeq0>Kp;#=Avi$4mEBx@jhX8o-wV%PBJ>p=s$tB0(_AXrBlfdm=IAaX+ z-7c4w=FzFb(HdhcKYii}d86OwYncppeDAy0=fLsf$E8#%QLopr*7A+JZlfnIzUT4t z=YNSYhA$ucJb~{M$be?pVdvBt1UTt?lnOa!ibWbbJJeepR+0pAIb56Ysp(1X?<HJ` zB5EQ$Rwz&%4EW>fD)&72@bw`mm&;@_86Nn;=a6e{r8Ku4x`|vy<GCJFo{*niCQ&{n zP1%WKR=N>08{5b~&oZ;I&EalDnx-`Cb@XI`<tueAM-d%ka9x+0F=)rZUaO{t;dWcC zR_XWqIF7^Y^3BXl`eZW!)|=qyEw|vgF2O{OBnrvuVenLhW}4D4hK4aj))E;*&swT+ zOb~c%_xsFcGAKZRg6HuM$6<FexB$NI(`YpCJde!O3|Yq#rHYIzSQ3mgL7`Y6>_&(v zde&q4D_<h*by4ZA4h*+sj|A7z+?>zjIS%WC0bv|tfJB5hdp(jQ;X98!bR8f`5>{4L z*xK5{w|x>-B%}L8L5^f+hbZo%T^HAN$!4?Ur}A`b8zhrHk#R8n4xX!-$Yc<I5`e5q z=%kv$-FGpFWAct=YI=?{ufERw{5)shS>wTPJ$8K+xUNgD*CW;$vOqYnMBNBKKf_cI z5GaG^xj2ph!o>UnwN^yV_K6Ei0Qj~~tcP-2EEJfCWAa&#tBp1~?GZM%=ytm}j>Btf z|KbO`6%Y|Bl?njA_|0#}bYbuD?2}0Dhriu5$8lI+Umrbl0fHbP3`26c95*k{0${9V zW_pHNy-sOnhB!&c1OYocO#l`b7Di4tuU=(wVF6<;>l+(bE2PGZWTRA?Artsit2NfE zjp5-Y2!=`RO7Y{5KfWLLKQ!61L4CLiyZtY`@PZmuVArOnr)f5u`*y64YvoppPfty8 zX?`B16xLcC$H7|5u_)qK>+7Q!yEX<eH#bMK*(Bq+Bl=+i0w}cJla*3q(ky@|MUu^O zczc_HwP;|{aqyL*ZOmAV8v<-?Z6P8&>Uy+|VNl92(dhH%T8(>VXPM9%S1DTM41ap( z0*@>%qLl)rXe9}+TFb`vHX?$jHNsHoj0mx{pcGqMTVqul1E|;QIF3Ulia5WpfHjt* zaflWn91M7~RKj&#j$GL$t2NbrpVLcA#Bt2w?QJ}zIGoROVR@M}P4Rsn5h3aKInwWQ zVPj(y<Awk$D=VBkcaB7an>II5Ko7`jO(MdrwHg4)wahxkaPZ0%1|o=3WVI&mI2_&F z9Q_NljKPTD6$&V&Mlo&(;JU-+<#roi>tWddUu)hE!_j?gExy)V>~x5&CD`-Z_HL^+ z_TA{d+Z~H>Lx5fLK68+TJ?q?Bp|Y_~p-`k+t5GZ#hZ9l2cQl=L8>L{jJWI7!!_k`M zrNuFyn^&*G`O720+XrBbp;D<}jN$TDop;~A01OY2;kE2@x#8@+P}wA(&m$tV+ihTY ztly~ZjM|lIV=U0FkKI`N0LtYu&1REwxjZ_S{jcrBi4zir;h4_+8<9yOno&Xl0ssI2 M07*qoM6N<$f*#>GR{#J2 From c4906acbc7758f5571e067568e7d80e8fda0ccb5 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 22 Nov 2023 12:46:15 -0600 Subject: [PATCH 04/89] Improves deconstruction functionality to lathe --- code/modules/guncrafting/lathe.dm | 90 +++++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 17 deletions(-) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 540aaa71e21c..6ac3ab5392f5 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -1,3 +1,6 @@ +#define DECONSTRUCT_STAMINA_MINIMUM 50 +#define DECONSTRUCT_STAMINA_USE 40 + /obj/structure/lathe name = "Machine Lathe" desc = "You could make alot of things with this." @@ -6,8 +9,28 @@ density = TRUE anchored = FALSE var/obj/item/work_piece = FALSE + var/steps_left = 0 + //Whether there is an active job on the table + var/in_progress = FALSE + //Defines what job type its currently working on + var/mode = FALSE + //If activily doing a do untill loop + var/working = FALSE + +/obj/structure/lathe/Initialize() + AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE) + . = ..() + + +/obj/structure/lathe/examine(mob/user) + . = ..() + if(steps_left) + . += "\nThere are [steps_left] steps left." /obj/structure/lathe/AltClick(mob/user) + if(in_progress) + to_chat(user, "The lathe is currently in use.") + return if(work_piece) vis_contents -= work_piece work_piece.forceMove(drop_location()) @@ -15,31 +38,64 @@ user.put_in_hands(work_piece) work_piece = FALSE -/obj/structure/lathe/attack_hand(mob/user) - if(istype(work_piece, /obj/item/work_piece)) - var/obj/item/work_piece/to_work = work_piece +/obj/structure/lathe/attack_hand(mob/living/carbon/human/user) + if(istype(work_piece, /obj/item) && !mode) var/list/choose_options = list() - choose_options += list("Screwdriver" = image(icon = 'icons/obj/tools.dmi', icon_state = "screwdriver_nuke")) - var/picked_option = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) - if(picked_option) - if(picked_option == "Screwdriver") - to_work.improve_item(user) + choose_options += list("Deconstruct" = image(icon = 'icons/obj/tools.dmi', icon_state = "welder")) + mode = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) + if(mode && !working) + if(mode == "Deconstruct") + deconstruct_part(user) /obj/structure/lathe/attackby(obj/item/I, mob/user) - if(!work_piece && istype(I, /obj/item/work_piece)) + if(!work_piece && istype(I, /obj/item)) I.forceMove(src) work_piece = I work_piece.vis_flags |= VIS_INHERIT_ID vis_contents += work_piece -/obj/item/work_piece - name = "Work Piece" - desc = "A piece of metal that can be worked on." +///////////////// +// DECONSTRUCT // +///////////////// + +/obj/structure/lathe/proc/deconstruct_part(mob/living/carbon/human/user) + if(!in_progress) + in_progress = TRUE + steps_left = 3 + working = TRUE + if(do_after(user, 20, work_piece)) + if(steps_left > 1) + steps_left-- + to_chat(user, "You have [steps_left] steps left.") + user.adjustStaminaLoss(DECONSTRUCT_STAMINA_USE) + deconstruct_part(user) + else + scrap_item(work_piece) + working = FALSE + +/obj/structure/lathe/proc/scrap_item(mob/user) + to_chat(user, "The [work_piece.name] is broken down into parts.") + if(istype (work_piece, /obj/item/gun)) + deconstruct_gun() + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + var/material_amount = materials.get_item_material_amount(work_piece) + if(material_amount) + materials.insert_item(work_piece) + materials.retrieve_all() + vis_contents -= work_piece + qdel(work_piece) + work_piece = FALSE + in_progress = FALSE + mode = FALSE + +/obj/structure/lathe/proc/deconstruct_gun() + var/obj/item/new_part = new /obj/item/gun_part + new_part.forceMove(drop_location()) + +/obj/item/gun_part + name = "Gun Part" + desc = "This could fabcricate metal parts." icon = 'icons/obj/guncrafting.dmi' icon_state = "work_piece" - var/steps_left = 5 -/obj/item/work_piece/proc/improve_item(mob/user) - if(steps_left >= 0 && do_after(user, 20, target = src)) - steps_left-- - to_chat(user, "You made some progress on the work piece. You only have [steps_left] steps left.") +/obj/item/mod_gun/frame From b1c734ebf7b1bdc7ee6be1c1e96c464e3243c7c4 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 22 Nov 2023 14:41:47 -0600 Subject: [PATCH 05/89] new options? half working --- code/modules/guncrafting/lathe.dm | 116 +++++++++++++++++++++++++----- icons/obj/guncrafting.dmi | Bin 2411 -> 2682 bytes 2 files changed, 98 insertions(+), 18 deletions(-) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 6ac3ab5392f5..f9ecd3e2a03a 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -9,6 +9,7 @@ density = TRUE anchored = FALSE var/obj/item/work_piece = FALSE + var/obj/item/blueprint/blueprint = FALSE var/steps_left = 0 //Whether there is an active job on the table var/in_progress = FALSE @@ -31,29 +32,60 @@ if(in_progress) to_chat(user, "The lathe is currently in use.") return - if(work_piece) - vis_contents -= work_piece - work_piece.forceMove(drop_location()) - if(Adjacent(user) && !issilicon(user)) - user.put_in_hands(work_piece) - work_piece = FALSE + remove_part(user) /obj/structure/lathe/attack_hand(mob/living/carbon/human/user) - if(istype(work_piece, /obj/item) && !mode) + if(!mode) var/list/choose_options = list() - choose_options += list("Deconstruct" = image(icon = 'icons/obj/tools.dmi', icon_state = "welder")) + if(istype(work_piece, /obj/item)) + choose_options += list("Deconstruct" = image(icon = 'icons/obj/tools.dmi', icon_state = "welder")) + choose_options += list("Research" = image(icon = 'icons/obj/tools.dmi', icon_state = "analyzer")) + if(blueprint) + choose_options += list("Fabricate" = image(icon = 'icons/obj/tools.dmi', icon_state = "wrench")) mode = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) if(mode && !working) if(mode == "Deconstruct") deconstruct_part(user) + if(mode == "Research") + research_part(user) + if(mode == "Fabricate") + fabricate_part(user) /obj/structure/lathe/attackby(obj/item/I, mob/user) - if(!work_piece && istype(I, /obj/item)) + if(istype(I, /obj/item/blueprint)) + if(blueprint) + to_chat(user, "You cant add another blueprint to the lathe.") + return + I.forceMove(src) + blueprint = I + return + if(work_piece) + to_chat(user, "You cant add another item to the lathe.") + return + if(istype(I, /obj/item)) I.forceMove(src) work_piece = I work_piece.vis_flags |= VIS_INHERIT_ID vis_contents += work_piece +/obj/structure/lathe/proc/remove_part(mob/user) + if(work_piece) + vis_contents -= work_piece + work_piece.forceMove(drop_location()) + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(work_piece) + work_piece = FALSE + in_progress = FALSE + mode = FALSE + +/obj/structure/lathe/proc/destroy_part(mob/user) + if(work_piece) + vis_contents -= work_piece + qdel(work_piece) + work_piece = FALSE + in_progress = FALSE + mode = FALSE + ///////////////// // DECONSTRUCT // ///////////////// @@ -66,6 +98,7 @@ if(do_after(user, 20, work_piece)) if(steps_left > 1) steps_left-- + playsound(src,'sound/items/welder2.ogg',50,TRUE) to_chat(user, "You have [steps_left] steps left.") user.adjustStaminaLoss(DECONSTRUCT_STAMINA_USE) deconstruct_part(user) @@ -75,22 +108,58 @@ /obj/structure/lathe/proc/scrap_item(mob/user) to_chat(user, "The [work_piece.name] is broken down into parts.") + playsound(src,'sound/items/welder.ogg',50,TRUE) if(istype (work_piece, /obj/item/gun)) - deconstruct_gun() + var/obj/item/new_part = new /obj/item/gun_part + new_part.forceMove(drop_location()) var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) var/material_amount = materials.get_item_material_amount(work_piece) if(material_amount) materials.insert_item(work_piece) materials.retrieve_all() - vis_contents -= work_piece - qdel(work_piece) - work_piece = FALSE - in_progress = FALSE - mode = FALSE + destroy_part(user) -/obj/structure/lathe/proc/deconstruct_gun() - var/obj/item/new_part = new /obj/item/gun_part - new_part.forceMove(drop_location()) +////////////// +// RESEARCH // +////////////// + +/obj/structure/lathe/proc/research_part(mob/living/carbon/human/user) + if(!in_progress) + in_progress = TRUE + steps_left = 3 + working = TRUE + if(do_after(user, 20, work_piece)) + if(steps_left > 1) + steps_left-- + playsound(src,'sound/items/welder2.ogg',50,TRUE) + to_chat(user, "You have [steps_left] steps left.") + user.adjustStaminaLoss(DECONSTRUCT_STAMINA_USE) + research_part(user) + else + var/obj/item/blueprint/blueprint = new /obj/item/blueprint + blueprint.desc += "\nA blueprint on [work_piece.name]." + blueprint.design = work_piece + blueprint.forceMove(drop_location()) + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(blueprint) + remove_part(user) + working = FALSE + +/////////////// +// FABRICATE // +/////////////// + +/obj/structure/lathe/proc/fabricate_part(mob/living/carbon/human/user) + if(blueprint) + var/obj/item/new_part = new blueprint.design(loc) + new_part.forceMove(drop_location()) + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(new_part) + + +/////////// +// ITEMS // +/////////// /obj/item/gun_part name = "Gun Part" @@ -99,3 +168,14 @@ icon_state = "work_piece" /obj/item/mod_gun/frame + +/obj/item/blueprint + name = "Blueprint" + desc = "This could be used to make a gun." + icon = 'icons/obj/guncrafting.dmi' + icon_state = "blueprint" + var/design = FALSE + +/obj/item/blueprint/gun + name = "Gun Blueprint" + design = /obj/item/gun/ballistic/shotgun/winchester/mk1 diff --git a/icons/obj/guncrafting.dmi b/icons/obj/guncrafting.dmi index 9f4de524fb8840ffb7c7f65d06855f2c7a08f53f..5bcfdde8c47a4fac7cf21c356a10415848f24c51 100644 GIT binary patch delta 2589 zcmV+&3gY$a68aR77Y;xO1^@s6s%dfF0001fktJn+s`S#l_=3cu5`qeGDNt5$^>a~h z@%7{a04(G#wHIJ;Apiggw@E}nRCt{2ncI(B#T~~#Gv{J^*Iw_%+1(^SXiAnQg^G|; zP$imBR8WbcR-&m;D<LF60jZTLA@!kuKp!ggsj3J_eP~pvs8ajT6p$)W7AU<cO;Sk9 zr6G`i>?OOl*X!G{eU4{-eQ?&SLoQxIumkx#`P^oH-|uhEoZpPq^z<~JX57^Wk3RaS z0EkG(O(KHUy5pQuil?7`T3zk{FE?s>dYb9y56WNv{tt%Un<3--oY*kI$WjqE2mo-E zLPV$~5|lC{r1Q&+)a$$;g0&W<6iRjPML!vT=K}2d`X04hEK2s&9O+n$&)qnMfBYEb z&}S@k8TNe|#!xAjakk&W=%J&$H9ybPbsI>%J3|a`&NS#Lg#h(|0RRSr0QZbJ3)f9@ z_}#f4$UHyoSK!FeqpY)*bUIDB*(6yO#<hp<XhLHsl}f~tNy4UK!4Ij6uzB-l3JZCE z;;zfccmfef2f95Pv{KYIq!@4b7!gLd-_pMZ1V&LahH|OIn{U3w7lVLh*Cj22D}t{S z%}Rx%ul<{CrI4jYgLe-fVN(<##t_VeOvGa3wZ=0B*IJASs;HO;BCR=g_;3%Uo}2c} zRxX#Zz&pl}h{s7e4rA65Hk&9w0VUUeMMWX$W)mZV@44XnxJpqlhLiO=gHgnYQY0M* z6^}FII2gdS7T0mk7e~)%kAPGvMO3LUWDK>afz_IN6k&WH7l;8ht-+6TyqYJWHH9!j zYBjPV1isIVF`TT`NH`8dT9ee8ya*L*ag#|3#bWQ2o`<#pgD#Y#h~+S3zF6je%}Na` z!eP$?;EraKl;co!gqShp8VyR-8Z~RNA`CVf_##9~Q8xxHLSPIH5j>@ED;4sg*E6B# zqiw)lJ9qN@@dJ2T<7mxM&m}XQ;*tCA2H+3Ry+FQLVHk*MjfjvdEc3F+nm&O;Lqi|A zh)cl*c;%1J$&n*R$fwh6GKNZjtwCluMZQ>}oSmiK2+0;ojHO%WCPnxkaO>77l7k71 z6&&3%A!-_GjgT-5TlE2oM${l*tYA^>-@m_aY5+J>2(9Mv#~*K(fscImn<NI4)PfpI zOF4e~>~uTZg+hT_w@xv$m?N_9SB{=mT(^E4V+_S|6>BY}YCuy!Yu*2U20+UMPb+TU zb`9g>8AM?I^dg7eoFlS=rxj!AB)c1iXJZb#8>ap2voVKz>P`MRK1MaDQI8trmdhBS zL;TNv@?-h_4}Ww?W*j`QU(R=J&x4P3)pmOh*t>VHIF7^c@NhfJe>--HAKZ0stFxDW z0jt&so3aJoa~y82!pT*C4c=UZH;iGTTIIbB6X>SG(HdhcKY!>Ud8J<GEAcqDeCOMj zED|6#F!+IUjiB09+i=E!y?gh{*w`5Pd>(5pU%TxlYU1L19=|;BYm716zWocte4m&! zD3mHJA9(`-4*MQs=_I4W!z?W?lP^}7iXuoRac#skBZGXk7I7+n2*`<We>zRJ(cn+h z)7*K_eO(24E|C|z|KNfB(#<Gn7ebj#hIl;A-8(*yoH<rXbJON)Nyasv>oMdBsdXEP zl#gjPSq?*{ssW>Oi^zZ8VsvhiE!BW#vq>SJM-Qgicq-4yAfRFluIrLB2JJXlxnN>H zHZ-)ByV-1(dcBT+<2bC_cs-+oK8bh?>kY8&h8yr)m)Jm(C@7K8E%8ke3e6@<#;{}z zfwct2P_ve77!r$lEY|Cc$KxnKfVAiFFUO&q7xdtP{j%2VL+ce-(;VRYK1)kWc%Dam zXq1Fw37U$yD_A0oGeCMcO{p3nqNrJqjbHu}%~}=JT&V+pT1#S&2-neEpGx654zrC0 zr7*+*kqEEWYD7`Qw|3vVW?|imUkffk6h%x;O|h`BfN$$WYM8jL6U354%gY2|745pX zu1g}3AT^YtnwujU^a+fEsaNn^%|JYk_^pg3R79nzN#AiBjW8tTScXQ%dE>>GnV6X1 zt=Eon&o}OW?@CZNqhLjNx0&xS0Kj!!YPA}nj*|dN4NFiB@Kd7<#bU&i!Sh@kM*v}9 zVv<}jAZhD_=?wt*woa&9<?e7g%|IBEN_d=JDx;e<N=pk=t5qDw;iaSh<$D(iZqI{{ zse=dhOSf5FtN6A7BErnf3;@6S-S0bYSiL>AmXh~>>}OYS9EaK2*>hey7avB{T5thk zu^6RNiDWX#_3PIGV60_yWRzS!&)DcFVH6RM#aLc00I+^?vfar1>C>#AoWxkm?A#pI z3Qc3$Wy9FmDDjw2Hk)HMyVTlTiN!9buC8fUf)70Kz(@97l2r?&vopPN{+VZ<>5G!M zV^?^8WMqUwq41$sY?)$_&kPOm-oyk-DXg_Pj)S$9?LokAW@p=d^a~vZjE|2~C=`f$ zt<xfMW*7^g(0Wx?mFg&s1rVi(5(%~}F4C|T4GcOCzEYHp>FA?h=rCYmVF3|gkLyu3 zhQ?T&fu%Zs$>q3n-8u%e##M@9CeEK<JHhUM_3P0}fl?Hsh!?G8ZgCM2!P6R{RcRR! zLTf=O78VwIqx3v<7?98BaU6%4AmE+JNvyGK3rlDbN{t4uj*a2EE?ZA6lF*uLz0R=> z8wkUYEsKkIO0gxC;>5;{G@DI)-$z7<>UFl(>ztUIYxmJFbQmx-HO2Ac$B9I^c77gz z1=N6q)<h!Qn9BhW(aLPa7&e_cMMDHpiiFmr9EWZ5^X>lvipF3>@X~3NQtdwag$@H; zw{>{3T*lYBHEaQ2Yu+xE+P_0<@wMjNN`=r`Vypf(d%alfc&`1sTJ7kgUpQwp-e)&4 zx#~M_tuQk;OFBJFHkV^~c(^qY3iytHrcy4W6s*gvBb&?NXwAkA>pR+<KYbeBIoU3_ z`h~Uu#u#R1W-!KZav{&_Z=V2Ko0z3D*-s{0v-gRac~YqqB0{-b23p(dbGhaA@l1B9 zqob8JR{H7}+6H7Y84860nM{T!pM3JN6e$ls{IHZtrM}u3KIfj`$H}f;yL#GxzrOe_ zpKPug(CYwt%~b<>9YC+SYCx|8=rvaj=yd?S=8~3XyPnwjfqlg3pT5)=dwt!qW&_R^ zz2m7vo!9rhfBi}@qiX|Jgr6<=Y*t_2wQr~Ny9pOHpj+YRV#ia5`rd@DCczIQ{z~D3 z2JCubr+kvd!vzdD*9^Z_4(;22aj8vQb}l#qE+zXb;`{mihl?0+sTu5d@o)hHR)RmY zZ^xRAxDtl`3K#qguFl{}fpekPVzuxqA^Wh#P0?;9#<dFX^`_{WO5rOdt83v?zZ$%1 zK(7PnHCGMjbpXBQssX(Ypx0bApw|KPn*Rfab*96KT(wjH0000<MNUKnu0mjfTaxLo delta 2315 zcmV+m3H0{*6zdX@7Y-l@1^@s6qMd$(0001UktJn+DqISb6<qyX6kL2gxd1>lBDYaf zXlVcd2(w8<K~!jg<(ch|TvZ*%Kj+-1ncbP4+1=TPZh>N@i>+WNiVzb-B$i0iXo59F z6G8$ckZ9s7U-$?3!nelIkodyJL}H>ZtUzLdEFeAx+X_`$EPdLC?#|54&eNT_59j=R zG3~g2gRSfWwVU{Tb<er?p5OU?f9Ia_J?E;qxjFuy;jS+{`Q(!VAR+?~i3nQjfjXrW z&p!LCy4D@M)=+bEbIiSXME>xnKQnS}o|5l#W@d`f)jDn%0^llzh|tMqX_Q7ORM!~o zc6mtzYb{DCl-jr!TS+(<;0s?qpw{YjDPLHBq!0vr;?`OG(<f-gKI5@V(f5grq19~S z?7f4rH;!{^X^GjJX2_qNCjgvF4SGr;KzC>efZ;I2y(G@^P177byLcUFULE~U;Mnow zOjt{yP@tKn<eI{y_V67|Yz&P?gCLh9P7TX`Ojm@RJ9koBu99(GMklj~Kq1uq(V&%o zqBE0cGV(DZjP1Q+>k1GWMaLMLjRq%Ap5ilM$eQa?5Wy9}SBkXN;`p0?V^1SyHHtWU z^cXvm1TltiK4vNisA`R846d~p5ma5V1SDE>;^@)qNcGC-&uq<R6AQd+4B1SEyyGx# zEpeKn00lH$7nQ^m(i9_t@44XnxJprfGluisF2hN}s8Zw{2bIY%;y4(<wHDWLuGWw1 zhW-f1=kp}379+;cNg}M)bdv<*`?x>=bhHLP!|8UFtk%@x1nG1rixB!g^Tu$#(;@3P zjA%_xYpNo&ti{dcsMYJ&kLgv=7hu?hW|FWL$1K&GoNRTlA{_NR0Paas@{U7)+Ytg| zs6-Ksc889&SP_P!2w#LmDZ0j>MF@={62Vgnx7DH=d)JNV)zBB<{`>CZ#nXrJw8qhz z<DN^YnCFRy9suCiFT6yx-l7NuS|cJ<YHPeIvZ*C-WMt$cC-Gt60=)K{7v$KnV^j+T zb{Ipe6HzMWsn%OG%L{a)m~yRu!FZupH!Z?Hfjf84k{ixqtl;RL2uW(_L@{w3_xu5h zD2b@nTUZo_4jtMu9sn*Gq4jwB>8JZP@QH7JmF#eiPS{~}wZbo+pX+D4R;zL6?pfwn zDkS#b&e79~o3>42jG^9aW38pp4oL;H)>~fy=!xKI#oc>uU~;mA2rONHT;YwAizHU? zv|_xFV}E3LK5*C{nf|-a2M+tXDSw$9ryX|aCJ~jjCPo+_|HB`AU%vg_?|mpSjvPKD zSG#xM(Wf@lc7F~yc<`V&jzh6n>}UCpCob@v`ycEDd*#QlZjZ2|T;rVMaC;lhuWRu3 zHoR>NQ|&hAW~R`o!qFOkV=O;<>@j(*+vW3_40n9v>mQmVKrl4?A9YdK-cZ|cNq~a~ z56bxXIMr$uYb{^8>oz*#;(H!HIs7w>G2FfPQv|+GAQ81ji?w5KBfwGLW4w@KtXO1q zZH;QZ#cYy5E{AIqZWtZri=BiEVMs-UhYJPDQN(ZO=D2s?LmTRU<dsOi-}6TfACirX zg1!+dl}cnX86NobCy`5Kr8Kwgypdc+<GCIqo{*o|PNIBFnz9zh%(g?u7FUqJpJHrr zg<b8CG)<{htLWhZ+b>i(ABMDy!F63K#-JSsEB`gI|1)UlZFkG%GTm+$$8nh0elugk zKG{rw^@iAU%Pn|+u1heKBMBR1b&q^1LM=^MHHKAV2(2YFhK{wA<Cq}uSm}0|%w$l2 z00qzEua3h;KF}kF56Nb;54}%dQ*(gt`>d|6;&~pKkukE4B}^3=SFj`)XNW?vK%*TZ zqUczU?VtNBX{U`!FZ+Prme?b~bu>5U^LUQKLKM-6V+@dgi12!+Ly{zXZU2LtCbm)X zn}G|EBnh*#vn($!<J&HYDw5G%!XQVowniAY(XNZ@x@5Ci@*{cLl|_<apU^m%ZVS)V z3}rHi-^*B5CA3ma;hwvQ;+VW+85y1A?U!F=YHEs8ZysmgS03IFp^c1!%fvUD`2hg{ zT-T-3=@9FG3|XKNS;BURpC4l+2ndwH^IRN90AXlqno2z+XS>9O8326SCDuK=TPze9 zievIwkBh5KblRb@x=g#>#&H~8IsOm6^*)_D@aR+O$l*h>(X4Kkd|v<&VSaudfS>;I zR|5~MKOWnR<$dqFm*F@L3kwTZymuvh5K^0g3lIc<0gXn3TrS7W+a>@o)-pCaMx|P1 zd~A$3Nyr2NYil(CwoOm>8(F$|k!{n{7;9NrT*O)-HKuPH#>dCV1U}_*g@y8J?{Fmu zt|hMxqwfSCdE}9gY+aId8>IJU`f~kq&po##Eb+jp@aX6$wOZ{1@7PN9Iv*Pu;oQ^| zN-3;=wK$H0wU)hM$j=uR`Z2Z&1_YR#oTOH(k@0%fB64XM3!u<?T~?JEu*L$2QY6_d zyH-|+tVILEj)SihO=AXPY!wU$u)MsCh;YF5Xc|K_o?&RU%kL`{?wy!mNNZfBsFyPQ z?#(mo-?j~{6evYKNqE^>7FSjf5j?FCdQQuKh!9%~O0m4We0`W+1p@+9t5qDwVLl9b zcX}FYEPLVxT7*Uv@%s2UuIsY<!U|cfDR;Y^n3*AtV|J~q;3>tfe4aDgx09wRzV9O< zB;78%yIsyKF7{(=6$}V4J3Gti)2B&9xN&I-1$2O{)+8d_TB!h#(93Mg7<OE^KqP{H zC`DFl@{YrvrKSGAfVwdl5xhbHrBpx0R>6P(uG=e~Z#MC@?hRYO*P3@4jsA6PExy*A zZMBH4C0O^{?5%oz;JyBJyFCzNtKf>g@jkwT>2>S8wZi=30);}6a-~ACSnN%N0=}bZ zHJc~}6Qv2tl?sm5Y@gXS(B{&`i}3Dp`M%-WD(DMfjA4F$9%BsWm#e(>&KaP0h}pQ5 z{amg$d!LzKBA?GAA~c&#pm(gkSXt|r=gX@DfiAakIo4J|Uw~4nM6Fh%R4VbzGtXQT llk)iEk4vM`*it9M{{mp^Tz8l8zw7`2002ovPDHLkV1hP1a=icm From 3bbba1fcc598d5f6c588be2a76d5c0f1a589cb8c Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 22 Nov 2023 18:25:19 -0600 Subject: [PATCH 06/89] might try to port some eris stuff (foolish) --- code/modules/guncrafting/lathe.dm | 32 +++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index f9ecd3e2a03a..9b9c4910a31f 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -37,18 +37,25 @@ /obj/structure/lathe/attack_hand(mob/living/carbon/human/user) if(!mode) var/list/choose_options = list() - if(istype(work_piece, /obj/item)) - choose_options += list("Deconstruct" = image(icon = 'icons/obj/tools.dmi', icon_state = "welder")) - choose_options += list("Research" = image(icon = 'icons/obj/tools.dmi', icon_state = "analyzer")) - if(blueprint) - choose_options += list("Fabricate" = image(icon = 'icons/obj/tools.dmi', icon_state = "wrench")) + choose_options += list("Deconstruct" = image(icon = 'icons/obj/tools.dmi', icon_state = "welder")) + choose_options += list("Research" = image(icon = 'icons/obj/tools.dmi', icon_state = "analyzer")) + choose_options += list("Fabricate" = image(icon = 'icons/obj/tools.dmi', icon_state = "wrench")) mode = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) if(mode && !working) if(mode == "Deconstruct") + if(!work_piece) + to_chat(user, "There is no item on the lathe.") + return deconstruct_part(user) if(mode == "Research") + if(!work_piece) + to_chat(user, "There is no item on the lathe.") + return research_part(user) if(mode == "Fabricate") + if(!blueprint) + to_chat(user, "There is no blueprint on the lathe.") + return fabricate_part(user) /obj/structure/lathe/attackby(obj/item/I, mob/user) @@ -175,7 +182,16 @@ icon = 'icons/obj/guncrafting.dmi' icon_state = "blueprint" var/design = FALSE + var/blueprint = FALSE + +/obj/item/blueprint/winchester + name = "Winchester Blueprint" + design = /obj/item/gun/ballistic/shotgun/winchester/mk2 + blueprint = /datum/design/winchestermk2 + +/obj/item/blueprint/gun_frame + name = "Gun Frame Blueprint" + design = /obj/item/mod_gun/frame + blueprint = /datum/design/gun_frame + -/obj/item/blueprint/gun - name = "Gun Blueprint" - design = /obj/item/gun/ballistic/shotgun/winchester/mk1 From 39679d8577ecc0ec65831afc00d5259b2c4228d6 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Thu, 23 Nov 2023 14:12:22 -0600 Subject: [PATCH 07/89] gun parts --- code/modules/guncrafting/lathe.dm | 37 +++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 9b9c4910a31f..31d4f2755fb2 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -168,13 +168,42 @@ // ITEMS // /////////// -/obj/item/gun_part +/obj/item/stack/gun_part name = "Gun Part" desc = "This could fabcricate metal parts." icon = 'icons/obj/guncrafting.dmi' icon_state = "work_piece" - -/obj/item/mod_gun/frame + max_amount = 10 + +/obj/item/part/gun + name = "gun part" + desc = "Spare part of gun." + +/obj/item/part/gun/frame + name = "gun frame" + desc = "a generic gun frame. consider debug" + var/result = /obj/item/gun/ballistic + + // Currently installed grip + var/obj/item/part/gun/modular/grip/InstalledGrip + // Which grips does the frame accept? + var/list/gripvars = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) + + // What are the results (in order relative to gripvars)? + //var/list/resultvars = list(/obj/item/gun/ballistic, /obj/item/gun/energy) + + // Currently installed mechanism + var/obj/item/part/gun/modular/grip/InstalledMechanism + // Which mechanism the frame accepts? + var/list/mechanismvar = /obj/item/part/gun/modular/mechanism + + // Currently installed barrel + var/obj/item/part/gun/modular/barrel/InstalledBarrel + // Which barrels does the frame accept? + var/list/barrelvars = list(/obj/item/part/gun/modular/barrel) + + // Bonuses from forging/type or maluses from printing + var/cheap = FALSE // Set this to true for cheap variants /obj/item/blueprint name = "Blueprint" @@ -191,7 +220,7 @@ /obj/item/blueprint/gun_frame name = "Gun Frame Blueprint" - design = /obj/item/mod_gun/frame + design = /obj/item/part/gun/frame blueprint = /datum/design/gun_frame From d3155d0e2dc69351643caef7da199c7070b0dd18 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Fri, 24 Nov 2023 18:39:53 -0600 Subject: [PATCH 08/89] "works" dont like how this is handled --- code/modules/guncrafting/lathe.dm | 213 +++++++++++++++++++++++++++--- 1 file changed, 196 insertions(+), 17 deletions(-) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 31d4f2755fb2..373a71df018e 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -116,8 +116,8 @@ /obj/structure/lathe/proc/scrap_item(mob/user) to_chat(user, "The [work_piece.name] is broken down into parts.") playsound(src,'sound/items/welder.ogg',50,TRUE) - if(istype (work_piece, /obj/item/gun)) - var/obj/item/new_part = new /obj/item/gun_part + if(istype (work_piece, /obj/item/modgun)) + var/obj/item/new_part = new /obj/item/part/gun new_part.forceMove(drop_location()) var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) var/material_amount = materials.get_item_material_amount(work_piece) @@ -182,15 +182,15 @@ /obj/item/part/gun/frame name = "gun frame" desc = "a generic gun frame. consider debug" - var/result = /obj/item/gun/ballistic + var/result = /obj/item/modgun // Currently installed grip var/obj/item/part/gun/modular/grip/InstalledGrip // Which grips does the frame accept? var/list/gripvars = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) - + // What are the results (in order relative to gripvars)? - //var/list/resultvars = list(/obj/item/gun/ballistic, /obj/item/gun/energy) + var/list/resultvars = list(/obj/item/modgun, /obj/item/modgun) // Currently installed mechanism var/obj/item/part/gun/modular/grip/InstalledMechanism @@ -205,6 +205,197 @@ // Bonuses from forging/type or maluses from printing var/cheap = FALSE // Set this to true for cheap variants +/obj/item/part/gun/frame/New(loc, ...) + . = ..() + var/obj/item/modgun/G = new result(null) + +/obj/item/part/gun/frame/New(loc) + ..() + var/spawn_with_preinstalled_parts = FALSE + + if(spawn_with_preinstalled_parts) + var/list/parts_list = list("mechanism", "barrel", "grip") + + pick_n_take(parts_list) + if(prob(50)) + pick_n_take(parts_list) + + for(var/part in parts_list) + switch(part) + if("mechanism") + InstalledMechanism = new mechanismvar(src) + if("barrel") + var/select = pick(barrelvars) + InstalledBarrel = new select(src) + if("grip") + var/select = pick(gripvars) + InstalledGrip = new select(src) + var/variantnum = gripvars.Find(select) + result = resultvars[variantnum] + +/obj/item/part/gun/frame/proc/eject_item(obj/item/I, mob/living/user) + if(!I || !user.IsAdvancedToolUser() || user.stat || !user.Adjacent(I)) + return FALSE + user.put_in_hands(I) + playsound(src.loc, 'sound/weapons/gun/pistol/mag_insert_alt.ogg', 75, 1) + user.visible_message( + "[user] removes [I] from [src].", + span_notice("You remove [I] from [src].") + ) + return TRUE + +/obj/item/part/gun/frame/proc/insert_item(obj/item/I, mob/living/user) + if(!I || !istype(user) || user.stat) + return FALSE + I.forceMove(src) + playsound(src.loc, 'sound/weapons/gun/pistol/mag_release_alt.ogg', 75, 1) + to_chat(user, span_notice("You insert [I] into [src].")) + return TRUE + +/obj/item/part/gun/frame/proc/replace_item(obj/item/I_old, obj/item/I_new, mob/living/user) + if(!I_old || !I_new || !istype(user) || user.stat || !user.Adjacent(I_new) || !user.Adjacent(I_old)) + return FALSE + I_new.forceMove(src) + user.put_in_hands(I_old) + playsound(src.loc, 'sound/weapons/gun/pistol/mag_release_alt.ogg', 75, 1) + spawn(2) + playsound(src.loc, 'sound/weapons/gun/pistol/mag_insert_alt.ogg', 75, 1) + user.visible_message( + "[user] replaces [I_old] with [I_new] in [src].", + span_notice("You replace [I_old] with [I_new] in [src].")) + return TRUE + +/obj/item/part/gun/frame/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/part/gun/modular/grip)) + if(InstalledGrip) + to_chat(user, span_warning("[src] already has a grip attached!")) + return + else + handle_gripvar(I, user) + + if(istype(I, /obj/item/part/gun/modular/mechanism)) + if(InstalledMechanism) + to_chat(user, span_warning("[src] already has a mechanism attached!")) + return + else + handle_mechanismvar(I, user) + + if(istype(I, /obj/item/part/gun/modular/barrel)) + if(InstalledBarrel) + to_chat(user, span_warning("[src] already has a barrel attached!")) + return + else + handle_barrelvar(I, user) + + if(I.tool_behaviour == TOOL_SCREWDRIVER) + var/list/possibles = contents.Copy() + var/obj/item/part/gun/toremove = input("Which part would you like to remove?","Removing parts") in possibles + if(!toremove) + return + if(I.use_tool(src, user, 40, volume=50)) + eject_item(toremove, user) + if(istype(toremove, /obj/item/part/gun/modular/grip)) + InstalledGrip = null + else if(istype(toremove, /obj/item/part/gun/modular/barrel)) + InstalledBarrel = FALSE + else if(istype(toremove, /obj/item/part/gun/modular/mechanism)) + InstalledMechanism = FALSE + + return ..() + +/obj/item/part/gun/frame/proc/handle_gripvar(obj/item/I, mob/living/user) + if(I.type in gripvars) + if(insert_item(I, user)) + var/variantnum = gripvars.Find(I.type) + result = resultvars[variantnum] + InstalledGrip = I + to_chat(user, span_notice("You have attached the grip to \the [src].")) + return + else + to_chat(user, span_warning("This grip does not fit!")) + return + +/obj/item/part/gun/frame/proc/handle_mechanismvar(obj/item/I, mob/living/user) + if(I.type == mechanismvar) + if(insert_item(I, user)) + InstalledMechanism = I + to_chat(user, span_notice("You have attached the mechanism to \the [src].")) + return + else + to_chat(user, span_warning("This mechanism does not fit!")) + return + +/obj/item/part/gun/frame/proc/handle_barrelvar(obj/item/I, mob/living/user) + if(I.type in barrelvars) + if(insert_item(I, user)) + InstalledBarrel = I + to_chat(user, span_notice("You have attached the barrel to \the [src].")) + return + else + to_chat(user, span_warning("This barrel does not fit!")) + return + +/obj/item/part/gun/frame/attack_self(mob/user) + . = ..() + var/turf/T = get_turf(src) + if(!InstalledGrip) + to_chat(user, span_warning("\the [src] does not have a grip!")) + return + if(!InstalledMechanism) + to_chat(user, span_warning("\the [src] does not have a mechanism!")) + return + if(!InstalledBarrel) + to_chat(user, span_warning("\the [src] does not have a barrel!")) + return + var/obj/item/modgun/G = new result(T) + if(barrelvars.len > 1 && istype(G, /obj/item/modgun)) + var/obj/item/modgun/P = G + P.caliber = InstalledBarrel.caliber + G.gun_parts = list(src.type = 1, InstalledGrip.type = 1, InstalledMechanism.type = 1, InstalledBarrel.type = 1) + qdel(src) + return + +/obj/item/part/gun/frame/examine(user, distance) + . = ..() + if(.) + if(InstalledGrip) + to_chat(user, span_notice("\the [src] has \a [InstalledGrip] installed.")) + else + to_chat(user, span_notice("\the [src] does not have a grip installed.")) + if(InstalledMechanism) + to_chat(user, span_notice("\the [src] has \a [InstalledMechanism] installed.")) + else + to_chat(user, span_notice("\the [src] does not have a mechanism installed.")) + if(InstalledBarrel) + to_chat(user, span_notice("\the [src] has \a [InstalledBarrel] installed.")) + else + to_chat(user, span_notice("\the [src] does not have a barrel installed.")) + +/obj/item/modgun + name = "gun" + desc = "A gun." + icon = 'icons/obj/guns/projectile.dmi' + icon_state = "detective" + item_state = "gun" + var/caliber = 357 + var/gun_parts = list() + +/obj/item/part/gun + name = "gun part" + desc = "Spare part of gun." + icon = 'icons/obj/guncrafting.dmi' + icon_state = "gun_part" + +/obj/item/part/gun/modular +/obj/item/part/gun/modular/grip/wood + name = "wooden grip" +/obj/item/part/gun/modular/grip/black + name = "black grip" +/obj/item/part/gun/modular/mechanism + name = "mechanism" +/obj/item/part/gun/modular/barrel + name = "barrel" + var/caliber = 357 /obj/item/blueprint name = "Blueprint" desc = "This could be used to make a gun." @@ -212,15 +403,3 @@ icon_state = "blueprint" var/design = FALSE var/blueprint = FALSE - -/obj/item/blueprint/winchester - name = "Winchester Blueprint" - design = /obj/item/gun/ballistic/shotgun/winchester/mk2 - blueprint = /datum/design/winchestermk2 - -/obj/item/blueprint/gun_frame - name = "Gun Frame Blueprint" - design = /obj/item/part/gun/frame - blueprint = /datum/design/gun_frame - - From 5bbc36a8aafa0ce0eb90393d265fbf3393277436 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Sat, 25 Nov 2023 00:57:15 -0600 Subject: [PATCH 09/89] we getting there --- code/modules/guncrafting/lathe.dm | 37 +++++++++++++++++++++++++----- icons/obj/crafts.dmi | Bin 0 -> 8184 bytes 2 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 icons/obj/crafts.dmi diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 373a71df018e..407a41f77681 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -182,6 +182,8 @@ /obj/item/part/gun/frame name = "gun frame" desc = "a generic gun frame. consider debug" + icon_state = "frame_olivaw" + generic = FALSE var/result = /obj/item/modgun // Currently installed grip @@ -380,21 +382,44 @@ var/caliber = 357 var/gun_parts = list() +/obj/item/part + icon ='icons/obj/crafts.dmi' + /obj/item/part/gun name = "gun part" desc = "Spare part of gun." - icon = 'icons/obj/guncrafting.dmi' - icon_state = "gun_part" + icon_state = "gun_part_1" + var/generic = TRUE + +/obj/item/part/gun/Initialize() + . = ..() + if(generic) + icon_state = "gun_part_[rand(1,6)]" /obj/item/part/gun/modular + name = "modular gun part" + desc = "You dont think this should exist." + generic = FALSE + /obj/item/part/gun/modular/grip/wood - name = "wooden grip" + name = "wood grip" + desc = "A wood firearm grip, unattached from a firearm." + icon_state = "grip_wood" + /obj/item/part/gun/modular/grip/black - name = "black grip" + name = "plastic grip" + desc = "A black plastic firearm grip, unattached from a firearm. For sleekness and decorum." + icon_state = "grip_black" + /obj/item/part/gun/modular/mechanism - name = "mechanism" + name = "generic mechanism" + desc = "All the bits that makes the bullet go bang." + icon_state = "mechanism_pistol" + /obj/item/part/gun/modular/barrel - name = "barrel" + name = "generic barrel" + desc = "A gun barrel, which keeps the bullet going in the right direction." + icon_state = "barrel_35" var/caliber = 357 /obj/item/blueprint name = "Blueprint" diff --git a/icons/obj/crafts.dmi b/icons/obj/crafts.dmi new file mode 100644 index 0000000000000000000000000000000000000000..7f510b84c7e37b249bd78629ed8d933ff40839df GIT binary patch literal 8184 zcmZ8`WmFtcv*a*1!QI{69R_!Ich}$qA3V4-5Zo=eyA#|)a0%|gg0uO~?!LEgf85ij z`)A*(Q`OyH)l_6rkO+|g004@-oRkIt044UHhXDPr@~ol_`IjiDDQQXf_xJ0#Ii(cF zBPvR<iORKg*V@?Fh=_>r7AjUZwUY%}rKP2D^NZ+Mx{1l?)6vm!f)vJW#Qzja#itjJ zkB{%}A3Ayll9AD|F^HuY^Y*4$q7qP8(sM_AP1EJ1^-|*=U;xRedF1%0)OC%<DY346 zXO<wuC#Pj+=aG?T;$<MDcI6?Lprz7~;}c?HCa0w1<CRd;w)!lun(V2ZtVK2Wg+0RC zpe!du-@rUsi;G9pKcIOP^kpC+5z;j<PEN(rH8RG+A*`)$*)uktn)VGJpK@q?IxQ12 zI6Stpxur%(6Uic6FD}K#Cr8c5YiR5N5a*6gE=*CK1~{^IkN=#BSrU>|FrqHozxqo@ z&&|cF9+sr1W8|h}0qW}cBB#JZM=5|sK+QrUDgjc(CZJT;b^Mx=&&4Y*&(814!%0of zGd#aM_(kwv8;kr4uKqO_%2Pu{6Cif@%LV`ddiiPTc}iJ(Si0MP_Oy3(0RVh+(jk*B z>+I;#D-XK(<Gs<Q_Fczia%xuduc7Qkqm)dd;S@AuPtOY(nzq^|7u0*m0y$$il`qS) zN2Y9b)#cl4lgTvMJGvm9E;h8uk$G<Uqs$ANjyWfT+_Fpvy<1SXqc3;NRYvTn+!XZL z!5;a(uitxAgLOK!Z*h#B&?9BBlib>4D?&;;xwdLbk{6p<%ji5xf{UAHRIxvC;P8AM zx*q{NS4hKmNUvbzoEdc=Lo2?4p$19hgxU%-K9Rmdoad6;(xF=IP`1=BoppDIy8TNi z8a{r+y53b?j4iD0cT!ri$r8)b@o&dfTf^8BG#*^&q+ujr_x3C)63im=d}bs4A1<CG zPL%15a<lA36tEodhL;21;;GVkGLn0YMyq}fCzNb-W0BMloFEL=t_Mr1PpE`rl&oy8 zSoh@5<!J%bt>u;CVD=h>cr21Qzxk33d+5v8vd23?7X)E#vA2k2Db>^1&M6a;y#yd2 z9MkUpe3A3tBfO`v5B0mVbl9$MIo|(XN;?@R8y1Z;Dzy^E^68f>%=!Q(=^vXiy4~5Q z>!>nQDo(xz+ZJHyb9NyB{$-yCx-s*11i3D?-oE{nC+GSv^A9`CyjcQBK=4gK!a(wu zpTPZ80iPUv2@k8g4$qfDSz}HU`vgQCz~s^7WDTYZeH%}9eUKOv#g7`jBJCuql;YjU z@EKv7F!I*~7j!Qe7eratQLq!9jD{Vn!;J#)b9QgWXp%|=Q5uuP?5m76;pPFgBR?Ch z6!#{pX^cK<*y&E*Nf^kDQC39gd*{dY-lgtrooZ$<LNFB7!2T2r^XosV6RpcjiEH`h zTo}JeV#&6d;Czk7G+3&_iEVMl1!c#zILEL)p+}GOvaOgnZpUie8#p>%eSF-C98HbQ zOwCM50Kk5EC=}yUmouU-Iaw$#pJ^xYk>SGr1bsgL)ez<~s6N_YIhIKFQBNSeYZk?% z3J9bF4{U1kul~BHMTHYvtE|M*EH78d7xX&4Lq*Kt_kP_UPpugEiimLV`!}DZ`|~k} zotDojGG$4BldY`{rXgS<Nvs6jG!%DC$HLORk>Ir%3ZjLexgizTwJkW+`FTPmC-3?A zcVd}JE`K3H4gKfC^9`dMiM{jow1OagPPr&$(7J{WBy8LxWPFtSU63!(g|nUZPnRn4 zjEb^yE}aquD?fD}|92ezdqifs<DQ;}snx7lE_Ecj1p9}OzTaa!;Fy8YeQq&PdpIHv z6dr^^pb;5C8qp_hsP~XpKe(||@{qpOPe?xwV9jnr&Fi&xuvu_mXL5R?Rc*t-PPaZA z*YLT8%#otX4Cp2&mI&z4Q#@buPXG}q{r2N#;bKL#1k4_-*cG2E8+{=nARfn_UO>Q1 zMt%-|DR%S_{AWD1osskN4JC*KPQOfG3`n`)yp6E)jPg<}F`Ybzw?!h5*sdB1Dvo;0 zPf*@0iR@FnNBs5p?M|9xI}i*fwexh#3)ZxqQOZpk9$2hgELVMkk)VsF5XLI_Y!NEu zJ2giqYZ+*SB577!iQohSv|rFMqwc5El)P(2a4Lvly5nOt?hSa-fX4f(I3r_II4R^B z@mUVc?pg4tlHU&tbArVm_A0LG+n_*U(z-Ltp|K@Dl21`j@xnrqP4TDFPpn|c)RP$& zMMbuY{~X%fc3c$w@muXpCJ(FOBu&9hqw>zVmK+$5l^^MKKb0YEo1vv0W)I&z`7w-7 ztWYSY;5CFTWp^AYI15n`XRyJfTOSibPCibapoREu27fe&Lzv072z}yc)a$uQcfF{Z z+^>p54MrdSN$xH&Qb#+7xJzK6@+Xr4>1Za~ouJ<n*16UiIT*XClSoNMH}zSdgu|p< zB{UWM*!)xaT>@u;q6VS608#3JHOEKR9LbbW<W2*#;_=(iQEUot!CZpH4r*2^=iTEi z4n)c`q+U*r0bM7-8{F<dHDx+YE&(%>*G3^UoFevizd}EUxg#A58Zv|ZL1FT$td!&V zBx!61Th?q%B3C3lLWcP(I)S2{(L@eTH@{|(5f)e%;1G$<ljOTCb9hk44#o|3gQIIk z6?u0;+-orId0w^EEymtyYq5eUe{SanyS)u$XEMcVE5LLj&jbm6GiGqi5lEd@WwBZ! zI32+@37@IkXB*v-@@AnTdA>V2!`~D!emlQ~3FCRQdiIxbN4MuKdY*J(ElKWY`jp=Z znZ{L$P@N$U)5XP|NIaaz^7i$>4aR_@Ydl-AfVcU}Q~<KLc7P0JQ&@2ZCNC%j;<&gJ ze?o+Q>4*I$P8>=Rgy$LY#q2uOX%}g(1{7N7O&0toImib?Hm=DAk;9i++)Oj<F6u5Y zGFmI1OwJNBa-KWv>+;wk+qVdFA1K@~eSwgG%87E$cBCA5;E|$AA0+DF_ZLSdyrU@% z^Xs+yGX|h@fS2~4zh8tCEDPMoIii<pgjs`s>_ouo<zNi6=EK8L#88CC!+?N@He~DR zJ8SwZw$<vwZm-WRXF=O|gUhqM&!<dj6xVH*z%$mgMW)1AGWK?Mp%?3YS8((fV%eFT z4)+nc&+oD4v5BBY9LO{zVvC<2bvvp~RgCO2O*ItqU_Nw&<uMx-+}MZ5cI~^$qqQ^2 zvm|+>$5*zp!{TM*IkM|IX7a!m<URHj!l=|=V<7%3+}q|j#MecJgxz&Ybat7?cT2ao zwHCy^MACbTsc5r-PG*ZZ=rhKg0W)^|IFh|%0RvRL9e+kHepb1Fn*N4?z1z8sy!a}Z z*jaIp=M8}<4EyO%Uu5v1xKG}j-fWA<Jw|glL<ovGJVDoC;rp{sUDlS_E~g8eEP;Mo z3aJ@#Xh}mlOtXfSNU^be4_zoRpl@Q_=SnKo5z#keab;dy-?Q2qyl)S`-)*^WzYA(_ zxcCS<OO*)Yg>>T_UC;1sGjFwH&~R+_I^UZ^y%W2RmYi`fJ6a!@PF<{sUIx8fOdGag z#=l;^T)76nd8G}jw5?x|Ti~dLikW-9#QLDeHtcD=#DRq5&7=EjR_lkj_TB6aY-tZr zJHOz$arJ(zZ&SF)PO687K!EC@UlhQx+kjxcA{g2=y0`cgFn^f%yMm*5vHj+*7o#3o z>A5&x-`j3fSDOQ3T$CF;4nCSWIr_2UU1%)&;8&N=3~Qp?TRisY{dgR3RIe0o(>9NN zXm{BUw7-F`50_{@nwwM32<GT!l;Nq*#iHyyadJ>Hv6+{fi7jY|)WyQ0e3ZpjX?<}< zBl3o`4~R-$i*4ZED@|jw>^?y#%wPtnt*+pYca8dr)n+)b92;b>E<@}kXZRE<*k=*= z`reiHP7OwU*TTbRqIq8c!n{+$@Fq!|Xu3qAvCo*wByb7bjrJbsS0&sxRP>bqzV=zc zx7PuOA4XuJ%_FD)qOy^@Fu^G#$^}(>W0mIYf-=j0L%MLxm_*>V<vt~?wP8DxrO0m6 z42o#QfRJ}NLl58>4H@dZvh^RaH#@&@Z9)eHzIZEy+z`^rlbgVmjV4*4>8*<{m`)XD z?Ipg8486E(RQ_68;a9`%(df+TjF#C*NF<LQ&P0#UVT^R$(2FwxVmhqjNqTUOnEp(& zRMRKqN3kJ}Y#eelTV><^V;a72slSvFgq6}j5JiWD^g1Siy0E^iTu)RVKS!1abVK+> z5?rA!5YF9%rUv$R>V5&>w6{H?<FuEX!E*k`BK!y9|2v>^h4UZd5<Blp52oOWZT5_Z z0f?c6<$W|-w6FnSMLT1P$qE&#Gqub9?+~`wq73m)rrMx|zhi&wPFq_o_i>X-O=g`r zh=WyBzp#mg(m%fifn)c_4;VA85!TwlUSg!6ON_(Gh)NQH2N&^6jeF?XpKHr-N0XNg zu?V4El*o}`19PQ-H9g30Je-Dpjt7`zH5N_G5}X&ph@M&o)7AoqohQE?zBh3f5~v!q z<pa7WcT&M#3xO)J2BSyA+1zQNcqDH0iW?66+M3$hcH}!hiI7Vq-%!(ZvC_BD!4R1w z+awV3)y=VcmmY$Lg+kf|9&6JitcFVhU{6;JM_d|z=G5qy!8xuv5c(Cn8KVbkmE+(s zxqh#H&YZ)jGK8Om9~r>pDb+AT3%}*=;9CH^U|SMcdu5DdsnGD%-Y2zEF7#F&t`0qD zOlXN!X}cH{2u%Nu_W)<5X~pvbxqE=uuBqKi^@yex70h7|ETZ%KlDI@b%fB^QU5xit zeAsmLEo2lT%yy@Sv#r*CvHnEw1)!*@?R+f+j1OGNmP^&?#;-e51w{HZ!^T-GbJ2^$ zuS4FT?nB0zU<+XcMZLYI4kjr65c8)2uz2cMEw0$|-Wh%+0GcHIZqQ)sZ>w?0slIx) z3BLmd|Lf2H9|T~48!eE}94}cqjc<$2GN1U;1Ab#}re-F@z1bVF{J1Ut&UEeWY`v4V zj`FF4Er#+<^fm>l({<OlO^DEoMurLmRoK`{9~>FJ%-x8Z%)qdRzM&Zo+uC>t*m}O? zdI2zg*BUcB7sPS>R#LulW|u;o>?N}q#VZVpJ5m4Bp#{m(l*=~xfw|;^F?}-`wbxS+ zB^R1_556@-7&f_|nnxUL4LvJ*kX_E%xQXK%Qz|{{3VCfmX24DmL3?_^_(A{$jwvED zPUu9FH8!9&f(7#ICt+vP{-y4Gkm9VpBaS5|jWck{t@%Y<Q(&i~@Ko~!X)sae2Yw4C zCd6Hs@iuRkl)wY&Boswx3Wmg-!rijpExq8W@R3^BQ(&;Zlt!t5oz(d2h6+V`=CC<k zw5wl=%t(XvCn7=0h6GHUb{p(=&bxCT>U#4I#QdU)##~8u)-Hvd{Vj}VZT67(ZW;V( zsy@Z@3F$#E{Fh6?y^1MvngbbQGgbO~jB@b$ALz;?D7Rhgep^S$X^(U$Ob9hSc|CKL z)1u4~po*oMxY$s-tjtS|zz#<)yg>qX$|6Il99e1*vz`kX3lAR}#OM=J(YOs_hd1KO zhV#t?U}!hnvLn;mz7QqQznG!V7I!Q9&UnM~$DJ>_fRNe2T_aEdPZs}|`u_(838FFn zQRifPXd*dQlsBw@#raO`3Y$M^IYG;QI%C~h50dV?{=AQH-kjVZn;69Dd$(Bpx7CMa zQ1D~{gSvh_c|(L#FZk{qyW*<)Z^H`}T5SHLqfaf@S!AG7Y*5`xU2w<MN-~y}U2c%> zkCRp&*R!*A3U-c&@7tY^#+M3Tl|-<wgN}1(d)oaKgb0DkVv3NIR*D5Ifdke>UY3UD z=KT>dym9|<hOD2-!}kil76>4}r4vsw(eout`sxTYu`j9<n~JiEwo-NW&t?Kq^#Koj zp=F=y(1wkaMGlT8phsC-%9PZiPA(Xgf22RvW&ZV$F9E51C1ZIpobU6w+Dg0(5<Jr| zIy<Xq_U@8Eb?Z`rU!S*>GZN5-#zvG~bMM}8qq6@+L}C0`q-hY&C@Pv2g{<3_ooIpK z1(QKckf?F;5oSW6>%8<-z2QOqJSrl?aCf=gw~dCb=k40tDTYGj>$z4D%iD9gCaSNg zGTTU8t%o#diG8Z(berpW;bra4X<x&r&H*)!{xId-acmD4JyqpVwZi0ylFKm9p@!ro z6Mi#0UO74$sK>yVtdDHoSA9$$oJ!~*0u-W3_n2<@lHf3r%jlcofAcwaRDRo}tvJq> zmdAufwU`<~@|R|TFr777#YHFX1$XG=zMwd8cPKBwI-(wDC^P_U{eggVR|mc3?3{bH zK);Lri`QG4za%9`rE{Y)RG-re0t3U}D1JNVBe5BRyc;u*JEV~%^M{*(A13>@T-wH2 z0{=Z1J;8(#7Kh%ygE!~hWkvNGUiL|C^+M)nLk4R1=Z+z<OKUnM%!-^H?RP5#U2HuA zF8?9~$V2#YxxDw>l>-(%_lJ8jQJeq_6^sLEW$~E-18svXQRQE9RFC@X-+CQG4Kqn6 zrZ#p*6=4o3GK&xW^f@QU(d`$XQRya}E8vo=fQpWyxUFW%+7>Xa)Rd+4;<lu|(emVS zJrM{keovk5j!gTF+ixKK{WWRhj-=YBvruA!Xhx)~Jjs^cdiw)A<x<medyCY5cJJRl z+>F}dL)BRMUI#i%V~$BpDBTGmqyevW?mcQ5zeOU*1a;IFc$CUFe}Y@T--y6gy6VD^ zA}k$9^JRd#nCs;0dmM??foNzqR4+$0lA%U)gEqi1=s;PIx)g%{p}Y8T!L+FBTKcl6 z4xOE0E~Cj2*#;g$J_l9ImaOy?2E80RYL;wGU3R*|3mPI&$3c}_KD35<2W8zoVa~1l z?|~;=HPx=$nWKHf>sJ{Wd!qiG)6BsRnB3ZG$^zP#nlrBJeLiT$|G4YExZ!~I^WI>k z2rHy%Tj8-figwzot@fiy%nXbEBgb@6)#bpKJT^!*4Xa>}S0Sq4hF?z88t?YCP#ry( z@lwpm?{(Nblsj9CD~Uv&-gW!!CBm*H{K_9=0lXGU*~}iIvWbM>+3!EkxJ#%vDevJA zr-O3xOUlDGKbxF!u{oJ5v>QtT#O#Al8x-#R@l9=xmpKf#vt8llhaN+46{#}+GsHbg zQs`r2E-QQKF1Y!q%1w??tpz$=YEOq;RfQFWA55?FE>4ggsko~}eq_NqLCcRjmXm;@ z>a32#wT7qtEGyM_jUXip-9hw&2J^=IB)3405{dY9DakL?95h7FqwY<L^IL5hZ19NW zl+15ngY8D0-9>;Py*mqFp$_JTtvZbigf4D0TbDU*^g8gSAqLJ*tdSD<m!d=g3t{r2 zp0@{LG<HtO<;athzCGR|l+=pr$AnZdg0n1Y)1zP@<Iz|hr=?5eyBtd%bQxY{&)Q?S zr26j4xmguGdIpSh6Z8V-p7U8t%e2c7f$$AYcU`D$?1k1CLL=>KiC?Q~msrP?Qf6gF z&TG_HB$b!<TKd+IS%x#~JD1iaDX*qZErlj6I@lBpjj_)^<uT}^?uGXRQ@`FPN%Kg0 zcnXi+722N>wy^0zZMxc#Z8ZE<o+sL*x<}{$ajzcC_~Xmha7<7p2{#HkWP#O9It{8* zf?AL?c0?gN50k15R~f8C-<^#HQh<r0KJkAOfAR*%e=okZzIZDhnfm{P0v~zQe_(V} zylsd6cONh5$LsCyv98td+zk8jnf&6!kD%B6Ow+t2bcmATYM|W{E8|Zx=-fz$8XZ#l zs;^+;B%ovH<Gkvh{XBlKwSZfJv*@IA6X8?i&0t9$;aaNrpyO>t0hWSJbGcr($I;B* zUc6l8_zyLynfFE0;J_*q89&J>p~x(luuB<R6BAo+v64^olbp@71tW#s9->Busl*cu zk@Mj)iyqI0SExdg0n{&WAdWrMhDVegmGJ%zt8z>VIKDg=@{nQE-Q`6GdLOIa%+^<X zq45h&i>aBiL%rZR?J(4Y4Z+wzFEUbRO-ILLef@dOp@kvJBur~q&R*>Vb}~xvkXpD` zOCS5D?6z2VAlDaj_rv=%UFmcuC*h#(KX)M2_pp$lYdqik$FDTv3V5qQ^oi!w!4oIy zUDt4%phx>vDP6D?J~fep>UyRpZv8HyTD#4xt8zVJ2}x!dZ~DM_VW6kP4sMdjK0Eq5 zx2qTbZC>Jl14L}o{Q|`GkPttnnkO9eECqZX$lra76v-|SLTfUKZ<be`;jMm3y?yXL zD7QA@NEA~~JCw`<&QsRkU8Z}a8NhF!=rK$RGDhWjc#hoMxPw*0i#RoXRzwhsV?dA` z+2&aal`TiS`>BmaD;U}jW`fX`Iq?vB@xc#3o@hkdgWW=M%EDSoat)$JxPyW6CGYw? zWhE0=drH=F__djyimS1Tb+;gU@=`L~b`q0X*i9sg@)}8S+*QJPD!M|Sf~`yR1J!9H z2~fJ0IXTT--%w5wt9F0J#M*M`i9F3|CSZ;OM$kB}Tue0(VmVEzrtB2o)K#T#G7r@E zBWHNCT+qzxqIIg%LfszcDmcn4T}?Db^Gc+x!5tlr-(og+IFy)DI6K;ZtY(}GqfBa+ zNugRVc6tqg%K$fJ-j(!S@Fr+sEb7Dms2lf+e9446E!>8Gm`Dq?g3;kM8>8tJYHo;n zxZB12HR(?ZY|=6$$GQC6YcZ>PUa+MdJt}U$TZc>`lB%j;muuO&E8=<Ul@k|75%-&f z_}pUfhy&f{E#o$IJ)bm)Xyw!#a+dwy^VNTQZA)e+7t*PqdE{bYj;Q(0$0?b{!`lw! zVbUwmEQe!GZy-?>cuUCsN^ZLlgzxlbW67j``?NtUe3<w93_adb<6G?BmPoD;qcGS} zmTsr2Lo%PFf4cwscAf~6zW*U-#X;-S>(i|={A{(Ac<G<)5Ufy#E9E%x6V9`xP3z1{ z%nwcV_N%|_w==PLyupTshW$GQQwweOe|Y}_z>LG&9-`n``5Zlw(c)-p_OuSV<ug0- zsH4;+@~8wq{f;qITWLcgd(!cs-Ib)p?886JhFYZbu!A9D&MvD(F6bmG6IPv-p&4@D zz7=QQjprznYY!k@`##+qgbB3SFX)Lcie`usb;(euffxEHmF;lKN{4EwJWe_`3q1Lf z`%+b&&3HU$=ognyx`PL%ZHrVZSzb8CLZ_1P={Fgp5?TD-)?H`kY)Uz&>|sT>b2R%^ z)$F|yEJJ2RlJ@r$4Z$hs4kj*#@ZRwg(tSzeLL4Jj!$mxlmd6#Fq)!hD7YZ;KH8oY# z*3grdaq?KDG%`sHk%wyce5(5B^ZoayIL&*@OcVC@=|f+oJ&X$OV9h4s&^r{$)0_n5 z@Z5{?4nA4jKPk2$e#7q9$i)SV85J&a9ri3-9Pjs2!;X%bg>!ODWO+HmqLzx|u6GFn zP!zh33{EhpeF{XQ0<&NmiuyA|zt_=gnW)D)2hAJNQ<fqb&g$q|b33M%Nbeldh96FT zz;<h0%Nkkm_{$f^E1UJrbx;+H_^1RH2(@{HiygqUAQ~;U?(qcBY<fTNQ*PWPMdVCx zxrR;^uT7Y$(~j!qDR`yyeXayDV(hn{;t%sK<KNtr-WL+GNJx$-eh6~38RX+X$Bl66 zfaA8DX(Yb&gVPDI!*mbFn;6X!R*GzoWFuD8`v^wu&a_(sSsV;YwDw@V!r0&vRHrCZ zEH&e48)W$Xaer>Ce08{!1GAa};j~k}saz3tBVnh9tmltofyLTG$90BSeTeY;Fklnn z{f10r-_D8u<aw!rVFvL!@YXAt{0H7#l4BvD=Q#l4tFxowD~CkC=rzGDpXfDZ(v#(X z=}la&81c9jZxlk&wk@g;^gP>hLylmaa|q%F4W!>V)ZLBvJ@^3BT|o3G91|B+^y4lr z%$-!Wt=S=B)v-G$q&FSD?(9_h=%{+2_e^5H=;P(eDgdKz$O7kpQ5$`8XWLq+h_B5Q zZ@*gsoqk2J3%*E>u0uTmRfuB&wG9n8mDUxbL^U&&v5-JDP4Iht&ER><u9oi%yD#G> zc*Tc>A4kie&<{597VX}NPJQH8@iduD<mM0Jv_B+^Q&oK*tV8@2{UHoWd-20$u3KdZ z3T??Yzi7m}3>RR63<oLa973~AIUDm;+CCYQ>gkB|e7L6rz{f8Xi+S0@D{Xoyh0*Sx zfWY6(NbFT&gZaS>ulo8=(_~j$J^n9a+pb$ZfyI9^NL?pzak)R5cm}?MHn#m(#230~ z)LYs3QcqJ<Yd9r6BS(Rr*xoW|g+|lXjvQ7aDs@$6)<jc^uzu@wKHP`6Fr;B8u+j?u z&M6=oAPnX^+{F8wuViAMBHZ(WMMXfuzxDaNqhI^f$zgh#=*7)lHL~YITS1iQ%1>T< z*V{k_#!X}4;BP8HvNCmgd^SFXLMKwn|GfR9Y{$i*Cx-*(RzGob-ES&67gc6rPehc7 z^C0m3$Mfz7_IpwJMo*R8dO{;7w7K~-VV5oaOTUjR&(?e~@-D7-P?lYUa_>5L6C>*R z2C8$`;CpmngkL@xdhp(&>66NsL^_y#*Nl{`e_1G?TN#D2zc4%0*9aJ2$E{?>lEil! z7V@KSR4<<s{SrEGeXM<{qoV0)8G580kH!4I(Dgrk_`mFrC`GtD8jkYfn4A~{=8GMy z70@THsP234ml-5t=m~*uOkGFfd`HJ%Bio|vins>lIpQs)?MHM-Ud9O#SxJAG%dk3J i)7XFSS7d=7Xp=FAHuwG!B>#@i0C{N@sagrM(EkOvyKM>p literal 0 HcmV?d00001 From db2edc32a09122630acad770354fb63b3d4e14f4 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Sat, 25 Nov 2023 01:02:02 -0600 Subject: [PATCH 10/89] grip dont control gun and seperate files --- code/modules/guncrafting/frame.dm | 197 +++++++++++++++++++++++++ code/modules/guncrafting/lathe.dm | 237 ------------------------------ code/modules/guncrafting/part.dm | 39 +++++ shiptest.dme | 2 + 4 files changed, 238 insertions(+), 237 deletions(-) create mode 100644 code/modules/guncrafting/frame.dm create mode 100644 code/modules/guncrafting/part.dm diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm new file mode 100644 index 000000000000..0ea6a1e791b9 --- /dev/null +++ b/code/modules/guncrafting/frame.dm @@ -0,0 +1,197 @@ +/obj/item/part/gun/frame + name = "gun frame" + desc = "a generic gun frame. consider debug" + icon_state = "frame_olivaw" + generic = FALSE + var/result = /obj/item/modgun + + // Currently installed grip + var/obj/item/part/gun/modular/grip/InstalledGrip + // Which grips does the frame accept? + var/list/gripvars = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) + + // What are the results (in order relative to gripvars)? + var/list/resultvars = list(/obj/item/modgun, /obj/item/modgun) + + // Currently installed mechanism + var/obj/item/part/gun/modular/grip/InstalledMechanism + // Which mechanism the frame accepts? + //var/list/mechanismvar = /obj/item/part/gun/modular/mechanism + + // Currently installed barrel + var/obj/item/part/gun/modular/barrel/InstalledBarrel + // Which barrels does the frame accept? + var/list/barrelvars = list(/obj/item/part/gun/modular/barrel) + + // Bonuses from forging/type or maluses from printing + var/cheap = FALSE // Set this to true for cheap variants + +/obj/item/part/gun/frame/New(loc, ...) + . = ..() + var/obj/item/modgun/G = new result(null) + +/obj/item/part/gun/frame/New(loc) + ..() + var/spawn_with_preinstalled_parts = FALSE + + if(spawn_with_preinstalled_parts) + var/list/parts_list = list("mechanism", "barrel", "grip") + + pick_n_take(parts_list) + if(prob(50)) + pick_n_take(parts_list) + + for(var/part in parts_list) + switch(part) + if("mechanism") + InstalledMechanism = new mechanismvar(src) + if("barrel") + var/select = pick(barrelvars) + InstalledBarrel = new select(src) + if("grip") + var/select = pick(gripvars) + InstalledGrip = new select(src) + /* + var/variantnum = gripvars.Find(select) + result = resultvars[variantnum] + */ + +/obj/item/part/gun/frame/proc/eject_item(obj/item/I, mob/living/user) + if(!I || !user.IsAdvancedToolUser() || user.stat || !user.Adjacent(I)) + return FALSE + user.put_in_hands(I) + playsound(src.loc, 'sound/weapons/gun/pistol/mag_insert_alt.ogg', 75, 1) + user.visible_message( + "[user] removes [I] from [src].", + span_notice("You remove [I] from [src].") + ) + return TRUE + +/obj/item/part/gun/frame/proc/insert_item(obj/item/I, mob/living/user) + if(!I || !istype(user) || user.stat) + return FALSE + I.forceMove(src) + playsound(src.loc, 'sound/weapons/gun/pistol/mag_release_alt.ogg', 75, 1) + to_chat(user, span_notice("You insert [I] into [src].")) + return TRUE + +/obj/item/part/gun/frame/proc/replace_item(obj/item/I_old, obj/item/I_new, mob/living/user) + if(!I_old || !I_new || !istype(user) || user.stat || !user.Adjacent(I_new) || !user.Adjacent(I_old)) + return FALSE + I_new.forceMove(src) + user.put_in_hands(I_old) + playsound(src.loc, 'sound/weapons/gun/pistol/mag_release_alt.ogg', 75, 1) + spawn(2) + playsound(src.loc, 'sound/weapons/gun/pistol/mag_insert_alt.ogg', 75, 1) + user.visible_message( + "[user] replaces [I_old] with [I_new] in [src].", + span_notice("You replace [I_old] with [I_new] in [src].")) + return TRUE + +/obj/item/part/gun/frame/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/part/gun/modular/grip)) + if(InstalledGrip) + to_chat(user, span_warning("[src] already has a grip attached!")) + return + else + handle_gripvar(I, user) + + if(istype(I, /obj/item/part/gun/modular/mechanism)) + if(InstalledMechanism) + to_chat(user, span_warning("[src] already has a mechanism attached!")) + return + else + handle_mechanismvar(I, user) + + if(istype(I, /obj/item/part/gun/modular/barrel)) + if(InstalledBarrel) + to_chat(user, span_warning("[src] already has a barrel attached!")) + return + else + handle_barrelvar(I, user) + + if(I.tool_behaviour == TOOL_SCREWDRIVER) + var/list/possibles = contents.Copy() + var/obj/item/part/gun/toremove = input("Which part would you like to remove?","Removing parts") in possibles + if(!toremove) + return + if(I.use_tool(src, user, 40, volume=50)) + eject_item(toremove, user) + if(istype(toremove, /obj/item/part/gun/modular/grip)) + InstalledGrip = null + else if(istype(toremove, /obj/item/part/gun/modular/barrel)) + InstalledBarrel = FALSE + else if(istype(toremove, /obj/item/part/gun/modular/mechanism)) + InstalledMechanism = FALSE + + return ..() + +/obj/item/part/gun/frame/proc/handle_gripvar(obj/item/I, mob/living/user) + if(I.type in gripvars) + if(insert_item(I, user)) + /* + var/variantnum = gripvars.Find(I.type) + result = resultvars[variantnum] + */ + InstalledGrip = I + to_chat(user, span_notice("You have attached the grip to \the [src].")) + return + else + to_chat(user, span_warning("This grip does not fit!")) + return + +/obj/item/part/gun/frame/proc/handle_mechanismvar(obj/item/I, mob/living/user) + if(I.type == mechanismvar) + if(insert_item(I, user)) + InstalledMechanism = I + to_chat(user, span_notice("You have attached the mechanism to \the [src].")) + return + else + to_chat(user, span_warning("This mechanism does not fit!")) + return + +/obj/item/part/gun/frame/proc/handle_barrelvar(obj/item/I, mob/living/user) + if(I.type in barrelvars) + if(insert_item(I, user)) + InstalledBarrel = I + to_chat(user, span_notice("You have attached the barrel to \the [src].")) + return + else + to_chat(user, span_warning("This barrel does not fit!")) + return + +/obj/item/part/gun/frame/attack_self(mob/user) + . = ..() + var/turf/T = get_turf(src) + if(!InstalledGrip) + to_chat(user, span_warning("\the [src] does not have a grip!")) + return + if(!InstalledMechanism) + to_chat(user, span_warning("\the [src] does not have a mechanism!")) + return + if(!InstalledBarrel) + to_chat(user, span_warning("\the [src] does not have a barrel!")) + return + var/obj/item/modgun/G = new result(T) + if(barrelvars.len > 1 && istype(G, /obj/item/modgun)) + var/obj/item/modgun/P = G + P.caliber = InstalledBarrel.caliber + G.gun_parts = list(src.type = 1, InstalledGrip.type = 1, InstalledMechanism.type = 1, InstalledBarrel.type = 1) + qdel(src) + return + +/obj/item/part/gun/frame/examine(user, distance) + . = ..() + if(.) + if(InstalledGrip) + to_chat(user, span_notice("\the [src] has \a [InstalledGrip] installed.")) + else + to_chat(user, span_notice("\the [src] does not have a grip installed.")) + if(InstalledMechanism) + to_chat(user, span_notice("\the [src] has \a [InstalledMechanism] installed.")) + else + to_chat(user, span_notice("\the [src] does not have a mechanism installed.")) + if(InstalledBarrel) + to_chat(user, span_notice("\the [src] has \a [InstalledBarrel] installed.")) + else + to_chat(user, span_notice("\the [src] does not have a barrel installed.")) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 407a41f77681..5c954c7c8f15 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -175,204 +175,6 @@ icon_state = "work_piece" max_amount = 10 -/obj/item/part/gun - name = "gun part" - desc = "Spare part of gun." - -/obj/item/part/gun/frame - name = "gun frame" - desc = "a generic gun frame. consider debug" - icon_state = "frame_olivaw" - generic = FALSE - var/result = /obj/item/modgun - - // Currently installed grip - var/obj/item/part/gun/modular/grip/InstalledGrip - // Which grips does the frame accept? - var/list/gripvars = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) - - // What are the results (in order relative to gripvars)? - var/list/resultvars = list(/obj/item/modgun, /obj/item/modgun) - - // Currently installed mechanism - var/obj/item/part/gun/modular/grip/InstalledMechanism - // Which mechanism the frame accepts? - var/list/mechanismvar = /obj/item/part/gun/modular/mechanism - - // Currently installed barrel - var/obj/item/part/gun/modular/barrel/InstalledBarrel - // Which barrels does the frame accept? - var/list/barrelvars = list(/obj/item/part/gun/modular/barrel) - - // Bonuses from forging/type or maluses from printing - var/cheap = FALSE // Set this to true for cheap variants - -/obj/item/part/gun/frame/New(loc, ...) - . = ..() - var/obj/item/modgun/G = new result(null) - -/obj/item/part/gun/frame/New(loc) - ..() - var/spawn_with_preinstalled_parts = FALSE - - if(spawn_with_preinstalled_parts) - var/list/parts_list = list("mechanism", "barrel", "grip") - - pick_n_take(parts_list) - if(prob(50)) - pick_n_take(parts_list) - - for(var/part in parts_list) - switch(part) - if("mechanism") - InstalledMechanism = new mechanismvar(src) - if("barrel") - var/select = pick(barrelvars) - InstalledBarrel = new select(src) - if("grip") - var/select = pick(gripvars) - InstalledGrip = new select(src) - var/variantnum = gripvars.Find(select) - result = resultvars[variantnum] - -/obj/item/part/gun/frame/proc/eject_item(obj/item/I, mob/living/user) - if(!I || !user.IsAdvancedToolUser() || user.stat || !user.Adjacent(I)) - return FALSE - user.put_in_hands(I) - playsound(src.loc, 'sound/weapons/gun/pistol/mag_insert_alt.ogg', 75, 1) - user.visible_message( - "[user] removes [I] from [src].", - span_notice("You remove [I] from [src].") - ) - return TRUE - -/obj/item/part/gun/frame/proc/insert_item(obj/item/I, mob/living/user) - if(!I || !istype(user) || user.stat) - return FALSE - I.forceMove(src) - playsound(src.loc, 'sound/weapons/gun/pistol/mag_release_alt.ogg', 75, 1) - to_chat(user, span_notice("You insert [I] into [src].")) - return TRUE - -/obj/item/part/gun/frame/proc/replace_item(obj/item/I_old, obj/item/I_new, mob/living/user) - if(!I_old || !I_new || !istype(user) || user.stat || !user.Adjacent(I_new) || !user.Adjacent(I_old)) - return FALSE - I_new.forceMove(src) - user.put_in_hands(I_old) - playsound(src.loc, 'sound/weapons/gun/pistol/mag_release_alt.ogg', 75, 1) - spawn(2) - playsound(src.loc, 'sound/weapons/gun/pistol/mag_insert_alt.ogg', 75, 1) - user.visible_message( - "[user] replaces [I_old] with [I_new] in [src].", - span_notice("You replace [I_old] with [I_new] in [src].")) - return TRUE - -/obj/item/part/gun/frame/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/part/gun/modular/grip)) - if(InstalledGrip) - to_chat(user, span_warning("[src] already has a grip attached!")) - return - else - handle_gripvar(I, user) - - if(istype(I, /obj/item/part/gun/modular/mechanism)) - if(InstalledMechanism) - to_chat(user, span_warning("[src] already has a mechanism attached!")) - return - else - handle_mechanismvar(I, user) - - if(istype(I, /obj/item/part/gun/modular/barrel)) - if(InstalledBarrel) - to_chat(user, span_warning("[src] already has a barrel attached!")) - return - else - handle_barrelvar(I, user) - - if(I.tool_behaviour == TOOL_SCREWDRIVER) - var/list/possibles = contents.Copy() - var/obj/item/part/gun/toremove = input("Which part would you like to remove?","Removing parts") in possibles - if(!toremove) - return - if(I.use_tool(src, user, 40, volume=50)) - eject_item(toremove, user) - if(istype(toremove, /obj/item/part/gun/modular/grip)) - InstalledGrip = null - else if(istype(toremove, /obj/item/part/gun/modular/barrel)) - InstalledBarrel = FALSE - else if(istype(toremove, /obj/item/part/gun/modular/mechanism)) - InstalledMechanism = FALSE - - return ..() - -/obj/item/part/gun/frame/proc/handle_gripvar(obj/item/I, mob/living/user) - if(I.type in gripvars) - if(insert_item(I, user)) - var/variantnum = gripvars.Find(I.type) - result = resultvars[variantnum] - InstalledGrip = I - to_chat(user, span_notice("You have attached the grip to \the [src].")) - return - else - to_chat(user, span_warning("This grip does not fit!")) - return - -/obj/item/part/gun/frame/proc/handle_mechanismvar(obj/item/I, mob/living/user) - if(I.type == mechanismvar) - if(insert_item(I, user)) - InstalledMechanism = I - to_chat(user, span_notice("You have attached the mechanism to \the [src].")) - return - else - to_chat(user, span_warning("This mechanism does not fit!")) - return - -/obj/item/part/gun/frame/proc/handle_barrelvar(obj/item/I, mob/living/user) - if(I.type in barrelvars) - if(insert_item(I, user)) - InstalledBarrel = I - to_chat(user, span_notice("You have attached the barrel to \the [src].")) - return - else - to_chat(user, span_warning("This barrel does not fit!")) - return - -/obj/item/part/gun/frame/attack_self(mob/user) - . = ..() - var/turf/T = get_turf(src) - if(!InstalledGrip) - to_chat(user, span_warning("\the [src] does not have a grip!")) - return - if(!InstalledMechanism) - to_chat(user, span_warning("\the [src] does not have a mechanism!")) - return - if(!InstalledBarrel) - to_chat(user, span_warning("\the [src] does not have a barrel!")) - return - var/obj/item/modgun/G = new result(T) - if(barrelvars.len > 1 && istype(G, /obj/item/modgun)) - var/obj/item/modgun/P = G - P.caliber = InstalledBarrel.caliber - G.gun_parts = list(src.type = 1, InstalledGrip.type = 1, InstalledMechanism.type = 1, InstalledBarrel.type = 1) - qdel(src) - return - -/obj/item/part/gun/frame/examine(user, distance) - . = ..() - if(.) - if(InstalledGrip) - to_chat(user, span_notice("\the [src] has \a [InstalledGrip] installed.")) - else - to_chat(user, span_notice("\the [src] does not have a grip installed.")) - if(InstalledMechanism) - to_chat(user, span_notice("\the [src] has \a [InstalledMechanism] installed.")) - else - to_chat(user, span_notice("\the [src] does not have a mechanism installed.")) - if(InstalledBarrel) - to_chat(user, span_notice("\the [src] has \a [InstalledBarrel] installed.")) - else - to_chat(user, span_notice("\the [src] does not have a barrel installed.")) - /obj/item/modgun name = "gun" desc = "A gun." @@ -382,45 +184,6 @@ var/caliber = 357 var/gun_parts = list() -/obj/item/part - icon ='icons/obj/crafts.dmi' - -/obj/item/part/gun - name = "gun part" - desc = "Spare part of gun." - icon_state = "gun_part_1" - var/generic = TRUE - -/obj/item/part/gun/Initialize() - . = ..() - if(generic) - icon_state = "gun_part_[rand(1,6)]" - -/obj/item/part/gun/modular - name = "modular gun part" - desc = "You dont think this should exist." - generic = FALSE - -/obj/item/part/gun/modular/grip/wood - name = "wood grip" - desc = "A wood firearm grip, unattached from a firearm." - icon_state = "grip_wood" - -/obj/item/part/gun/modular/grip/black - name = "plastic grip" - desc = "A black plastic firearm grip, unattached from a firearm. For sleekness and decorum." - icon_state = "grip_black" - -/obj/item/part/gun/modular/mechanism - name = "generic mechanism" - desc = "All the bits that makes the bullet go bang." - icon_state = "mechanism_pistol" - -/obj/item/part/gun/modular/barrel - name = "generic barrel" - desc = "A gun barrel, which keeps the bullet going in the right direction." - icon_state = "barrel_35" - var/caliber = 357 /obj/item/blueprint name = "Blueprint" desc = "This could be used to make a gun." diff --git a/code/modules/guncrafting/part.dm b/code/modules/guncrafting/part.dm new file mode 100644 index 000000000000..697d5e26febc --- /dev/null +++ b/code/modules/guncrafting/part.dm @@ -0,0 +1,39 @@ +/obj/item/part + icon ='icons/obj/crafts.dmi' + +/obj/item/part/gun + name = "gun part" + desc = "Spare part of gun." + icon_state = "gun_part_1" + var/generic = TRUE + +/obj/item/part/gun/Initialize() + . = ..() + if(generic) + icon_state = "gun_part_[rand(1,6)]" + +/obj/item/part/gun/modular + name = "modular gun part" + desc = "You dont think this should exist." + generic = FALSE + +/obj/item/part/gun/modular/grip/wood + name = "wood grip" + desc = "A wood firearm grip, unattached from a firearm." + icon_state = "grip_wood" + +/obj/item/part/gun/modular/grip/black + name = "plastic grip" + desc = "A black plastic firearm grip, unattached from a firearm. For sleekness and decorum." + icon_state = "grip_black" + +/obj/item/part/gun/modular/mechanism + name = "generic mechanism" + desc = "All the bits that makes the bullet go bang." + icon_state = "mechanism_pistol" + +/obj/item/part/gun/modular/barrel + name = "generic barrel" + desc = "A gun barrel, which keeps the bullet going in the right direction." + icon_state = "barrel_35" + var/caliber = 357 diff --git a/shiptest.dme b/shiptest.dme index 412bbd5f8c7e..15600e073602 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2161,7 +2161,9 @@ #include "code\modules\games\cas.dm" #include "code\modules\games\kotahi.dm" #include "code\modules\games\tarot.dm" +#include "code\modules\guncrafting\frame.dm" #include "code\modules\guncrafting\lathe.dm" +#include "code\modules\guncrafting\part.dm" #include "code\modules\holiday\easter.dm" #include "code\modules\holiday\foreign_calendar.dm" #include "code\modules\holiday\holidays.dm" From de7c2b5e20656f473e40cd24312e6e26c5a89ae6 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Sat, 25 Nov 2023 11:01:56 -0600 Subject: [PATCH 11/89] shrug --- code/modules/guncrafting/part.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/guncrafting/part.dm b/code/modules/guncrafting/part.dm index 697d5e26febc..17a03247668b 100644 --- a/code/modules/guncrafting/part.dm +++ b/code/modules/guncrafting/part.dm @@ -16,6 +16,8 @@ name = "modular gun part" desc = "You dont think this should exist." generic = FALSE + var/list/attached_mods = list() + var/list/legal_mods = list() /obj/item/part/gun/modular/grip/wood name = "wood grip" From 22de36f410a942ac71aac58fef482cf5055bd43e Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Fri, 19 Jan 2024 00:45:07 -0600 Subject: [PATCH 12/89] scrap blueprint system --- code/modules/guncrafting/frame.dm | 33 ++++++----------- code/modules/guncrafting/lathe.dm | 61 +++++-------------------------- code/modules/projectiles/gun.dm | 3 ++ 3 files changed, 25 insertions(+), 72 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 0ea6a1e791b9..a6120a6e76a0 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -3,20 +3,17 @@ desc = "a generic gun frame. consider debug" icon_state = "frame_olivaw" generic = FALSE - var/result = /obj/item/modgun + var/result = /obj/item/gun // Currently installed grip var/obj/item/part/gun/modular/grip/InstalledGrip // Which grips does the frame accept? var/list/gripvars = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) - // What are the results (in order relative to gripvars)? - var/list/resultvars = list(/obj/item/modgun, /obj/item/modgun) - // Currently installed mechanism var/obj/item/part/gun/modular/grip/InstalledMechanism // Which mechanism the frame accepts? - //var/list/mechanismvar = /obj/item/part/gun/modular/mechanism + var/list/mechanismvar = /obj/item/part/gun/modular/mechanism // Currently installed barrel var/obj/item/part/gun/modular/barrel/InstalledBarrel @@ -32,15 +29,10 @@ /obj/item/part/gun/frame/New(loc) ..() - var/spawn_with_preinstalled_parts = FALSE + var/spawn_with_preinstalled_parts = TRUE if(spawn_with_preinstalled_parts) var/list/parts_list = list("mechanism", "barrel", "grip") - - pick_n_take(parts_list) - if(prob(50)) - pick_n_take(parts_list) - for(var/part in parts_list) switch(part) if("mechanism") @@ -51,10 +43,6 @@ if("grip") var/select = pick(gripvars) InstalledGrip = new select(src) - /* - var/variantnum = gripvars.Find(select) - result = resultvars[variantnum] - */ /obj/item/part/gun/frame/proc/eject_item(obj/item/I, mob/living/user) if(!I || !user.IsAdvancedToolUser() || user.stat || !user.Adjacent(I)) @@ -184,14 +172,17 @@ . = ..() if(.) if(InstalledGrip) - to_chat(user, span_notice("\the [src] has \a [InstalledGrip] installed.")) + . += "<span class='notice'>\the [src] has \a [InstalledGrip] installed.</span>" else - to_chat(user, span_notice("\the [src] does not have a grip installed.")) + . += "<span class='notice'>\the [src] does not have a grip installed.</span>" if(InstalledMechanism) - to_chat(user, span_notice("\the [src] has \a [InstalledMechanism] installed.")) + . += "<span class='notice'>\the [src] has \a [InstalledMechanism] installed.</span>" else - to_chat(user, span_notice("\the [src] does not have a mechanism installed.")) + . += "<span class='notice'>\the [src] does not have a mechanism installed.</span>" if(InstalledBarrel) - to_chat(user, span_notice("\the [src] has \a [InstalledBarrel] installed.")) + . += "<span class='notice'>\the [src] has \a [InstalledBarrel] installed.</span>" else - to_chat(user, span_notice("\the [src] does not have a barrel installed.")) + . += "<span class='notice'>\the [src] does not have a barrel installed.</span>" + +/obj/item/part/gun/frame/mk1 + result = /obj/item/gun/ballistic/shotgun/winchester/mk1 diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 5c954c7c8f15..a29644753a79 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -1,5 +1,5 @@ #define DECONSTRUCT_STAMINA_MINIMUM 50 -#define DECONSTRUCT_STAMINA_USE 40 +#define DECONSTRUCT_STAMINA_USE 20 /obj/structure/lathe name = "Machine Lathe" @@ -9,7 +9,6 @@ density = TRUE anchored = FALSE var/obj/item/work_piece = FALSE - var/obj/item/blueprint/blueprint = FALSE var/steps_left = 0 //Whether there is an active job on the table var/in_progress = FALSE @@ -38,7 +37,6 @@ if(!mode) var/list/choose_options = list() choose_options += list("Deconstruct" = image(icon = 'icons/obj/tools.dmi', icon_state = "welder")) - choose_options += list("Research" = image(icon = 'icons/obj/tools.dmi', icon_state = "analyzer")) choose_options += list("Fabricate" = image(icon = 'icons/obj/tools.dmi', icon_state = "wrench")) mode = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) if(mode && !working) @@ -47,25 +45,10 @@ to_chat(user, "There is no item on the lathe.") return deconstruct_part(user) - if(mode == "Research") - if(!work_piece) - to_chat(user, "There is no item on the lathe.") - return - research_part(user) if(mode == "Fabricate") - if(!blueprint) - to_chat(user, "There is no blueprint on the lathe.") - return fabricate_part(user) /obj/structure/lathe/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/blueprint)) - if(blueprint) - to_chat(user, "You cant add another blueprint to the lathe.") - return - I.forceMove(src) - blueprint = I - return if(work_piece) to_chat(user, "You cant add another item to the lathe.") return @@ -101,6 +84,9 @@ if(!in_progress) in_progress = TRUE steps_left = 3 + if(user.getStaminaLoss() > DECONSTRUCT_STAMINA_MINIMUM) + balloon_alert(user, "too tired") + return working = TRUE if(do_after(user, 20, work_piece)) if(steps_left > 1) @@ -116,9 +102,13 @@ /obj/structure/lathe/proc/scrap_item(mob/user) to_chat(user, "The [work_piece.name] is broken down into parts.") playsound(src,'sound/items/welder.ogg',50,TRUE) - if(istype (work_piece, /obj/item/modgun)) + if(istype (work_piece, /obj/item/gun)) + var/obj/item/gun/gun_work_piece = work_piece var/obj/item/new_part = new /obj/item/part/gun new_part.forceMove(drop_location()) + if(gun_work_piece.frame) + var/obj/item/frame = gun_work_piece.frame + frame.forceMove(drop_location()) var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) var/material_amount = materials.get_item_material_amount(work_piece) if(material_amount) @@ -126,43 +116,12 @@ materials.retrieve_all() destroy_part(user) -////////////// -// RESEARCH // -////////////// - -/obj/structure/lathe/proc/research_part(mob/living/carbon/human/user) - if(!in_progress) - in_progress = TRUE - steps_left = 3 - working = TRUE - if(do_after(user, 20, work_piece)) - if(steps_left > 1) - steps_left-- - playsound(src,'sound/items/welder2.ogg',50,TRUE) - to_chat(user, "You have [steps_left] steps left.") - user.adjustStaminaLoss(DECONSTRUCT_STAMINA_USE) - research_part(user) - else - var/obj/item/blueprint/blueprint = new /obj/item/blueprint - blueprint.desc += "\nA blueprint on [work_piece.name]." - blueprint.design = work_piece - blueprint.forceMove(drop_location()) - if(Adjacent(user) && !issilicon(user)) - user.put_in_hands(blueprint) - remove_part(user) - working = FALSE - /////////////// // FABRICATE // /////////////// /obj/structure/lathe/proc/fabricate_part(mob/living/carbon/human/user) - if(blueprint) - var/obj/item/new_part = new blueprint.design(loc) - new_part.forceMove(drop_location()) - if(Adjacent(user) && !issilicon(user)) - user.put_in_hands(new_part) - + return /////////// // ITEMS // diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b250e23751d5..e3b503b4b30e 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -133,6 +133,9 @@ ///If the saftey on? If so, we can't fire the weapon var/safety = FALSE + // Used when deconstructing + var/frame = FALSE + /obj/item/gun/Initialize() . = ..() RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) From 8f28e6bd1766f3c940d8b2f372586ffe8feae3db Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Fri, 19 Jan 2024 20:51:26 -0600 Subject: [PATCH 13/89] frames on gun init --- code/modules/guncrafting/frame.dm | 4 ---- code/modules/guncrafting/lathe.dm | 29 +++++++++++++++++++++++++---- code/modules/projectiles/gun.dm | 4 +++- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index a6120a6e76a0..1c6de3a7b5b5 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -23,10 +23,6 @@ // Bonuses from forging/type or maluses from printing var/cheap = FALSE // Set this to true for cheap variants -/obj/item/part/gun/frame/New(loc, ...) - . = ..() - var/obj/item/modgun/G = new result(null) - /obj/item/part/gun/frame/New(loc) ..() var/spawn_with_preinstalled_parts = TRUE diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index a29644753a79..dada9a36ec15 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -34,6 +34,9 @@ remove_part(user) /obj/structure/lathe/attack_hand(mob/living/carbon/human/user) + if(!work_piece) + to_chat(user, "There is no item on the lathe.") + return if(!mode) var/list/choose_options = list() choose_options += list("Deconstruct" = image(icon = 'icons/obj/tools.dmi', icon_state = "welder")) @@ -41,9 +44,6 @@ mode = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) if(mode && !working) if(mode == "Deconstruct") - if(!work_piece) - to_chat(user, "There is no item on the lathe.") - return deconstruct_part(user) if(mode == "Fabricate") fabricate_part(user) @@ -121,7 +121,28 @@ /////////////// /obj/structure/lathe/proc/fabricate_part(mob/living/carbon/human/user) - return + if(istype (work_piece, /obj/item/gun)) + var/obj/item/gun/gun_work_piece = work_piece + var/list/choose_options = list() + choose_options += list("Grip" = image(icon ='icons/obj/crafts.dmi', icon_state = "grip_wood")) + choose_options += list("Mechanism" = image(icon ='icons/obj/crafts.dmi', icon_state = "mechanism_pistol")) + choose_options += list("Barrel" = image(icon ='icons/obj/crafts.dmi', icon_state = "barrel_35")) + if(gun_work_piece.frame) + choose_options += list("Frame" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.icon_state)) + var/choosen_part = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) + if(choosen_part) + var/obj/part_to_build + switch(choosen_part) + if("Grip") + part_to_build = new /obj/item/part/gun/modular/grip/wood + if("Mechanism") + part_to_build = new /obj/item/part/gun/modular/mechanism + if("Barrel") + part_to_build = new /obj/item/part/gun/modular/barrel + if("Frame") + part_to_build = new /obj/item/part/gun/frame + part_to_build.forceMove(drop_location()) + mode = FALSE /////////// // ITEMS // diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index e3b503b4b30e..8f53f5895835 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -134,10 +134,12 @@ var/safety = FALSE // Used when deconstructing - var/frame = FALSE + var/obj/item/part/gun/frame/frame /obj/item/gun/Initialize() . = ..() + if(!frame) + frame = new(src) RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) if(pin) From 976ae141b84266f4d630597b67199e56c2d634aa Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 22 Jan 2024 17:28:32 -0600 Subject: [PATCH 14/89] dynamicly generate the parts --- code/modules/guncrafting/lathe.dm | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index dada9a36ec15..f1e49db7242f 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -124,9 +124,12 @@ if(istype (work_piece, /obj/item/gun)) var/obj/item/gun/gun_work_piece = work_piece var/list/choose_options = list() - choose_options += list("Grip" = image(icon ='icons/obj/crafts.dmi', icon_state = "grip_wood")) - choose_options += list("Mechanism" = image(icon ='icons/obj/crafts.dmi', icon_state = "mechanism_pistol")) - choose_options += list("Barrel" = image(icon ='icons/obj/crafts.dmi', icon_state = "barrel_35")) + if(gun_work_piece.frame.InstalledGrip) + choose_options += list("Grip" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.InstalledGrip.icon_state)) + if(gun_work_piece.frame.InstalledMechanism) + choose_options += list("Mechanism" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.InstalledMechanism.icon_state)) + if(gun_work_piece.frame.InstalledBarrel) + choose_options += list("Barrel" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.InstalledBarrel.icon_state)) if(gun_work_piece.frame) choose_options += list("Frame" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.icon_state)) var/choosen_part = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) @@ -134,13 +137,13 @@ var/obj/part_to_build switch(choosen_part) if("Grip") - part_to_build = new /obj/item/part/gun/modular/grip/wood + part_to_build = new gun_work_piece.frame.InstalledGrip.type if("Mechanism") - part_to_build = new /obj/item/part/gun/modular/mechanism + part_to_build = new gun_work_piece.frame.InstalledMechanism.type if("Barrel") - part_to_build = new /obj/item/part/gun/modular/barrel + part_to_build = new gun_work_piece.frame.InstalledBarrel.type if("Frame") - part_to_build = new /obj/item/part/gun/frame + part_to_build = new gun_work_piece.frame.type part_to_build.forceMove(drop_location()) mode = FALSE From 04982c490477aa6879487d2243b38d4e745e9b21 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 24 Jan 2024 12:53:02 -0600 Subject: [PATCH 15/89] yea --- code/modules/guncrafting/frame.dm | 11 ++++------- code/modules/projectiles/gun.dm | 10 +++++++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 1c6de3a7b5b5..9d29078973b9 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -146,7 +146,6 @@ /obj/item/part/gun/frame/attack_self(mob/user) . = ..() - var/turf/T = get_turf(src) if(!InstalledGrip) to_chat(user, span_warning("\the [src] does not have a grip!")) return @@ -156,12 +155,10 @@ if(!InstalledBarrel) to_chat(user, span_warning("\the [src] does not have a barrel!")) return - var/obj/item/modgun/G = new result(T) - if(barrelvars.len > 1 && istype(G, /obj/item/modgun)) - var/obj/item/modgun/P = G - P.caliber = InstalledBarrel.caliber - G.gun_parts = list(src.type = 1, InstalledGrip.type = 1, InstalledMechanism.type = 1, InstalledBarrel.type = 1) - qdel(src) + var/turf/T = get_turf(src) + var/obj/item/gun/newGun = new result(T) + newGun.frame = src + src.forceMove(newGun) return /obj/item/part/gun/frame/examine(user, distance) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 8f53f5895835..25e26933a5b0 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -133,13 +133,17 @@ ///If the saftey on? If so, we can't fire the weapon var/safety = FALSE - // Used when deconstructing + // Guncrafting var/obj/item/part/gun/frame/frame + // 0 means no frame 1-5 are diffrent quality parts + var/quality = 3 + /obj/item/gun/Initialize() . = ..() - if(!frame) - frame = new(src) + if(quality != 0) + if(!frame) + frame = new(src) RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) if(pin) From 08df15fbaa7caaf94c35c353e1ee261cee96a308 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 24 Jan 2024 16:17:16 -0600 Subject: [PATCH 16/89] yea --- code/modules/guncrafting/frame.dm | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 9d29078973b9..d9c0aafd70ec 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -8,12 +8,12 @@ // Currently installed grip var/obj/item/part/gun/modular/grip/InstalledGrip // Which grips does the frame accept? - var/list/gripvars = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) + var/list/validGrips = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) // Currently installed mechanism var/obj/item/part/gun/modular/grip/InstalledMechanism // Which mechanism the frame accepts? - var/list/mechanismvar = /obj/item/part/gun/modular/mechanism + var/list/validMechanism = /obj/item/part/gun/modular/mechanism // Currently installed barrel var/obj/item/part/gun/modular/barrel/InstalledBarrel @@ -32,12 +32,12 @@ for(var/part in parts_list) switch(part) if("mechanism") - InstalledMechanism = new mechanismvar(src) + InstalledMechanism = new validMechanism(src) if("barrel") var/select = pick(barrelvars) InstalledBarrel = new select(src) if("grip") - var/select = pick(gripvars) + var/select = pick(validGrips) InstalledGrip = new select(src) /obj/item/part/gun/frame/proc/eject_item(obj/item/I, mob/living/user) @@ -85,7 +85,7 @@ to_chat(user, span_warning("[src] already has a mechanism attached!")) return else - handle_mechanismvar(I, user) + handle_validMechanism(I, user) if(istype(I, /obj/item/part/gun/modular/barrel)) if(InstalledBarrel) @@ -111,10 +111,10 @@ return ..() /obj/item/part/gun/frame/proc/handle_gripvar(obj/item/I, mob/living/user) - if(I.type in gripvars) + if(I.type in validGrips) if(insert_item(I, user)) /* - var/variantnum = gripvars.Find(I.type) + var/variantnum = validGrips.Find(I.type) result = resultvars[variantnum] */ InstalledGrip = I @@ -124,8 +124,8 @@ to_chat(user, span_warning("This grip does not fit!")) return -/obj/item/part/gun/frame/proc/handle_mechanismvar(obj/item/I, mob/living/user) - if(I.type == mechanismvar) +/obj/item/part/gun/frame/proc/handle_validMechanism(obj/item/I, mob/living/user) + if(I.type == validMechanism) if(insert_item(I, user)) InstalledMechanism = I to_chat(user, span_notice("You have attached the mechanism to \the [src].")) @@ -156,7 +156,9 @@ to_chat(user, span_warning("\the [src] does not have a barrel!")) return var/turf/T = get_turf(src) - var/obj/item/gun/newGun = new result(T) + var/obj/item/gun/newGun = result + newGun.quality = 0 + new newGun(T) newGun.frame = src src.forceMove(newGun) return From 8cc5bfebbb168bccfa312c3a7297550c2fb6715b Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 24 Jan 2024 16:41:34 -0600 Subject: [PATCH 17/89] aaa --- code/modules/guncrafting/frame.dm | 32 ++++++++++++++----------------- code/modules/guncrafting/lathe.dm | 17 ---------------- 2 files changed, 14 insertions(+), 35 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index d9c0aafd70ec..e48d011cef19 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -13,15 +13,14 @@ // Currently installed mechanism var/obj/item/part/gun/modular/grip/InstalledMechanism // Which mechanism the frame accepts? - var/list/validMechanism = /obj/item/part/gun/modular/mechanism + var/list/validMechanisms = list(/obj/item/part/gun/modular/mechanism) // Currently installed barrel var/obj/item/part/gun/modular/barrel/InstalledBarrel // Which barrels does the frame accept? - var/list/barrelvars = list(/obj/item/part/gun/modular/barrel) + var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) - // Bonuses from forging/type or maluses from printing - var/cheap = FALSE // Set this to true for cheap variants + var/quality = 4 /obj/item/part/gun/frame/New(loc) ..() @@ -32,9 +31,10 @@ for(var/part in parts_list) switch(part) if("mechanism") - InstalledMechanism = new validMechanism(src) + var/select = pick(validMechanisms) + InstalledMechanism = new select(src) if("barrel") - var/select = pick(barrelvars) + var/select = pick(validBarrels) InstalledBarrel = new select(src) if("grip") var/select = pick(validGrips) @@ -78,21 +78,21 @@ to_chat(user, span_warning("[src] already has a grip attached!")) return else - handle_gripvar(I, user) + handle_grip(I, user) if(istype(I, /obj/item/part/gun/modular/mechanism)) if(InstalledMechanism) to_chat(user, span_warning("[src] already has a mechanism attached!")) return else - handle_validMechanism(I, user) + handle_mechanism(I, user) if(istype(I, /obj/item/part/gun/modular/barrel)) if(InstalledBarrel) to_chat(user, span_warning("[src] already has a barrel attached!")) return else - handle_barrelvar(I, user) + handle_barrel(I, user) if(I.tool_behaviour == TOOL_SCREWDRIVER) var/list/possibles = contents.Copy() @@ -110,13 +110,9 @@ return ..() -/obj/item/part/gun/frame/proc/handle_gripvar(obj/item/I, mob/living/user) +/obj/item/part/gun/frame/proc/handle_grip(obj/item/I, mob/living/user) if(I.type in validGrips) if(insert_item(I, user)) - /* - var/variantnum = validGrips.Find(I.type) - result = resultvars[variantnum] - */ InstalledGrip = I to_chat(user, span_notice("You have attached the grip to \the [src].")) return @@ -124,8 +120,8 @@ to_chat(user, span_warning("This grip does not fit!")) return -/obj/item/part/gun/frame/proc/handle_validMechanism(obj/item/I, mob/living/user) - if(I.type == validMechanism) +/obj/item/part/gun/frame/proc/handle_mechanism(obj/item/I, mob/living/user) + if(I.type == validMechanisms) if(insert_item(I, user)) InstalledMechanism = I to_chat(user, span_notice("You have attached the mechanism to \the [src].")) @@ -134,8 +130,8 @@ to_chat(user, span_warning("This mechanism does not fit!")) return -/obj/item/part/gun/frame/proc/handle_barrelvar(obj/item/I, mob/living/user) - if(I.type in barrelvars) +/obj/item/part/gun/frame/proc/handle_barrel(obj/item/I, mob/living/user) + if(I.type in validBarrels) if(insert_item(I, user)) InstalledBarrel = I to_chat(user, span_notice("You have attached the barrel to \the [src].")) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index f1e49db7242f..65313f1cdeb9 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -157,20 +157,3 @@ icon = 'icons/obj/guncrafting.dmi' icon_state = "work_piece" max_amount = 10 - -/obj/item/modgun - name = "gun" - desc = "A gun." - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "detective" - item_state = "gun" - var/caliber = 357 - var/gun_parts = list() - -/obj/item/blueprint - name = "Blueprint" - desc = "This could be used to make a gun." - icon = 'icons/obj/guncrafting.dmi' - icon_state = "blueprint" - var/design = FALSE - var/blueprint = FALSE From 5304d07e5e8e2f40b1f3844b654604ccfa386df3 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 24 Jan 2024 19:21:56 -0600 Subject: [PATCH 18/89] wow it just works!! --- code/modules/guncrafting/frame.dm | 17 +++++++++-------- code/modules/guncrafting/part.dm | 11 ++++++++++- code/modules/projectiles/gun.dm | 4 +++- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index e48d011cef19..6989e364cc4e 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -1,9 +1,9 @@ /obj/item/part/gun/frame name = "gun frame" - desc = "a generic gun frame. consider debug" + desc = "a generic gun frame." icon_state = "frame_olivaw" generic = FALSE - var/result = /obj/item/gun + var/obj/item/gun/result = /obj/item/gun // Currently installed grip var/obj/item/part/gun/modular/grip/InstalledGrip @@ -20,9 +20,7 @@ // Which barrels does the frame accept? var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) - var/quality = 4 - -/obj/item/part/gun/frame/New(loc) +/obj/item/part/gun/frame/Initialize(mapload) ..() var/spawn_with_preinstalled_parts = TRUE @@ -152,9 +150,7 @@ to_chat(user, span_warning("\the [src] does not have a barrel!")) return var/turf/T = get_turf(src) - var/obj/item/gun/newGun = result - newGun.quality = 0 - new newGun(T) + var/obj/item/gun/newGun = new result(T, 0) newGun.frame = src src.forceMove(newGun) return @@ -176,4 +172,9 @@ . += "<span class='notice'>\the [src] does not have a barrel installed.</span>" /obj/item/part/gun/frame/mk1 + name = "wellmade gun frame" + icon_state = "frame_shotgun" result = /obj/item/gun/ballistic/shotgun/winchester/mk1 + validGrips = list(/obj/item/part/gun/modular/grip/wood) + validMechanisms = list(/obj/item/part/gun/modular/mechanism/shotgun) + validBarrels = list(/obj/item/part/gun/modular/barrel/shotgun) diff --git a/code/modules/guncrafting/part.dm b/code/modules/guncrafting/part.dm index 17a03247668b..785a749c3469 100644 --- a/code/modules/guncrafting/part.dm +++ b/code/modules/guncrafting/part.dm @@ -34,8 +34,17 @@ desc = "All the bits that makes the bullet go bang." icon_state = "mechanism_pistol" +/obj/item/part/gun/modular/mechanism/shotgun + name = "generic shotgun mechanism" + desc = "All the bits that makes the bullet go bang." + icon_state = "mechanism_shotgun" + /obj/item/part/gun/modular/barrel name = "generic barrel" desc = "A gun barrel, which keeps the bullet going in the right direction." icon_state = "barrel_35" - var/caliber = 357 + +/obj/item/part/gun/modular/barrel/shotgun + name = "generic shotgun barrel" + desc = "A gun barrel, which keeps the bullet going in the right direction." + icon_state = "barrel_30" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 25e26933a5b0..56af3894f2f6 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -139,8 +139,10 @@ var/quality = 3 -/obj/item/gun/Initialize() +/obj/item/gun/Initialize(mapload, proviedQuality) . = ..() + if(proviedQuality) + quality = proviedQuality if(quality != 0) if(!frame) frame = new(src) From 182551f82cee3cf21d6b3df477f0bd93f3ddd856 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Thu, 25 Jan 2024 10:39:42 -0600 Subject: [PATCH 19/89] bitflags soon --- code/__DEFINES/gun_crafting.dm | 4 ++++ code/modules/guncrafting/frame.dm | 2 ++ code/modules/guncrafting/part.dm | 13 +++++++++---- code/modules/guncrafting/recipe.dm | 18 ++++++++++++++++++ shiptest.dme | 2 ++ 5 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 code/__DEFINES/gun_crafting.dm create mode 100644 code/modules/guncrafting/recipe.dm diff --git a/code/__DEFINES/gun_crafting.dm b/code/__DEFINES/gun_crafting.dm new file mode 100644 index 000000000000..a0257209d6f9 --- /dev/null +++ b/code/__DEFINES/gun_crafting.dm @@ -0,0 +1,4 @@ +#define GUN_PART_FRAME (1<<0) +#define GUN_PART_BARREL (1<<1) +#define GUN_PART_MECHANISM (1<<2) +#define GUN_PART_GRIP (1<<3) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 6989e364cc4e..46f8496d75d9 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -19,6 +19,8 @@ var/obj/item/part/gun/modular/barrel/InstalledBarrel // Which barrels does the frame accept? var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) + + gun_part_type = FRAME /obj/item/part/gun/frame/Initialize(mapload) ..() diff --git a/code/modules/guncrafting/part.dm b/code/modules/guncrafting/part.dm index 785a749c3469..a037697a41f0 100644 --- a/code/modules/guncrafting/part.dm +++ b/code/modules/guncrafting/part.dm @@ -5,7 +5,7 @@ name = "gun part" desc = "Spare part of gun." icon_state = "gun_part_1" - var/generic = TRUE + var/gun_part_type = NONE /obj/item/part/gun/Initialize() . = ..() @@ -15,9 +15,12 @@ /obj/item/part/gun/modular name = "modular gun part" desc = "You dont think this should exist." - generic = FALSE - var/list/attached_mods = list() - var/list/legal_mods = list() + +/obj/item/part/gun/modular/grip + name = "generic grip" + desc = "A firearm grip, unattached from a firearm." + icon_state = "grip_wood" + gun_part_type = GRIP /obj/item/part/gun/modular/grip/wood name = "wood grip" @@ -33,6 +36,7 @@ name = "generic mechanism" desc = "All the bits that makes the bullet go bang." icon_state = "mechanism_pistol" + gun_part_type = MECHANISM /obj/item/part/gun/modular/mechanism/shotgun name = "generic shotgun mechanism" @@ -43,6 +47,7 @@ name = "generic barrel" desc = "A gun barrel, which keeps the bullet going in the right direction." icon_state = "barrel_35" + gun_part_type = BARREL /obj/item/part/gun/modular/barrel/shotgun name = "generic shotgun barrel" diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm new file mode 100644 index 000000000000..7e4807361a14 --- /dev/null +++ b/code/modules/guncrafting/recipe.dm @@ -0,0 +1,18 @@ +/datum/lathe_recipe + var/obj/item/result = /obj/item/gun + +/datum/lathe_recipe/gun + var/list/validParts = list() + var/requiredPartTypes = ALL + +/datum/lathe_recipe/gun/winchester + result = /obj/item/gun/ballistic/shotgun/winchester + var/list/validParts = list( + /obj/item/part/gun/frame/mk1, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism/shotgun, + /obj/item/part/gun/modular/barrel/shotgun + ) + + + diff --git a/shiptest.dme b/shiptest.dme index 15600e073602..ed720cc109a9 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -65,6 +65,7 @@ #include "code\__DEFINES\food.dm" #include "code\__DEFINES\footsteps.dm" #include "code\__DEFINES\forensics.dm" +#include "code\__DEFINES\gun_crafting.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\icon_smoothing.dm" #include "code\__DEFINES\important_recursive_contents.dm" @@ -2164,6 +2165,7 @@ #include "code\modules\guncrafting\frame.dm" #include "code\modules\guncrafting\lathe.dm" #include "code\modules\guncrafting\part.dm" +#include code\modules\guncrafting\recipe.dm #include "code\modules\holiday\easter.dm" #include "code\modules\holiday\foreign_calendar.dm" #include "code\modules\holiday\holidays.dm" From ad28497971e07ec9412451208b2addd579a6592e Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Thu, 25 Jan 2024 20:57:20 -0600 Subject: [PATCH 20/89] ye --- code/modules/guncrafting/frame.dm | 9 +++++++-- code/modules/guncrafting/lathe.dm | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 46f8496d75d9..ae6c1e29f9e6 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -19,13 +19,18 @@ var/obj/item/part/gun/modular/barrel/InstalledBarrel // Which barrels does the frame accept? var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) - + gun_part_type = FRAME /obj/item/part/gun/frame/Initialize(mapload) ..() var/spawn_with_preinstalled_parts = TRUE +/obj/item/part/gun/frame/Initialize(mapload, dont_spawn_with_parts) + ..() + if(dont_spawn_with_parts) + spawn_with_preinstalled_parts = FALSE + if(spawn_with_preinstalled_parts) var/list/parts_list = list("mechanism", "barrel", "grip") for(var/part in parts_list) @@ -121,7 +126,7 @@ return /obj/item/part/gun/frame/proc/handle_mechanism(obj/item/I, mob/living/user) - if(I.type == validMechanisms) + if(I.type in validMechanisms) if(insert_item(I, user)) InstalledMechanism = I to_chat(user, span_notice("You have attached the mechanism to \the [src].")) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 65313f1cdeb9..8b3810ab6120 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -143,7 +143,7 @@ if("Barrel") part_to_build = new gun_work_piece.frame.InstalledBarrel.type if("Frame") - part_to_build = new gun_work_piece.frame.type + part_to_build = new gun_work_piece.frame.type(src, TRUE) part_to_build.forceMove(drop_location()) mode = FALSE From 8a870e01ef8cb57314f186c0a316d94214f4541d Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Thu, 25 Jan 2024 21:41:03 -0600 Subject: [PATCH 21/89] yea --- code/modules/guncrafting/frame.dm | 8 ++------ code/modules/guncrafting/part.dm | 11 +++-------- code/modules/guncrafting/recipe.dm | 11 ++++++++++- shiptest.dme | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index ae6c1e29f9e6..06589ce61f98 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -2,7 +2,6 @@ name = "gun frame" desc = "a generic gun frame." icon_state = "frame_olivaw" - generic = FALSE var/obj/item/gun/result = /obj/item/gun // Currently installed grip @@ -20,14 +19,11 @@ // Which barrels does the frame accept? var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) - gun_part_type = FRAME - -/obj/item/part/gun/frame/Initialize(mapload) - ..() - var/spawn_with_preinstalled_parts = TRUE + gun_part_type = GUN_PART_FRAME /obj/item/part/gun/frame/Initialize(mapload, dont_spawn_with_parts) ..() + var/spawn_with_preinstalled_parts = TRUE if(dont_spawn_with_parts) spawn_with_preinstalled_parts = FALSE diff --git a/code/modules/guncrafting/part.dm b/code/modules/guncrafting/part.dm index a037697a41f0..3c95f5a6390b 100644 --- a/code/modules/guncrafting/part.dm +++ b/code/modules/guncrafting/part.dm @@ -7,11 +7,6 @@ icon_state = "gun_part_1" var/gun_part_type = NONE -/obj/item/part/gun/Initialize() - . = ..() - if(generic) - icon_state = "gun_part_[rand(1,6)]" - /obj/item/part/gun/modular name = "modular gun part" desc = "You dont think this should exist." @@ -20,7 +15,7 @@ name = "generic grip" desc = "A firearm grip, unattached from a firearm." icon_state = "grip_wood" - gun_part_type = GRIP + gun_part_type = GUN_PART_GRIP /obj/item/part/gun/modular/grip/wood name = "wood grip" @@ -36,7 +31,7 @@ name = "generic mechanism" desc = "All the bits that makes the bullet go bang." icon_state = "mechanism_pistol" - gun_part_type = MECHANISM + gun_part_type = GUN_PART_MECHANISM /obj/item/part/gun/modular/mechanism/shotgun name = "generic shotgun mechanism" @@ -47,7 +42,7 @@ name = "generic barrel" desc = "A gun barrel, which keeps the bullet going in the right direction." icon_state = "barrel_35" - gun_part_type = BARREL + gun_part_type = GUN_PART_BARREL /obj/item/part/gun/modular/barrel/shotgun name = "generic shotgun barrel" diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index 7e4807361a14..f9b2f90da651 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -7,7 +7,16 @@ /datum/lathe_recipe/gun/winchester result = /obj/item/gun/ballistic/shotgun/winchester - var/list/validParts = list( + validParts = list( + /obj/item/part/gun/frame/mk1, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism/shotgun, + /obj/item/part/gun/modular/barrel/shotgun + ) + +/datum/lathe_recipe/gun/winchester + result = /obj/item/gun/ballistic/shotgun/winchester + validParts = list( /obj/item/part/gun/frame/mk1, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/shotgun, diff --git a/shiptest.dme b/shiptest.dme index ed720cc109a9..6c743328d115 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2165,7 +2165,7 @@ #include "code\modules\guncrafting\frame.dm" #include "code\modules\guncrafting\lathe.dm" #include "code\modules\guncrafting\part.dm" -#include code\modules\guncrafting\recipe.dm +#include "code\modules\guncrafting\recipe.dm" #include "code\modules\holiday\easter.dm" #include "code\modules\holiday\foreign_calendar.dm" #include "code\modules\holiday\holidays.dm" From a5dc31707feb67ff82fdcc64c7d37a09b757dbd8 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Tue, 30 Jan 2024 18:25:49 -0600 Subject: [PATCH 22/89] commit to recipes --- code/modules/guncrafting/frame.dm | 35 ++++++++++++++++++++++++++---- code/modules/guncrafting/recipe.dm | 23 ++++++++++++++++---- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 06589ce61f98..1efce108fea0 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -23,6 +23,7 @@ /obj/item/part/gun/frame/Initialize(mapload, dont_spawn_with_parts) ..() + /* var/spawn_with_preinstalled_parts = TRUE if(dont_spawn_with_parts) spawn_with_preinstalled_parts = FALSE @@ -40,6 +41,7 @@ if("grip") var/select = pick(validGrips) InstalledGrip = new select(src) + */ /obj/item/part/gun/frame/proc/eject_item(obj/item/I, mob/living/user) if(!I || !user.IsAdvancedToolUser() || user.stat || !user.Adjacent(I)) @@ -102,15 +104,17 @@ return if(I.use_tool(src, user, 40, volume=50)) eject_item(toremove, user) + /* if(istype(toremove, /obj/item/part/gun/modular/grip)) InstalledGrip = null else if(istype(toremove, /obj/item/part/gun/modular/barrel)) InstalledBarrel = FALSE else if(istype(toremove, /obj/item/part/gun/modular/mechanism)) InstalledMechanism = FALSE + */ return ..() - +/* /obj/item/part/gun/frame/proc/handle_grip(obj/item/I, mob/living/user) if(I.type in validGrips) if(insert_item(I, user)) @@ -140,9 +144,21 @@ else to_chat(user, span_warning("This barrel does not fit!")) return +*/ + +/obj/item/part/gun/frame/proc/handle_part(obj/item/I, mob/living/user) + /obj/item/part/gun/frame/proc/handle_part(obj/item/I, mob/living/user) + if(I.type in /datum/lathe_recipe/gun/m1911/validParts) + if(insert_item(I, user)) + to_chat(user, span_notice("You have attached the part to \the [src].")) + return + else + to_chat(user, span_warning("This part does not fit!")) + return /obj/item/part/gun/frame/attack_self(mob/user) . = ..() + /* if(!InstalledGrip) to_chat(user, span_warning("\the [src] does not have a grip!")) return @@ -152,6 +168,8 @@ if(!InstalledBarrel) to_chat(user, span_warning("\the [src] does not have a barrel!")) return + */ + for each(I in ) var/turf/T = get_turf(src) var/obj/item/gun/newGun = new result(T, 0) newGun.frame = src @@ -174,10 +192,19 @@ else . += "<span class='notice'>\the [src] does not have a barrel installed.</span>" -/obj/item/part/gun/frame/mk1 - name = "wellmade gun frame" +/obj/item/part/gun/frame/winchester + name = "Winchester Gun Frame icon_state = "frame_shotgun" - result = /obj/item/gun/ballistic/shotgun/winchester/mk1 + result = /obj/item/gun/ballistic/shotgun/winchester validGrips = list(/obj/item/part/gun/modular/grip/wood) validMechanisms = list(/obj/item/part/gun/modular/mechanism/shotgun) validBarrels = list(/obj/item/part/gun/modular/barrel/shotgun) + +/obj/item/part/gun/frame/winchester/mk1 + result = /obj/item/gun/ballistic/shotgun/winchester/mk1 + +/obj/item/part/gun/frame/m1911 + result = /obj/item/gun/ballistic/automatic/pistol/m1911 + +/obj/item/part/gun/frame/commander + result = /obj/item/gun/ballistic/automatic/pistol/commander diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index f9b2f90da651..616a19f982b4 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -8,20 +8,35 @@ /datum/lathe_recipe/gun/winchester result = /obj/item/gun/ballistic/shotgun/winchester validParts = list( - /obj/item/part/gun/frame/mk1, + /obj/item/part/gun/frame/winchester, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/shotgun, /obj/item/part/gun/modular/barrel/shotgun ) /datum/lathe_recipe/gun/winchester - result = /obj/item/gun/ballistic/shotgun/winchester + result = /obj/item/gun/ballistic/shotgun/winchester/mk1 validParts = list( - /obj/item/part/gun/frame/mk1, + /obj/item/part/gun/frame/winchester/mk1, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/shotgun, /obj/item/part/gun/modular/barrel/shotgun ) +/datum/lathe_recipe/gun/m1911 + result = /obj/item/gun/ballistic/automatic/pistol/m1911 + validParts = list( + /obj/item/part/gun/frame/m1911, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism/pistol, + /obj/item/part/gun/modular/barrel/pistolm1911 + ) - +/datum/lathe_recipe/gun/tec9 + result = /obj/item/gun/ballistic/automatic/pistol/tec9 + validParts = list( + /obj/item/part/gun/frame/tec9, + /obj/item/part/gun/modular/grip/plastic, + /obj/item/part/gun/modular/mechanism/pistol, + /obj/item/part/gun/modular/barrel/pistol + ) From 98b5d805e65ce6d89fbac1eab3e2f81c3a5a0da5 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Tue, 30 Jan 2024 20:23:35 -0600 Subject: [PATCH 23/89] yea --- code/modules/guncrafting/frame.dm | 49 +++++++++++++++++------------- code/modules/guncrafting/lathe.dm | 2 ++ code/modules/guncrafting/recipe.dm | 14 +++++---- code/modules/guncrafting/tools.dm | 27 ++++++++++++++++ code/modules/projectiles/gun.dm | 1 + 5 files changed, 66 insertions(+), 27 deletions(-) create mode 100644 code/modules/guncrafting/tools.dm diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 1efce108fea0..e4b95cc1c009 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -2,22 +2,23 @@ name = "gun frame" desc = "a generic gun frame." icon_state = "frame_olivaw" - var/obj/item/gun/result = /obj/item/gun + //var/obj/item/gun/result = /obj/item/gun + var/list/installedParts = list() // Currently installed grip - var/obj/item/part/gun/modular/grip/InstalledGrip + //var/obj/item/part/gun/modular/grip/InstalledGrip // Which grips does the frame accept? - var/list/validGrips = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) + //var/list/validGrips = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) // Currently installed mechanism - var/obj/item/part/gun/modular/grip/InstalledMechanism + //var/obj/item/part/gun/modular/grip/InstalledMechanism // Which mechanism the frame accepts? - var/list/validMechanisms = list(/obj/item/part/gun/modular/mechanism) + //var/list/validMechanisms = list(/obj/item/part/gun/modular/mechanism) // Currently installed barrel - var/obj/item/part/gun/modular/barrel/InstalledBarrel + //var/obj/item/part/gun/modular/barrel/InstalledBarrel // Which barrels does the frame accept? - var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) + //var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) gun_part_type = GUN_PART_FRAME @@ -76,6 +77,7 @@ return TRUE /obj/item/part/gun/frame/attackby(obj/item/I, mob/living/user, params) + /* if(istype(I, /obj/item/part/gun/modular/grip)) if(InstalledGrip) to_chat(user, span_warning("[src] already has a grip attached!")) @@ -96,6 +98,7 @@ return else handle_barrel(I, user) + */ if(I.tool_behaviour == TOOL_SCREWDRIVER) var/list/possibles = contents.Copy() @@ -147,15 +150,14 @@ */ /obj/item/part/gun/frame/proc/handle_part(obj/item/I, mob/living/user) - /obj/item/part/gun/frame/proc/handle_part(obj/item/I, mob/living/user) - if(I.type in /datum/lathe_recipe/gun/m1911/validParts) - if(insert_item(I, user)) - to_chat(user, span_notice("You have attached the part to \the [src].")) - return + //if(I.type in /datum/lathe_recipe/gun/m1911.validParts) + if(insert_item(I, user)) + to_chat(user, span_notice("You have attached the part to \the [src].")) + return else to_chat(user, span_warning("This part does not fit!")) return - +/* /obj/item/part/gun/frame/attack_self(mob/user) . = ..() /* @@ -175,7 +177,9 @@ newGun.frame = src src.forceMove(newGun) return +*/ +/* /obj/item/part/gun/frame/examine(user, distance) . = ..() if(.) @@ -191,20 +195,23 @@ . += "<span class='notice'>\the [src] has \a [InstalledBarrel] installed.</span>" else . += "<span class='notice'>\the [src] does not have a barrel installed.</span>" +*/ /obj/item/part/gun/frame/winchester - name = "Winchester Gun Frame + name = "Winchester Gun Frame" icon_state = "frame_shotgun" - result = /obj/item/gun/ballistic/shotgun/winchester - validGrips = list(/obj/item/part/gun/modular/grip/wood) - validMechanisms = list(/obj/item/part/gun/modular/mechanism/shotgun) - validBarrels = list(/obj/item/part/gun/modular/barrel/shotgun) + //result = /obj/item/gun/ballistic/shotgun/winchester + //validGrips = list(/obj/item/part/gun/modular/grip/wood) + //validMechanisms = list(/obj/item/part/gun/modular/mechanism/shotgun) + //validBarrels = list(/obj/item/part/gun/modular/barrel/shotgun) /obj/item/part/gun/frame/winchester/mk1 - result = /obj/item/gun/ballistic/shotgun/winchester/mk1 + //result = /obj/item/gun/ballistic/shotgun/winchester/mk1 /obj/item/part/gun/frame/m1911 - result = /obj/item/gun/ballistic/automatic/pistol/m1911 + //result = /obj/item/gun/ballistic/automatic/pistol/m1911 /obj/item/part/gun/frame/commander - result = /obj/item/gun/ballistic/automatic/pistol/commander + //result = /obj/item/gun/ballistic/automatic/pistol/commander + +/obj/item/part/gun/frame/boltaction diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 8b3810ab6120..f3a6445931a1 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -121,6 +121,7 @@ /////////////// /obj/structure/lathe/proc/fabricate_part(mob/living/carbon/human/user) + /* if(istype (work_piece, /obj/item/gun)) var/obj/item/gun/gun_work_piece = work_piece var/list/choose_options = list() @@ -145,6 +146,7 @@ if("Frame") part_to_build = new gun_work_piece.frame.type(src, TRUE) part_to_build.forceMove(drop_location()) + */ mode = FALSE /////////// diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index 616a19f982b4..b0cc8f5afd0d 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -28,15 +28,17 @@ validParts = list( /obj/item/part/gun/frame/m1911, /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/pistol, - /obj/item/part/gun/modular/barrel/pistolm1911 + /obj/item/part/gun/modular/mechanism, + /obj/item/part/gun/modular/barrel ) /datum/lathe_recipe/gun/tec9 result = /obj/item/gun/ballistic/automatic/pistol/tec9 validParts = list( - /obj/item/part/gun/frame/tec9, - /obj/item/part/gun/modular/grip/plastic, - /obj/item/part/gun/modular/mechanism/pistol, - /obj/item/part/gun/modular/barrel/pistol + /obj/item/part/gun/frame, + /obj/item/part/gun/modular/grip, + /obj/item/part/gun/modular/mechanism, + /obj/item/part/gun/modular/barrel ) +/datum/lathe_recipe/gun/boltaction + result = /obj/item/gun/ballistic/rifle/boltaction diff --git a/code/modules/guncrafting/tools.dm b/code/modules/guncrafting/tools.dm new file mode 100644 index 000000000000..f17ddb9f0cea --- /dev/null +++ b/code/modules/guncrafting/tools.dm @@ -0,0 +1,27 @@ +/obj/item/tool/hammer + name = "hammer" + +/obj/item/tool/file + name = "file" + +/obj/item/tool/saw + name = "saw" + +/obj/item/storage/box/parts + name = "gunmakers box" + desc = "A set of tools and parts to assemble your first weapon" + +/obj/item/storage/box/parts/PopulateContents() + new /obj/item/tool/hammer(src) + new /obj/item/tool/file(src) + new /obj/item/tool/saw(src) + /* + new /obj/item/part/gun/frame/winchester(src) + new /obj/item/part/gun/modular/grip/wood(src) + new /obj/item/part/gun/modular/mechanism/shotgun(src) + new /obj/item/part/gun/modular/barrel/shotgun(src) + new /obj/item/part/gun/frame/winchester(src) + new /obj/item/part/gun/modular/grip/wood(src) + new /obj/item/part/gun/modular/mechanism/shotgun(src) + new /obj/item/part/gun/modular/barrel/shotgun(src) + */ diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 56af3894f2f6..2a053adb3098 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -3,6 +3,7 @@ #define FIRING_PIN_REMOVAL_DELAY 50 #define MANUFACTURER_NONE null +#define MANUFACTURER_KYBER "the simple, handmade marking of an unknown gunsmith" #define MANUFACTURER_SHARPLITE "the Sharplite Defense logo" #define MANUFACTURER_SHARPLITE_NEW "the Nanotrasen-Sharplite logo" #define MANUFACTURER_HUNTERSPRIDE "the Hunter's Pride Arms and Ammunition logo" From 8c1b7c500ecb6b1dfdfe95119591e2cc7621c309 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 09:41:22 -0600 Subject: [PATCH 24/89] Refactor gun crafting module and add new tools --- code/modules/guncrafting/frame.dm | 9 ++++++--- code/modules/guncrafting/tools.dm | 8 ++++++-- shiptest.dme | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index e4b95cc1c009..60b877f8cf89 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -150,16 +150,19 @@ */ /obj/item/part/gun/frame/proc/handle_part(obj/item/I, mob/living/user) - //if(I.type in /datum/lathe_recipe/gun/m1911.validParts) if(insert_item(I, user)) to_chat(user, span_notice("You have attached the part to \the [src].")) return else to_chat(user, span_warning("This part does not fit!")) return -/* + /obj/item/part/gun/frame/attack_self(mob/user) . = ..() + for(var/datum/lathe_recipe/gun/recipe in /datum/lathe_recipe/gun) + if(src.type in recipe.validParts) + if(I.type in recipe.validParts) + handle_part(I, user) /* if(!InstalledGrip) to_chat(user, span_warning("\the [src] does not have a grip!")) @@ -171,7 +174,7 @@ to_chat(user, span_warning("\the [src] does not have a barrel!")) return */ - for each(I in ) +/* var/turf/T = get_turf(src) var/obj/item/gun/newGun = new result(T, 0) newGun.frame = src diff --git a/code/modules/guncrafting/tools.dm b/code/modules/guncrafting/tools.dm index f17ddb9f0cea..1a6805ce5234 100644 --- a/code/modules/guncrafting/tools.dm +++ b/code/modules/guncrafting/tools.dm @@ -1,11 +1,17 @@ /obj/item/tool/hammer name = "hammer" + icon = 'icons/obj/tools.dmi' + icon_state = "oldcrowbar" /obj/item/tool/file name = "file" + icon = 'icons/obj/tools.dmi' + icon_state = "oldwrench" /obj/item/tool/saw name = "saw" + icon = 'icons/obj/tools.dmi' + icon_state = "oldcutters_map" /obj/item/storage/box/parts name = "gunmakers box" @@ -15,7 +21,6 @@ new /obj/item/tool/hammer(src) new /obj/item/tool/file(src) new /obj/item/tool/saw(src) - /* new /obj/item/part/gun/frame/winchester(src) new /obj/item/part/gun/modular/grip/wood(src) new /obj/item/part/gun/modular/mechanism/shotgun(src) @@ -24,4 +29,3 @@ new /obj/item/part/gun/modular/grip/wood(src) new /obj/item/part/gun/modular/mechanism/shotgun(src) new /obj/item/part/gun/modular/barrel/shotgun(src) - */ diff --git a/shiptest.dme b/shiptest.dme index 6c743328d115..73cd4f734c28 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2166,6 +2166,7 @@ #include "code\modules\guncrafting\lathe.dm" #include "code\modules\guncrafting\part.dm" #include "code\modules\guncrafting\recipe.dm" +#include "code\modules\guncrafting\tools.dm" #include "code\modules\holiday\easter.dm" #include "code\modules\holiday\foreign_calendar.dm" #include "code\modules\holiday\holidays.dm" From 2959730798568b46f17a76f22df51e8936ffb867 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 10:13:51 -0600 Subject: [PATCH 25/89] poorly optimized holy dang --- code/modules/guncrafting/frame.dm | 32 ++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 60b877f8cf89..93161ebea3a9 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -149,17 +149,32 @@ return */ -/obj/item/part/gun/frame/proc/handle_part(obj/item/I, mob/living/user) - if(insert_item(I, user)) - to_chat(user, span_notice("You have attached the part to \the [src].")) - return +/obj/item/part/gun/frame/proc/handle_part(obj/item/part/gun/I, mob/living/user) + if(I.gun_part_type && !(I.gun_part_type & get_part_types())) + if(insert_item(I, user)) + to_chat(user, span_notice("You have attached the part to \the [src].")) + return else to_chat(user, span_warning("This part does not fit!")) return +//Finds all recipes that match the current parts +/obj/item/part/gun/frame/proc/get_current_recipes() + var/list/gun_recipes = subtypesof(/datum/lathe_recipe/gun) + var/list/filtered_recipes = list() + + for(var/datum/lathe_recipe/gun/recipe in gun_recipes) + if(istype(src.type)) + filtered_recipes += recipe_type + for(var/obj/item/part/gun/installed_part in installedParts) + if(istype(part, installed_part)) + filtered_recipes += recipe_type + + return filtered_recipes + /obj/item/part/gun/frame/attack_self(mob/user) . = ..() - for(var/datum/lathe_recipe/gun/recipe in /datum/lathe_recipe/gun) + for(var/datum/lathe_recipe/gun/recipe in get_current_recipes()) if(src.type in recipe.validParts) if(I.type in recipe.validParts) handle_part(I, user) @@ -182,6 +197,13 @@ return */ +/obj/item/part/gun/frame/proc/get_part_types() + var/part_types = NONE + part_types |= gun_part_type + for(var/obj/item/part/gun/part in installedParts) + part_types |= part.gin_part_type + return part_types + /* /obj/item/part/gun/frame/examine(user, distance) . = ..() From 93f18130d2b77a41d82c7c7be6c4f095149c7221 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 10:18:48 -0600 Subject: [PATCH 26/89] yea --- code/modules/guncrafting/frame.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 93161ebea3a9..43f31b8e47f3 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -165,14 +165,14 @@ for(var/datum/lathe_recipe/gun/recipe in gun_recipes) if(istype(src.type)) - filtered_recipes += recipe_type + filtered_recipes += recipe for(var/obj/item/part/gun/installed_part in installedParts) if(istype(part, installed_part)) - filtered_recipes += recipe_type + filtered_recipes += recipe return filtered_recipes -/obj/item/part/gun/frame/attack_self(mob/user) +/obj/item/part/gun/frame/attack_self(obj/item/I, mob/user) . = ..() for(var/datum/lathe_recipe/gun/recipe in get_current_recipes()) if(src.type in recipe.validParts) @@ -201,7 +201,7 @@ var/part_types = NONE part_types |= gun_part_type for(var/obj/item/part/gun/part in installedParts) - part_types |= part.gin_part_type + part_types |= part.gun_part_type return part_types /* From 2bf0717f5355d5de2edaf33122e0b732764a8722 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 10:24:38 -0600 Subject: [PATCH 27/89] evil tbh --- code/modules/guncrafting/frame.dm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 43f31b8e47f3..1441982c4c42 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -164,10 +164,10 @@ var/list/filtered_recipes = list() for(var/datum/lathe_recipe/gun/recipe in gun_recipes) - if(istype(src.type)) + if(istype(recipe, src.type)) filtered_recipes += recipe for(var/obj/item/part/gun/installed_part in installedParts) - if(istype(part, installed_part)) + if(istype(recipe, installed_part.type)) filtered_recipes += recipe return filtered_recipes @@ -175,9 +175,8 @@ /obj/item/part/gun/frame/attack_self(obj/item/I, mob/user) . = ..() for(var/datum/lathe_recipe/gun/recipe in get_current_recipes()) - if(src.type in recipe.validParts) - if(I.type in recipe.validParts) - handle_part(I, user) + if(I.type in recipe.validParts) + handle_part(I, user) /* if(!InstalledGrip) to_chat(user, span_warning("\the [src] does not have a grip!")) From f08b4bb18ea1487e11d70ef712021043be84e289 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 10:37:13 -0600 Subject: [PATCH 28/89] ye --- code/modules/guncrafting/frame.dm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 1441982c4c42..be194726100f 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -203,10 +203,16 @@ part_types |= part.gun_part_type return part_types -/* /obj/item/part/gun/frame/examine(user, distance) . = ..() if(.) + for (var/obj/item/part/gun/part in installedParts) + . += "<span class='notice'>\the [src] has \a [part] [icon2html(part, user)] installed.</span>" + for(var/datum/lathe_recipe/gun/recipe in get_current_recipes()) + for(var/obj/item/part in recipe.validParts) + . += "<span class='notice'>\the [src] could hold \a [part] [icon2html(part, user)].</span>" + +/* if(InstalledGrip) . += "<span class='notice'>\the [src] has \a [InstalledGrip] installed.</span>" else @@ -224,18 +230,11 @@ /obj/item/part/gun/frame/winchester name = "Winchester Gun Frame" icon_state = "frame_shotgun" - //result = /obj/item/gun/ballistic/shotgun/winchester - //validGrips = list(/obj/item/part/gun/modular/grip/wood) - //validMechanisms = list(/obj/item/part/gun/modular/mechanism/shotgun) - //validBarrels = list(/obj/item/part/gun/modular/barrel/shotgun) /obj/item/part/gun/frame/winchester/mk1 - //result = /obj/item/gun/ballistic/shotgun/winchester/mk1 /obj/item/part/gun/frame/m1911 - //result = /obj/item/gun/ballistic/automatic/pistol/m1911 /obj/item/part/gun/frame/commander - //result = /obj/item/gun/ballistic/automatic/pistol/commander /obj/item/part/gun/frame/boltaction From 4420698086e1b5e013b65447b63481d6b843ca96 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 10:47:17 -0600 Subject: [PATCH 29/89] kinda working i think? --- code/modules/guncrafting/frame.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index be194726100f..7e7271963ad8 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -22,9 +22,9 @@ gun_part_type = GUN_PART_FRAME +/* /obj/item/part/gun/frame/Initialize(mapload, dont_spawn_with_parts) ..() - /* var/spawn_with_preinstalled_parts = TRUE if(dont_spawn_with_parts) spawn_with_preinstalled_parts = FALSE From f4c2581c113ea802dfa5a3a6a9090479d68cfe4e Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 11:23:38 -0600 Subject: [PATCH 30/89] unit test? --- code/modules/guncrafting/frame.dm | 21 +++++++++++---------- code/modules/unit_tests/_unit_tests.dm | 1 + code/modules/unit_tests/gun_crafting.dm | 12 ++++++++++++ 3 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 code/modules/unit_tests/gun_crafting.dm diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 7e7271963ad8..cbf87de8f778 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -150,13 +150,15 @@ */ /obj/item/part/gun/frame/proc/handle_part(obj/item/part/gun/I, mob/living/user) - if(I.gun_part_type && !(I.gun_part_type & get_part_types())) - if(insert_item(I, user)) - to_chat(user, span_notice("You have attached the part to \the [src].")) - return - else - to_chat(user, span_warning("This part does not fit!")) - return + for(var/datum/lathe_recipe/gun/recipe in get_current_recipes()) + if(I.type in recipe.validParts) + if(I.gun_part_type && !(I.gun_part_type & get_part_types())) + if(insert_item(I, user)) + to_chat(user, span_notice("You have attached the part to \the [src].")) + return + else + to_chat(user, span_warning("This part does not fit!")) + return //Finds all recipes that match the current parts /obj/item/part/gun/frame/proc/get_current_recipes() @@ -174,9 +176,8 @@ /obj/item/part/gun/frame/attack_self(obj/item/I, mob/user) . = ..() - for(var/datum/lathe_recipe/gun/recipe in get_current_recipes()) - if(I.type in recipe.validParts) - handle_part(I, user) + if(istype(I, obj/item/part/gun)) + handle_part(I, user) /* if(!InstalledGrip) to_chat(user, span_warning("\the [src] does not have a grip!")) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index cc12fe0c638f..74ed6919862f 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -72,6 +72,7 @@ #include "create_and_destroy.dm" #include "biome_lists.dm" #include "emoting.dm" +#include "gun_crafting.dm" #include "keybinding_init.dm" #include "machine_disassembly.dm" #include "open_air.dm" diff --git a/code/modules/unit_tests/gun_crafting.dm b/code/modules/unit_tests/gun_crafting.dm new file mode 100644 index 000000000000..0efba76beefa --- /dev/null +++ b/code/modules/unit_tests/gun_crafting.dm @@ -0,0 +1,12 @@ +//Makes sure preinstalled frame parts can be removed an reinstalled +/datum/unit_test/gun_crafting/Run() + var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) + for(var/frame_type in subtypesof(/obj/item/part/gun/frame)) + var/obj/item/part/gun/frame/frame = new frame_type + var/list/frame_parts = frame.installedParts + for(var/obj/item/part/installedPart in frame.installedParts) + frame.eject_item(installedPart, human) + frame.handle_part(installedPart, human) + TEST_ASSERT_EQUAL(frame_parts, frame.installedParts, "Frame parts to match there original contents. I assume frame parts were not reinstalled correctly.") + + From 3a2863c4750e45e048950878e2287f75dcec012d Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 11:27:20 -0600 Subject: [PATCH 31/89] yea --- code/modules/guncrafting/frame.dm | 3 ++- code/modules/guncrafting/lathe.dm | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index cbf87de8f778..8c519cf0ee1a 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -155,6 +155,7 @@ if(I.gun_part_type && !(I.gun_part_type & get_part_types())) if(insert_item(I, user)) to_chat(user, span_notice("You have attached the part to \the [src].")) + installedParts += I return else to_chat(user, span_warning("This part does not fit!")) @@ -176,7 +177,7 @@ /obj/item/part/gun/frame/attack_self(obj/item/I, mob/user) . = ..() - if(istype(I, obj/item/part/gun)) + if(istype(I, /obj/item/part/gun)) handle_part(I, user) /* if(!InstalledGrip) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index f3a6445931a1..7aa5cf5a21cc 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -154,7 +154,8 @@ /////////// /obj/item/stack/gun_part - name = "Gun Part" + name = "Gun Parts" + singular_name = "Gun Part" desc = "This could fabcricate metal parts." icon = 'icons/obj/guncrafting.dmi' icon_state = "work_piece" From d4762b3c18c591a4dd0fc6813c0739e61b9a0dc3 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 11:34:05 -0600 Subject: [PATCH 32/89] hard to tell if parts are reinstalled without any --- code/modules/guncrafting/frame.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 8c519cf0ee1a..63bf53c60ef5 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -232,10 +232,20 @@ /obj/item/part/gun/frame/winchester name = "Winchester Gun Frame" icon_state = "frame_shotgun" + installedParts = list( + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism/shotgun, + /obj/item/part/gun/modular/barrel/shotgun + ) /obj/item/part/gun/frame/winchester/mk1 /obj/item/part/gun/frame/m1911 + installedParts = list( + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism, + /obj/item/part/gun/modular/barrel + ) /obj/item/part/gun/frame/commander From f80aad3364de9711106a74114b5adba45d06a262 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 11:39:36 -0600 Subject: [PATCH 33/89] what if wrong? --- code/modules/guncrafting/frame.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 63bf53c60ef5..147fc1cf28e8 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -244,7 +244,7 @@ installedParts = list( /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel + /obj/item/part/gun/modular/barrel/shotgun ) /obj/item/part/gun/frame/commander From 026d860a263c151eedffd4d4187a370252fa7688 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 11:50:32 -0600 Subject: [PATCH 34/89] TEST --- code/modules/guncrafting/frame.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 147fc1cf28e8..7ae7904e96d6 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -52,6 +52,7 @@ user.visible_message( "[user] removes [I] from [src].", span_notice("You remove [I] from [src].") + installedParts -= I ) return TRUE @@ -244,7 +245,7 @@ installedParts = list( /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel/shotgun + /obj/item/part/gun/modular/barrel ) /obj/item/part/gun/frame/commander From 750378906f02ce88a8bc2f9928831156dd10238f Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 31 Jan 2024 18:52:35 -0600 Subject: [PATCH 35/89] bleh --- code/modules/guncrafting/frame.dm | 45 ++++++++++++++++++++---------- code/modules/guncrafting/recipe.dm | 2 +- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 7ae7904e96d6..883803ed8fec 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -3,7 +3,9 @@ desc = "a generic gun frame." icon_state = "frame_olivaw" //var/obj/item/gun/result = /obj/item/gun + var/list/preinstalledParts = list() var/list/installedParts = list() + var/list/filtered_recipes = list() // Currently installed grip //var/obj/item/part/gun/modular/grip/InstalledGrip @@ -22,9 +24,12 @@ gun_part_type = GUN_PART_FRAME -/* -/obj/item/part/gun/frame/Initialize(mapload, dont_spawn_with_parts) + +/obj/item/part/gun/frame/Initialize() ..() + for (var/partType in preinstalledParts) + installedParts += new partType(src) + /* var/spawn_with_preinstalled_parts = TRUE if(dont_spawn_with_parts) spawn_with_preinstalled_parts = FALSE @@ -52,8 +57,8 @@ user.visible_message( "[user] removes [I] from [src].", span_notice("You remove [I] from [src].") - installedParts -= I ) + installedParts -= I return TRUE /obj/item/part/gun/frame/proc/insert_item(obj/item/I, mob/living/user) @@ -78,6 +83,9 @@ return TRUE /obj/item/part/gun/frame/attackby(obj/item/I, mob/living/user, params) + . = ..() + if(istype(I, /obj/item/part/gun)) + handle_part(I, user) /* if(istype(I, /obj/item/part/gun/modular/grip)) if(InstalledGrip) @@ -151,8 +159,14 @@ */ /obj/item/part/gun/frame/proc/handle_part(obj/item/part/gun/I, mob/living/user) - for(var/datum/lathe_recipe/gun/recipe in get_current_recipes()) + get_current_recipes() + var/list/valid_recipes = filtered_recipes + to_chat(user, span_warning("Recipes [valid_recipes]")) + for(var/datum/lathe_recipe/gun/recipe in valid_recipes) if(I.type in recipe.validParts) + to_chat(user, span_warning("Recipe [recipe]")) + to_chat(user, span_warning("Part [I]")) + to_chat(user, span_warning("Part type [recipe.validParts]")) if(I.gun_part_type && !(I.gun_part_type & get_part_types())) if(insert_item(I, user)) to_chat(user, span_notice("You have attached the part to \the [src].")) @@ -161,11 +175,14 @@ else to_chat(user, span_warning("This part does not fit!")) return + to_chat(user, span_warning("Weird!")) + //Finds all recipes that match the current parts /obj/item/part/gun/frame/proc/get_current_recipes() - var/list/gun_recipes = subtypesof(/datum/lathe_recipe/gun) - var/list/filtered_recipes = list() + var/list/datum/gun_recipes = subtypesof(/datum/lathe_recipe/gun) + filtered_recipes = list() + filtered_recipes += /datum/lathe_recipe/gun/winchester for(var/datum/lathe_recipe/gun/recipe in gun_recipes) if(istype(recipe, src.type)) @@ -176,10 +193,8 @@ return filtered_recipes -/obj/item/part/gun/frame/attack_self(obj/item/I, mob/user) - . = ..() - if(istype(I, /obj/item/part/gun)) - handle_part(I, user) +///obj/item/part/gun/frame/attack_self(obj/item/I, mob/user) + /* if(!InstalledGrip) to_chat(user, span_warning("\the [src] does not have a grip!")) @@ -211,8 +226,10 @@ if(.) for (var/obj/item/part/gun/part in installedParts) . += "<span class='notice'>\the [src] has \a [part] [icon2html(part, user)] installed.</span>" - for(var/datum/lathe_recipe/gun/recipe in get_current_recipes()) - for(var/obj/item/part in recipe.validParts) + get_current_recipes() + var/list/datum/valid_recipes = filtered_recipes + for(var/datum/lathe_recipe/gun/recipe in valid_recipes) + for(var/part in recipe.validParts) . += "<span class='notice'>\the [src] could hold \a [part] [icon2html(part, user)].</span>" /* @@ -233,7 +250,7 @@ /obj/item/part/gun/frame/winchester name = "Winchester Gun Frame" icon_state = "frame_shotgun" - installedParts = list( + preinstalledParts = list( /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/shotgun, /obj/item/part/gun/modular/barrel/shotgun @@ -242,7 +259,7 @@ /obj/item/part/gun/frame/winchester/mk1 /obj/item/part/gun/frame/m1911 - installedParts = list( + preinstalledParts = list( /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism, /obj/item/part/gun/modular/barrel diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index b0cc8f5afd0d..df5bbc9a7a7e 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -14,7 +14,7 @@ /obj/item/part/gun/modular/barrel/shotgun ) -/datum/lathe_recipe/gun/winchester +/datum/lathe_recipe/gun/winchester/mk1 result = /obj/item/gun/ballistic/shotgun/winchester/mk1 validParts = list( /obj/item/part/gun/frame/winchester/mk1, From b05cf87c2c654dcd64451353e24060bbb240e53e Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Thu, 1 Feb 2024 10:08:51 -0600 Subject: [PATCH 36/89] no bitflags --- code/__DEFINES/gun_crafting.dm | 4 ---- code/modules/guncrafting/frame.dm | 2 +- code/modules/guncrafting/recipe.dm | 25 ++++++++++++++++++++++++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/code/__DEFINES/gun_crafting.dm b/code/__DEFINES/gun_crafting.dm index a0257209d6f9..e69de29bb2d1 100644 --- a/code/__DEFINES/gun_crafting.dm +++ b/code/__DEFINES/gun_crafting.dm @@ -1,4 +0,0 @@ -#define GUN_PART_FRAME (1<<0) -#define GUN_PART_BARREL (1<<1) -#define GUN_PART_MECHANISM (1<<2) -#define GUN_PART_GRIP (1<<3) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 7ae7904e96d6..eae05aba15d7 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -20,7 +20,7 @@ // Which barrels does the frame accept? //var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) - gun_part_type = GUN_PART_FRAME + gun_part_type = "gun_frame" /* /obj/item/part/gun/frame/Initialize(mapload, dont_spawn_with_parts) diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index b0cc8f5afd0d..80c675dee61d 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -1,5 +1,28 @@ /datum/lathe_recipe - var/obj/item/result = /obj/item/gun + var/result + var/list/steps = list() + var/time = 30 //time in deciseconds + +/datum/lathe_recipe/part + var/list/reqs = list(/obj/item/stack/sheet/metal = 3) + +/datum/lathe_recipe/part/frame + result = /obj/item/part/gun/frame + +/datum/lathe_recipe/part/frame/winchester + result = /obj/item/part/gun/frame/winchester + +/datum/lathe_recipe/part/grip/wood + result = /obj/item/part/gun/modular/grip/wood + reqs = list(/obj/item/stack/sheet/mineral/wood = 3) + +/datum/lathe_recipe/part/mechanism/shotgun + result = /obj/item/part/gun/modular/mechanism/shotgun + reqs = list(/obj/item/stack/sheet/metal = 2, + /obj/item/stack/gun_part = 1) + +/datum/lathe_recipe/part/barrel/shotgun + result = /obj/item/part/gun/modular/barrel/shotgun /datum/lathe_recipe/gun var/list/validParts = list() From 2aec984766b853324fa030bcea2868e0dff9e6f0 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Thu, 1 Feb 2024 10:16:57 -0600 Subject: [PATCH 37/89] shrug --- code/__DEFINES/gun_crafting.dm | 4 ++++ code/modules/guncrafting/frame.dm | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/gun_crafting.dm b/code/__DEFINES/gun_crafting.dm index e69de29bb2d1..d4db4d300a77 100644 --- a/code/__DEFINES/gun_crafting.dm +++ b/code/__DEFINES/gun_crafting.dm @@ -0,0 +1,4 @@ +#define GUN_PART_FRAME "frame" +#define GUN_PART_BARREL "barrel" +#define GUN_PART_GRIP "grip" +#define GUN_PART_MECHANISM "mechanism" diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index eae05aba15d7..7ae7904e96d6 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -20,7 +20,7 @@ // Which barrels does the frame accept? //var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) - gun_part_type = "gun_frame" + gun_part_type = GUN_PART_FRAME /* /obj/item/part/gun/frame/Initialize(mapload, dont_spawn_with_parts) From 281debc1c48e9d36842262250334ed6a466fe890 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Thu, 1 Feb 2024 20:24:43 -0600 Subject: [PATCH 38/89] yea --- code/__HELPERS/global_lists.dm | 4 +++ code/_globalvars/lists/objects.dm | 1 + code/modules/guncrafting/frame.dm | 50 ++++++++++++++++-------------- code/modules/guncrafting/recipe.dm | 1 + 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 1048aaa5c861..bb3d176d66e7 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -64,6 +64,10 @@ GLOB.surgeries_list += new path() sortList(GLOB.surgeries_list, /proc/cmp_typepaths_asc) + for(var/path in subtypesof(/datum/lathe_recipe/gun)) + GLOB.gun_recipe_list += new path() + sortList(GLOB.gun_recipe_list, /proc/cmp_typepaths_asc) + // Hair Gradients - Initialise all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name for(var/path in subtypesof(/datum/sprite_accessory/hair_gradient)) var/datum/sprite_accessory/hair_gradient/H = new path() diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 82258dfdcd43..6f3e2453440e 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -17,6 +17,7 @@ GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums index GLOBAL_LIST_EMPTY(materials_list) //list of all /datum/material datums indexed by material id. GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id. GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path. +GLOBAL_LIST_EMPTY(gun_recipe_list) GLOBAL_LIST_EMPTY(crafting_recipes) //list of all table craft recipes GLOBAL_LIST_EMPTY(rcd_list) //list of Rapid Construction Devices. GLOBAL_LIST_EMPTY(apcs_list) //list of all Area Power Controller machines, separate from machines for powernet speeeeeeed. diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 883803ed8fec..8df623a1181e 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -29,6 +29,7 @@ ..() for (var/partType in preinstalledParts) installedParts += new partType(src) + get_current_recipes() /* var/spawn_with_preinstalled_parts = TRUE if(dont_spawn_with_parts) @@ -159,40 +160,36 @@ */ /obj/item/part/gun/frame/proc/handle_part(obj/item/part/gun/I, mob/living/user) - get_current_recipes() - var/list/valid_recipes = filtered_recipes - to_chat(user, span_warning("Recipes [valid_recipes]")) - for(var/datum/lathe_recipe/gun/recipe in valid_recipes) + for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) if(I.type in recipe.validParts) - to_chat(user, span_warning("Recipe [recipe]")) - to_chat(user, span_warning("Part [I]")) - to_chat(user, span_warning("Part type [recipe.validParts]")) if(I.gun_part_type && !(I.gun_part_type & get_part_types())) if(insert_item(I, user)) to_chat(user, span_notice("You have attached the part to \the [src].")) installedParts += I + get_current_recipes() return else to_chat(user, span_warning("This part does not fit!")) return - to_chat(user, span_warning("Weird!")) //Finds all recipes that match the current parts /obj/item/part/gun/frame/proc/get_current_recipes() - var/list/datum/gun_recipes = subtypesof(/datum/lathe_recipe/gun) filtered_recipes = list() - filtered_recipes += /datum/lathe_recipe/gun/winchester - - for(var/datum/lathe_recipe/gun/recipe in gun_recipes) - if(istype(recipe, src.type)) + for(var/datum/lathe_recipe/gun/recipe in GLOB.gun_recipe_list) + if(is_recipe_valid(recipe)) filtered_recipes += recipe - for(var/obj/item/part/gun/installed_part in installedParts) - if(istype(recipe, installed_part.type)) - filtered_recipes += recipe - return filtered_recipes + +//Should return false if +/obj/item/part/gun/frame/proc/is_recipe_valid(datum/lathe_recipe/gun/recipe) + if(!(src.type in recipe.validParts)) + return FALSE + for(var/obj/item/part/gun/installed_part in installedParts) + if(!(installed_part.type in recipe.validParts)) + return FALSE + return TRUE ///obj/item/part/gun/frame/attack_self(obj/item/I, mob/user) /* @@ -214,6 +211,8 @@ return */ +/obj/item/part/gun/frame/proc/can_be_installed() + /obj/item/part/gun/frame/proc/get_part_types() var/part_types = NONE part_types |= gun_part_type @@ -225,12 +224,11 @@ . = ..() if(.) for (var/obj/item/part/gun/part in installedParts) - . += "<span class='notice'>\the [src] has \a [part] [icon2html(part, user)] installed.</span>" - get_current_recipes() - var/list/datum/valid_recipes = filtered_recipes - for(var/datum/lathe_recipe/gun/recipe in valid_recipes) - for(var/part in recipe.validParts) - . += "<span class='notice'>\the [src] could hold \a [part] [icon2html(part, user)].</span>" + . += "<span class='notice'>[src] has \a [part] [icon2html(part, user)] installed.</span>" + for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) + for(var/obj/part as anything in recipe.validParts) + . += "<span class='notice'>[src] could hold \a [initial(part.name)].</span>" + . += "<span class='notice'>[src] could hold \a [get_part_types()].</span>" /* if(InstalledGrip) @@ -248,7 +246,7 @@ */ /obj/item/part/gun/frame/winchester - name = "Winchester Gun Frame" + name = "winchester gun frame" icon_state = "frame_shotgun" preinstalledParts = list( /obj/item/part/gun/modular/grip/wood, @@ -257,8 +255,10 @@ ) /obj/item/part/gun/frame/winchester/mk1 + name = "winchester mk1 gun frame" /obj/item/part/gun/frame/m1911 + name = "m1911 gun frame" preinstalledParts = list( /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism, @@ -266,5 +266,7 @@ ) /obj/item/part/gun/frame/commander + name = "commander gun frame" /obj/item/part/gun/frame/boltaction + name = "bolt action gun frame" diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index 6ef1c5c86f68..25840add3471 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -63,5 +63,6 @@ /obj/item/part/gun/modular/mechanism, /obj/item/part/gun/modular/barrel ) + /datum/lathe_recipe/gun/boltaction result = /obj/item/gun/ballistic/rifle/boltaction From 0eee1212f68f2f0a91b06d4357d3031f055ac33e Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Fri, 2 Feb 2024 17:00:01 -0600 Subject: [PATCH 39/89] yea --- code/modules/guncrafting/frame.dm | 17 +++--- .../guncrafting}/guncrafting.dm | 10 +++- code/modules/guncrafting/lathe.dm | 12 ----- code/modules/guncrafting/recipe.dm | 54 +++++++++++++++++++ code/modules/research/designs.dm | 5 +- 5 files changed, 74 insertions(+), 24 deletions(-) rename code/{datums/components/crafting => modules/guncrafting}/guncrafting.dm (77%) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 8df623a1181e..e5cd6f5fe7cc 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -26,7 +26,7 @@ /obj/item/part/gun/frame/Initialize() - ..() + . = ..() for (var/partType in preinstalledParts) installedParts += new partType(src) get_current_recipes() @@ -162,15 +162,18 @@ /obj/item/part/gun/frame/proc/handle_part(obj/item/part/gun/I, mob/living/user) for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) if(I.type in recipe.validParts) - if(I.gun_part_type && !(I.gun_part_type & get_part_types())) - if(insert_item(I, user)) - to_chat(user, span_notice("You have attached the part to \the [src].")) - installedParts += I - get_current_recipes() - return + //if(I.gun_part_type && !(I.gun_part_type & get_part_types())) + if(insert_item(I, user)) + to_chat(user, span_notice("You have attached the part to \the [src].")) + installedParts += I + get_current_recipes() + return else to_chat(user, span_warning("This part does not fit!")) return + else + to_chat(user, span_warning("This part cannot be installed on this [src]!")) + return //Finds all recipes that match the current parts diff --git a/code/datums/components/crafting/guncrafting.dm b/code/modules/guncrafting/guncrafting.dm similarity index 77% rename from code/datums/components/crafting/guncrafting.dm rename to code/modules/guncrafting/guncrafting.dm index c26b81bc41eb..db3ea57a8cc2 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/modules/guncrafting/guncrafting.dm @@ -1,5 +1,3 @@ -//Gun crafting parts til they can be moved elsewhere - // PARTS // /obj/item/weaponcrafting/receiver @@ -20,3 +18,11 @@ desc = "A long piece of Silk that looks like a cable coil." icon = 'icons/obj/improvised.dmi' icon_state = "silkstring" + +/obj/item/stack/gun_part + name = "Gun Parts" + singular_name = "Gun Part" + desc = "This could fabcricate metal parts." + icon = 'icons/obj/guncrafting.dmi' + icon_state = "work_piece" + max_amount = 10 diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 7aa5cf5a21cc..34819f7541b6 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -148,15 +148,3 @@ part_to_build.forceMove(drop_location()) */ mode = FALSE - -/////////// -// ITEMS // -/////////// - -/obj/item/stack/gun_part - name = "Gun Parts" - singular_name = "Gun Part" - desc = "This could fabcricate metal parts." - icon = 'icons/obj/guncrafting.dmi' - icon_state = "work_piece" - max_amount = 10 diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index 25840add3471..5542082d5732 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -66,3 +66,57 @@ /datum/lathe_recipe/gun/boltaction result = /obj/item/gun/ballistic/rifle/boltaction + +/datum/lathe_recipe/gun/doublebarrel + result = /obj/item/gun/ballistic/shotgun/doublebarrel + validParts = list( + /obj/item/part/gun/frame/doublebarrel, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism/shotgun, + /obj/item/part/gun/modular/barrel/shotgun + ) + +/datum/lathe_recipe/gun/derringer + result = /obj/item/gun/ballistic/derringer + validParts = list( + /obj/item/part/gun/frame/derringer, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism, + /obj/item/part/gun/modular/barrel + ) + +/datum/lathe_recipe/gun/srmrevolver + result = /obj/item/gun/ballistic/revolver/srm + validParts = list( + /obj/item/part/gun/frame/srmrevolver, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism, + /obj/item/part/gun/modular/barrel + ) + +/datum/lathe_recipe/gun/pepperbox + result = /obj/item/gun/ballistic/revolver/pepperbox + validParts = list( + /obj/item/part/gun/frame/pepperbox, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism, + /obj/item/part/gun/modular/barrel + ) + +/datum/lathe_recipe/gun/nagantrevolver + result = /obj/item/gun/ballistic/revolver/nagant + validParts = list( + /obj/item/part/gun/frame/nagantrevolver, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism, + /obj/item/part/gun/modular/barrel + ) + +/datum/lathe_recipe/gun/nagantrifle + result = /obj/item/gun/ballistic/rifle/boltaction/nagantrifle + validParts = list( + /obj/item/part/gun/frame/nagantrifle, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism, + /obj/item/part/gun/modular/barrel + ) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index ec4038ec8f2b..ab96a25edcf0 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -145,16 +145,15 @@ other types of metals and chemistry for reagents). . = ..() blueprints[1] = new /datum/design/n762() -/obj/item/disk/design_disk/adv/disposable_gun +/obj/item/disk/design_disk/disposable_gun name = "design disk - disposable gun" desc = "A design disk containing designs for a cheap and disposable gun." illustration = "gun" max_blueprints = 2 -/obj/item/disk/design_disk/adv/disposable_gun/Initialize() +/obj/item/disk/design_disk/disposable_gun/Initialize() . = ..() blueprints[1] = new /datum/design/disposable_gun() - blueprints[2] = new /datum/design/pizza_disposable_gun() /obj/item/disk/design_disk/cmm_mechs name = "design disk - CMM mecha modifications" From c52fb7f4b3bce5256e569d8e22c95806c441bbb2 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Sun, 4 Feb 2024 16:12:37 -0600 Subject: [PATCH 40/89] wooo so much stuff.. --- code/modules/guncrafting/frame.dm | 190 ++++++------------ code/modules/guncrafting/guncrafting.dm | 23 +++ code/modules/guncrafting/part.dm | 14 +- code/modules/guncrafting/recipe.dm | 52 ++--- code/modules/guncrafting/tools.dm | 17 -- .../boxes_magazines/_box_magazine.dm | 4 +- code/modules/projectiles/guns/ballistic.dm | 16 +- .../projectiles/guns/ballistic/shotgun.dm | 1 - shiptest.dme | 2 +- 9 files changed, 144 insertions(+), 175 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index e5cd6f5fe7cc..94a113f72f94 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -2,26 +2,10 @@ name = "gun frame" desc = "a generic gun frame." icon_state = "frame_olivaw" - //var/obj/item/gun/result = /obj/item/gun var/list/preinstalledParts = list() var/list/installedParts = list() var/list/filtered_recipes = list() - // Currently installed grip - //var/obj/item/part/gun/modular/grip/InstalledGrip - // Which grips does the frame accept? - //var/list/validGrips = list(/obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/grip/black) - - // Currently installed mechanism - //var/obj/item/part/gun/modular/grip/InstalledMechanism - // Which mechanism the frame accepts? - //var/list/validMechanisms = list(/obj/item/part/gun/modular/mechanism) - - // Currently installed barrel - //var/obj/item/part/gun/modular/barrel/InstalledBarrel - // Which barrels does the frame accept? - //var/list/validBarrels = list(/obj/item/part/gun/modular/barrel) - gun_part_type = GUN_PART_FRAME @@ -87,29 +71,6 @@ . = ..() if(istype(I, /obj/item/part/gun)) handle_part(I, user) - /* - if(istype(I, /obj/item/part/gun/modular/grip)) - if(InstalledGrip) - to_chat(user, span_warning("[src] already has a grip attached!")) - return - else - handle_grip(I, user) - - if(istype(I, /obj/item/part/gun/modular/mechanism)) - if(InstalledMechanism) - to_chat(user, span_warning("[src] already has a mechanism attached!")) - return - else - handle_mechanism(I, user) - - if(istype(I, /obj/item/part/gun/modular/barrel)) - if(InstalledBarrel) - to_chat(user, span_warning("[src] already has a barrel attached!")) - return - else - handle_barrel(I, user) - */ - if(I.tool_behaviour == TOOL_SCREWDRIVER) var/list/possibles = contents.Copy() var/obj/item/part/gun/toremove = input("Which part would you like to remove?","Removing parts") in possibles @@ -117,63 +78,23 @@ return if(I.use_tool(src, user, 40, volume=50)) eject_item(toremove, user) - /* - if(istype(toremove, /obj/item/part/gun/modular/grip)) - InstalledGrip = null - else if(istype(toremove, /obj/item/part/gun/modular/barrel)) - InstalledBarrel = FALSE - else if(istype(toremove, /obj/item/part/gun/modular/mechanism)) - InstalledMechanism = FALSE - */ - return ..() -/* -/obj/item/part/gun/frame/proc/handle_grip(obj/item/I, mob/living/user) - if(I.type in validGrips) - if(insert_item(I, user)) - InstalledGrip = I - to_chat(user, span_notice("You have attached the grip to \the [src].")) - return - else - to_chat(user, span_warning("This grip does not fit!")) - return - -/obj/item/part/gun/frame/proc/handle_mechanism(obj/item/I, mob/living/user) - if(I.type in validMechanisms) - if(insert_item(I, user)) - InstalledMechanism = I - to_chat(user, span_notice("You have attached the mechanism to \the [src].")) - return - else - to_chat(user, span_warning("This mechanism does not fit!")) - return - -/obj/item/part/gun/frame/proc/handle_barrel(obj/item/I, mob/living/user) - if(I.type in validBarrels) - if(insert_item(I, user)) - InstalledBarrel = I - to_chat(user, span_notice("You have attached the barrel to \the [src].")) - return - else - to_chat(user, span_warning("This barrel does not fit!")) - return -*/ /obj/item/part/gun/frame/proc/handle_part(obj/item/part/gun/I, mob/living/user) for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) if(I.type in recipe.validParts) - //if(I.gun_part_type && !(I.gun_part_type & get_part_types())) - if(insert_item(I, user)) - to_chat(user, span_notice("You have attached the part to \the [src].")) - installedParts += I - get_current_recipes() - return + if(I.gun_part_type && !(I.gun_part_type in get_part_types())) + if(insert_item(I, user)) + to_chat(user, span_notice("You have attached the part to \the [src].")) + installedParts += I + get_current_recipes() + return + else + to_chat(user, span_warning("This part does not fit!")) else - to_chat(user, span_warning("This part does not fit!")) - return + to_chat(user, span_warning("This type of part is already installed!")) else to_chat(user, span_warning("This part cannot be installed on this [src]!")) - return //Finds all recipes that match the current parts @@ -193,31 +114,40 @@ if(!(installed_part.type in recipe.validParts)) return FALSE return TRUE -///obj/item/part/gun/frame/attack_self(obj/item/I, mob/user) - /* - if(!InstalledGrip) - to_chat(user, span_warning("\the [src] does not have a grip!")) - return - if(!InstalledMechanism) - to_chat(user, span_warning("\the [src] does not have a mechanism!")) +/obj/item/part/gun/frame/attack_self(mob/user) + var/list/choose_options = list() + var/list/option_results = list() + for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) + var/obj/recipe_result = recipe.result + var/list/parts_for_craft = list() + for(var/obj/item/part/gun/part as anything in recipe.validParts) + var/part_type = initial(part.gun_part_type) + var/list/installed_types = get_part_types() + if(!(part_type in installed_types)) + parts_for_craft += " \a [initial(part.name)]" + if(length(parts_for_craft) != 0) + to_chat(user, span_warning("Parts needed for a [initial(recipe_result.name)]:")) + for(var/part in parts_for_craft) + to_chat(user, span_warning(part)) + else + to_chat(user, span_notice("You can craft a [initial(recipe_result.name)] with the parts installed.")) + choose_options += list("Craft [initial(recipe_result.name)]" = image(icon = initial(recipe_result.icon), icon_state = initial(recipe_result.icon_state))) + option_results["Craft [initial(recipe_result.name)]"] = recipe_result + if(length(choose_options) == 0) + to_chat(user, span_warning("No recipes can be crafted with the parts installed.")) return - if(!InstalledBarrel) - to_chat(user, span_warning("\the [src] does not have a barrel!")) + var/picked_option = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) + if(!picked_option) return - */ -/* var/turf/T = get_turf(src) - var/obj/item/gun/newGun = new result(T, 0) + var/obj/item/gun/ballistic/pickedGun = option_results[picked_option] + var/obj/item/gun/newGun = new pickedGun(T, TRUE) newGun.frame = src src.forceMove(newGun) - return -*/ - -/obj/item/part/gun/frame/proc/can_be_installed() /obj/item/part/gun/frame/proc/get_part_types() - var/part_types = NONE + var/list/part_types = list() part_types |= gun_part_type for(var/obj/item/part/gun/part in installedParts) part_types |= part.gun_part_type @@ -226,26 +156,28 @@ /obj/item/part/gun/frame/examine(user, distance) . = ..() if(.) - for (var/obj/item/part/gun/part in installedParts) + for(var/obj/item/part/gun/part in installedParts) . += "<span class='notice'>[src] has \a [part] [icon2html(part, user)] installed.</span>" for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) - for(var/obj/part as anything in recipe.validParts) - . += "<span class='notice'>[src] could hold \a [initial(part.name)].</span>" - . += "<span class='notice'>[src] could hold \a [get_part_types()].</span>" - + var/obj/recipe_result = recipe.result + var/list/parts_for_craft = list() + for(var/obj/item/part/gun/part as anything in recipe.validParts) + var/part_type = initial(part.gun_part_type) + var/list/installed_types = get_part_types() + if(!(part_type in installed_types)) + parts_for_craft += " \a [initial(part.name)]" + if(length(parts_for_craft) != 0) + . += "<span class='notice'>Parts needed for a [initial(recipe_result.name)]:</span>" + for(var/part in parts_for_craft) + . += part + else + . += "<span class='notice'>You can craft a [initial(recipe_result.name)] with the parts installed.</span>" /* - if(InstalledGrip) - . += "<span class='notice'>\the [src] has \a [InstalledGrip] installed.</span>" - else - . += "<span class='notice'>\the [src] does not have a grip installed.</span>" - if(InstalledMechanism) - . += "<span class='notice'>\the [src] has \a [InstalledMechanism] installed.</span>" - else - . += "<span class='notice'>\the [src] does not have a mechanism installed.</span>" - if(InstalledBarrel) - . += "<span class='notice'>\the [src] has \a [InstalledBarrel] installed.</span>" - else - . += "<span class='notice'>\the [src] does not have a barrel installed.</span>" + var/part_type_message = "" + for(var/part_type in get_part_types()) + part_type_message += "\a [part_type], " + if(part_type_message) + . += "<span class='notice'>[src] has " + part_type_message + ".</span>" */ /obj/item/part/gun/frame/winchester @@ -253,8 +185,8 @@ icon_state = "frame_shotgun" preinstalledParts = list( /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/shotgun, - /obj/item/part/gun/modular/barrel/shotgun + /obj/item/part/gun/modular/mechanism/rifle, + /obj/item/part/gun/modular/barrel/rifle ) /obj/item/part/gun/frame/winchester/mk1 @@ -264,8 +196,8 @@ name = "m1911 gun frame" preinstalledParts = list( /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel + /obj/item/part/gun/modular/mechanism/pistol, + /obj/item/part/gun/modular/barrel/pistol ) /obj/item/part/gun/frame/commander @@ -273,3 +205,9 @@ /obj/item/part/gun/frame/boltaction name = "bolt action gun frame" + +/obj/item/part/gun/frame/revolver + +/obj/item/part/gun/frame/tec9 + +/obj/item/part/gun/frame/shotgun diff --git a/code/modules/guncrafting/guncrafting.dm b/code/modules/guncrafting/guncrafting.dm index db3ea57a8cc2..423fb6f1a28a 100644 --- a/code/modules/guncrafting/guncrafting.dm +++ b/code/modules/guncrafting/guncrafting.dm @@ -26,3 +26,26 @@ icon = 'icons/obj/guncrafting.dmi' icon_state = "work_piece" max_amount = 10 + +/obj/item/storage/box/parts + name = "gunmakers box" + desc = "A set of tools and parts to assemble your first weapon" + +/obj/item/storage/box/parts/PopulateContents() + new /obj/item/tool/hammer(src) + new /obj/item/tool/file(src) + new /obj/item/tool/saw(src) + new /obj/item/part/gun/frame/winchester(src) + new /obj/item/part/gun/modular/grip/wood(src) + new /obj/item/part/gun/modular/mechanism/shotgun(src) + new /obj/item/part/gun/modular/barrel/shotgun(src) + new /obj/item/part/gun/frame/winchester(src) + new /obj/item/part/gun/modular/grip/wood(src) + new /obj/item/part/gun/modular/mechanism/shotgun(src) + new /obj/item/part/gun/modular/barrel/shotgun(src) + new /obj/item/part/gun/frame(src) + new /obj/item/part/gun/frame/m1911(src) + new /obj/item/part/gun/modular/grip/wood(src) + new /obj/item/part/gun/modular/mechanism(src) + new /obj/item/part/gun/modular/barrel(src) + diff --git a/code/modules/guncrafting/part.dm b/code/modules/guncrafting/part.dm index 3c95f5a6390b..7fc06a6cec20 100644 --- a/code/modules/guncrafting/part.dm +++ b/code/modules/guncrafting/part.dm @@ -35,9 +35,15 @@ /obj/item/part/gun/modular/mechanism/shotgun name = "generic shotgun mechanism" - desc = "All the bits that makes the bullet go bang." icon_state = "mechanism_shotgun" +/obj/item/part/gun/modular/mechanism/rifle + +/obj/item/part/gun/modular/mechanism/revolver + name = "generic revolver mechanism" + +/obj/item/part/gun/modular/mechanism/pistol + /obj/item/part/gun/modular/barrel name = "generic barrel" desc = "A gun barrel, which keeps the bullet going in the right direction." @@ -48,3 +54,9 @@ name = "generic shotgun barrel" desc = "A gun barrel, which keeps the bullet going in the right direction." icon_state = "barrel_30" + +/obj/item/part/gun/modular/barrel/rifle + +/obj/item/part/gun/modular/barrel/revolver + +/obj/item/part/gun/modular/barrel/pistol diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index 5542082d5732..a1e1eb1d810e 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -33,8 +33,8 @@ validParts = list( /obj/item/part/gun/frame/winchester, /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/shotgun, - /obj/item/part/gun/modular/barrel/shotgun + /obj/item/part/gun/modular/mechanism/rifle, + /obj/item/part/gun/modular/barrel/rifle ) /datum/lathe_recipe/gun/winchester/mk1 @@ -42,8 +42,8 @@ validParts = list( /obj/item/part/gun/frame/winchester/mk1, /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/shotgun, - /obj/item/part/gun/modular/barrel/shotgun + /obj/item/part/gun/modular/mechanism/rifle, + /obj/item/part/gun/modular/barrel/rifle ) /datum/lathe_recipe/gun/m1911 @@ -51,26 +51,32 @@ validParts = list( /obj/item/part/gun/frame/m1911, /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel + /obj/item/part/gun/modular/mechanism/pistol, + /obj/item/part/gun/modular/barrel/pistol ) /datum/lathe_recipe/gun/tec9 result = /obj/item/gun/ballistic/automatic/pistol/tec9 validParts = list( - /obj/item/part/gun/frame, - /obj/item/part/gun/modular/grip, - /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel + /obj/item/part/gun/frame/tec9, + /obj/item/part/gun/modular/grip/black, + /obj/item/part/gun/modular/mechanism/pistol, + /obj/item/part/gun/modular/barrel/pistol ) /datum/lathe_recipe/gun/boltaction result = /obj/item/gun/ballistic/rifle/boltaction + validParts = list( + /obj/item/part/gun/frame/boltaction, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism/rifle, + /obj/item/part/gun/modular/barrel/rifle + ) /datum/lathe_recipe/gun/doublebarrel result = /obj/item/gun/ballistic/shotgun/doublebarrel validParts = list( - /obj/item/part/gun/frame/doublebarrel, + /obj/item/part/gun/frame/shotgun, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/shotgun, /obj/item/part/gun/modular/barrel/shotgun @@ -79,43 +85,43 @@ /datum/lathe_recipe/gun/derringer result = /obj/item/gun/ballistic/derringer validParts = list( - /obj/item/part/gun/frame/derringer, + /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel + /obj/item/part/gun/modular/mechanism/revolver, + /obj/item/part/gun/modular/barrel/revolver ) /datum/lathe_recipe/gun/srmrevolver result = /obj/item/gun/ballistic/revolver/srm validParts = list( - /obj/item/part/gun/frame/srmrevolver, + /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel + /obj/item/part/gun/modular/mechanism/revolver, + /obj/item/part/gun/modular/barrel/revolver ) /datum/lathe_recipe/gun/pepperbox result = /obj/item/gun/ballistic/revolver/pepperbox validParts = list( - /obj/item/part/gun/frame/pepperbox, + /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel + /obj/item/part/gun/modular/mechanism/revolver, + /obj/item/part/gun/modular/barrel/revolver ) /datum/lathe_recipe/gun/nagantrevolver result = /obj/item/gun/ballistic/revolver/nagant validParts = list( - /obj/item/part/gun/frame/nagantrevolver, + /obj/item/part/gun/frame, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism, /obj/item/part/gun/modular/barrel ) /datum/lathe_recipe/gun/nagantrifle - result = /obj/item/gun/ballistic/rifle/boltaction/nagantrifle + result = /obj/item/gun/ballistic/rifle/boltaction validParts = list( - /obj/item/part/gun/frame/nagantrifle, + /obj/item/part/gun/frame, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism, /obj/item/part/gun/modular/barrel diff --git a/code/modules/guncrafting/tools.dm b/code/modules/guncrafting/tools.dm index 1a6805ce5234..6403005791ea 100644 --- a/code/modules/guncrafting/tools.dm +++ b/code/modules/guncrafting/tools.dm @@ -12,20 +12,3 @@ name = "saw" icon = 'icons/obj/tools.dmi' icon_state = "oldcutters_map" - -/obj/item/storage/box/parts - name = "gunmakers box" - desc = "A set of tools and parts to assemble your first weapon" - -/obj/item/storage/box/parts/PopulateContents() - new /obj/item/tool/hammer(src) - new /obj/item/tool/file(src) - new /obj/item/tool/saw(src) - new /obj/item/part/gun/frame/winchester(src) - new /obj/item/part/gun/modular/grip/wood(src) - new /obj/item/part/gun/modular/mechanism/shotgun(src) - new /obj/item/part/gun/modular/barrel/shotgun(src) - new /obj/item/part/gun/frame/winchester(src) - new /obj/item/part/gun/modular/grip/wood(src) - new /obj/item/part/gun/modular/mechanism/shotgun(src) - new /obj/item/part/gun/modular/barrel/shotgun(src) diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index c3989e7a4952..424906b8a71e 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -34,8 +34,10 @@ ///cost of the materials in the magazine/box itself var/list/base_cost -/obj/item/ammo_box/Initialize() +/obj/item/ammo_box/Initialize(mapload, should_start_empty) . = ..() + if(should_start_empty) + start_empty = TRUE if (!bullet_cost) for (var/material in custom_materials) var/material_amount = custom_materials[material] diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index a8e2a201c81a..92c7f22b2b43 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -93,14 +93,20 @@ ///If we have the 'snowflake mechanic,' how long should it take to reload? var/tactical_reload_delay = 1 SECONDS -/obj/item/gun/ballistic/Initialize() +/obj/item/gun/ballistic/Initialize(mapload, dontspawnwithmag) . = ..() + var/no_mag_ammo = FALSE + if(dontspawnwithmag) + spawnwithmagazine = FALSE if (!spawnwithmagazine) - bolt_locked = TRUE - update_appearance() - return + if(internal_magazine) + no_mag_ammo = TRUE + else + bolt_locked = TRUE + update_appearance() + return if (!magazine) - magazine = new mag_type(src) + magazine = new mag_type(src, no_mag_ammo) chamber_round(TRUE) update_appearance() diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index de8b923fb967..c4e6ea56f650 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -241,7 +241,6 @@ bolt_type = BOLT_TYPE_NO_BOLT can_be_sawn_off = TRUE pb_knockback = 3 // it's a super shotgun! - manufacturer = MANUFACTURER_HUNTERSPRIDE /obj/item/gun/ballistic/shotgun/doublebarrel/AltClick(mob/user) . = ..() diff --git a/shiptest.dme b/shiptest.dme index 73cd4f734c28..071758700aea 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -533,7 +533,6 @@ #include "code\datums\components\wearertargeting.dm" #include "code\datums\components\wet_floor.dm" #include "code\datums\components\crafting\crafting.dm" -#include "code\datums\components\crafting\guncrafting.dm" #include "code\datums\components\crafting\recipes.dm" #include "code\datums\components\crafting\tailoring.dm" #include "code\datums\components\fantasy\_fantasy.dm" @@ -2163,6 +2162,7 @@ #include "code\modules\games\kotahi.dm" #include "code\modules\games\tarot.dm" #include "code\modules\guncrafting\frame.dm" +#include "code\modules\guncrafting\guncrafting.dm" #include "code\modules\guncrafting\lathe.dm" #include "code\modules\guncrafting\part.dm" #include "code\modules\guncrafting\recipe.dm" From 3c9125def0f18004125b23fde6cdec0128324e53 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Sun, 4 Feb 2024 17:16:03 -0600 Subject: [PATCH 41/89] much clearer --- code/modules/guncrafting/frame.dm | 2 +- code/modules/guncrafting/lathe.dm | 6 +++--- .../boxes_magazines/_box_magazine.dm | 4 ++-- code/modules/projectiles/guns/ballistic.dm | 20 +++++++------------ 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 94a113f72f94..5e50454febaf 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -142,7 +142,7 @@ return var/turf/T = get_turf(src) var/obj/item/gun/ballistic/pickedGun = option_results[picked_option] - var/obj/item/gun/newGun = new pickedGun(T, TRUE) + var/obj/item/gun/newGun = new pickedGun(T, FALSE, FALSE) newGun.frame = src src.forceMove(newGun) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 34819f7541b6..303f24b8d69d 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -102,7 +102,7 @@ /obj/structure/lathe/proc/scrap_item(mob/user) to_chat(user, "The [work_piece.name] is broken down into parts.") playsound(src,'sound/items/welder.ogg',50,TRUE) - if(istype (work_piece, /obj/item/gun)) + if(istype(work_piece, /obj/item/gun)) var/obj/item/gun/gun_work_piece = work_piece var/obj/item/new_part = new /obj/item/part/gun new_part.forceMove(drop_location()) @@ -121,10 +121,10 @@ /////////////// /obj/structure/lathe/proc/fabricate_part(mob/living/carbon/human/user) - /* if(istype (work_piece, /obj/item/gun)) var/obj/item/gun/gun_work_piece = work_piece var/list/choose_options = list() + /* if(gun_work_piece.frame.InstalledGrip) choose_options += list("Grip" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.InstalledGrip.icon_state)) if(gun_work_piece.frame.InstalledMechanism) @@ -146,5 +146,5 @@ if("Frame") part_to_build = new gun_work_piece.frame.type(src, TRUE) part_to_build.forceMove(drop_location()) - */ + */ mode = FALSE diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 424906b8a71e..38fc25c578a2 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -34,9 +34,9 @@ ///cost of the materials in the magazine/box itself var/list/base_cost -/obj/item/ammo_box/Initialize(mapload, should_start_empty) +/obj/item/ammo_box/Initialize(mapload, init_spawn_with_ammo = TRUE) . = ..() - if(should_start_empty) + if(!init_spawn_with_ammo) start_empty = TRUE if (!bullet_cost) for (var/material in custom_materials) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 92c7f22b2b43..da13be546a7f 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -93,21 +93,15 @@ ///If we have the 'snowflake mechanic,' how long should it take to reload? var/tactical_reload_delay = 1 SECONDS -/obj/item/gun/ballistic/Initialize(mapload, dontspawnwithmag) +/obj/item/gun/ballistic/Initialize(mapload, init_spawn_with_mag = TRUE, init_spawn_with_ammo = TRUE) . = ..() - var/no_mag_ammo = FALSE - if(dontspawnwithmag) - spawnwithmagazine = FALSE - if (!spawnwithmagazine) - if(internal_magazine) - no_mag_ammo = TRUE - else - bolt_locked = TRUE - update_appearance() - return + if ((!spawnwithmagazine || !init_spawn_with_mag) && !internal_magazine) + bolt_locked = TRUE + update_appearance() + return if (!magazine) - magazine = new mag_type(src, no_mag_ammo) - chamber_round(TRUE) + magazine = new mag_type(src, init_spawn_with_ammo) + chamber_round() update_appearance() /obj/item/gun/ballistic/update_icon_state() From e81474225b324cdb58936123c72a6aa747ee002b Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Sun, 4 Feb 2024 18:26:33 -0600 Subject: [PATCH 42/89] oops all camelCase --- code/modules/guncrafting/frame.dm | 40 ++++++++++++------------- code/modules/guncrafting/lathe.dm | 33 ++++++++------------ code/modules/guncrafting/recipe.dm | 26 ++++++++-------- code/modules/unit_tests/gun_crafting.dm | 6 ++-- 4 files changed, 48 insertions(+), 57 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 5e50454febaf..cf05f893bfff 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -2,8 +2,8 @@ name = "gun frame" desc = "a generic gun frame." icon_state = "frame_olivaw" - var/list/preinstalledParts = list() - var/list/installedParts = list() + var/list/preinstalled_parts = list() + var/list/installed_parts = list() var/list/filtered_recipes = list() gun_part_type = GUN_PART_FRAME @@ -11,8 +11,8 @@ /obj/item/part/gun/frame/Initialize() . = ..() - for (var/partType in preinstalledParts) - installedParts += new partType(src) + for (var/part_type in preinstalled_parts) + installed_parts += new part_type(src) get_current_recipes() /* var/spawn_with_preinstalled_parts = TRUE @@ -43,7 +43,7 @@ "[user] removes [I] from [src].", span_notice("You remove [I] from [src].") ) - installedParts -= I + installed_parts -= I return TRUE /obj/item/part/gun/frame/proc/insert_item(obj/item/I, mob/living/user) @@ -82,11 +82,11 @@ /obj/item/part/gun/frame/proc/handle_part(obj/item/part/gun/I, mob/living/user) for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) - if(I.type in recipe.validParts) + if(I.type in recipe.valid_parts) if(I.gun_part_type && !(I.gun_part_type in get_part_types())) if(insert_item(I, user)) to_chat(user, span_notice("You have attached the part to \the [src].")) - installedParts += I + installed_parts += I get_current_recipes() return else @@ -108,10 +108,10 @@ //Should return false if /obj/item/part/gun/frame/proc/is_recipe_valid(datum/lathe_recipe/gun/recipe) - if(!(src.type in recipe.validParts)) + if(!(src.type in recipe.valid_parts)) return FALSE - for(var/obj/item/part/gun/installed_part in installedParts) - if(!(installed_part.type in recipe.validParts)) + for(var/obj/item/part/gun/installed_part in installed_parts) + if(!(installed_part.type in recipe.valid_parts)) return FALSE return TRUE @@ -121,7 +121,7 @@ for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) var/obj/recipe_result = recipe.result var/list/parts_for_craft = list() - for(var/obj/item/part/gun/part as anything in recipe.validParts) + for(var/obj/item/part/gun/part as anything in recipe.valid_parts) var/part_type = initial(part.gun_part_type) var/list/installed_types = get_part_types() if(!(part_type in installed_types)) @@ -141,27 +141,27 @@ if(!picked_option) return var/turf/T = get_turf(src) - var/obj/item/gun/ballistic/pickedGun = option_results[picked_option] - var/obj/item/gun/newGun = new pickedGun(T, FALSE, FALSE) - newGun.frame = src - src.forceMove(newGun) + var/obj/item/gun/ballistic/picked_gun = option_results[picked_option] + var/obj/item/gun/new_gun = new picked_gun(T, FALSE, FALSE) + new_gun.frame = src + src.forceMove(new_gun) /obj/item/part/gun/frame/proc/get_part_types() var/list/part_types = list() part_types |= gun_part_type - for(var/obj/item/part/gun/part in installedParts) + for(var/obj/item/part/gun/part in installed_parts) part_types |= part.gun_part_type return part_types /obj/item/part/gun/frame/examine(user, distance) . = ..() if(.) - for(var/obj/item/part/gun/part in installedParts) + for(var/obj/item/part/gun/part in installed_parts) . += "<span class='notice'>[src] has \a [part] [icon2html(part, user)] installed.</span>" for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) var/obj/recipe_result = recipe.result var/list/parts_for_craft = list() - for(var/obj/item/part/gun/part as anything in recipe.validParts) + for(var/obj/item/part/gun/part as anything in recipe.valid_parts) var/part_type = initial(part.gun_part_type) var/list/installed_types = get_part_types() if(!(part_type in installed_types)) @@ -183,7 +183,7 @@ /obj/item/part/gun/frame/winchester name = "winchester gun frame" icon_state = "frame_shotgun" - preinstalledParts = list( + preinstalled_parts = list( /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/rifle, /obj/item/part/gun/modular/barrel/rifle @@ -194,7 +194,7 @@ /obj/item/part/gun/frame/m1911 name = "m1911 gun frame" - preinstalledParts = list( + preinstalled_parts = list( /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/pistol, /obj/item/part/gun/modular/barrel/pistol diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 303f24b8d69d..861b49c9ec0c 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -124,27 +124,18 @@ if(istype (work_piece, /obj/item/gun)) var/obj/item/gun/gun_work_piece = work_piece var/list/choose_options = list() - /* - if(gun_work_piece.frame.InstalledGrip) - choose_options += list("Grip" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.InstalledGrip.icon_state)) - if(gun_work_piece.frame.InstalledMechanism) - choose_options += list("Mechanism" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.InstalledMechanism.icon_state)) - if(gun_work_piece.frame.InstalledBarrel) - choose_options += list("Barrel" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.InstalledBarrel.icon_state)) + var/list/option_results = list() if(gun_work_piece.frame) - choose_options += list("Frame" = image(icon ='icons/obj/crafts.dmi', icon_state = gun_work_piece.frame.icon_state)) + choose_options += list("Craft [gun_work_piece.frame.name]" = image(icon = gun_work_piece.frame.icon , icon_state = gun_work_piece.frame.icon_state)) + option_results["Craft [gun_work_piece.frame.name]"] = gun_work_piece.frame.type + for(var/obj/item/part/gun/gun_part in gun_work_piece.frame.installed_parts) + choose_options += list("Craft [gun_part.name]" = image(icon = gun_part.icon, icon_state = gun_part.icon_state)) + option_results["Craft [gun_part.name]"] = gun_part.type var/choosen_part = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) - if(choosen_part) - var/obj/part_to_build - switch(choosen_part) - if("Grip") - part_to_build = new gun_work_piece.frame.InstalledGrip.type - if("Mechanism") - part_to_build = new gun_work_piece.frame.InstalledMechanism.type - if("Barrel") - part_to_build = new gun_work_piece.frame.InstalledBarrel.type - if("Frame") - part_to_build = new gun_work_piece.frame.type(src, TRUE) - part_to_build.forceMove(drop_location()) - */ + if(!choosen_part) + return + var/turf/T = get_turf(src) + var/obj/item/part/gun/picked_part = option_results[choosen_part] + var/obj/item/part/gun/new_part = new picked_part(T) + new_part.forceMove(drop_location()) mode = FALSE diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index a1e1eb1d810e..1b1dfa7ed5a5 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -25,12 +25,12 @@ result = /obj/item/part/gun/modular/barrel/shotgun /datum/lathe_recipe/gun - var/list/validParts = list() - var/requiredPartTypes = ALL + var/list/valid_parts = list() + var/required_part_types = ALL /datum/lathe_recipe/gun/winchester result = /obj/item/gun/ballistic/shotgun/winchester - validParts = list( + valid_parts = list( /obj/item/part/gun/frame/winchester, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/rifle, @@ -39,7 +39,7 @@ /datum/lathe_recipe/gun/winchester/mk1 result = /obj/item/gun/ballistic/shotgun/winchester/mk1 - validParts = list( + valid_parts = list( /obj/item/part/gun/frame/winchester/mk1, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/rifle, @@ -48,7 +48,7 @@ /datum/lathe_recipe/gun/m1911 result = /obj/item/gun/ballistic/automatic/pistol/m1911 - validParts = list( + valid_parts = list( /obj/item/part/gun/frame/m1911, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/pistol, @@ -57,7 +57,7 @@ /datum/lathe_recipe/gun/tec9 result = /obj/item/gun/ballistic/automatic/pistol/tec9 - validParts = list( + valid_parts = list( /obj/item/part/gun/frame/tec9, /obj/item/part/gun/modular/grip/black, /obj/item/part/gun/modular/mechanism/pistol, @@ -66,7 +66,7 @@ /datum/lathe_recipe/gun/boltaction result = /obj/item/gun/ballistic/rifle/boltaction - validParts = list( + valid_parts = list( /obj/item/part/gun/frame/boltaction, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/rifle, @@ -75,7 +75,7 @@ /datum/lathe_recipe/gun/doublebarrel result = /obj/item/gun/ballistic/shotgun/doublebarrel - validParts = list( + valid_parts = list( /obj/item/part/gun/frame/shotgun, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/shotgun, @@ -84,7 +84,7 @@ /datum/lathe_recipe/gun/derringer result = /obj/item/gun/ballistic/derringer - validParts = list( + valid_parts = list( /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/revolver, @@ -93,7 +93,7 @@ /datum/lathe_recipe/gun/srmrevolver result = /obj/item/gun/ballistic/revolver/srm - validParts = list( + valid_parts = list( /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/revolver, @@ -102,7 +102,7 @@ /datum/lathe_recipe/gun/pepperbox result = /obj/item/gun/ballistic/revolver/pepperbox - validParts = list( + valid_parts = list( /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/revolver, @@ -111,7 +111,7 @@ /datum/lathe_recipe/gun/nagantrevolver result = /obj/item/gun/ballistic/revolver/nagant - validParts = list( + valid_parts = list( /obj/item/part/gun/frame, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism, @@ -120,7 +120,7 @@ /datum/lathe_recipe/gun/nagantrifle result = /obj/item/gun/ballistic/rifle/boltaction - validParts = list( + valid_parts = list( /obj/item/part/gun/frame, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism, diff --git a/code/modules/unit_tests/gun_crafting.dm b/code/modules/unit_tests/gun_crafting.dm index 0efba76beefa..672e3b68b142 100644 --- a/code/modules/unit_tests/gun_crafting.dm +++ b/code/modules/unit_tests/gun_crafting.dm @@ -3,10 +3,10 @@ var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) for(var/frame_type in subtypesof(/obj/item/part/gun/frame)) var/obj/item/part/gun/frame/frame = new frame_type - var/list/frame_parts = frame.installedParts - for(var/obj/item/part/installedPart in frame.installedParts) + var/list/frame_parts = frame.installed_parts + for(var/obj/item/part/installedPart in frame.installed_parts) frame.eject_item(installedPart, human) frame.handle_part(installedPart, human) - TEST_ASSERT_EQUAL(frame_parts, frame.installedParts, "Frame parts to match there original contents. I assume frame parts were not reinstalled correctly.") + TEST_ASSERT_EQUAL(frame_parts, frame.installed_parts, "Frame parts to match there original contents. I assume frame parts were not reinstalled correctly.") From 422ddb19c4eddc7d0501498b7dec6b4515cef134 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 09:54:10 -0600 Subject: [PATCH 43/89] see how this goes --- code/modules/unit_tests/gun_crafting.dm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/code/modules/unit_tests/gun_crafting.dm b/code/modules/unit_tests/gun_crafting.dm index 672e3b68b142..ced2cdbc1bd4 100644 --- a/code/modules/unit_tests/gun_crafting.dm +++ b/code/modules/unit_tests/gun_crafting.dm @@ -1,5 +1,11 @@ //Makes sure preinstalled frame parts can be removed an reinstalled /datum/unit_test/gun_crafting/Run() + var/list/guns = typesof(/obj/item/gun) + for(var/gunType in guns) + var/obj/item/gun/G = new gunType // Create an instance of the gun + if(G.magazine) // If the gun has a magazine + TEST_FAIL("Gun: [G.type], Magazine: [G.magazine.type], Caliber: [G.magazine.caliber]") +/* var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) for(var/frame_type in subtypesof(/obj/item/part/gun/frame)) var/obj/item/part/gun/frame/frame = new frame_type @@ -8,5 +14,4 @@ frame.eject_item(installedPart, human) frame.handle_part(installedPart, human) TEST_ASSERT_EQUAL(frame_parts, frame.installed_parts, "Frame parts to match there original contents. I assume frame parts were not reinstalled correctly.") - - +*/ From 0ffb50f3aaf988a0cab769680ac53a155573979f Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 09:59:49 -0600 Subject: [PATCH 44/89] ballistic --- code/modules/unit_tests/gun_crafting.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/unit_tests/gun_crafting.dm b/code/modules/unit_tests/gun_crafting.dm index ced2cdbc1bd4..eaf315fc3370 100644 --- a/code/modules/unit_tests/gun_crafting.dm +++ b/code/modules/unit_tests/gun_crafting.dm @@ -1,9 +1,9 @@ //Makes sure preinstalled frame parts can be removed an reinstalled /datum/unit_test/gun_crafting/Run() - var/list/guns = typesof(/obj/item/gun) + var/list/guns = typesof(/obj/item/gun/ballistic) for(var/gunType in guns) - var/obj/item/gun/G = new gunType // Create an instance of the gun - if(G.magazine) // If the gun has a magazine + var/obj/item/gun/ballistic/G = new gunType + if(G.magazine) TEST_FAIL("Gun: [G.type], Magazine: [G.magazine.type], Caliber: [G.magazine.caliber]") /* var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) From e54f627cebcd8a44f7081df91b3474d11f4af111 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 10:39:15 -0600 Subject: [PATCH 45/89] cruft guns --- .../lavaland_surface_fuckedupandevilclub.dmm | 4 +- .../game/objects/items/storage/uplink_kits.dm | 3 - code/modules/antagonists/cult/blood_magic.dm | 14 +---- code/modules/antagonists/cult/cult_items.dm | 41 -------------- .../antagonists/wizard/equipment/spellbook.dm | 12 ---- code/modules/cargo/exports/lavaland.dm | 1 - .../living/simple_animal/hostile/stickman.dm | 2 - .../projectiles/ammunition/special/magic.dm | 3 - .../boxes_magazines/internal/rifle.dm | 7 --- .../projectiles/guns/ballistic/pistol.dm | 24 -------- .../projectiles/guns/ballistic/revolver.dm | 24 -------- .../projectiles/guns/ballistic/rifle.dm | 56 ------------------- .../research/designs/weapon_designs.dm | 8 --- .../spells/spell_types/infinite_guns.dm | 27 --------- code/modules/unit_tests/gun_crafting.dm | 4 +- code/modules/uplink/uplink_items.dm | 8 --- shiptest.dme | 1 - 17 files changed, 4 insertions(+), 235 deletions(-) delete mode 100644 code/modules/spells/spell_types/infinite_guns.dm diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_fuckedupandevilclub.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_fuckedupandevilclub.dmm index 98488b286f8d..f8ee293334ce 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_fuckedupandevilclub.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_fuckedupandevilclub.dmm @@ -261,9 +261,7 @@ /area/ruin/unpowered) "ro" = ( /obj/structure/table/wood/poker, -/obj/item/gun/ballistic/revolver/russian/soul{ - name = "Nar'Siean revolver" - }, +/obj/item/gun/ballistic/revolver, /turf/open/floor/plasteel/cult, /area/ruin/unpowered) "ru" = ( diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 6b3658b523df..f767361415f1 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -526,9 +526,6 @@ for(var/i in 1 to 3) new/obj/item/grenade/chem_grenade/ez_clean(src) -/obj/item/storage/box/hug/reverse_revolver/PopulateContents() - new /obj/item/gun/ballistic/revolver/reverse(src) - /obj/item/storage/box/syndie_kit/mimery/PopulateContents() new /obj/item/book/granter/spell/mimery_blockade(src) new /obj/item/book/granter/spell/mimery_guns(src) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 26f0bb1d81ea..6bfccc48524d 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -812,7 +812,7 @@ /obj/item/melee/blood_magic/manipulator/attack_self(mob/living/user) if(iscultist(user)) - var/list/options = list("Blood Spear (150)", "Blood Bolt Barrage (300)", "Blood Beam (500)") + var/list/options = list("Blood Spear (150)", "Blood Beam (500)") var/choice = input(user, "Choose a greater blood rite...", "Greater Blood Rites") as null|anything in options if(!choice) to_chat(user, "<span class='cultitalic'>You decide against conducting a greater blood rite.</span>") @@ -835,18 +835,6 @@ user.visible_message( "<span class='warning'>A [rite.name] appears at [user]'s feet!</span>", \ "<span class='cultitalic'>A [rite.name] materializes at your feet.</span>") - if("Blood Bolt Barrage (300)") - if(uses < BLOOD_BARRAGE_COST) - to_chat(user, "<span class='cultitalic'>You need [BLOOD_BARRAGE_COST] charges to perform this rite.</span>") - else - var/obj/rite = new /obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage/blood() - uses -= BLOOD_BARRAGE_COST - qdel(src) - if(user.put_in_hands(rite)) - to_chat(user, "<span class='cult'><b>Your hands glow with power!</b></span>") - else - to_chat(user, "<span class='cultitalic'>You need a free hand for this rite!</span>") - qdel(rite) if("Blood Beam (500)") if(uses < BLOOD_BEAM_COST) to_chat(user, "<span class='cultitalic'>You need [BLOOD_BEAM_COST] charges to perform this rite.</span>") diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index b09b7d989758..6f2de1c0fdda 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -703,47 +703,6 @@ L.visible_message("<span class='warning'>An unseen force pulls the blood spear from [L]'s hands!</span>") spear.throw_at(owner, 10, 2, owner) - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage/blood - name = "blood bolt barrage" - desc = "Blood for blood." - color = "#ff0000" - guns_left = 24 - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood - fire_sound = 'sound/magic/wand_teleport.ogg' - - -/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood - ammo_type = /obj/item/ammo_casing/magic/arcane_barrage/blood - -/obj/item/ammo_casing/magic/arcane_barrage/blood - projectile_type = /obj/projectile/magic/arcane_barrage/blood - firing_effect_type = /obj/effect/temp_visual/cult/sparks - -/obj/projectile/magic/arcane_barrage/blood - name = "blood bolt" - icon_state = "mini_leaper" - nondirectional_sprite = TRUE - damage_type = BRUTE - impact_effect_type = /obj/effect/temp_visual/dir_setting/bloodsplatter - -/obj/projectile/magic/arcane_barrage/blood/Bump(atom/target) - var/turf/T = get_turf(target) - playsound(T, 'sound/effects/splat.ogg', 50, TRUE) - if(iscultist(target)) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.stat != DEAD) - H.reagents.add_reagent(/datum/reagent/fuel/unholywater, 4) - if(isshade(target) || isconstruct(target)) - var/mob/living/simple_animal/M = target - if(M.health+5 < M.maxHealth) - M.adjustHealth(-5) - new /obj/effect/temp_visual/cult/sparks(T) - qdel(src) - else - ..() - /obj/item/blood_beam name = "\improper magical aura" desc = "Sinister looking aura that distorts the flow of reality around it." diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 58e397a64d40..cf85a922dbb6 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -223,18 +223,6 @@ . = ..() REMOVE_TRAIT(user, TRAIT_TESLA_SHOCKIMMUNE, "lightning_bolt_spell") -/datum/spellbook_entry/infinite_guns - name = "Lesser Summon Guns" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - -/datum/spellbook_entry/arcane_barrage - name = "Arcane Barrage" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - /datum/spellbook_entry/barnyard name = "Barnyard Curse" spell_type = /obj/effect/proc_holder/spell/pointed/barnyardcurse diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index b6920bb419bf..804f1fcb5e59 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -25,7 +25,6 @@ /obj/item/clothing/shoes/clown_shoes/banana_shoes, /obj/item/gun/magic/staff/honk, /obj/item/kitchen/knife/envy, - /obj/item/gun/ballistic/revolver/russian/soul, /obj/item/veilrender/vealrender, /obj/item/nullrod/scythe/talking/necro, /obj/item/clothing/suit/armor/ascetic) diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm index 1eb03b07650c..1f3f176c10ec 100644 --- a/code/modules/mob/living/simple_animal/hostile/stickman.dm +++ b/code/modules/mob/living/simple_animal/hostile/stickman.dm @@ -39,8 +39,6 @@ icon_living = "stickmanranged" casingtype = /obj/item/ammo_casing/c45 projectilesound = 'sound/misc/bang.ogg' - loot = list(/obj/item/gun/ballistic/automatic/pistol/stickman) - /mob/living/simple_animal/hostile/stickman/dog name = "Angry Stick Dog" diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index e38df896bed1..4d9aae44329d 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -39,9 +39,6 @@ /obj/item/ammo_casing/magic/spellblade projectile_type = /obj/projectile/magic/spellblade -/obj/item/ammo_casing/magic/arcane_barrage - projectile_type = /obj/projectile/magic/arcane_barrage - /obj/item/ammo_casing/magic/honk projectile_type = /obj/projectile/bullet/honker diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index b85b223c254b..e410fb94129d 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -6,13 +6,6 @@ max_ammo = 5 instant_load = TRUE -/obj/item/ammo_box/magazine/internal/boltaction/enchanted - max_ammo = 1 - ammo_type = /obj/item/ammo_casing/a762_54 - -/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage - ammo_type = /obj/item/ammo_casing/magic/arcane_barrage - /obj/item/ammo_box/magazine/internal/boltaction/solgov name = "SSG-669C internal magazine" ammo_type = /obj/item/ammo_casing/caseless/a858 diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 97974ff341fb..0fe9c2c4855f 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -107,23 +107,6 @@ fire_delay = 2 actions_types = list(/datum/action/item_action/toggle_firemode) -/obj/item/gun/ballistic/automatic/pistol/stickman - name = "flat gun" - desc = "A 2 dimensional gun.. what?" - icon_state = "flatgun" - manufacturer = MANUFACTURER_NONE - -/obj/item/gun/ballistic/automatic/pistol/stickman/pickup(mob/living/user) - SHOULD_CALL_PARENT(0) - to_chat(user, "<span class='notice'>As you try to pick up [src], it slips out of your grip..</span>") - if(prob(50)) - to_chat(user, "<span class='notice'>..and vanishes from your vision! Where the hell did it go?</span>") - qdel(src) - user.update_icons() - else - to_chat(user, "<span class='notice'>..and falls into view. Whew, that was a close one.</span>") - user.dropItemToGround(src) - /obj/item/gun/ballistic/automatic/pistol/commander name = "\improper Commander" desc = "A classic handgun in a tasteful black and stainless steel color scheme. An enamel Nanotrasen logo is set into the grips. Chambered in 9mm." @@ -265,13 +248,6 @@ to_chat(user, "<span class='warning'>Theres no magazine to replace!</span>") return -/obj/item/gun/ballistic/automatic/pistol/disposable/pizza - name = "pizza disposable gun" - desc = "How horrible. Whoever you point at with this won't be very cheesed to meet you." //this is a warcrime against italians // IF YOU'RE GOING TO DO US DIRTY SPELL IT RIGHT - icon_state = "disposable_pizza" - random_icon = FALSE - custom_materials = list(/datum/material/pizza=2000) - //not technically a pistol but whatever /obj/item/gun/ballistic/derringer name = ".38 Derringer" diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 454a790728d2..5799df8dd3b8 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -305,30 +305,6 @@ user.apply_damage(300, BRUTE, affecting) user.visible_message("<span class='danger'>[user.name] fires [src] at [user.p_their()] head!</span>", "<span class='userdanger'>You fire [src] at your head!</span>", "<span class='hear'>You hear a gunshot!</span>") -/obj/item/gun/ballistic/revolver/russian/soul - name = "cursed Russian revolver" - desc = "To play with this revolver requires wagering your very soul." - -/obj/item/gun/ballistic/revolver/russian/soul/shoot_self(mob/living/user) - ..() - var/obj/item/soulstone/anybody/revolver/SS = new /obj/item/soulstone/anybody/revolver(get_turf(src)) - if(!SS.transfer_soul("FORCE", user)) //Something went wrong - qdel(SS) - return - user.visible_message("<span class='danger'>[user.name]'s soul is captured by \the [src]!</span>", "<span class='userdanger'>You've lost the gamble! Your soul is forfeit!</span>") - -/obj/item/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course. - clumsy_check = 0 - -/obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown")) - return ..() - if(process_fire(user, user, FALSE, null, BODY_ZONE_HEAD)) - user.visible_message("<span class='warning'>[user] somehow manages to shoot [user.p_them()]self in the face!</span>", "<span class='userdanger'>You somehow shoot yourself in the face! How the hell?!</span>") - user.emote("scream") - user.drop_all_held_items() - user.Paralyze(80) - /obj/item/gun/ballistic/revolver/srm name = "SRM Standard Issue .357 Revolver" //should have used the pepperbox... desc = "A sturdy, powerful, and reliable revolver utilized by the Saint-Roumain Militia." diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 6506edc4bb1d..b772b7803185 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -53,10 +53,6 @@ . = ..() . += "The bolt is [bolt_locked ? "open" : "closed"]." -/////////////////////// -// BOLT ACTION RIFLE // -/////////////////////// - /obj/item/gun/ballistic/rifle/boltaction name = "\improper Illestren Hunting Rifle" desc = "One of Hunter's Pride most successful firearms. The bolt-action is popular among colonists, pirates, snipers, and countless more. Chambered in 7.62x54." @@ -119,58 +115,6 @@ manufacturer = MANUFACTURER_HUNTERSPRIDE -/obj/item/gun/ballistic/rifle/boltaction/enchanted - name = "enchanted bolt-action rifle" - desc = "Careful not to lose your head." - var/guns_left = 30 - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted - can_be_sawn_off = FALSE - manufacturer = MANUFACTURER_NONE - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage - name = "arcane barrage" - desc = "Pew Pew Pew." - fire_sound = 'sound/weapons/emitter.ogg' - pin = /obj/item/firing_pin/magic - icon = 'icons/obj/guns/projectile.dmi' - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - icon_state = "arcane_barrage" - item_state = "arcane_barrage" - slot_flags = null - can_bayonet = FALSE - item_flags = NEEDS_PERMIT | DROPDEL | ABSTRACT | NOBLUDGEON - flags_1 = NONE - trigger_guard = TRIGGER_GUARD_ALLOW_ALL - - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/dropped() - . = ..() - guns_left = 0 - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/proc/discard_gun(mob/living/user) - user.throw_item(pick(oview(7,get_turf(user)))) - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage/discard_gun(mob/living/user) - qdel(src) - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/attack_self() - return - -/obj/item/gun/ballistic/rifle/boltaction/enchanted/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - . = ..() - if(!.) - return - if(guns_left) - var/obj/item/gun/ballistic/rifle/boltaction/enchanted/gun = new type - gun.guns_left = guns_left - 1 - discard_gun(user) - user.swap_hand() - user.put_in_hands(gun) - else - user.dropItemToGround(src, TRUE) - /obj/item/gun/ballistic/rifle/boltaction/polymer name = "polymer survivor rifle" desc = "A bolt-action rifle made of scrap, desperation, and luck. Likely to shatter at any moment. Chambered in .300 Blackout." diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 2ac4359e2bf8..b3252b9d86ca 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -679,14 +679,6 @@ build_path = /obj/item/gun/ballistic/automatic/pistol/disposable category = list("Imported") -/datum/design/pizza_disposable_gun - name = "Pizza Disposable Gun" - id = "disposable_pizza" - build_type = AUTOLATHE - materials = list(/datum/material/pizza = 4000) - build_path = /obj/item/gun/ballistic/automatic/pistol/disposable/pizza - category = list("Imported") - //SRM Ballistics /datum/design/doublebarrel name = "Double Barrel Shotgun" diff --git a/code/modules/spells/spell_types/infinite_guns.dm b/code/modules/spells/spell_types/infinite_guns.dm deleted file mode 100644 index d3361284814a..000000000000 --- a/code/modules/spells/spell_types/infinite_guns.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/infinite_guns - name = "Lesser Summon Guns" - desc = "Why reload when you have infinite guns? Summons an unending stream of bolt action rifles that deal little damage, but will knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Arcane Barrage." - invocation_type = "none" - include_user = TRUE - range = -1 - - school = "conjuration" - charge_max = 750 - clothes_req = TRUE - cooldown_min = 10 //Gun wizard - action_icon_state = "bolt_action" - var/summon_path = /obj/item/gun/ballistic/rifle/boltaction/enchanted - -/obj/effect/proc_holder/spell/targeted/infinite_guns/cast(list/targets, mob/user = usr) - for(var/mob/living/carbon/C in targets) - C.drop_all_held_items() - var/GUN = new summon_path - C.put_in_hands(GUN) - -/obj/effect/proc_holder/spell/targeted/infinite_guns/gun - -/obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - name = "Arcane Barrage" - desc = "Fire a torrent of arcane energy at your foes with this (powerful) spell. Deals much more damage than Lesser Summon Guns, but won't knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Lesser Summon Gun." - action_icon_state = "arcane_barrage" - summon_path = /obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage diff --git a/code/modules/unit_tests/gun_crafting.dm b/code/modules/unit_tests/gun_crafting.dm index eaf315fc3370..3dc74430681c 100644 --- a/code/modules/unit_tests/gun_crafting.dm +++ b/code/modules/unit_tests/gun_crafting.dm @@ -1,11 +1,12 @@ //Makes sure preinstalled frame parts can be removed an reinstalled /datum/unit_test/gun_crafting/Run() +/* var/list/guns = typesof(/obj/item/gun/ballistic) for(var/gunType in guns) var/obj/item/gun/ballistic/G = new gunType if(G.magazine) TEST_FAIL("Gun: [G.type], Magazine: [G.magazine.type], Caliber: [G.magazine.caliber]") -/* +*/ var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) for(var/frame_type in subtypesof(/obj/item/part/gun/frame)) var/obj/item/part/gun/frame/frame = new frame_type @@ -14,4 +15,3 @@ frame.eject_item(installedPart, human) frame.handle_part(installedPart, human) TEST_ASSERT_EQUAL(frame_parts, frame.installed_parts, "Frame parts to match there original contents. I assume frame parts were not reinstalled correctly.") -*/ diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 53b49ab30f0b..40b382faf358 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1952,14 +1952,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/reverse_bear_trap restricted_roles = list("Clown") -/datum/uplink_item/role_restricted/reverse_revolver - name = "Reverse Revolver" - desc = "A revolver that always fires at its user. \"Accidentally\" drop your weapon, then watch as the greedy corporate pigs blow their own brains all over the wall. \ - The revolver itself is actually real. Only clumsy people, and clowns, can fire it normally. Comes in a box of hugs. Honk." - cost = 14 - item = /obj/item/storage/box/hug/reverse_revolver - restricted_roles = list("Clown") - /datum/uplink_item/role_restricted/clownpin name = "Ultra Hilarious Firing Pin" desc = "A firing pin that, when inserted into a gun, makes that gun only usable by clowns and clumsy people and makes that gun honk whenever anyone tries to fire it." diff --git a/shiptest.dme b/shiptest.dme index f1c0517dbdd3..e4eb0b858cd7 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3278,7 +3278,6 @@ #include "code\modules\spells\spell_types\forcewall.dm" #include "code\modules\spells\spell_types\genetic.dm" #include "code\modules\spells\spell_types\godhand.dm" -#include "code\modules\spells\spell_types\infinite_guns.dm" #include "code\modules\spells\spell_types\inflict_handler.dm" #include "code\modules\spells\spell_types\knock.dm" #include "code\modules\spells\spell_types\lichdom.dm" From 30277b30f065dbb19c7f15427f5d43fcac3bad28 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 12:28:05 -0600 Subject: [PATCH 46/89] kills pins --- .../BeachRuins/beach_ancient_ruin.dmm | 5 +- .../icemoon_surface_corporate_rejects.dmm | 1 - .../RandomRuins/JungleRuins/jungle_demon.dmm | 2 +- .../RockRuins/rockplanet_budgetcuts.dmm | 3 - .../RockRuins/rockplanet_harmfactory.dmm | 2 +- .../RandomRuins/SpaceRuins/provinggrounds.dmm | 2 +- .../SpaceRuins/singularity_lab.dmm | 4 +- .../WasteRuins/wasteplanet_pandora.dmm | 2 +- _maps/map_files/generic/CentCom.dmm | 2 +- .../independent/independent_halftrack.dmm | 12 +- .../shuttles/independent/independent_nemo.dmm | 1 - .../minutemen/minutemen_asclepius.dmm | 1 - .../shuttles/minutemen/minutemen_cepheus.dmm | 4 - .../shuttles/nanotrasen/nanotrasen_heron.dmm | 6 +- _maps/shuttles/pirate/pirate_noderider.dmm | 2 +- .../syndicate/syndicate_gorlex_komodo.dmm | 4 +- .../syndicate/syndicate_luxembourg.dmm | 2 +- code/game/gamemodes/clown_ops/clown_ops.dm | 1 - code/game/objects/items/storage/boxes.dm | 29 -- .../game/objects/items/storage/uplink_kits.dm | 13 +- code/game/objects/structures/salvaging.dm | 4 +- .../abductor/equipment/abduction_gear.dm | 11 - .../awaymissions/mission_code/snowdin.dm | 2 +- .../clothing/outfits/ert/nanotrasen_ert.dm | 8 +- code/modules/clothing/outfits/standard.dm | 2 +- code/modules/mining/abandoned_crates.dm | 6 +- .../hostile/mining_mobs/hivelord.dm | 2 +- code/modules/projectiles/gun.dm | 71 ---- .../projectiles/guns/ballistic/automatic.dm | 1 - .../projectiles/guns/ballistic/launchers.dm | 9 - .../projectiles/guns/ballistic/revolver.dm | 1 - .../projectiles/guns/ballistic/rifle.dm | 1 - .../projectiles/guns/ballistic/shotgun.dm | 9 - .../modules/projectiles/guns/ballistic/smg.dm | 14 +- .../modules/projectiles/guns/ballistic/toy.dm | 25 +- .../projectiles/guns/energy/energy_gun.dm | 3 - code/modules/projectiles/guns/energy/laser.dm | 6 - code/modules/projectiles/guns/energy/pulse.dm | 26 -- .../projectiles/guns/energy/special.dm | 5 - .../projectiles/guns/misc/beam_rifle.dm | 1 - code/modules/projectiles/pins.dm | 343 ------------------ code/modules/vending/liberation.dm | 2 +- code/modules/vending/liberation_toy.dm | 10 +- code/modules/vending/security.dm | 6 +- code/modules/vending/toys.dm | 10 +- shiptest.dme | 1 - 46 files changed, 53 insertions(+), 624 deletions(-) delete mode 100644 code/modules/projectiles/pins.dm diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index b67667e26c69..be52f6a67f46 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -374,11 +374,8 @@ }, /obj/item/gun/energy/lasercannon{ pixel_y = 5; - pin = /obj/item/firing_pin - }, -/obj/item/gun/energy/lasercannon{ - pin = /obj/item/firing_pin }, +/obj/item/gun/energy/lasercannon, /obj/effect/turf_decal/industrial/hatch, /turf/open/floor/plasteel/mono, /area/ruin/beach/complex) diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm index d518df47dc6e..e9e2fc7531a6 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm @@ -1327,7 +1327,6 @@ "En" = ( /obj/item/gun/ballistic/automatic/smg/proto, /obj/structure/rack, -/obj/item/firing_pin, /turf/open/floor/vault, /area/ruin/unpowered/corprejectvault) "Er" = ( diff --git a/_maps/RandomRuins/JungleRuins/jungle_demon.dmm b/_maps/RandomRuins/JungleRuins/jungle_demon.dmm index adbb037af38c..006770d3b37c 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_demon.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_demon.dmm @@ -296,7 +296,7 @@ /area/ruin/powered) "yM" = ( /obj/structure/table/reinforced, -/obj/item/gun/ballistic/shotgun/bulldog/unrestricted, +/obj/item/gun/ballistic/shotgun/bulldog, /turf/open/floor/plasteel/dark, /area/ruin/powered) "AB" = ( diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index 9cf2b5a40bae..7de5ce9c1b05 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -2602,9 +2602,6 @@ /obj/structure/railing{ dir = 4 }, -/obj/item/firing_pin{ - pixel_y = 6 - }, /turf/open/floor/plasteel, /area/ruin/powered) "Tl" = ( diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm index 9b5adb277fa8..48f7614da429 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm @@ -251,7 +251,7 @@ /area/ruin/powered) "ga" = ( /obj/structure/table/wood/reinforced, -/obj/item/gun/ballistic/automatic/smg/c20r/toy/unrestricted/riot{ +/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot{ pixel_x = 5; pixel_y = 7 }, diff --git a/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm b/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm index c43ba0812698..842385176784 100644 --- a/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm +++ b/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm @@ -1924,7 +1924,7 @@ "XA" = ( /obj/structure/rack, /obj/item/ammo_box/foambox/riot, -/obj/item/gun/ballistic/automatic/toy/pistol/riot/unrestricted, +/obj/item/gun/ballistic/automatic/toy/pistol/riot, /obj/structure/cable{ icon_state = "1-2" }, diff --git a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm index 486cbbce85fd..3b39d4b1025d 100644 --- a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm +++ b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm @@ -9132,7 +9132,7 @@ /obj/item/clothing/under/rank/rnd/scientist, /obj/item/clothing/shoes/sneakers/white, /obj/effect/gibspawner, -/obj/item/gun/energy/lasercannon/unrestricted{ +/obj/item/gun/energy/lasercannon{ desc = "An advanced laser cannon, a laser etched inscription in the handle states 'NT-LS-1013'. The casing is made of a lightweight alloy."; icon_state = "pulse"; name = "NT-LS-1013" @@ -10940,7 +10940,7 @@ "PZ" = ( /obj/effect/turf_decal/box, /obj/machinery/light/directional/north, -/obj/item/gun/energy/lasercannon/unrestricted{ +/obj/item/gun/energy/lasercannon{ desc = "An advanced laser cannon, a laser etched inscription in the handle states 'NT-LS-1013'. The casing is made of a lightweight alloy."; icon_state = "pulse"; name = "NT-LS-1013" diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm index 83249514118f..8a63378ced3c 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm @@ -798,7 +798,7 @@ /turf/open/floor/wood/waste, /area/ruin/wasteplanet) "Fn" = ( -/obj/item/gun/ballistic/automatic/smg/proto/unrestricted{ +/obj/item/gun/ballistic/automatic/smg/proto{ pixel_y = -18 }, /obj/item/ammo_casing/spent{ diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index e2b1ff97158c..bb0626e5c681 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -5333,7 +5333,7 @@ /turf/open/floor/plasteel, /area/centcom/control) "aUp" = ( -/obj/item/gun/energy/pulse/carbine/loyalpin, +/obj/item/gun/energy/pulse/carbine, /obj/item/flashlight/seclite, /obj/structure/table/reinforced, /obj/machinery/airalarm/directional/south, diff --git a/_maps/shuttles/independent/independent_halftrack.dmm b/_maps/shuttles/independent/independent_halftrack.dmm index f82d26ffd66d..bddb6a328e74 100644 --- a/_maps/shuttles/independent/independent_halftrack.dmm +++ b/_maps/shuttles/independent/independent_halftrack.dmm @@ -218,8 +218,8 @@ /area/ship/maintenance/port) "fT" = ( /obj/structure/closet/secure_closet/security, -/obj/item/gun/ballistic/shotgun/bulldog/unrestricted, -/obj/item/gun/ballistic/shotgun/bulldog/unrestricted, +/obj/item/gun/ballistic/shotgun/bulldog, +/obj/item/gun/ballistic/shotgun/bulldog, /obj/item/gun/ballistic/automatic/hmg/l6_saw, /obj/item/gun/ballistic/automatic/hmg/l6_saw, /obj/item/ammo_box/magazine/m12g/slug, @@ -1600,18 +1600,18 @@ pixel_x = 28; name = "foam gun cabinet" }, -/obj/item/gun/ballistic/automatic/toy/pistol/unrestricted, -/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/unrestricted, +/obj/item/gun/ballistic/automatic/toy/pistol, +/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy, /obj/item/ammo_box/magazine/toy/m762, /obj/item/ammo_box/magazine/toy/m762, /obj/item/ammo_box/magazine/toy/m762, -/obj/item/gun/ballistic/automatic/smg/c20r/toy/unrestricted, +/obj/item/gun/ballistic/automatic/smg/c20r/toy, /obj/item/ammo_box/magazine/toy/smg, /obj/item/ammo_box/magazine/toy/smg, /obj/item/ammo_box/magazine/toy/smg, /obj/item/ammo_box/foambox, /obj/item/ammo_box/foambox, -/obj/item/gun/ballistic/shotgun/toy/unrestricted, +/obj/item/gun/ballistic/shotgun/toy, /turf/open/floor/plasteel/dark, /area/ship/security/range) "Ob" = ( diff --git a/_maps/shuttles/independent/independent_nemo.dmm b/_maps/shuttles/independent/independent_nemo.dmm index f693cbcbdc27..87a57d6041cd 100644 --- a/_maps/shuttles/independent/independent_nemo.dmm +++ b/_maps/shuttles/independent/independent_nemo.dmm @@ -2176,7 +2176,6 @@ pixel_x = -32; req_access = list(30) }, -/obj/item/firing_pin, /obj/item/kitchen/knife/hunting, /obj/item/gun/ballistic/shotgun/contender, /obj/item/ammo_box/a4570, diff --git a/_maps/shuttles/minutemen/minutemen_asclepius.dmm b/_maps/shuttles/minutemen/minutemen_asclepius.dmm index b2d763063f39..266c08c80661 100644 --- a/_maps/shuttles/minutemen/minutemen_asclepius.dmm +++ b/_maps/shuttles/minutemen/minutemen_asclepius.dmm @@ -10,7 +10,6 @@ dir = 8 }, /obj/item/camera, -/obj/item/firing_pin, /obj/item/folder/red, /obj/item/taperecorder, /turf/open/floor/carpet/red, diff --git a/_maps/shuttles/minutemen/minutemen_cepheus.dmm b/_maps/shuttles/minutemen/minutemen_cepheus.dmm index 9686aff53035..8337fd01738a 100644 --- a/_maps/shuttles/minutemen/minutemen_cepheus.dmm +++ b/_maps/shuttles/minutemen/minutemen_cepheus.dmm @@ -1411,10 +1411,6 @@ pixel_x = 8; pixel_y = -22 }, -/obj/item/firing_pin{ - pixel_x = 3; - pixel_y = -7 - }, /turf/open/floor/plasteel/tech, /area/ship/security) "qk" = ( diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm index 669e1df22ab8..d93acd364776 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm @@ -3383,13 +3383,13 @@ "mt" = ( /obj/structure/window/reinforced/spawner, /obj/structure/rack, -/obj/item/gun/ballistic/automatic/smg/proto/unrestricted{ +/obj/item/gun/ballistic/automatic/smg/proto{ pixel_y = 3 }, -/obj/item/gun/ballistic/automatic/smg/proto/unrestricted{ +/obj/item/gun/ballistic/automatic/smg/proto{ pixel_y = -2 }, -/obj/item/gun/ballistic/automatic/smg/proto/unrestricted{ +/obj/item/gun/ballistic/automatic/smg/proto{ pixel_y = -7 }, /turf/open/floor/plasteel/tech, diff --git a/_maps/shuttles/pirate/pirate_noderider.dmm b/_maps/shuttles/pirate/pirate_noderider.dmm index e9a28b74cfde..c10e072892df 100644 --- a/_maps/shuttles/pirate/pirate_noderider.dmm +++ b/_maps/shuttles/pirate/pirate_noderider.dmm @@ -1037,7 +1037,7 @@ /obj/item/gun/energy/laser/iot, /obj/item/gun/energy/laser/iot, /obj/item/gun/energy/e_gun/smg, -/obj/item/gun/energy/lasercannon/unrestricted, +/obj/item/gun/energy/lasercannon, /obj/item/melee/baton/loaded, /obj/item/melee/baton/loaded, /turf/open/floor/plasteel/tech, diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index 3da232da75dc..68ee81cb02f2 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -981,8 +981,8 @@ /obj/structure/railing{ dir = 4 }, -/obj/item/gun/ballistic/automatic/smg/c20r/unrestricted, -/obj/item/gun/ballistic/shotgun/bulldog/unrestricted, +/obj/item/gun/ballistic/automatic/smg/c20r, +/obj/item/gun/ballistic/shotgun/bulldog, /turf/open/floor/pod/dark, /area/ship/security/armory) "jh" = ( diff --git a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm b/_maps/shuttles/syndicate/syndicate_luxembourg.dmm index 6dde77123cba..cff4c84386e0 100644 --- a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm +++ b/_maps/shuttles/syndicate/syndicate_luxembourg.dmm @@ -831,7 +831,7 @@ /obj/structure/closet/crate/wooden/toy, /obj/item/ammo_box/magazine/toy/smgm45/riot, /obj/item/ammo_box/magazine/toy/smgm45/riot, -/obj/item/gun/ballistic/automatic/smg/c20r/toy/unrestricted/riot, +/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot, /obj/item/soap/syndie, /obj/item/soap/syndie, /obj/item/soap/syndie, diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index 5017b1d38c06..23500e032ee5 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -40,7 +40,6 @@ backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ /obj/item/kitchen/knife/combat/survival, /obj/item/dnainjector/clumsymut, //in case you want to be clumsy for the memes - /obj/item/storage/box/syndie_kit/clownpins, //for any guns that you get your grubby little clown op mitts on /obj/item/reagent_containers/spray/waterflower/lube) implants = list(/obj/item/implant/sad_trombone) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 7b1710cd8960..7ac8e822eeaf 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -607,35 +607,6 @@ for(var/i in 1 to 6) new /obj/item/cartridge/security(src) -/obj/item/storage/box/firingpins - name = "box of standard firing pins" - desc = "A box full of standard firing pins, to allow newly-developed firearms to operate." - icon_state = "secbox" - illustration = "firingpin" - -/obj/item/storage/box/firingpins/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/firing_pin(src) - -/obj/item/storage/box/firingpins/paywall - name = "box of paywall firing pins" - desc = "A box full of paywall firing pins, to allow newly-developed firearms to operate behind a custom-set paywall." - illustration = "firingpin" - -/obj/item/storage/box/firingpins/paywall/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/firing_pin/paywall(src) - -/obj/item/storage/box/lasertagpins - name = "box of laser tag firing pins" - desc = "A box full of laser tag firing pins, to allow newly-developed firearms to require wearing brightly coloured plastic armor before being able to be used." - illustration = "firingpin" - -/obj/item/storage/box/lasertagpins/PopulateContents() - for(var/i in 1 to 3) - new /obj/item/firing_pin/tag/red(src) - new /obj/item/firing_pin/tag/blue(src) - /obj/item/storage/box/handcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 6b3658b523df..cc070ba21d5c 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -108,7 +108,7 @@ if("metaops") new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc - new /obj/item/gun/ballistic/shotgun/bulldog/unrestricted(src) // 8 tc + new /obj/item/gun/ballistic/shotgun/bulldog(src) // 8 tc new /obj/item/implanter/explosive(src) // 2 tc new /obj/item/ammo_box/magazine/m12g(src) // 2 tc new /obj/item/ammo_box/magazine/m12g(src) // 2 tc @@ -165,7 +165,7 @@ new /obj/item/assembly/signaler(src) // 0 tc new /obj/item/storage/toolbox/syndicate(src) // 1 tc new /obj/item/pen/edagger(src) - new /obj/item/gun/energy/decloner/unrestricted(src) + new /obj/item/gun/energy/decloner(src) if("bee") new /obj/item/paper/fluff/bee_objectives(src) // 0 tc (motivation) @@ -306,7 +306,7 @@ /obj/item/storage/box/syndie_kit/imp_radio, /obj/item/storage/box/syndie_kit/imp_uplink, /obj/item/clothing/gloves/krav_maga/combatglovesplus, - /obj/item/gun/ballistic/automatic/smg/c20r/toy/unrestricted/riot, + /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot, /obj/item/reagent_containers/hypospray/medipen/stimulants, /obj/item/storage/box/syndie_kit/imp_freedom, /obj/item/toy/eightball/haunted @@ -370,13 +370,6 @@ for(var/i in 1 to 7) new /obj/item/reagent_containers/syringe/bioterror(src) -/obj/item/storage/box/syndie_kit/clownpins - name = "ultra hilarious firing pin box" - -/obj/item/storage/box/syndie_kit/clownpins/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/firing_pin/clown/ultra(src) - /obj/item/storage/box/syndie_kit/imp_adrenal name = "adrenal implant box" diff --git a/code/game/objects/structures/salvaging.dm b/code/game/objects/structures/salvaging.dm index 3d90a25a1013..1a2cdcba9925 100644 --- a/code/game/objects/structures/salvaging.dm +++ b/code/game/objects/structures/salvaging.dm @@ -584,8 +584,8 @@ ) /obj/effect/spawner/lootdrop/random_gun_protolathe_lootdrop loot = list( - /obj/item/gun/energy/lasercannon/unrestricted = 1, - /obj/item/gun/ballistic/automatic/smg/proto/unrestricted = 1, + /obj/item/gun/energy/lasercannon = 1, + /obj/item/gun/ballistic/automatic/smg/proto = 1, /obj/item/gun/energy/temperature/security = 1, ) /obj/effect/spawner/lootdrop/random_ammo_protolathe_lootdrop diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 9a5b95d21184..5efddfb3cf8c 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -369,21 +369,10 @@ to_chat(user, "<span class='notice'>You send the message to your target.</span>") log_directed_talk(user, L, message, LOG_SAY, "abductor whisper") - -/obj/item/firing_pin/abductor - name = "alien firing pin" - icon_state = "firing_pin_ayy" - desc = "This firing pin is slimy and warm; you can swear you feel it constantly trying to mentally probe you." - fail_message = "<span class='abductor'>Firing error, please contact Command.</span>" - -/obj/item/firing_pin/abductor/pin_auth(mob/living/user) - . = isabductor(user) - /obj/item/gun/energy/alien name = "alien pistol" desc = "A complicated gun that fires bursts of high-intensity radiation." ammo_type = list(/obj/item/ammo_casing/energy/declone) - pin = /obj/item/firing_pin/abductor icon_state = "alienpistol" item_state = "alienpistol" trigger_guard = TRIGGER_GUARD_ALLOW_ALL diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index f5cfc93c6eee..c8214de7c65f 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -513,7 +513,7 @@ /obj/item/organ/brain/alien = 17, /obj/item/dualsaber = 15, /obj/item/organ/heart/demon = 7, - /obj/item/gun/ballistic/automatic/smg/c20r/unrestricted = 16, + /obj/item/gun/ballistic/automatic/smg/c20r = 16, /obj/item/gun/magic/wand/resurrection/inert = 15, /obj/item/gun/magic/wand/resurrection = 10, /obj/item/uplink/old = 2, diff --git a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm index 2d397b8de828..6864bd6677eb 100644 --- a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm +++ b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm @@ -47,7 +47,7 @@ glasses = /obj/item/clothing/glasses/thermal/eyepatch backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/pulse/pistol/loyalpin=1) + /obj/item/gun/energy/pulse/pistol=1) l_pocket = /obj/item/melee/transforming/energy/sword/saber /datum/outfit/centcom/ert/security @@ -77,7 +77,7 @@ /datum/outfit/centcom/ert/security/alert name = "ERT Security - High Alert" - suit_store = /obj/item/gun/energy/pulse/carbine/loyalpin + suit_store = /obj/item/gun/energy/pulse/carbine mask = /obj/item/clothing/mask/gas/sechailer/swat backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/storage/box/handcuffs=1,\ @@ -114,7 +114,7 @@ mask = /obj/item/clothing/mask/gas/sechailer/swat backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/pulse/pistol/loyalpin=1,\ + /obj/item/gun/energy/pulse/pistol=1,\ /obj/item/reagent_containers/hypospray/combat/nanites=1,\ /obj/item/gun/medbeam=1) @@ -150,7 +150,7 @@ mask = /obj/item/clothing/mask/gas/sechailer/swat backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/pulse/pistol/loyalpin=1,\ + /obj/item/gun/energy/pulse/pistol=1,\ /obj/item/construction/rcd/combat=1) // official diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 72127bbaf7df..55587dedac5b 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -162,7 +162,7 @@ r_pocket = /obj/item/shield/energy suit_store = /obj/item/tank/internals/emergency_oxygen/double belt = /obj/item/gun/ballistic/revolver/mateba - r_hand = /obj/item/gun/energy/pulse/loyalpin + r_hand = /obj/item/gun/energy/pulse id = /obj/item/card/id/ert/deathsquad ears = /obj/item/radio/headset/headset_cent/alt diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 140b87c1707f..b6058b596444 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -229,9 +229,9 @@ for(var/i in 1 to 4) new /obj/item/clothing/mask/balaclava(src) new /obj/item/gun/ballistic/shotgun/toy(src) - new /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted(src) - new /obj/item/gun/ballistic/automatic/toy/unrestricted(src) - new /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/unrestricted(src) + new /obj/item/gun/ballistic/automatic/toy/pistol(src) + new /obj/item/gun/ballistic/automatic/toy(src) + new /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy(src) new /obj/item/ammo_box/foambox(src) if(98) for(var/i in 1 to 3) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 474c9c5d9ca6..bea421014108 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -744,7 +744,7 @@ else back = pickweight(list( /obj/item/energyhalberd = 5, - /obj/item/gun/ballistic/rocketlauncher/unrestricted = 5 + /obj/item/gun/ballistic/rocketlauncher = 5 ) ) if(prob(25)) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b64e76d1f075..4402a88ead17 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1,6 +1,5 @@ #define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6 -#define FIRING_PIN_REMOVAL_DELAY 50 #define MANUFACTURER_NONE null #define MANUFACTURER_SHARPLITE "the Sharplite Defense logo" @@ -49,7 +48,6 @@ var/suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' var/suppressed_volume = 60 var/can_unsuppress = TRUE - var/clumsy_check = TRUE var/obj/item/ammo_casing/chambered = null trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers var/sawn_desc = null //description change if weapon is sawn-off @@ -68,7 +66,6 @@ righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' var/list/attachment_options = list() //This.. works for now.. gun refactor soon - var/obj/item/firing_pin/pin = /obj/item/firing_pin //standard firing pin for most guns var/can_flashlight = FALSE //if a flashlight can be added or removed if it already has one. var/obj/item/flashlight/seclite/gun_light @@ -138,8 +135,6 @@ . = ..() RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - if(pin) - pin = new pin(src) if(gun_light) alight = new(src) muzzle_flash = new(src, muzzleflash_iconstate) @@ -173,8 +168,6 @@ user.remove_movespeed_modifier(/datum/movespeed_modifier/gun) /obj/item/gun/Destroy() - if(isobj(pin)) //Can still be the initial path, then we skip - QDEL_NULL(pin) if(gun_light) QDEL_NULL(gun_light) if(bayonet) @@ -190,8 +183,6 @@ return ..() /obj/item/gun/handle_atom_del(atom/A) - if(A == pin) - pin = null if(A == chambered) chambered = null update_appearance() @@ -203,12 +194,6 @@ /obj/item/gun/examine(mob/user) . = ..() - if(pin) - . += "It has \a [pin] installed." - . += "<span class='info'>[pin] looks like it could be removed with some <b>tools</b>.</span>" - else - . += "It doesn't have a <b>firing pin</b> installed, and won't fire." - if(gun_light) . += "It has \a [gun_light] [can_flashlight ? "" : "permanently "]mounted on it." if(can_flashlight) //if it has a light and this is false, the light is permanent. @@ -361,22 +346,6 @@ user.dropItemToGround(src, TRUE) return TRUE -/obj/item/gun/can_trigger_gun(mob/living/user) - . = ..() - if(!handle_pins(user)) - return FALSE - -/obj/item/gun/proc/handle_pins(mob/living/user) - if(pin) - if(pin.pin_auth(user) || (pin.obj_flags & EMAGGED)) - return TRUE - else - pin.auth_fail(user) - return FALSE - else - to_chat(user, "<span class='warning'>[src]'s trigger is locked. This weapon doesn't have a firing pin installed!</span>") - return FALSE - /obj/item/gun/proc/recharge_newshot() return @@ -571,40 +540,6 @@ else if(picked_option == "Knife") return remove_gun_attachment(user, I, bayonet, "unfix") -/obj/item/gun/welder_act(mob/living/user, obj/item/I) - . = ..() - if(.) - return - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - if(pin && user.is_holding(src)) - user.visible_message("<span class='warning'>[user] attempts to remove [pin] from [src] with [I].</span>", - "<span class='notice'>You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)</span>", null, 3) - if(I.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, 5, volume = 50)) - if(!pin) //check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay - return - user.visible_message("<span class='notice'>[pin] is spliced out of [src] by [user], melting part of the pin in the process.</span>", - "<span class='warning'>You splice [pin] out of [src] with [I], melting part of the pin in the process.</span>", null, 3) - QDEL_NULL(pin) - return TRUE - -/obj/item/gun/wirecutter_act(mob/living/user, obj/item/I) - . = ..() - if(.) - return - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - if(pin && user.is_holding(src)) - user.visible_message("<span class='warning'>[user] attempts to remove [pin] from [src] with [I].</span>", - "<span class='notice'>You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)</span>", null, 3) - if(I.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, volume = 50)) - if(!pin) //check to see if the pin is still there, or we can spam messages by clicking multiple times during the tool delay - return - user.visible_message("<span class='notice'>[pin] is ripped out of [src] by [user], mangling the pin in the process.</span>", - "<span class='warning'>You rip [pin] out of [src] with [I], mangling the pin in the process.</span>", null, 3) - QDEL_NULL(pin) - return TRUE - /obj/item/gun/proc/remove_gun_attachment(mob/living/user, obj/item/tool_item, obj/item/item_to_remove, removal_verb) if(tool_item) tool_item.play_tool_sound(src) @@ -772,11 +707,6 @@ process_fire(target, user, TRUE, params, BODY_ZONE_HEAD) -/obj/item/gun/proc/unlock() //used in summon guns and as a convience for admins - if(pin) - qdel(pin) - pin = new /obj/item/firing_pin - //Happens before the actual projectile creation /obj/item/gun/proc/before_firing(atom/target,mob/user) return @@ -942,5 +872,4 @@ azoom = new() azoom.gun = src -#undef FIRING_PIN_REMOVAL_DELAY #undef DUALWIELD_PENALTY_EXTRA_MULTIPLIER diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 841e36927cb5..2b4741d5593a 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -91,7 +91,6 @@ desc = "A heavily-modified .50 BMG anti-material rifle utilized by Syndicate agents. Requires both hands to fire." can_suppress = TRUE can_unsuppress = TRUE - pin = /obj/item/firing_pin/implant/pindicate // Old Semi-Auto Rifle // diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index c7d73c5459bc..061f256229a1 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -9,13 +9,9 @@ mag_type = /obj/item/ammo_box/magazine/internal/grenadelauncher fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' w_class = WEIGHT_CLASS_NORMAL - pin = /obj/item/firing_pin/implant/pindicate bolt_type = BOLT_TYPE_NO_BOLT fire_delay = 10 -/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, params) ..() if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing)) @@ -27,7 +23,6 @@ icon = 'icons/mecha/mecha_equipment.dmi' icon_state = "mecha_grenadelnchr" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenademulti - pin = /obj/item/firing_pin /obj/item/gun/ballistic/revolver/grenadelauncher/cyborg/attack_self() return @@ -53,7 +48,6 @@ load_sound = 'sound/weapons/gun/general/rocket_load.ogg' w_class = WEIGHT_CLASS_BULKY can_suppress = FALSE - pin = /obj/item/firing_pin burst_size = 1 fire_delay = 0 casing_ejector = FALSE @@ -65,9 +59,6 @@ tac_reloads = FALSE manufacturer = MANUFACTURER_SCARBOROUGH -/obj/item/gun/ballistic/rocketlauncher/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/rocketlauncher/afterattack() . = ..() magazine.get_round(FALSE) //Hack to clear the mag after it's fired diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 454a790728d2..57b088fc16b7 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -197,7 +197,6 @@ icon_state = "goldrevolver" fire_sound = 'sound/weapons/resonator_blast.ogg' recoil = 8 - pin = /obj/item/firing_pin manufacturer = MANUFACTURER_NONE /obj/item/gun/ballistic/revolver/nagant diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 6506edc4bb1d..2edda6bb9ecd 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -131,7 +131,6 @@ name = "arcane barrage" desc = "Pew Pew Pew." fire_sound = 'sound/weapons/emitter.ogg' - pin = /obj/item/firing_pin/magic icon = 'icons/obj/guns/projectile.dmi' lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 8d4390398075..a96ef808e695 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -115,9 +115,6 @@ var/obj/item/ammo_box/magazine/internal/shot/alternate_magazine semi_auto = TRUE -/obj/item/gun/ballistic/shotgun/automatic/dual_tube/mindshield - pin = /obj/item/firing_pin/implant/mindshield - /obj/item/gun/ballistic/shotgun/automatic/dual_tube/examine(mob/user) . = ..() . += "<span class='notice'>Alt-click to pump it.</span>" @@ -167,7 +164,6 @@ can_suppress = FALSE burst_size = 1 fire_delay = 0 - pin = /obj/item/firing_pin/implant/pindicate fire_sound = 'sound/weapons/gun/shotgun/shot.ogg' actions_types = list() mag_display = TRUE @@ -188,16 +184,12 @@ wield_slowdown = 0.6 wield_delay = 0.65 SECONDS -/obj/item/gun/ballistic/shotgun/bulldog/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/shotgun/bulldog/inteq name = "\improper Mastiff Shotgun" desc = "A variation of the Bulldog, seized from Syndicate armories by deserting troopers then modified to IRMG's standards." icon_state = "bulldog-inteq" item_state = "bulldog-inteq" mag_type = /obj/item/ammo_box/magazine/m12g - pin = /obj/item/firing_pin manufacturer = MANUFACTURER_INTEQ /obj/item/gun/ballistic/shotgun/bulldog/minutemen @@ -207,7 +199,6 @@ mag_type = /obj/item/ammo_box/magazine/cm15_mag icon_state = "cm15" item_state = "cm15" - pin = /obj/item/firing_pin empty_alarm = FALSE empty_indicator = FALSE special_mags = FALSE diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm index 7efd0a579925..696a934e71c4 100644 --- a/code/modules/projectiles/guns/ballistic/smg.dm +++ b/code/modules/projectiles/guns/ballistic/smg.dm @@ -27,9 +27,6 @@ . = ..() AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) -/obj/item/gun/ballistic/automatic/smg/proto/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/automatic/smg/c20r name = "\improper C-20r SMG" desc = "A bullpup .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." @@ -49,9 +46,6 @@ . = ..() AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) -/obj/item/gun/ballistic/automatic/smg/c20r/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/automatic/smg/c20r/Initialize() . = ..() update_appearance() @@ -156,7 +150,6 @@ var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel burst_size = 3 fire_delay = 2 - pin = /obj/item/firing_pin/implant/pindicate mag_display = TRUE empty_indicator = TRUE fire_sound = 'sound/weapons/gun/rifle/shot_alt.ogg' @@ -171,12 +164,9 @@ underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src) update_appearance() -/obj/item/gun/ballistic/automatic/smg/m90/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/automatic/smg/m90/unrestricted/Initialize() +/obj/item/gun/ballistic/automatic/smg/m90/Initialize() . = ..() - underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src) + underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src) update_appearance() /obj/item/gun/ballistic/automatic/smg/m90/afterattack(atom/target, mob/living/user, flag, params) diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 4ce2819a902e..4d1e7884225c 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -20,9 +20,6 @@ . = ..() . += "[icon_state]_toy" -/obj/item/gun/ballistic/automatic/toy/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/automatic/toy/pistol name = "foam force pistol" desc = "A small, easily concealable toy handgun. Ages 8 and up." @@ -45,12 +42,6 @@ magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src) return ..() -/obj/item/gun/ballistic/automatic/toy/pistol/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/automatic/toy/pistol/riot/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/shotgun/toy name = "foam force shotgun" desc = "A toy shotgun with wood furniture and a four-shell capacity underneath. Ages 8 and up." @@ -75,9 +66,6 @@ if(chambered && !chambered.BB) qdel(chambered) -/obj/item/gun/ballistic/shotgun/toy/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/shotgun/toy/crossbow name = "foam force crossbow" desc = "A weapon favored by many overactive children. Ages 8 and up." @@ -105,13 +93,6 @@ recoil = -10 //its a toy... recoil_unwielded = -10 -/obj/item/gun/ballistic/automatic/smg/c20r/toy/unrestricted //Use this for actual toys - pin = /obj/item/firing_pin - mag_type = /obj/item/ammo_box/magazine/toy/smgm45 - -/obj/item/gun/ballistic/automatic/smg/c20r/toy/unrestricted/riot - mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot - /obj/item/gun/ballistic/automatic/smg/c20r/toy/update_overlays() . = ..() . += "[icon_state]_toy" @@ -129,11 +110,7 @@ recoil = -10 //its a toy... recoil_unwielded = -10 -/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/unrestricted //Use this for actual toys - pin = /obj/item/firing_pin - mag_type = /obj/item/ammo_box/magazine/toy/m762 - -/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/unrestricted/riot +/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/riot mag_type = /obj/item/ammo_box/magazine/toy/m762/riot /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/update_overlays() diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index 223cdc09e157..d8dbc159a8d0 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -12,9 +12,6 @@ dual_wield_spread = 60 manufacturer = MANUFACTURER_SHARPLITE_NEW -/obj/item/gun/energy/e_gun/mindshield - pin = /obj/item/firing_pin/implant/mindshield - /obj/item/gun/energy/e_gun/mini name = "miniature energy gun" desc = "A small, pistol-sized energy gun with a built-in flashlight. It has two settings: disable and kill." diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 0c02e2ff90e8..8e3774737c06 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -75,7 +75,6 @@ item_state = "shotgun" desc = "A combat shotgun gutted and refitted with an internal laser system. Can switch between taser and scattered disabler shots." shaded_charge = 0 - pin = /obj/item/firing_pin/implant/mindshield ammo_type = list(/obj/item/ammo_casing/energy/disabler/scatter, /obj/item/ammo_casing/energy/electrode) manufacturer = MANUFACTURER_NONE @@ -97,9 +96,6 @@ ammo_x_offset = 3 manufacturer = MANUFACTURER_SHARPLITE -/obj/item/gun/energy/lasercannon/unrestricted - pin = /obj/item/firing_pin - /obj/item/ammo_casing/energy/laser/accelerator projectile_type = /obj/projectile/beam/laser/accelerator select_name = "accelerator" @@ -135,7 +131,6 @@ ammo_type = list(/obj/item/ammo_casing/energy/laser/bluetag) item_flags = NONE clumsy_check = FALSE - pin = /obj/item/firing_pin/tag/blue ammo_x_offset = 2 selfcharge = TRUE manufacturer = MANUFACTURER_NONE @@ -150,7 +145,6 @@ ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag) item_flags = NONE clumsy_check = FALSE - pin = /obj/item/firing_pin/tag/red ammo_x_offset = 2 selfcharge = TRUE manufacturer = MANUFACTURER_NONE diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index f5efacbf96c3..fe5a85131ac5 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -24,26 +24,6 @@ /obj/item/gun/energy/pulse/emp_act(severity) return -/obj/item/gun/energy/pulse/prize - pin = /obj/item/firing_pin - -/obj/item/gun/energy/pulse/prize/Initialize() - . = ..() - GLOB.poi_list += src - var/turf/T = get_turf(src) - - message_admins("A pulse rifle prize has been created at [ADMIN_VERBOSEJMP(T)]") - log_game("A pulse rifle prize has been created at [AREACOORD(T)]") - - notify_ghosts("Someone won a pulse rifle as a prize!", source = src, action = NOTIFY_ORBIT, header = "Pulse rifle prize") - -/obj/item/gun/energy/pulse/prize/Destroy() - GLOB.poi_list -= src - . = ..() - -/obj/item/gun/energy/pulse/loyalpin - pin = /obj/item/firing_pin - /obj/item/gun/energy/pulse/carbine name = "pulse carbine" desc = "A next-generation pulse weapon for Nanotrasen's security forces. High production costs and logistical issues have limited its deployment to specialist Loss Prevention and Emergency Response units." @@ -61,9 +41,6 @@ ammo_x_offset = 2 charge_sections = 4 -/obj/item/gun/energy/pulse/carbine/loyalpin - pin = /obj/item/firing_pin/implant/mindshield - /obj/item/gun/energy/pulse/pistol name = "pulse pistol" desc = "A pulse rifle in an easily concealed handgun package with low capacity." @@ -76,9 +53,6 @@ ammo_x_offset = 2 charge_sections = 4 -/obj/item/gun/energy/pulse/pistol/loyalpin - pin = /obj/item/firing_pin/implant/mindshield - /obj/item/gun/energy/pulse/destroyer name = "pulse destroyer" desc = "A heavy-duty energy rifle built for pure destruction." diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 5a01abfdc0f1..d8291feae088 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -44,10 +44,6 @@ if(!QDELETED(cell) && (cell.charge > shot.e_cost)) . += "decloner_spin" -/obj/item/gun/energy/decloner/unrestricted - pin = /obj/item/firing_pin - ammo_type = list(/obj/item/ammo_casing/energy/declone/weak) - /obj/item/gun/energy/floragun name = "floral somatoray" desc = "A tool that discharges controlled radiation which induces mutation in plant cells." @@ -341,7 +337,6 @@ /obj/item/gun/energy/temperature/security name = "security temperature gun" desc = "A weapon that can only be used to its full potential by the truly robust." - pin = /obj/item/firing_pin /obj/item/gun/energy/laser/instakill name = "instakill rifle" diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index fad4f485aa88..cdd54d60c579 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -82,7 +82,6 @@ cell_type = /obj/item/stock_parts/cell/infinite aiming_time = 0 recoil = 0 - pin = /obj/item/firing_pin /obj/item/gun/energy/beam_rifle/equipped(mob/user) set_user(user) diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm deleted file mode 100644 index 23093e5d8d51..000000000000 --- a/code/modules/projectiles/pins.dm +++ /dev/null @@ -1,343 +0,0 @@ -/obj/item/firing_pin - name = "electronic firing pin" - desc = "A small authentication device, to be inserted into a firearm receiver to allow operation. NT safety regulations require all new designs to incorporate one." - icon = 'icons/obj/device.dmi' - icon_state = "firing_pin" - item_state = "pen" - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_TINY - attack_verb = list("poked") - var/fail_message = "<span class='warning'>INVALID USER.</span>" - var/selfdestruct = 0 // Explode when user check is failed. - var/force_replace = 0 // Can forcefully replace other pins. - var/pin_removeable = 0 // Can be replaced by any pin. - var/obj/item/gun/gun - -/obj/item/firing_pin/New(newloc) - ..() - if(istype(newloc, /obj/item/gun)) - gun = newloc - -/obj/item/firing_pin/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag) - if(istype(target, /obj/item/gun)) - var/obj/item/gun/G = target - var/obj/item/firing_pin/old_pin = G.pin - if(old_pin && (force_replace || old_pin.pin_removeable)) - to_chat(user, "<span class='notice'>You remove [old_pin] from [G].</span>") - if(Adjacent(user)) - user.put_in_hands(old_pin) - else - old_pin.forceMove(G.drop_location()) - old_pin.gun_remove(user) - - if(!G.pin) - if(!user.temporarilyRemoveItemFromInventory(src)) - return - gun_insert(user, G) - to_chat(user, "<span class='notice'>You insert [src] into [G].</span>") - else - to_chat(user, "<span class='notice'>This firearm already has a firing pin installed.</span>") - -/obj/item/firing_pin/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - to_chat(user, "<span class='notice'>You override the authentication mechanism.</span>") - -/obj/item/firing_pin/proc/gun_insert(mob/living/user, obj/item/gun/G) - gun = G - forceMove(gun) - gun.pin = src - return - -/obj/item/firing_pin/proc/gun_remove(mob/living/user) - gun.pin = null - gun = null - return - -/obj/item/firing_pin/proc/pin_auth(mob/living/user) - return TRUE - -/obj/item/firing_pin/proc/auth_fail(mob/living/user) - if(user) - user.show_message(fail_message, MSG_VISUAL) - if(selfdestruct) - if(user) - user.show_message("<span class='danger'>SELF-DESTRUCTING...</span><br>", MSG_VISUAL) - to_chat(user, "<span class='userdanger'>[gun] explodes!</span>") - explosion(get_turf(gun), -1, 0, 2, 3) - if(gun) - qdel(gun) - - -/obj/item/firing_pin/magic - name = "magic crystal shard" - desc = "A small enchanted shard which allows magical weapons to fire." - - -// Test pin, works only near firing range. -/obj/item/firing_pin/test_range - name = "test-range firing pin" - desc = "This safety firing pin allows weapons to be fired within proximity to a firing range." - fail_message = "<span class='warning'>TEST RANGE CHECK FAILED.</span>" - pin_removeable = TRUE - -/obj/item/firing_pin/test_range/pin_auth(mob/living/user) - if(!istype(user)) - return FALSE - if (istype(get_area(user), /area/ship/security/range)) - return TRUE - return FALSE - - -// Implant pin, checks for implant -/obj/item/firing_pin/implant - name = "implant-keyed firing pin" - desc = "This is a security firing pin which only authorizes users who are implanted with a certain device." - fail_message = "<span class='warning'>IMPLANT CHECK FAILED.</span>" - var/obj/item/implant/req_implant = null - -/obj/item/firing_pin/implant/pin_auth(mob/living/user) - if(user) - for(var/obj/item/implant/I in user.implants) - if(req_implant && I.type == req_implant) - return TRUE - return FALSE - -/obj/item/firing_pin/implant/mindshield - name = "mindshield firing pin" - desc = "This Security firing pin authorizes the weapon for only mindshield-implanted users." - icon_state = "firing_pin_loyalty" - req_implant = /obj/item/implant/mindshield - -/obj/item/firing_pin/implant/pindicate - name = "syndicate firing pin" - icon_state = "firing_pin_pindi" - req_implant = /obj/item/implant/weapons_auth - - - -// Honk pin, clown's joke item. -// Can replace other pins. Replace a pin in cap's laser for extra fun! -/obj/item/firing_pin/clown - name = "hilarious firing pin" - desc = "Advanced clowntech that can convert any firearm into a far more useful object." - color = "#FFFF00" - fail_message = "<span class='warning'>HONK!</span>" - force_replace = TRUE - -/obj/item/firing_pin/clown/pin_auth(mob/living/user) - playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) - return FALSE - -// Ultra-honk pin, clown's deadly joke item. -// A gun with ultra-honk pin is useful for clown and useless for everyone else. -/obj/item/firing_pin/clown/ultra - name = "ultra hilarious firing pin" - -/obj/item/firing_pin/clown/ultra/pin_auth(mob/living/user) - playsound(src.loc, 'sound/items/bikehorn.ogg', 50, TRUE) - if(QDELETED(user)) //how the hell...? - stack_trace("/obj/item/firing_pin/clown/ultra/pin_auth called with a [isnull(user) ? "null" : "invalid"] user.") - return TRUE - if(HAS_TRAIT(user, TRAIT_CLUMSY)) //clumsy - return TRUE - if(user.mind) - if(user.mind.assigned_role == "Clown") //traitor clowns can use this, even though they're technically not clumsy - return TRUE - if(user.mind.has_antag_datum(/datum/antagonist/nukeop/clownop)) //clown ops aren't clumsy by default and technically don't have an assigned role of "Clown", but come on, they're basically clowns - return TRUE - if(user.mind.has_antag_datum(/datum/antagonist/nukeop/leader/clownop)) //Wanna hear a funny joke? - return TRUE //The clown op leader antag datum isn't a subtype of the normal clown op antag datum. - return FALSE - -/obj/item/firing_pin/clown/ultra/gun_insert(mob/living/user, obj/item/gun/G) - ..() - G.clumsy_check = FALSE - -/obj/item/firing_pin/clown/ultra/gun_remove(mob/living/user) - gun.clumsy_check = initial(gun.clumsy_check) - ..() - -// Now two times deadlier! -/obj/item/firing_pin/clown/ultra/selfdestruct - name = "super ultra hilarious firing pin" - desc = "Advanced clowntech that can convert any firearm into a far more useful object. It has a small nitrobananium charge on it." - selfdestruct = TRUE - - -// DNA-keyed pin. -// When you want to keep your toys for yourself. -/obj/item/firing_pin/dna - name = "DNA-keyed firing pin" - desc = "This is a DNA-locked firing pin which only authorizes one user. Attempt to fire once to DNA-link." - icon_state = "firing_pin_dna" - fail_message = "<span class='warning'>DNA CHECK FAILED.</span>" - var/unique_enzymes = null - -/obj/item/firing_pin/dna/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag && iscarbon(target)) - var/mob/living/carbon/M = target - if(M.dna && M.dna.unique_enzymes) - unique_enzymes = M.dna.unique_enzymes - to_chat(user, "<span class='notice'>DNA-LOCK SET.</span>") - -/obj/item/firing_pin/dna/pin_auth(mob/living/carbon/user) - if(user && user.dna && user.dna.unique_enzymes) - if(user.dna.unique_enzymes == unique_enzymes) - return TRUE - return FALSE - -/obj/item/firing_pin/dna/auth_fail(mob/living/carbon/user) - if(!unique_enzymes) - if(user && user.dna && user.dna.unique_enzymes) - unique_enzymes = user.dna.unique_enzymes - to_chat(user, "<span class='notice'>DNA-LOCK SET.</span>") - else - ..() - -/obj/item/firing_pin/dna/dredd - desc = "This is a DNA-locked firing pin which only authorizes one user. Attempt to fire once to DNA-link. It has a small explosive charge on it." - selfdestruct = TRUE - -// Paywall pin, brought to you by ARMA 3 DLC. -// Checks if the user has a valid bank account on an ID and if so attempts to extract a one-time payment to authorize use of the gun. Otherwise fails to shoot. -/obj/item/firing_pin/paywall - name = "paywall firing pin" - desc = "A firing pin with a built-in configurable paywall." - color = "#FFD700" - fail_message = "" - var/list/gun_owners = list() //list of people who've accepted the license prompt. If this is the multi-payment pin, then this means they accepted the waiver that each shot will cost them money - var/payment_amount //how much gets paid out to license yourself to the gun - var/obj/item/card/id/pin_owner - var/multi_payment = FALSE //if true, user has to pay everytime they fire the gun - var/owned = FALSE - var/active_prompt = FALSE //purchase prompt to prevent spamming it - -/obj/item/firing_pin/paywall/attack_self(mob/user) - multi_payment = !multi_payment - to_chat(user, "<span class='notice'>You set the pin to [(multi_payment) ? "process payment for every shot" : "one-time license payment"].</span>") - -/obj/item/firing_pin/paywall/examine(mob/user) - . = ..() - if(pin_owner) - . += "<span class='notice'>This firing pin is currently authorized to pay into the account of [pin_owner.registered_name].</span>" - -/obj/item/firing_pin/paywall/gun_insert(mob/living/user, obj/item/gun/G) - if(!pin_owner) - to_chat(user, "<span class='warning'>ERROR: Please swipe valid identification card before installing firing pin!</span>") - return - gun = G - forceMove(gun) - gun.pin = src - if(multi_payment) - gun.desc += "<span class='notice'> This [gun.name] has a per-shot cost of [payment_amount] credit[(payment_amount > 1) ? "s" : ""].</span>" - return - gun.desc += "<span class='notice'> This [gun.name] has a license permit cost of [payment_amount] credit[(payment_amount > 1) ? "s" : ""].</span>" - return - - -/obj/item/firing_pin/paywall/gun_remove(mob/living/user) - gun.desc = initial(desc) - ..() - -/obj/item/firing_pin/paywall/attackby(obj/item/M, mob/user, params) - if(istype(M, /obj/item/card/id)) - var/obj/item/card/id/id = M - if(!id.registered_account) - to_chat(user, "<span class='warning'>ERROR: Identification card lacks registered bank account!</span>") - return - if(id != pin_owner && owned) - to_chat(user, "<span class='warning'>ERROR: This firing pin has already been authorized!</span>") - return - if(id == pin_owner) - to_chat(user, "<span class='notice'>You unlink the card from the firing pin.</span>") - gun_owners -= user - pin_owner = null - owned = FALSE - return - var/transaction_amount = input(user, "Insert valid deposit amount for gun purchase", "Money Deposit") as null|num - if(transaction_amount < 1) - to_chat(user, "<span class='warning'>ERROR: Invalid amount designated.</span>") - return - if(!transaction_amount) - return - pin_owner = id - owned = TRUE - payment_amount = transaction_amount - gun_owners += user - to_chat(user, "<span class='notice'>You link the card to the firing pin.</span>") - -/obj/item/firing_pin/paywall/pin_auth(mob/living/user) - if(!istype(user))//nice try commie - return FALSE - if(ishuman(user)) - var/datum/bank_account/credit_card_details - var/mob/living/carbon/human/H = user - if(H.get_bank_account()) - credit_card_details = H.get_bank_account() - if(H in gun_owners) - if(multi_payment && credit_card_details) - if(credit_card_details.adjust_money(-payment_amount)) - pin_owner.registered_account.adjust_money(payment_amount) - return TRUE - to_chat(user, "<span class='warning'>ERROR: User balance insufficent for successful transaction!</span>") - return FALSE - return TRUE - if(credit_card_details && !active_prompt) - var/license_request = alert(usr, "Do you wish to pay [payment_amount] credit[(payment_amount > 1) ? "s" : ""] for [(multi_payment) ? "each shot of [gun.name]" : "usage license of [gun.name]"]?", "Weapon Purchase", "Yes", "No") - active_prompt = TRUE - if(!user.canUseTopic(src, BE_CLOSE)) - active_prompt = FALSE - return FALSE - switch(license_request) - if("Yes") - if(credit_card_details.adjust_money(-payment_amount)) - pin_owner.registered_account.adjust_money(payment_amount) - gun_owners += H - to_chat(user, "<span class='notice'>Gun license purchased, have a secure day!</span>") - active_prompt = FALSE - return FALSE //we return false here so you don't click initially to fire, get the prompt, accept the prompt, and THEN the gun - to_chat(user, "<span class='warning'>ERROR: User balance insufficent for successful transaction!</span>") - return FALSE - if("No") - to_chat(user, "<span class='warning'>ERROR: User has declined to purchase gun license!</span>") - return FALSE - to_chat(user, "<span class='warning'>ERROR: User has no valid bank account to substract neccesary funds from!</span>") - return FALSE - -// Laser tag pins -/obj/item/firing_pin/tag - name = "laser tag firing pin" - desc = "A recreational firing pin, used in laser tag units to ensure users have their vests on." - fail_message = "<span class='warning'>SUIT CHECK FAILED.</span>" - var/obj/item/clothing/suit/suit_requirement = null - var/tagcolor = "" - -/obj/item/firing_pin/tag/pin_auth(mob/living/user) - if(ishuman(user)) - var/mob/living/carbon/human/M = user - if(istype(M.wear_suit, suit_requirement)) - return TRUE - to_chat(user, "<span class='warning'>You need to be wearing [tagcolor] laser tag armor!</span>") - return FALSE - -/obj/item/firing_pin/tag/red - name = "red laser tag firing pin" - icon_state = "firing_pin_red" - suit_requirement = /obj/item/clothing/suit/redtag - tagcolor = "red" - -/obj/item/firing_pin/tag/blue - name = "blue laser tag firing pin" - icon_state = "firing_pin_blue" - suit_requirement = /obj/item/clothing/suit/bluetag - tagcolor = "blue" - -/obj/item/firing_pin/Destroy() - if(gun) - gun.pin = null - return ..() diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm index d2fb11bfef4b..6656e9e37b49 100644 --- a/code/modules/vending/liberation.dm +++ b/code/modules/vending/liberation.dm @@ -13,7 +13,7 @@ /obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2, /obj/item/gun/ballistic/automatic/pistol/deagle/camo = 2, /obj/item/gun/ballistic/automatic/pistol/m1911 = 2, - /obj/item/gun/ballistic/automatic/smg/proto/unrestricted = 2, + /obj/item/gun/ballistic/automatic/smg/proto = 2, /obj/item/gun/ballistic/shotgun/automatic/combat = 2, /obj/item/gun/ballistic/automatic/gyropistol = 1, /obj/item/gun/ballistic/shotgun = 2, diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 90df6b673b16..23a65a503c96 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -6,9 +6,9 @@ product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" circuit = /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor - products = list(/obj/item/gun/ballistic/automatic/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, + products = list(/obj/item/gun/ballistic/automatic/toy = 10, + /obj/item/gun/ballistic/automatic/toy/pistol = 10, + /obj/item/gun/ballistic/shotgun/toy = 10, /obj/item/toy/sword = 10, /obj/item/ammo_box/foambox = 20, /obj/item/toy/foamblade = 10, @@ -17,8 +17,8 @@ /obj/item/clothing/head/syndicatefake = 5) //OPS IN DORMS oh wait it's just an assistant contraband = list( /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, //Congrats, you unlocked the +18 setting! - /obj/item/gun/ballistic/automatic/smg/c20r/toy/unrestricted/riot = 10, - /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/unrestricted/riot = 10, + /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot = 10, + /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/riot = 10, /obj/item/ammo_box/foambox/riot = 20, /obj/item/toy/katana = 10, /obj/item/dualsaber/toy = 5, diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index d71dcae5ab41..482071c8b520 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -134,10 +134,10 @@ /obj/item/melee/transforming/energy/sword/saber/red = 1, ) voucher_items = list( - "M-90gl Carbine" = /obj/item/gun/ballistic/automatic/smg/m90/unrestricted, + "M-90gl Carbine" = /obj/item/gun/ballistic/automatic/smg/m90, "sniper rifle" = /obj/item/gun/ballistic/automatic/sniper_rifle, - "C-20r SMG" = /obj/item/gun/ballistic/automatic/smg/c20r/unrestricted, - "Bulldog Shotgun" = /obj/item/gun/ballistic/shotgun/bulldog/unrestricted) + "C-20r SMG" = /obj/item/gun/ballistic/automatic/smg/c20r, + "Bulldog Shotgun" = /obj/item/gun/ballistic/shotgun/bulldog) /obj/machinery/vending/security/marine/nanotrasen icon_state = "nt-marine" diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index 8a938b50d435..a497afacc5e4 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -8,9 +8,9 @@ light_mask = "donksoft-light-mask" circuit = /obj/item/circuitboard/machine/vending/donksofttoyvendor products = list( - /obj/item/gun/ballistic/automatic/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, + /obj/item/gun/ballistic/automatic/toy = 10, + /obj/item/gun/ballistic/automatic/toy/pistol = 10, + /obj/item/gun/ballistic/shotgun/toy = 10, /obj/item/toy/sword = 10, /obj/item/ammo_box/foambox = 20, /obj/item/toy/foamblade = 10, @@ -19,8 +19,8 @@ /obj/item/clothing/head/syndicatefake = 5) contraband = list( /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, - /obj/item/gun/ballistic/automatic/smg/c20r/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/unrestricted = 10, + /obj/item/gun/ballistic/automatic/smg/c20r/toy = 10, + /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy = 10, /obj/item/toy/katana = 10, /obj/item/dualsaber/toy = 5) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) diff --git a/shiptest.dme b/shiptest.dme index 543b4322394d..580d8162e721 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2934,7 +2934,6 @@ #include "code\modules\power\tesla\energy_ball.dm" #include "code\modules\power\tesla\generator.dm" #include "code\modules\projectiles\gun.dm" -#include "code\modules\projectiles\pins.dm" #include "code\modules\projectiles\projectile.dm" #include "code\modules\projectiles\ammunition\_ammunition.dm" #include "code\modules\projectiles\ammunition\_firing.dm" From 475643850c2ad8235d981b6c6600574464331411 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 17:31:55 -0600 Subject: [PATCH 47/89] hm --- code/modules/unit_tests/gun_crafting.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/unit_tests/gun_crafting.dm b/code/modules/unit_tests/gun_crafting.dm index 3dc74430681c..31ee1edc2285 100644 --- a/code/modules/unit_tests/gun_crafting.dm +++ b/code/modules/unit_tests/gun_crafting.dm @@ -1,12 +1,11 @@ //Makes sure preinstalled frame parts can be removed an reinstalled /datum/unit_test/gun_crafting/Run() -/* var/list/guns = typesof(/obj/item/gun/ballistic) for(var/gunType in guns) var/obj/item/gun/ballistic/G = new gunType if(G.magazine) - TEST_FAIL("Gun: [G.type], Magazine: [G.magazine.type], Caliber: [G.magazine.caliber]") -*/ + TEST_FAIL("[G.type], Mag: [G.magazine.type], Cali: [G.magazine.caliber]") +/* var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) for(var/frame_type in subtypesof(/obj/item/part/gun/frame)) var/obj/item/part/gun/frame/frame = new frame_type @@ -15,3 +14,4 @@ frame.eject_item(installedPart, human) frame.handle_part(installedPart, human) TEST_ASSERT_EQUAL(frame_parts, frame.installed_parts, "Frame parts to match there original contents. I assume frame parts were not reinstalled correctly.") +*/ From a049ff914082cfd6af65fe7d0af39dd01af0bfdb Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 17:38:14 -0600 Subject: [PATCH 48/89] oh the paths changed alot? --- code/modules/guncrafting/recipe.dm | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index 1b1dfa7ed5a5..1072dd7b4777 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -28,6 +28,16 @@ var/list/valid_parts = list() var/required_part_types = ALL +/datum/lathe_recipe/gun/m1911 + result = /obj/item/gun/ballistic/automatic/pistol/m1911 + valid_parts = list( + /obj/item/part/gun/frame/m1911, + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism/pistol, + /obj/item/part/gun/modular/barrel/pistol + ) + +/* /datum/lathe_recipe/gun/winchester result = /obj/item/gun/ballistic/shotgun/winchester valid_parts = list( @@ -46,15 +56,6 @@ /obj/item/part/gun/modular/barrel/rifle ) -/datum/lathe_recipe/gun/m1911 - result = /obj/item/gun/ballistic/automatic/pistol/m1911 - valid_parts = list( - /obj/item/part/gun/frame/m1911, - /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/pistol, - /obj/item/part/gun/modular/barrel/pistol - ) - /datum/lathe_recipe/gun/tec9 result = /obj/item/gun/ballistic/automatic/pistol/tec9 valid_parts = list( @@ -126,3 +127,4 @@ /obj/item/part/gun/modular/mechanism, /obj/item/part/gun/modular/barrel ) +*/ From 54ec41868c48dc9d897945efc021311e61139906 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 17:41:00 -0600 Subject: [PATCH 49/89] yea --- code/modules/guncrafting/frame.dm | 4 ++-- code/modules/guncrafting/recipe.dm | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index cf05f893bfff..de54637a7190 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -192,8 +192,8 @@ /obj/item/part/gun/frame/winchester/mk1 name = "winchester mk1 gun frame" -/obj/item/part/gun/frame/m1911 - name = "m1911 gun frame" +/obj/item/part/gun/frame/candor + name = "candor gun frame" preinstalled_parts = list( /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/pistol, diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index 1072dd7b4777..2fea8240799c 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -28,10 +28,10 @@ var/list/valid_parts = list() var/required_part_types = ALL -/datum/lathe_recipe/gun/m1911 - result = /obj/item/gun/ballistic/automatic/pistol/m1911 +/datum/lathe_recipe/gun/candor + result = /obj/item/gun/ballistic/automatic/pistol/candor valid_parts = list( - /obj/item/part/gun/frame/m1911, + /obj/item/part/gun/frame/candor, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/pistol, /obj/item/part/gun/modular/barrel/pistol From f6af1222b0c796596321de246a3282253e52626d Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 17:43:19 -0600 Subject: [PATCH 50/89] candor --- code/modules/guncrafting/guncrafting.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/guncrafting/guncrafting.dm b/code/modules/guncrafting/guncrafting.dm index 423fb6f1a28a..84975f846d7f 100644 --- a/code/modules/guncrafting/guncrafting.dm +++ b/code/modules/guncrafting/guncrafting.dm @@ -44,7 +44,7 @@ new /obj/item/part/gun/modular/mechanism/shotgun(src) new /obj/item/part/gun/modular/barrel/shotgun(src) new /obj/item/part/gun/frame(src) - new /obj/item/part/gun/frame/m1911(src) + new /obj/item/part/gun/frame/candor(src) new /obj/item/part/gun/modular/grip/wood(src) new /obj/item/part/gun/modular/mechanism(src) new /obj/item/part/gun/modular/barrel(src) From f39fe7e454b3372041af7c2d7043c498006fcbdd Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 18:04:49 -0600 Subject: [PATCH 51/89] firing pins are the devil i think --- .../icemoon_underground_oldstation.dmm | 1 - _maps/RandomRuins/SpaceRuins/oldstation.dmm | 1 - .../shuttles/nanotrasen/nanotrasen_mimir.dmm | 1 - _maps/shuttles/pirate/pirate_ember.dmm | 4 -- .../syndicate/syndicate_gorlex_komodo.dmm | 3 -- code/__DEFINES/dcs/signals.dm | 2 - code/datums/components/gunpoint.dm | 3 -- code/datums/components/sitcomlaughter.dm | 2 +- code/game/machinery/computer/arcade.dm | 6 --- .../game/objects/items/storage/uplink_kits.dm | 3 -- .../crates_lockers/closets/secure/security.dm | 2 - .../mission_code/stationCollision.dm | 2 - code/modules/cargo/packs/gun.dm | 19 --------- code/modules/projectiles/gun.dm | 14 ------- .../projectiles/guns/ballistic/revolver.dm | 12 ------ .../modules/projectiles/guns/ballistic/smg.dm | 1 - .../modules/projectiles/guns/ballistic/toy.dm | 4 -- .../projectiles/guns/energy/energy_gun.dm | 1 - code/modules/projectiles/guns/energy/laser.dm | 5 --- .../projectiles/guns/energy/special.dm | 5 --- code/modules/projectiles/guns/magic.dm | 2 - .../projectiles/guns/misc/beam_rifle.dm | 1 - .../projectiles/guns/misc/blastcannon.dm | 6 --- .../modules/projectiles/guns/misc/chem_gun.dm | 1 - .../projectiles/guns/misc/syringe_gun.dm | 1 - code/modules/projectiles/guns/powered.dm | 4 -- .../research/designs/weapon_designs.dm | 30 -------------- .../ruins/spaceruin_code/forgottenship.dm | 8 ---- .../spells/spell_types/rightandwrong.dm | 2 - code/modules/uplink/uplink_items.dm | 40 ------------------- 30 files changed, 1 insertion(+), 185 deletions(-) diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_oldstation.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_oldstation.dmm index b63742662227..84adfe2c8cbb 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_oldstation.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_oldstation.dmm @@ -3941,7 +3941,6 @@ /obj/machinery/light/small/directional/east, /obj/item/assembly/flash/handheld, /obj/item/assembly/flash/handheld, -/obj/item/storage/box/firingpins, /obj/structure/closet/crate/secure/weapon{ req_access_txt = "203" }, diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 1b9136861194..898e1b41f989 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -8428,7 +8428,6 @@ /obj/machinery/light/small/directional/east, /obj/item/assembly/flash/handheld, /obj/item/assembly/flash/handheld, -/obj/item/storage/box/firingpins, /obj/structure/closet/crate/secure/weapon{ req_access_txt = "203" }, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm index 8f7fb343e1a4..126eb82ccd6f 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm @@ -3249,7 +3249,6 @@ /obj/item/storage/box/handcuffs, /obj/item/storage/box/handcuffs, /obj/item/storage/box/prisoner, -/obj/item/storage/box/firingpins, /obj/item/storage/box/seccarts, /obj/item/storage/box/teargas, /obj/item/storage/box/zipties, diff --git a/_maps/shuttles/pirate/pirate_ember.dmm b/_maps/shuttles/pirate/pirate_ember.dmm index f114c64f153f..afc537e6e6ff 100644 --- a/_maps/shuttles/pirate/pirate_ember.dmm +++ b/_maps/shuttles/pirate/pirate_ember.dmm @@ -4032,10 +4032,6 @@ pixel_y = 7; pixel_x = 4 }, -/obj/item/storage/box/firingpins{ - pixel_x = -6; - pixel_y = 4 - }, /obj/item/storage/box/syndie_kit/throwing_weapons, /obj/machinery/light/directional/south, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index 68ee81cb02f2..6c86468d04ac 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -1739,9 +1739,6 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/airalarm/directional/south, -/obj/item/storage/box/firingpins{ - pixel_x = 21 - }, /obj/item/clothing/glasses/night{ pixel_y = 6 }, diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 004b2f23fedf..07c5f1d83835 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -447,8 +447,6 @@ ///From /datum/component/creamed/Initialize() #define COMSIG_MOB_CREAMED "mob_creamed" -///From /obj/item/gun/proc/check_botched() -#define COMSIG_MOB_CLUMSY_SHOOT_FOOT "mob_clumsy_shoot_foot" ///When a carbon mob hugs someone, this is called on the carbon that is hugging. (mob/living/hugger, mob/living/hugged) #define COMSIG_CARBON_HUG "carbon_hug" diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm index 2865865c98ab..26bbb641a8eb 100644 --- a/code/datums/components/gunpoint.dm +++ b/code/datums/components/gunpoint.dm @@ -126,9 +126,6 @@ if(weapon.chambered && weapon.chambered.BB) weapon.chambered.BB.damage *= damage_mult - if(weapon.check_botched(shooter)) - return - weapon.process_fire(target, shooter) qdel(src) diff --git a/code/datums/components/sitcomlaughter.dm b/code/datums/components/sitcomlaughter.dm index 8dfef21b749d..8a5c32d2e2d1 100644 --- a/code/datums/components/sitcomlaughter.dm +++ b/code/datums/components/sitcomlaughter.dm @@ -1,6 +1,6 @@ /datum/component/wearertargeting/sitcomlaughter valid_slots = list(ITEM_SLOT_HANDS, ITEM_SLOT_BELT, ITEM_SLOT_ID, ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET, ITEM_SLOT_SUITSTORE, ITEM_SLOT_DEX_STORAGE) - signals = list(COMSIG_MOB_CREAMED, COMSIG_ON_CARBON_SLIP, COMSIG_ON_VENDOR_CRUSH, COMSIG_MOB_CLUMSY_SHOOT_FOOT) + signals = list(COMSIG_MOB_CREAMED, COMSIG_ON_CARBON_SLIP, COMSIG_ON_VENDOR_CRUSH) proctype = PROC_REF(EngageInComedy) mobtype = /mob/living ///Sounds used for when user has a sitcom action occur diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 571d5b090da9..f0d03e645a1d 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -88,12 +88,6 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( prizes *= 2 for(var/i = 0, i < prizes, i++) SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "arcade", /datum/mood_event/arcade) - if(prob(0.0001)) //1 in a million - new /obj/item/gun/energy/pulse/prize(src) - visible_message("<span class='notice'>[src] dispenses.. woah, a gun! Way past cool.</span>", "<span class='notice'>You hear a chime and a shot.</span>") - user.client.give_award(/datum/award/achievement/misc/pulse, user) - return - var/prizeselect if(prize_override) prizeselect = pickweight(prize_override) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index cc070ba21d5c..08b9a4f86d81 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -519,9 +519,6 @@ for(var/i in 1 to 3) new/obj/item/grenade/chem_grenade/ez_clean(src) -/obj/item/storage/box/hug/reverse_revolver/PopulateContents() - new /obj/item/gun/ballistic/revolver/reverse(src) - /obj/item/storage/box/syndie_kit/mimery/PopulateContents() new /obj/item/book/granter/spell/mimery_blockade(src) new /obj/item/book/granter/spell/mimery_guns(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 66b803e7d041..caeec2241a67 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -296,7 +296,6 @@ /obj/structure/closet/secure_closet/armory2/PopulateContents() ..() - new /obj/item/storage/box/firingpins(src) for(var/i in 1 to 3) new /obj/item/storage/box/rubbershot(src) for(var/i in 1 to 3) @@ -309,7 +308,6 @@ /obj/structure/closet/secure_closet/armory3/PopulateContents() ..() - new /obj/item/storage/box/firingpins(src) new /obj/item/gun/energy/ionrifle(src) for(var/i in 1 to 3) new /obj/item/gun/energy/e_gun(src) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index 4312d2f89f48..063966c86d63 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -44,7 +44,6 @@ icon_state = "retro" desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces." // projectile_type = "/obj/projectile/practice" - clumsy_check = 0 //No sense in having a harmless gun blow up in the clowns face //Syndicate sub-machine guns. /obj/item/gun/ballistic/automatic/smg/c20r/sc_c20r @@ -68,7 +67,6 @@ /obj/item/gun/energy/laser/practice/sc_laser name = "Old laser" desc = "A once potent weapon, years of dust have collected in the chamber and lens of this weapon, weakening the beam significantly." - clumsy_check = 0 /* * Safe code hints diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm index 6ca715889855..45c8d9ba371c 100644 --- a/code/modules/cargo/packs/gun.dm +++ b/code/modules/cargo/packs/gun.dm @@ -147,22 +147,3 @@ contains = list(/obj/item/gun/ballistic/automatic/assault/ak47, /obj/item/gun/ballistic/automatic/assault/ak47) crate_name = "auto rifle crate" - -/* - Firing pins -*/ - -/datum/supply_pack/gun/firingpins - name = "Standard Firing Pins Crate" - desc = "Upgrade your arsenal with 10 standard firing pins." - cost = 2000 - contains = list(/obj/item/storage/box/firingpins, - /obj/item/storage/box/firingpins) - crate_name = "firing pins crate" - -/datum/supply_pack/gun/lasertag_pins - name = "Laser Tag Firing Pins Crate" - desc = "Three laser tag firing pins used in laser-tag units to ensure users are wearing their vests." - cost = 1500 - contains = list(/obj/item/storage/box/lasertagpins) - crate_name = "laser tag pin crate" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4402a88ead17..3201211fdc5e 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -314,9 +314,6 @@ shoot_with_empty_chamber(user) return - if(check_botched(user)) - return - if(weapon_weight == WEAPON_HEAVY && (!wielded)) to_chat(user, "<span class='warning'>You need a more secure grip to fire [src]!</span>") return @@ -335,17 +332,6 @@ return process_fire(target, user, TRUE, params, null, bonus_spread) -/obj/item/gun/proc/check_botched(mob/living/user, params) - if(clumsy_check) - if(istype(user)) - if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40)) - to_chat(user, "<span class='userdanger'>You shoot yourself in the foot with [src]!</span>") - var/shot_leg = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - process_fire(user, user, FALSE, params, shot_leg) - SEND_SIGNAL(user, COMSIG_MOB_CLUMSY_SHOOT_FOOT) - user.dropItemToGround(src, TRUE) - return TRUE - /obj/item/gun/proc/recharge_newshot() return diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 57b088fc16b7..d5cad1c23b48 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -316,18 +316,6 @@ return user.visible_message("<span class='danger'>[user.name]'s soul is captured by \the [src]!</span>", "<span class='userdanger'>You've lost the gamble! Your soul is forfeit!</span>") -/obj/item/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course. - clumsy_check = 0 - -/obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown")) - return ..() - if(process_fire(user, user, FALSE, null, BODY_ZONE_HEAD)) - user.visible_message("<span class='warning'>[user] somehow manages to shoot [user.p_them()]self in the face!</span>", "<span class='userdanger'>You somehow shoot yourself in the face! How the hell?!</span>") - user.emote("scream") - user.drop_all_held_items() - user.Paralyze(80) - /obj/item/gun/ballistic/revolver/srm name = "SRM Standard Issue .357 Revolver" //should have used the pepperbox... desc = "A sturdy, powerful, and reliable revolver utilized by the Saint-Roumain Militia." diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm index 696a934e71c4..43944c0fcc50 100644 --- a/code/modules/projectiles/guns/ballistic/smg.dm +++ b/code/modules/projectiles/guns/ballistic/smg.dm @@ -18,7 +18,6 @@ icon_state = "saber" actions_types = list() mag_type = /obj/item/ammo_box/magazine/smgm9mm - pin = null bolt_type = BOLT_TYPE_LOCKING mag_display = TRUE manufacturer = MANUFACTURER_NANOTRASEN_OLD diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 4d1e7884225c..63c25c5d62f6 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -9,7 +9,6 @@ throwforce = 0 burst_size = 3 can_suppress = TRUE - clumsy_check = 0 item_flags = NONE casing_ejector = FALSE manufacturer = MANUFACTURER_NANOTRASEN @@ -49,7 +48,6 @@ throwforce = 0 mag_type = /obj/item/ammo_box/magazine/internal/shot/toy fire_sound = 'sound/items/syringeproj.ogg' - clumsy_check = FALSE item_flags = NONE casing_ejector = FALSE can_suppress = FALSE @@ -88,7 +86,6 @@ mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot fire_sound = 'sound/items/syringeproj.ogg' casing_ejector = FALSE - clumsy_check = FALSE manufacturer = MANUFACTURER_DONKCO recoil = -10 //its a toy... recoil_unwielded = -10 @@ -105,7 +102,6 @@ item_flags = NONE mag_type = /obj/item/ammo_box/magazine/toy/m762/riot casing_ejector = FALSE - clumsy_check = FALSE manufacturer = MANUFACTURER_DONKCO recoil = -10 //its a toy... recoil_unwielded = -10 diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index d8dbc159a8d0..e1887f0ea425 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -128,7 +128,6 @@ icon_state = "nucgun" item_state = "nucgun" charge_delay = 5 - pin = null can_charge = FALSE internal_cell = TRUE ammo_x_offset = 2 diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 8e3774737c06..3456eabe0901 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -18,7 +18,6 @@ name = "practice laser gun" desc = "A modified version of the L-204 laser gun, this one fires less concentrated energy bolts designed for target practice." ammo_type = list(/obj/item/ammo_casing/energy/laser/practice) - clumsy_check = TRUE item_flags = NONE /obj/item/gun/energy/laser/retro @@ -92,7 +91,6 @@ flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/laser/accelerator) - pin = null ammo_x_offset = 3 manufacturer = MANUFACTURER_SHARPLITE @@ -119,7 +117,6 @@ icon_state = "xray" item_state = null ammo_type = list(/obj/item/ammo_casing/energy/xray) - pin = null ammo_x_offset = 3 ////////Laser Tag//////////////////// @@ -130,7 +127,6 @@ desc = "A retro laser gun modified to fire harmless blue beams of light. Sound effects included!" ammo_type = list(/obj/item/ammo_casing/energy/laser/bluetag) item_flags = NONE - clumsy_check = FALSE ammo_x_offset = 2 selfcharge = TRUE manufacturer = MANUFACTURER_NONE @@ -144,7 +140,6 @@ desc = "A retro laser gun modified to fire harmless beams red of light. Sound effects included!" ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag) item_flags = NONE - clumsy_check = FALSE ammo_x_offset = 2 selfcharge = TRUE manufacturer = MANUFACTURER_NONE diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index d8291feae088..27b7b65b622d 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -25,7 +25,6 @@ slot_flags = ITEM_SLOT_BELT ammo_x_offset = 2 ammo_y_offset = 0 - pin = null can_flashlight = TRUE flight_x_offset = 18 flight_y_offset = 11 @@ -35,7 +34,6 @@ desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." icon_state = "decloner" ammo_type = list(/obj/item/ammo_casing/energy/declone) - pin = null ammo_x_offset = 1 /obj/item/gun/energy/decloner/update_overlays() @@ -63,7 +61,6 @@ w_class = WEIGHT_CLASS_BULKY ammo_type = list(/obj/item/ammo_casing/energy/meteor) cell_type = /obj/item/stock_parts/cell/potato - clumsy_check = 0 //Admin spawn only, might as well let clowns use it. selfcharge = 1 /obj/item/gun/energy/meteorgun/pen @@ -117,7 +114,6 @@ custom_materials = list(/datum/material/iron=4000) suppressed = null ammo_type = list(/obj/item/ammo_casing/energy/bolt/large) - pin = null manufacturer = MANUFACTURER_NONE @@ -332,7 +328,6 @@ ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) cell_type = /obj/item/stock_parts/cell/gun/upgraded ammo_x_offset = 2 - pin = null /obj/item/gun/energy/temperature/security name = "security temperature gun" diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 63c4ef8aa2d0..9360c24be499 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -17,9 +17,7 @@ var/can_charge = TRUE var/ammo_type var/no_den_usage - clumsy_check = 0 trigger_guard = TRIGGER_GUARD_ALLOW_ALL // Has no trigger at all, uses magic instead - pin = /obj/item/firing_pin/magic /obj/item/gun/magic/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) if(no_den_usage) diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index cdd54d60c579..8b6626bc5e97 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -32,7 +32,6 @@ big_gun = TRUE cell_type = "/obj/item/stock_parts/cell/gun/large" canMouseDown = TRUE - pin = null var/aiming = FALSE var/aiming_time = 12 var/aiming_time_fire_threshold = 5 diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index 888e680479ea..161aa216b866 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -8,7 +8,6 @@ force = 10 fire_sound = 'sound/weapons/blastcannon.ogg' item_flags = NONE - clumsy_check = FALSE randomspread = FALSE var/hugbox = TRUE @@ -26,11 +25,6 @@ debug_power = 80 bombcheck = FALSE -/obj/item/gun/blastcannon/Initialize() - . = ..() - if(!pin) - pin = new - /obj/item/gun/blastcannon/Destroy() QDEL_NULL(bomb) return ..() diff --git a/code/modules/projectiles/guns/misc/chem_gun.dm b/code/modules/projectiles/guns/misc/chem_gun.dm index 6d9c5eda699d..fef47121af5f 100644 --- a/code/modules/projectiles/guns/misc/chem_gun.dm +++ b/code/modules/projectiles/guns/misc/chem_gun.dm @@ -10,7 +10,6 @@ throw_range = 7 force = 4 custom_materials = list(/datum/material/iron=2000) - clumsy_check = FALSE fire_sound = 'sound/items/syringeproj.ogg' var/time_per_syringe = 250 var/syringes_left = 4 diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm index 34af73b855c6..96927eb91afc 100644 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ b/code/modules/projectiles/guns/misc/syringe_gun.dm @@ -8,7 +8,6 @@ throw_range = 7 force = 4 custom_materials = list(/datum/material/iron=2000) - clumsy_check = 0 fire_sound = 'sound/items/syringeproj.ogg' var/list/syringes = list() var/max_syringes = 1 diff --git a/code/modules/projectiles/guns/powered.dm b/code/modules/projectiles/guns/powered.dm index 698826436b18..ac7418748d9b 100644 --- a/code/modules/projectiles/guns/powered.dm +++ b/code/modules/projectiles/guns/powered.dm @@ -52,10 +52,6 @@ /obj/item/gun/ballistic/automatic/powered/get_cell() return cell -/obj/item/gun/ballistic/automatic/powered/nopin - pin = null - spawnwithmagazine = FALSE - //the things below were taken from energy gun code. blame whoever coded this, not me /obj/item/gun/ballistic/automatic/powered/attackby(obj/item/A, mob/user, params) if (!internal_cell && istype(A, /obj/item/stock_parts/cell/gun)) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 4d28452521af..68e9362fd424 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -67,36 +67,6 @@ category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_BALLISTICS -/datum/design/pin_testing - name = "Test-Range Firing Pin" - desc = "This safety firing pin allows firearms to be operated within proximity to a firing range." - id = "pin_testing" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 500, /datum/material/glass = 300) - build_path = /obj/item/firing_pin/test_range - category = list("Firing Pins") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/pin_mindshield - name = "Mindshield Firing Pin" - desc = "This is a security firing pin which only authorizes users who are mindshield-implanted." - id = "pin_loyalty" - build_type = PROTOLATHE - materials = list(/datum/material/silver = 600, /datum/material/diamond = 600, /datum/material/uranium = 200) - build_path = /obj/item/firing_pin/implant/mindshield - category = list("Firing Pins") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/pin - name = "Standard Firing Pin" - desc = "A simple, electronic firing pin which is required in most standardized modern weapons." - id = "pin_standard" - build_type = PROTOLATHE - materials = list(/datum/material/silver = 600, /datum/material/diamond = 600, /datum/material/uranium = 200) - build_path = /obj/item/firing_pin - category = list("Firing Pins") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_BALLISTICS - /datum/design/stunrevolver name = "Tesla Canon" desc = "A high-tech cannon that fires internal, reusable bolt cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers" diff --git a/code/modules/ruins/spaceruin_code/forgottenship.dm b/code/modules/ruins/spaceruin_code/forgottenship.dm index 8e3ae585d73d..def148f22239 100644 --- a/code/modules/ruins/spaceruin_code/forgottenship.dm +++ b/code/modules/ruins/spaceruin_code/forgottenship.dm @@ -47,14 +47,6 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) . = ..() AddComponent(/datum/component/gps, "Old Encrypted Signal") -/obj/item/storage/box/firingpins/syndicate - name = "box of syndicate firing pins" - desc = "A box full of special syndicate firing pins which allow only syndicate operatives to use weapons with those firing pins." - -/obj/item/storage/box/firingpins/syndicate/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/firing_pin/implant/pindicate(src) - /////////// AI Laws /obj/item/aiModule/core/full/cybersun diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index ee40b2782574..60ad5ce9399c 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -118,8 +118,6 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) var/gun_type = pick(GLOB.summoned_guns) var/obj/item/gun/G = new gun_type(get_turf(H)) - if (istype(G)) // The list contains some non-gun type guns like the speargun which do not have this proc - G.unlock() playsound(get_turf(H),'sound/magic/summon_guns.ogg', 50, TRUE) var/in_hand = H.put_in_hands(G) // not always successful diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 53b49ab30f0b..c045387546ed 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -365,22 +365,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) surplus = 0 include_modes = list(/datum/game_mode/nuclear/clown_ops) -/datum/uplink_item/dangerous/clownoppin - name = "Ultra Hilarious Firing Pin" - desc = "A firing pin that, when inserted into a gun, makes that gun only useable by clowns and clumsy people and makes that gun honk whenever anyone tries to fire it." - cost = 1 //much cheaper for clown ops than for clowns - item = /obj/item/firing_pin/clown/ultra - include_modes = list(/datum/game_mode/nuclear/clown_ops) - illegal_tech = FALSE - -/datum/uplink_item/dangerous/clownopsuperpin - name = "Super Ultra Hilarious Firing Pin" - desc = "Like the ultra hilarious firing pin, except the gun you insert this pin into explodes when someone who isn't clumsy or a clown tries to fire it." - cost = 4 //much cheaper for clown ops than for clowns - item = /obj/item/firing_pin/clown/ultra/selfdestruct - include_modes = list(/datum/game_mode/nuclear/clown_ops) - illegal_tech = FALSE - /datum/uplink_item/dangerous/bioterror name = "Biohazardous Chemical Sprayer" desc = "A handheld chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by the Tiger \ @@ -1952,30 +1936,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/reverse_bear_trap restricted_roles = list("Clown") -/datum/uplink_item/role_restricted/reverse_revolver - name = "Reverse Revolver" - desc = "A revolver that always fires at its user. \"Accidentally\" drop your weapon, then watch as the greedy corporate pigs blow their own brains all over the wall. \ - The revolver itself is actually real. Only clumsy people, and clowns, can fire it normally. Comes in a box of hugs. Honk." - cost = 14 - item = /obj/item/storage/box/hug/reverse_revolver - restricted_roles = list("Clown") - -/datum/uplink_item/role_restricted/clownpin - name = "Ultra Hilarious Firing Pin" - desc = "A firing pin that, when inserted into a gun, makes that gun only usable by clowns and clumsy people and makes that gun honk whenever anyone tries to fire it." - cost = 4 - item = /obj/item/firing_pin/clown/ultra - restricted_roles = list("Clown") - illegal_tech = FALSE - -/datum/uplink_item/role_restricted/clownsuperpin - name = "Super Ultra Hilarious Firing Pin" - desc = "Like the ultra hilarious firing pin, except the gun you insert this pin into explodes when someone who isn't clumsy or a clown tries to fire it." - cost = 7 - item = /obj/item/firing_pin/clown/ultra/selfdestruct - restricted_roles = list("Clown") - illegal_tech = FALSE - /datum/uplink_item/role_restricted/laser_arm name = "Laser Arm Implant" desc = "An implant that grants you a recharging laser gun inside your arm. Weak to EMPs. Comes with a syndicate autosurgeon for immediate self-application." From bc765fa2889342a63cf44b92274b66f65b71d1bc Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 18:12:53 -0600 Subject: [PATCH 52/89] ok no errors? --- _maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm | 2 +- _maps/shuttles/syndicate/syndicate_luxembourg.dmm | 2 +- code/game/objects/items/storage/uplink_kits.dm | 2 +- code/modules/vending/liberation_toy.dm | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm index 48f7614da429..c3d59b531da1 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm @@ -251,7 +251,7 @@ /area/ruin/powered) "ga" = ( /obj/structure/table/wood/reinforced, -/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot{ +/obj/item/gun/ballistic/automatic/smg/c20r/toy{ pixel_x = 5; pixel_y = 7 }, diff --git a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm b/_maps/shuttles/syndicate/syndicate_luxembourg.dmm index cff4c84386e0..991d2769c163 100644 --- a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm +++ b/_maps/shuttles/syndicate/syndicate_luxembourg.dmm @@ -831,7 +831,7 @@ /obj/structure/closet/crate/wooden/toy, /obj/item/ammo_box/magazine/toy/smgm45/riot, /obj/item/ammo_box/magazine/toy/smgm45/riot, -/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot, +/obj/item/gun/ballistic/automatic/smg/c20r/toy, /obj/item/soap/syndie, /obj/item/soap/syndie, /obj/item/soap/syndie, diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index d91fc622cd56..e47922ae3623 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -306,7 +306,7 @@ /obj/item/storage/box/syndie_kit/imp_radio, /obj/item/storage/box/syndie_kit/imp_uplink, /obj/item/clothing/gloves/krav_maga/combatglovesplus, - /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot, + /obj/item/gun/ballistic/automatic/smg/c20r/toy, /obj/item/reagent_containers/hypospray/medipen/stimulants, /obj/item/storage/box/syndie_kit/imp_freedom, /obj/item/toy/eightball/haunted diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 23a65a503c96..19301643fac4 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -17,7 +17,7 @@ /obj/item/clothing/head/syndicatefake = 5) //OPS IN DORMS oh wait it's just an assistant contraband = list( /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, //Congrats, you unlocked the +18 setting! - /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot = 10, + /obj/item/gun/ballistic/automatic/smg/c20r/toy = 10, /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/riot = 10, /obj/item/ammo_box/foambox/riot = 20, /obj/item/toy/katana = 10, From 6c3113db54e8f802b90a14dd34505af24d58e5a7 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 18:20:36 -0600 Subject: [PATCH 53/89] some more --- _maps/shuttles/nanotrasen/nanotrasen_ranger.dmm | 2 +- code/modules/research/techweb/all_nodes.dm | 13 ++----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index ed46e7e7ef1e..0bf245f53010 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -3117,7 +3117,7 @@ /area/ship/engineering) "Ha" = ( /obj/structure/closet/secure_closet/lp/lieutenant, -/obj/item/gun/energy/e_gun/mindshield{ +/obj/item/gun/energy/e_gun{ pixel_y = 1 }, /obj/item/stock_parts/cell/gun, diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 12ce53dc175d..769449c42bb5 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -641,7 +641,7 @@ display_name = "Weapon Development Technology" description = "Our researchers have found new ways to weaponize just about everything now." prereq_ids = list("engineering") - design_ids = list("pin_testing", "tele_shield","gun_cell") + design_ids = list("tele_shield","gun_cell") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) export_price = 5000 @@ -650,19 +650,10 @@ display_name = "Advanced Weapon Development Technology" description = "Our weapons are breaking the rules of reality by now." prereq_ids = list("adv_engi", "weaponry") - design_ids = list("pin_loyalty", "gun_cell_upgraded", "gun_cell_large") + design_ids = list("gun_cell_upgraded", "gun_cell_large") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) export_price = 5000 -/datum/techweb_node/firingpin - id = "firingpin" - display_name = "Pin Security Decompilation" - description = "A resource-intensive hacking operation, allowing for the creation of pins without a mindshield brake." - prereq_ids = list("adv_weaponry") - design_ids = list("pin_standard") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 15000) - export_price = 5000 - /datum/techweb_node/electric_weapons id = "electronic_weapons" display_name = "Electric Weapons" From 598154059e6d759ae459174ab69e34cdfebcde62 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 5 Feb 2024 18:38:51 -0600 Subject: [PATCH 54/89] than k you thingrvr :thumbsup: --- check_regex.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check_regex.yaml b/check_regex.yaml index df64dec9aae1..d19ee9828e4e 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -29,7 +29,7 @@ standards: - exactly: [1, "/area text paths", '"/area'] - exactly: [17, "/datum text paths", '"/datum'] - exactly: [4, "/mob text paths", '"/mob'] - - exactly: [44, "/obj text paths", '"/obj'] + - exactly: [43, "/obj text paths", '"/obj'] - exactly: [0, "/turf text paths", '"/turf'] - exactly: [117, "text2path uses", "text2path"] From 7547ca674920b482e5344523e7bb879d822b44c5 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 7 Feb 2024 13:25:26 -0600 Subject: [PATCH 55/89] proper foam darts where needed --- .../RandomRuins/RockRuins/rockplanet_harmfactory.dmm | 2 +- _maps/shuttles/syndicate/syndicate_luxembourg.dmm | 2 +- code/game/objects/items/storage/backpack.dm | 4 ++-- code/game/objects/items/storage/uplink_kits.dm | 2 +- code/modules/projectiles/guns/ballistic/toy.dm | 11 +++++++---- code/modules/uplink/uplink_items.dm | 4 ++-- code/modules/vending/liberation_toy.dm | 2 +- 7 files changed, 15 insertions(+), 12 deletions(-) diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm index c3d59b531da1..48f7614da429 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm @@ -251,7 +251,7 @@ /area/ruin/powered) "ga" = ( /obj/structure/table/wood/reinforced, -/obj/item/gun/ballistic/automatic/smg/c20r/toy{ +/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot{ pixel_x = 5; pixel_y = 7 }, diff --git a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm b/_maps/shuttles/syndicate/syndicate_luxembourg.dmm index 991d2769c163..cff4c84386e0 100644 --- a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm +++ b/_maps/shuttles/syndicate/syndicate_luxembourg.dmm @@ -831,7 +831,7 @@ /obj/structure/closet/crate/wooden/toy, /obj/item/ammo_box/magazine/toy/smgm45/riot, /obj/item/ammo_box/magazine/toy/smgm45/riot, -/obj/item/gun/ballistic/automatic/smg/c20r/toy, +/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot, /obj/item/soap/syndie, /obj/item/soap/syndie, /obj/item/soap/syndie, diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index b4ec267bd770..dc750fb15594 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -644,7 +644,7 @@ /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents() new /obj/item/clothing/shoes/magboots/syndie(src) new /obj/item/storage/firstaid/tactical(src) - new /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy(src) + new /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/riot(src) new /obj/item/ammo_box/foambox/riot(src) /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle @@ -654,7 +654,7 @@ new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src) new /obj/item/storage/box/syndie_kit/chemical(src) new /obj/item/gun/syringe/syndicate(src) - new /obj/item/gun/ballistic/automatic/smg/c20r/toy(src) + new /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot(src) new /obj/item/storage/box/syringes(src) new /obj/item/ammo_box/foambox/riot(src) new /obj/item/grenade/chem_grenade/bioterrorfoam(src) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index e47922ae3623..d91fc622cd56 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -306,7 +306,7 @@ /obj/item/storage/box/syndie_kit/imp_radio, /obj/item/storage/box/syndie_kit/imp_uplink, /obj/item/clothing/gloves/krav_maga/combatglovesplus, - /obj/item/gun/ballistic/automatic/smg/c20r/toy, + /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot, /obj/item/reagent_containers/hypospray/medipen/stimulants, /obj/item/storage/box/syndie_kit/imp_freedom, /obj/item/toy/eightball/haunted diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 63c25c5d62f6..95911c9269bc 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -78,29 +78,32 @@ recoil = -10 //its a toy... recoil_unwielded = -10 -/obj/item/gun/ballistic/automatic/smg/c20r/toy //This is the syndicate variant with syndicate firing pin and riot darts. +/obj/item/gun/ballistic/automatic/smg/c20r/toy name = "donksoft SMG" desc = "A bullpup two-round burst toy SMG, designated 'C-20r'. Ages 8 and up." can_suppress = FALSE item_flags = NONE - mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot + mag_type = /obj/item/ammo_box/magazine/toy/smgm45 fire_sound = 'sound/items/syringeproj.ogg' casing_ejector = FALSE manufacturer = MANUFACTURER_DONKCO recoil = -10 //its a toy... recoil_unwielded = -10 +/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot + mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot + /obj/item/gun/ballistic/automatic/smg/c20r/toy/update_overlays() . = ..() . += "[icon_state]_toy" -/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy //This is the syndicate variant with syndicate firing pin and riot darts. +/obj/item/gun/ballistic/automatic/hmg/l6_saw/toy name = "donksoft LMG" desc = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up." fire_sound = 'sound/items/syringeproj.ogg' can_suppress = FALSE item_flags = NONE - mag_type = /obj/item/ammo_box/magazine/toy/m762/riot + mag_type = /obj/item/ammo_box/magazine/toy/m762 casing_ejector = FALSE manufacturer = MANUFACTURER_DONKCO recoil = -10 //its a toy... diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 6943b4edd4e2..f58f94df84dd 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -516,7 +516,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/dangerous/foamsmg name = "Toy Submachine Gun" desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade darts with a 20-round magazine." - item = /obj/item/gun/ballistic/automatic/smg/c20r/toy + item = /obj/item/gun/ballistic/automatic/smg/c20r/toy/riot cost = 5 surplus = 0 include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) @@ -525,7 +525,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Toy Machine Gun" desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating \ riot grade darts, that can briefly incapacitate someone in just one volley." - item = /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy + item = /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/riot cost = 10 surplus = 0 include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 19301643fac4..8bf1121ee157 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -18,7 +18,7 @@ contraband = list( /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, //Congrats, you unlocked the +18 setting! /obj/item/gun/ballistic/automatic/smg/c20r/toy = 10, - /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy/riot = 10, + /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy = 10, /obj/item/ammo_box/foambox/riot = 20, /obj/item/toy/katana = 10, /obj/item/dualsaber/toy = 5, From a4604f455980a031c75f831de562a639892ea11a Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Thu, 29 Feb 2024 15:13:02 -0600 Subject: [PATCH 56/89] ya --- code/modules/guncrafting/frame.dm | 43 +++++++++++++++++++++---------- code/modules/guncrafting/lathe.dm | 4 ++- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index de54637a7190..6ab248e373f6 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -118,25 +118,42 @@ /obj/item/part/gun/frame/attack_self(mob/user) var/list/choose_options = list() var/list/option_results = list() + for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) var/obj/recipe_result = recipe.result - var/list/parts_for_craft = list() - for(var/obj/item/part/gun/part as anything in recipe.valid_parts) - var/part_type = initial(part.gun_part_type) - var/list/installed_types = get_part_types() - if(!(part_type in installed_types)) - parts_for_craft += " \a [initial(part.name)]" - if(length(parts_for_craft) != 0) - to_chat(user, span_warning("Parts needed for a [initial(recipe_result.name)]:")) - for(var/part in parts_for_craft) - to_chat(user, span_warning(part)) + var/list/missing_parts = get_missing_parts_for_recipe(recipe) + + if(length(missing_parts) != 0) + display_missing_parts_warning(user, recipe_result, missing_parts) else - to_chat(user, span_notice("You can craft a [initial(recipe_result.name)] with the parts installed.")) - choose_options += list("Craft [initial(recipe_result.name)]" = image(icon = initial(recipe_result.icon), icon_state = initial(recipe_result.icon_state))) - option_results["Craft [initial(recipe_result.name)]"] = recipe_result + add_recipe_to_options(user, recipe_result, choose_options, option_results) + if(length(choose_options) == 0) to_chat(user, span_warning("No recipes can be crafted with the parts installed.")) return + + craft_selected_option(user, choose_options, option_results) + +/obj/item/part/gun/frame/proc/get_missing_parts_for_recipe(datum/lathe_recipe/gun/recipe) + var/list/missing_parts = list() + for(var/obj/item/part/gun/part as anything in recipe.valid_parts) + var/part_type = initial(part.gun_part_type) + var/list/installed_types = get_part_types() + if(!(part_type in installed_types)) + missing_parts += " \a [initial(part.name)]" + return missing_parts + +/obj/item/part/gun/frame/proc/display_missing_parts_warning(mob/user, obj/recipe_result, list/missing_parts) + to_chat(user, span_warning("Parts needed for a [initial(recipe_result.name)]:")) + for(var/part in missing_parts) + to_chat(user, span_warning(part)) + +/obj/item/part/gun/frame/proc/add_recipe_to_options(mob/user, obj/recipe_result, list/choose_options, list/option_results) + to_chat(user, span_notice("You can craft a [initial(recipe_result.name)] with the parts installed.")) + choose_options += list("Craft [initial(recipe_result.name)]" = image(icon = initial(recipe_result.icon), icon_state = initial(recipe_result.icon_state))) + option_results["Craft [initial(recipe_result.name)]"] = recipe_result + +/obj/item/part/gun/frame/proc/craft_selected_option(mob/user, list/choose_options, list/option_results) var/picked_option = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) if(!picked_option) return diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 861b49c9ec0c..8da0ac5be7af 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -104,11 +104,13 @@ playsound(src,'sound/items/welder.ogg',50,TRUE) if(istype(work_piece, /obj/item/gun)) var/obj/item/gun/gun_work_piece = work_piece - var/obj/item/new_part = new /obj/item/part/gun + var/obj/item/new_part = new /obj/item/stack/gun_part new_part.forceMove(drop_location()) + /* I think this should be a seperate procces for obtaining the frame if(gun_work_piece.frame) var/obj/item/frame = gun_work_piece.frame frame.forceMove(drop_location()) + */ var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) var/material_amount = materials.get_item_material_amount(work_piece) if(material_amount) From e735f975706a5f62e58385136ca8ee7f792b1e3b Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Mon, 4 Mar 2024 23:11:37 -0600 Subject: [PATCH 57/89] i dunno --- code/modules/cargo/packs/material.dm | 10 +++ code/modules/guncrafting/frame.dm | 12 +++ code/modules/guncrafting/guncrafting.dm | 19 ++--- code/modules/guncrafting/lathe.dm | 2 +- code/modules/guncrafting/recipe.dm | 101 +++++++++--------------- 5 files changed, 66 insertions(+), 78 deletions(-) diff --git a/code/modules/cargo/packs/material.dm b/code/modules/cargo/packs/material.dm index ee0f00e42d96..2c75c44d7740 100644 --- a/code/modules/cargo/packs/material.dm +++ b/code/modules/cargo/packs/material.dm @@ -110,3 +110,13 @@ contains = list(/obj/item/stack/sheet/mineral/wood/fifty) crate_name = "wood planks crate" +/datum/supply_pack/material/gun_parts + name = "Gun Parts Crate" + desc = "Contains a variety of parts for assembling and maintaining firearms." + cost = 1000 + contains = list(/obj/item/stack/gun_part, + /obj/item/stack/gun_part, + /obj/item/stack/gun_part, + /obj/item/stack/gun_part, + /obj/item/stack/gun_part) + crate_name = "gun parts crate" diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 6ab248e373f6..d4981fd9b37f 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -197,6 +197,7 @@ . += "<span class='notice'>[src] has " + part_type_message + ".</span>" */ +/* /obj/item/part/gun/frame/winchester name = "winchester gun frame" icon_state = "frame_shotgun" @@ -223,8 +224,19 @@ /obj/item/part/gun/frame/boltaction name = "bolt action gun frame" +*/ + /obj/item/part/gun/frame/revolver + name = "revolver gun frame" + icon_state = "frame_revolver" + preinstalled_parts = list( + /obj/item/part/gun/modular/grip/wood, + /obj/item/part/gun/modular/mechanism/revolver, + /obj/item/part/gun/modular/barrel/revolver + ) +/* /obj/item/part/gun/frame/tec9 /obj/item/part/gun/frame/shotgun +*/ diff --git a/code/modules/guncrafting/guncrafting.dm b/code/modules/guncrafting/guncrafting.dm index 84975f846d7f..483a887c1622 100644 --- a/code/modules/guncrafting/guncrafting.dm +++ b/code/modules/guncrafting/guncrafting.dm @@ -35,17 +35,12 @@ new /obj/item/tool/hammer(src) new /obj/item/tool/file(src) new /obj/item/tool/saw(src) - new /obj/item/part/gun/frame/winchester(src) + new /obj/item/stack/gun_part(src) + new /obj/item/part/gun/frame/revolver(src) new /obj/item/part/gun/modular/grip/wood(src) - new /obj/item/part/gun/modular/mechanism/shotgun(src) - new /obj/item/part/gun/modular/barrel/shotgun(src) - new /obj/item/part/gun/frame/winchester(src) + new /obj/item/part/gun/modular/mechanism/revolver(src) + new /obj/item/part/gun/modular/barrel/revolver(src) + new /obj/item/part/gun/frame/revolver(src) new /obj/item/part/gun/modular/grip/wood(src) - new /obj/item/part/gun/modular/mechanism/shotgun(src) - new /obj/item/part/gun/modular/barrel/shotgun(src) - new /obj/item/part/gun/frame(src) - new /obj/item/part/gun/frame/candor(src) - new /obj/item/part/gun/modular/grip/wood(src) - new /obj/item/part/gun/modular/mechanism(src) - new /obj/item/part/gun/modular/barrel(src) - + new /obj/item/part/gun/modular/mechanism/revolver(src) + new /obj/item/part/gun/modular/barrel/revolver(src) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 8da0ac5be7af..e42a680e5359 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -103,7 +103,7 @@ to_chat(user, "The [work_piece.name] is broken down into parts.") playsound(src,'sound/items/welder.ogg',50,TRUE) if(istype(work_piece, /obj/item/gun)) - var/obj/item/gun/gun_work_piece = work_piece + //var/obj/item/gun/gun_work_piece = work_piece var/obj/item/new_part = new /obj/item/stack/gun_part new_part.forceMove(drop_location()) /* I think this should be a seperate procces for obtaining the frame diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index 2fea8240799c..e2eb1b16de9e 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -9,13 +9,15 @@ /datum/lathe_recipe/part/frame result = /obj/item/part/gun/frame -/datum/lathe_recipe/part/frame/winchester - result = /obj/item/part/gun/frame/winchester /datum/lathe_recipe/part/grip/wood result = /obj/item/part/gun/modular/grip/wood reqs = list(/obj/item/stack/sheet/mineral/wood = 3) +/* +/datum/lathe_recipe/part/frame/winchester + result = /obj/item/part/gun/frame/winchester + /datum/lathe_recipe/part/mechanism/shotgun result = /obj/item/part/gun/modular/mechanism/shotgun reqs = list(/obj/item/stack/sheet/metal = 2, @@ -23,68 +25,47 @@ /datum/lathe_recipe/part/barrel/shotgun result = /obj/item/part/gun/modular/barrel/shotgun +*/ + +/datum/lathe_recipe/part/barrel/revolver + result = /obj/item/part/gun/modular/barrel/revolver + reqs = list(/obj/item/stack/sheet/metal = 2) + +/datum/lathe_recipe/part/mechanism/revolver + result = /obj/item/part/gun/modular/mechanism/revolver + reqs = list(/obj/item/stack/sheet/metal = 2, + /obj/item/stack/gun_part = 2) + +/datum/lathe_recipe/part/frame/revolver + result = /obj/item/part/gun/frame/revolver + reqs = list(/obj/item/stack/sheet/metal = 2) /datum/lathe_recipe/gun var/list/valid_parts = list() var/required_part_types = ALL -/datum/lathe_recipe/gun/candor - result = /obj/item/gun/ballistic/automatic/pistol/candor - valid_parts = list( - /obj/item/part/gun/frame/candor, - /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/pistol, - /obj/item/part/gun/modular/barrel/pistol - ) - /* -/datum/lathe_recipe/gun/winchester - result = /obj/item/gun/ballistic/shotgun/winchester +/datum/lathe_recipe/gun/vickland + result = /obj/item/gun/ballistic/automatic/vickland valid_parts = list( - /obj/item/part/gun/frame/winchester, + /obj/item/part/gun/frame, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/rifle, /obj/item/part/gun/modular/barrel/rifle ) -/datum/lathe_recipe/gun/winchester/mk1 - result = /obj/item/gun/ballistic/shotgun/winchester/mk1 +/datum/lathe_recipe/gun/candor + result = /obj/item/gun/ballistic/automatic/pistol/candor valid_parts = list( - /obj/item/part/gun/frame/winchester/mk1, + /obj/item/part/gun/frame/candor, /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/rifle, - /obj/item/part/gun/modular/barrel/rifle - ) - -/datum/lathe_recipe/gun/tec9 - result = /obj/item/gun/ballistic/automatic/pistol/tec9 - valid_parts = list( - /obj/item/part/gun/frame/tec9, - /obj/item/part/gun/modular/grip/black, /obj/item/part/gun/modular/mechanism/pistol, /obj/item/part/gun/modular/barrel/pistol ) +*/ -/datum/lathe_recipe/gun/boltaction - result = /obj/item/gun/ballistic/rifle/boltaction - valid_parts = list( - /obj/item/part/gun/frame/boltaction, - /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/rifle, - /obj/item/part/gun/modular/barrel/rifle - ) - -/datum/lathe_recipe/gun/doublebarrel - result = /obj/item/gun/ballistic/shotgun/doublebarrel - valid_parts = list( - /obj/item/part/gun/frame/shotgun, - /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/shotgun, - /obj/item/part/gun/modular/barrel/shotgun - ) - -/datum/lathe_recipe/gun/derringer - result = /obj/item/gun/ballistic/derringer +/datum/lathe_recipe/gun/montagne + result = /obj/item/gun/ballistic/revolver/montagne valid_parts = list( /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, @@ -92,8 +73,8 @@ /obj/item/part/gun/modular/barrel/revolver ) -/datum/lathe_recipe/gun/srmrevolver - result = /obj/item/gun/ballistic/revolver/srm +/datum/lathe_recipe/gun/ashhand + result = /obj/item/gun/ballistic/revolver/ashhand valid_parts = list( /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, @@ -101,8 +82,8 @@ /obj/item/part/gun/modular/barrel/revolver ) -/datum/lathe_recipe/gun/pepperbox - result = /obj/item/gun/ballistic/revolver/pepperbox +/datum/lathe_recipe/gun/firebrand + result = /obj/item/gun/ballistic/revolver/firebrand valid_parts = list( /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, @@ -110,21 +91,11 @@ /obj/item/part/gun/modular/barrel/revolver ) -/datum/lathe_recipe/gun/nagantrevolver - result = /obj/item/gun/ballistic/revolver/nagant - valid_parts = list( - /obj/item/part/gun/frame, - /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel - ) - -/datum/lathe_recipe/gun/nagantrifle - result = /obj/item/gun/ballistic/rifle/boltaction +/datum/lathe_recipe/gun/shadow + result = /obj/item/gun/ballistic/revolver/shadow valid_parts = list( - /obj/item/part/gun/frame, + /obj/item/part/gun/frame/revolver, /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism, - /obj/item/part/gun/modular/barrel + /obj/item/part/gun/modular/mechanism/revolver, + /obj/item/part/gun/modular/barrel/revolver ) -*/ From f345d44bc57686a1f2bcc8018076a39a2ff6fcf2 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Sat, 9 Mar 2024 13:52:58 -0600 Subject: [PATCH 58/89] yea --- code/modules/guncrafting/frame.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index d4981fd9b37f..806c0be26fd7 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -173,8 +173,10 @@ /obj/item/part/gun/frame/examine(user, distance) . = ..() if(.) - for(var/obj/item/part/gun/part in installed_parts) - . += "<span class='notice'>[src] has \a [part] [icon2html(part, user)] installed.</span>" + if(length(installed_parts) != 0) + . += "<span class='notice'>[src] has parts installed:</span>" + for(var/obj/item/part/gun/part in installed_parts) + . += "\a [part] [icon2html(part, user)] installed." for(var/datum/lathe_recipe/gun/recipe in filtered_recipes) var/obj/recipe_result = recipe.result var/list/parts_for_craft = list() @@ -188,7 +190,7 @@ for(var/part in parts_for_craft) . += part else - . += "<span class='notice'>You can craft a [initial(recipe_result.name)] with the parts installed.</span>" + . += "<span class='notice'>You can craft a [initial(recipe_result.name)].</span>" /* var/part_type_message = "" for(var/part_type in get_part_types()) From 850647831734f56fba2c3d35c67fc641402a3436 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Thu, 21 Mar 2024 10:05:11 -0500 Subject: [PATCH 59/89] culling to pistols and revvys and reduces gun part quanity from crate --- code/modules/cargo/packs/material.dm | 4 +-- code/modules/guncrafting/frame.dm | 48 ++++++---------------------- code/modules/guncrafting/part.dm | 16 ++-------- code/modules/guncrafting/recipe.dm | 25 --------------- 4 files changed, 13 insertions(+), 80 deletions(-) diff --git a/code/modules/cargo/packs/material.dm b/code/modules/cargo/packs/material.dm index 2c75c44d7740..2ace6bcf60cd 100644 --- a/code/modules/cargo/packs/material.dm +++ b/code/modules/cargo/packs/material.dm @@ -116,7 +116,5 @@ cost = 1000 contains = list(/obj/item/stack/gun_part, /obj/item/stack/gun_part, - /obj/item/stack/gun_part, - /obj/item/stack/gun_part, - /obj/item/stack/gun_part) + /obj/item/stack/gun_part,) crate_name = "gun parts crate" diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 806c0be26fd7..f4bc7a114891 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -2,7 +2,7 @@ name = "gun frame" desc = "a generic gun frame." icon_state = "frame_olivaw" - var/list/preinstalled_parts = list() + //var/list/preinstalled_parts = list() var/list/installed_parts = list() var/list/filtered_recipes = list() @@ -11,8 +11,10 @@ /obj/item/part/gun/frame/Initialize() . = ..() + /* for (var/part_type in preinstalled_parts) installed_parts += new part_type(src) + */ get_current_recipes() /* var/spawn_with_preinstalled_parts = TRUE @@ -199,46 +201,14 @@ . += "<span class='notice'>[src] has " + part_type_message + ".</span>" */ -/* -/obj/item/part/gun/frame/winchester - name = "winchester gun frame" - icon_state = "frame_shotgun" - preinstalled_parts = list( - /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/rifle, - /obj/item/part/gun/modular/barrel/rifle - ) - -/obj/item/part/gun/frame/winchester/mk1 - name = "winchester mk1 gun frame" - -/obj/item/part/gun/frame/candor - name = "candor gun frame" - preinstalled_parts = list( - /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/pistol, - /obj/item/part/gun/modular/barrel/pistol - ) - -/obj/item/part/gun/frame/commander - name = "commander gun frame" - -/obj/item/part/gun/frame/boltaction - name = "bolt action gun frame" - -*/ - /obj/item/part/gun/frame/revolver name = "revolver gun frame" icon_state = "frame_revolver" - preinstalled_parts = list( - /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/revolver, - /obj/item/part/gun/modular/barrel/revolver - ) -/* -/obj/item/part/gun/frame/tec9 +/obj/item/part/gun/frame/deringer + name = "deringer gun frame" + icon_state = "frame_revolver" -/obj/item/part/gun/frame/shotgun -*/ +/obj/item/part/gun/frame/pistol + name = "pistol gun frame" + icon_state = "frame_pistol" diff --git a/code/modules/guncrafting/part.dm b/code/modules/guncrafting/part.dm index 7fc06a6cec20..005fed46d839 100644 --- a/code/modules/guncrafting/part.dm +++ b/code/modules/guncrafting/part.dm @@ -33,16 +33,11 @@ icon_state = "mechanism_pistol" gun_part_type = GUN_PART_MECHANISM -/obj/item/part/gun/modular/mechanism/shotgun - name = "generic shotgun mechanism" - icon_state = "mechanism_shotgun" - -/obj/item/part/gun/modular/mechanism/rifle - /obj/item/part/gun/modular/mechanism/revolver name = "generic revolver mechanism" /obj/item/part/gun/modular/mechanism/pistol + name = "generic pistol mechanism" /obj/item/part/gun/modular/barrel name = "generic barrel" @@ -50,13 +45,8 @@ icon_state = "barrel_35" gun_part_type = GUN_PART_BARREL -/obj/item/part/gun/modular/barrel/shotgun - name = "generic shotgun barrel" - desc = "A gun barrel, which keeps the bullet going in the right direction." - icon_state = "barrel_30" - -/obj/item/part/gun/modular/barrel/rifle - /obj/item/part/gun/modular/barrel/revolver + name = "generic revolver barrel" /obj/item/part/gun/modular/barrel/pistol + name = "generic pistol barrel" diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index e2eb1b16de9e..84b234a75b38 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -9,24 +9,10 @@ /datum/lathe_recipe/part/frame result = /obj/item/part/gun/frame - /datum/lathe_recipe/part/grip/wood result = /obj/item/part/gun/modular/grip/wood reqs = list(/obj/item/stack/sheet/mineral/wood = 3) -/* -/datum/lathe_recipe/part/frame/winchester - result = /obj/item/part/gun/frame/winchester - -/datum/lathe_recipe/part/mechanism/shotgun - result = /obj/item/part/gun/modular/mechanism/shotgun - reqs = list(/obj/item/stack/sheet/metal = 2, - /obj/item/stack/gun_part = 1) - -/datum/lathe_recipe/part/barrel/shotgun - result = /obj/item/part/gun/modular/barrel/shotgun -*/ - /datum/lathe_recipe/part/barrel/revolver result = /obj/item/part/gun/modular/barrel/revolver reqs = list(/obj/item/stack/sheet/metal = 2) @@ -44,16 +30,6 @@ var/list/valid_parts = list() var/required_part_types = ALL -/* -/datum/lathe_recipe/gun/vickland - result = /obj/item/gun/ballistic/automatic/vickland - valid_parts = list( - /obj/item/part/gun/frame, - /obj/item/part/gun/modular/grip/wood, - /obj/item/part/gun/modular/mechanism/rifle, - /obj/item/part/gun/modular/barrel/rifle - ) - /datum/lathe_recipe/gun/candor result = /obj/item/gun/ballistic/automatic/pistol/candor valid_parts = list( @@ -62,7 +38,6 @@ /obj/item/part/gun/modular/mechanism/pistol, /obj/item/part/gun/modular/barrel/pistol ) -*/ /datum/lathe_recipe/gun/montagne result = /obj/item/gun/ballistic/revolver/montagne From 9e22fae7c523320859b17d9b4b54bbb7c5b7ad7c Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Thu, 21 Mar 2024 11:26:40 -0500 Subject: [PATCH 60/89] augh --- .../datums/mapgen/planetary/WasteGenerator.dm | 1 + .../game/objects/effects/spawners/lootdrop.dm | 18 +++ code/modules/guncrafting/frame.dm | 3 + code/modules/guncrafting/lathe.dm | 109 ++++++++++++++---- code/modules/guncrafting/part.dm | 8 ++ 5 files changed, 118 insertions(+), 21 deletions(-) diff --git a/code/datums/mapgen/planetary/WasteGenerator.dm b/code/datums/mapgen/planetary/WasteGenerator.dm index d0243740bc3b..58bdbd6b3868 100644 --- a/code/datums/mapgen/planetary/WasteGenerator.dm +++ b/code/datums/mapgen/planetary/WasteGenerator.dm @@ -227,6 +227,7 @@ flora_spawn_list = list( //there are no plants here /obj/effect/spawner/lootdrop/waste/mechwreck = 200, /obj/effect/spawner/lootdrop/waste/mechwreck/rare = 50, + /obj/effect/spawner/lootdrop/gun_parts = 500, /obj/effect/spawner/lootdrop/waste/trash = 900, /obj/effect/spawner/lootdrop/waste/radiation = 80, /obj/effect/spawner/lootdrop/waste/radiation/more_rads = 20, diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index d1f47ff647f6..1fd2ab83a1fb 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -1007,6 +1007,24 @@ //wasteplanet things +/obj/effect/spawner/lootdrop/gun_parts + name = "gun parts spawner" + loot = list( + /obj/item/stack/gun_part = 10, + /obj/item/part/gun/modular/grip = 1, + /obj/item/part/gun/modular/grip/wood = 1, + /obj/item/part/gun/modular/grip/black = 1, + /obj/item/part/gun/modular/mechanism = 1, + /obj/item/part/gun/modular/mechanism/revolver = 1, + /obj/item/part/gun/modular/mechanism/pistol = 1, + /obj/item/part/gun/modular/barrel = 1, + /obj/item/part/gun/modular/barrel/revolver = 1, + /obj/item/part/gun/modular/barrel/pistol = 1, + /obj/item/part/gun/frame/revolver = 1, + /obj/item/part/gun/frame/deringer = 1, + /obj/item/part/gun/frame/pistol + ) + /obj/effect/spawner/lootdrop/waste/grille_or_trash name = "wasteplanet loot spawner" loot = list( diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index f4bc7a114891..5ced1cd4e36d 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -204,11 +204,14 @@ /obj/item/part/gun/frame/revolver name = "revolver gun frame" icon_state = "frame_revolver" + material_cost = list(/obj/item/stack/sheet/metal = 2) /obj/item/part/gun/frame/deringer name = "deringer gun frame" icon_state = "frame_revolver" + material_cost = list(/obj/item/stack/sheet/metal = 2) /obj/item/part/gun/frame/pistol name = "pistol gun frame" icon_state = "frame_pistol" + material_cost = list(/obj/item/stack/sheet/metal = 2) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index e42a680e5359..ed3cc72abd9f 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -16,6 +16,10 @@ var/mode = FALSE //If activily doing a do untill loop var/working = FALSE + //The part that the user has picked to fabricate + var/obj/item/picked_part = FALSE + var/list/tools_required = list(/obj/item/tool/hammer, /obj/item/tool/file, /obj/item/tool/saw) + var/tool_required = FALSE /obj/structure/lathe/Initialize() AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE) @@ -31,7 +35,7 @@ if(in_progress) to_chat(user, "The lathe is currently in use.") return - remove_part(user) + remove_work_piece(user) /obj/structure/lathe/attack_hand(mob/living/carbon/human/user) if(!work_piece) @@ -44,9 +48,9 @@ mode = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) if(mode && !working) if(mode == "Deconstruct") - deconstruct_part(user) + deconstruct_work_piece(user) if(mode == "Fabricate") - fabricate_part(user) + work_on_part(user) /obj/structure/lathe/attackby(obj/item/I, mob/user) if(work_piece) @@ -58,7 +62,7 @@ work_piece.vis_flags |= VIS_INHERIT_ID vis_contents += work_piece -/obj/structure/lathe/proc/remove_part(mob/user) +/obj/structure/lathe/proc/remove_work_piece(mob/user) if(work_piece) vis_contents -= work_piece work_piece.forceMove(drop_location()) @@ -68,7 +72,7 @@ in_progress = FALSE mode = FALSE -/obj/structure/lathe/proc/destroy_part(mob/user) +/obj/structure/lathe/proc/destroy_work_piece(mob/user) if(work_piece) vis_contents -= work_piece qdel(work_piece) @@ -76,11 +80,18 @@ in_progress = FALSE mode = FALSE +/obj/structure/lathe/proc/reset_lathe() + picked_part = FALSE + in_progress = FALSE + mode = FALSE + steps_left = FALSE + working = FALSE + ///////////////// // DECONSTRUCT // ///////////////// -/obj/structure/lathe/proc/deconstruct_part(mob/living/carbon/human/user) +/obj/structure/lathe/proc/deconstruct_work_piece(mob/living/carbon/human/user) if(!in_progress) in_progress = TRUE steps_left = 3 @@ -94,12 +105,12 @@ playsound(src,'sound/items/welder2.ogg',50,TRUE) to_chat(user, "You have [steps_left] steps left.") user.adjustStaminaLoss(DECONSTRUCT_STAMINA_USE) - deconstruct_part(user) + deconstruct_work_piece(user) else - scrap_item(work_piece) + scrap_work_piece(work_piece) working = FALSE -/obj/structure/lathe/proc/scrap_item(mob/user) +/obj/structure/lathe/proc/scrap_work_piece(mob/user) to_chat(user, "The [work_piece.name] is broken down into parts.") playsound(src,'sound/items/welder.ogg',50,TRUE) if(istype(work_piece, /obj/item/gun)) @@ -116,28 +127,84 @@ if(material_amount) materials.insert_item(work_piece) materials.retrieve_all() - destroy_part(user) + destroy_work_piece(user) + reset_lathe() /////////////// // FABRICATE // /////////////// -/obj/structure/lathe/proc/fabricate_part(mob/living/carbon/human/user) +/obj/structure/lathe/proc/choose_part(mob/living/carbon/human/user) if(istype (work_piece, /obj/item/gun)) var/obj/item/gun/gun_work_piece = work_piece var/list/choose_options = list() var/list/option_results = list() if(gun_work_piece.frame) - choose_options += list("Craft [gun_work_piece.frame.name]" = image(icon = gun_work_piece.frame.icon , icon_state = gun_work_piece.frame.icon_state)) - option_results["Craft [gun_work_piece.frame.name]"] = gun_work_piece.frame.type - for(var/obj/item/part/gun/gun_part in gun_work_piece.frame.installed_parts) - choose_options += list("Craft [gun_part.name]" = image(icon = gun_part.icon, icon_state = gun_part.icon_state)) - option_results["Craft [gun_part.name]"] = gun_part.type + var/obj/item/part/gun/frame = gun_work_piece.frame + if(frame.material_cost) + choose_options += list("Craft [frame.name]" = image(icon = frame.icon , icon_state = frame.icon_state)) + option_results["Craft [frame.name]"] = frame.type + for(var/obj/item/part/gun/gun_part in frame.installed_parts) + if(gun_part.material_cost) + choose_options += list("Craft [gun_part.name]" = image(icon = gun_part.icon, icon_state = gun_part.icon_state)) + option_results["Craft [gun_part.name]"] = gun_part.type var/choosen_part = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) if(!choosen_part) return - var/turf/T = get_turf(src) - var/obj/item/part/gun/picked_part = option_results[choosen_part] - var/obj/item/part/gun/new_part = new picked_part(T) - new_part.forceMove(drop_location()) - mode = FALSE + if(check_materials(choosen_part)) + return option_results[choosen_part] + +/obj/structure/lathe/proc/get_surrounding_items() + var/list/surrounding_items = list() + for(var/obj/item/I in view(1, src)) + surrounding_items[I.type] += 1 + return surrounding_items + +/obj/structure/lathe/proc/check_materials(obj/item/part/gun/gun_part) + var/list/surrounding_items = get_surrounding_items() + for(var/obj/item/material in gun_part.material_cost) + if(!(material in surrounding_items) || surrounding_items[material] < gun_part.material_cost[material]) + return FALSE + return TRUE + +/obj/structure/lathe/proc/start_work(mob/living/carbon/human/user) + if(in_progress) + return TRUE + in_progress = TRUE + tools_required = list(/obj/item/tool/hammer, /obj/item/tool/file, /obj/item/tool/saw) + tool_required = pick(tools_required) + steps_left = 3 + return TRUE + +/obj/structure/lathe/proc/work_on_part(mob/living/carbon/human/user) + if(!picked_part) + picked_part = choose_part(user) + if(!picked_part || !start_work(user)) + return + if(!user.has_item_of_type(tool_required)) + balloon_alert(user, "You need a [tool_required.name] to work on this part.") + return + if(user.getStaminaLoss() > DECONSTRUCT_STAMINA_MINIMUM) + balloon_alert(user, "too tired") + return FALSE + working = TRUE + if(do_after(user, 20, work_piece)) + if(steps_left > 1) + steps_left-- + playsound(src,'sound/items/welder2.ogg',50,TRUE) + to_chat(user, "You have [steps_left] steps left.") + user.adjustStaminaLoss(DECONSTRUCT_STAMINA_USE) + tool_required = pick(tools_required) + balloon_alert(user, "You need a [tool_required.name] next.") + work_on_part(user) + else + fabricate_part(user) + working = FALSE + +/obj/structure/lathe/proc/fabricate_part(mob/living/carbon/human/user) + if(!picked_part) + return + var/turf/T = get_turf(src) + var/obj/item/part/gun/new_part = new picked_part(T) + new_part.forceMove(drop_location()) + reset_lathe() diff --git a/code/modules/guncrafting/part.dm b/code/modules/guncrafting/part.dm index 005fed46d839..9d9c6c3cd53e 100644 --- a/code/modules/guncrafting/part.dm +++ b/code/modules/guncrafting/part.dm @@ -6,6 +6,7 @@ desc = "Spare part of gun." icon_state = "gun_part_1" var/gun_part_type = NONE + var/material_cost = list() /obj/item/part/gun/modular name = "modular gun part" @@ -21,11 +22,14 @@ name = "wood grip" desc = "A wood firearm grip, unattached from a firearm." icon_state = "grip_wood" + material_cost = list(/obj/item/stack/sheet/mineral/wood = 3) + /obj/item/part/gun/modular/grip/black name = "plastic grip" desc = "A black plastic firearm grip, unattached from a firearm. For sleekness and decorum." icon_state = "grip_black" + material_cost = list(/obj/item/stack/sheet/metal = 2) /obj/item/part/gun/modular/mechanism name = "generic mechanism" @@ -35,9 +39,11 @@ /obj/item/part/gun/modular/mechanism/revolver name = "generic revolver mechanism" + material_cost = list(/obj/item/stack/sheet/metal = 3) /obj/item/part/gun/modular/mechanism/pistol name = "generic pistol mechanism" + material_cost = list(/obj/item/stack/sheet/metal = 3) /obj/item/part/gun/modular/barrel name = "generic barrel" @@ -47,6 +53,8 @@ /obj/item/part/gun/modular/barrel/revolver name = "generic revolver barrel" + material_cost = list(/obj/item/stack/sheet/metal = 2) /obj/item/part/gun/modular/barrel/pistol name = "generic pistol barrel" + material_cost = list(/obj/item/stack/sheet/metal = 2) From 91e07f2fcd30059dee2ecf1c939a9d488080b517 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Tue, 2 Apr 2024 08:28:58 -0500 Subject: [PATCH 61/89] unit unit --- code/modules/unit_tests/gun_crafting.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/unit_tests/gun_crafting.dm b/code/modules/unit_tests/gun_crafting.dm index 31ee1edc2285..c3d203023ee4 100644 --- a/code/modules/unit_tests/gun_crafting.dm +++ b/code/modules/unit_tests/gun_crafting.dm @@ -1,11 +1,12 @@ //Makes sure preinstalled frame parts can be removed an reinstalled /datum/unit_test/gun_crafting/Run() +/* var/list/guns = typesof(/obj/item/gun/ballistic) for(var/gunType in guns) var/obj/item/gun/ballistic/G = new gunType if(G.magazine) TEST_FAIL("[G.type], Mag: [G.magazine.type], Cali: [G.magazine.caliber]") -/* +*/ var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) for(var/frame_type in subtypesof(/obj/item/part/gun/frame)) var/obj/item/part/gun/frame/frame = new frame_type @@ -14,4 +15,4 @@ frame.eject_item(installedPart, human) frame.handle_part(installedPart, human) TEST_ASSERT_EQUAL(frame_parts, frame.installed_parts, "Frame parts to match there original contents. I assume frame parts were not reinstalled correctly.") -*/ + From 1fe0695a6c01c83670ce52b2fdc92d620278c06a Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Tue, 2 Apr 2024 09:51:20 -0500 Subject: [PATCH 62/89] soft port of CEV-eris tool system --- code/__DEFINES/tools.dm | 25 ----- code/__DEFINES/tools_and_qualities.dm | 97 +++++++++++++++++++ code/game/objects/items.dm | 2 + code/game/objects/items/tools/_tools.dm | 119 ++++++++++++++++++++++++ code/modules/guncrafting/frame.dm | 3 + code/modules/guncrafting/lathe.dm | 19 +++- code/modules/guncrafting/tools.dm | 14 --- shiptest.dme | 4 +- 8 files changed, 237 insertions(+), 46 deletions(-) delete mode 100644 code/__DEFINES/tools.dm create mode 100644 code/__DEFINES/tools_and_qualities.dm create mode 100644 code/game/objects/items/tools/_tools.dm delete mode 100644 code/modules/guncrafting/tools.dm diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm deleted file mode 100644 index 320648170b44..000000000000 --- a/code/__DEFINES/tools.dm +++ /dev/null @@ -1,25 +0,0 @@ -// Tool types -#define TOOL_CROWBAR "crowbar" -#define TOOL_MULTITOOL "multitool" -#define TOOL_SCREWDRIVER "screwdriver" -#define TOOL_WIRECUTTER "wirecutter" -#define TOOL_WRENCH "wrench" -#define TOOL_WELDER "welder" -#define TOOL_ANALYZER "analyzer" -#define TOOL_MINING "mining" -#define TOOL_SHOVEL "shovel" -#define TOOL_RETRACTOR "retractor" -#define TOOL_HEMOSTAT "hemostat" -#define TOOL_CAUTERY "cautery" -#define TOOL_DRILL "drill" -#define TOOL_SCALPEL "scalpel" -#define TOOL_SAW "saw" - -// If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY, -// tool sound is only played when op is started. If not, it's played twice. -#define MIN_TOOL_SOUND_DELAY 20 - -/// When a tooltype_act proc is successful -#define TOOL_ACT_TOOLTYPE_SUCCESS (1<<0) -/// When [COMSIG_ATOM_TOOL_ACT] blocks the act -#define TOOL_ACT_SIGNAL_BLOCKING (1<<1) diff --git a/code/__DEFINES/tools_and_qualities.dm b/code/__DEFINES/tools_and_qualities.dm new file mode 100644 index 000000000000..5ea1a0e88e05 --- /dev/null +++ b/code/__DEFINES/tools_and_qualities.dm @@ -0,0 +1,97 @@ +// Tool types +#define TOOL_CROWBAR "crowbar" +#define TOOL_MULTITOOL "multitool" +#define TOOL_SCREWDRIVER "screwdriver" +#define TOOL_WIRECUTTER "wirecutter" +#define TOOL_WRENCH "wrench" +#define TOOL_WELDER "welder" +#define TOOL_ANALYZER "analyzer" +#define TOOL_MINING "mining" +#define TOOL_SHOVEL "shovel" +#define TOOL_RETRACTOR "retractor" +#define TOOL_HEMOSTAT "hemostat" +#define TOOL_CAUTERY "cautery" +#define TOOL_DRILL "drill" +#define TOOL_SCALPEL "scalpel" +#define TOOL_SAW "saw" + +/////////////// +// ERIS PORT // +/////////////// + +// If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY, +// tool sound is only played when op is started. If not, it's played twice. +#define MIN_TOOL_SOUND_DELAY 20 + +/// When a tooltype_act proc is successful +#define TOOL_ACT_TOOLTYPE_SUCCESS (1<<0) +/// When [COMSIG_ATOM_TOOL_ACT] blocks the act +#define TOOL_ACT_SIGNAL_BLOCKING (1<<1) + +#define ABORT_CHECK -1 +#define TOOL_USE_FAIL -1 +#define TOOL_USE_CANCEL 0 +#define TOOL_USE_SUCCESS 1 + +#define QUALITY_BOLT_TURNING "bolt turning" +#define QUALITY_PULSING "pulsing" +#define QUALITY_PRYING "prying" +#define QUALITY_WELDING "welding" +#define QUALITY_SCREW_DRIVING "screw driving" +#define QUALITY_WIRE_CUTTING "wire cutting" +#define QUALITY_CLAMPING "clamping" +#define QUALITY_CAUTERIZING "cauterizing" +#define QUALITY_RETRACTING "retracting" +#define QUALITY_DRILLING "drilling" +#define QUALITY_HAMMERING "hammering" +#define QUALITY_SAWING "sawing" +#define QUALITY_BONE_SETTING "bone setting" +#define QUALITY_SHOVELING "shoveling" +#define QUALITY_DIGGING "digging" +#define QUALITY_EXCAVATION "excavation" +#define QUALITY_CUTTING "cutting" +#define QUALITY_LASER_CUTTING "laser cutting" //laser scalpels and e-swords - bloodless cutting +#define QUALITY_ADHESIVE "adhesive" +#define QUALITY_SEALING "sealing" +#define QUALITY_FILING "filing" + +//Time for a work for tool system calculated in that way: basic time - tool level - stat check.. +//It means that basic tools will give -30 on time, and people on right job should have -20 at least, or even more. +#define WORKTIME_INSTANT 0 +#define WORKTIME_NEAR_INSTANT 30 +#define WORKTIME_FAST 60 +#define WORKTIME_NORMAL 90 +#define WORKTIME_SLOW 120 +#define WORKTIME_LONG 170 +#define WORKTIME_EXTREMELY_LONG 250 + +//Fail chance for tool system calculated in that way: basic chance - tool level - stat check. +//Basic tools will give -30% on fail chance, and people on right job should have -20% at least. +#define FAILCHANCE_ZERO 0 +#define FAILCHANCE_VERY_EASY 30 +#define FAILCHANCE_EASY 50 +#define FAILCHANCE_NORMAL 60 +#define FAILCHANCE_HARD 80 +#define FAILCHANCE_CHALLENGING 90 +#define FAILCHANCE_VERY_HARD 120 +#define FAILCHANCE_IMPOSSIBLE 150 + +//Sounds for working with tools +#define NO_WORKSOUND -1 + +#define WORKSOUND_CIRCULAR_SAW 'sound/weapons/circsawhit.ogg' +#define WORKSOUND_SIMPLE_SAW 'sound/items/saw.ogg' +#define WORKSOUND_WRENCHING 'sound/items/Ratchet.ogg' +#define WORKSOUND_WIRECUTTING 'sound/items/Wirecutter.ogg' +#define WORKSOUND_WELDING "weld" +#define WORKSOUND_PULSING 'sound/items/multitool_pulse.ogg' +#define WORKSOUND_SCREW_DRIVING 'sound/items/Screwdriver.ogg' +#define WORKSOUND_EASY_CROWBAR 'sound/items/Crowbar.ogg' +#define WORKSOUND_HAMMER 'sound/items/hammer.ogg' +#define WORKSOUND_REMOVING 'sound/items/Deconstruct.ogg' +#define WORKSOUND_DRIVER_TOOL 'sound/items/e_screwdriver.ogg' +#define WORKSOUND_PICKAXE 'sound/items/pickaxe.ogg' +#define WORKSOUND_HARD_SLASH 'sound/weapons/bladeslice.ogg' +#define WORKSOUND_CHAINSAW 'sound/items/chainsaw.ogg' +#define WORKSOUND_TAPE 'sound/items/duct_tape.ogg' +#define WORKSOUND_HONK 'sound/items/bikehorn.ogg' diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index df7c5ae431c5..b63b2ccbf286 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -97,6 +97,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb ///you can see someone's mask through their transparent visor, but you can't reach it var/transparent_protection = NONE + var/list/tool_qualities// List of item qualities for tools system. See tools_and_qualities.dm. + ///flags for what should be done when you click on the item, default is picking it up var/interaction_flags_item = INTERACT_ITEM_ATTACK_HAND_PICKUP diff --git a/code/game/objects/items/tools/_tools.dm b/code/game/objects/items/tools/_tools.dm new file mode 100644 index 000000000000..8fbba03478e1 --- /dev/null +++ b/code/game/objects/items/tools/_tools.dm @@ -0,0 +1,119 @@ +// Time added to tool operations in percent based on original time +// (if you dig hole in 10 seconds then 50 ADDITIONAL_TIME_LOWHEALTH will add 0 on full health, 2.5sec on 50% health and 5sec ~0% health) +#define ADDITIONAL_TIME_LOWHEALTH 60 + +/obj/item/tool + name = "tool" + icon = 'icons/obj/tools.dmi' + slot_flags = SLOT_BELT + force = WEAPON_FORCE_NORMAL + throwforce = WEAPON_FORCE_NORMAL + w_class = ITEM_SIZE_SMALL + +/* + //spawn values + bad_type = /obj/item/tool + spawn_tags = SPAWN_TAG_TOOL + + price_tag = 20 + + health = 600 + maxHealth = 600 + + var/tool_in_use = FALSE + + var/force_upgrade_mults = 1 + + var/force_upgrade_mods = 0 + + var/sparks_on_use = FALSE //Set to TRUE if you want to have sparks on each use of a tool + var/eye_hazard = FALSE //Set to TRUE should damage users eyes if they without eye protection + + var/use_power_cost = 0 //For tool system, determinze how much power tool will drain from cells, 0 means no cell needed + var/obj/item/cell/cell + var/suitable_cell //Dont forget to edit this for a tool, if you want in to consume cells + var/passive_power_cost = 1 //Energy consumed per process tick while active + + var/use_fuel_cost = 0 //Same, only for fuel. And for the sake of God, DONT USE CELLS AND FUEL SIMULTANEOUSLY. + var/passive_fuel_cost = 0.03 //Fuel consumed per process tick while active + var/max_fuel = 0 + + var/mode = NOMODE //For various tool icon updates. + + //Third type of resource, stock. A tool that uses physical objects (or itself) in order to work + //Currently used for tape roll + var/use_stock_cost = 0 + var/stock = 0 + var/max_stock = 0 + var/allow_decimal_stock = TRUE + var/delete_when_empty = TRUE + + + //Variables used for tool degradation + health = 0 // Health of a tool. + maxHealth = 1000 + var/degradation = 0.8 //If nonzero, the health of the tool decreases by this amount after each tool operation + var/health_threshold = 40 // threshold in percent on which tool health stops dropping + var/lastNearBreakMessage = 0 // used to show messages that tool is about to break + var/isBroken = FALSE + + + var/toggleable = FALSE //Determines if it can be switched ON or OFF, for example, if you need a tool that will consume power/fuel upon turning it ON only. Such as welder. + var/switched_on = FALSE //Curent status of tool. Dont edit this in subtypes vars, its for procs only. + var/switched_on_qualities //This var will REPLACE tool_qualities when tool will be toggled on. + var/switched_on_force + var/switched_on_hitsound + var/switched_off_qualities //This var will REPLACE tool_qualities when tool will be toggled off. So its possible for tool to have diferent qualities both for ON and OFF state. + var/create_hot_spot = FALSE //Set this TRUE to ignite plasma on turf with tool upon activation + var/glow_color //Set color of glow upon activation, or leave it null if you dont want any light + var/last_tooluse = 0 //When the tool was last used for a tool operation. This is set both at the start of an operation, and after the doafter call + + //Vars for tool upgrades + var/precision = 0 //Subtracted from failure rates + var/workspeed = 1 //Worktimes are divided by this + var/extra_bulk = 0 //Extra physicial volume added by certain mods + var/list/prefixes = list() +*/ + +/obj/item/proc/has_quality(quality_id) + return !quality_id || (quality_id in tool_qualities) + +/obj/item/tool/admin_debug + name = "Electric Boogaloo 3000" + icon_state = "omnitool" + item_state = "omnitool" + spawn_tags = null + tool_qualities = list(QUALITY_BOLT_TURNING = 100, + QUALITY_PRYING = 100, + QUALITY_WELDING = 100, + QUALITY_SCREW_DRIVING = 100, + QUALITY_CLAMPING = 100, + QUALITY_CAUTERIZING = 100, + QUALITY_WIRE_CUTTING = 100, + QUALITY_RETRACTING = 100, + QUALITY_DRILLING = 100, + QUALITY_SAWING = 100, + QUALITY_VEIN_FIXING = 100, + QUALITY_BONE_SETTING = 100, + QUALITY_BONE_FIXING = 100, + QUALITY_SHOVELING = 100, + QUALITY_DIGGING = 100, + QUALITY_EXCAVATION = 100, + QUALITY_CUTTING = 100, + QUALITY_HAMMERING = 100, + QUALITY_FILING = 100) + +/obj/item/tool/hammer + name = "ballpin hammer" + icon_state = "oldcrowbar" + tool_qualities = (QUALITY_HAMMERING = 50) + +/obj/item/tool/file + name = "metal file" + icon_state = "oldwrench" + tool_qualities = (QUALITY_FILING = 50) + +/obj/item/tool/saw + name = "rusty hacksaw" + icon_state = "oldcutters_map" + tool_qualities = (QUALITY_SAWING = 50) diff --git a/code/modules/guncrafting/frame.dm b/code/modules/guncrafting/frame.dm index 5ced1cd4e36d..8fa9d7bd16ca 100644 --- a/code/modules/guncrafting/frame.dm +++ b/code/modules/guncrafting/frame.dm @@ -215,3 +215,6 @@ name = "pistol gun frame" icon_state = "frame_pistol" material_cost = list(/obj/item/stack/sheet/metal = 2) + +/obj/item/part/gun/frame/pistol/candor + name = "candor gun frame" diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index ed3cc72abd9f..57eacfea330b 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -18,7 +18,7 @@ var/working = FALSE //The part that the user has picked to fabricate var/obj/item/picked_part = FALSE - var/list/tools_required = list(/obj/item/tool/hammer, /obj/item/tool/file, /obj/item/tool/saw) + var/list/tools_required = list(QUALITY_HAMMERING, QUALITY_SAWING, QUALITY_FILING) var/tool_required = FALSE /obj/structure/lathe/Initialize() @@ -53,6 +53,14 @@ work_on_part(user) /obj/structure/lathe/attackby(obj/item/I, mob/user) + if(mode && !working) + if(is_valid_tool(I)) + if(mode == "Deconstruct") + deconstruct_work_piece(user) + if(mode == "Fabricate") + work_on_part(user) + else + balloon_alert(user, "You need a tool with [tool_required] to work on this part.") if(work_piece) to_chat(user, "You cant add another item to the lathe.") return @@ -87,6 +95,10 @@ steps_left = FALSE working = FALSE +/obj/structure/lathe/proc/is_valid_tool(obj/item/I) + if(I.has_quality(tool_required)) + return TRUE + ///////////////// // DECONSTRUCT // ///////////////// @@ -140,7 +152,7 @@ var/list/choose_options = list() var/list/option_results = list() if(gun_work_piece.frame) - var/obj/item/part/gun/frame = gun_work_piece.frame + var/obj/item/part/gun/frame/frame = gun_work_piece.frame if(frame.material_cost) choose_options += list("Craft [frame.name]" = image(icon = frame.icon , icon_state = frame.icon_state)) option_results["Craft [frame.name]"] = frame.type @@ -181,9 +193,6 @@ picked_part = choose_part(user) if(!picked_part || !start_work(user)) return - if(!user.has_item_of_type(tool_required)) - balloon_alert(user, "You need a [tool_required.name] to work on this part.") - return if(user.getStaminaLoss() > DECONSTRUCT_STAMINA_MINIMUM) balloon_alert(user, "too tired") return FALSE diff --git a/code/modules/guncrafting/tools.dm b/code/modules/guncrafting/tools.dm deleted file mode 100644 index 6403005791ea..000000000000 --- a/code/modules/guncrafting/tools.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/tool/hammer - name = "hammer" - icon = 'icons/obj/tools.dmi' - icon_state = "oldcrowbar" - -/obj/item/tool/file - name = "file" - icon = 'icons/obj/tools.dmi' - icon_state = "oldwrench" - -/obj/item/tool/saw - name = "saw" - icon = 'icons/obj/tools.dmi' - icon_state = "oldcutters_map" diff --git a/shiptest.dme b/shiptest.dme index 725823ff0c9b..508ee627d31b 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -141,7 +141,7 @@ #include "code\__DEFINES\tgs.dm" #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" -#include "code\__DEFINES\tools.dm" +#include "code\__DEFINES\tools_and_qualities.dm" #include "code\__DEFINES\traits.dm" #include "code\__DEFINES\turfs.dm" #include "code\__DEFINES\typeids.dm" @@ -1306,6 +1306,7 @@ #include "code\game\objects\items\tanks\tank_types.dm" #include "code\game\objects\items\tanks\tanks.dm" #include "code\game\objects\items\tanks\watertank.dm" +#include "code\game\objects\items\tools\_tools.dm" #include "code\game\objects\items\tools\chisel.dm" #include "code\game\objects\items\tools\crowbar.dm" #include "code\game\objects\items\tools\screwdriver.dm" @@ -2196,7 +2197,6 @@ #include "code\modules\guncrafting\lathe.dm" #include "code\modules\guncrafting\part.dm" #include "code\modules\guncrafting\recipe.dm" -#include "code\modules\guncrafting\tools.dm" #include "code\modules\holiday\easter.dm" #include "code\modules\holiday\foreign_calendar.dm" #include "code\modules\holiday\holidays.dm" From 1cba2a00e778398b4407d64c3f9247d0c82580e1 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Tue, 2 Apr 2024 10:03:26 -0500 Subject: [PATCH 63/89] stuff --- code/__DEFINES/tools_and_qualities.dm | 2 +- code/game/objects/items/tools/_tools.dm | 128 +++--------------- code/game/objects/items/tools/simple_tools.dm | 41 ++++++ shiptest.dme | 1 + 4 files changed, 64 insertions(+), 108 deletions(-) create mode 100644 code/game/objects/items/tools/simple_tools.dm diff --git a/code/__DEFINES/tools_and_qualities.dm b/code/__DEFINES/tools_and_qualities.dm index 5ea1a0e88e05..2cc3177fe229 100644 --- a/code/__DEFINES/tools_and_qualities.dm +++ b/code/__DEFINES/tools_and_qualities.dm @@ -94,4 +94,4 @@ #define WORKSOUND_HARD_SLASH 'sound/weapons/bladeslice.ogg' #define WORKSOUND_CHAINSAW 'sound/items/chainsaw.ogg' #define WORKSOUND_TAPE 'sound/items/duct_tape.ogg' -#define WORKSOUND_HONK 'sound/items/bikehorn.ogg' +#define WORKSOUND_HONK 'sound/items/bikehorn.ogg' diff --git a/code/game/objects/items/tools/_tools.dm b/code/game/objects/items/tools/_tools.dm index 8fbba03478e1..78d8b408186f 100644 --- a/code/game/objects/items/tools/_tools.dm +++ b/code/game/objects/items/tools/_tools.dm @@ -1,119 +1,33 @@ -// Time added to tool operations in percent based on original time -// (if you dig hole in 10 seconds then 50 ADDITIONAL_TIME_LOWHEALTH will add 0 on full health, 2.5sec on 50% health and 5sec ~0% health) -#define ADDITIONAL_TIME_LOWHEALTH 60 - /obj/item/tool name = "tool" icon = 'icons/obj/tools.dmi' slot_flags = SLOT_BELT - force = WEAPON_FORCE_NORMAL - throwforce = WEAPON_FORCE_NORMAL + force = 10 + throwforce = 10 w_class = ITEM_SIZE_SMALL -/* - //spawn values - bad_type = /obj/item/tool - spawn_tags = SPAWN_TAG_TOOL - - price_tag = 20 - - health = 600 - maxHealth = 600 - - var/tool_in_use = FALSE - - var/force_upgrade_mults = 1 - - var/force_upgrade_mods = 0 - - var/sparks_on_use = FALSE //Set to TRUE if you want to have sparks on each use of a tool - var/eye_hazard = FALSE //Set to TRUE should damage users eyes if they without eye protection - - var/use_power_cost = 0 //For tool system, determinze how much power tool will drain from cells, 0 means no cell needed - var/obj/item/cell/cell - var/suitable_cell //Dont forget to edit this for a tool, if you want in to consume cells - var/passive_power_cost = 1 //Energy consumed per process tick while active - - var/use_fuel_cost = 0 //Same, only for fuel. And for the sake of God, DONT USE CELLS AND FUEL SIMULTANEOUSLY. - var/passive_fuel_cost = 0.03 //Fuel consumed per process tick while active - var/max_fuel = 0 - - var/mode = NOMODE //For various tool icon updates. - - //Third type of resource, stock. A tool that uses physical objects (or itself) in order to work - //Currently used for tape roll - var/use_stock_cost = 0 - var/stock = 0 - var/max_stock = 0 - var/allow_decimal_stock = TRUE - var/delete_when_empty = TRUE - - - //Variables used for tool degradation - health = 0 // Health of a tool. - maxHealth = 1000 - var/degradation = 0.8 //If nonzero, the health of the tool decreases by this amount after each tool operation - var/health_threshold = 40 // threshold in percent on which tool health stops dropping - var/lastNearBreakMessage = 0 // used to show messages that tool is about to break - var/isBroken = FALSE - - - var/toggleable = FALSE //Determines if it can be switched ON or OFF, for example, if you need a tool that will consume power/fuel upon turning it ON only. Such as welder. - var/switched_on = FALSE //Curent status of tool. Dont edit this in subtypes vars, its for procs only. - var/switched_on_qualities //This var will REPLACE tool_qualities when tool will be toggled on. - var/switched_on_force - var/switched_on_hitsound - var/switched_off_qualities //This var will REPLACE tool_qualities when tool will be toggled off. So its possible for tool to have diferent qualities both for ON and OFF state. - var/create_hot_spot = FALSE //Set this TRUE to ignite plasma on turf with tool upon activation - var/glow_color //Set color of glow upon activation, or leave it null if you dont want any light - var/last_tooluse = 0 //When the tool was last used for a tool operation. This is set both at the start of an operation, and after the doafter call - - //Vars for tool upgrades - var/precision = 0 //Subtracted from failure rates - var/workspeed = 1 //Worktimes are divided by this - var/extra_bulk = 0 //Extra physicial volume added by certain mods - var/list/prefixes = list() -*/ - +/****************************** + /* Data and Checking */ +*******************************/ /obj/item/proc/has_quality(quality_id) return !quality_id || (quality_id in tool_qualities) -/obj/item/tool/admin_debug - name = "Electric Boogaloo 3000" - icon_state = "omnitool" - item_state = "omnitool" - spawn_tags = null - tool_qualities = list(QUALITY_BOLT_TURNING = 100, - QUALITY_PRYING = 100, - QUALITY_WELDING = 100, - QUALITY_SCREW_DRIVING = 100, - QUALITY_CLAMPING = 100, - QUALITY_CAUTERIZING = 100, - QUALITY_WIRE_CUTTING = 100, - QUALITY_RETRACTING = 100, - QUALITY_DRILLING = 100, - QUALITY_SAWING = 100, - QUALITY_VEIN_FIXING = 100, - QUALITY_BONE_SETTING = 100, - QUALITY_BONE_FIXING = 100, - QUALITY_SHOVELING = 100, - QUALITY_DIGGING = 100, - QUALITY_EXCAVATION = 100, - QUALITY_CUTTING = 100, - QUALITY_HAMMERING = 100, - QUALITY_FILING = 100) -/obj/item/tool/hammer - name = "ballpin hammer" - icon_state = "oldcrowbar" - tool_qualities = (QUALITY_HAMMERING = 50) +/obj/item/proc/get_tool_quality(quality_id) + if(tool_qualities && tool_qualities.len) + return tool_qualities[quality_id] + return null + +//We are cheking if our item got required qualities. If we require several qualities, and item posses more than one of those, we ask user to choose how that item should be used +/obj/item/proc/get_tool_type(mob/living/user, list/required_qualities, atom/use_on, datum/callback/CB) + if(!tool_qualities) //This is not a tool, or does not have tool qualities + return -/obj/item/tool/file - name = "metal file" - icon_state = "oldwrench" - tool_qualities = (QUALITY_FILING = 50) + var/list/L = required_qualities & tool_qualities -/obj/item/tool/saw - name = "rusty hacksaw" - icon_state = "oldcutters_map" - tool_qualities = (QUALITY_SAWING = 50) + if(L.len) + if(L.len == 1) + return L[1] + for(var/i in L) + L[i] = image(icon = 'icons/mob/radial.dmi', icon_state = i) + return show_radial_menu(user, use_on ? use_on : user, L, tooltips = TRUE, require_near = TRUE, custom_check = CB) diff --git a/code/game/objects/items/tools/simple_tools.dm b/code/game/objects/items/tools/simple_tools.dm new file mode 100644 index 000000000000..da9c76cddf44 --- /dev/null +++ b/code/game/objects/items/tools/simple_tools.dm @@ -0,0 +1,41 @@ +// Tools not cool enough for there own file + +/obj/item/tool/admin_debug + name = "Electric Boogaloo 3000" + icon_state = "omnitool" + item_state = "omnitool" + spawn_tags = null + tool_qualities = list(QUALITY_BOLT_TURNING = 100, + QUALITY_PRYING = 100, + QUALITY_WELDING = 100, + QUALITY_SCREW_DRIVING = 100, + QUALITY_CLAMPING = 100, + QUALITY_CAUTERIZING = 100, + QUALITY_WIRE_CUTTING = 100, + QUALITY_RETRACTING = 100, + QUALITY_DRILLING = 100, + QUALITY_SAWING = 100, + QUALITY_VEIN_FIXING = 100, + QUALITY_BONE_SETTING = 100, + QUALITY_BONE_FIXING = 100, + QUALITY_SHOVELING = 100, + QUALITY_DIGGING = 100, + QUALITY_EXCAVATION = 100, + QUALITY_CUTTING = 100, + QUALITY_HAMMERING = 100, + QUALITY_FILING = 100) + +/obj/item/tool/hammer + name = "ballpin hammer" + icon_state = "oldcrowbar" + tool_qualities = (QUALITY_HAMMERING = 50) + +/obj/item/tool/file + name = "metal file" + icon_state = "oldwrench" + tool_qualities = (QUALITY_FILING = 50) + +/obj/item/tool/saw + name = "rusty hacksaw" + icon_state = "oldcutters_map" + tool_qualities = (QUALITY_SAWING = 50) diff --git a/shiptest.dme b/shiptest.dme index 508ee627d31b..ca26079a77a2 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1310,6 +1310,7 @@ #include "code\game\objects\items\tools\chisel.dm" #include "code\game\objects\items\tools\crowbar.dm" #include "code\game\objects\items\tools\screwdriver.dm" +#include "code\game\objects\items\tools\simple_tools.dm" #include "code\game\objects\items\tools\weldingtool.dm" #include "code\game\objects\items\tools\wirecutters.dm" #include "code\game\objects\items\tools\wrench.dm" From d0f65524b1d003e50c19e77fbaa853165f20549f Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Tue, 2 Apr 2024 10:27:49 -0500 Subject: [PATCH 64/89] yea --- code/game/objects/items/tools/_tools.dm | 4 ++-- code/game/objects/items/tools/simple_tools.dm | 7 +++---- code/modules/guncrafting/lathe.dm | 2 +- code/modules/guncrafting/recipe.dm | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/code/game/objects/items/tools/_tools.dm b/code/game/objects/items/tools/_tools.dm index 78d8b408186f..eb4e03e9b406 100644 --- a/code/game/objects/items/tools/_tools.dm +++ b/code/game/objects/items/tools/_tools.dm @@ -1,10 +1,10 @@ /obj/item/tool name = "tool" icon = 'icons/obj/tools.dmi' - slot_flags = SLOT_BELT + slot_flags = ITEM_SLOT_BELT force = 10 throwforce = 10 - w_class = ITEM_SIZE_SMALL + w_class = WEIGHT_CLASS_SMALL /****************************** /* Data and Checking */ diff --git a/code/game/objects/items/tools/simple_tools.dm b/code/game/objects/items/tools/simple_tools.dm index da9c76cddf44..e30fe286a9c8 100644 --- a/code/game/objects/items/tools/simple_tools.dm +++ b/code/game/objects/items/tools/simple_tools.dm @@ -4,7 +4,6 @@ name = "Electric Boogaloo 3000" icon_state = "omnitool" item_state = "omnitool" - spawn_tags = null tool_qualities = list(QUALITY_BOLT_TURNING = 100, QUALITY_PRYING = 100, QUALITY_WELDING = 100, @@ -28,14 +27,14 @@ /obj/item/tool/hammer name = "ballpin hammer" icon_state = "oldcrowbar" - tool_qualities = (QUALITY_HAMMERING = 50) + tool_qualities = list(QUALITY_HAMMERING = 50) /obj/item/tool/file name = "metal file" icon_state = "oldwrench" - tool_qualities = (QUALITY_FILING = 50) + tool_qualities = list(QUALITY_FILING = 50) /obj/item/tool/saw name = "rusty hacksaw" icon_state = "oldcutters_map" - tool_qualities = (QUALITY_SAWING = 50) + tool_qualities = list(QUALITY_SAWING = 50) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index 57eacfea330b..d0a235c753a7 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -60,7 +60,7 @@ if(mode == "Fabricate") work_on_part(user) else - balloon_alert(user, "You need a tool with [tool_required] to work on this part.") + balloon_alert(user, "you need a tool with [tool_required] to work on this part.") if(work_piece) to_chat(user, "You cant add another item to the lathe.") return diff --git a/code/modules/guncrafting/recipe.dm b/code/modules/guncrafting/recipe.dm index 84b234a75b38..d1432cf6952c 100644 --- a/code/modules/guncrafting/recipe.dm +++ b/code/modules/guncrafting/recipe.dm @@ -33,7 +33,7 @@ /datum/lathe_recipe/gun/candor result = /obj/item/gun/ballistic/automatic/pistol/candor valid_parts = list( - /obj/item/part/gun/frame/candor, + /obj/item/part/gun/frame/pistol/candor, /obj/item/part/gun/modular/grip/wood, /obj/item/part/gun/modular/mechanism/pistol, /obj/item/part/gun/modular/barrel/pistol From ecfdd90f0b2352e72f6a80801e8ae90df516cebd Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Tue, 2 Apr 2024 10:31:22 -0500 Subject: [PATCH 65/89] pass mabye --- code/modules/guncrafting/lathe.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/guncrafting/lathe.dm b/code/modules/guncrafting/lathe.dm index d0a235c753a7..f1bae422a228 100644 --- a/code/modules/guncrafting/lathe.dm +++ b/code/modules/guncrafting/lathe.dm @@ -204,7 +204,7 @@ to_chat(user, "You have [steps_left] steps left.") user.adjustStaminaLoss(DECONSTRUCT_STAMINA_USE) tool_required = pick(tools_required) - balloon_alert(user, "You need a [tool_required.name] next.") + balloon_alert(user, "You need a tool with [tool_required] next.") work_on_part(user) else fabricate_part(user) From e7a6c2b67a7f2b57e7ea08aec27bb91851034324 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 3 Apr 2024 21:44:31 -0500 Subject: [PATCH 66/89] wow surpised it already builds --- code/controllers/subsystem/traumas.dm | 1 - code/game/gamemodes/objective.dm | 25 --- code/game/objects/items/storage/belt.dm | 27 ---- .../antagonists/survivalist/survivalist.dm | 14 -- .../antagonists/wizard/equipment/spellbook.dm | 47 ------ code/modules/antagonists/wizard/wizard.dm | 1 - code/modules/cargo/exports/lavaland.dm | 4 +- code/modules/events/wizard/magicarp.dm | 8 +- code/modules/mining/equipment/survival_pod.dm | 4 - .../mining/lavaland/necropolis_chests.dm | 4 +- .../modules/mob/dead/new_player/new_player.dm | 2 - .../projectiles/ammunition/special/magic.dm | 4 +- code/modules/projectiles/guns/magic/staff.dm | 142 ------------------ .../guns/{magic/wand.dm => misc/debug.dm} | 140 ----------------- code/modules/projectiles/projectile/debug.dm | 23 +++ code/modules/projectiles/projectile/magic.dm | 50 ------ .../spells/spell_types/rightandwrong.dm | 101 +------------ code/modules/vending/autodrobe.dm | 1 - shiptest.dme | 4 +- 19 files changed, 40 insertions(+), 562 deletions(-) delete mode 100644 code/modules/projectiles/guns/magic/staff.dm rename code/modules/projectiles/guns/{magic/wand.dm => misc/debug.dm} (51%) create mode 100644 code/modules/projectiles/projectile/debug.dm diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 1e697327c844..9b6fd4b65daa 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -132,7 +132,6 @@ SUBSYSTEM_DEF(traumas) /obj/item/soulstone, /obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff, /obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard, - /obj/item/gun/magic/staff, /obj/item/gun/magic/wand, /obj/item/nullrod, /obj/item/clothing/under/rank/civilian/chaplain)), "aliens" = typecacheof(list( diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 82735ff9d522..65e161f2176b 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -883,31 +883,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) explanation_text = "Steal at least five guns!" wanted_items = list(/obj/item/gun) -/datum/objective/steal_five_of_type/summon_magic - name = "steal magic" - explanation_text = "Steal at least five magical artefacts!" - wanted_items = list() - -/datum/objective/steal_five_of_type/summon_magic/New() - wanted_items = GLOB.summoned_magic_objectives - ..() - -/datum/objective/steal_five_of_type/summon_magic/check_completion() - var/list/datum/mind/owners = get_owners() - var/stolen_count = 0 - for(var/datum/mind/M in owners) - if(!isliving(M.current)) - continue - var/list/all_items = M.current.GetAllContents() //this should get things in cheesewheels, books, etc. - for(var/obj/I in all_items) //Check for wanted items - if(istype(I, /obj/item/book/granter/spell)) - var/obj/item/book/granter/spell/spellbook = I - if(!spellbook.used || !spellbook.oneuse) //if the book still has powers... - stolen_count++ //it counts. nice. - else if(is_type_in_typecache(I, wanted_items)) - stolen_count++ - return stolen_count >= 5 - //Created by admin tools /datum/objective/custom name = "custom" diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index d6ef29b86233..216bf5b23485 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -592,33 +592,6 @@ /obj/item/multitool = 1) generate_items_inside(items_inside,src) - -/obj/item/storage/belt/wands - name = "wand belt" - desc = "A belt designed to hold various rods of power. A veritable fanny pack of exotic magic." - icon_state = "soulstone" - item_state = "soulstone" - -/obj/item/storage/belt/wands/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.set_holdable(list( - /obj/item/gun/magic/wand - )) - -/obj/item/storage/belt/wands/full/PopulateContents() - new /obj/item/gun/magic/wand/death(src) - new /obj/item/gun/magic/wand/resurrection(src) - new /obj/item/gun/magic/wand/polymorph(src) - new /obj/item/gun/magic/wand/teleport(src) - new /obj/item/gun/magic/wand/door(src) - new /obj/item/gun/magic/wand/fireball(src) - - for(var/obj/item/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition - W.max_charges = initial(W.max_charges) - W.charges = W.max_charges - /obj/item/storage/belt/janitor name = "janibelt" desc = "A belt used to hold most janitorial supplies." diff --git a/code/modules/antagonists/survivalist/survivalist.dm b/code/modules/antagonists/survivalist/survivalist.dm index 0e38dc57105d..1fb457eea64b 100644 --- a/code/modules/antagonists/survivalist/survivalist.dm +++ b/code/modules/antagonists/survivalist/survivalist.dm @@ -26,17 +26,3 @@ guns.owner = owner objectives += guns ..() - -/datum/antagonist/survivalist/magic - name = "Amateur Magician" - greet_message = "Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way." - -/datum/antagonist/survivalist/magic/greet() - ..() - to_chat(owner, "<span class='notice'>As a wonderful magician, you should remember that spellbooks don't mean anything if they are used up.</span>") - -/datum/antagonist/survivalist/magic/forge_objectives() - var/datum/objective/steal_five_of_type/summon_magic/magic = new - magic.owner = owner - objectives += magic - ..() diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index cf85a922dbb6..690cf94cd9a3 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -279,47 +279,6 @@ dat += "[surplus] left.<br>" return dat -/datum/spellbook_entry/item/staffchange - name = "Staff of Change" - desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - item_path = /obj/item/gun/magic/staff/change - -/datum/spellbook_entry/item/staffanimation - name = "Staff of Animation" - desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." - item_path = /obj/item/gun/magic/staff/animate - category = "Assistance" - -/datum/spellbook_entry/item/staffchaos - name = "Staff of Chaos" - desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." - item_path = /obj/item/gun/magic/staff/chaos - -/datum/spellbook_entry/item/spellblade - name = "Spellblade" - desc = "A sword capable of firing blasts of energy which rip targets limb from limb." - item_path = /obj/item/gun/magic/staff/spellblade - -/datum/spellbook_entry/item/staffdoor - name = "Staff of Door Creation" - desc = "A particular staff that can mold solid walls into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." - item_path = /obj/item/gun/magic/staff/door - cost = 1 - category = "Mobility" - -/datum/spellbook_entry/item/staffhealing - name = "Staff of Healing" - desc = "An altruistic staff that can heal the lame and raise the dead." - item_path = /obj/item/gun/magic/staff/healing - cost = 1 - category = "Defensive" - -/datum/spellbook_entry/item/lockerstaff - name = "Staff of the Locker" - desc = "A staff that shoots lockers. It eats anyone it hits on its way, leaving a welded locker with your victims behind." - item_path = /obj/item/gun/magic/staff/locker - category = "Defensive" - /datum/spellbook_entry/item/scryingorb name = "Scrying Orb" desc = "An incandescent orb of crackling energy. Using it will allow you to release your ghost while alive, allowing you to spy upon others and talk to the deceased. In addition, buying it will permanently grant you X-ray vision." @@ -344,12 +303,6 @@ item_path = /obj/item/necromantic_stone category = "Assistance" -/datum/spellbook_entry/item/wands - name = "Wand Assortment" - desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative with their use. Comes in a handy belt." - item_path = /obj/item/storage/belt/wands/full - category = "Defensive" - /datum/spellbook_entry/item/armor name = "Mastercrafted Armor Set" desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 14cf56d51ae0..96a41b2ac07b 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -204,7 +204,6 @@ if(APPRENTICE_HEALING) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) - H.put_in_hands(new /obj/item/gun/magic/staff/healing(H)) to_chat(owner, "<B>Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned life-saving survival spells. You are able to cast charge and forcewall.") if(APPRENTICE_ROBELESS) owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index 9b0adbf0d106..e325b8e8d09b 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -23,7 +23,6 @@ /obj/item/lava_staff, /obj/item/ship_in_a_bottle, /obj/item/clothing/shoes/clown_shoes/banana_shoes, - /obj/item/gun/magic/staff/honk, /obj/item/kitchen/knife/envy, /obj/item/veilrender/vealrender, /obj/item/nullrod/scythe/talking/necro, @@ -54,8 +53,7 @@ /obj/machinery/anomalous_crystal, /obj/item/mayhem, /obj/item/blood_contract, - /obj/item/guardiancreator/miner/choose,//this is basically the most valulable mining loot so good luck getting a miner to part ways - /obj/item/gun/magic/staff/spellblade, + /obj/item/guardiancreator/miner/choose//this is basically the most valulable mining loot so good luck getting a miner to part ways ) /datum/export/lavaland/trophycommon diff --git a/code/modules/events/wizard/magicarp.dm b/code/modules/events/wizard/magicarp.dm index 68a38f0479e1..2546b1ebbb18 100644 --- a/code/modules/events/wizard/magicarp.dm +++ b/code/modules/events/wizard/magicarp.dm @@ -41,8 +41,8 @@ food_type = list() tame_chance = 0 bonus_tame_chance = 0 - var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, + var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, + /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage) /mob/living/simple_animal/hostile/carp/ranged/Initialize() @@ -69,7 +69,7 @@ /mob/living/simple_animal/hostile/carp/ranged/chaos/xenobiology gold_core_spawnable = HOSTILE_SPAWN - allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, + allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, + /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/nothing, /obj/projectile/magic/aoe/lightning, /obj/projectile/magic/necropotence, /obj/projectile/magic/fortify, /obj/projectile/magic/spell/magic_missile)//now THIS is chaos diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 5e012735b706..9cee3f8742f4 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -313,10 +313,6 @@ /obj/item/hierophant_club, /obj/item/gun/energy/minigun, /obj/item/gun/ballistic/automatic/hmg/l6_saw, - /obj/item/gun/magic/staff/chaos, - /obj/item/gun/magic/staff/spellblade, - /obj/item/gun/magic/wand/death, - /obj/item/gun/magic/wand/fireball, /obj/item/stack/telecrystal/twenty, /obj/item/nuke_core, /obj/item/phylactery, diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 985c5212299b..4edc13071932 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -1493,14 +1493,12 @@ /obj/structure/closet/crate/necropolis/bubblegum/PopulateContents() new /obj/item/clothing/suit/space/hostile_environment(src) new /obj/item/clothing/head/helmet/space/hostile_environment(src) - var/loot = rand(1,3) + var/loot = rand(1,2) switch(loot) if(1) new /obj/item/mayhem(src) if(2) new /obj/item/blood_contract(src) - if(3) - new /obj/item/gun/magic/staff/spellblade(src) /obj/structure/closet/crate/necropolis/bubblegum/crusher name = "bloody bubblegum chest" diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 9baa46f526b5..46d5240e922b 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -335,8 +335,6 @@ if(GLOB.summon_guns_triggered) give_guns(humanc) - if(GLOB.summon_magic_triggered) - give_magic(humanc) if(GLOB.curse_of_madness_triggered) give_madness(humanc, GLOB.curse_of_madness_triggered) if(CONFIG_GET(flag/roundstart_traits)) diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index 4d9aae44329d..5d30ba97690e 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -12,11 +12,11 @@ projectile_type = /obj/projectile/magic/animate /obj/item/ammo_casing/magic/heal - projectile_type = /obj/projectile/magic/resurrection + projectile_type = /obj/projectile/debug/resurrection harmful = FALSE /obj/item/ammo_casing/magic/death - projectile_type = /obj/projectile/magic/death + projectile_type = /obj/projectile/debug/death /obj/item/ammo_casing/magic/teleport projectile_type = /obj/projectile/magic/teleport diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm deleted file mode 100644 index e8f1683d21a1..000000000000 --- a/code/modules/projectiles/guns/magic/staff.dm +++ /dev/null @@ -1,142 +0,0 @@ -/obj/item/gun/magic/staff - slot_flags = ITEM_SLOT_BACK - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - item_flags = NEEDS_PERMIT | NO_MAT_REDEMPTION - -/obj/item/gun/magic/staff/change - name = "staff of change" - desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/change - icon_state = "staffofchange" - item_state = "staffofchange" - -/obj/item/gun/magic/staff/animate - name = "staff of animation" - desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." - fire_sound = 'sound/magic/staff_animation.ogg' - ammo_type = /obj/item/ammo_casing/magic/animate - icon_state = "staffofanimation" - item_state = "staffofanimation" - -/obj/item/gun/magic/staff/healing - name = "staff of healing" - desc = "An artefact that spits bolts of restoring magic which can remove ailments of all kinds and even raise the dead." - fire_sound = 'sound/magic/staff_healing.ogg' - ammo_type = /obj/item/ammo_casing/magic/heal - icon_state = "staffofhealing" - item_state = "staffofhealing" - -/obj/item/gun/magic/staff/healing/handle_suicide() //Stops people trying to commit suicide to heal themselves - return - -/obj/item/gun/magic/staff/chaos - name = "staff of chaos" - desc = "An artefact that spits bolts of chaotic magic that can potentially do anything." - fire_sound = 'sound/magic/staff_chaos.ogg' - ammo_type = /obj/item/ammo_casing/magic/chaos - icon_state = "staffofchaos" - item_state = "staffofchaos" - max_charges = 10 - recharge_rate = 2 - no_den_usage = 1 - var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/flying, - /obj/projectile/magic/bounty, /obj/projectile/magic/antimagic, /obj/projectile/magic/fetch, /obj/projectile/magic/sapping, - /obj/projectile/magic/necropotence, /obj/projectile/magic, /obj/projectile/temp/chill, /obj/projectile/magic/wipe) - -/obj/item/gun/magic/staff/chaos/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - chambered.projectile_type = pick(allowed_projectile_types) - . = ..() - -/obj/item/gun/magic/staff/door - name = "staff of door creation" - desc = "An artefact that spits bolts of transformative magic that can create doors in walls." - fire_sound = 'sound/magic/staff_door.ogg' - ammo_type = /obj/item/ammo_casing/magic/door - icon_state = "staffofdoor" - item_state = "staffofdoor" - max_charges = 10 - recharge_rate = 2 - no_den_usage = 1 - -/obj/item/gun/magic/staff/honk - name = "staff of the honkmother" - desc = "Honk." - fire_sound = 'sound/items/airhorn.ogg' - ammo_type = /obj/item/ammo_casing/magic/honk - icon_state = "honker" - item_state = "honker" - max_charges = 4 - recharge_rate = 8 - -/obj/item/gun/magic/staff/spellblade - name = "spellblade" - desc = "A deadly combination of laziness and boodlust, this blade allows the user to dismember their enemies without all the hard work of actually swinging the sword." - fire_sound = 'sound/magic/fireball.ogg' - ammo_type = /obj/item/ammo_casing/magic/spellblade - icon_state = "spellblade" - item_state = "spellblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - hitsound = 'sound/weapons/rapierhit.ogg' - force = 20 - armour_penetration = 75 - block_chance = 50 - sharpness = IS_SHARP - max_charges = 4 - -/obj/item/gun/magic/staff/spellblade/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 15, 125, 0, hitsound) - -/obj/item/gun/magic/staff/spellblade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 - return ..() - -/obj/item/gun/magic/staff/locker - name = "staff of the locker" - desc = "An artefact that expells encapsulating bolts, for incapacitating thy enemy." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/locker - icon_state = "locker" - item_state = "locker" - max_charges = 6 - recharge_rate = 4 - -//yes, they don't have sounds. they're admin staves, and their projectiles will play the chaos bolt sound anyway so why bother? - -/obj/item/gun/magic/staff/flying - name = "staff of flying" - desc = "An artefact that spits bolts of graceful magic that can make something fly." - fire_sound = 'sound/magic/staff_healing.ogg' - ammo_type = /obj/item/ammo_casing/magic/flying - icon_state = "staffofflight" - item_state = "staffofflight" - -/obj/item/gun/magic/staff/sapping - name = "staff of sapping" - desc = "An artefact that spits bolts of sapping magic that can make something sad." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/sapping - icon_state = "staffofsapping" - item_state = "staffofsapping" - -/obj/item/gun/magic/staff/necropotence - name = "staff of necropotence" - desc = "An artefact that spits bolts of death magic that can repurpose the soul." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/necropotence - icon_state = "staffofnecropotence" - item_state = "staffofnecropotence" - -/obj/item/gun/magic/staff/wipe - name = "staff of possession" - desc = "An artefact that spits bolts of mind-unlocking magic that can let ghosts invade the victim's mind." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/wipe - icon_state = "staffofwipe" - item_state = "staffofwipe" diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/misc/debug.dm similarity index 51% rename from code/modules/projectiles/guns/magic/wand.dm rename to code/modules/projectiles/guns/misc/debug.dm index c6a25127878a..607dbec425b5 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/misc/debug.dm @@ -1,6 +1,3 @@ -//For use in prob() to determine if an empty wand will shoot once then break. -#define WAND_WREST_CHANCE (1/121) - /obj/item/gun/magic/wand name = "wand" desc = "You shouldn't have this." @@ -57,24 +54,11 @@ return update_appearance() -/obj/item/gun/magic/wand/shoot_with_empty_chamber(mob/living/user) - if(prob(100*WAND_WREST_CHANCE)) - to_chat(user,"<span class='danger'>You manage to activate [src] one last time.</span>") - charges++ - recharge_newshot() - return TRUE - return ..() - /obj/item/gun/magic/wand/proc/zap_self(mob/living/user) user.visible_message("<span class='danger'>[user] zaps [user.p_them()]self with [src].</span>") playsound(user, fire_sound, 50, TRUE) user.log_message("zapped [user.p_them()]self with a <b>[src]</b>", LOG_ATTACK) - -///////////////////////////////////// -//WAND OF DEATH -///////////////////////////////////// - /obj/item/gun/magic/wand/death name = "wand of death" desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail." @@ -108,11 +92,6 @@ can_charge = TRUE recharge_rate = 1 - -///////////////////////////////////// -//WAND OF HEALING -///////////////////////////////////// - /obj/item/gun/magic/wand/resurrection name = "wand of healing" desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason." @@ -145,122 +124,3 @@ variable_charges = FALSE can_charge = TRUE recharge_rate = 1 - -///////////////////////////////////// -//WAND OF POLYMORPH -///////////////////////////////////// - -/obj/item/gun/magic/wand/polymorph - name = "wand of polymorph" - desc = "This wand is attuned to chaos and will radically alter the victim's form." - ammo_type = /obj/item/ammo_casing/magic/change - icon_state = "polywand" - base_icon_state = "polywand" - fire_sound = 'sound/magic/staff_change.ogg' - max_charges = 10 //10, 5, 5, 4 - -/obj/item/gun/magic/wand/polymorph/zap_self(mob/living/user) - ..() //because the user mob ceases to exists by the time wabbajack fully resolves - - wabbajack(user) - charges-- - -///////////////////////////////////// -//WAND OF TELEPORTATION -///////////////////////////////////// - -/obj/item/gun/magic/wand/teleport - name = "wand of teleportation" - desc = "This wand will wrench targets through space and time to move them somewhere else." - ammo_type = /obj/item/ammo_casing/magic/teleport - fire_sound = 'sound/magic/wand_teleport.ogg' - icon_state = "telewand" - base_icon_state = "telewand" - max_charges = 10 //10, 5, 5, 4 - no_den_usage = TRUE - -/obj/item/gun/magic/wand/teleport/zap_self(mob/living/user) - if(do_teleport(user, user, 10, channel = TELEPORT_CHANNEL_MAGIC)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(3, user.loc) - smoke.start() - charges-- - ..() - -/obj/item/gun/magic/wand/safety - name = "wand of safety" - desc = "This wand will use the lightest of bluespace currents to gently place the target somewhere safe." - ammo_type = /obj/item/ammo_casing/magic/safety - fire_sound = 'sound/magic/wand_teleport.ogg' - icon_state = "telewand" - base_icon_state = "telewand" - max_charges = 10 //10, 5, 5, 4 - no_den_usage = FALSE - -/obj/item/gun/magic/wand/safety/zap_self(mob/living/user) - var/turf/origin = get_turf(user) - var/turf/destination = find_safe_turf() - - if(do_teleport(user, destination, channel=TELEPORT_CHANNEL_MAGIC)) - for(var/t in list(origin, destination)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, t) - smoke.start() - ..() - -/obj/item/gun/magic/wand/safety/debug - desc = "This wand has 'find_safe_turf()' engraved into its blue wood. Perhaps it's a secret message?" - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - - -///////////////////////////////////// -//WAND OF DOOR CREATION -///////////////////////////////////// - -/obj/item/gun/magic/wand/door - name = "wand of door creation" - desc = "This particular wand can create doors in any wall for the unscrupulous wizard who shuns teleportation magics." - ammo_type = /obj/item/ammo_casing/magic/door - icon_state = "doorwand" - base_icon_state = "doorwand" - fire_sound = 'sound/magic/staff_door.ogg' - max_charges = 20 //20, 10, 10, 7 - no_den_usage = 1 - -/obj/item/gun/magic/wand/door/zap_self(mob/living/user) - to_chat(user, "<span class='notice'>You feel vaguely more open with your feelings.</span>") - charges-- - ..() - -///////////////////////////////////// -//WAND OF FIREBALL -///////////////////////////////////// - -/obj/item/gun/magic/wand/fireball - name = "wand of fireball" - desc = "This wand shoots scorching balls of fire that explode into destructive flames." - fire_sound = 'sound/magic/fireball.ogg' - ammo_type = /obj/item/ammo_casing/magic/fireball - icon_state = "firewand" - base_icon_state = "firewand" - max_charges = 8 //8, 4, 4, 3 - -/obj/item/gun/magic/wand/fireball/zap_self(mob/living/user) - ..() - explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) - charges-- - -///////////////////////////////////// -//WAND OF NOTHING -///////////////////////////////////// - -/obj/item/gun/magic/wand/nothing - name = "wand of nothing" - desc = "It's not just a stick, it's a MAGIC stick?" - ammo_type = /obj/item/ammo_casing/magic/nothing - - -#undef WAND_WREST_CHANCE diff --git a/code/modules/projectiles/projectile/debug.dm b/code/modules/projectiles/projectile/debug.dm new file mode 100644 index 000000000000..06b1ea7ca3e1 --- /dev/null +++ b/code/modules/projectiles/projectile/debug.dm @@ -0,0 +1,23 @@ +/obj/projectile/debug/death + name = "bolt of death" + icon_state = "pulse1_bl" + +/obj/projectile/debug/death/on_hit(target) + . = ..() + if(ismob(target)) + var/mob/M = target + M.death(0) + +/obj/projectile/debug/resurrection + name = "bolt of resurrection" + icon_state = "ion" + nodamage = TRUE + +/obj/projectile/debug/resurrection/on_hit(mob/living/carbon/target) + . = ..() + if(isliving(target)) + if(target.revive(full_heal = TRUE, admin_revive = TRUE)) + target.grab_ghost(force = TRUE) // even suicides + to_chat(target, "<span class='notice'>You rise with a start, you're alive!!!</span>") + else if(target.stat != DEAD) + to_chat(target, "<span class='notice'>You feel great!</span>") diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 458c19d053da..544e2cc95005 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -7,56 +7,6 @@ armour_penetration = 100 flag = "magic" -/obj/projectile/magic/death - name = "bolt of death" - icon_state = "pulse1_bl" - -/obj/projectile/magic/death/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - if(isliving(M)) - var/mob/living/L = M - if(L.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead - if(L.hellbound && L.stat == DEAD) - return BULLET_ACT_BLOCK - if(L.revive(full_heal = TRUE, admin_revive = TRUE)) - L.grab_ghost(force = TRUE) - to_chat(L, "<span class='notice'>You rise with a start, you're undead!!!</span>") - else if(L.stat != DEAD) - to_chat(L, "<span class='notice'>You feel great!</span>") - else - L.death(0) - else - M.death(0) - -/obj/projectile/magic/resurrection - name = "bolt of resurrection" - icon_state = "ion" - damage = 0 - damage_type = OXY - nodamage = TRUE - -/obj/projectile/magic/resurrection/on_hit(mob/living/carbon/target) - . = ..() - if(isliving(target)) - if(target.anti_magic_check()) - target.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - if(target.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead - target.death(0) - else - if(target.hellbound && target.stat == DEAD) - return BULLET_ACT_BLOCK - if(target.revive(full_heal = TRUE, admin_revive = TRUE)) - target.grab_ghost(force = TRUE) // even suicides - to_chat(target, "<span class='notice'>You rise with a start, you're alive!!!</span>") - else if(target.stat != DEAD) - to_chat(target, "<span class='notice'>You feel great!</span>") - /obj/projectile/magic/teleport name = "bolt of teleportation" icon_state = "bluespace" diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index e79ffb8a491e..ed6d9a9b957d 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -49,60 +49,8 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/energy/laser/scatter, /obj/item/gun/energy/gravity_gun)) -//if you add anything that isn't covered by the typepaths below, add it to summon_magic_objective_types -GLOBAL_LIST_INIT(summoned_magic, list( - /obj/item/book/granter/spell/fireball, - /obj/item/book/granter/spell/smoke, - /obj/item/book/granter/spell/blind, - /obj/item/book/granter/spell/mindswap, - /obj/item/book/granter/spell/forcewall, - /obj/item/book/granter/spell/knock, - /obj/item/book/granter/spell/barnyard, - /obj/item/book/granter/spell/charge, - /obj/item/book/granter/spell/summonitem, - /obj/item/gun/magic/wand/nothing, - /obj/item/gun/magic/wand/death, - /obj/item/gun/magic/wand/resurrection, - /obj/item/gun/magic/wand/polymorph, - /obj/item/gun/magic/wand/teleport, - /obj/item/gun/magic/wand/door, - /obj/item/gun/magic/wand/fireball, - /obj/item/gun/magic/staff/healing, - /obj/item/gun/magic/staff/door, - /obj/item/scrying, - /obj/item/voodoo, - /obj/item/warpwhistle, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, - /obj/item/immortality_talisman, - /obj/item/melee/ghost_sword)) - -GLOBAL_LIST_INIT(summoned_special_magic, list( - /obj/item/gun/magic/staff/change, - /obj/item/gun/magic/staff/animate, - /obj/item/storage/belt/wands/full, - /obj/item/antag_spawner/contract, - /obj/item/gun/magic/staff/chaos, - /obj/item/necromantic_stone, - /obj/item/blood_contract)) - -//everything above except for single use spellbooks, because they are counted separately (and are for basic bitches anyways) -GLOBAL_LIST_INIT(summoned_magic_objectives, list( - /obj/item/antag_spawner/contract, - /obj/item/blood_contract, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, - /obj/item/gun/magic, - /obj/item/immortality_talisman, - /obj/item/melee/ghost_sword, - /obj/item/necromantic_stone, - /obj/item/scrying, - /obj/item/spellbook, - /obj/item/storage/belt/wands/full, - /obj/item/voodoo, - /obj/item/warpwhistle)) - // If true, it's the probability of triggering "survivor" antag. GLOBAL_VAR_INIT(summon_guns_triggered, FALSE) -GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) /proc/give_guns(mob/living/carbon/human/H) if(H.stat == DEAD || !(H.client)) @@ -125,54 +73,19 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) to_chat(H, "<span class='warning'>\A [G] appears [in_hand ? "in your hand" : "at your feet"]!</span>") -/proc/give_magic(mob/living/carbon/human/H) - if(H.stat == DEAD || !(H.client)) - return - if(H.mind) - if(iswizard(H) || H.mind.has_antag_datum(/datum/antagonist/survivalist/magic)) - return - - if(prob(GLOB.summon_magic_triggered) && !(H.mind.has_antag_datum(/datum/antagonist))) - H.mind.add_antag_datum(/datum/antagonist/survivalist/magic) - H.log_message("was made into a survivalist, and trusts no one!</font>", LOG_ATTACK, color="red") - - var/magic_type = pick(GLOB.summoned_magic) - var/lucky = FALSE - if(prob(SPECIALIST_MAGIC_PROB)) - magic_type = pick(GLOB.summoned_special_magic) - lucky = TRUE - - var/obj/item/M = new magic_type(get_turf(H)) - playsound(get_turf(H),'sound/magic/summon_magic.ogg', 50, TRUE) - - var/in_hand = H.put_in_hands(M) - - to_chat(H, "<span class='warning'>\A [M] appears [in_hand ? "in your hand" : "at your feet"]!</span>") - if(lucky) - to_chat(H, "<span class='notice'>You feel incredibly lucky.</span>") - - -/proc/rightandwrong(summon_type, mob/user, survivor_probability) - if(user) //in this case either someone holding a spellbook or a badmin - to_chat(user, "<span class='warning'>You summoned [summon_type]!</span>") - message_admins("[ADMIN_LOOKUPFLW(user)] summoned [summon_type]!") - log_game("[key_name(user)] summoned [summon_type]!") +/proc/rightandwrong(mob/user, survivor_probability) + if(user) //in this case someone is a badmin + to_chat(user, "<span class='warning'>You summoned guns!</span>") + message_admins("[ADMIN_LOOKUPFLW(user)] summoned guns!") + log_game("[key_name(user)] summoned guns!") - if(summon_type == SUMMON_MAGIC) - GLOB.summon_magic_triggered = survivor_probability - else if(summon_type == SUMMON_GUNS) - GLOB.summon_guns_triggered = survivor_probability - else - CRASH("Bad summon_type given: [summon_type]") + GLOB.summon_guns_triggered = survivor_probability for(var/mob/living/carbon/human/H in GLOB.player_list) var/turf/T = get_turf(H) if(T && is_away_level(T)) continue - if(summon_type == SUMMON_MAGIC) - give_magic(H) - else - give_guns(H) + give_guns(H) /proc/summonevents() if(!SSevents.wizardmode) diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index b1d85fb3fcbb..6cca888295a2 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -115,7 +115,6 @@ /obj/item/clothing/head/powdered_wig = 1, /obj/item/clothing/accessory/fan_mime_pin = 1, /obj/item/clothing/accessory/fan_clown_pin = 1, - /obj/item/gun/magic/wand/nothing = 2, /obj/item/clothing/glasses/sunglasses/garb = 2, /obj/item/clothing/glasses/blindfold = 1, /obj/item/clothing/mask/muzzle = 2) diff --git a/shiptest.dme b/shiptest.dme index 79563ae65d92..9131ace1bffd 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3031,17 +3031,17 @@ #include "code\modules\projectiles\guns\energy\special.dm" #include "code\modules\projectiles\guns\energy\stun.dm" #include "code\modules\projectiles\guns\faction\gezena\energy_gunsword.dm" -#include "code\modules\projectiles\guns\magic\staff.dm" -#include "code\modules\projectiles\guns\magic\wand.dm" #include "code\modules\projectiles\guns\misc\beam_rifle.dm" #include "code\modules\projectiles\guns\misc\blastcannon.dm" #include "code\modules\projectiles\guns\misc\bow.dm" #include "code\modules\projectiles\guns\misc\chem_gun.dm" +#include "code\modules\projectiles\guns\misc\debug.dm" #include "code\modules\projectiles\guns\misc\grenade_launcher.dm" #include "code\modules\projectiles\guns\misc\medbeam.dm" #include "code\modules\projectiles\guns\misc\syringe_gun.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" +#include "code\modules\projectiles\projectile\debug.dm" #include "code\modules\projectiles\projectile\magic.dm" #include "code\modules\projectiles\projectile\bullets\_incendiary.dm" #include "code\modules\projectiles\projectile\bullets\dart_syringe.dm" From 6564855fbb7b63676fba1a064ff3bcefb9294aa3 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 3 Apr 2024 22:03:43 -0500 Subject: [PATCH 67/89] regenerate and Atomproc call admin tools make these pointless --- code/modules/clothing/outfits/standard.dm | 2 - .../projectiles/ammunition/special/magic.dm | 7 - code/modules/projectiles/guns/misc/debug.dm | 126 ------------------ code/modules/projectiles/projectile/debug.dm | 23 ---- shiptest.dme | 2 - 5 files changed, 160 deletions(-) delete mode 100644 code/modules/projectiles/guns/misc/debug.dm delete mode 100644 code/modules/projectiles/projectile/debug.dm diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index d039d06dae35..100cc7ff0f52 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -226,8 +226,6 @@ backpack_contents = list( /obj/item/melee/transforming/energy/axe=1,\ /obj/item/storage/part_replacer/bluespace/tier4=1,\ - /obj/item/gun/magic/wand/resurrection/debug=1,\ - /obj/item/gun/magic/wand/death/debug=1,\ /obj/item/debug/human_spawner=1,\ /obj/item/debug/omnitool=1 ) diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index 5d30ba97690e..8459e5b93e9c 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -11,13 +11,6 @@ /obj/item/ammo_casing/magic/animate projectile_type = /obj/projectile/magic/animate -/obj/item/ammo_casing/magic/heal - projectile_type = /obj/projectile/debug/resurrection - harmful = FALSE - -/obj/item/ammo_casing/magic/death - projectile_type = /obj/projectile/debug/death - /obj/item/ammo_casing/magic/teleport projectile_type = /obj/projectile/magic/teleport harmful = FALSE diff --git a/code/modules/projectiles/guns/misc/debug.dm b/code/modules/projectiles/guns/misc/debug.dm deleted file mode 100644 index 607dbec425b5..000000000000 --- a/code/modules/projectiles/guns/misc/debug.dm +++ /dev/null @@ -1,126 +0,0 @@ -/obj/item/gun/magic/wand - name = "wand" - desc = "You shouldn't have this." - ammo_type = /obj/item/ammo_casing/magic - icon_state = "nothingwand" - item_state = "wand" - base_icon_state = "nothingwand" - w_class = WEIGHT_CLASS_SMALL - can_charge = FALSE - max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) - var/variable_charges = TRUE - -/obj/item/gun/magic/wand/Initialize() - if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges - if(prob(33)) - max_charges = CEILING(max_charges / 3, 1) - else - max_charges = CEILING(max_charges / 2, 1) - return ..() - -/obj/item/gun/magic/wand/examine(mob/user) - . = ..() - . += "Has [charges] charge\s remaining." - -/obj/item/gun/magic/wand/update_icon_state() - icon_state = "[base_icon_state][charges ? null : "-drained"]" - return ..() - -/obj/item/gun/magic/wand/attack(atom/target, mob/living/user) - if(target == user) - return - ..() - -/obj/item/gun/magic/wand/afterattack(atom/target, mob/living/user) - var/wrested = FALSE - if(!charges) - wrested = shoot_with_empty_chamber(user) - if(!wrested) - return - if(target == user) - if(no_den_usage) - var/area/A = get_area(user) - if(istype(A, /area/wizard_station)) - to_chat(user, "<span class='warning'>You know better than to violate the security of The Den, best wait until you leave to use [src].</span>") - return - else - no_den_usage = 0 - zap_self(user) - else - . = ..() - if(wrested) - to_chat(user,"<span class='danger'>[src] overloads and disintegrates.</span>") - qdel(src) - return - update_appearance() - -/obj/item/gun/magic/wand/proc/zap_self(mob/living/user) - user.visible_message("<span class='danger'>[user] zaps [user.p_them()]self with [src].</span>") - playsound(user, fire_sound, 50, TRUE) - user.log_message("zapped [user.p_them()]self with a <b>[src]</b>", LOG_ATTACK) - -/obj/item/gun/magic/wand/death - name = "wand of death" - desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail." - fire_sound = 'sound/magic/wandodeath.ogg' - ammo_type = /obj/item/ammo_casing/magic/death - icon_state = "deathwand" - base_icon_state = "deathwand" - max_charges = 3 //3, 2, 2, 1 - -/obj/item/gun/magic/wand/death/zap_self(mob/living/user) - ..() - charges-- - if(user.anti_magic_check()) - user.visible_message("<span class='warning'>[src] has no effect on [user]!</span>") - return - if(isliving(user)) - var/mob/living/L = user - if(L.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead - user.revive(full_heal = TRUE, admin_revive = TRUE) - to_chat(user, "<span class='notice'>You feel great!</span>") - return - to_chat(user, "<span class='warning'>You irradiate yourself with pure negative energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\ - </span>") - user.death(FALSE) - -/obj/item/gun/magic/wand/death/debug - desc = "In some obscure circles, this is known as the 'cloning tester's friend'." - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - -/obj/item/gun/magic/wand/resurrection - name = "wand of healing" - desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason." - ammo_type = /obj/item/ammo_casing/magic/heal - fire_sound = 'sound/magic/staff_healing.ogg' - icon_state = "revivewand" - base_icon_state = "revivewand" - max_charges = 10 //10, 5, 5, 4 - -/obj/item/gun/magic/wand/resurrection/zap_self(mob/living/user) - ..() - charges-- - if(user.anti_magic_check()) - user.visible_message("<span class='warning'>[src] has no effect on [user]!</span>") - return - if(isliving(user)) - var/mob/living/L = user - if(L.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead - to_chat(user, "<span class='warning'>You irradiate yourself with pure positive energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\ - </span>") - user.death(0) - return - user.revive(full_heal = TRUE, admin_revive = TRUE) - to_chat(user, "<span class='notice'>You feel great!</span>") - -/obj/item/gun/magic/wand/resurrection/debug //for testing - desc = "Is it possible for something to be even more powerful than regular magic? This wand is." - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 diff --git a/code/modules/projectiles/projectile/debug.dm b/code/modules/projectiles/projectile/debug.dm deleted file mode 100644 index 06b1ea7ca3e1..000000000000 --- a/code/modules/projectiles/projectile/debug.dm +++ /dev/null @@ -1,23 +0,0 @@ -/obj/projectile/debug/death - name = "bolt of death" - icon_state = "pulse1_bl" - -/obj/projectile/debug/death/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - M.death(0) - -/obj/projectile/debug/resurrection - name = "bolt of resurrection" - icon_state = "ion" - nodamage = TRUE - -/obj/projectile/debug/resurrection/on_hit(mob/living/carbon/target) - . = ..() - if(isliving(target)) - if(target.revive(full_heal = TRUE, admin_revive = TRUE)) - target.grab_ghost(force = TRUE) // even suicides - to_chat(target, "<span class='notice'>You rise with a start, you're alive!!!</span>") - else if(target.stat != DEAD) - to_chat(target, "<span class='notice'>You feel great!</span>") diff --git a/shiptest.dme b/shiptest.dme index 9131ace1bffd..59fc9bc5997a 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3035,13 +3035,11 @@ #include "code\modules\projectiles\guns\misc\blastcannon.dm" #include "code\modules\projectiles\guns\misc\bow.dm" #include "code\modules\projectiles\guns\misc\chem_gun.dm" -#include "code\modules\projectiles\guns\misc\debug.dm" #include "code\modules\projectiles\guns\misc\grenade_launcher.dm" #include "code\modules\projectiles\guns\misc\medbeam.dm" #include "code\modules\projectiles\guns\misc\syringe_gun.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" -#include "code\modules\projectiles\projectile\debug.dm" #include "code\modules\projectiles\projectile\magic.dm" #include "code\modules\projectiles\projectile\bullets\_incendiary.dm" #include "code\modules\projectiles\projectile\bullets\dart_syringe.dm" From 32ad922cfdd81fa93c8036936f897c604d975f52 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 3 Apr 2024 22:11:43 -0500 Subject: [PATCH 68/89] how did i readd this --- .../syndicate/syndicate_luxembourg.dmm | 3314 ----------------- 1 file changed, 3314 deletions(-) delete mode 100644 _maps/shuttles/syndicate/syndicate_luxembourg.dmm diff --git a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm b/_maps/shuttles/syndicate/syndicate_luxembourg.dmm deleted file mode 100644 index cff4c84386e0..000000000000 --- a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm +++ /dev/null @@ -1,3314 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aB" = ( -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"aD" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"aK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/south, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_engine"; - location = "lux_crew" - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"bi" = ( -/obj/machinery/button/door{ - id = "syndiefuck"; - name = "Loading Shutters Control"; - pixel_x = -25; - pixel_y = -7; - dir = 4 - }, -/obj/machinery/button/door{ - id = "warehouse"; - name = "Warehouse Control"; - pixel_x = -25; - pixel_y = 5; - dir = 4 - }, -/obj/machinery/button/door{ - id = "cargodoors"; - name = "Cargo Bay Shutter Control"; - pixel_x = -35; - pixel_y = 5; - dir = 4 - }, -/obj/machinery/button/door{ - id = "externalshutters"; - name = "External Shutters Control"; - pixel_x = -35; - pixel_y = -7; - dir = 4 - }, -/obj/machinery/computer/cargo/express{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"bp" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/blue/half{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"bt" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/binary/volume_pump{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk/white, -/turf/open/floor/plating, -/area/ship/engineering) -"bB" = ( -/obj/structure/rack, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 9 - }, -/obj/item/gps/mining, -/obj/item/paicard, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"bN" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/displaycase, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"cb" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"cq" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/computer/mech_bay_power_console{ - dir = 8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"cs" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"cB" = ( -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/closet/wall{ - dir = 8; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = 28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"cI" = ( -/obj/structure/rack, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"dp" = ( -/obj/structure/displaycase, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"dA" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"dC" = ( -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/obj/machinery/space_heater, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"dH" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/displaycase, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"dL" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"dM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"eD" = ( -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, -/obj/structure/table, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"eF" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = 12 - }, -/obj/structure/mirror{ - pixel_x = 24 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/medical{ - pixel_x = -5; - pixel_y = -4 - }, -/obj/structure/closet/wall/white/med{ - dir = 1; - name = "medicine locker"; - pixel_y = -28 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"eL" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/structure/catwalk/over/plated_catwalk/white, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"eX" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"fn" = ( -/obj/machinery/light/directional/east, -/obj/structure/table, -/obj/machinery/microwave, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"fo" = ( -/obj/item/card/emag, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/storage/backpack/duffelbag/syndie{ - name = "manager's duffel bag" - }, -/obj/item/clothing/under/syndicate/donk/qm, -/obj/item/clothing/suit/hazardvest/donk/qm, -/obj/item/melee/classic_baton/telescopic, -/obj/item/radio/headset/syndicate/alt/leader, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/structure/closet/secure_closet/wall{ - dir = 4; - icon_state = "solgov_wall"; - name = "manager's locker"; - pixel_x = -28; - req_access_txt = "41" - }, -/obj/machinery/light_switch{ - pixel_y = 22 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"fv" = ( -/obj/machinery/selling_pad, -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"fy" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/opaque/brown/filled/warning, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"fB" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"ga" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "cargodoors" - }, -/obj/item/radio/intercom/directional/north{ - pixel_y = 22 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"gf" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"gj" = ( -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/structure/closet/secure_closet/engineering_welding, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"gC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"hd" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"hi" = ( -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"hm" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"hs" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/cargo) -"hu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/item/clothing/suit/space/syndicate, -/obj/item/clothing/head/helmet/space/syndicate, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"hX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"if" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/machinery/computer/cryopod/directional/south, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/dorm) -"it" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/shieldwallgen/atmos{ - anchored = 1; - dir = 1; - id = "luxembourg_cargo"; - locked = 1 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "syndiefuck" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"iF" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/item/vending_refill/engineering, -/obj/item/vending_refill/engineering, -/obj/item/vending_refill/engivend, -/obj/item/vending_refill/engivend, -/obj/item/vending_refill/hydronutrients, -/obj/item/vending_refill/hydronutrients, -/obj/item/vending_refill/boozeomat, -/obj/item/vending_refill/boozeomat, -/obj/item/vending_refill/medical, -/obj/item/vending_refill/medical, -/obj/item/vending_refill/cigarette, -/obj/item/vending_refill/cigarette, -/obj/item/vending_refill/snack, -/obj/item/vending_refill/snack, -/obj/item/vending_refill/sovietsoda, -/obj/item/vending_refill/cola, -/obj/item/vending_refill/cola, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"iO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"iR" = ( -/obj/machinery/power/shuttle/engine/fueled/plasma{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/open/floor/plating, -/area/ship/engineering) -"iZ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/structure/catwalk/over/plated_catwalk/white, -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"jr" = ( -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"jv" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"jH" = ( -/obj/structure/table, -/obj/item/radio/intercom/wideband/table{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = 22 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"jK" = ( -/obj/machinery/air_sensor/atmos/air_tank, -/turf/open/floor/engine/air, -/area/ship/engineering) -"ke" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"ks" = ( -/obj/structure/closet/crate, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"kE" = ( -/obj/machinery/chem_master/condimaster, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"kI" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"kZ" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/hallway/central) -"lb" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"lg" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"lt" = ( -/obj/machinery/atmospherics/components/binary/volume_pump, -/obj/structure/catwalk/over/plated_catwalk/white, -/turf/open/floor/plating, -/area/ship/engineering) -"lK" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"lQ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/poddoor/shutters{ - id = "warehouse" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/storage) -"lW" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 1 - }, -/obj/structure/catwalk/over/plated_catwalk/white, -/turf/open/floor/plating, -/area/ship/engineering) -"mi" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/crew/dorm) -"mm" = ( -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/railing, -/obj/structure/closet/wall{ - dir = 4; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = -28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"mE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/effect/turf_decal/kfp_small/left{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"mK" = ( -/obj/machinery/light/directional/south, -/obj/machinery/computer/atmos_control/tank/air_tank{ - dir = 4 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"na" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering) -"nz" = ( -/obj/structure/sign/donk{ - pixel_x = -32 - }, -/obj/structure/rack, -/obj/item/radio/headset, -/obj/item/radio/headset, -/obj/item/radio/headset, -/obj/item/radio/headset, -/obj/item/radio/headset, -/obj/item/radio/headset, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"ow" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/crew/canteen) -"pd" = ( -/obj/machinery/light/directional/east, -/obj/structure/closet/crate/large{ - name = "Donk! Co. Powerloader In a Box" - }, -/obj/effect/decal/cleanable/oil, -/obj/effect/turf_decal/rechargefloor, -/obj/mecha/working/ripley/cargo{ - name = "\improper Donk! Co. Cargo Loading Device" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"pt" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/engineering) -"pJ" = ( -/obj/machinery/firealarm/directional/south, -/obj/machinery/autolathe, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"pL" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"pR" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"qe" = ( -/obj/effect/turf_decal/atmos/air, -/turf/open/floor/engine/air, -/area/ship/engineering) -"qf" = ( -/obj/structure/table, -/obj/machinery/door/firedoor, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"qh" = ( -/obj/machinery/airalarm/directional/west, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 8 - }, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_shopfloor"; - location = "lux_lobby" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"ql" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"qO" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"qP" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"qR" = ( -/turf/open/floor/engine/air, -/area/ship/engineering) -"qV" = ( -/obj/item/toy/sword, -/obj/structure/closet/crate/wooden/toy, -/obj/item/ammo_box/magazine/toy/smgm45/riot, -/obj/item/ammo_box/magazine/toy/smgm45/riot, -/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"rh" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/opaque/blue/filled/warning{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"rm" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"rq" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/window{ - dir = 8; - name = "Canteen" - }, -/obj/effect/turf_decal/siding/red, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"rG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"rU" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/opaque/orange/filled/warning, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"rV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced/spawner/east, -/turf/open/floor/engine/air, -/area/ship/engineering) -"sh" = ( -/obj/machinery/power/shuttle/engine/fueled/plasma{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"sk" = ( -/obj/effect/turf_decal/atmos/plasma, -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"sF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"sI" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/effect/turf_decal/industrial/traffic{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"sV" = ( -/mob/living/simple_animal/bot/mulebot{ - bot_name = "\proper Christine"; - desc = "A Multiple Utility Load Effector bot. This one seems oddly menacing..."; - id = "Christine"; - name = "\proper Christine" - }, -/obj/effect/turf_decal/corner/opaque/brown/bordercee, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = null; - location = "mulestation" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"tx" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/item/stack/sheet/mineral/plasma/five, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"tF" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/blue, -/obj/structure/curtain/bounty, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"tH" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/siding/red{ - dir = 10 - }, -/obj/effect/turf_decal/corner/opaque/neutral/bordercorner{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"tO" = ( -/obj/effect/turf_decal/siding/blue/corner, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"tU" = ( -/obj/machinery/camera{ - dir = 10 - }, -/turf/open/floor/plating, -/area/template_noop) -"tV" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/button/door{ - id = "cargodoors"; - pixel_x = 8; - pixel_y = -24 - }, -/obj/machinery/door/window{ - dir = 8; - name = "Cargo Bay" - }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "cargodoors" - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"ug" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/eastright, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "cargodoors" - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"ul" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/port_gen/pacman, -/obj/item/stack/sheet/mineral/plasma/five, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"uo" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"uB" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/food/drinks/shaker{ - pixel_x = 10 - }, -/obj/item/kitchen/knife{ - pixel_x = -8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"uK" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner/west, -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"uX" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/item/clothing/suit/space/syndicate/green, -/obj/item/clothing/head/helmet/space/syndicate/green, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"vb" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/poddoor/shutters{ - id = "warehouse" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/storage) -"vf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"vp" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering) -"vw" = ( -/obj/machinery/camera{ - dir = 1 - }, -/turf/open/floor/plating, -/area/template_noop) -"vz" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"vT" = ( -/obj/structure/closet/crate, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"wd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"wN" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"wP" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"wT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner/west, -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"xa" = ( -/obj/effect/turf_decal/siding/blue, -/obj/effect/turf_decal/corner/opaque/blue/half{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"xc" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"xt" = ( -/obj/machinery/light/directional/east, -/obj/item/clothing/head/HoS/beret/syndicate, -/obj/item/radio/headset/syndicate/alt, -/obj/item/gun/ballistic/shotgun/doublebarrel, -/obj/item/clothing/under/rank/civilian/bartender, -/obj/structure/closet/secure_closet/bar{ - req_access = null; - req_one_access_txt = list(25,41) - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"xw" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/clothing{ - default_price = 0; - extra_price = 0 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"yd" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/beer, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"yf" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"yh" = ( -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = 5 - }, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/brown/bordercorner{ - dir = 1 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"ym" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"yQ" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering) -"yX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 - }, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_kitchen"; - location = "lux_shopfloor" - }, -/obj/machinery/holopad/emergency/cargo, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"zc" = ( -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"zW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Ai" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Dormitory" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/dorm) -"AE" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/open/floor/plating, -/area/ship/engineering) -"AL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Bt" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/crew/canteen) -"Bw" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/cargo) -"BM" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/blue, -/obj/structure/window/reinforced/tinted/frosted, -/obj/structure/curtain/bounty, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -19; - pixel_y = 12 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"BX" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/cryopod{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/dorm) -"BZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"CC" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"CI" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 6 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"CM" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"CT" = ( -/obj/machinery/computer/atmos_control/tank/toxin_tank{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"CV" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"CW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/item/stack/circuit_stack/full, -/obj/item/stack/circuit_stack/full, -/obj/item/stack/circuit_stack/full, -/obj/item/stack/circuit_stack/full, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Da" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock{ - name = "Canteen" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/canteen) -"Dq" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_crew"; - location = "lux_kitchen" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Dw" = ( -/obj/structure/table, -/obj/structure/window/plasma/reinforced, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"DA" = ( -/obj/effect/turf_decal/siding/red, -/obj/machinery/firealarm/directional/south, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/airalarm/directional/east, -/obj/machinery/vending/dinnerware, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"DE" = ( -/obj/structure/rack, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"DG" = ( -/obj/machinery/light/directional/south, -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"DJ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/effect/turf_decal/number/five{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"DW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/chair/plastic, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Ee" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Ej" = ( -/obj/machinery/modular_computer/console/preset/command{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"Er" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering) -"EG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/opaque/brown/filled/warning{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"EO" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/crew/dorm) -"EW" = ( -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"EZ" = ( -/obj/item/radio/headset/syndicate/alt, -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/closet/wall{ - dir = 4; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = -28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"Fj" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/item/paper{ - desc = "A piece of paper depicting a extremely pissed up upper manager"; - default_raw_text = "YOU DAMNNED FOOLS! YOU ARENT SUPPOSED TO USE YOUR STOCK, YOU'RE SUPPOSED TO SELL THEM!! WE AREN'T WASTING MY MONEY ARE WE!?! NOW GET BACK TO WORK!!!"; - name = "angry letter from upper management" - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"Fq" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/holopad/emergency/bar, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"FV" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"Ga" = ( -/obj/machinery/computer/helm, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"Gr" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"GD" = ( -/obj/docking_port/stationary{ - width = 30; - height = 15; - dir = 8; - dwidth = 15 - }, -/turf/template_noop, -/area/template_noop) -"GG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"Hx" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/crew/dorm) -"HG" = ( -/obj/machinery/power/shieldwallgen/atmos{ - anchored = 1; - id = "luxembourg_cargo"; - locked = 1 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "syndiefuck" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"HK" = ( -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"HZ" = ( -/obj/structure/table, -/obj/item/reagent_containers/glass/rag, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Id" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Ij" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/docking_port/mobile{ - can_move_docking_ports = 1; - dir = 2; - launch_status = 0 - }, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/hallway/central) -"Ip" = ( -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/railing, -/obj/structure/closet/wall{ - dir = 8; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = 28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"Iv" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"IT" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/effect/turf_decal/siding/blue, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 20; - pixel_y = 11 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Je" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Ji" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/blue, -/obj/structure/curtain/bounty, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Jq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Jr" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue/corner, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"JO" = ( -/obj/structure/closet/crate/science, -/obj/item/circuitboard/machine/chem_dispenser/drinks, -/obj/item/circuitboard/machine/chem_dispenser/drinks, -/obj/item/circuitboard/machine/chem_dispenser/drinks, -/obj/item/circuitboard/machine/chem_dispenser/drinks/beer, -/obj/item/circuitboard/machine/chem_dispenser/drinks/beer, -/obj/item/circuitboard/machine/chem_dispenser/drinks/beer, -/obj/item/circuitboard/machine/deep_fryer, -/obj/item/circuitboard/machine/deep_fryer, -/obj/item/circuitboard/machine/deep_fryer, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/ore_redemption, -/obj/item/circuitboard/machine/ore_redemption, -/obj/item/circuitboard/machine/ore_redemption, -/obj/item/circuitboard/machine/microwave, -/obj/item/circuitboard/machine/microwave, -/obj/item/circuitboard/machine/microwave, -/obj/machinery/firealarm/directional/east, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = 24 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"JT" = ( -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "syndiefuck" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"JU" = ( -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 6 - }, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/item/clothing/suit/space/syndicate/blue, -/obj/item/clothing/head/helmet/space/syndicate/blue, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"JV" = ( -/obj/effect/turf_decal/corner/opaque/brown/bordercorner{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Ka" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/storage) -"Kg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/shower{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted/frosted, -/obj/structure/curtain, -/obj/effect/turf_decal/steeldecal/steel_decals10{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_y = 23; - pixel_x = 11 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"Kk" = ( -/obj/machinery/air_sensor/atmos/toxin_tank, -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"Ko" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_lobby"; - location = "lux_warehouse" - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"KH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/autodrobe/all_access{ - default_price = 0; - extra_price = 0 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"KX" = ( -/obj/structure/closet/crate, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"KZ" = ( -/obj/effect/turf_decal/siding/red, -/obj/structure/closet/secure_closet/freezer/wall{ - dir = 1; - name = "refrigerator"; - pixel_y = -32 - }, -/obj/item/storage/box/donkpockets/donkpocketteriyaki, -/obj/item/storage/box/donkpockets/donkpocketteriyaki, -/obj/item/storage/box/donkpockets/donkpocketteriyaki, -/obj/item/storage/box/donkpockets/donkpocketteriyaki, -/obj/item/storage/box/donkpockets/donkpocketspicy, -/obj/item/storage/box/donkpockets/donkpocketspicy, -/obj/item/storage/box/donkpockets/donkpocketspicy, -/obj/item/storage/box/donkpockets/donkpocketspicy, -/obj/item/storage/box/donkpockets/donkpockethonk, -/obj/item/storage/box/donkpockets/donkpockethonk, -/obj/item/storage/box/donkpockets/donkpockethonk, -/obj/item/storage/box/donkpockets/donkpockethonk, -/obj/item/storage/box/donkpockets, -/obj/item/storage/box/donkpockets, -/obj/item/storage/box/donkpockets, -/obj/item/storage/box/donkpockets, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"La" = ( -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "cargodoors"; - pixel_y = 25 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Lr" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/paper{ - desc = "A piece of paper depicting a extremely pissed up upper manager"; - default_raw_text = "YOU ARENT SUPPOSED TO BE MINING, HEAR ME!?!! YOU'RE SUPPOSED TO BE SELLING SHIT TO THE CONSUMERS YOU HEAR!! AS PUNISHMENT FOR THE LAST SHIFT, I HAVE REMOVED ALLL OF YOUR MINING TOOLS!! NOW GET BACK TO WORK!!"; - name = "angry letter from upper management" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Lu" = ( -/obj/structure/chair/plastic{ - dir = 1 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"LU" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced/spawner/east, -/turf/open/floor/engine/air, -/area/ship/engineering) -"LV" = ( -/obj/machinery/vending/boozeomat/all_access{ - default_price = 0; - extra_price = 0 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"LY" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/closet/crate, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"Mg" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Mi" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/structure/window/plasma/reinforced, -/obj/machinery/door/window/eastright, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "cargodoors" - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"Mj" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump, -/obj/machinery/advanced_airlock_controller{ - pixel_x = -25 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"Mx" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 10; - pixel_y = -21 - }, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/trimline/opaque/blue/filled/warning, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Mz" = ( -/obj/structure/tank_dispenser/oxygen, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 9 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"MT" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/cargo) -"MU" = ( -/obj/machinery/door/window/brigdoor{ - name = "Bridge"; - req_access_txt = "41" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"Nr" = ( -/turf/template_noop, -/area/template_noop) -"NH" = ( -/obj/effect/turf_decal/siding/blue/corner, -/obj/effect/turf_decal/corner/opaque/blue/half{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"NJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"NQ" = ( -/obj/machinery/light/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ - pixel_x = 6 - }, -/obj/item/lighter/greyscale{ - pixel_x = -3; - pixel_y = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"On" = ( -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/structure/closet/crate, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"Op" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/crew/canteen) -"Oq" = ( -/obj/structure/table, -/obj/item/toy/cards/deck/syndicate, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Oz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"OR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/effect/decal/cleanable/oil, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"OY" = ( -/obj/structure/closet/crate/trashcart, -/obj/effect/spawner/lootdrop/maintenance/eight, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 9 - }, -/obj/machinery/button/shieldwallgen{ - id = "luxembourg_cargo"; - pixel_x = -10; - pixel_y = 25 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/button/door{ - id = "syndiefuck"; - pixel_x = -20; - pixel_y = 26 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Pb" = ( -/obj/effect/decal/cleanable/dirt, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/crew/dorm) -"Ph" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/effect/turf_decal/number/zero{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"Ps" = ( -/obj/machinery/light/directional/south, -/obj/item/banner/cargo, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 10 - }, -/obj/machinery/button/shieldwallgen{ - dir = 1; - id = "luxembourg_cargo"; - pixel_x = -10; - pixel_y = -25 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/button/door{ - dir = 1; - id = "syndiefuck"; - pixel_x = -20; - pixel_y = -26 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"PO" = ( -/obj/structure/sign/poster/contraband/syndicate_recruitment{ - pixel_x = 4; - pixel_y = -30 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/opaque/blue/filled/warning, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"PW" = ( -/obj/structure/sign/donk{ - pixel_x = -32 - }, -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"QG" = ( -/obj/machinery/light/directional/west, -/obj/machinery/vending/toyliberationstation, -/obj/structure/window/plasma/reinforced, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"QQ" = ( -/obj/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"QT" = ( -/obj/machinery/light/directional/east, -/obj/structure/window/plasma/reinforced, -/obj/machinery/computer/selling_pad_control{ - dir = 8 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"QU" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/button/door{ - id = "warehouse"; - pixel_x = 24; - pixel_y = 21 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"Rk" = ( -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"Ro" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/catwalk/over/plated_catwalk/white, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Rp" = ( -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"RH" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/cargo) -"RM" = ( -/obj/effect/turf_decal/trimline/opaque/brown/filled/warning, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Sn" = ( -/obj/effect/turf_decal/siding/blue, -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"SS" = ( -/obj/item/radio/headset/syndicate/alt, -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/closet/wall{ - dir = 4; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = -28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"Tj" = ( -/obj/effect/turf_decal/siding/red, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 11; - pixel_y = -16 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Ty" = ( -/obj/machinery/light/directional/east, -/obj/structure/closet/crate/large, -/obj/item/mecha_parts/mecha_equipment/mining_scanner, -/mob/living/simple_animal/bot/secbot/grievous/toy, -/obj/effect/decal/cleanable/blood/old, -/obj/item/hand_labeler_refill, -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, -/obj/item/mecha_parts/mecha_equipment/rcd, -/obj/item/mecha_parts/mecha_equipment/cable_layer, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"TB" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"TJ" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/storage) -"TP" = ( -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"TY" = ( -/obj/effect/turf_decal/corner/opaque/brown/bordercorner{ - dir = 1 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Ud" = ( -/obj/effect/turf_decal/siding/blue, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Uk" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/storage) -"Uo" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/binary/volume_pump, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"Uu" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"Uw" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/structure/curtain, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"UE" = ( -/turf/open/floor/plating, -/area/ship/engineering) -"UI" = ( -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"UO" = ( -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering) -"Va" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"Vb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/opaque/blue/filled/warning, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Vi" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/industrial/traffic{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"Vn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Vs" = ( -/obj/machinery/atmospherics/components/binary/volume_pump, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"VG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/effect/turf_decal/number/two{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"VR" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ship/engineering) -"VS" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/plastitaniumglass{ - amount = 20 - }, -/obj/item/stack/sheet/mineral/plastitanium{ - amount = 20 - }, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/decal/cleanable/dirt, -/obj/item/hand_labeler_refill, -/obj/item/stack/sheet/mineral/wood/fifty, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"Wh" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/opaque/orange/filled/warning, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"Wt" = ( -/obj/machinery/smartfridge/bloodbank/preloaded, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/storage) -"WB" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"WE" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/hallway/central) -"WQ" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/suit_storage_unit/inherit{ - req_access_txt = "41" - }, -/obj/item/clothing/suit/space/syndicate, -/obj/item/clothing/head/helmet/space/syndicate, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"WU" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Xf" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_warehouse"; - location = "lux_engine" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Xw" = ( -/obj/machinery/washing_machine, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"XM" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"XS" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Yd" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk/over/plated_catwalk/white, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/ship/engineering) -"Yq" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"YE" = ( -/obj/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/item/radio/intercom/directional/east{ - pixel_y = 37 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"YI" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/crew/canteen) -"YK" = ( -/obj/machinery/airalarm/directional/west, -/obj/item/clothing/head/collectable/chef, -/obj/item/clothing/head/collectable/paper, -/obj/item/clothing/head/collectable/tophat, -/obj/item/clothing/head/collectable/captain, -/obj/item/clothing/head/collectable/beret, -/obj/item/clothing/head/collectable/welding, -/obj/item/clothing/head/collectable/flatcap, -/obj/item/clothing/head/collectable/pirate, -/obj/item/clothing/head/collectable/kitty, -/obj/item/clothing/head/collectable/rabbitears, -/obj/item/clothing/head/collectable/wizard, -/obj/item/clothing/head/collectable/hardhat, -/obj/item/clothing/head/collectable/HoS, -/obj/item/clothing/head/collectable/HoP, -/obj/item/clothing/head/collectable/thunderdome, -/obj/item/clothing/head/collectable/swat, -/obj/item/clothing/head/collectable/slime, -/obj/item/clothing/head/collectable/police, -/obj/item/clothing/head/collectable/xenom, -/obj/item/clothing/head/collectable/petehat, -/obj/structure/closet/crate, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"YL" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"YO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"YZ" = ( -/obj/structure/closet/secure{ - icon_state = "eng_secure"; - name = "GEC Engineer's locker" - }, -/obj/item/clothing/gloves/color/yellow, -/obj/item/pipe_dispenser, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/suit/toggle/hazard, -/obj/item/clothing/head/beret/eng/hazard, -/obj/item/clothing/head/beret/eng, -/obj/item/holosign_creator/engineering, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/item/clothing/under/syndicate/gec, -/obj/item/clothing/under/syndicate/gec, -/obj/item/stack/tape/industrial/pro, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - pixel_y = 23; - pixel_x = 11 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Zm" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"ZV" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering) - -(1,1,1) = {" -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -GD -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -"} -(2,1,1) = {" -Nr -Nr -Nr -Nr -Nr -Nr -hs -HG -JT -JT -JT -it -Ka -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -"} -(3,1,1) = {" -Nr -Nr -Nr -Nr -Bw -MT -hs -OY -hX -hX -fB -Ps -Ka -TJ -TJ -Uk -Nr -Nr -Nr -Nr -pt -VR -pt -Nr -Nr -Nr -Nr -"} -(4,1,1) = {" -Nr -Nr -Nr -Bw -hs -Mz -qh -JV -AL -hi -CC -RM -vb -VS -qV -Wt -TJ -Uk -Nr -Uk -VR -qe -VR -pt -Nr -Nr -Nr -"} -(5,1,1) = {" -Nr -Nr -hs -hs -bB -TY -CC -OR -gf -Je -wP -fy -lQ -QU -kI -iF -vT -Ka -TJ -Ka -VR -qR -jK -VR -Nr -Nr -Nr -"} -(6,1,1) = {" -Nr -Nr -RH -sV -yh -BZ -Vn -Ee -EG -hu -uX -JU -Ka -JO -iO -Fj -YO -YK -ks -On -vp -rV -LU -VR -pt -Nr -Nr -"} -(7,1,1) = {" -Nr -Nr -hs -hs -hs -ga -ug -Mi -tV -hs -hs -hs -Ka -Ka -Ty -Ko -Uu -lg -hm -rU -Ro -uo -ZV -mK -vp -pt -Nr -"} -(8,1,1) = {" -Nr -Nr -Nr -WE -WE -La -aB -NJ -Ud -TP -Rk -PW -cI -Ka -Ka -KX -LY -cq -pd -ke -vp -dC -GG -Uo -XS -iR -hd -"} -(9,1,1) = {" -tU -WE -kZ -WE -QG -NH -wd -WB -tO -Iv -Iv -Iv -yf -DG -Ka -Ka -Ka -Ka -Ka -Ka -vp -gj -Zm -Vs -vz -sh -Nr -"} -(10,1,1) = {" -WE -WE -Ej -bi -QQ -xa -dp -bV -Sn -TP -TP -jv -pL -Mx -vp -fo -SS -EZ -mm -tx -pR -XM -ql -pJ -vp -vp -vp -"} -(11,1,1) = {" -Ij -Ga -dA -jr -MU -rh -TB -WU -yX -gC -gC -Yq -Jq -Vb -dL -VG -Ph -DJ -mE -yQ -Xf -CM -Va -dM -AE -Mj -qP -"} -(12,1,1) = {" -WE -WE -jH -fv -YE -xa -dp -dH -Sn -TP -TP -DE -Jr -PO -vp -WQ -xt -cB -Ip -ul -pR -lb -Gr -eD -na -UO -Er -"} -(13,1,1) = {" -vw -WE -kZ -WE -QT -bp -Oz -vf -lK -ym -cs -eX -CI -DG -EO -EO -EO -EO -EO -EO -vp -CW -lW -lt -vz -sh -Nr -"} -(14,1,1) = {" -Nr -Nr -Nr -WE -WE -YL -YL -qO -xc -tH -IT -HK -zc -EO -EO -BX -if -EO -Kg -Uw -vp -YZ -Yd -lt -vz -sh -UE -"} -(15,1,1) = {" -Nr -Nr -YI -YI -YI -qf -HZ -Lr -Dw -rq -YI -EO -EO -EO -nz -Vi -sI -Ai -FV -Wh -eL -iZ -bt -CT -vp -pt -Nr -"} -(16,1,1) = {" -Nr -Nr -ow -YI -yd -UI -UI -Fq -UI -Tj -YI -Ji -NQ -BM -zW -bN -aK -Pb -Xw -eF -vp -uK -wT -VR -pt -Nr -Nr -"} -(17,1,1) = {" -Nr -Nr -Bt -YI -wN -UI -rG -Mg -Dq -CV -Da -cb -aD -Id -rm -xw -KH -EO -mi -EO -VR -EW -Kk -VR -Nr -Nr -Nr -"} -(18,1,1) = {" -Nr -Nr -Nr -Bt -YI -uB -kE -sF -UI -KZ -YI -Rp -DW -Oq -Lu -EO -mi -Hx -Nr -Hx -VR -sk -VR -pt -Nr -Nr -Nr -"} -(19,1,1) = {" -Nr -Nr -Nr -Nr -Bt -Op -YI -fn -LV -DA -YI -tF -EO -mi -mi -Hx -Nr -Nr -Nr -Nr -pt -VR -pt -Nr -Nr -Nr -Nr -"} -(20,1,1) = {" -Nr -Nr -Nr -Nr -Nr -Nr -YI -YI -Op -YI -YI -EO -EO -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -"} From d5046c58fae00768de81c548caa533eb01b71024 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 3 Apr 2024 22:39:27 -0500 Subject: [PATCH 69/89] more lol --- code/__DEFINES/DNA.dm | 1 - code/datums/components/fantasy/suffixes.dm | 4 - code/datums/dna.dm | 2 - code/datums/mutations/actions.dm | 61 -- code/game/objects/items/dna_injector.dm | 5 - .../structures/icemoon/cave_entrance.dm | 1 - code/modules/admin/verbs/randomverbs.dm | 2 - code/modules/events/wizard/magicarp.dm | 75 -- .../human/species_types/lizardpeople.dm | 1 - .../projectiles/ammunition/special/magic.dm | 55 -- code/modules/projectiles/projectile/magic.dm | 665 ------------------ code/modules/research/experimentor.dm | 10 - .../ruins/icemoonruin_code/hotsprings.dm | 56 -- code/modules/shuttle/special.dm | 129 ---- code/modules/spells/spell_types/aimed.dm | 6 +- code/modules/spells/spell_types/devil.dm | 2 +- code/modules/spells/spell_types/shapeshift.dm | 1 - code/modules/uplink/uplink_items.dm | 7 - shiptest.dme | 2 - 19 files changed, 4 insertions(+), 1081 deletions(-) delete mode 100644 code/modules/events/wizard/magicarp.dm delete mode 100644 code/modules/ruins/icemoonruin_code/hotsprings.dm diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 204e24daeab6..ac150af5505a 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -31,7 +31,6 @@ #define GLOWY /datum/mutation/human/glow #define ANTIGLOWY /datum/mutation/human/glow/anti #define TELEPATHY /datum/mutation/human/telepathy -#define FIREBREATH /datum/mutation/human/firebreath #define VOID /datum/mutation/human/void #define TONGUESPIKE /datum/mutation/human/tonguespike #define TONGUESPIKECHEM /datum/mutation/human/tongue_spike/chem diff --git a/code/datums/components/fantasy/suffixes.dm b/code/datums/components/fantasy/suffixes.dm index ec1ee58735f9..8cabee42d21c 100644 --- a/code/datums/components/fantasy/suffixes.dm +++ b/code/datums/components/fantasy/suffixes.dm @@ -131,11 +131,7 @@ /obj/projectile/bullet/honker = 15, /obj/projectile/temp = 15, /obj/projectile/ion = 15, - /obj/projectile/magic/door = 15, - /obj/projectile/magic/locker = 15, - /obj/projectile/magic/fetch = 15, /obj/projectile/beam/emitter = 15, - /obj/projectile/magic/flying = 15, /obj/projectile/energy/net = 15, /obj/projectile/bullet/incendiary/c9mm = 15, /obj/projectile/temp/hot = 15, diff --git a/code/datums/dna.dm b/code/datums/dna.dm index dde90dd5dbe8..abd20fd29212 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -659,8 +659,6 @@ O.Remove(src) visible_message("<span class='danger'>[src] vomits up their [O.name]!</span>", "<span class='danger'>You vomit up your [O.name]</span>") //no "vomit up your the heart" O.forceMove(drop_location()) - if(prob(20)) - O.animate_atom_living() if(9 to 10) ForceContractDisease(new/datum/disease/gastrolosis()) to_chat(src, "<span class='notice'>Oh, I actually feel quite alright!</span>") diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm index f2ffe7c25fd2..53080247b827 100644 --- a/code/datums/mutations/actions.dm +++ b/code/datums/mutations/actions.dm @@ -88,67 +88,6 @@ if(direction_text) to_chat(user,"<span class='notice'>You consider [tracking_target]'s scent. The trail leads <b>[direction_text].</b></span>") -/datum/mutation/human/firebreath - name = "Fire Breath" - desc = "An ancient mutation that gives lizards breath of fire." - quality = POSITIVE - difficulty = 12 - locked = TRUE - text_gain_indication = "<span class='notice'>Your throat is burning!</span>" - text_lose_indication = "<span class='notice'>Your throat is cooling down.</span>" - power = /obj/effect/proc_holder/spell/aimed/firebreath - instability = 30 - energy_coeff = 1 - power_coeff = 1 - -/datum/mutation/human/firebreath/modify() - if(power) - var/obj/effect/proc_holder/spell/aimed/firebreath/S = power - S.strength = GET_MUTATION_POWER(src) - -/obj/effect/proc_holder/spell/aimed/firebreath - name = "Fire Breath" - desc = "You can breathe fire at a target." - school = "evocation" - charge_max = 600 - clothes_req = FALSE - range = 20 - projectile_type = /obj/projectile/magic/aoe/fireball/firebreath - base_icon_state = "fireball" - action_icon_state = "fireball0" - sound = 'sound/magic/demon_dies.ogg' //horrifying lizard noises - active_msg = "You built up heat in your mouth." - deactive_msg = "You swallow the flame." - var/strength = 1 - -/obj/effect/proc_holder/spell/aimed/firebreath/before_cast(list/targets) - . = ..() - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - if(C.is_mouth_covered()) - C.adjust_fire_stacks(2) - C.IgniteMob() - to_chat(C,"<span class='warning'>Something in front of your mouth caught fire!</span>") - return FALSE - -/obj/effect/proc_holder/spell/aimed/firebreath/ready_projectile(obj/projectile/P, atom/target, mob/user, iteration) - if(!istype(P, /obj/projectile/magic/aoe/fireball)) - return - var/obj/projectile/magic/aoe/fireball/F = P - switch(strength) - if(1 to 3) - F.exp_light = strength-1 - if(4 to INFINITY) - F.exp_heavy = strength-3 - F.exp_fire += strength - -/obj/projectile/magic/aoe/fireball/firebreath - name = "fire breath" - exp_heavy = 0 - exp_light = 0 - exp_flash = 0 - exp_fire= 4 - /datum/mutation/human/void name = "Void Magnet" desc = "A rare genome that attracts odd forces not usually observed." diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 34563d5e649c..e44c7ca7b12b 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -90,11 +90,6 @@ desc = "This will make you big and strong, but give you a bad skin condition." add_mutations = list(HULK) -/obj/item/dnainjector/firebreath - name = "\improper DNA injector (Fire Breath)" - desc = "Restores the dragon ancestry." - add_mutations = list(FIREBREATH) - /obj/item/dnainjector/xraymut name = "\improper DNA injector (X-ray)" desc = "Finally you can see what the Captain does." diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index 07ecef04afac..5b77da4aafc7 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -1047,7 +1047,6 @@ GLOBAL_LIST_INIT(ore_probability, list( if(prob(45)) new /obj/item/dnainjector/dwarf(loc) if(prob(35)) - new /obj/item/dnainjector/firebreath(loc) new /mob/living/simple_animal/hostile/gorilla(loc) if(prob(35)) new /mob/living/simple_animal/hostile/gorilla(loc) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index ae621e17d479..c6b62604a92c 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -735,8 +735,6 @@ M.audible_message("<span class='hear'>...wabbajack...wabbajack...</span>") playsound(M.loc, 'sound/magic/staff_change.ogg', 50, TRUE, -1) - wabbajack(M) - message_admins("Mass polymorph started by [who_did_it] is complete.") diff --git a/code/modules/events/wizard/magicarp.dm b/code/modules/events/wizard/magicarp.dm deleted file mode 100644 index 2546b1ebbb18..000000000000 --- a/code/modules/events/wizard/magicarp.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/round_event_control/wizard/magicarp //these fish is loaded - name = "Magicarp" - weight = 1 - typepath = /datum/round_event/wizard/magicarp - max_occurrences = 1 - earliest_start = 0 MINUTES - -/datum/round_event/wizard/magicarp - announceWhen = 3 - startWhen = 50 - -/datum/round_event/wizard/magicarp/setup() - startWhen = rand(40, 60) - -/datum/round_event/wizard/magicarp/announce(fake) - priority_announce("Unknown magical entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") - -/datum/round_event/wizard/magicarp/start() - for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list) - if(prob(5)) - new /mob/living/simple_animal/hostile/carp/ranged/chaos(C.loc) - else - new /mob/living/simple_animal/hostile/carp/ranged(C.loc) - -/mob/living/simple_animal/hostile/carp/ranged - name = "magicarp" - desc = "50% magic, 50% carp, 100% horrible." - icon_state = "magicarp" - icon_living = "magicarp" - icon_dead = "magicarp_dead" - icon_gib = "magicarp_gib" - ranged = 1 - retreat_distance = 2 - minimum_distance = 0 //Between shots they can and will close in to nash - projectiletype = /obj/projectile/magic - projectilesound = 'sound/weapons/emitter.ogg' - maxHealth = 50 - health = 50 - gold_core_spawnable = NO_SPAWN - random_color = FALSE - food_type = list() - tame_chance = 0 - bonus_tame_chance = 0 - var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, - /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage) - -/mob/living/simple_animal/hostile/carp/ranged/Initialize() - projectiletype = pick(allowed_projectile_types) - . = ..() - -/mob/living/simple_animal/hostile/carp/ranged/chaos - name = "chaos magicarp" - desc = "50% carp, 100% magic, 150% horrible." - color = "#00FFFF" - maxHealth = 75 - health = 75 - gold_core_spawnable = NO_SPAWN - -/mob/living/simple_animal/hostile/carp/ranged/chaos/Shoot() - projectiletype = pick(allowed_projectile_types) - ..() - -/mob/living/simple_animal/hostile/carp/ranged/xenobiology // these are for the xenobio gold slime pool - gold_core_spawnable = HOSTILE_SPAWN - allowed_projectile_types = list(/obj/projectile/magic/animate, /obj/projectile/magic/teleport, - /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, - /obj/projectile/magic/spell/magic_missile, /obj/projectile/magic/aoe/lightning, /obj/projectile/magic/locker) //thanks Lett1 /finally, we can synthesize the lockerfish - -/mob/living/simple_animal/hostile/carp/ranged/chaos/xenobiology - gold_core_spawnable = HOSTILE_SPAWN - allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, - /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/nothing, - /obj/projectile/magic/aoe/lightning, /obj/projectile/magic/necropotence, /obj/projectile/magic/fortify, /obj/projectile/magic/spell/magic_missile)//now THIS is chaos diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 141efed98e12..11f66ad36815 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -20,7 +20,6 @@ exotic_bloodtype = "L" disliked_food = GRAIN | DAIRY | CLOTH | GROSS liked_food = GORE | MEAT - inert_mutation = FIREBREATH deathsound = 'sound/voice/lizard/deathsound.ogg' wings_icons = list("Dragon") species_language_holder = /datum/language_holder/lizard diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index 8459e5b93e9c..046ae7dbc078 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -4,58 +4,3 @@ projectile_type = /obj/projectile/magic firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/magic heavy_metal = FALSE - -/obj/item/ammo_casing/magic/change - projectile_type = /obj/projectile/magic/change - -/obj/item/ammo_casing/magic/animate - projectile_type = /obj/projectile/magic/animate - -/obj/item/ammo_casing/magic/teleport - projectile_type = /obj/projectile/magic/teleport - harmful = FALSE - -/obj/item/ammo_casing/magic/safety - projectile_type = /obj/projectile/magic/safety - harmful = FALSE - -/obj/item/ammo_casing/magic/door - projectile_type = /obj/projectile/magic/door - harmful = FALSE - -/obj/item/ammo_casing/magic/fireball - projectile_type = /obj/projectile/magic/aoe/fireball - -/obj/item/ammo_casing/magic/chaos - projectile_type = /obj/projectile/magic - -/obj/item/ammo_casing/magic/spellblade - projectile_type = /obj/projectile/magic/spellblade - -/obj/item/ammo_casing/magic/honk - projectile_type = /obj/projectile/bullet/honker - -/obj/item/ammo_casing/magic/locker - projectile_type = /obj/projectile/magic/locker - -/obj/item/ammo_casing/magic/flying - projectile_type = /obj/projectile/magic/flying - -/obj/item/ammo_casing/magic/bounty - projectile_type = /obj/projectile/magic/bounty - -/obj/item/ammo_casing/magic/antimagic - projectile_type = /obj/projectile/magic/antimagic - -/obj/item/ammo_casing/magic/sapping - projectile_type = /obj/projectile/magic/sapping - -/obj/item/ammo_casing/magic/necropotence - projectile_type = /obj/projectile/magic/necropotence - -/obj/item/ammo_casing/magic/wipe - projectile_type = /obj/projectile/magic/wipe - -/obj/item/ammo_casing/magic/nothing - projectile_type = /obj/projectile/magic/nothing - harmful = FALSE diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 544e2cc95005..67a91efa0f61 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -7,579 +7,6 @@ armour_penetration = 100 flag = "magic" -/obj/projectile/magic/teleport - name = "bolt of teleportation" - icon_state = "bluespace" - damage = 0 - damage_type = OXY - nodamage = TRUE - var/inner_tele_radius = 0 - var/outer_tele_radius = 6 - -/obj/projectile/magic/teleport/on_hit(mob/target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("<span class='warning'>[src] fizzles on contact with [target]!</span>") - return BULLET_ACT_BLOCK - var/teleammount = 0 - var/teleloc = target - if(!isturf(target)) - teleloc = target.loc - for(var/atom/movable/stuff in teleloc) - if(!stuff.anchored && stuff.loc && !isobserver(stuff)) - if(do_teleport(stuff, stuff, 10, channel = TELEPORT_CHANNEL_MAGIC)) - teleammount++ - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(max(round(4 - teleammount),0), stuff.loc) //Smoke drops off if a lot of stuff is moved for the sake of sanity - smoke.start() - -/obj/projectile/magic/safety - name = "bolt of safety" - icon_state = "bluespace" - damage = 0 - damage_type = OXY - nodamage = TRUE - -/obj/projectile/magic/safety/on_hit(atom/target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("<span class='warning'>[src] fizzles on contact with [target]!</span>") - return BULLET_ACT_BLOCK - if(isturf(target)) - return BULLET_ACT_HIT - - var/turf/origin_turf = get_turf(target) - var/turf/destination_turf = find_safe_turf() - - if(do_teleport(target, destination_turf, channel=TELEPORT_CHANNEL_MAGIC)) - for(var/t in list(origin_turf, destination_turf)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, t) - smoke.start() - -/obj/projectile/magic/door - name = "bolt of door creation" - icon_state = "energy" - damage = 0 - damage_type = OXY - nodamage = TRUE - var/list/door_types = list(/obj/structure/mineral_door/wood, /obj/structure/mineral_door/iron, /obj/structure/mineral_door/silver, /obj/structure/mineral_door/gold, /obj/structure/mineral_door/uranium, /obj/structure/mineral_door/sandstone, /obj/structure/mineral_door/transparent/plasma, /obj/structure/mineral_door/transparent/diamond) - -/obj/projectile/magic/door/on_hit(atom/target) - . = ..() - if(istype(target, /obj/machinery/door)) - OpenDoor(target) - else - var/turf/T = get_turf(target) - if(isclosedturf(T) && !isindestructiblewall(T)) - CreateDoor(T) - -/obj/projectile/magic/door/proc/CreateDoor(turf/T) - var/door_type = pick(door_types) - var/obj/structure/mineral_door/D = new door_type(T) - T.ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - D.Open() - -/obj/projectile/magic/door/proc/OpenDoor(obj/machinery/door/D) - if(istype(D, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/A = D - A.locked = FALSE - D.open() - -/obj/projectile/magic/change - name = "bolt of change" - icon_state = "ice_1" - damage = 0 - damage_type = BURN - nodamage = TRUE - -/obj/projectile/magic/change/on_hit(atom/change) - . = ..() - if(ismob(change)) - var/mob/M = change - if(M.anti_magic_check()) - M.visible_message("<span class='warning'>[src] fizzles on contact with [M]!</span>") - qdel(src) - return BULLET_ACT_BLOCK - wabbajack(change) - qdel(src) - -/proc/wabbajack(mob/living/M) - if(!istype(M) || M.stat == DEAD || M.notransform || (GODMODE & M.status_flags)) - return - - M.notransform = TRUE - ADD_TRAIT(M, TRAIT_IMMOBILIZED, MAGIC_TRAIT) - ADD_TRAIT(M, TRAIT_HANDS_BLOCKED, MAGIC_TRAIT) - M.icon = null - M.cut_overlays() - M.invisibility = INVISIBILITY_ABSTRACT - - var/list/contents = M.contents.Copy() - - if(iscyborg(M)) - var/mob/living/silicon/robot/Robot = M - // Disconnect AI's in shells - if(Robot.connected_ai) - Robot.connected_ai.disconnect_shell() - if(Robot.mmi) - qdel(Robot.mmi) - Robot.notify_ai(NEW_BORG) - else - for(var/obj/item/W in contents) - if(!M.dropItemToGround(W)) - qdel(W) - - var/mob/living/new_mob - - var/randomize = pick("monkey","robot","slime","xeno","humanoid","animal") - switch(randomize) - if("monkey") - new_mob = new /mob/living/carbon/monkey(M.loc) - - if("robot") - var/robot = pick(200;/mob/living/silicon/robot, - /mob/living/silicon/robot/modules/syndicate, - /mob/living/silicon/robot/modules/syndicate/medical, - /mob/living/silicon/robot/modules/syndicate/saboteur, - 200;/mob/living/simple_animal/drone/polymorphed) - new_mob = new robot(M.loc) - if(issilicon(new_mob)) - new_mob.gender = M.gender - new_mob.invisibility = 0 - new_mob.job = "Cyborg" - var/mob/living/silicon/robot/Robot = new_mob - Robot.lawupdate = FALSE - Robot.connected_ai = null - Robot.mmi.transfer_identity(M) //Does not transfer key/client. - Robot.clear_inherent_laws(0) - Robot.clear_zeroth_law(0) - - if("slime") - new_mob = new /mob/living/simple_animal/slime/random(M.loc) - - if("xeno") - var/Xe - if(M.ckey) - Xe = pick(/mob/living/carbon/alien/humanoid/hunter,/mob/living/carbon/alien/humanoid/sentinel) - else - Xe = pick(/mob/living/carbon/alien/humanoid/hunter,/mob/living/simple_animal/hostile/alien/sentinel) - new_mob = new Xe(M.loc) - - if("animal") - var/path = pick(/mob/living/simple_animal/hostile/carp, - /mob/living/simple_animal/hostile/bear, - /mob/living/simple_animal/hostile/mushroom, - /mob/living/simple_animal/hostile/statue, - /mob/living/simple_animal/hostile/retaliate/bat, - /mob/living/simple_animal/hostile/retaliate/goat, - /mob/living/simple_animal/hostile/killertomato, - /mob/living/simple_animal/hostile/poison/giant_spider, - /mob/living/simple_animal/hostile/poison/giant_spider/hunter, - /mob/living/simple_animal/hostile/blob/blobbernaut/independent, - /mob/living/simple_animal/hostile/carp/ranged, - /mob/living/simple_animal/hostile/carp/ranged/chaos, - /mob/living/simple_animal/hostile/asteroid/basilisk/watcher, - /mob/living/simple_animal/hostile/asteroid/goliath/beast, - /mob/living/simple_animal/hostile/headcrab, - /mob/living/simple_animal/hostile/morph, - /mob/living/simple_animal/hostile/stickman, - /mob/living/simple_animal/hostile/stickman/dog, - /mob/living/simple_animal/hostile/megafauna/dragon/lesser, - /mob/living/simple_animal/hostile/gorilla, - /mob/living/simple_animal/parrot, - /mob/living/simple_animal/pet/dog/corgi, - /mob/living/simple_animal/crab, - /mob/living/simple_animal/pet/dog/pug, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/mouse, - /mob/living/simple_animal/chicken, - /mob/living/simple_animal/cow, - /mob/living/simple_animal/hostile/lizard, - /mob/living/simple_animal/pet/fox, - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/pet/cat/cak, - /mob/living/simple_animal/chick) - new_mob = new path(M.loc) - - if("humanoid") - new_mob = new /mob/living/carbon/human(M.loc) - - if(prob(50)) - var/list/chooseable_races = list() - for(var/speciestype in subtypesof(/datum/species)) - var/datum/species/S = speciestype - if(initial(S.changesource_flags) & WABBAJACK) - chooseable_races += speciestype - - if(chooseable_races.len) - new_mob.set_species(pick(chooseable_races)) - - var/datum/preferences/A = new() //Randomize appearance for the human - A.copy_to(new_mob, icon_updates=0) - - var/mob/living/carbon/human/H = new_mob - H.update_hair() - H.update_body_parts(TRUE) - H.dna.update_dna_identity() - - if(!new_mob) - return - - // Some forms can still wear some items - for(var/obj/item/W in contents) - new_mob.equip_to_appropriate_slot(W) - - M.log_message("became [new_mob.real_name]", LOG_ATTACK, color="orange") - - new_mob.a_intent = INTENT_HARM - - M.wabbajack_act(new_mob) - - to_chat(new_mob, "<span class='warning'>Your form morphs into that of a [randomize].</span>") - - var/poly_msg = get_policy(POLICY_POLYMORPH) - if(poly_msg) - to_chat(new_mob, poly_msg) - - M.transfer_observers_to(new_mob) - - qdel(M) - return new_mob - -/obj/projectile/magic/animate - name = "bolt of animation" - icon_state = "red_1" - damage = 0 - damage_type = BURN - nodamage = TRUE - -/obj/projectile/magic/animate/on_hit(atom/target, blocked = FALSE) - target.animate_atom_living(firer) - ..() - -/atom/proc/animate_atom_living(mob/living/owner = null) - if((isitem(src) || isstructure(src)) && !is_type_in_list(src, GLOB.protected_objects)) - if(istype(src, /obj/structure/statue/petrified)) - var/obj/structure/statue/petrified/P = src - if(P.petrified_mob) - var/mob/living/L = P.petrified_mob - var/mob/living/simple_animal/hostile/statue/S = new(P.loc, owner) - S.name = "statue of [L.name]" - if(owner) - S.faction = list("[REF(owner)]") - S.icon = P.icon - S.icon_state = P.icon_state - S.copy_overlays(P, TRUE) - S.color = P.color - S.atom_colours = P.atom_colours.Copy() - if(L.mind) - L.mind.transfer_to(S) - if(owner) - to_chat(S, "<span class='userdanger'>You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [owner], your creator.</span>") - P.forceMove(S) - return - else - var/obj/O = src - if(istype(O, /obj/item/gun)) - new /mob/living/simple_animal/hostile/mimic/copy/ranged(loc, src, owner) - else - new /mob/living/simple_animal/hostile/mimic/copy(loc, src, owner) - - else if(istype(src, /mob/living/simple_animal/hostile/mimic/copy)) - // Change our allegiance! - var/mob/living/simple_animal/hostile/mimic/copy/C = src - if(owner) - C.ChangeOwner(owner) - -/obj/projectile/magic/spellblade - name = "blade energy" - icon_state = "lavastaff" - damage = 15 - damage_type = BURN - flag = "magic" - dismemberment = 50 - nodamage = FALSE - -/obj/projectile/magic/spellblade/on_hit(target) - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - qdel(src) - return BULLET_ACT_BLOCK - . = ..() - -/obj/projectile/magic/arcane_barrage - name = "arcane bolt" - icon_state = "arcane_barrage" - damage = 20 - damage_type = BURN - nodamage = FALSE - armour_penetration = 0 - flag = "magic" - hitsound = 'sound/weapons/barragespellhit.ogg' - -/obj/projectile/magic/arcane_barrage/on_hit(target) - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - qdel(src) - return BULLET_ACT_BLOCK - . = ..() - - -/obj/projectile/magic/locker - name = "locker bolt" - icon_state = "locker" - nodamage = TRUE - flag = "magic" - var/weld = TRUE - var/created = FALSE //prevents creation of more then one locker if it has multiple hits - var/locker_suck = TRUE - var/obj/structure/closet/locker_temp_instance = /obj/structure/closet/decay - -/obj/projectile/magic/locker/Initialize() - . = ..() - locker_temp_instance = new(src) - -/obj/projectile/magic/locker/prehit_pierce(atom/A) - . = ..() - if(isliving(A) && locker_suck) - var/mob/living/M = A - if(M.anti_magic_check()) // no this doesn't check if ..() returned to phase through do I care no it's magic ain't gotta explain shit - M.visible_message("<span class='warning'>[src] vanishes on contact with [A]!</span>") - return PROJECTILE_DELETE_WITHOUT_HITTING - if(!locker_temp_instance.insertion_allowed(M)) - return - M.forceMove(src) - return PROJECTILE_PIERCE_PHASE - -/obj/projectile/magic/locker/on_hit(target) - if(created) - return ..() - if(LAZYLEN(contents)) - for(var/atom/movable/AM in contents) - locker_temp_instance.insert(AM) - locker_temp_instance.welded = weld - locker_temp_instance.update_appearance() - created = TRUE - return ..() - -/obj/projectile/magic/locker/Destroy() - locker_suck = FALSE - RemoveElement(/datum/element/connect_loc, projectile_connections) //We do this manually so the forcemoves don't "hit" us. This behavior is kinda dumb, someone refactor this - for(var/atom/movable/AM in contents) - AM.forceMove(get_turf(src)) - . = ..() - -/obj/structure/closet/decay - breakout_time = 600 - icon_welded = null - var/magic_icon = "cursed" - var/weakened_icon = "decursed" - var/auto_destroy = TRUE - -/obj/structure/closet/decay/Initialize() - . = ..() - if(auto_destroy) - addtimer(CALLBACK(src, PROC_REF(bust_open)), 5 MINUTES) - addtimer(CALLBACK(src, PROC_REF(magicly_lock)), 5) - -/obj/structure/closet/decay/proc/magicly_lock() - if(!welded) - return - icon_state = magic_icon - update_appearance() - -/obj/structure/closet/decay/after_weld(weld_state) - if(weld_state) - unmagify() - -/obj/structure/closet/decay/proc/decay() - animate(src, alpha = 0, time = 30) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 30) - -/obj/structure/closet/decay/open(mob/living/user, force = FALSE) - . = ..() - if(.) - if(icon_state == magic_icon) //check if we used the magic icon at all before giving it the lesser magic icon - unmagify() - else - addtimer(CALLBACK(src, PROC_REF(decay)), 15 SECONDS) - -/obj/structure/closet/decay/proc/unmagify() - icon_state = weakened_icon - update_appearance() - addtimer(CALLBACK(src, PROC_REF(decay)), 15 SECONDS) - icon_welded = "welded" - -/obj/projectile/magic/flying - name = "bolt of flying" - icon_state = "flight" - -/obj/projectile/magic/flying/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check()) - L.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - var/atom/throw_target = get_edge_target_turf(L, angle2dir(Angle)) - L.throw_at(throw_target, 200, 4) - -/obj/projectile/magic/bounty - name = "bolt of bounty" - icon_state = "bounty" - -/obj/projectile/magic/bounty/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !firer) - L.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - L.apply_status_effect(STATUS_EFFECT_BOUNTY, firer) - -/obj/projectile/magic/antimagic - name = "bolt of antimagic" - icon_state = "antimagic" - -/obj/projectile/magic/antimagic/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check()) - L.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - L.apply_status_effect(STATUS_EFFECT_ANTIMAGIC) - -/obj/projectile/magic/fetch - name = "bolt of fetching" - icon_state = "fetch" - -/obj/projectile/magic/fetch/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !firer) - L.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - var/atom/throw_target = get_edge_target_turf(L, get_dir(L, firer)) - L.throw_at(throw_target, 200, 4) - -/obj/projectile/magic/sapping - name = "bolt of sapping" - icon_state = "sapping" - -/obj/projectile/magic/sapping/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, src, /datum/mood_event/sapped) - -/obj/projectile/magic/necropotence - name = "bolt of necropotence" - icon_state = "necropotence" - -/obj/projectile/magic/necropotence/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !L.mind || !L.mind.hasSoul) - L.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - to_chat(L, "<span class='danger'>Your body feels drained and there is a burning pain in your chest.</span>") - L.maxHealth -= 20 - L.health = min(L.health, L.maxHealth) - if(L.maxHealth <= 0) - to_chat(L, "<span class='userdanger'>Your weakened soul is completely consumed by the [src]!</span>") - L.mind.hasSoul = FALSE - for(var/obj/effect/proc_holder/spell/spell in L.mind.spell_list) - spell.charge_counter = spell.charge_max - spell.recharging = FALSE - spell.update_appearance() - -/obj/projectile/magic/fortify - name = "bolt of light" - icon_state = "spark" - -/obj/projectile/magic/fortify/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !L.mind || !L.mind.hasSoul) - L.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - to_chat(L, "<span class='greentext'>You feel your body flood with magical strength! Your flesh feels cleansed, and somehow... tougher.</span>") - L.maxHealth += 20 - L.heal_overall_damage(20, 20) - L.apply_damage(-200, CLONE)//cleanses cellular damage - if(L.mind.hasSoul == FALSE)//restores consumed souls - to_chat(L, "<span class='nicegreen'>You feel a warm light in your chest... the [src] has restored something you'd long forgotten.</span>") - L.mind.hasSoul = TRUE - if(L.hellbound == 1) - L.hellbound = 0//devil economy in shambles - for(var/obj/effect/proc_holder/spell/spell in L.mind.spell_list) - spell.charge_counter = spell.charge_max - spell.recharging = FALSE - spell.update_appearance() - -/obj/projectile/magic/wipe - name = "bolt of possession" - icon_state = "wipe" - -/obj/projectile/magic/wipe/on_hit(target) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - if(M.anti_magic_check()) - M.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - for(var/x in M.get_traumas())//checks to see if the victim is already going through possession - if(istype(x, /datum/brain_trauma/special/imaginary_friend/trapped_owner)) - M.visible_message("<span class='warning'>[src] vanishes on contact with [target]!</span>") - return BULLET_ACT_BLOCK - to_chat(M, "<span class='warning'>Your mind has been opened to possession!</span>") - possession_test(M) - return BULLET_ACT_HIT - -/obj/projectile/magic/wipe/proc/possession_test(mob/living/carbon/M) - var/datum/brain_trauma/special/imaginary_friend/trapped_owner/trauma = M.gain_trauma(/datum/brain_trauma/special/imaginary_friend/trapped_owner) - var/poll_message = "Do you want to play as [M.real_name]?" - if(M.mind && M.mind.assigned_role) - poll_message = "[poll_message] Job:[M.mind.assigned_role]." - if(M.mind && M.mind.special_role) - poll_message = "[poll_message] Status:[M.mind.special_role]." - else if(M.mind) - var/datum/antagonist/A = M.mind.has_antag_datum(/datum/antagonist/) - if(A) - poll_message = "[poll_message] Status:[A.name]." - var/list/mob/dead/observer/candidates = pollCandidatesForMob(poll_message, ROLE_PAI, null, FALSE, 100, M) - if(M.stat == DEAD)//boo. - return - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - to_chat(M, "<span class='boldnotice'>You have been noticed by a ghost and it has possessed you!</span>") - var/oldkey = M.key - M.ghostize(0) - M.key = C.key - trauma.friend.key = oldkey - trauma.friend.reset_perspective(null) - trauma.friend.Show() - trauma.friend_initialized = TRUE - else - to_chat(M, "<span class='notice'>Your mind has managed to go unnoticed in the spirit world.</span>") - qdel(trauma) - /obj/projectile/magic/aoe name = "Area Bolt" desc = "What the fuck does this do?!" @@ -592,95 +19,3 @@ if(L.stat != DEAD && L != firer && !L.anti_magic_check()) return Bump(L) ..() - - -/obj/projectile/magic/aoe/lightning - name = "lightning bolt" - icon_state = "tesla_projectile" //Better sprites are REALLY needed and appreciated!~ - damage = 15 - damage_type = BURN - nodamage = FALSE - speed = 0.3 - flag = "magic" - - var/zap_power = 20000 - var/zap_range = 15 - var/zap_flags = ZAP_MOB_DAMAGE | ZAP_MOB_STUN | ZAP_OBJ_DAMAGE - var/chain - var/mob/living/caster - -/obj/projectile/magic/aoe/lightning/fire(setAngle) - if(caster) - chain = caster.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY) - ..() - -/obj/projectile/magic/aoe/lightning/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - visible_message("<span class='warning'>[src] fizzles on contact with [target]!</span>") - qdel(src) - return BULLET_ACT_BLOCK - tesla_zap(src, zap_range, zap_power, zap_flags) - qdel(src) - -/obj/projectile/magic/aoe/lightning/Destroy() - qdel(chain) - . = ..() - -/obj/projectile/magic/aoe/fireball - name = "bolt of fireball" - icon_state = "fireball" - damage = 10 - damage_type = BRUTE - nodamage = FALSE - - //explosion values - var/exp_heavy = 0 - var/exp_light = 2 - var/exp_flash = 3 - var/exp_fire = 2 - -/obj/projectile/magic/aoe/fireball/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/living/M = target - if(M.anti_magic_check()) - visible_message("<span class='warning'>[src] vanishes into smoke on contact with [target]!</span>") - return BULLET_ACT_BLOCK - M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately - var/turf/T = get_turf(target) - explosion(T, -1, exp_heavy, exp_light, exp_flash, 0, flame_range = exp_fire) - -/obj/projectile/magic/aoe/fireball/infernal - name = "infernal fireball" - exp_heavy = -1 - exp_light = -1 - exp_flash = 4 - exp_fire= 5 - -/obj/projectile/magic/aoe/fireball/infernal/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/living/M = target - if(M.anti_magic_check()) - return BULLET_ACT_BLOCK - var/turf/T = get_turf(target) - for(var/i=0, i<50, i+=10) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i) - -//still magic related, but a different path - -/obj/projectile/temp/chill - name = "bolt of chills" - icon_state = "ice_2" - damage = 0 - damage_type = BURN - nodamage = FALSE - armour_penetration = 100 - temperature = -200 // Cools you down greatly per hit - flag = "magic" - -/obj/projectile/magic/nothing - name = "bolt of nothing" diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 9016d60515e7..ce473ad739cb 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -355,16 +355,6 @@ C.name = "Cup of Suspicious Liquid" C.desc = "It has a large hazard symbol printed on the side in fading ink." investigate_log("Experimentor has made a cup of [chosenchem] coffee.", INVESTIGATE_EXPERIMENTOR) - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - var/turf/start = get_turf(src) - var/mob/M = locate(/mob/living) in view(src, 3) - var/turf/MT = get_turf(M) - if(MT) - visible_message("<span class='danger'>[src] dangerously overheats, launching a flaming fuel orb!</span>") - investigate_log("Experimentor has launched a <font color='red'>fireball</font> at [M]!", INVESTIGATE_EXPERIMENTOR) - var/obj/projectile/magic/aoe/fireball/FB = new /obj/projectile/magic/aoe/fireball(start) - FB.preparePixelProjectile(MT, start) - FB.fire() else if(prob(EFFECT_PROB_LOW-badThingCoeff)) visible_message("<span class='danger'>[src] malfunctions, melting [exp_on] and releasing a burst of flame!</span>") explosion(loc, -1, 0, 0, 0, 0, flame_range = 2) diff --git a/code/modules/ruins/icemoonruin_code/hotsprings.dm b/code/modules/ruins/icemoonruin_code/hotsprings.dm deleted file mode 100644 index dd4d39e91a20..000000000000 --- a/code/modules/ruins/icemoonruin_code/hotsprings.dm +++ /dev/null @@ -1,56 +0,0 @@ -GLOBAL_LIST_EMPTY(cursed_minds) - -/** - * Turns whoever enters into a mob or random person - * - * If mob is chosen, turns the person into a random animal type - * If appearance is chosen, turns the person into a random human with a random species - * This changes name, and changes their DNA as well - * Random species is same as wizard swap event so people don't get killed ex: plasmamen - * Once the spring is used, it cannot be used by the same mind ever again - * After usage, teleports the user back to a random safe turf (so mobs are not killed by ice moon atmosphere) - * - */ - -/turf/open/water/cursed_spring - baseturfs = /turf/open/water/cursed_spring - planetary_atmos = TRUE - initial_gas_mix = ICEMOON_DEFAULT_ATMOS - -/turf/open/water/cursed_spring/Entered(atom/movable/thing, atom/oldLoc) - . = ..() - if(!isliving(thing)) - return - var/mob/living/L = thing - if(!L.client) - return - if(GLOB.cursed_minds[L.mind]) - return - GLOB.cursed_minds[L.mind] = TRUE - RegisterSignal(L.mind, COMSIG_PARENT_QDELETING, PROC_REF(remove_from_cursed)) - var/random_choice = pick("Mob", "Appearance") - switch(random_choice) - if("Mob") - L = wabbajack(L, "animal") - if("Appearance") - var/mob/living/carbon/human/H = wabbajack(L, "humanoid") - randomize_human(H) - var/list/all_species = list() - for(var/stype in subtypesof(/datum/species)) - var/datum/species/S = stype - if(initial(S.changesource_flags) & RACE_SWAP) - all_species += stype - var/random_race = pick(all_species) - H.set_species(random_race) - H.dna.unique_enzymes = H.dna.generate_unique_enzymes() - L = H - var/turf/T = find_safe_turf() - L.forceMove(T) - to_chat(L, "<span class='notice'>You blink and find yourself in [get_area_name(T)].</span>") - -/** - * Deletes minds from the cursed minds list after their deletion - * - */ -/turf/open/water/cursed_spring/proc/remove_from_cursed(datum/mind/M) - GLOB.cursed_minds -= M diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 2603d9ea3e24..1ddb26efba88 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -1,134 +1,5 @@ // Special objects for shuttle templates go here if nowhere else -// Wabbajack statue, a sleeping frog statue that shoots bolts of change if -// living carbons are put on its altar/tables - -/obj/machinery/power/emitter/energycannon/magical - name = "wabbajack statue" - desc = "Who am I? What is my purpose in life? What do I mean by who am I?" - projectile_type = /obj/projectile/magic/change - icon = 'icons/obj/machines/magic_emitter.dmi' - icon_state = "wabbajack_statue" - icon_state_on = "wabbajack_statue_on" - base_icon_state = "wabbajack_statue" - active = FALSE - allow_switch_interact = FALSE - var/list/active_tables = list() - var/tables_required = 2 - -/obj/machinery/power/emitter/energycannon/magical/Initialize() - . = ..() - if(prob(50)) - desc = "Oh no, not again." - update_appearance() - -/obj/machinery/power/emitter/energycannon/magical/update_icon_state() - . = ..() - icon_state = active ? icon_state_on : initial(icon_state) - -/obj/machinery/power/emitter/energycannon/magical/process() - . = ..() - if(active_tables.len >= tables_required) - if(!active) - visible_message("<span class='revenboldnotice'>\ - [src] opens its eyes.</span>") - active = TRUE - else - if(active) - visible_message("<span class='revenboldnotice'>\ - [src] closes its eyes.</span>") - active = FALSE - update_appearance() - -/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params) - return - -/obj/machinery/power/emitter/energycannon/magical/ex_act(severity) - return - -/obj/machinery/power/emitter/energycannon/magical/emag_act(mob/user) - return - -/obj/structure/table/abductor/wabbajack - name = "wabbajack altar" - desc = "Whether you're sleeping or waking, it's going to be quite chaotic." - max_integrity = 1000 - verb_say = "chants" - var/obj/machinery/power/emitter/energycannon/magical/our_statue - var/list/mob/living/sleepers = list() - var/never_spoken = TRUE - flags_1 = NODECONSTRUCT_1 - -/obj/structure/table/abductor/wabbajack/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/table/abductor/wabbajack/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/table/abductor/wabbajack/process() - var/area = orange(4, src) - if(!our_statue) - for(var/obj/machinery/power/emitter/energycannon/magical/M in area) - our_statue = M - break - - if(!our_statue) - name = "inert [initial(name)]" - return - else - name = initial(name) - - var/turf/T = get_turf(src) - var/list/found = list() - for(var/mob/living/carbon/C in T) - if(C.stat != DEAD) - found += C - - // New sleepers - for(var/i in found - sleepers) - var/mob/living/L = i - L.add_atom_colour("#800080", TEMPORARY_COLOUR_PRIORITY) - L.visible_message("<span class='revennotice'>A strange purple glow wraps itself around [L] as [L.p_they()] suddenly fall[L.p_s()] unconscious.</span>", - "<span class='revendanger'>[desc]</span>") - // Don't let them sit suround unconscious forever - addtimer(CALLBACK(src, PROC_REF(sleeper_dreams), L), 100) - - // Existing sleepers - for(var/i in found) - var/mob/living/L = i - L.SetSleeping(200) - - // Missing sleepers - for(var/i in sleepers - found) - var/mob/living/L = i - L.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#800080") - L.visible_message("<span class='revennotice'>The glow from [L] fades \ - away.</span>") - L.grab_ghost() - - sleepers = found - - if(sleepers.len) - our_statue.active_tables |= src - if(never_spoken || prob(5)) - say(desc) - never_spoken = FALSE - else - our_statue.active_tables -= src - -/obj/structure/table/abductor/wabbajack/proc/sleeper_dreams(mob/living/sleeper) - if(sleeper in sleepers) - to_chat(sleeper, "<span class='revennotice'>While you slumber, you have the strangest dream, like you can see yourself from the outside.</span>") - sleeper.ghostize(TRUE) - -/obj/structure/table/abductor/wabbajack/left - desc = "You sleep so it may wake." - -/obj/structure/table/abductor/wabbajack/right - desc = "It wakes so you may sleep." - // Bar staff, GODMODE mobs(as long as they stay in the shuttle) that just want to make sure people have drinks // and a good time. diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index 9e30c708774d..8e502cd592f5 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -2,7 +2,7 @@ /obj/effect/proc_holder/spell/aimed name = "aimed projectile spell" base_icon_state = "projectile" - var/projectile_type = /obj/projectile/magic/teleport + var/projectile_type = /obj/projectile var/deactive_msg = "You discharge your projectile..." var/active_msg = "You charge your projectile!" var/active_icon_state = "projectile" @@ -106,7 +106,7 @@ projectile_var_overrides = list("zap_range" = 15, "zap_power" = 20000, "zap_flags" = ZAP_MOB_DAMAGE) active_msg = "You energize your hands with arcane lightning!" deactive_msg = "You let the energy flow out of your hands back into yourself..." - projectile_type = /obj/projectile/magic/aoe/lightning + projectile_type = /obj/projectile/magic /obj/effect/proc_holder/spell/aimed/fireball name = "Fireball" @@ -118,7 +118,7 @@ invocation_type = INVOCATION_SHOUT range = 20 cooldown_min = 20 //10 deciseconds reduction per rank - projectile_type = /obj/projectile/magic/aoe/fireball + projectile_type = /obj/projectile/magic base_icon_state = "fireball" action_icon_state = "fireball0" sound = 'sound/magic/fireball.ogg' diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 6631d943a3aa..421f02d78d65 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -84,7 +84,7 @@ invocation_type = INVOCATION_SHOUT range = 2 - projectile_type = /obj/projectile/magic/aoe/fireball/infernal + projectile_type = /obj/projectile/magic action_background_icon_state = "bg_demon" diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index 65eb0cebb2b3..254a43dc23af 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -19,7 +19,6 @@ var/mob/living/shapeshift_type var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\ /mob/living/simple_animal/pet/dog/corgi,\ - /mob/living/simple_animal/hostile/carp/ranged/chaos,\ /mob/living/simple_animal/bot/secbot/ed209,\ /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper,\ /mob/living/simple_animal/hostile/construct/juggernaut) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index f58f94df84dd..eaa0a631ec5d 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1712,13 +1712,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/flashlight/lantern/syndicate restricted_species = list("moth") //End WS edit -/datum/uplink_item/race_restricted/syndigenetics - name = "Fire Breath" - desc = "One of our subsidiaries, 23AndMe, have recently found the formula of backtracking lizard's genetic trail and giving them the ability to breathe fire, much like their dragon ancestors." - cost = 5 - item = /obj/item/dnainjector/firebreath - restricted_species = list("lizard") - /datum/uplink_item/race_restricted/razorwing name = "Razorwing Implant" desc = "Put those wings to good use! This implant makes your wingtips razor sharp and gives you the ability to flourish them, slicing anyone in range." diff --git a/shiptest.dme b/shiptest.dme index 59fc9bc5997a..61ff5146c7cb 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -2108,7 +2108,6 @@ #include "code\modules\events\wizard\invincible.dm" #include "code\modules\events\wizard\lava.dm" #include "code\modules\events\wizard\madness.dm" -#include "code\modules\events\wizard\magicarp.dm" #include "code\modules\events\wizard\petsplosion.dm" #include "code\modules\events\wizard\race.dm" #include "code\modules\events\wizard\rpgloot.dm" @@ -3230,7 +3229,6 @@ #include "code\modules\research\xenobiology\crossbreeding\stabilized.dm" #include "code\modules\ruins\lavaland_ruin_code.dm" #include "code\modules\ruins\rockplanet_ruin_code.dm" -#include "code\modules\ruins\icemoonruin_code\hotsprings.dm" #include "code\modules\ruins\icemoonruin_code\hydroponicslab.dm" #include "code\modules\ruins\icemoonruin_code\library.dm" #include "code\modules\ruins\icemoonruin_code\wrath.dm" From 1d48d3ee8643d14a7d311de6cec5d12cf8af26ef Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Thu, 4 Apr 2024 15:38:19 -0500 Subject: [PATCH 70/89] yea --- _maps/map_files/generic/CentCom.dmm | 5 ----- code/modules/projectiles/guns/magic.dm | 1 - code/modules/projectiles/projectile/magic/spellcard.dm | 6 ------ shiptest.dme | 1 - 4 files changed, 13 deletions(-) delete mode 100644 code/modules/projectiles/projectile/magic/spellcard.dm diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 07fec6af70db..9ad02e5f16ab 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -3063,11 +3063,6 @@ /area/wizard_station) "aEX" = ( /obj/structure/table/wood, -/obj/item/gun/magic/wand{ - desc = "Used in emergencies to reignite magma engines."; - max_charges = 0; - name = "wand of emergency engine ignition" - }, /turf/open/floor/plasteel, /area/wizard_station) "aEY" = ( diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 9360c24be499..be2f2394a543 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -74,7 +74,6 @@ recharge_newshot() return 1 - /obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj) to_chat(user, "<span class='warning'>The [name] whizzles quietly.</span>") diff --git a/code/modules/projectiles/projectile/magic/spellcard.dm b/code/modules/projectiles/projectile/magic/spellcard.dm deleted file mode 100644 index 464586d2f8a4..000000000000 --- a/code/modules/projectiles/projectile/magic/spellcard.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/projectile/spellcard - name = "enchanted card" - desc = "A piece of paper enchanted to give it extreme durability and stiffness, along with a very hot burn to anyone unfortunate enough to get hit by a charged one." - icon_state = "spellcard" - damage_type = BURN - damage = 2 diff --git a/shiptest.dme b/shiptest.dme index 61ff5146c7cb..845389607403 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -3061,7 +3061,6 @@ #include "code\modules\projectiles\projectile\energy\nuclear_particle.dm" #include "code\modules\projectiles\projectile\energy\stun.dm" #include "code\modules\projectiles\projectile\energy\tesla.dm" -#include "code\modules\projectiles\projectile\magic\spellcard.dm" #include "code\modules\projectiles\projectile\reusable\_reusable.dm" #include "code\modules\projectiles\projectile\reusable\arrow.dm" #include "code\modules\projectiles\projectile\reusable\foam_dart.dm" From c696e6820a92b39f8fed530d2dbcf84a5a3e1c84 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Sat, 6 Apr 2024 17:28:46 -0500 Subject: [PATCH 71/89] removes more magic --- code/game/objects/items/granters.dm | 13 -- .../structures/fugitive_role_spawners.dm | 58 ------ .../structures/icemoon/cave_entrance.dm | 1 - .../changeling/powers/mutations.dm | 179 ------------------ .../antagonists/fugitive/fugitive_outfits.dm | 154 --------------- .../antagonists/wizard/equipment/spellbook.dm | 4 - .../awaymissions/mission_code/snowdin.dm | 13 -- code/modules/cargo/exports/lavaland.dm | 1 - .../mining/lavaland/necropolis_chests.dm | 90 --------- .../hostile/megafauna/codename_claw.dm | 16 +- .../mob/living/simple_animal/hostile/mimic.dm | 10 - .../boxes_magazines/internal/misc.dm | 6 - code/modules/projectiles/gun.dm | 1 + .../projectiles/guns/ballistic/shotgun.dm | 46 ----- code/modules/projectiles/guns/magic.dm | 84 -------- code/modules/projectiles/projectile/magic.dm | 21 -- .../xenobiology/crossbreeding/_weapons.dm | 51 ----- .../xenobiology/crossbreeding/chilling.dm | 23 --- code/modules/spells/spell_types/aimed.dm | 57 ------ code/modules/spells/spell_types/charge.dm | 14 -- shiptest.dme | 4 - 21 files changed, 3 insertions(+), 843 deletions(-) delete mode 100644 code/game/objects/structures/fugitive_role_spawners.dm delete mode 100644 code/modules/antagonists/fugitive/fugitive_outfits.dm delete mode 100644 code/modules/projectiles/guns/magic.dm delete mode 100644 code/modules/projectiles/projectile/magic.dm diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 0681892fd47e..f3cdfb068944 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -247,19 +247,6 @@ user.Stun(40, ignore_canstun = TRUE) user.petrify(30) -/obj/item/book/granter/spell/cards - spell = /obj/effect/proc_holder/spell/aimed/spell_cards - spellname = "spellcards" - icon_state ="bookspellcards" - desc = "The ultimate card trick, for users ten and up." - remarks = list("It's all about the razzmataz.", "...I don't think I'll actually be sawing anyone in half", "These are pretty flimsy, most armor would defeat them.", "They do burn damage? Weird.", "Why the dumb stance? It's just a flick of the hand...", "Are these cards? They feel stiffer then pages.", "Best performed using a top hat...") - -/obj/item/book/granter/spell/cards/recoil(mob/living/user) - ..() - to_chat(user,"<span class='warning'>The cards are against you!</span>") - user.Stun(40, ignore_canstun = TRUE) - user.petrify(30) - /obj/item/book/granter/spell/shapechange spell = /obj/effect/proc_holder/spell/targeted/shapeshift spellname = "shapechange" diff --git a/code/game/objects/structures/fugitive_role_spawners.dm b/code/game/objects/structures/fugitive_role_spawners.dm deleted file mode 100644 index 4f98e919ffc5..000000000000 --- a/code/game/objects/structures/fugitive_role_spawners.dm +++ /dev/null @@ -1,58 +0,0 @@ - - -/obj/effect/mob_spawn/human/fugitive - assignedrole = "Fugitive Hunter" - flavour_text = "" //the flavor text will be the backstory argument called on the antagonist's greet, see hunter.dm for details - roundstart = FALSE - death = FALSE - random = TRUE - show_flavour = FALSE - density = TRUE - var/back_story = "error" - -/obj/effect/mob_spawn/human/fugitive/Initialize(mapload) - . = ..() - notify_ghosts("Hunters are waking up looking for refugees!", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_FUGITIVE) - -/obj/effect/mob_spawn/human/fugitive/spacepol - name = "police pod" - desc = "A small sleeper typically used to put people to sleep for briefing on the mission." - mob_name = "a spacepol officer" - flavour_text = "Justice has arrived. I am a member of the Spacepol!" - back_story = "space cop" - outfit = /datum/outfit/spacepol - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/russian - name = "russian pod" - flavour_text = "Ay blyat. I am a space-russian smuggler! We were mid-flight when our cargo was beamed off our ship!" - back_story = "russian" - desc = "A small sleeper typically used to make long distance travel a bit more bearable." - mob_name = "russian" - outfit = /datum/outfit/frontier/hunter - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/bounty - name = "bounty hunter pod" - flavour_text = "We got a new bounty on some fugitives, dead or alive." - back_story = "bounty hunters" - desc = "A small sleeper typically used to make long distance travel a bit more bearable." - mob_name = "bounty hunter" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/bounty/Destroy() - var/obj/structure/fluff/empty_sleeper/S = new(drop_location()) - S.setDir(dir) - return ..() - -/obj/effect/mob_spawn/human/fugitive/bounty/armor - outfit = /datum/outfit/bountyarmor - -/obj/effect/mob_spawn/human/fugitive/bounty/hook - outfit = /datum/outfit/bountyhook - -/obj/effect/mob_spawn/human/fugitive/bounty/synth - outfit = /datum/outfit/bountysynth diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index 5b77da4aafc7..2eff7f22567e 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -745,7 +745,6 @@ GLOBAL_LIST_INIT(ore_probability, list( new /obj/item/clothing/suit/space/hardsuit/carp(loc) new /mob/living/simple_animal/hostile/carp(loc) if(prob(45)) - new /obj/item/gun/magic/hook(loc) new /mob/living/simple_animal/hostile/carp(loc) if(prob(45)) new /obj/item/reagent_containers/food/snacks/fishmeat/carp(loc) diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index d77c4ef6ff3c..90a12b7eab42 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -211,185 +211,6 @@ if(can_drop) new /obj/item/melee/synthetic_arm_blade(get_turf(user)) -/***************************************\ -|***********COMBAT TENTACLES*************| -\***************************************/ - -/datum/action/changeling/weapon/tentacle - name = "Tentacle" - desc = "We ready a tentacle to grab items or victims with. Costs 10 chemicals." - helptext = "We can use it once to retrieve a distant item. If used on living creatures, the effect depends on the intent: \ - Help will simply drag them closer, Disarm will grab whatever they're holding instead of them, Grab will put the victim in our hold after catching it, \ - and Harm will pull it in and stab it if we're also holding a sharp weapon. Cannot be used while in lesser form." - button_icon_state = "tentacle" - chemical_cost = 10 - dna_cost = 2 - req_human = 1 - weapon_type = /obj/item/gun/magic/tentacle - weapon_name_simple = "tentacle" - silent = TRUE - -/obj/item/gun/magic/tentacle - name = "tentacle" - desc = "A fleshy tentacle that can stretch out and grab things or people." - icon = 'icons/obj/changeling_items.dmi' - icon_state = "tentacle" - item_state = "tentacle" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL | NOBLUDGEON - flags_1 = NONE - w_class = WEIGHT_CLASS_HUGE - slot_flags = NONE - ammo_type = /obj/item/ammo_casing/magic/tentacle - fire_sound = 'sound/effects/splat.ogg' - force = 0 - max_charges = 1 - fire_delay = 1 - throwforce = 0 //Just to be on the safe side - throw_range = 0 - throw_speed = 0 - -/obj/item/gun/magic/tentacle/Initialize(mapload, silent) - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - if(ismob(loc)) - if(!silent) - loc.visible_message("<span class='warning'>[loc.name]\'s arm starts stretching inhumanly!</span>", "<span class='warning'>Our arm twists and mutates, transforming it into a tentacle.</span>", "<span class='hear'>You hear organic matter ripping and tearing!</span>") - else - to_chat(loc, "<span class='notice'>You prepare to extend a tentacle.</span>") - - -/obj/item/gun/magic/tentacle/shoot_with_empty_chamber(mob/living/user as mob|obj) - to_chat(user, "<span class='warning'>The [name] is not ready yet.</span>") - -/obj/item/gun/magic/tentacle/process_fire() - . = ..() - if(charges == 0) - qdel(src) - -/obj/item/ammo_casing/magic/tentacle - name = "tentacle" - desc = "A tentacle." - projectile_type = /obj/projectile/tentacle - caliber = "tentacle" - icon_state = "arrow" - firing_effect_type = null - var/obj/item/gun/magic/tentacle/gun //the item that shot it - -/obj/item/ammo_casing/magic/tentacle/Initialize() - gun = loc - . = ..() - -/obj/item/ammo_casing/magic/tentacle/Destroy() - gun = null - return ..() - -/obj/projectile/tentacle - name = "tentacle" - icon_state = "tentacle_end" - pass_flags = PASSTABLE - damage = 0 - damage_type = BRUTE - range = 8 - hitsound = 'sound/weapons/thudswoosh.ogg' - var/chain - var/obj/item/ammo_casing/magic/tentacle/source //the item that shot it - -/obj/projectile/tentacle/Initialize() - source = loc - . = ..() - -/obj/projectile/tentacle/fire(setAngle) - if(firer) - chain = firer.Beam(src, icon_state = "tentacle", emissive = FALSE) - ..() - -/obj/projectile/tentacle/proc/reset_throw(mob/living/carbon/human/H) - if(H.throw_mode) - H.throw_mode_off() //Don't annoy the changeling if he doesn't catch the item - -/obj/projectile/tentacle/proc/tentacle_grab(mob/living/carbon/human/H, mob/living/carbon/C) - if(H.Adjacent(C)) - if(H.get_active_held_item() && !H.get_inactive_held_item()) - H.swap_hand() - if(H.get_active_held_item()) - return - C.grabbedby(H) - C.grippedby(H, instant = TRUE) //instant aggro grab - -/obj/projectile/tentacle/proc/tentacle_stab(mob/living/carbon/human/H, mob/living/carbon/C) - if(H.Adjacent(C)) - for(var/obj/item/I in H.held_items) - if(I.get_sharpness()) - C.visible_message("<span class='danger'>[H] impales [C] with [H.p_their()] [I.name]!</span>", "<span class='userdanger'>[H] impales you with [H.p_their()] [I.name]!</span>") - C.apply_damage(I.force, BRUTE, BODY_ZONE_CHEST) - H.do_item_attack_animation(C, used_item = I) - H.add_mob_blood(C) - playsound(get_turf(H),I.hitsound,75,TRUE) - return - -/obj/projectile/tentacle/on_hit(atom/target, blocked = FALSE) - var/mob/living/carbon/human/H = firer - if(blocked >= 100) - return BULLET_ACT_BLOCK - if(isitem(target)) - var/obj/item/I = target - if(!I.anchored) - to_chat(firer, "<span class='notice'>You pull [I] towards yourself.</span>") - H.throw_mode_on() - I.throw_at(H, 10, 2) - . = BULLET_ACT_HIT - - else if(isliving(target)) - var/mob/living/L = target - if(!L.anchored && !L.throwing)//avoid double hits - if(iscarbon(L)) - var/mob/living/carbon/C = L - var/firer_intent = INTENT_HARM - var/mob/M = firer - if(istype(M)) - firer_intent = M.a_intent - switch(firer_intent) - if(INTENT_HELP) - C.visible_message("<span class='danger'>[L] is pulled by [H]'s tentacle!</span>","<span class='userdanger'>A tentacle grabs you and pulls you towards [H]!</span>") - C.throw_at(get_step_towards(H,C), 8, 2) - return BULLET_ACT_HIT - - if(INTENT_DISARM) - var/obj/item/I = C.get_active_held_item() - if(I) - if(C.dropItemToGround(I)) - C.visible_message("<span class='danger'>[I] is yanked off [C]'s hand by [src]!</span>","<span class='userdanger'>A tentacle pulls [I] away from you!</span>") - on_hit(I) //grab the item as if you had hit it directly with the tentacle - return BULLET_ACT_HIT - else - to_chat(firer, "<span class='warning'>You can't seem to pry [I] off [C]'s hands!</span>") - return BULLET_ACT_BLOCK - else - to_chat(firer, "<span class='danger'>[C] has nothing in hand to disarm!</span>") - return BULLET_ACT_HIT - - if(INTENT_GRAB) - C.visible_message("<span class='danger'>[L] is grabbed by [H]'s tentacle!</span>","<span class='userdanger'>A tentacle grabs you and pulls you towards [H]!</span>") - C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_grab), H, C)) - return BULLET_ACT_HIT - - if(INTENT_HARM) - C.visible_message("<span class='danger'>[L] is thrown towards [H] by a tentacle!</span>","<span class='userdanger'>A tentacle grabs you and throws you towards [H]!</span>") - C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_stab), H, C)) - return BULLET_ACT_HIT - else - L.visible_message("<span class='danger'>[L] is pulled by [H]'s tentacle!</span>","<span class='userdanger'>A tentacle grabs you and pulls you towards [H]!</span>") - L.throw_at(get_step_towards(H,L), 8, 2) - . = BULLET_ACT_HIT - -/obj/projectile/tentacle/Destroy() - qdel(chain) - source = null - return ..() - - /***************************************\ |****************SHIELD*****************| \***************************************/ diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm deleted file mode 100644 index df784813df40..000000000000 --- a/code/modules/antagonists/fugitive/fugitive_outfits.dm +++ /dev/null @@ -1,154 +0,0 @@ -/datum/outfit/prisoner - name = "Prison Escapee" - uniform = /obj/item/clothing/under/rank/prisoner - shoes = /obj/item/clothing/shoes/sneakers/orange - r_pocket = /obj/item/kitchen/knife/shiv - -/datum/outfit/prisoner/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(null,"NTP #CC-0[rand(111,999)]") //same as the lavaland prisoner transport, but this time they are from CC, or CentCom - -/datum/outfit/yalp_cultist - name = "Cultist of Yalp Elor" - uniform = /obj/item/clothing/under/rank/civilian/chaplain - suit = /obj/item/clothing/suit/chaplainsuit/holidaypriest - gloves = /obj/item/clothing/gloves/color/red - shoes = /obj/item/clothing/shoes/sneakers/black - mask = /obj/item/clothing/mask/gas/tiki_mask/yalp_elor - -/datum/outfit/waldo - name = "Waldo" - uniform = /obj/item/clothing/under/pants/jeans - suit = /obj/item/clothing/suit/striped_sweater - head = /obj/item/clothing/head/beanie/waldo - shoes = /obj/item/clothing/shoes/sneakers/brown - ears = /obj/item/radio/headset - glasses = /obj/item/clothing/glasses/regular/circle - -/datum/outfit/waldo/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(null,"Waldo") - H.eye_color = "000" - H.gender = MALE - H.skin_tone = "caucasian3" - H.hairstyle = "Business Hair 3" - H.facial_hairstyle = "Shaved" - H.hair_color = "000" - H.facial_hair_color = H.hair_color - H.update_body() - if(H.mind) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) - var/list/no_drops = list() - no_drops += H.get_item_by_slot(ITEM_SLOT_FEET) - no_drops += H.get_item_by_slot(ITEM_SLOT_ICLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_OCLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_HEAD) - no_drops += H.get_item_by_slot(ITEM_SLOT_EYES) - for(var/i in no_drops) - var/obj/item/I = i - ADD_TRAIT(I, TRAIT_NODROP, CURSED_ITEM_TRAIT) - -/datum/outfit/synthetic - name = "Factory Error Synth" - uniform = /obj/item/clothing/under/color/white - ears = /obj/item/radio/headset - -/datum/outfit/synthetic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/organ/eyes/robotic/glow/eyes = new() - eyes.Insert(src, drop_if_replaced = FALSE) - -/datum/outfit/spacepol - name = "Spacepol Officer" - uniform = /obj/item/clothing/under/rank/security/officer/beatcop - suit = /obj/item/clothing/suit/armor/vest/blueshirt - belt = /obj/item/gun/ballistic/automatic/pistol/candor - head = /obj/item/clothing/head/helmet/police - gloves = /obj/item/clothing/gloves/tackler/combat - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/gas/sechailer/swat/spacepol - glasses = /obj/item/clothing/glasses/sunglasses - ears = /obj/item/radio/headset - l_pocket = /obj/item/ammo_box/magazine/m45 - r_pocket = /obj/item/restraints/handcuffs - id = /obj/item/card/id - -/datum/outfit/spacepol/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_id - W.assignment = "Police Officer" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/frontier/hunter - name = "Frontiersman Corpse (Hunter)" - ears = /obj/item/radio/headset - r_hand = /obj/item/gun/ballistic/rifle/illestren - -/datum/outfit/frontier/hunter/pre_equip(mob/living/carbon/human/H) - if(prob(50)) - head = /obj/item/clothing/head/trapper - -/datum/outfit/bountyarmor - name = "Bounty Hunter - Armored" - uniform = /obj/item/clothing/under/rank/prisoner - head = /obj/item/clothing/head/hunter - suit = /obj/item/clothing/suit/space/hunter - gloves = /obj/item/clothing/gloves/tackler/combat - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/gas/hunter - glasses = /obj/item/clothing/glasses/sunglasses/garb - ears = /obj/item/radio/headset - l_pocket = /obj/item/tank/internals/emergency_oxygen - r_pocket = /obj/item/restraints/handcuffs/cable - id = /obj/item/card/id - r_hand = /obj/item/flamethrower/full/tank - -/datum/outfit/bountyarmor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_id - W.assignment = "Bounty Hunter" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/bountyhook - name = "Bounty Hunter - Hook" - uniform = /obj/item/clothing/under/rank/prisoner - back = /obj/item/storage/backpack - head = /obj/item/clothing/head/scarecrow_hat - gloves = /obj/item/clothing/gloves/botanic_leather - ears = /obj/item/radio/headset - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/scarecrow - r_pocket = /obj/item/restraints/handcuffs/cable - id = /obj/item/card/id - r_hand = /obj/item/gun/ballistic/shotgun/doublebarrel/hook - - backpack_contents = list( - /obj/item/ammo_casing/shotgun/incapacitate = 6 - ) - -/datum/outfit/bountyhook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_id - W.assignment = "Bounty Hunter" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/bountysynth - name = "Bounty Hunter - Synth" - uniform = /obj/item/clothing/under/rank/prisoner - back = /obj/item/storage/backpack - suit = /obj/item/clothing/suit/armor/riot - shoes = /obj/item/clothing/shoes/jackboots - glasses = /obj/item/clothing/glasses/eyepatch - r_pocket = /obj/item/restraints/handcuffs/cable - ears = /obj/item/radio/headset - id = /obj/item/card/id - r_hand = /obj/item/storage/firstaid/regular diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 690cf94cd9a3..69ff4bcfc2f5 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -106,10 +106,6 @@ name = "Fireball" spell_type = /obj/effect/proc_holder/spell/aimed/fireball -/datum/spellbook_entry/spell_cards - name = "Spell Cards" - spell_type = /obj/effect/proc_holder/spell/aimed/spell_cards - /datum/spellbook_entry/rod_form name = "Rod Form" spell_type = /obj/effect/proc_holder/spell/targeted/rod_form diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index c7aa46af728b..b64a2abf02de 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -487,7 +487,6 @@ /obj/item/shield/energy = 6, /obj/item/shield/riot/tele = 12, /obj/item/dnainjector/lasereyesmut = 7, - /obj/item/gun/magic/wand/fireball/inert = 3, /obj/item/pneumatic_cannon = 15, /obj/item/melee/transforming/energy/sword = 7, /obj/item/book/granter/spell/knock = 15, @@ -515,8 +514,6 @@ /obj/item/dualsaber = 15, /obj/item/organ/heart/demon = 7, /obj/item/gun/ballistic/automatic/smg/c20r = 16, - /obj/item/gun/magic/wand/resurrection/inert = 15, - /obj/item/gun/magic/wand/resurrection = 10, /obj/item/uplink/old = 2, /obj/item/book/granter/spell/charge = 12, /obj/item/grenade/clusterbuster/spawner_manhacks = 15, @@ -556,16 +553,6 @@ desc = "High speed, low drag combat boots, now with an added layer of insulation." min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT -/obj/item/gun/magic/wand/fireball/inert - name = "weakened wand of fireball" - desc = "This wand shoots scorching balls of fire that explode into destructive flames. The years of the cold have weakened the magic inside the wand." - max_charges = 4 - -/obj/item/gun/magic/wand/resurrection/inert - name = "weakened wand of healing" - desc = "This wand uses healing magics to heal and revive. The years of the cold have weakened the magic inside the wand." - max_charges = 5 - /obj/effect/mob_spawn/human/syndicatesoldier/coldres name = "Syndicate Snow Operative" outfit = /datum/outfit/snowsyndie/corpse diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index e325b8e8d09b..25438e1d4728 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -7,7 +7,6 @@ unit_name = "minor lava planet artifact" export_types = list(/obj/item/immortality_talisman, /obj/item/book_of_babel, - /obj/item/gun/magic/hook, /obj/item/wisp_lantern, /obj/item/reagent_containers/glass/bottle/potion/flight, /obj/item/katana/cursed, diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 4edc13071932..61a0158618c4 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -66,8 +66,6 @@ new /obj/item/wisp_lantern(src) if(20) new /obj/item/immortality_talisman(src) - if(21) - new /obj/item/gun/magic/hook(src) if(22) new /obj/item/voodoo(src) if(23) @@ -143,8 +141,6 @@ new /obj/item/wisp_lantern(src) if(20) new /obj/item/immortality_talisman(src) - if(21) - new /obj/item/gun/magic/hook(src) if(22) new /obj/item/voodoo(src) if(23) @@ -481,91 +477,6 @@ /obj/effect/warp_cube/ex_act(severity, target) return -//Meat Hook -/obj/item/gun/magic/hook - name = "meat hook" - desc = "A light hooked blade, attached by the handle to a long chain. Can be used to make quick strikes in hand, or thrown at enemies, magically dragging them to the user. <b>Get over here!</b>" - ammo_type = /obj/item/ammo_casing/magic/hook - icon_state = "hook" - item_state = "hook" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - fire_sound = 'sound/weapons/batonextend.ogg' - max_charges = 1 - item_flags = NEEDS_PERMIT - force = 15 - sharpness = IS_SHARP - block_chance = 5//A pittance, but might be worth something in a scuffle - hitsound = 'sound/weapons/chainhit.ogg' - -/obj/item/gun/magic/hook/melee_attack_chain(mob/user, atom/target, params) - ..() - user.changeNext_move(CLICK_CD_MELEE * 0.5)//quick to swing. 15 force can be quite something with this attack frequency. - -/obj/item/gun/magic/hook/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 15, 130, 0, hitsound) - -/obj/item/ammo_casing/magic/hook - name = "hook" - desc = "A hook." - projectile_type = /obj/projectile/hook - caliber = "hook" - icon_state = "arrow" - -/obj/projectile/hook - name = "hook" - icon_state = "hook" - icon = 'icons/obj/lavaland/artefacts.dmi' - pass_flags = PASSTABLE - damage = 20 - stamina = 20 - armour_penetration = 60 - damage_type = BRUTE - hitsound = 'sound/effects/splat.ogg' - var/chain - var/knockdown_time = (0.5 SECONDS) - -/obj/projectile/hook/fire(setAngle) - if(firer) - chain = firer.Beam(src, icon_state = "chain", emissive = FALSE) - ..() - //TODO: root the firer until the chain returns - -/obj/projectile/hook/on_hit(atom/target) - . = ..() - if(ismovable(target)) - var/atom/movable/A = target - if(A.anchored) - return - A.visible_message("<span class='danger'>[A] is snagged by [firer]'s hook!</span>") - new /datum/forced_movement(A, get_turf(firer), 5, TRUE) - if (isliving(target)) - var/mob/living/fresh_meat = target - fresh_meat.Knockdown(knockdown_time) - return - //TODO: keep the chain beamed to A - //TODO: needs a callback to delete the chain - -/obj/projectile/hook/Destroy() - qdel(chain) - return ..() - -//just a nerfed version of the real thing for the bounty hunters. -/obj/item/gun/magic/hook/bounty - name = "hook" - ammo_type = /obj/item/ammo_casing/magic/hook/bounty - -/obj/item/gun/magic/hook/bounty/shoot_with_empty_chamber(mob/living/user) - to_chat(user, "<span class='warning'>The [src] isn't ready to fire yet!</span>") - -/obj/item/ammo_casing/magic/hook/bounty - projectile_type = /obj/projectile/hook/bounty - -/obj/projectile/hook/bounty - damage = 0 - stamina = 40 - //Immortality Talisman: Now with state-of-the-art panic button technology /obj/item/immortality_talisman name = "\improper Immortality Talisman" @@ -1270,7 +1181,6 @@ new /obj/item/lava_staff(src) if(3) new /obj/item/book/granter/spell/sacredflame(src) - new /obj/item/gun/magic/wand/fireball(src) if(4) new /obj/item/dragons_blood(src) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm index cca8a649353f..59ab203d4a85 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm @@ -146,7 +146,7 @@ if(3) //only should fire duing phase 2 emp_pulse() if(4) - tentacle(target) + sting_attack(target) if(5) summon_creatures() if(6) @@ -161,10 +161,7 @@ swift_dash(target, dash_num_long, 15) else if((get_dist(src, target) >= 4) && ((get_dist(src, target)) <= 8) && !shouldnt_move) - if(prob(60)) - tentacle(target) - return - else if(prob(40)) + if(prob(40)) sting_attack(target) return else @@ -230,15 +227,6 @@ empulse(src, 2, 4) shouldnt_move = FALSE -/////TENTACLE -/mob/living/simple_animal/hostile/megafauna/claw/proc/tentacle(target) - shake_animation(2) - projectiletype = /obj/projectile/tentacle - projectilesound = 'sound/effects/splat.ogg' - Shoot(target) - -/////TENTACLE END - /////STING ATTACK /mob/living/simple_animal/hostile/megafauna/claw/proc/sting_attack(target) shouldnt_move = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index ca595d4d682f..0568533c1e0c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -205,7 +205,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/ranged var/obj/item/gun/TrueGun = null - var/obj/item/gun/magic/Zapstick var/obj/item/gun/ballistic/Pewgun var/obj/item/gun/energy/Zapgun @@ -223,10 +222,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca move_to_delay = 2 * G.w_class + 1 projectilesound = G.fire_sound TrueGun = G - if(istype(G, /obj/item/gun/magic)) - Zapstick = G - var/obj/item/ammo_casing/magic/M = Zapstick.ammo_type - projectiletype = initial(M.projectile_type) if(istype(G, /obj/item/gun/ballistic)) Pewgun = G var/obj/item/ammo_box/magazine/M = Pewgun.mag_type @@ -245,11 +240,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca Zapgun.cell.use(shot.e_cost) Zapgun.update_appearance() ..() - else if(Zapstick) - if(Zapstick.charges) - Zapstick.charges-- - Zapstick.update_appearance() - ..() else if(Pewgun) if(Pewgun.chambered) if(Pewgun.chambered.BB) diff --git a/code/modules/projectiles/boxes_magazines/internal/misc.dm b/code/modules/projectiles/boxes_magazines/internal/misc.dm index 1d4316560e92..55b749ac3333 100644 --- a/code/modules/projectiles/boxes_magazines/internal/misc.dm +++ b/code/modules/projectiles/boxes_magazines/internal/misc.dm @@ -1,9 +1,3 @@ -/obj/item/ammo_box/magazine/internal/hook - name = "hook internal tube" - ammo_type = /obj/item/ammo_casing/magic/hook - caliber = "hook" - max_ammo = 1 - /obj/item/ammo_box/magazine/internal/bow name = "bowstring" ammo_type = /obj/item/ammo_casing/caseless/arrow diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index c524ffd36516..4ffcf6cb6828 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -16,6 +16,7 @@ #define MANUFACTURER_DONKCO "the Donk! Co. logo" #define MANUFACTURER_PGF "the Etherbor Industries emblem" #define MANUFACTURER_IMPORT "Lanchester Import Co." + /obj/item/gun name = "gun" desc = "It's a gun. It's pretty terrible, though." diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 0b7e526c8a2b..58873cf387e2 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -433,52 +433,6 @@ sawn_off = TRUE slot_flags = ITEM_SLOT_BELT -/obj/item/gun/ballistic/shotgun/doublebarrel/hook - name = "hook modified sawn-off shotgun" - desc = "Range isn't an issue when you can bring your victim to you." - icon_state = "hookshotgun" - icon = 'icons/obj/guns/projectile.dmi' - item_state = "shotgun" - load_sound = 'sound/weapons/gun/shotgun/insert_shell.ogg' - mag_type = /obj/item/ammo_box/magazine/internal/shot/bounty - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_MEDIUM - can_be_sawn_off = FALSE - force = 16 //it has a hook on it - attack_verb = list("slashed", "hooked", "stabbed") - hitsound = 'sound/weapons/bladeslice.ogg' - //our hook gun! - var/obj/item/gun/magic/hook/bounty/hook - var/toggled = FALSE - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/Initialize() - . = ..() - hook = new /obj/item/gun/magic/hook/bounty(src) - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/AltClick(mob/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(toggled) - to_chat(user,"<span class='notice'>You switch to the shotgun.</span>") - fire_sound = initial(fire_sound) - else - to_chat(user,"<span class='notice'>You switch to the hook.</span>") - fire_sound = 'sound/weapons/batonextend.ogg' - toggled = !toggled - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/examine(mob/user) - . = ..() - if(toggled) - . += "<span class='notice'>Alt-click to switch to the shotgun.</span>" - else - . += "<span class='notice'>Alt-click to switch to the hook.</span>" - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/afterattack(atom/target, mob/living/user, flag, params) - if(toggled) - hook.afterattack(target, user, flag, params) - else - return ..() - /obj/item/gun/ballistic/shotgun/automatic/combat/compact/compact name = "compact compact combat shotgun" desc = "A compact version of the compact version of the semi automatic combat shotgun. For when you want a gun the same size as your brain." diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm deleted file mode 100644 index be2f2394a543..000000000000 --- a/code/modules/projectiles/guns/magic.dm +++ /dev/null @@ -1,84 +0,0 @@ -/obj/item/gun/magic - name = "staff of nothing" - desc = "This staff is boring to watch because even though it came first you've seen everything it can do in other staves for years." - icon = 'icons/obj/guns/magic.dmi' - icon_state = "staffofnothing" - item_state = "staff" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' //not really a gun and some toys use these inhands - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - fire_sound = 'sound/weapons/emitter.ogg' - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_HUGE - var/checks_antimagic = TRUE - var/max_charges = 6 - var/charges = 0 - var/recharge_rate = 4 - var/charge_tick = 0 - var/can_charge = TRUE - var/ammo_type - var/no_den_usage - trigger_guard = TRIGGER_GUARD_ALLOW_ALL // Has no trigger at all, uses magic instead - -/obj/item/gun/magic/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) - if(no_den_usage) - var/area/A = get_area(user) - if(istype(A, /area/wizard_station)) - add_fingerprint(user) - to_chat(user, "<span class='warning'>You know better than to violate the security of The Den, best wait until you leave to use [src].</span>") - return - else - no_den_usage = 0 - if(checks_antimagic && user.anti_magic_check(TRUE, FALSE, FALSE, 0, TRUE)) - add_fingerprint(user) - to_chat(user, "<span class='warning'>Something is interfering with [src].</span>") - return - . = ..() - -/obj/item/gun/magic/can_shoot() - return charges - -/obj/item/gun/magic/recharge_newshot() - if (charges && chambered && !chambered.BB) - chambered.newshot() - -/obj/item/gun/magic/process_chamber() - if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired... - charges--//... drain a charge - recharge_newshot() - -/obj/item/gun/magic/Initialize() - . = ..() - charges = max_charges - if(ammo_type) - chambered = new ammo_type(src) - if(can_charge) - START_PROCESSING(SSobj, src) - - -/obj/item/gun/magic/Destroy() - if(can_charge) - STOP_PROCESSING(SSobj, src) - return ..() - - -/obj/item/gun/magic/process() - if (charges >= max_charges) - charge_tick = 0 - return - charge_tick++ - if(charge_tick < recharge_rate) - return 0 - charge_tick = 0 - charges++ - if(charges == 1) - recharge_newshot() - return 1 - -/obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj) - to_chat(user, "<span class='warning'>The [name] whizzles quietly.</span>") - -/obj/item/gun/magic/vv_edit_var(var_name, var_value) - . = ..() - switch(var_name) - if(NAMEOF(src, charges)) - recharge_newshot() diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm deleted file mode 100644 index 67a91efa0f61..000000000000 --- a/code/modules/projectiles/projectile/magic.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/projectile/magic - name = "bolt" - icon_state = "energy" - damage = 0 - damage_type = OXY - nodamage = TRUE - armour_penetration = 100 - flag = "magic" - -/obj/projectile/magic/aoe - name = "Area Bolt" - desc = "What the fuck does this do?!" - damage = 0 - var/proxdet = TRUE - -/obj/projectile/magic/aoe/Range() - if(proxdet) - for(var/mob/living/L in range(1, get_turf(src))) - if(L.stat != DEAD && L != firer && !L.anti_magic_check()) - return Bump(L) - ..() diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 29ea3fbd4298..ac663059d0c0 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -65,54 +65,3 @@ Slimecrossing Weapons /obj/item/shield/adamantineshield/ComponentInitialize() . = ..() AddComponent(/datum/component/two_handed, require_twohands=TRUE, force_wielded=15) - -//Bloodchiller - Chilling Green -/obj/item/gun/magic/bloodchill - name = "blood chiller" - desc = "A horrifying weapon made of your own bone and blood vessels. It shoots slowing globules of your own blood. Ech." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "bloodgun" - item_state = "bloodgun" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - slot_flags = NONE - force = 5 - max_charges = 1 //Recharging costs blood. - recharge_rate = 1 - ammo_type = /obj/item/ammo_casing/magic/bloodchill - fire_sound = 'sound/effects/attackblob.ogg' - -/obj/item/gun/magic/bloodchill/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/gun/magic/bloodchill/process() - charge_tick++ - if(charge_tick < recharge_rate || charges >= max_charges) - return 0 - charge_tick = 0 - var/mob/living/M = loc - if(istype(M) && M.blood_volume >= 20) - charges++ - M.blood_volume -= 20 - if(charges == 1) - recharge_newshot() - return 1 - -/obj/item/ammo_casing/magic/bloodchill - projectile_type = /obj/projectile/magic/bloodchill - -/obj/projectile/magic/bloodchill - name = "blood ball" - icon_state = "pulse0_bl" - damage = 0 - damage_type = OXY - nodamage = TRUE - hitsound = 'sound/effects/splat.ogg' - -/obj/projectile/magic/bloodchill/on_hit(mob/living/target) - . = ..() - if(isliving(target)) - target.apply_status_effect(/datum/status_effect/bloodchill) diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index 89fa16cca7f5..9fe7857c073b 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -235,29 +235,6 @@ Chilling extracts: user.visible_message("<span class='notice'>[src] lets out a peaceful ring as it shatters, but nothing happens...</span>") ..() -/obj/item/slimecross/chilling/green - colour = "green" - effect_desc = "Creates a bone gun in the hand it is used in, which uses blood as ammo." - -/obj/item/slimecross/chilling/green/do_effect(mob/user) - var/which_hand = "l_hand" - if(!(user.active_hand_index % 2)) - which_hand = "r_hand" - var/mob/living/L = user - if(!istype(user)) - return - var/obj/item/held = L.get_active_held_item() //This should be itself, but just in case... - L.dropItemToGround(held) - var/obj/item/gun/magic/bloodchill/gun = new(user) - if(!L.put_in_hands(gun)) - qdel(gun) - user.visible_message("<span class='warning'>[src] flash-freezes [user]'s arm, cracking the flesh horribly!</span>") - else - user.visible_message("<span class='danger'>[src] chills and snaps off the front of the bone on [user]'s arm, leaving behind a strange, gun-like structure!</span>") - user.emote("scream") - L.apply_damage(30,BURN,which_hand) - ..() - /obj/item/slimecross/chilling/pink colour = "pink" effect_desc = "Creates a slime corgi puppy." diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index 8e502cd592f5..46737c5b5a99 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -130,60 +130,3 @@ var/range = 6 + 2*spell_level projectile_var_overrides = list("range" = range) return ..() - -/obj/effect/proc_holder/spell/aimed/spell_cards - name = "Spell Cards" - desc = "Blazing hot rapid-fire homing cards. Send your foes to the shadow realm with their mystical power!" - school = "evocation" - charge_max = 50 - clothes_req = FALSE - invocation = "Sigi'lu M'Fan 'Tasia" - invocation_type = INVOCATION_SHOUT - range = 40 - cooldown_min = 10 - projectile_amount = 5 - projectiles_per_fire = 7 - projectile_type = /obj/projectile/spellcard - base_icon_state = "spellcard" - action_icon_state = "spellcard0" - var/datum/weakref/current_target_weakref - var/projectile_turnrate = 10 - var/projectile_pixel_homing_spread = 32 - var/projectile_initial_spread_amount = 30 - var/projectile_location_spread_amount = 12 - var/datum/component/lockon_aiming/lockon_component - ranged_clickcd_override = TRUE - -/obj/effect/proc_holder/spell/aimed/spell_cards/on_activation(mob/M) - QDEL_NULL(lockon_component) - lockon_component = M.AddComponent(/datum/component/lockon_aiming, 5, typecacheof(list(/mob/living)), 1, null, CALLBACK(src, PROC_REF(on_lockon_component))) - -/obj/effect/proc_holder/spell/aimed/spell_cards/proc/on_lockon_component(list/locked_weakrefs) - if(!length(locked_weakrefs)) - current_target_weakref = null - return - current_target_weakref = locked_weakrefs[1] - var/atom/A = current_target_weakref.resolve() - if(A) - var/mob/M = lockon_component.parent - M.face_atom(A) - -/obj/effect/proc_holder/spell/aimed/spell_cards/on_deactivation(mob/M) - QDEL_NULL(lockon_component) - -/obj/effect/proc_holder/spell/aimed/spell_cards/ready_projectile(obj/projectile/P, atom/target, mob/user, iteration) - if(current_target_weakref) - var/atom/A = current_target_weakref.resolve() - if(A && get_dist(A, user) < 7) - P.homing_turn_speed = projectile_turnrate - P.homing_inaccuracy_min = projectile_pixel_homing_spread - P.homing_inaccuracy_max = projectile_pixel_homing_spread - P.set_homing_target(current_target_weakref.resolve()) - var/rand_spr = rand() - var/total_angle = projectile_initial_spread_amount * 2 - var/adjusted_angle = total_angle - ((projectile_initial_spread_amount / projectiles_per_fire) * 0.5) - var/one_fire_angle = adjusted_angle / projectiles_per_fire - var/current_angle = iteration * one_fire_angle * rand_spr - (projectile_initial_spread_amount / 2) - P.pixel_x = rand(-projectile_location_spread_amount, projectile_location_spread_amount) - P.pixel_y = rand(-projectile_location_spread_amount, projectile_location_spread_amount) - P.preparePixelProjectile(target, user, null, current_angle) diff --git a/code/modules/spells/spell_types/charge.dm b/code/modules/spells/spell_types/charge.dm index 57325e685f4d..225c36580e49 100644 --- a/code/modules/spells/spell_types/charge.dm +++ b/code/modules/spells/spell_types/charge.dm @@ -51,20 +51,6 @@ I.used = FALSE charged_item = I break - else if(istype(item, /obj/item/gun/magic)) - var/obj/item/gun/magic/I = item - if(prob(80) && !I.can_charge) - I.max_charges-- - if(I.max_charges <= 0) - I.max_charges = 0 - burnt_out = TRUE - I.charges = I.max_charges - if(istype(item, /obj/item/gun/magic/wand) && I.max_charges != 0) - var/obj/item/gun/magic/W = item - W.icon_state = initial(W.icon_state) - I.recharge_newshot() - charged_item = I - break else if(istype(item, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/C = item if(!C.self_recharge) diff --git a/shiptest.dme b/shiptest.dme index 845389607403..c16cbd645b83 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -1333,7 +1333,6 @@ #include "code\game\objects\structures\fireplace.dm" #include "code\game\objects\structures\flora.dm" #include "code\game\objects\structures\fluff.dm" -#include "code\game\objects\structures\fugitive_role_spawners.dm" #include "code\game\objects\structures\ghost_role_spawners.dm" #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\grille.dm" @@ -1685,7 +1684,6 @@ #include "code\modules\antagonists\ert\nanotrasen.dm" #include "code\modules\antagonists\ert\solgov.dm" #include "code\modules\antagonists\ert\syndicate.dm" -#include "code\modules\antagonists\fugitive\fugitive_outfits.dm" #include "code\modules\antagonists\gang\outfits.dm" #include "code\modules\antagonists\greentext\greentext.dm" #include "code\modules\antagonists\magic_servant\servant.dm" @@ -3007,7 +3005,6 @@ #include "code\modules\projectiles\guns\ballistic.dm" #include "code\modules\projectiles\guns\energy.dm" #include "code\modules\projectiles\guns\gunhud.dm" -#include "code\modules\projectiles\guns\magic.dm" #include "code\modules\projectiles\guns\powered.dm" #include "code\modules\projectiles\guns\ballistic\assault.dm" #include "code\modules\projectiles\guns\ballistic\automatic.dm" @@ -3039,7 +3036,6 @@ #include "code\modules\projectiles\guns\misc\syringe_gun.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" -#include "code\modules\projectiles\projectile\magic.dm" #include "code\modules\projectiles\projectile\bullets\_incendiary.dm" #include "code\modules\projectiles\projectile\bullets\dart_syringe.dm" #include "code\modules\projectiles\projectile\bullets\dnainjector.dm" From 5e86a5737120397e9e32295cd4a15957ed11e7d7 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 10 Apr 2024 22:34:36 -0500 Subject: [PATCH 72/89] fix --- _maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm | 3 --- 1 file changed, 3 deletions(-) diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index b5135c604f0e..8e7bb5ba895f 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -1721,9 +1721,6 @@ }, /obj/machinery/light/directional/north, /obj/machinery/firealarm/directional/east, -/obj/item/storage/box/firingpins{ - pixel_x = -12 - }, /turf/open/floor/pod/dark, /area/ship/security/armory) "qz" = ( From c3463954f30eb7c94930887638f30a19e95cf6d4 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Wed, 10 Apr 2024 22:37:40 -0500 Subject: [PATCH 73/89] unrestricted no longer exists --- _maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index 8e7bb5ba895f..63bcd879d7e1 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -2754,7 +2754,7 @@ }, /obj/structure/guncase, /obj/structure/railing, -/obj/item/gun/ballistic/automatic/smg/c20r/unrestricted, +/obj/item/gun/ballistic/automatic/smg/c20r, /obj/machinery/light/directional/east, /turf/open/floor/pod/dark, /area/ship/security/armory) From 68e23f2a53d6fcbbd54734e415c958560e7bd7e8 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Thu, 18 Apr 2024 09:24:36 -0500 Subject: [PATCH 74/89] gun defines more orginized --- code/__DEFINES/combat.dm | 66 --------------- code/__DEFINES/gun.dm | 95 ++++++++++++++++++++++ code/modules/projectiles/gun.dm | 21 ----- code/modules/projectiles/guns/ballistic.dm | 2 +- code/modules/projectiles/projectile.dm | 4 - shiptest.dme | 1 + 6 files changed, 97 insertions(+), 92 deletions(-) create mode 100644 code/__DEFINES/gun.dm diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 7df3a453acfb..ad0754c85b21 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -133,52 +133,6 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(/obj/item/gun))) #define EMBED_POINTY list("ignore_throwspeed_threshold" = TRUE) #define EMBED_POINTY_SUPERIOR list("embed_chance" = 100, "ignore_throwspeed_threshold" = TRUE) -//Gun weapon weight -/// Allows you to dual wield this gun and your offhand gun -#define WEAPON_LIGHT 1 -/// Does not allow you to dual wield with this gun and your offhand gun -#define WEAPON_MEDIUM 2 -/// You must wield the gun to fire this gun -#define WEAPON_HEAVY 3 -//Gun trigger guards -#define TRIGGER_GUARD_ALLOW_ALL -1 -#define TRIGGER_GUARD_NONE 0 -#define TRIGGER_GUARD_NORMAL 1 -//Gun bolt types -///Gun has a bolt, it stays closed while not cycling. The gun must be racked to have a bullet chambered when a mag is inserted. -/// Example: c20, shotguns, m90 -#define BOLT_TYPE_STANDARD 1 -///Gun has a bolt, it is open when ready to fire. The gun can never have a chambered bullet with no magazine, but the bolt stays ready when a mag is removed. -/// Example: Some SMGs, the L6 -#define BOLT_TYPE_OPEN 2 -///Gun has no moving bolt mechanism, it cannot be racked. Also dumps the entire contents when emptied instead of a magazine. -/// Example: Break action shotguns, revolvers -#define BOLT_TYPE_NO_BOLT 3 -///Gun has a bolt, it locks back when empty. It can be released to chamber a round if a magazine is in. -/// Example: Pistols with a slide lock, some SMGs -#define BOLT_TYPE_LOCKING 4 -//Sawn off nerfs -///accuracy penalty of sawn off guns -#define SAWN_OFF_ACC_PENALTY 25 -///added recoil of sawn off guns -#define SAWN_OFF_RECOIL 1 - -//ammo box sprite defines -///ammo box will always use provided icon state -#define AMMO_BOX_ONE_SPRITE 0 -///ammo box will have a different state for each bullet; <icon_state>-<bullets left> -#define AMMO_BOX_PER_BULLET 1 -///ammo box will have a different state for full and empty; <icon_state>-max_ammo and <icon_state>-0 -#define AMMO_BOX_FULL_EMPTY 2 - -#define SUPPRESSED_NONE 0 -#define SUPPRESSED_QUIET 1 ///standard suppressed -#define SUPPRESSED_VERY 2 /// no message - -//Projectile Reflect -#define REFLECT_NORMAL (1<<0) -#define REFLECT_FAKEPROJECTILE (1<<1) - //Object/Item sharpness #define IS_BLUNT 0 #define IS_SHARP 1 @@ -214,23 +168,3 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(/obj/item/gun))) //We will round to this value in damage calculations. #define DAMAGE_PRECISION 0.1 - -//bullet_act() return values -#define BULLET_ACT_HIT "HIT" //It's a successful hit, whatever that means in the context of the thing it's hitting. -#define BULLET_ACT_BLOCK "BLOCK" //It's a blocked hit, whatever that means in the context of the thing it's hitting. -#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default. - -#define NICE_SHOT_RICOCHET_BONUS 10 //if the shooter has the NICE_SHOT trait and they fire a ricocheting projectile, add this to the ricochet chance and auto aim angle - -//Autofire component -/// Compatible firemode is in the gun. Wait until it's held in the user hands. -#define AUTOFIRE_STAT_IDLE (1<<0) -/// Gun is active and in the user hands. Wait until user does a valid click. -#define AUTOFIRE_STAT_ALERT (1<<1) -/// Gun is shooting. -#define AUTOFIRE_STAT_FIRING (1<<2) - -#define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown" - #define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0) -#define COMSIG_AUTOFIRE_SHOT "autofire_shot" - #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) diff --git a/code/__DEFINES/gun.dm b/code/__DEFINES/gun.dm new file mode 100644 index 000000000000..c5936e6f2d0e --- /dev/null +++ b/code/__DEFINES/gun.dm @@ -0,0 +1,95 @@ +//Gun weapon weight +/// Allows you to dual wield this gun and your offhand gun +#define WEAPON_LIGHT 1 +/// Does not allow you to dual wield with this gun and your offhand gun +#define WEAPON_MEDIUM 2 +/// You must wield the gun to fire this gun +#define WEAPON_HEAVY 3 +//Gun trigger guards +#define TRIGGER_GUARD_ALLOW_ALL -1 +#define TRIGGER_GUARD_NONE 0 +#define TRIGGER_GUARD_NORMAL 1 +//Gun bolt types +///Gun has a bolt, it stays closed while not cycling. The gun must be racked to have a bullet chambered when a mag is inserted. +/// Example: c20, shotguns, m90 +#define BOLT_TYPE_STANDARD 1 +///Gun has a bolt, it is open when ready to fire. The gun can never have a chambered bullet with no magazine, but the bolt stays ready when a mag is removed. +/// Example: Some SMGs, the L6 +#define BOLT_TYPE_OPEN 2 +///Gun has no moving bolt mechanism, it cannot be racked. Also dumps the entire contents when emptied instead of a magazine. +/// Example: Break action shotguns, revolvers +#define BOLT_TYPE_NO_BOLT 3 +///Gun has a bolt, it locks back when empty. It can be released to chamber a round if a magazine is in. +/// Example: Pistols with a slide lock, some SMGs +#define BOLT_TYPE_LOCKING 4 +//Sawn off nerfs +///accuracy penalty of sawn off guns +#define SAWN_OFF_ACC_PENALTY 25 +///added recoil of sawn off guns +#define SAWN_OFF_RECOIL 1 + +//Autofire component +/// Compatible firemode is in the gun. Wait until it's held in the user hands. +#define AUTOFIRE_STAT_IDLE (1<<0) +/// Gun is active and in the user hands. Wait until user does a valid click. +#define AUTOFIRE_STAT_ALERT (1<<1) +/// Gun is shooting. +#define AUTOFIRE_STAT_FIRING (1<<2) + +#define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown" + #define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0) +#define COMSIG_AUTOFIRE_SHOT "autofire_shot" + #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) + +#define SUPPRESSED_NONE 0 +#define SUPPRESSED_QUIET 1 ///standard suppressed +#define SUPPRESSED_VERY 2 /// no message + +#define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6 + +#define MANUFACTURER_NONE null +#define MANUFACTURER_SHARPLITE "the Sharplite Defense logo" +#define MANUFACTURER_SHARPLITE_NEW "the Nanotrasen-Sharplite logo" +#define MANUFACTURER_HUNTERSPRIDE "the Hunter's Pride Arms and Ammunition logo" +#define MANUFACTURER_SOLARARMORIES "the Solarbundswaffenkammer emblem" +#define MANUFACTURER_SCARBOROUGH "the Scarborough Arms logo" +#define MANUFACTURER_EOEHOMA "the Eoehoma Firearms emblem" +#define MANUFACTURER_NANOTRASEN_OLD "an outdated Nanotrasen logo" +#define MANUFACTURER_NANOTRASEN "the Nanotrasen logo" +#define MANUFACTURER_BRAZIL "a green flag with a blue circle and a yellow diamond around it" +#define MANUFACTURER_INTEQ "an orange crest with the letters 'IRMG'" +#define MANUFACTURER_MINUTEMAN "the Lanchester City Firearms Plant logo" +#define MANUFACTURER_DONKCO "the Donk! Co. logo" +#define MANUFACTURER_PGF "the Etherbor Industries emblem" +#define MANUFACTURER_IMPORT "Lanchester Import Co." + + +///////////////// +// PROJECTILES // +///////////////// + +//bullet_act() return values +#define BULLET_ACT_HIT "HIT" //It's a successful hit, whatever that means in the context of the thing it's hitting. +#define BULLET_ACT_BLOCK "BLOCK" //It's a blocked hit, whatever that means in the context of the thing it's hitting. +#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default. + +#define NICE_SHOT_RICOCHET_BONUS 10 //if the shooter has the NICE_SHOT trait and they fire a ricocheting projectile, add this to the ricochet chance and auto aim angle + +//Projectile Reflect +#define REFLECT_NORMAL (1<<0) +#define REFLECT_FAKEPROJECTILE (1<<1) + +//ammo box sprite defines +///ammo box will always use provided icon state +#define AMMO_BOX_ONE_SPRITE 0 +///ammo box will have a different state for each bullet; <icon_state>-<bullets left> +#define AMMO_BOX_PER_BULLET 1 +///ammo box will have a different state for full and empty; <icon_state>-max_ammo and <icon_state>-0 +#define AMMO_BOX_FULL_EMPTY 2 + +//Projectile Reflect +#define REFLECT_NORMAL (1<<0) +#define REFLECT_FAKEPROJECTILE (1<<1) + +#define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. +#define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4ffcf6cb6828..865a7f0ac514 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1,22 +1,3 @@ - -#define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6 - -#define MANUFACTURER_NONE null -#define MANUFACTURER_SHARPLITE "the Sharplite Defense logo" -#define MANUFACTURER_SHARPLITE_NEW "the Nanotrasen-Sharplite logo" -#define MANUFACTURER_HUNTERSPRIDE "the Hunter's Pride Arms and Ammunition logo" -#define MANUFACTURER_SOLARARMORIES "the Solarbundswaffenkammer emblem" -#define MANUFACTURER_SCARBOROUGH "the Scarborough Arms logo" -#define MANUFACTURER_EOEHOMA "the Eoehoma Firearms emblem" -#define MANUFACTURER_NANOTRASEN_OLD "an outdated Nanotrasen logo" -#define MANUFACTURER_NANOTRASEN "the Nanotrasen logo" -#define MANUFACTURER_BRAZIL "a green flag with a blue circle and a yellow diamond around it" -#define MANUFACTURER_INTEQ "an orange crest with the letters 'IRMG'" -#define MANUFACTURER_MINUTEMAN "the Lanchester City Firearms Plant logo" -#define MANUFACTURER_DONKCO "the Donk! Co. logo" -#define MANUFACTURER_PGF "the Etherbor Industries emblem" -#define MANUFACTURER_IMPORT "Lanchester Import Co." - /obj/item/gun name = "gun" desc = "It's a gun. It's pretty terrible, though." @@ -872,5 +853,3 @@ if(zoomable) azoom = new() azoom.gun = src - -#undef DUALWIELD_PENALTY_EXTRA_MULTIPLIER diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index f2cb9504dde7..b277f319bcb5 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -64,7 +64,7 @@ var/empty_autoeject = FALSE ///Whether the gun supports multiple special mag types var/special_mags = FALSE - ///The bolt type of the gun, affects quite a bit of functionality, see combat.dm defines for bolt types: BOLT_TYPE_STANDARD; BOLT_TYPE_LOCKING; BOLT_TYPE_OPEN; BOLT_TYPE_NO_BOLT + ///The bolt type of the gun, affects quite a bit of functionality, see gun.dm in defines for bolt types: BOLT_TYPE_STANDARD; BOLT_TYPE_LOCKING; BOLT_TYPE_OPEN; BOLT_TYPE_NO_BOLT var/bolt_type = BOLT_TYPE_STANDARD ///Used for locking bolt and open bolt guns. Set a bit differently for the two but prevents firing when true for both. var/bolt_locked = FALSE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 7cc9b1c6ebb4..c3edaf6e7cd1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -1,7 +1,3 @@ - -#define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. -#define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. - /obj/projectile name = "projectile" icon = 'icons/obj/projectiles.dmi' diff --git a/shiptest.dme b/shiptest.dme index c16cbd645b83..73cfeec5e906 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -65,6 +65,7 @@ #include "code\__DEFINES\food.dm" #include "code\__DEFINES\footsteps.dm" #include "code\__DEFINES\forensics.dm" +#include "code\__DEFINES\gun.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\icon_smoothing.dm" #include "code\__DEFINES\important_recursive_contents.dm" From 13999e2b4c99323aff522bac0502eee6e7e1ce42 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Thu, 18 Apr 2024 10:37:09 -0500 Subject: [PATCH 75/89] e --- code/__DEFINES/guns.dm | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 code/__DEFINES/guns.dm diff --git a/code/__DEFINES/guns.dm b/code/__DEFINES/guns.dm deleted file mode 100644 index 0256ed11bedd..000000000000 --- a/code/__DEFINES/guns.dm +++ /dev/null @@ -1,16 +0,0 @@ -//weapon manufacturers -#define MANUFACTURER_NONE null -#define MANUFACTURER_SHARPLITE "the Sharplite Defense logo" -#define MANUFACTURER_SHARPLITE_NEW "the Nanotrasen-Sharplite logo" -#define MANUFACTURER_HUNTERSPRIDE "the Hunter's Pride Arms and Ammunition logo" -#define MANUFACTURER_SOLARARMORIES "the Solarbundswaffenkammer emblem" -#define MANUFACTURER_SCARBOROUGH "the Scarborough Arms logo" -#define MANUFACTURER_EOEHOMA "the Eoehoma Firearms emblem" -#define MANUFACTURER_NANOTRASEN_OLD "an outdated Nanotrasen logo" -#define MANUFACTURER_NANOTRASEN "the Nanotrasen logo" -#define MANUFACTURER_BRAZIL "a green flag with a blue circle and a yellow diamond around it" -#define MANUFACTURER_INTEQ "an orange crest with the letters 'IRMG'" -#define MANUFACTURER_MINUTEMAN "the Lanchester City Firearms Plant logo" -#define MANUFACTURER_DONKCO "the Donk! Co. logo" -#define MANUFACTURER_PGF "the Etherbor Industries emblem" -#define MANUFACTURER_IMPORT "Lanchester Import Co." From 4d6244ff6246f093f1ad54bf84d98f5472d3ff25 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Thu, 18 Apr 2024 13:25:40 -0500 Subject: [PATCH 76/89] Update beach_ancient_ruin.dmm Signed-off-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> --- _maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm | 1 - 1 file changed, 1 deletion(-) diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index be52f6a67f46..c14b9dd474a1 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -375,7 +375,6 @@ /obj/item/gun/energy/lasercannon{ pixel_y = 5; }, -/obj/item/gun/energy/lasercannon, /obj/effect/turf_decal/industrial/hatch, /turf/open/floor/plasteel/mono, /area/ruin/beach/complex) From de2336dcfafb6a331154d3e13c9a29717dad842e Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Thu, 18 Apr 2024 13:26:58 -0500 Subject: [PATCH 77/89] nvm im dum Signed-off-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> --- _maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm | 1 + 1 file changed, 1 insertion(+) diff --git a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index c14b9dd474a1..be52f6a67f46 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -375,6 +375,7 @@ /obj/item/gun/energy/lasercannon{ pixel_y = 5; }, +/obj/item/gun/energy/lasercannon, /obj/effect/turf_decal/industrial/hatch, /turf/open/floor/plasteel/mono, /area/ruin/beach/complex) From 1eb41c3f4d4460584861007b4cf720a6b2d30655 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Thu, 18 Apr 2024 13:28:28 -0500 Subject: [PATCH 78/89] Delete _maps/shuttles/syndicate/syndicate_luxembourg.dmm oops some how readded it Signed-off-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> --- .../syndicate/syndicate_luxembourg.dmm | 3314 ----------------- 1 file changed, 3314 deletions(-) delete mode 100644 _maps/shuttles/syndicate/syndicate_luxembourg.dmm diff --git a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm b/_maps/shuttles/syndicate/syndicate_luxembourg.dmm deleted file mode 100644 index cff4c84386e0..000000000000 --- a/_maps/shuttles/syndicate/syndicate_luxembourg.dmm +++ /dev/null @@ -1,3314 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aB" = ( -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"aD" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"aK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom/directional/south, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_engine"; - location = "lux_crew" - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"bi" = ( -/obj/machinery/button/door{ - id = "syndiefuck"; - name = "Loading Shutters Control"; - pixel_x = -25; - pixel_y = -7; - dir = 4 - }, -/obj/machinery/button/door{ - id = "warehouse"; - name = "Warehouse Control"; - pixel_x = -25; - pixel_y = 5; - dir = 4 - }, -/obj/machinery/button/door{ - id = "cargodoors"; - name = "Cargo Bay Shutter Control"; - pixel_x = -35; - pixel_y = 5; - dir = 4 - }, -/obj/machinery/button/door{ - id = "externalshutters"; - name = "External Shutters Control"; - pixel_x = -35; - pixel_y = -7; - dir = 4 - }, -/obj/machinery/computer/cargo/express{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"bp" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/blue/half{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"bt" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/binary/volume_pump{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk/white, -/turf/open/floor/plating, -/area/ship/engineering) -"bB" = ( -/obj/structure/rack, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 9 - }, -/obj/item/gps/mining, -/obj/item/paicard, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"bN" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/displaycase, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"cb" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"cq" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/computer/mech_bay_power_console{ - dir = 8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"cs" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"cB" = ( -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/closet/wall{ - dir = 8; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = 28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"cI" = ( -/obj/structure/rack, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"dp" = ( -/obj/structure/displaycase, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"dA" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"dC" = ( -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/obj/machinery/space_heater, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"dH" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/displaycase, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"dL" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"dM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"eD" = ( -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, -/obj/structure/table, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"eF" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = 12 - }, -/obj/structure/mirror{ - pixel_x = 24 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/medical{ - pixel_x = -5; - pixel_y = -4 - }, -/obj/structure/closet/wall/white/med{ - dir = 1; - name = "medicine locker"; - pixel_y = -28 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"eL" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/structure/catwalk/over/plated_catwalk/white, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"eX" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"fn" = ( -/obj/machinery/light/directional/east, -/obj/structure/table, -/obj/machinery/microwave, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"fo" = ( -/obj/item/card/emag, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/storage/backpack/duffelbag/syndie{ - name = "manager's duffel bag" - }, -/obj/item/clothing/under/syndicate/donk/qm, -/obj/item/clothing/suit/hazardvest/donk/qm, -/obj/item/melee/classic_baton/telescopic, -/obj/item/radio/headset/syndicate/alt/leader, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/structure/closet/secure_closet/wall{ - dir = 4; - icon_state = "solgov_wall"; - name = "manager's locker"; - pixel_x = -28; - req_access_txt = "41" - }, -/obj/machinery/light_switch{ - pixel_y = 22 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"fv" = ( -/obj/machinery/selling_pad, -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"fy" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/opaque/brown/filled/warning, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"fB" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"ga" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "cargodoors" - }, -/obj/item/radio/intercom/directional/north{ - pixel_y = 22 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"gf" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"gj" = ( -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/structure/closet/secure_closet/engineering_welding, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"gC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"hd" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"hi" = ( -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"hm" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"hs" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/cargo) -"hu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/item/clothing/suit/space/syndicate, -/obj/item/clothing/head/helmet/space/syndicate, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"hX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"if" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/machinery/computer/cryopod/directional/south, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/dorm) -"it" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/shieldwallgen/atmos{ - anchored = 1; - dir = 1; - id = "luxembourg_cargo"; - locked = 1 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "syndiefuck" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"iF" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/item/vending_refill/engineering, -/obj/item/vending_refill/engineering, -/obj/item/vending_refill/engivend, -/obj/item/vending_refill/engivend, -/obj/item/vending_refill/hydronutrients, -/obj/item/vending_refill/hydronutrients, -/obj/item/vending_refill/boozeomat, -/obj/item/vending_refill/boozeomat, -/obj/item/vending_refill/medical, -/obj/item/vending_refill/medical, -/obj/item/vending_refill/cigarette, -/obj/item/vending_refill/cigarette, -/obj/item/vending_refill/snack, -/obj/item/vending_refill/snack, -/obj/item/vending_refill/sovietsoda, -/obj/item/vending_refill/cola, -/obj/item/vending_refill/cola, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"iO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"iR" = ( -/obj/machinery/power/shuttle/engine/fueled/plasma{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/open/floor/plating, -/area/ship/engineering) -"iZ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/structure/catwalk/over/plated_catwalk/white, -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"jr" = ( -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"jv" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"jH" = ( -/obj/structure/table, -/obj/item/radio/intercom/wideband/table{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = 22 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"jK" = ( -/obj/machinery/air_sensor/atmos/air_tank, -/turf/open/floor/engine/air, -/area/ship/engineering) -"ke" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"ks" = ( -/obj/structure/closet/crate, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/obj/item/gun_voucher, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"kE" = ( -/obj/machinery/chem_master/condimaster, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"kI" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"kZ" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/hallway/central) -"lb" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"lg" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"lt" = ( -/obj/machinery/atmospherics/components/binary/volume_pump, -/obj/structure/catwalk/over/plated_catwalk/white, -/turf/open/floor/plating, -/area/ship/engineering) -"lK" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"lQ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/poddoor/shutters{ - id = "warehouse" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/storage) -"lW" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 1 - }, -/obj/structure/catwalk/over/plated_catwalk/white, -/turf/open/floor/plating, -/area/ship/engineering) -"mi" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/crew/dorm) -"mm" = ( -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/railing, -/obj/structure/closet/wall{ - dir = 4; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = -28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"mE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/effect/turf_decal/kfp_small/left{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"mK" = ( -/obj/machinery/light/directional/south, -/obj/machinery/computer/atmos_control/tank/air_tank{ - dir = 4 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"na" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering) -"nz" = ( -/obj/structure/sign/donk{ - pixel_x = -32 - }, -/obj/structure/rack, -/obj/item/radio/headset, -/obj/item/radio/headset, -/obj/item/radio/headset, -/obj/item/radio/headset, -/obj/item/radio/headset, -/obj/item/radio/headset, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"ow" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/crew/canteen) -"pd" = ( -/obj/machinery/light/directional/east, -/obj/structure/closet/crate/large{ - name = "Donk! Co. Powerloader In a Box" - }, -/obj/effect/decal/cleanable/oil, -/obj/effect/turf_decal/rechargefloor, -/obj/mecha/working/ripley/cargo{ - name = "\improper Donk! Co. Cargo Loading Device" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"pt" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/engineering) -"pJ" = ( -/obj/machinery/firealarm/directional/south, -/obj/machinery/autolathe, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"pL" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"pR" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"qe" = ( -/obj/effect/turf_decal/atmos/air, -/turf/open/floor/engine/air, -/area/ship/engineering) -"qf" = ( -/obj/structure/table, -/obj/machinery/door/firedoor, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"qh" = ( -/obj/machinery/airalarm/directional/west, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 8 - }, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_shopfloor"; - location = "lux_lobby" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"ql" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"qO" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"qP" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"qR" = ( -/turf/open/floor/engine/air, -/area/ship/engineering) -"qV" = ( -/obj/item/toy/sword, -/obj/structure/closet/crate/wooden/toy, -/obj/item/ammo_box/magazine/toy/smgm45/riot, -/obj/item/ammo_box/magazine/toy/smgm45/riot, -/obj/item/gun/ballistic/automatic/smg/c20r/toy/riot, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/obj/item/soap/syndie, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"rh" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/opaque/blue/filled/warning{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"rm" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"rq" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/window{ - dir = 8; - name = "Canteen" - }, -/obj/effect/turf_decal/siding/red, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"rG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"rU" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/opaque/orange/filled/warning, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"rV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced/spawner/east, -/turf/open/floor/engine/air, -/area/ship/engineering) -"sh" = ( -/obj/machinery/power/shuttle/engine/fueled/plasma{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"sk" = ( -/obj/effect/turf_decal/atmos/plasma, -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"sF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"sI" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/effect/turf_decal/industrial/traffic{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"sV" = ( -/mob/living/simple_animal/bot/mulebot{ - bot_name = "\proper Christine"; - desc = "A Multiple Utility Load Effector bot. This one seems oddly menacing..."; - id = "Christine"; - name = "\proper Christine" - }, -/obj/effect/turf_decal/corner/opaque/brown/bordercee, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = null; - location = "mulestation" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"tx" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/item/stack/sheet/mineral/plasma/five, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"tF" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/blue, -/obj/structure/curtain/bounty, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"tH" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/siding/red{ - dir = 10 - }, -/obj/effect/turf_decal/corner/opaque/neutral/bordercorner{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"tO" = ( -/obj/effect/turf_decal/siding/blue/corner, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"tU" = ( -/obj/machinery/camera{ - dir = 10 - }, -/turf/open/floor/plating, -/area/template_noop) -"tV" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/button/door{ - id = "cargodoors"; - pixel_x = 8; - pixel_y = -24 - }, -/obj/machinery/door/window{ - dir = 8; - name = "Cargo Bay" - }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "cargodoors" - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"ug" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/eastright, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "cargodoors" - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"ul" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/port_gen/pacman, -/obj/item/stack/sheet/mineral/plasma/five, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"uo" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"uB" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/food/drinks/shaker{ - pixel_x = 10 - }, -/obj/item/kitchen/knife{ - pixel_x = -8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"uK" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner/west, -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"uX" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/item/clothing/suit/space/syndicate/green, -/obj/item/clothing/head/helmet/space/syndicate/green, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"vb" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/poddoor/shutters{ - id = "warehouse" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/storage) -"vf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"vp" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering) -"vw" = ( -/obj/machinery/camera{ - dir = 1 - }, -/turf/open/floor/plating, -/area/template_noop) -"vz" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"vT" = ( -/obj/structure/closet/crate, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/obj/item/grenade/c4, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"wd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"wN" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"wP" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"wT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced/spawner/west, -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"xa" = ( -/obj/effect/turf_decal/siding/blue, -/obj/effect/turf_decal/corner/opaque/blue/half{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"xc" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"xt" = ( -/obj/machinery/light/directional/east, -/obj/item/clothing/head/HoS/beret/syndicate, -/obj/item/radio/headset/syndicate/alt, -/obj/item/gun/ballistic/shotgun/doublebarrel, -/obj/item/clothing/under/rank/civilian/bartender, -/obj/structure/closet/secure_closet/bar{ - req_access = null; - req_one_access_txt = list(25,41) - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"xw" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/clothing{ - default_price = 0; - extra_price = 0 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"yd" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/beer, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"yf" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 10 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"yh" = ( -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = 5 - }, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/brown/bordercorner{ - dir = 1 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"ym" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"yQ" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering) -"yX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue/corner, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 - }, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_kitchen"; - location = "lux_shopfloor" - }, -/obj/machinery/holopad/emergency/cargo, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"zc" = ( -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"zW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Ai" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/airlock{ - name = "Dormitory" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/dorm) -"AE" = ( -/obj/machinery/door/airlock/external, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/open/floor/plating, -/area/ship/engineering) -"AL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Bt" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/crew/canteen) -"Bw" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/cargo) -"BM" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/blue, -/obj/structure/window/reinforced/tinted/frosted, -/obj/structure/curtain/bounty, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -19; - pixel_y = 12 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"BX" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/cryopod{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/dorm) -"BZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"CC" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"CI" = ( -/obj/effect/turf_decal/siding/blue/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 6 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"CM" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"CT" = ( -/obj/machinery/computer/atmos_control/tank/toxin_tank{ - dir = 8 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"CV" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/red, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"CW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/item/stack/circuit_stack/full, -/obj/item/stack/circuit_stack/full, -/obj/item/stack/circuit_stack/full, -/obj/item/stack/circuit_stack/full, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Da" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock{ - name = "Canteen" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/canteen) -"Dq" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_crew"; - location = "lux_kitchen" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Dw" = ( -/obj/structure/table, -/obj/structure/window/plasma/reinforced, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"DA" = ( -/obj/effect/turf_decal/siding/red, -/obj/machinery/firealarm/directional/south, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 6; - pixel_y = -24 - }, -/obj/machinery/airalarm/directional/east, -/obj/machinery/vending/dinnerware, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"DE" = ( -/obj/structure/rack, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"DG" = ( -/obj/machinery/light/directional/south, -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"DJ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/effect/turf_decal/number/five{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"DW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/chair/plastic, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Ee" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Ej" = ( -/obj/machinery/modular_computer/console/preset/command{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"Er" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering) -"EG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/opaque/brown/filled/warning{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"EO" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/crew/dorm) -"EW" = ( -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"EZ" = ( -/obj/item/radio/headset/syndicate/alt, -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/closet/wall{ - dir = 4; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = -28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"Fj" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/item/paper{ - desc = "A piece of paper depicting a extremely pissed up upper manager"; - default_raw_text = "YOU DAMNNED FOOLS! YOU ARENT SUPPOSED TO USE YOUR STOCK, YOU'RE SUPPOSED TO SELL THEM!! WE AREN'T WASTING MY MONEY ARE WE!?! NOW GET BACK TO WORK!!!"; - name = "angry letter from upper management" - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"Fq" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/machinery/holopad/emergency/bar, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"FV" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"Ga" = ( -/obj/machinery/computer/helm, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"Gr" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"GD" = ( -/obj/docking_port/stationary{ - width = 30; - height = 15; - dir = 8; - dwidth = 15 - }, -/turf/template_noop, -/area/template_noop) -"GG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"Hx" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/crew/dorm) -"HG" = ( -/obj/machinery/power/shieldwallgen/atmos{ - anchored = 1; - id = "luxembourg_cargo"; - locked = 1 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "syndiefuck" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"HK" = ( -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"HZ" = ( -/obj/structure/table, -/obj/item/reagent_containers/glass/rag, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Id" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Ij" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/docking_port/mobile{ - can_move_docking_ports = 1; - dir = 2; - launch_status = 0 - }, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/hallway/central) -"Ip" = ( -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/railing, -/obj/structure/closet/wall{ - dir = 8; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = 28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"Iv" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"IT" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/effect/turf_decal/siding/blue, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 20; - pixel_y = 11 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Je" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Ji" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/blue, -/obj/structure/curtain/bounty, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Jq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Jr" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/obj/effect/turf_decal/siding/blue/corner, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"JO" = ( -/obj/structure/closet/crate/science, -/obj/item/circuitboard/machine/chem_dispenser/drinks, -/obj/item/circuitboard/machine/chem_dispenser/drinks, -/obj/item/circuitboard/machine/chem_dispenser/drinks, -/obj/item/circuitboard/machine/chem_dispenser/drinks/beer, -/obj/item/circuitboard/machine/chem_dispenser/drinks/beer, -/obj/item/circuitboard/machine/chem_dispenser/drinks/beer, -/obj/item/circuitboard/machine/deep_fryer, -/obj/item/circuitboard/machine/deep_fryer, -/obj/item/circuitboard/machine/deep_fryer, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/mechfab, -/obj/item/circuitboard/machine/ore_redemption, -/obj/item/circuitboard/machine/ore_redemption, -/obj/item/circuitboard/machine/ore_redemption, -/obj/item/circuitboard/machine/microwave, -/obj/item/circuitboard/machine/microwave, -/obj/item/circuitboard/machine/microwave, -/obj/machinery/firealarm/directional/east, -/obj/machinery/light_switch{ - pixel_x = 6; - pixel_y = 24 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"JT" = ( -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "syndiefuck" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"JU" = ( -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 6 - }, -/obj/machinery/suit_storage_unit/inherit/industrial, -/obj/item/clothing/suit/space/syndicate/blue, -/obj/item/clothing/head/helmet/space/syndicate/blue, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"JV" = ( -/obj/effect/turf_decal/corner/opaque/brown/bordercorner{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Ka" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/storage) -"Kg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/shower{ - dir = 4 - }, -/obj/structure/window/reinforced/tinted/frosted, -/obj/structure/curtain, -/obj/effect/turf_decal/steeldecal/steel_decals10{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_y = 23; - pixel_x = 11 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"Kk" = ( -/obj/machinery/air_sensor/atmos/toxin_tank, -/turf/open/floor/engine/plasma, -/area/ship/engineering) -"Ko" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_lobby"; - location = "lux_warehouse" - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"KH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/autodrobe/all_access{ - default_price = 0; - extra_price = 0 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"KX" = ( -/obj/structure/closet/crate, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/obj/item/construction/rcd/combat, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"KZ" = ( -/obj/effect/turf_decal/siding/red, -/obj/structure/closet/secure_closet/freezer/wall{ - dir = 1; - name = "refrigerator"; - pixel_y = -32 - }, -/obj/item/storage/box/donkpockets/donkpocketteriyaki, -/obj/item/storage/box/donkpockets/donkpocketteriyaki, -/obj/item/storage/box/donkpockets/donkpocketteriyaki, -/obj/item/storage/box/donkpockets/donkpocketteriyaki, -/obj/item/storage/box/donkpockets/donkpocketspicy, -/obj/item/storage/box/donkpockets/donkpocketspicy, -/obj/item/storage/box/donkpockets/donkpocketspicy, -/obj/item/storage/box/donkpockets/donkpocketspicy, -/obj/item/storage/box/donkpockets/donkpockethonk, -/obj/item/storage/box/donkpockets/donkpockethonk, -/obj/item/storage/box/donkpockets/donkpockethonk, -/obj/item/storage/box/donkpockets/donkpockethonk, -/obj/item/storage/box/donkpockets, -/obj/item/storage/box/donkpockets, -/obj/item/storage/box/donkpockets, -/obj/item/storage/box/donkpockets, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"La" = ( -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "cargodoors"; - pixel_y = 25 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Lr" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/paper{ - desc = "A piece of paper depicting a extremely pissed up upper manager"; - default_raw_text = "YOU ARENT SUPPOSED TO BE MINING, HEAR ME!?!! YOU'RE SUPPOSED TO BE SELLING SHIT TO THE CONSUMERS YOU HEAR!! AS PUNISHMENT FOR THE LAST SHIFT, I HAVE REMOVED ALLL OF YOUR MINING TOOLS!! NOW GET BACK TO WORK!!"; - name = "angry letter from upper management" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Lu" = ( -/obj/structure/chair/plastic{ - dir = 1 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"LU" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{ - dir = 4 - }, -/obj/structure/window/plasma/reinforced/spawner/east, -/turf/open/floor/engine/air, -/area/ship/engineering) -"LV" = ( -/obj/machinery/vending/boozeomat/all_access{ - default_price = 0; - extra_price = 0 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"LY" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/closet/crate, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/card/emag/limited, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"Mg" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Mi" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/structure/window/plasma/reinforced, -/obj/machinery/door/window/eastright, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "cargodoors" - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"Mj" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump, -/obj/machinery/advanced_airlock_controller{ - pixel_x = -25 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"Mx" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 10; - pixel_y = -21 - }, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/trimline/opaque/blue/filled/warning, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Mz" = ( -/obj/structure/tank_dispenser/oxygen, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 9 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"MT" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/cargo) -"MU" = ( -/obj/machinery/door/window/brigdoor{ - name = "Bridge"; - req_access_txt = "41" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"Nr" = ( -/turf/template_noop, -/area/template_noop) -"NH" = ( -/obj/effect/turf_decal/siding/blue/corner, -/obj/effect/turf_decal/corner/opaque/blue/half{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"NJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"NQ" = ( -/obj/machinery/light/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ - pixel_x = 6 - }, -/obj/item/lighter/greyscale{ - pixel_x = -3; - pixel_y = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"On" = ( -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/item/storage/toolbox/syndicate, -/obj/structure/closet/crate, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"Op" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/crew/canteen) -"Oq" = ( -/obj/structure/table, -/obj/item/toy/cards/deck/syndicate, -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"Oz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"OR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/effect/decal/cleanable/oil, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"OY" = ( -/obj/structure/closet/crate/trashcart, -/obj/effect/spawner/lootdrop/maintenance/eight, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 9 - }, -/obj/machinery/button/shieldwallgen{ - id = "luxembourg_cargo"; - pixel_x = -10; - pixel_y = 25 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/button/door{ - id = "syndiefuck"; - pixel_x = -20; - pixel_y = 26 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Pb" = ( -/obj/effect/decal/cleanable/dirt, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/crew/dorm) -"Ph" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/effect/turf_decal/number/zero{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"Ps" = ( -/obj/machinery/light/directional/south, -/obj/item/banner/cargo, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 10 - }, -/obj/machinery/button/shieldwallgen{ - dir = 1; - id = "luxembourg_cargo"; - pixel_x = -10; - pixel_y = -25 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/button/door{ - dir = 1; - id = "syndiefuck"; - pixel_x = -20; - pixel_y = -26 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"PO" = ( -/obj/structure/sign/poster/contraband/syndicate_recruitment{ - pixel_x = 4; - pixel_y = -30 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/opaque/blue/filled/warning, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"PW" = ( -/obj/structure/sign/donk{ - pixel_x = -32 - }, -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"QG" = ( -/obj/machinery/light/directional/west, -/obj/machinery/vending/toyliberationstation, -/obj/structure/window/plasma/reinforced, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"QQ" = ( -/obj/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"QT" = ( -/obj/machinery/light/directional/east, -/obj/structure/window/plasma/reinforced, -/obj/machinery/computer/selling_pad_control{ - dir = 8 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"QU" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/button/door{ - id = "warehouse"; - pixel_x = 24; - pixel_y = 21 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"Rk" = ( -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"Ro" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/catwalk/over/plated_catwalk/white, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Rp" = ( -/turf/open/floor/carpet/red_gold, -/area/ship/crew/dorm) -"RH" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/cargo) -"RM" = ( -/obj/effect/turf_decal/trimline/opaque/brown/filled/warning, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Sn" = ( -/obj/effect/turf_decal/siding/blue, -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"SS" = ( -/obj/item/radio/headset/syndicate/alt, -/obj/item/toy/figure/cargotech, -/obj/item/clothing/suit/hooded/wintercoat/cargo, -/obj/item/stack/sheet/cardboard/fifty, -/obj/item/hand_labeler, -/obj/item/hand_labeler_refill, -/obj/item/clothing/under/syndicate/donk, -/obj/item/clothing/suit/hazardvest/donk, -/obj/item/stack/wrapping_paper, -/obj/item/stack/packageWrap, -/obj/structure/closet/wall{ - dir = 4; - icon_door = "orange_wall"; - name = "employee closet"; - pixel_x = -28 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"Tj" = ( -/obj/effect/turf_decal/siding/red, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 11; - pixel_y = -16 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"Ty" = ( -/obj/machinery/light/directional/east, -/obj/structure/closet/crate/large, -/obj/item/mecha_parts/mecha_equipment/mining_scanner, -/mob/living/simple_animal/bot/secbot/grievous/toy, -/obj/effect/decal/cleanable/blood/old, -/obj/item/hand_labeler_refill, -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, -/obj/item/mecha_parts/mecha_equipment/rcd, -/obj/item/mecha_parts/mecha_equipment/cable_layer, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"TB" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"TJ" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "externalshutters" - }, -/turf/open/floor/plating, -/area/ship/storage) -"TP" = ( -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"TY" = ( -/obj/effect/turf_decal/corner/opaque/brown/bordercorner{ - dir = 1 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Ud" = ( -/obj/effect/turf_decal/siding/blue, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Uk" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/storage) -"Uo" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/binary/volume_pump, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"Uu" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"Uw" = ( -/obj/structure/toilet{ - dir = 4 - }, -/obj/structure/curtain, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"UE" = ( -/turf/open/floor/plating, -/area/ship/engineering) -"UI" = ( -/obj/effect/turf_decal/corner/opaque/neutral/mono, -/turf/open/floor/plasteel/mono/dark, -/area/ship/crew/canteen) -"UO" = ( -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering) -"Va" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"Vb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/opaque/blue/filled/warning, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Vi" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/industrial/traffic{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"Vn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/brown/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"Vs" = ( -/obj/machinery/atmospherics/components/binary/volume_pump, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"VG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/effect/turf_decal/number/two{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering) -"VR" = ( -/turf/closed/wall/r_wall/syndicate/nodiagonal, -/area/ship/engineering) -"VS" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/plastitaniumglass{ - amount = 20 - }, -/obj/item/stack/sheet/mineral/plastitanium{ - amount = 20 - }, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/decal/cleanable/dirt, -/obj/item/hand_labeler_refill, -/obj/item/stack/sheet/mineral/wood/fifty, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"Wh" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/effect/turf_decal/trimline/opaque/orange/filled/warning, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"Wt" = ( -/obj/machinery/smartfridge/bloodbank/preloaded, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/storage) -"WB" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"WE" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/hallway/central) -"WQ" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/suit_storage_unit/inherit{ - req_access_txt = "41" - }, -/obj/item/clothing/suit/space/syndicate, -/obj/item/clothing/head/helmet/space/syndicate, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) -"WU" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Xf" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=lux_warehouse"; - location = "lux_engine" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Xw" = ( -/obj/machinery/washing_machine, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plasteel/patterned, -/area/ship/crew/dorm) -"XM" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"XS" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/machinery/door/poddoor/shutters{ - id = "externalshutters" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Yd" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/catwalk/over/plated_catwalk/white, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/ship/engineering) -"Yq" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 8 - }, -/obj/effect/turf_decal/siding/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"YE" = ( -/obj/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/item/radio/intercom/directional/east{ - pixel_y = 37 - }, -/turf/open/floor/carpet/red_gold, -/area/ship/hallway/central) -"YI" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/crew/canteen) -"YK" = ( -/obj/machinery/airalarm/directional/west, -/obj/item/clothing/head/collectable/chef, -/obj/item/clothing/head/collectable/paper, -/obj/item/clothing/head/collectable/tophat, -/obj/item/clothing/head/collectable/captain, -/obj/item/clothing/head/collectable/beret, -/obj/item/clothing/head/collectable/welding, -/obj/item/clothing/head/collectable/flatcap, -/obj/item/clothing/head/collectable/pirate, -/obj/item/clothing/head/collectable/kitty, -/obj/item/clothing/head/collectable/rabbitears, -/obj/item/clothing/head/collectable/wizard, -/obj/item/clothing/head/collectable/hardhat, -/obj/item/clothing/head/collectable/HoS, -/obj/item/clothing/head/collectable/HoP, -/obj/item/clothing/head/collectable/thunderdome, -/obj/item/clothing/head/collectable/swat, -/obj/item/clothing/head/collectable/slime, -/obj/item/clothing/head/collectable/police, -/obj/item/clothing/head/collectable/xenom, -/obj/item/clothing/head/collectable/petehat, -/obj/structure/closet/crate, -/turf/open/floor/plasteel/mono/dark, -/area/ship/storage) -"YL" = ( -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/effect/turf_decal/siding/red{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/neutral/border{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/hallway/central) -"YO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/storage) -"YZ" = ( -/obj/structure/closet/secure{ - icon_state = "eng_secure"; - name = "GEC Engineer's locker" - }, -/obj/item/clothing/gloves/color/yellow, -/obj/item/pipe_dispenser, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/suit/toggle/hazard, -/obj/item/clothing/head/beret/eng/hazard, -/obj/item/clothing/head/beret/eng, -/obj/item/holosign_creator/engineering, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/item/clothing/under/syndicate/gec, -/obj/item/clothing/under/syndicate/gec, -/obj/item/stack/tape/industrial/pro, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - pixel_y = 23; - pixel_x = 11 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"Zm" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 - }, -/obj/structure/catwalk/over/plated_catwalk, -/turf/open/floor/plating, -/area/ship/engineering) -"ZV" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 5 - }, -/obj/structure/catwalk/over/plated_catwalk, -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering) - -(1,1,1) = {" -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -GD -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -"} -(2,1,1) = {" -Nr -Nr -Nr -Nr -Nr -Nr -hs -HG -JT -JT -JT -it -Ka -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -"} -(3,1,1) = {" -Nr -Nr -Nr -Nr -Bw -MT -hs -OY -hX -hX -fB -Ps -Ka -TJ -TJ -Uk -Nr -Nr -Nr -Nr -pt -VR -pt -Nr -Nr -Nr -Nr -"} -(4,1,1) = {" -Nr -Nr -Nr -Bw -hs -Mz -qh -JV -AL -hi -CC -RM -vb -VS -qV -Wt -TJ -Uk -Nr -Uk -VR -qe -VR -pt -Nr -Nr -Nr -"} -(5,1,1) = {" -Nr -Nr -hs -hs -bB -TY -CC -OR -gf -Je -wP -fy -lQ -QU -kI -iF -vT -Ka -TJ -Ka -VR -qR -jK -VR -Nr -Nr -Nr -"} -(6,1,1) = {" -Nr -Nr -RH -sV -yh -BZ -Vn -Ee -EG -hu -uX -JU -Ka -JO -iO -Fj -YO -YK -ks -On -vp -rV -LU -VR -pt -Nr -Nr -"} -(7,1,1) = {" -Nr -Nr -hs -hs -hs -ga -ug -Mi -tV -hs -hs -hs -Ka -Ka -Ty -Ko -Uu -lg -hm -rU -Ro -uo -ZV -mK -vp -pt -Nr -"} -(8,1,1) = {" -Nr -Nr -Nr -WE -WE -La -aB -NJ -Ud -TP -Rk -PW -cI -Ka -Ka -KX -LY -cq -pd -ke -vp -dC -GG -Uo -XS -iR -hd -"} -(9,1,1) = {" -tU -WE -kZ -WE -QG -NH -wd -WB -tO -Iv -Iv -Iv -yf -DG -Ka -Ka -Ka -Ka -Ka -Ka -vp -gj -Zm -Vs -vz -sh -Nr -"} -(10,1,1) = {" -WE -WE -Ej -bi -QQ -xa -dp -bV -Sn -TP -TP -jv -pL -Mx -vp -fo -SS -EZ -mm -tx -pR -XM -ql -pJ -vp -vp -vp -"} -(11,1,1) = {" -Ij -Ga -dA -jr -MU -rh -TB -WU -yX -gC -gC -Yq -Jq -Vb -dL -VG -Ph -DJ -mE -yQ -Xf -CM -Va -dM -AE -Mj -qP -"} -(12,1,1) = {" -WE -WE -jH -fv -YE -xa -dp -dH -Sn -TP -TP -DE -Jr -PO -vp -WQ -xt -cB -Ip -ul -pR -lb -Gr -eD -na -UO -Er -"} -(13,1,1) = {" -vw -WE -kZ -WE -QT -bp -Oz -vf -lK -ym -cs -eX -CI -DG -EO -EO -EO -EO -EO -EO -vp -CW -lW -lt -vz -sh -Nr -"} -(14,1,1) = {" -Nr -Nr -Nr -WE -WE -YL -YL -qO -xc -tH -IT -HK -zc -EO -EO -BX -if -EO -Kg -Uw -vp -YZ -Yd -lt -vz -sh -UE -"} -(15,1,1) = {" -Nr -Nr -YI -YI -YI -qf -HZ -Lr -Dw -rq -YI -EO -EO -EO -nz -Vi -sI -Ai -FV -Wh -eL -iZ -bt -CT -vp -pt -Nr -"} -(16,1,1) = {" -Nr -Nr -ow -YI -yd -UI -UI -Fq -UI -Tj -YI -Ji -NQ -BM -zW -bN -aK -Pb -Xw -eF -vp -uK -wT -VR -pt -Nr -Nr -"} -(17,1,1) = {" -Nr -Nr -Bt -YI -wN -UI -rG -Mg -Dq -CV -Da -cb -aD -Id -rm -xw -KH -EO -mi -EO -VR -EW -Kk -VR -Nr -Nr -Nr -"} -(18,1,1) = {" -Nr -Nr -Nr -Bt -YI -uB -kE -sF -UI -KZ -YI -Rp -DW -Oq -Lu -EO -mi -Hx -Nr -Hx -VR -sk -VR -pt -Nr -Nr -Nr -"} -(19,1,1) = {" -Nr -Nr -Nr -Nr -Bt -Op -YI -fn -LV -DA -YI -tF -EO -mi -mi -Hx -Nr -Nr -Nr -Nr -pt -VR -pt -Nr -Nr -Nr -Nr -"} -(20,1,1) = {" -Nr -Nr -Nr -Nr -Nr -Nr -YI -YI -Op -YI -YI -EO -EO -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -Nr -"} From cc2405948d782bb508b8f8b3d3e0724b855ba7c4 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Thu, 18 Apr 2024 13:38:15 -0500 Subject: [PATCH 79/89] yea --- code/modules/projectiles/guns/ballistic/smg.dm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm index 5d9aa00788f6..23ec4247a5da 100644 --- a/code/modules/projectiles/guns/ballistic/smg.dm +++ b/code/modules/projectiles/guns/ballistic/smg.dm @@ -167,11 +167,6 @@ underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src) update_appearance() -/obj/item/gun/ballistic/automatic/smg/m90/Initialize() - . = ..() - underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src) - update_appearance() - /obj/item/gun/ballistic/automatic/smg/m90/afterattack(atom/target, mob/living/user, flag, params) if(select == 2) underbarrel.afterattack(target, user, flag, params) From 243c78f6c9414569dffb2c3506058d3d8a2a8f71 Mon Sep 17 00:00:00 2001 From: fallcon <falloutfalconplays@gmail.com> Date: Wed, 24 Apr 2024 09:10:35 -0500 Subject: [PATCH 80/89] retrigger checks From 9ba236141f774eea0aa0f0d0ba3fe4a2971fcb45 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Fri, 31 May 2024 08:16:36 -0500 Subject: [PATCH 81/89] readds tentacle --- .../hostile/megafauna/codename_claw.dm | 115 +++++++++++++++++- 1 file changed, 113 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm index 59ab203d4a85..a00e2c1be3f3 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm @@ -146,7 +146,7 @@ if(3) //only should fire duing phase 2 emp_pulse() if(4) - sting_attack(target) + tentacle(target) if(5) summon_creatures() if(6) @@ -161,7 +161,10 @@ swift_dash(target, dash_num_long, 15) else if((get_dist(src, target) >= 4) && ((get_dist(src, target)) <= 8) && !shouldnt_move) - if(prob(40)) + if(prob(60)) + tentacle(target) + return + else if(prob(40)) sting_attack(target) return else @@ -227,6 +230,15 @@ empulse(src, 2, 4) shouldnt_move = FALSE +/////TENTACLE +/mob/living/simple_animal/hostile/megafauna/claw/proc/tentacle(target) + shake_animation(2) + projectiletype = /obj/projectile/tentacle + projectilesound = 'sound/effects/splat.ogg' + Shoot(target) + +/////TENTACLE END + /////STING ATTACK /mob/living/simple_animal/hostile/megafauna/claw/proc/sting_attack(target) shouldnt_move = TRUE @@ -307,3 +319,102 @@ empulse(src, 5, 8) new /obj/effect/gibspawner/human(get_turf(src)) qdel(src) + +/obj/projectile/tentacle + name = "tentacle" + icon_state = "tentacle_end" + pass_flags = PASSTABLE + damage = 0 + damage_type = BRUTE + range = 8 + hitsound = 'sound/weapons/thudswoosh.ogg' + var/chain + +/obj/projectile/tentacle/fire(setAngle) + if(firer) + chain = firer.Beam(src, icon_state = "tentacle", emissive = FALSE) + ..() + +/obj/projectile/tentacle/proc/reset_throw(mob/living/carbon/human/H) + if(H.throw_mode) + H.throw_mode_off() //Don't annoy the changeling if he doesn't catch the item + +/obj/projectile/tentacle/proc/tentacle_grab(mob/living/carbon/human/H, mob/living/carbon/C) + if(H.Adjacent(C)) + if(H.get_active_held_item() && !H.get_inactive_held_item()) + H.swap_hand() + if(H.get_active_held_item()) + return + C.grabbedby(H) + C.grippedby(H, instant = TRUE) //instant aggro grab + +/obj/projectile/tentacle/proc/tentacle_stab(mob/living/carbon/human/H, mob/living/carbon/C) + if(H.Adjacent(C)) + for(var/obj/item/I in H.held_items) + if(I.get_sharpness()) + C.visible_message("<span class='danger'>[H] impales [C] with [H.p_their()] [I.name]!</span>", "<span class='userdanger'>[H] impales you with [H.p_their()] [I.name]!</span>") + C.apply_damage(I.force, BRUTE, BODY_ZONE_CHEST) + H.do_item_attack_animation(C, used_item = I) + H.add_mob_blood(C) + playsound(get_turf(H),I.hitsound,75,TRUE) + return + +/obj/projectile/tentacle/on_hit(atom/target, blocked = FALSE) + var/mob/living/carbon/human/H = firer + if(blocked >= 100) + return BULLET_ACT_BLOCK + if(isitem(target)) + var/obj/item/I = target + if(!I.anchored) + to_chat(firer, "<span class='notice'>You pull [I] towards yourself.</span>") + H.throw_mode_on() + I.throw_at(H, 10, 2) + . = BULLET_ACT_HIT + + else if(isliving(target)) + var/mob/living/L = target + if(!L.anchored && !L.throwing)//avoid double hits + if(iscarbon(L)) + var/mob/living/carbon/C = L + var/firer_intent = INTENT_HARM + var/mob/M = firer + if(istype(M)) + firer_intent = M.a_intent + switch(firer_intent) + if(INTENT_HELP) + C.visible_message("<span class='danger'>[L] is pulled by [H]'s tentacle!</span>","<span class='userdanger'>A tentacle grabs you and pulls you towards [H]!</span>") + C.throw_at(get_step_towards(H,C), 8, 2) + return BULLET_ACT_HIT + + if(INTENT_DISARM) + var/obj/item/I = C.get_active_held_item() + if(I) + if(C.dropItemToGround(I)) + C.visible_message("<span class='danger'>[I] is yanked off [C]'s hand by [src]!</span>","<span class='userdanger'>A tentacle pulls [I] away from you!</span>") + on_hit(I) //grab the item as if you had hit it directly with the tentacle + return BULLET_ACT_HIT + else + to_chat(firer, "<span class='warning'>You can't seem to pry [I] off [C]'s hands!</span>") + return BULLET_ACT_BLOCK + else + to_chat(firer, "<span class='danger'>[C] has nothing in hand to disarm!</span>") + return BULLET_ACT_HIT + + if(INTENT_GRAB) + C.visible_message("<span class='danger'>[L] is grabbed by [H]'s tentacle!</span>","<span class='userdanger'>A tentacle grabs you and pulls you towards [H]!</span>") + C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_grab), H, C)) + return BULLET_ACT_HIT + + if(INTENT_HARM) + C.visible_message("<span class='danger'>[L] is thrown towards [H] by a tentacle!</span>","<span class='userdanger'>A tentacle grabs you and throws you towards [H]!</span>") + C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_stab), H, C)) + return BULLET_ACT_HIT + else + L.visible_message("<span class='danger'>[L] is pulled by [H]'s tentacle!</span>","<span class='userdanger'>A tentacle grabs you and pulls you towards [H]!</span>") + L.throw_at(get_step_towards(H,L), 8, 2) + . = BULLET_ACT_HIT + +/obj/projectile/tentacle/Destroy() + qdel(chain) + return ..() + From 86d3ab7abae15356fcc0529457e6d1c7a8a61560 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Fri, 31 May 2024 08:31:29 -0500 Subject: [PATCH 82/89] hm --- code/modules/projectiles/guns/ballistic/pistol.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 63e0d014c6bf..cc3d56cad686 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -85,6 +85,8 @@ icon_state = "phenex" item_state = "hp_phenex" + + /obj/item/gun/ballistic/automatic/pistol/deagle name = "\improper Desert Eagle" desc = "An oversized handgun chambered in .50 AE. A true hand cannon." From 32026542f1d60a27afd18b435935a0ea710f9812 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Fri, 31 May 2024 08:31:35 -0500 Subject: [PATCH 83/89] fix? --- code/modules/projectiles/guns/ballistic/pistol.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index cc3d56cad686..63e0d014c6bf 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -85,8 +85,6 @@ icon_state = "phenex" item_state = "hp_phenex" - - /obj/item/gun/ballistic/automatic/pistol/deagle name = "\improper Desert Eagle" desc = "An oversized handgun chambered in .50 AE. A true hand cannon." From 212a24b17393c5b22d43322e82520ba9aa69f49c Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Fri, 31 May 2024 08:32:26 -0500 Subject: [PATCH 84/89] there is NOT whitespace there --- code/modules/projectiles/guns/ballistic/pistol.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 63e0d014c6bf..e77c384ca464 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -84,7 +84,6 @@ desc = "A uniquely modified version of the Candor, famously created by Hunter's Pride. Named after the daemonic Phoenix of legend that the Ashen Huntsman had once slain, this hell-kissed weapon is more visually intimidating than its original counterpart, but mechanically acts the same. Chambered in .45." icon_state = "phenex" item_state = "hp_phenex" - /obj/item/gun/ballistic/automatic/pistol/deagle name = "\improper Desert Eagle" desc = "An oversized handgun chambered in .50 AE. A true hand cannon." From e84dc4e8a260cdf8651d9a25f48d275ade68bd7a Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Fri, 31 May 2024 08:33:12 -0500 Subject: [PATCH 85/89] oh im dumb wrong pr. --- code/modules/projectiles/guns/ballistic/pistol.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index e77c384ca464..63e0d014c6bf 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -84,6 +84,7 @@ desc = "A uniquely modified version of the Candor, famously created by Hunter's Pride. Named after the daemonic Phoenix of legend that the Ashen Huntsman had once slain, this hell-kissed weapon is more visually intimidating than its original counterpart, but mechanically acts the same. Chambered in .45." icon_state = "phenex" item_state = "hp_phenex" + /obj/item/gun/ballistic/automatic/pistol/deagle name = "\improper Desert Eagle" desc = "An oversized handgun chambered in .50 AE. A true hand cannon." From 2b91a5241ea6a2550f8f80aae58c577848bb226e Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Thu, 6 Jun 2024 21:34:35 -0500 Subject: [PATCH 86/89] stuff --- code/__DEFINES/gun.dm | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/gun.dm b/code/__DEFINES/gun.dm index c5936e6f2d0e..e281a9252019 100644 --- a/code/__DEFINES/gun.dm +++ b/code/__DEFINES/gun.dm @@ -5,13 +5,14 @@ #define WEAPON_MEDIUM 2 /// You must wield the gun to fire this gun #define WEAPON_HEAVY 3 +/// You must FULLY wield (wait the full wield delay) the gun to fire this gun +#define WEAPON_VERY_HEAVY 4 //Gun trigger guards #define TRIGGER_GUARD_ALLOW_ALL -1 #define TRIGGER_GUARD_NONE 0 #define TRIGGER_GUARD_NORMAL 1 //Gun bolt types -///Gun has a bolt, it stays closed while not cycling. The gun must be racked to have a bullet chambered when a mag is inserted. -/// Example: c20, shotguns, m90 +///The gun has a closed bolt, when resting it's closed, and must be racked to get a bullet from a magazine. see: Every Fucking Videogame Gun Ever #define BOLT_TYPE_STANDARD 1 ///Gun has a bolt, it is open when ready to fire. The gun can never have a chambered bullet with no magazine, but the bolt stays ready when a mag is removed. /// Example: Some SMGs, the L6 @@ -28,6 +29,18 @@ ///added recoil of sawn off guns #define SAWN_OFF_RECOIL 1 +//ammo box sprite defines +///ammo box will always use provided icon state +#define AMMO_BOX_ONE_SPRITE 0 +///ammo box will have a different state for each bullet; <icon_state>-<bullets left> +#define AMMO_BOX_PER_BULLET 1 +///ammo box will have a different state for full and empty; <icon_state>-max_ammo and <icon_state>-0 +#define AMMO_BOX_FULL_EMPTY 2 + +#define SUPPRESSED_NONE 0 +#define SUPPRESSED_QUIET 1 ///standard suppressed +#define SUPPRESSED_VERY 2 /// no message + //Autofire component /// Compatible firemode is in the gun. Wait until it's held in the user hands. #define AUTOFIRE_STAT_IDLE (1<<0) @@ -93,3 +106,9 @@ #define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. #define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. + +#define FIREMODE_SEMIAUTO "single" +#define FIREMODE_BURST "burst" +#define FIREMODE_FULLAUTO "auto" +#define FIREMODE_OTHER "other" +#define FIREMODE_OTHER_TWO "other2" From f7bfd3074ddc335a7d97a40b44e916ef502733d7 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Thu, 6 Jun 2024 21:38:23 -0500 Subject: [PATCH 87/89] renamed --- code/__DEFINES/{gun.dm => guns.dm} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename code/__DEFINES/{gun.dm => guns.dm} (100%) diff --git a/code/__DEFINES/gun.dm b/code/__DEFINES/guns.dm similarity index 100% rename from code/__DEFINES/gun.dm rename to code/__DEFINES/guns.dm From f2dff8ea3cf937d9d7f6914ad4b811cadc6aa1fb Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Thu, 6 Jun 2024 21:45:46 -0500 Subject: [PATCH 88/89] yea --- shiptest.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shiptest.dme b/shiptest.dme index 1dac66fb7b14..630c5d479767 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -66,7 +66,7 @@ #include "code\__DEFINES\food.dm" #include "code\__DEFINES\footsteps.dm" #include "code\__DEFINES\forensics.dm" -#include "code\__DEFINES\gun.dm" +#include "code\__DEFINES\guns.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\icon_smoothing.dm" #include "code\__DEFINES\important_recursive_contents.dm" From e70591dda57784ea34a9917f542ab4e4f6bf7714 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <falloutfalconplays@gmail.com> Date: Fri, 7 Jun 2024 00:45:44 -0500 Subject: [PATCH 89/89] oops double defined --- code/__DEFINES/guns.dm | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/code/__DEFINES/guns.dm b/code/__DEFINES/guns.dm index e281a9252019..dba7ce93afaf 100644 --- a/code/__DEFINES/guns.dm +++ b/code/__DEFINES/guns.dm @@ -54,10 +54,6 @@ #define COMSIG_AUTOFIRE_SHOT "autofire_shot" #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) -#define SUPPRESSED_NONE 0 -#define SUPPRESSED_QUIET 1 ///standard suppressed -#define SUPPRESSED_VERY 2 /// no message - #define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6 #define MANUFACTURER_NONE null @@ -92,18 +88,6 @@ #define REFLECT_NORMAL (1<<0) #define REFLECT_FAKEPROJECTILE (1<<1) -//ammo box sprite defines -///ammo box will always use provided icon state -#define AMMO_BOX_ONE_SPRITE 0 -///ammo box will have a different state for each bullet; <icon_state>-<bullets left> -#define AMMO_BOX_PER_BULLET 1 -///ammo box will have a different state for full and empty; <icon_state>-max_ammo and <icon_state>-0 -#define AMMO_BOX_FULL_EMPTY 2 - -//Projectile Reflect -#define REFLECT_NORMAL (1<<0) -#define REFLECT_FAKEPROJECTILE (1<<1) - #define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. #define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers.