From 0bf9553eca3e60932de32b20b6be8803f823c335 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 2 Aug 2020 19:13:39 +0100 Subject: [PATCH 01/16] hmm --- code/__DEFINES/traits.dm | 3 ++- code/modules/clothing/glasses/_glasses.dm | 18 ++++++++++++++++++ .../modules/projectiles/ammunition/_firing.dm | 5 +++++ icons/mob/clothing/eyes.dmi | Bin 13828 -> 14231 bytes icons/obj/clothing/glasses.dmi | Bin 14889 -> 14930 bytes 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 3e5b27d376..e8f584cf75 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -178,6 +178,7 @@ #define TRAIT_FREERUNNING "freerunning" #define TRAIT_SKITTISH "skittish" #define TRAIT_POOR_AIM "poor_aim" +#define TRAIT_INSANE_AIM "insane_aim" //they don't miss. they never miss. it was all part of their immaculate plan. #define TRAIT_PROSOPAGNOSIA "prosopagnosia" #define TRAIT_DRUNK_HEALING "drunk_healing" #define TRAIT_TAGGER "tagger" @@ -202,7 +203,7 @@ #define TRAIT_NO_ALCOHOL "alcohol_intolerance" #define TRAIT_MUTATION_STASIS "mutation_stasis" //Prevents processed genetics mutations from processing. #define TRAIT_FAST_PUMP "fast_pump" -#define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good.... +#define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good... // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 01effea6f2..c749ac53ed 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -149,6 +149,24 @@ icon_state = "eyepatch" item_state = "eyepatch" +/obj/item/clothing/glasses/eyepatch/syndicate + name = "cybernetic eyepatch" + desc = "An eyepatch used to enhance one's aim with guns." + icon_state = "syndicatepatch" + item_state = "syndicatepatch" + +/obj/item/clothing/glasses/eyepatch/syndicate/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, "SYNDICATE_EYEPATCH_NODROP") + +/obj/item/clothing/glasses/eyepatch/syndicate/equipped(mob/living/carbon/human/user, slot) + . = ..() + user.visible_message("The cybernetic eyepatch beeps as you place it over your eye. You shall never miss again.") + ADD_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") + +/obj/item/clothing/glasses/eyepatch/syndicate/dropped(mob/living/carbon/human/user) + REMOVE_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") + /obj/item/clothing/glasses/monocle name = "monocle" desc = "Such a dapper eyepiece!" diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 0ef4c680aa..4f886c12c0 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -36,6 +36,11 @@ if(isgun(fired_from)) var/obj/item/gun/G = fired_from BB.damage *= G.projectile_damage_multiplier + if(HAS_TRAIT(user, TRAIT_INSANE_AIM)) + BB.ricochets_max = max(BB.ricochets_max, 20) //bouncy! + BB.ricochet_chance = max(BB.ricochet_chance, 200) //it decays + BB.ricochet_auto_aim_range = max(BB.ricochet_auto_aim_range, 3) + BB.ricochet_incidence_leeway = 0 if(reagents && BB.reagents) reagents.trans_to(BB, reagents.total_volume) //For chemical darts/bullets diff --git a/icons/mob/clothing/eyes.dmi b/icons/mob/clothing/eyes.dmi index cd2b84a143686f3bfa15ead89f2cc156b6e01323..9a52ce14819e4aefce0315efc6e907e130270fb6 100644 GIT binary patch literal 14231 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 literal 13828 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 Ai~s-t diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index e8ba88a12f28af2912d0aed95862172a6d4c713c..4fce479a9d2eb5360d9964a6318a9b5d61c96772 100644 GIT binary patch delta 14180 zcmY+r2Q(dF7dAQv38EamM~@yNdUR0}ogktlL`k&h-5`4Jy_4uf@15wKAUe^B9Np3W z@qOR@@4eQV#hf!{-m=T{JbO=}!-PW=BdoFFNj?nZ*VH=W{p#g)ZrGHcSUN9u_>*Qt zWfE>5;jjh(w19%Nq^3*SLAtvK(e%x^IHezL0|B8$D62m})##uShzIC7JTpjmu=s_AkPTBx21b{xW!-ZY{xFAoh(5>FQI;|VSv8n+!? zEJBDLEDl?O`OK$2B+p zy49Vmm@%zi%gC>ogyDWnLD@a^wrwBmDKl>4KieKg2k(K7tDU3Q5q_1Gl|)Qhnwozq zl^h>Co0qanJ(R|K8Fb=+#Y3D}j`mC~_X4XH-0t`73e>)|lv>cKw+&jhx3l{=SuuZb zlM?FoPFI!C5+l0Ksb;N=kc6O&rB1i><#YHmo&Mor6DupL*#`UknYNjY!NjV6|Gro* zHuB+tvGQDr?*8Uv3odqcb~=iRVJh?Zxld}yqhYS?x6Vr+!na0qYig!*k@)!dI;|cJ zpfz*G^k)+wDn?}9gr=y79iM~%w`z`K#=ayswROB#JPO&+&|tautCZ;$Q{L3B_pviA zJA3i66$vqMMctCyYyPLU!fT^m6WFxBhV2$t@FNotXz1t+%*=trL_{t}!nWM>%56$N z_*`8>;xh(E1sd2j689ucO}|SSk7kH6fzBqocA|J(pH+e)A|7Tf%Ouq~@x4w;2+GN! z2ikG2Y6M*Ee5zC5zI_XL|NJSduh_S}P9yL6^ccpd!OF_oF}t$jRcBjRj71VE^Fa$5 zDz>-vcoYNriC|opxm$#y-ko2Y5Upb@yPzOhbaa_d{Gzp-wl?X$Qe8mM`YGGr!#kp_}_I(VPw-PKG4 z8sh9d_@0b=)XyLF$ytd}wJ_w~HT+dbG+FTAmk|p>1j%6S;<*=4JCYB4;j=mTyg4e< zK8y}XX*}s77k<3W5<8&6`Cgur@58=Be;Q{FwziqDQlFtGP+!)5dSPLtSFe)ZYzACiW1vIl~;SErA1OTe^9vt*_`|10~e{bhYp8J){N56tHT>; zxz_RVxYqS}Dl|BkD^0N8HQ0U2Y1j{-#j9i0v z#)CT>o!&-Uu;bn;fg5m4l z@}7}*Gt8jRzrhxl{Z3ZEd!r!`2B5?8L~BS_6VrcIj~n1%olKKr<~6uT>HgMko!>>ZJof%5w!1FQ+i38d`b`6M@8}HI+bT@x!_PO>`DaGCEx*6%aou!) z-S^ScjjsyHz|I~Td`VG(MLpK*0l<4<8=ISzw%UfJb75 zR9y2vX~)l8N`(2N^m((vm>{h$E%sOX*e_hfv0=2>U{?NWu%yE8ljAUbYnjmv(;tJS z+XuC|b;X#OC)X~05w3K41N}Doa?EyGk6ADrnL;JxSCA-q(DaG*YT7?umIuS;U z57`~^DM;304A+Q}@(;dc596*67(Ea&`5CE?_xS5h zU0OVi{z~}P0Y<*>*p}r1`%H}mAE6|U7LP*W}B8)R&V0oywRrT zU|cZKQqCRfgUr5a4jcF}XNlTMbGw@=cH35Rc1vqi2uvGm-`lT%1g*(0SQ>`qXiGytQF+?Jj4*uD&@Gy{D5n zDt+8=BhS_9)Q6io91s+QA=5IxQ5bUgW;)*d(9-@>B@QG1v>5Ia@P@n4CP}Plzf*j0 zWVLI3Q9Mb9e+7 zb*Pat%C+%wiTk)Fe}%K`b8Y z=KZ9Ik1$|m;+p{Rvd>Kf>+3V2R(r+~LrV+0hB0J7!P z{lwZ5oow?Zol>n|OLLo{Veh1#+WgQ2&JxUEK=e9I^x$(2Gn686=bg+JWcs2Q=@|20 zt!TEJI!(V$>pE0CdK$U8%G&a*+FC6GnbE%O2+tiCi}gWZ0PsL*CwG-M353n^4$62$ zgbjdscP4c^^k%Z+DwL z-M)QBoGV_6KDIX3@qlb;|FgCAnT2rfpvHK*IyBeFrZ@yfut3j%b}ii#*IN3!)kw@w z$?%BRS9G#ECe9qPPD(htA))w>fEO|nx|^WJ<^|EI{VOGw;f&IzR^}-pT^(1_sF>~6 z>$3)L6{Tv;_rC(Qf!Pfi_p^O&6I0XYX2~Bt(<4$(GDO`K|9=Rhj(_uo7gE}w)^Sfu z!`hnDo+8$wL04QrAo0>jYHKimEv1qouamXsbTm=rfv>m4SU_<2I_OhLQhqA>N@@_( zT+Tl97!J(Xq=poi9rna)NMfXm!xLKty~Y2A^(u{L8lAN`uXOFwAQzZQ3yX}h@$vuh zq5pY3A}4L>OZV=#rp^blAyb|K6{?py@`5?Jxx^c@BTynQ3%%6&J)iCz^R_B)biLOE zRrhFIZq{>Bsjn>h7UXp7>DiWlC1o!2;04tsDR`us-T7W>sV~mjZ6f*NZw%T(ZPTM~ zbF8rOL%20ZWGfS2SM~0F7?m?bHC0B>@rBvMPD6m2gN^MG9UYyZ`&r3rToyLAS7q}H z3neTwU4C}<_H%_AF+Wdd1e*T5cS+WQut{8M>L9N8La+t+%Hm5`Tbc8?_+^_iO#Z>Z zz?ZI`y_R3+jieJ3B6;2+^K=}%6NCTbIN#|TL9Je`An#@N->7T%kLePY#hP4CnF zWEwXbOaxPWf@{$5(-y)ps-?W~d-#&;jN(Rn(vp&pUv4XLSaOA%iswv>n~{)$?QGf& z0|L5SXdR!wwPIVVPn1|f^sE9#iERaxeV*K)Ze}h&iSy9dHhC`RRfqrIW8d_pQq&i(~wUx@;28z&#q)H z0<6o|SE5JP!J+Q8`9o9a(I0-Qx6~@*5o9>jolmp>GOP+G(-DdARz7r#3%|WOpB)A# z4UBaM54}DHP+i_KRh}p7w+eA)#YCWuj3|r{&I{&huK@TJyvc;oH+{7 zmyF3uPzbZzJSuy@Kwmy=F z{qC3YC=ONWZ~)%1%qjze7kd8yJOTog(id(+S_91PiV7JAb~qtCXAeKC_et!Y zTS%_guNQhvb?DB&MuZq~u+GX)aKs|WKJPLTPT`g2Mxb@Z3DmU%n+$xU` z4(B!W&xK8;Q0rLSRUW?UueF&sI{MjMtrMHr%c}*(mjB-QVJ6&j!F^DIC_tw+V+=>dd4APeCZtl&) zg>Cu;kBiX-KhDp3EVnVq$^EZhz4~D>!wE?Im-~OHo5v?7#{_~xLtmCM%zUhyhXH1z z88W7(Ovk-`2_A>I&DTeRK^T~w;4teX;Ya?O^3R^yStw=L3Hw+o%*XK_wgy~#6(+T3g^>l$O_N_mVxD^7W6<| znzOfrUu1C?bT~*}Kc$r+*)8a_MGS6)hlks)A#YRg1?a2=(;%H>4&1I!XjC>c%QsX@ zbwMN^xN7Lu8~LwEp#xOnWjf_Wjp_!=nR_Zz;weTbV-aCI{Mt9q0g~kt(a*koOni+T z>znp=*9y`M6yfIGYcV~u7IS-ccy38}0-1HU7c9G@ua{+BKKidJ^6g~s&nBt_KV1!k zN&fW5nh+AyZGho)2e*^&jz%*zJ%WEf+=*PAnkX#D=ciG2aG(NK;KEK_F&UeMC0PBe ztb%9bwt9}!Z^+zFbsU_XQ331v)rTHhZ~P-7aI2m50YGo3)fd7C3vv9EG}J=A_gd0A z$SJ;DZ0{{cz1v6s;zeVE07$h_Q)I`>&p)uY2NMA4PM;&LewDtvDqY9Ax00)ka>m$X zKCCCMu6EV2&z|DDSa5Ypb&fC1G0Cye-x`3>MS{OAVicK(1*iUoIT3t+VuZ_fGjTZM zZ9sWP@%{ZH*!UIX*`oDoA-sNJ%p5GsO7l`QM{4I5<`4$mW3eb zGKI>b6p&jJ#^d}~ujE~w^0?m7l;6F*yPa&QRJ@v(0~*I%v$5#beaBt1U#mq@!VQ<^ zHmGKoW?2r-eIH6Kri$UM*lcbs{LA$HquipUPjfl$ovDznI)b)Kzp%R>n>ZM+vvzES3_m+_zillLrX*Xc8Hcw~mgL_O$M>6S%^qT{q8DL#17?S z_hDe!mmfZ3u{jYz4O@m6M$Ot`wUX z+(25!wQ1loVo@J9jeq>CxvmhJ%D>RxP*j69M(D7!>8C68ujN!Q>lA&X`Tc^oa^{P0 z&@5wVd;CRYnITqd1ocC-`V>3?8tP$b8JUKX+{DW-B0B~&*82bGGyc3miFPMfEa+V> z;M$dNY=isVX7SUu3z1cDy?DVXQ9?sW8c5iyvVFv%W7z+(lqo)A^Cezax}*?+?(iR0 zjVlgu&s|<%Mam2v*ftfDSPqafeTjF=O~JxID-q)Bp+B?yom3JJwJVDc5;FqCPh_QI zZMldbIfFjdnt&DzqI-QGJRQ$|uV!UhSNw1Y?Rn-YN{dR5(fN#b88baT{@a&nNDEHX zPAl50e`%rLDXMGVz9;GC_5#(rD-eF(pwDoM`t4vxjI4AtH@WM{6Q6PLWlG|~Klp+Q z-j2fK%xZBR4y*HGcj9?R*C*@(B-T{dSAPl-A#P?CBd4GR=dKlg#_DMGi0=HS&!17o z+AgsldaBesJ`H(nNP4OrnV>cBW*_P=hp#7 zjcSIAr9?NU`>}lzW;=#0kVXA|hD=Q>5$`tdr{tMPIl=vselarX*7|SOII_X=YDD-@ z(*ryn7SIQOxgYg2-(rTjNhjNezX)m(rZ_-gURzH%kBh zohk9)stTS#)nqQ=wkNE({-AdT9nfY_CsS44rLR%IkUjJ5@}U0rQ=V!w`-0M?vGx7? z9^B)%c_w1s=nuPxdmG&aNV;FEjosRB{a_WIXD6Hhf7c3oIh-$I1HQfCU3m(}000#h z>|EvK3UkED8Gh|;v&hW&V*%cYcmL4KhwmlQlG<7l(cbjZsaon!FE$Z{*?o%F%)on< zjhV$?!BAebwk|WQs*4_q>N#D3>RnR)4F(k1^)%j+ zfzQ-oR3@BArQzY8_Z+myM}&4{7?1Rr%($H5o}vImKquPY5J%5oBO<0a)f$X9n7{&M zG@IS-45SdIymz(GuKE%6W!93PF-;g9CNQfm%31l z>w3H0OCm6}=xB4NA-Y2g={N`xq@<+eHB}s=X)nZ2PEIE0hAmfkh#~k+^MyI3dmBn4 z9-(~Wq847UyI%14V?xNJ$U;K8ZPb1}3+q7$@ClF#hq1m#?vP-;RNlopLdgeVqCoy- zACiT|T~co)^0M#hpDguDsW;r-yqZt`3AfSHzq)(RZJ$Iae#^_K8J|OQ4C9R%laZ16 zUQ)urwCQyrGD`n}ZWWR#u*|*Wc!?yQ6XV(#++4I?=@_0~F9lL>)i#zn^otudUbL>~ zr!M}&cipe(P2ytuQ{UI~h3pGx;4z}AEx~mheL6WwzL}J^*~uj)r_QH}T&pO~#fra_ zXuj}&-gYKwyD#;Rjt2BTg(t=(QK|J{6>SF!6n__N1kfjSIQhOPtVU8k5=o`Nfmi%TTxYZes?ii+Wh+volVWgQ|9&evp6nu~{eWSn;4l~4-A`hl zJ!NA3?BgEj8O9SH{kd>lMDM9U&7f*4Ll&jsX-30|HuG{XS$)VCsBc|*jKch(LP<5cS$ z>bxz@yfj&v81m_1B!j3{Vt)J)6^uQ2oDLPm0;-$2W0}TmKS4GA6=Y`xYEfSGdqo(} zibDl!(W_VRpjMtomsGoX4$4Iu;=m@u;n%7Cm=W>7@u08F1u4wh6J%C3$&jK1?zl$vC$oT*`-N=O_1 z%W|}X$6b<@ii00I(S}3kD=gL8PsKx@E4O7~v#?C^lJ-`5(}-t@W{p8&3euHCk(aK* zER6PH3ML`b`%XVhYdI=ZA3mS|oSCTw>E#rx_%G^DtBuukj7 zj~V_;rA{ZQZZz;)TXZkV9QGs@B$h+6wn48Xo?q;-00TtVNI(}w6%{z)UFKX}D)C6> z;ql8|NEnxNkycTOwB!{g;Y0%%Is2q{yM+Et`|+B|KEd$CgJ%8#`leg|>dXhUBOv{V z0xaoQ`oY?*nw;IQiNs`}8=M3uT>itrh|0E4zepc;IC&=lTn<}95kfUPhx|(RL^YJZD%+rogSXd z2_#nh;3M%cjl%Re8#b{#C{+m9rS!aJcnkiBG618urV$q8-QWGOHcXZq&*wubA7haY z;729FQM`X0*-7W+^(lNB51Ohc8!NI+sC=`|VWJy<^Fip!dd}`lf3c4J=**`93joOE z?#t}qj`MRTZNw?Sd*t#XrDdHu&vup0Ceu+34_roBnmhR!8pV%90j@0(=28nDWlC(^ z;G0=*hVt{3zCF=`AFzteuRxj-S1C(DO*2)vlkokr+A>UZ_IUFfvM4-All>D(4v`zg zKJSfCO`GHOhu(^>o?bK<_1~j^|80#GTgBy;Voejz6m7Q2+*$R!QuO{PNX(zr$rNvK z>Iak9xD{oY*90U!2gu~*WsO@WhRcJmwRtdGE~ON9?`H=|kSIV2TfAaWss{LFGNggt z(?)h>nE8x`92*qQ!#MtaS2{*?6^X5N9{v)QU%35gTR~Su8}n*{;Z(MDmh^{fL?oK$ z>3%yD8bj=gr(dv`X8+JF6_fMQRjN?Sl}$DpM&BsAXgcdK;fOL9bIg?kQ8zY1tiBMc zN8<0=YhjQ3MKps{r?^daX3`5Tt?B$&a!ca4fZ!ruht2Wa|A%aAwn6l9Cf4Ufu2!rq z3&M_rVw(REsZ3v53x1@)NMu3E3LfUG`*GnYdey4z0ZrakYw---e6c^ABaEY%u4xTg(1 zPC;22Zbe0f0j28d^`&CiN5D$s2(1PaCSmDZN8fo=KSTp zS(W>zgmaT&E%*`ujLQVT*N#n#q-$+Q)q~Hi#f<5xeS>>oz|sp%8oV3B)FICM0(CVv zRjlke3a~5i_)$6WPLb|Zdqb(60FH|}~s6<*?n)ZV( z{i9kQB9egYmMSHKvP3U)8S2;Nea8L${TxC<$=`%q^R@qQgN`4~Yjl&%n_CGUlLtdf z-|gf)_&wWN9Tt;qsaqeF4#h?2c!%(7{^jJVo|;P8yBGIK z%W8Hc-mREs;Ya1WRjNPi(Lxv=(oBqv!1yEt2m1Q{FwYt_ zI~Gu5g9y9D9|;veR`G4=baW66YFeTQE`BmOu4Dg~wO+x!i1bH`r!rp=9~+jCIUO#Q zdN!T_3u@Hv#nglyf6s5k`av($LGmsdM93}weTI}@Js&=Q$y=9LspL}O!2e$josHqd zKabMJF989lGsYsnL|k9^vk7#|hEteKfFUVHO-*WopxC-v)QkoXm)Y{uRQ!d!AUl_% zh6au0KJ=)xmLA(WN^vg{NUesNSA2f`(t^z2H?eT=vfm6^J8>)9;^_h0gXrI<mHa`=DXL>f&oBw?M<5Cu`|3@14d-N6aQs&LWd|1nsHHvjp>7#Gopu&CQ znvnzJlm1JZ_PUQ3O|KJv$TlsSxGrvwuQX7NdjKZoWOuGp1!|A1DguYiP*E5O)hUOe zF!x-gX{SYI-(QuPqz6>hTqIm&nR$x;3dx{i$d0M+wU(4NU!hwXmWsEspRzSf2ii+y z7vT@@vXoTwKKS%$gT>*`G9=;OuWgfgG^C2s=U~d@$v^CMuUtqTjqt}plm~wA8?1Zk zqV_>b3 z_;UQ|4Jc{=W62EJQtZzNSU9IXkqMhg7CK=0?HDj*_>7a;jCR*M1-2FyHUY`rYW&kwwJH&-6=mbR$Y3M5)KvjKV3 zMWf8^wcMJoVxCyqy3_6(Q94iKQ%orv5ig>y#W*T&dmVn7CxsbTa&Y-&9Zz2jG^kjo z%iMN>whwJZbUiJh#@~La+{Lo1#iWz)Y33k_RW&psUK{GaFre40Jk{-58PuyS%vx3$ zY5uU39oqg|e4Vd%OP@jUuJz^|6|U6LMwN+Ls)FZ}V~A=*f)%Rvv^Y}$?)+GUW!b+b z!)@abjyRY4(LCSrOiZi7aw+=-6;Y1&Y6*DQdPN5IJlTToVmuG*5K7Y`1Tpn*M#L5b zKgAg(^Qu%|#e#D_s7we@%?osLSjNG@7-)0t-nD5tbv`QQ3?GBWN=q5_3zKaG^Q6?h zt(1ju+3&j-gRX_E5WTwkpS%JWy85s8bHZRym6lkOX;<;mPzWxhZf7<;TZ!dzSA}Pt zuSfzTV}^U23%UjovQ3Wa-(BA?Xxr;MowE;Yl)!PIj)=+Cd@+L2^8+9cLI z5A+{(#_fMfiV?+;O!WO>)e#C6mauYrX`*lcO(o*UH@_qq$sE1VEP~+0DR9xjp`s4235WZ#%+@eG*>m++j>D*RIH*=|7Sh`}-PrPc}J4%Nz zjCbRBu9|=w?*-$@wRq;+@kwFs9m?WSZntav9XRMIBXC`bimtfZzYSxhLHuj=Wa^b^ z2UrhP|8KU9AT-pA1edG7(1pIS(L|j91+)yqp&{*B9{+e>bv*glXM$#DeYtV7XZ4Cj zZboF~iUnP@xT$rJ5+7@8)NFSS`|`oc0W4?_fyG|i)HIsT09mDw?s}vPik`(aeq`s= zvD~E_-Ty_ilz0}usKM`bt(zAD@|R;iV>1-sPhp9NQg^;4^r_y#V2Fv5xx~K?UHw!2 zl=tJ&(Lo1)WuY|cF(C#)mBDn^$xeSu=-3}>UA#X+up1KaREmy52Or}AjRx#A}3C?#W-jy4!J;ZI|son8w8_!`3`DP4YD~VvK zrdaH<2fHEe*}hb|6_~Lpvl7g3l}mH)nmfBvW6jZp%Y0n8%ZF@oGtGjTr$Vxk;vsxA z(*8;VH)Pr3cKKMyr$2w#d(IO^g=8Pej>6?<9!5DiB_I8TrNCk zeORX$(vg}QdozI^Mh;3N8RV9&(DGVe-}?*X7w>EH8q$*tc(dACkNBA)3|QnOm#FKx zkU22$`ZT_d`{2yqj_5hTi3}=okKM+&^T2+CrSF|5pOL*X_btXNdkyECW8oZe=MNJ! ztw>M)j_$lCheneF;=q?rUbY^5w1y`=oA6$3RI(7H(Q#;QBFy!x`2BW%+&RCLdXD(Z zj?1}LUyB3J>Eu^Y>(xF+DBP_`PK|2pUV&~1xYCWMx%vRS{<1(VGbm35Nl)DprMN%J zHLpn<_+EG4kT^`|Sn^T>-aHQS36iy-!v``Mli;}y`+N><(w8~* z`$FtSOsJ}OJ^$w^mc_%?do$%aIgJzFiL~@AXJ+~%%Cjq6F-wK z<4s55p(7fjIs`~2DH5NnGK)igy-af(CQg47oqd=H!}lZ6RXGVY@o5F*!R_r>C@*~= zGuVQ7CGClCtPcSRXsko7+PH!9GQ*h;qf;Ot9%iC5Le_!>k=l+Q_Y63Ir0b_QRC?xX z!!Qcs=8%0PpIudpoU;u0 zFOH9jV@!NUK=@X{WaG!BF+M{qbak!e-18pi+hb5wAeYWc;zl|th^Z!F>!wNDiEuggGw-XLOPf9^l{ z%MV3D+ON6HKw;%>M&vzanbKc!98W;f<`Wdej|OePRhEoA>^!`a#c4*c8v{mv)+ zklUJV>DM{w683sD+^j1ArxF3xX>b8m4UMl~BRr3vpb+5X78LZw{jVb#YLW5t_xrl_ zPINJX>}lb!xhkb9oA>k8rU?&qRc$?N;D4WudOANUM%QPG_7c7HAFKWtZ+K?*)X3Pl=5%rDR94(-gi56L_$9BC z{LE13Irs+Tk7sMbG>nYdoqGor!3-S;E|7|b5euSxe0+}x36$<9d}P;R_j19*>9Cew z%nPV>P~8Pixh0hvnBdu@nP>R_PPI}0sTg)m^&AW!BW@fT zU@l*-RYVbJ?q3F%|NS{iwY>|a0aPjaQ!Q+I(kYi?b12Xw53a{@kvubPkxe<^((ycY z_hx)wqvIa5qo@*}Q!Xt;cA0dReou37Fj7HHXImpr0AOvs7>|%y>CT~cGfjK`oDD^{ z<}mV7k>}Bs?^^iC8mF%noE|KNE;Sp0EaHRb|%-kckCejURouy;Ng!F(4z4W-VfTSd{Z{tN=oPszr zJyCBQYr^I%ZhXUE+3&nIe4`EbtZ6v=R$f*d=ml8|@#aKgYhxKRQp6X=$g}#8K~^02 zr{~rBNy&ivxcatNW!aa{yHf<}tUvE(WKxdfL>_u<2_GRTL4HfsKc3CQmj$eBY|jx3 zIDldXMR~HthS2Qok;Kia6K#$#)F?&xn!N(D!CIj^fy1Zzjd2Y;nK6s$E@ImZCAu{s zt`=hSP!IOU|B=F>G0BqS7laL% zylVxwu>xYq?E7U5@$n18Uco)bRguD8HEKKATokV?ElY}9@$d`7i^M&b(onpApBXGP zAVftPu1$yZ?piGw)1Xr3Bc7e|+o97#V>c<3`!@${*VSygG$6MLbU$n%1uq8;$?n8$ z*QEda`I7{_?4bBJW^yTqKi=M>CdVYJ^obQ)? z53AV8kK0aLX7`C-@4E6RS&8jhQNK{#KMgjon)?B%8$kO-1g=>JVjalCi{@g3S_~>J zKJ&&-wC1#?20%u9VbZ#mw**c3)6T@VA$@)D-o5<_S{WXuAphs$P>&4p$(;*r@;LG zn$?5lR4tBCHR5HIpsB6ki~Z(iob+@mh+=v84y98^$z?>Sb$xBGRq>Sfad@EjEOo z0z5I6Xny;kK4lc$m8L~=_U5y-zWrWzpt0BIo6omO;!b8dkgedUI@xC)GnAApvjdOCKzh$JUt2=;R2BKDydMw9chVD1-s$WhCcjU{PiKo? z|GoP(Gw|TjLhSQYq+!8;qS0epa!Ho~RJaIjrg#QfaNX%ClWL@?dGeSy`Pe{nX5{af zyFF@00gu6+rSWo`s~cj+o2TU@`ZY%xCG5M%8NJkJHLcmJp-(T{{*GJZV=DTRkyZcv zi>-rp^40w>kAHxFs_wzl+0)(;^`T`UFjj4gab$d7p%b?B!1oz8ByGojAm9dvqsMkh z)ht^4boWfAbuW%k_M*#F@E9H>I!hJjuiM>?biZi5Hr#CC84^cc6uG3$i~mEK8IP>?U$}^n(?nKr`#{V*+IMrPV0VeK zl+hA;k)Ut+V%~ebOP$ehbf|xFKSpK~XJ?;2c_GhrW=c zWRVSlDi7V9@;|Kvntzcc_3=|a1_QYp iMMkU_?K9G@i#tYVR)d49@C*R@QIJuVE|Yri`+oqxvEyd| delta 14139 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 From 2bbe4631d6eb1e65d0227f6f7e201abda7939210 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 14:46:24 +0100 Subject: [PATCH 02/16] working ricochets --- code/__DEFINES/projectiles.dm | 9 ---- code/game/atoms.dm | 7 --- .../turfs/simulated/wall/mineral_walls.dm | 3 +- code/game/turfs/simulated/walls.dm | 2 +- .../antagonists/blob/blob/blobs/shield.dm | 5 +- .../modules/projectiles/ammunition/_firing.dm | 4 +- code/modules/projectiles/projectile.dm | 46 ++++++++----------- 7 files changed, 25 insertions(+), 51 deletions(-) diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index 1bd67fbe02..0ed0d01889 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -1,12 +1,3 @@ -/// This atom should be ricocheted off of from its inherent properties using standard % chance handling. -#define PROJECTILE_RICOCHET_YES 1 -/// This atom should not be ricocheted off of from its inherent properties. -#define PROJECTILE_RICOCHET_NO 2 -/// This atom should prevent any kind of projectile ricochet from its inherent properties. -#define PROJECTILE_RICOCHET_PREVENT 3 -/// This atom should force a projectile ricochet from its inherent properties. -#define PROJECTILE_RICOCHET_FORCE 4 - //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. diff --git a/code/game/atoms.dm b/code/game/atoms.dm index de9df3a23e..852391112c 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -156,13 +156,6 @@ return ..() -/** - * Checks if a projectile should ricochet off of us. Projectiles get final say. - * [__DEFINES/projectiles.dm] for return values. - */ -/atom/proc/check_projectile_ricochet(obj/item/projectile/P) - return (flags_1 & DEFAULT_RICOCHET_1)? PROJECTILE_RICOCHET_YES : PROJECTILE_RICOCHET_NO - /atom/proc/handle_ricochet(obj/item/projectile/P) var/turf/p_turf = get_turf(P) var/face_direction = get_dir(src, p_turf) diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index 4466511acd..096f0a0b89 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -191,7 +191,8 @@ icon = 'icons/turf/walls/shuttle_wall.dmi' icon_state = "map-shuttle" explosion_block = 3 - flags_1 = CAN_BE_DIRTY_1 | DEFAULT_RICOCHET_1 + flags_1 = CAN_BE_DIRTY_1 + flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD sheet_type = /obj/item/stack/sheet/mineral/titanium smooth = SMOOTH_MORE|SMOOTH_DIAGONAL canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater, /obj/structure/falsewall/titanium) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 37248f814c..ba88baea08 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -6,7 +6,7 @@ icon = 'icons/turf/walls/wall.dmi' icon_state = "wall" explosion_block = 1 - + flags_ricochet = RICOCHET_HARD thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall attack_hand_speed = 8 diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm index a2a6ce94d3..a3a1403e58 100644 --- a/code/modules/antagonists/blob/blob/blobs/shield.dm +++ b/code/modules/antagonists/blob/blob/blobs/shield.dm @@ -45,11 +45,8 @@ desc = "A solid wall of slightly twitching tendrils with a reflective glow." damaged_desc = "A wall of twitching tendrils with a reflective glow." icon_state = "blob_glow" + flags_ricochet = RICOCHET_SHINY point_return = 8 max_integrity = 100 brute_resist = 1 explosion_block = 2 - -/obj/structure/blob/shield/reflective/check_projectile_ricochet(obj/item/projectile/P) - return PROJECTILE_RICOCHET_FORCE - diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 4f886c12c0..71434ece58 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -37,9 +37,11 @@ var/obj/item/gun/G = fired_from BB.damage *= G.projectile_damage_multiplier if(HAS_TRAIT(user, TRAIT_INSANE_AIM)) - BB.ricochets_max = max(BB.ricochets_max, 20) //bouncy! + BB.ricochets_max = max(BB.ricochets_max, 10) //bouncy! BB.ricochet_chance = max(BB.ricochet_chance, 200) //it decays BB.ricochet_auto_aim_range = max(BB.ricochet_auto_aim_range, 3) + BB.ricochet_auto_aim_angle = max(BB.ricochet_auto_aim_angle, 30) + BB.ricochet_decay_chance = min(BB.ricochet_decay_chance, 1) BB.ricochet_incidence_leeway = 0 if(reagents && BB.reagents) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index f3d78af59b..faa96b3e61 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -316,16 +316,18 @@ if(!trajectory) return var/turf/T = get_turf(A) - if(check_ricochet(A) && A.handle_ricochet(src)) //if you can ricochet, attempt to ricochet off the object - on_ricochet(A) //if allowed, use autoaim to ricochet into someone, otherwise default to ricocheting off the object from above - var/datum/point/pcache = trajectory.copy_to() - if(hitscan) - store_hitscan_collision(pcache) - decayedRange = max(0, decayedRange - reflect_range_decrease) - ricochet_chance *= ricochet_decay_chance - damage *= ricochet_decay_damage - range = decayedRange - return TRUE + if(check_ricochet(A) && check_ricochet_flag(A)) //if you can ricochet, attempt to ricochet off the object + ricochets++ + if(A.handle_ricochet(src)) + on_ricochet(A) //if allowed, use autoaim to ricochet into someone, otherwise default to ricocheting off the object from above + var/datum/point/pcache = trajectory.copy_to() + if(hitscan) + store_hitscan_collision(pcache) + decayedRange = max(0, decayedRange - reflect_range_decrease) + ricochet_chance *= ricochet_decay_chance + damage *= ricochet_decay_damage + range = decayedRange + return TRUE var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations. if(def_zone && check_zone(def_zone) != BODY_ZONE_CHEST) @@ -401,24 +403,12 @@ //Returns null if nothing at all was found. /obj/item/projectile/proc/check_ricochet(atom/A) - if(ricochets > ricochets_max) //safety thing, we don't care about what the other thing says about this. - return FALSE - var/them = A.check_projectile_ricochet(src) - switch(them) - if(PROJECTILE_RICOCHET_PREVENT) - return FALSE - if(PROJECTILE_RICOCHET_FORCE) - return TRUE - if(PROJECTILE_RICOCHET_NO) - return FALSE - if(PROJECTILE_RICOCHET_YES) - var/chance = ricochet_chance * A.ricochet_chance_mod - if(firer && HAS_TRAIT(firer, TRAIT_NICE_SHOT)) - chance += NICE_SHOT_RICOCHET_BONUS - if(prob(chance)) - return TRUE - else - CRASH("Invalid return value for projectile ricochet check from [A].") + var/chance = ricochet_chance * A.ricochet_chance_mod + if(firer && HAS_TRAIT(firer, TRAIT_NICE_SHOT)) + chance += NICE_SHOT_RICOCHET_BONUS + if(prob(chance)) + return TRUE + return FALSE /obj/item/projectile/proc/check_ricochet_flag(atom/A) if((flag in list("energy", "laser")) && (A.flags_ricochet & RICOCHET_SHINY)) From 34e2bd626fed990b4189a51ad47042727afcba84 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 14:50:19 +0100 Subject: [PATCH 03/16] woops --- code/modules/clothing/glasses/_glasses.dm | 10 ++++------ icons/mob/clothing/eyes.dmi | Bin 14231 -> 14229 bytes 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index c749ac53ed..5673c2b66c 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -155,14 +155,12 @@ icon_state = "syndicatepatch" item_state = "syndicatepatch" -/obj/item/clothing/glasses/eyepatch/syndicate/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, "SYNDICATE_EYEPATCH_NODROP") - /obj/item/clothing/glasses/eyepatch/syndicate/equipped(mob/living/carbon/human/user, slot) . = ..() - user.visible_message("The cybernetic eyepatch beeps as you place it over your eye. You shall never miss again.") - ADD_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") + if(slot == SLOT_GLASSES) + user.visible_message("The cybernetic eyepatch beeps as you connect it to your eye, its circuitry embedding into your eye.") + ADD_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") + ADD_TRAIT(src, TRAIT_NODROP, "SYNDICATE_EYEPATCH_NODROP") /obj/item/clothing/glasses/eyepatch/syndicate/dropped(mob/living/carbon/human/user) REMOVE_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") diff --git a/icons/mob/clothing/eyes.dmi b/icons/mob/clothing/eyes.dmi index 9a52ce14819e4aefce0315efc6e907e130270fb6..876159c25882f38b29f035341c2395cabdc61b22 100644 GIT binary patch delta 8576 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 delta 8531 zcmZX32UJtp8g7t_Oi>ubhA50Ug32HwB1ns)2s5IhBE3XW2+|@TErA?6C?(@WU;rV4 zf+8h@A%L`4KpZI%DUp^a2!RwZh9sn(x8t3=?tSlN!D6q?J~?~;`!C=3{kfQY%wJW@ zpwp|5r_39lAr$?6?c5(J&NvS-mpWXXA{O#^^d!hx-i0f1(#-X*S&KmYKK&@n5`nlR zHo3G6@%v$f7UIWT#CM4OJ2Y0?g&#b4urpa4f6fXPhpG6{Wo&3M8Ge3fUC^mTk*L!R zULwFB3XyUOtr|kLr>2aj3VU-8`gK6bT!I%Gl6Rk~@y?8_eQIhF^1wKr-Di=o(r|Co zHV)Oq#97u)aINunZ(%i7`+26$%@mzw)CTn@b*|}eYCGLu_KwldVxfKxXow=&%g0a^ z0mIb>Deo-c9&`w^HRXhOgG?^ZY?*I1m(@0foI|;?xD8PwtCAA%XZX%?EqPL2u$=hI z^3_nwVsI9|bmB><``t8lPlBjhI1H<_LWeOtgN>;&BDGhj`ERHyNVw=Og0)ziG*BueCbnmN&Y^#w6t`xB-?Nb{7TmC%@hoim*~4T z6-H3~&n>61-yM!Tzs_AIyX9elVy<$c2f9NL6#FKjg>lFw@XL~D-FPzZ9aT?n%-J#R zj93>@bNV83cf?)_Td7oba^#ZbwF~f3{*?hH)%J%3l07+^&3aGBD)jELBNQ`laIHu2e*>%LepjS_XZ;_BxAAITNxR-=04uLBSHtyhl=nFDh`Rz>3raz zX}@RB;1guRxf;HdPOF{eRj;K(ssxL%%-uF}m2C??$iu_qgzh!J&EeB;a&!ANs*CrC zTU5CtgaqzzwqGP9C+w+7MHbaHSkKd{lc8xL)2kIPew@eezU@LY8*b{m#C#HVwC=22 z{NBm2m0mYDP|3Go zGBTMT38PQN$ooiZ*=Y)nh}&H~SXh__7x~e^=Y2zTz{dC$#Y{AZe0*`eyynbAb3*5DX2q+`N|HmeYH4S?a*{t>)-L18*d@3aNAdf!oj1)& z*6RtX6I@)P#+&K}4ellkLw6C%_x|?otNl5unuk-@F^V&aE{4i^W~Z}t zRn*vH32q6=S{uKPlp73nY3i=-Iz}?GO!?b=vJ0sayq0t&E#&BX*jEmAO$fS-QK@M! zZ&-18;Qf=Lc=js-e(`>6P3g(1A=9YK2F?F=7%Rfc6)PS-+emvrCWkA2 zp)d&p#~f-ZjnmPKQ#h79xQ>Qcy5-Y4nE_cWF(vJ`Uq&75ujNR37mja&6oNw?l$Yor zNW3B#iSrV4(3EM4N#^~@_lx+<*|N)uD1nCTa(tXlu}mm&Y#Y^(uz`+*RNPM`_sUPv>-$& zGdG>kj4s=wc5P=|sOsaIBg@I8w#OHi?;+rgoi$b?O!uMp3ui?ge_n*NbPV#)v`2MtTl0D4UO0_9pePOMB_W{$q@=z}FYJDv!C(H!?;t>msoM*dctNJS^6y16r1Uqd z<}jBI1N2=z6zi|e#~kM#oa91Jh5DU0atW`l=QGpj`98(U8#2jLC(B#kGvMFmP9Sr? zF7QndH`0!{H}15U5w~vJAdgkv<+=yGd{^V1`KkotD-FLBM2QIxf0U8&zJB{;Px2lU zlUsDBO=M~J{mB66^Tib_SFXuiXSp-lf_QnC0rZZe3nnBW@K{qtdk+Qfept=H9c_z? zQ1AwjnHlS?ueE-xrj%7146@-*6>et-D%#}jB5e=1Xy{nYqNNA=l^kkl{z#BwLb_+P>@ygj8hVfJpz4nIIK&mIXyRA-syW8BwPxke+4uW zSqc5iVb`wX=g0dVvu>%AKz`q!dL;k$)+fNmrPDeTL47n7vE6BXP?f<)+&K#gi?$apNt$|0$0vStfgC5oJ8!KycsgdiX{rn?G)2J-aBwJOU?#&8m2&8!V$! zg*Kfo;?zKmJtk#eK3t6*YKZ=R>W*iKN+HelNK9DMdn=3^nICu|3LF&e&0J@T5|v$t z^69h(gEM5`y0Rw4m+mp~Wg|U3`l9Sk@`(Yqv7P`{4pg)7=ja1^7+%!mj!}1OoU@(X zk{H0D9>+5*{sYJKtA;G5`D+Q&`zn~O4VHTlU9c#?JSL^9T8}D~JpDSg_ zb2D$TuwA`j#9!$ecBj%e?JxDZ`}sq8XRTjV;o6MCAezCbz*+OcQqJi|$OC0<6H-3O zhKe`;R~?QPcY4PNw=2uQI#DDRueA>Ac`pJJq_;d9n}Zn4!mr=lwL1H%wtHtw z_0r@zn(ubXOlW?PcTb5Ej`30#nR=j2_3YXHN*lMxR#w7DWVj8n?b~&bS)8ix(z2;{ zV`Bk>sB0S<$Gj4C3rB>Yf`lX|+cjWV_!r=*P`Q|IwnA5zAgws%trYMq<2R|Ri;N-W zj}071Zj*?}J@R%?9hxLL4#N|;u1&E$cecl3P^{*&6-RDvO-qZGZ}?C3z%4YL4RUP* zFtkDh$qS@iZAs&G^M7vlbZs~0V0TdcqXXg707P}l0S-v+8lh)yB`wJhQ~fQNv0~w5 zYf{?YnVy1yJfv3k{BH$RXOS6ZdwZOOJ|!f&kWb>_7h85vrcYs)7VWJMEdTSv3n zmDgk=e`egJ{Fon<=w}r@TAwD?)zx(yL6bP5EhetyQYN9t`gFEDJw1Jk$w}VSE7r*mY*7x zMda{mhXxE`g6=qMc$Bo);@DlMmO;h~nbNph-^1BJA{NzD6=OMCp+kg>M@$GFW%;+K zezfwe$VzGLG05tH%~5{qAW4#dbNOmou~l2^7Z-f0K>?f^G@Sg-*p!wi!( z>I>)R=O@dp!(2wlFV*}e-3Z^b)%gl3Luz~ykj+a6r;~^$^e=!cZ2%1cj_}N7Zhn5J zy}fC^X4h83%wi(cYXhZS*7ayN#ryf4X3qXiU8i=dVss2*IHiAe~c1Lfq(hYugV zel+lgqpXdT;Onm>;#D4Dfa4DHY&JFkr|SG_5oWC0ph|>thY+qV8?8eRr$$J>ENXuQ z2MQU0PPiSqYY;nQOUgOQ+P9-Gb!b3O@2H=L`6D_c9IUKU$+!fClqP-0CJ)7=|vV_a}_mT+B{jQRJ~NSK6)~Ys45obp$v#8J4qH zdBTjPAt9_T_kVN|6m0nR9yqpGqb(HbEez=r^XqWQ$)vLb507T*qv<)ozjB8&{vnSf z?hfvo$3aO8o06*KHI3~FXF8bLs@W-w9k*J|Q9uRVuwgU+Ge8y>OCO`I{|=rjs~*)O zo>mo!q42V(_N0irf&hR@OzDuPODm_~2U(Bq<{4wX{5xK05V_a$;VT1VWFII~YJLq$ zSZ9v0;z#e{h@&Y3eox~1ymY6l}27Y#6{)!Y^B^!Z;4X^8KhJ$P5mg0xI?zN#DW zCgSCvu)yoIprgJBK5#iK4wreexlK98=UV^_<4%6L^e2R~{;GWRD)y~*^XSM{qZ#0u zYN)owh?EhK8UwI$9Y|$MfG*~Ksp4~Q7{+V^iO@MNMa&x!s3bJn_Q>;EGZ+ZTWJkV;CEq17q#tP%9m58bI2F9Kdt8NmS?lcxJ_cUQ4w^!~K2g^n$x5(A&01g}bo z5@;bCpbb6Hf&!A}$t5FjBm_l_(P2igi0CWOw#^;A+6{l1oXlsX)JX{;DqI0g3N#B4 zyCE|@@mown*nJN7V{szRP®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 From 9b34407c9f4764af1c6ad0bbbfb480e842be3020 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 15:27:17 +0100 Subject: [PATCH 04/16] uplink --- code/modules/projectiles/ammunition/_firing.dm | 6 +++--- code/modules/uplink/uplink_items/uplink_clothing.dm | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 71434ece58..3c38f4d783 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -38,10 +38,10 @@ BB.damage *= G.projectile_damage_multiplier if(HAS_TRAIT(user, TRAIT_INSANE_AIM)) BB.ricochets_max = max(BB.ricochets_max, 10) //bouncy! - BB.ricochet_chance = max(BB.ricochet_chance, 200) //it decays + BB.ricochet_chance = max(BB.ricochet_chance, 100) //it wont decay so we can leave it at 100 for always bouncing BB.ricochet_auto_aim_range = max(BB.ricochet_auto_aim_range, 3) - BB.ricochet_auto_aim_angle = max(BB.ricochet_auto_aim_angle, 30) - BB.ricochet_decay_chance = min(BB.ricochet_decay_chance, 1) + BB.ricochet_auto_aim_angle = max(BB.ricochet_auto_aim_angle, 360) //it can turn full circle and shoot you in the face because our aim? is insane. + BB.ricochet_decay_chance = 0 BB.ricochet_incidence_leeway = 0 if(reagents && BB.reagents) diff --git a/code/modules/uplink/uplink_items/uplink_clothing.dm b/code/modules/uplink/uplink_items/uplink_clothing.dm index 014e0452b5..2d5d6c3d8e 100644 --- a/code/modules/uplink/uplink_items/uplink_clothing.dm +++ b/code/modules/uplink/uplink_items/uplink_clothing.dm @@ -97,3 +97,9 @@ item = /obj/item/clothing/gloves/tackler/combat/insulated include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) cost = 2 + +/datum/uplink_item/device_tools/syndicate_eyepatch + name = "Mechanical Eyepatch" + desc = "An eyepatch that connects itself to your eye socket, enhancing your shooting to an impossible degree, allowing your bullets to ricochet far more often than usual." + item = /obj/item/clothing/glasses/eyepatch/syndicate + cost = 12 From 2153f9ea35be974b71983f9c5ec13437aa1359c0 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 17:36:40 +0100 Subject: [PATCH 05/16] i too, want people to be hit their ricochets --- code/modules/clothing/glasses/_glasses.dm | 7 +++++-- code/modules/projectiles/ammunition/_firing.dm | 1 + code/modules/projectiles/projectile.dm | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 5673c2b66c..39c9bcdadb 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -158,12 +158,15 @@ /obj/item/clothing/glasses/eyepatch/syndicate/equipped(mob/living/carbon/human/user, slot) . = ..() if(slot == SLOT_GLASSES) - user.visible_message("The cybernetic eyepatch beeps as you connect it to your eye, its circuitry embedding into your eye.") + user.visible_message("The cybernetic eyepatch's circuitry begins connecting to your eye as you put it on, making it immremovable.") ADD_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") ADD_TRAIT(src, TRAIT_NODROP, "SYNDICATE_EYEPATCH_NODROP") - /obj/item/clothing/glasses/eyepatch/syndicate/dropped(mob/living/carbon/human/user) REMOVE_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") + var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES) + if(eyes) + eyes.applyOrganDamage(30) + user.visible_message("Your eye stings as the circuitry is removed from your eye!") /obj/item/clothing/glasses/monocle name = "monocle" diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 3c38f4d783..437b7dcc5a 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -42,6 +42,7 @@ BB.ricochet_auto_aim_range = max(BB.ricochet_auto_aim_range, 3) BB.ricochet_auto_aim_angle = max(BB.ricochet_auto_aim_angle, 360) //it can turn full circle and shoot you in the face because our aim? is insane. BB.ricochet_decay_chance = 0 + BB.ricochet_decay_damage = max(BB.ricochet_decay_damage, 0.1) BB.ricochet_incidence_leeway = 0 if(reagents && BB.reagents) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index faa96b3e61..75ae93a83f 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -659,7 +659,8 @@ if(!ignore_source_check && firer) var/mob/M = firer if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target))) - return FALSE + if(!ricochets) //if it has ricocheted, it can hit the firer. + return FALSE if(!ignore_loc && (loc != target.loc)) return FALSE if(target in passthrough) From da05108dd00815aa86977b16ad62940fb9eb0471 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 17:37:58 +0100 Subject: [PATCH 06/16] woops --- code/modules/clothing/glasses/_glasses.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 39c9bcdadb..42b0a7e608 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -161,7 +161,9 @@ user.visible_message("The cybernetic eyepatch's circuitry begins connecting to your eye as you put it on, making it immremovable.") ADD_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") ADD_TRAIT(src, TRAIT_NODROP, "SYNDICATE_EYEPATCH_NODROP") + /obj/item/clothing/glasses/eyepatch/syndicate/dropped(mob/living/carbon/human/user) + . = ..() REMOVE_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES) if(eyes) From 6fdfc19ea0466244ba9320ca1d730e40ef9951ef Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 17:39:45 +0100 Subject: [PATCH 07/16] why can i not spell --- code/modules/clothing/glasses/_glasses.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 42b0a7e608..707f4de26e 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -158,7 +158,7 @@ /obj/item/clothing/glasses/eyepatch/syndicate/equipped(mob/living/carbon/human/user, slot) . = ..() if(slot == SLOT_GLASSES) - user.visible_message("The cybernetic eyepatch's circuitry begins connecting to your eye as you put it on, making it immremovable.") + user.visible_message("Circuitry from the eyepatch links itself to your brain as you put on the eyepatch.") ADD_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") ADD_TRAIT(src, TRAIT_NODROP, "SYNDICATE_EYEPATCH_NODROP") From 93c2924a00a7102d548a6a8d5fd8eb96c74a92b7 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 17:41:30 +0100 Subject: [PATCH 08/16] lower cost --- code/modules/uplink/uplink_items/uplink_clothing.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/uplink/uplink_items/uplink_clothing.dm b/code/modules/uplink/uplink_items/uplink_clothing.dm index 2d5d6c3d8e..c26a9ae1f0 100644 --- a/code/modules/uplink/uplink_items/uplink_clothing.dm +++ b/code/modules/uplink/uplink_items/uplink_clothing.dm @@ -102,4 +102,4 @@ name = "Mechanical Eyepatch" desc = "An eyepatch that connects itself to your eye socket, enhancing your shooting to an impossible degree, allowing your bullets to ricochet far more often than usual." item = /obj/item/clothing/glasses/eyepatch/syndicate - cost = 12 + cost = 8 From 8a3e69d32f8736d6a8edb4d6f624737d62c6dd41 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 21:40:10 +0100 Subject: [PATCH 09/16] no more inaccuracy --- code/modules/projectiles/gun.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4126c81367..a457e81251 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -29,7 +29,7 @@ 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 var/sawn_off = FALSE - + /// can we be put into a turret var/can_turret = TRUE /// can we be put in a circuit @@ -602,7 +602,7 @@ var/penalty = (last_fire + GUN_AIMING_TIME + fire_delay) - world.time if(penalty > 0) //Yet we only penalize users firing it multiple times in a haste. fire_delay isn't necessarily cumbersomeness. aiming_delay = penalty - if(SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE)) //To be removed in favor of something less tactless later. + if(SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE) || HAS_TRAIT(user, TRAIT_INSANE_AIM) //To be removed in favor of something less tactless later. base_inaccuracy /= 1.5 if(stamloss > STAMINA_NEAR_SOFTCRIT) //This can null out the above bonus. base_inaccuracy *= 1 + (stamloss - STAMINA_NEAR_SOFTCRIT)/(STAMINA_NEAR_CRIT - STAMINA_NEAR_SOFTCRIT)*0.5 From 3a0b34fb1ba67f46e3c17ad46ccd3a11276accb5 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 21:58:58 +0100 Subject: [PATCH 10/16] funny aim go brr --- code/modules/clothing/glasses/_glasses.dm | 2 ++ code/modules/projectiles/gun.dm | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 707f4de26e..a716b9f6c0 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -159,6 +159,8 @@ . = ..() if(slot == SLOT_GLASSES) user.visible_message("Circuitry from the eyepatch links itself to your brain as you put on the eyepatch.") + if(HAS_TRAIT(user, TRAIT_POOR_AIM)) + user.visible_message("You hear a fizzing noise from the circuit. That can't be good.") ADD_TRAIT(user, TRAIT_INSANE_AIM, "SYNDICATE_EYEPATCH_AIM") ADD_TRAIT(src, TRAIT_NODROP, "SYNDICATE_EYEPATCH_NODROP") diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index a457e81251..b42cb56f09 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -309,8 +309,6 @@ randomized_gun_spread = rand(0, spread) else if(burst_size > 1 && burst_spread) randomized_gun_spread = rand(0, burst_spread) - if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex - bonus_spread += 25 var/randomized_bonus_spread = rand(0, bonus_spread) if(burst_size > 1) @@ -606,6 +604,12 @@ base_inaccuracy /= 1.5 if(stamloss > STAMINA_NEAR_SOFTCRIT) //This can null out the above bonus. base_inaccuracy *= 1 + (stamloss - STAMINA_NEAR_SOFTCRIT)/(STAMINA_NEAR_CRIT - STAMINA_NEAR_SOFTCRIT)*0.5 + if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex + if(!HAS_TRAIT(user, TRAIT_INSANE_AIM)) + bonus_spread += 25 + else + //you have both poor aim and insane aim, why? + bonus_spread += rand(0,50) var/mult = max((GUN_AIMING_TIME + aiming_delay + user.last_click_move - world.time)/GUN_AIMING_TIME, -0.5) //Yes, there is a bonus for taking time aiming. if(mult < 0) //accurate weapons should provide a proper bonus with negative inaccuracy. the opposite is true too. mult *= 1/inaccuracy_modifier From 5f8ed3ee3a030384542f9dbe54ba0af8a7b798fa Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 22:14:42 +0100 Subject: [PATCH 11/16] acidproof --- code/modules/clothing/glasses/_glasses.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index a716b9f6c0..eb16a3436c 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -154,6 +154,7 @@ desc = "An eyepatch used to enhance one's aim with guns." icon_state = "syndicatepatch" item_state = "syndicatepatch" + resistance_flags = ACID_PROOF /obj/item/clothing/glasses/eyepatch/syndicate/equipped(mob/living/carbon/human/user, slot) . = ..() From 91664f5064a00aa219c2375526de03b422c4bba3 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 Aug 2020 22:17:35 +0100 Subject: [PATCH 12/16] bracket --- code/modules/projectiles/gun.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b42cb56f09..c31c96e9f2 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -600,7 +600,7 @@ var/penalty = (last_fire + GUN_AIMING_TIME + fire_delay) - world.time if(penalty > 0) //Yet we only penalize users firing it multiple times in a haste. fire_delay isn't necessarily cumbersomeness. aiming_delay = penalty - if(SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE) || HAS_TRAIT(user, TRAIT_INSANE_AIM) //To be removed in favor of something less tactless later. + if(SEND_SIGNAL(user, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_ACTIVE) || HAS_TRAIT(user, TRAIT_INSANE_AIM)) //To be removed in favor of something less tactless later. base_inaccuracy /= 1.5 if(stamloss > STAMINA_NEAR_SOFTCRIT) //This can null out the above bonus. base_inaccuracy *= 1 + (stamloss - STAMINA_NEAR_SOFTCRIT)/(STAMINA_NEAR_CRIT - STAMINA_NEAR_SOFTCRIT)*0.5 From ef53f3faeaba14b91a9e744f9eac0ee8994a58bb Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Tue, 4 Aug 2020 11:43:15 +0100 Subject: [PATCH 13/16] the old system isnt needed really but sure i guess --- code/__DEFINES/projectiles.dm | 9 +++++++++ code/game/atoms.dm | 7 +++++++ code/game/objects/structures.dm | 6 ++++-- code/game/objects/structures/window.dm | 4 ++-- code/game/turfs/simulated/wall/mineral_walls.dm | 2 +- code/game/turfs/simulated/walls.dm | 1 + code/modules/projectiles/projectile.dm | 2 +- 7 files changed, 25 insertions(+), 6 deletions(-) diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index 0ed0d01889..1bd67fbe02 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -1,3 +1,12 @@ +/// This atom should be ricocheted off of from its inherent properties using standard % chance handling. +#define PROJECTILE_RICOCHET_YES 1 +/// This atom should not be ricocheted off of from its inherent properties. +#define PROJECTILE_RICOCHET_NO 2 +/// This atom should prevent any kind of projectile ricochet from its inherent properties. +#define PROJECTILE_RICOCHET_PREVENT 3 +/// This atom should force a projectile ricochet from its inherent properties. +#define PROJECTILE_RICOCHET_FORCE 4 + //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. diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 852391112c..de9df3a23e 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -156,6 +156,13 @@ return ..() +/** + * Checks if a projectile should ricochet off of us. Projectiles get final say. + * [__DEFINES/projectiles.dm] for return values. + */ +/atom/proc/check_projectile_ricochet(obj/item/projectile/P) + return (flags_1 & DEFAULT_RICOCHET_1)? PROJECTILE_RICOCHET_YES : PROJECTILE_RICOCHET_NO + /atom/proc/handle_ricochet(obj/item/projectile/P) var/turf/p_turf = get_turf(P) var/face_direction = get_dir(src, p_turf) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 39f2d276a1..b758317fe2 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -9,8 +9,10 @@ var/mob/living/structureclimber var/broken = 0 //similar to machinery's stat BROKEN layer = BELOW_OBJ_LAYER - flags_ricochet = RICOCHET_HARD - ricochet_chance_mod = 0.5 + //ricochets on structures commented out for now because there's a lot of structures that /shouldnt/ be ricocheting and those need to be reviewed first + //flags_1 = DEFAULT_RICOCHET_1 + //flags_ricochet = RICOCHET_HARD + //ricochet_chance_mod = 0.5 /obj/structure/Initialize() if (!armor) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 6aae4955f1..3373278c0c 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -17,7 +17,6 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) layer = ABOVE_OBJ_LAYER //Just above doors pressure_resistance = 4*ONE_ATMOSPHERE anchored = TRUE //initially is 0 for tile smoothing - flags_1 = ON_BORDER_1 max_integrity = 25 var/ini_dir = null var/state = WINDOW_OUT_OF_FRAME @@ -38,7 +37,8 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) var/hitsound = 'sound/effects/Glasshit.ogg' rad_insulation = RAD_VERY_LIGHT_INSULATION rad_flags = RAD_PROTECT_CONTENTS - flags_ricochet = RICOCHET_HARD + flags_1 = ON_BORDER_1|DEFAULT_RICOCHET_1 + flags_ricochet = RICOCHET_HARD ricochet_chance_mod = 0.4 attack_hand_speed = CLICK_CD_MELEE attack_hand_is_action = TRUE diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index 096f0a0b89..ed48c24462 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -191,7 +191,7 @@ icon = 'icons/turf/walls/shuttle_wall.dmi' icon_state = "map-shuttle" explosion_block = 3 - flags_1 = CAN_BE_DIRTY_1 + flags_1 = CAN_BE_DIRTY_1 | DEFAULT_RICOCHET_1 flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD sheet_type = /obj/item/stack/sheet/mineral/titanium smooth = SMOOTH_MORE|SMOOTH_DIAGONAL diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index ba88baea08..31f8d1cef0 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -6,6 +6,7 @@ icon = 'icons/turf/walls/wall.dmi' icon_state = "wall" explosion_block = 1 + flags_1 = DEFAULT_RICOCHET_1 flags_ricochet = RICOCHET_HARD thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 75ae93a83f..db72307176 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -316,7 +316,7 @@ if(!trajectory) return var/turf/T = get_turf(A) - if(check_ricochet(A) && check_ricochet_flag(A)) //if you can ricochet, attempt to ricochet off the object + if(A.check_projectile_ricochet(src) && check_ricochet_flag(A) && check_ricochet(A)) //if you can ricochet, attempt to ricochet off the object ricochets++ if(A.handle_ricochet(src)) on_ricochet(A) //if allowed, use autoaim to ricochet into someone, otherwise default to ricocheting off the object from above From a3b3e23bac57f2807ede646fe8b04264a01f77cb Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Tue, 4 Aug 2020 23:41:55 +0100 Subject: [PATCH 14/16] fix ricochets --- code/modules/projectiles/projectile.dm | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index db72307176..e539752ff1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -316,7 +316,7 @@ if(!trajectory) return var/turf/T = get_turf(A) - if(A.check_projectile_ricochet(src) && check_ricochet_flag(A) && check_ricochet(A)) //if you can ricochet, attempt to ricochet off the object + if(check_ricochet_flag(A) && check_ricochet(A)) //if you can ricochet, attempt to ricochet off the object ricochets++ if(A.handle_ricochet(src)) on_ricochet(A) //if allowed, use autoaim to ricochet into someone, otherwise default to ricocheting off the object from above @@ -403,12 +403,24 @@ //Returns null if nothing at all was found. /obj/item/projectile/proc/check_ricochet(atom/A) - var/chance = ricochet_chance * A.ricochet_chance_mod - if(firer && HAS_TRAIT(firer, TRAIT_NICE_SHOT)) - chance += NICE_SHOT_RICOCHET_BONUS - if(prob(chance)) - return TRUE - return FALSE + if(ricochets > ricochets_max) //safety thing, we don't care about what the other thing says about this. + return FALSE + var/them = A.check_projectile_ricochet(src) + switch(them) + if(PROJECTILE_RICOCHET_PREVENT) + return FALSE + if(PROJECTILE_RICOCHET_FORCE) + return TRUE + if(PROJECTILE_RICOCHET_NO) + return FALSE + if(PROJECTILE_RICOCHET_YES) + var/chance = ricochet_chance * A.ricochet_chance_mod + if(firer && HAS_TRAIT(firer, TRAIT_NICE_SHOT)) + chance += NICE_SHOT_RICOCHET_BONUS + if(prob(chance)) + return TRUE + else + CRASH("Invalid return value for projectile ricochet check from [A].") /obj/item/projectile/proc/check_ricochet_flag(atom/A) if((flag in list("energy", "laser")) && (A.flags_ricochet & RICOCHET_SHINY)) From 3fc554d482511fcc1da69152bd01055b40324268 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 Aug 2020 02:29:19 +0100 Subject: [PATCH 15/16] haha machinery go brr --- code/game/machinery/_machinery.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 3faf6d5727..50c08a5dcd 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -92,6 +92,7 @@ Class Procs: pressure_resistance = 15 max_integrity = 200 layer = BELOW_OBJ_LAYER //keeps shit coming out of the machine from ending up underneath it. + flags_1 = DEFAULT_RICOCHET_1 flags_ricochet = RICOCHET_HARD ricochet_chance_mod = 0.3 From 9d521893648d97a9eded5053a1bb3bc174d7dfa0 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 Aug 2020 02:41:37 +0100 Subject: [PATCH 16/16] add ricochets to way more things --- code/game/machinery/doors/door.dm | 2 +- code/game/machinery/doors/firedoor.dm | 4 ++-- code/game/machinery/doors/windowdoor.dm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index f3886d0036..6b6132901c 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -11,7 +11,7 @@ max_integrity = 350 armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 70) CanAtmosPass = ATMOS_PASS_DENSITY - flags_1 = PREVENT_CLICK_UNDER_1 + flags_1 = PREVENT_CLICK_UNDER_1|DEFAULT_RICOCHET_1 ricochet_chance_mod = 0.8 interaction_flags_atom = INTERACT_ATOM_UI_INTERACT diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 2d41575e70..228c2e1f52 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -298,7 +298,7 @@ /obj/machinery/door/firedoor/border_only icon = 'icons/obj/doors/edge_Doorfire.dmi' - flags_1 = ON_BORDER_1 + flags_1 = ON_BORDER_1|DEFAULT_RICOCHET_1 CanAtmosPass = ATMOS_PASS_PROC /obj/machinery/door/firedoor/border_only/closed @@ -320,7 +320,7 @@ to_chat(M, "You pull [M.pulling] through [src] right as it closes") M.pulling.forceMove(T1) M.start_pulling(M2) - + for(var/mob/living/M in T2) if(M.stat == CONSCIOUS && M.pulling && M.pulling.loc == T1 && !M.pulling.anchored && M.pulling.move_resist <= M.move_force) var/mob/living/M2 = M.pulling diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index c9c577231e..22bacf6aa1 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -11,7 +11,7 @@ integrity_failure = 0 armor = list("melee" = 20, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 70, "acid" = 100) visible = FALSE - flags_1 = ON_BORDER_1 + flags_1 = ON_BORDER_1|DEFAULT_RICOCHET_1 opacity = 0 CanAtmosPass = ATMOS_PASS_PROC interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN