From ef549387447d527fe005044f626633865cf288c8 Mon Sep 17 00:00:00 2001 From: ven1883 <129563993+ven1883@users.noreply.github.com> Date: Sat, 30 Nov 2024 01:10:00 -0600 Subject: [PATCH 1/3] it is time the khans awaken. --- code/__DEFINES/~monkestation/martial_arts.dm | 1 + icons/mob/clothing/suits/jacket.dmi | Bin 13314 -> 28506 bytes icons/obj/clothing/suits/jacket.dmi | Bin 10948 -> 10109 bytes .../game/objects/items/storage/uplink_kits.dm | 10 + .../martial_arts/granters/tunnel_arts_gr.dm | 33 +++ .../modules/martial_arts/misc/clothing.dm | 8 + .../martial_arts/misc/martial_effects.dm | 23 ++ .../code/modules/martial_arts/tunnel_arts.dm | 253 ++++++++++++++++++ .../code/modules/uplink/uplink_items/job.dm | 7 + tgstation.dme | 4 + 10 files changed, 339 insertions(+) create mode 100644 monkestation/code/modules/martial_arts/granters/tunnel_arts_gr.dm create mode 100644 monkestation/code/modules/martial_arts/misc/clothing.dm create mode 100644 monkestation/code/modules/martial_arts/misc/martial_effects.dm create mode 100644 monkestation/code/modules/martial_arts/tunnel_arts.dm diff --git a/code/__DEFINES/~monkestation/martial_arts.dm b/code/__DEFINES/~monkestation/martial_arts.dm index b7dc5a04264e..c94851ad7b27 100644 --- a/code/__DEFINES/~monkestation/martial_arts.dm +++ b/code/__DEFINES/~monkestation/martial_arts.dm @@ -1,3 +1,4 @@ //Monkestation exclusive martial arts defines. #define MARTIALART_TRIBALCLAW "tribal claw" +#define MARTIALART_TUNNELARTS "tunnel arts" diff --git a/icons/mob/clothing/suits/jacket.dmi b/icons/mob/clothing/suits/jacket.dmi index 4e026b8cca541f90be174e9394a422a0827a360d..0c27e044491833ca6a02f01b3336a116cb90f66b 100644 GIT binary patch literal 28506 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 q(OzOp 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 Ms=6w5O3%ao7aHa@!vFvP diff --git a/icons/obj/clothing/suits/jacket.dmi b/icons/obj/clothing/suits/jacket.dmi index bb0ea8ee80b9c7e2b39c7f14acdaeb30265d10d0..afda812a26e3e612c661d3da12c85f7003664717 100644 GIT binary patch literal 10109 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 literal 10948 zcmZ{Kby(EFxA)Q=OG~G8i*$D`(%pj6p|Uj6DIthR3zE{(-O?f59n!TdEb)H*-RJ&s z-{;;xn4MU5&Y5%0XHHDCww5v;HYGL)1j18QQP2TC*MYxIOmv{7`RFzW0wLM>>KVOL zc&3w_x!zBfUIrN7Z`HmK@Z*G3sAicAMR@9M zC*P7Omd}d<#l+5YJhW~rND4ECLld|-HZI5c8;XrE2HDJ})!SR;{RQi?zxWl&OLTqy zRE-%^?^n-4Xdj0tSZTd(TZwIE=IvQA$J|X!nX{e9@HcTM3FVbSJfuP&iAbz|PciL{ z9!ayu5zD*3ZL!u1u1IUcqL~&f5_!nL)+~3!9+T*E`PWr`*!&b>+fw$Cd3 zd47KFNYpVn_m!f$B)V?(Z@iwZhMq<|iKh0H)yoj{?M?S3MO5BlZuJ*qrwP|_f-NXV z-ME~-tCi%HE20kT#vjHVviBq$U=kWyTKH@vF@9&cZb;#BXexQyNIGmJ95UG9*okug z8Qi=G*f*8&Ak{VJ3Yvi^{<%&@r8GH6{N zxc~>zmJKm;0MHNuecS#|a$_e1P<_;Ytn#u8GKAqJ9}`%IYU|jCm@v8*1pu21c+)CC zi;+~Lt84a{S^60zrs;9D>iX7!{~#a`>KtgGbK_O03m4_~VU(Ak@zLVZcC6-lz-wPy zZx=x*^7m^+5h)lM>PA)*e|Lw)+FVgBlMhd=Y3~G$j}G@2A#S#MxLf$_kJx0x0IL3V z{2O1BORaR!HTf)Pn*}ppfz}BT#43K6R0WNgN5`=}v;sFef7<6Q9AL-ehCP3tA-AQE zWMRk#Zp&E+DZo1_9~1@lNXMV1Ni6N`n5FqV$w2gu-R^oGY0MA$%Pb0-6!;(t3Q?S- zq@c-*e2RYr5PvT>NuehSLaYdzogYt)W*xKI}L4jqG+cocw zrc63=L0Wq+G|$Tp5(T!1C|=1fGBSs1;vww#h%1#J+XJH5U0GMPvA{$Ke`2>y=qQ8!RQNfE|fTX5prt@N2!nz_J;H%A+U_@pUIzWwx7oKB<5h^%_ zVY95sCMmP>E6DU)1wZUrB}`5TP#2SL73{vG?-~La-C4%HzWlWH(TYsn3_L$&7rpVS zvy3hnsrz==o#}=tt^%W;vH%prNobB#y)|)9$dC&JGLSZcnN4Yp)jmDI_P2&IAVdtu z;g%bD=rcNJHV99KLQ2@6{tCeELG5P-3yc);G&6cYLrKPjm?1|W<}pAK+tKx1)KonU z!h5;`sLVF?mN%JSB$BGhQ`^ihOj4|l|7wn0^8UDhg&gfS0_@e53BN}KPyjX<_+W-T zrTb(`>G_RQOk#IL$f)Dsl#Q1w*ao>Zqbg^Qo#uk*@oMOlB`71TDa)s0f1ZND)mnIv{t>ev(Q zDgq*8K33Dw*6vJ{ot}CZf56p5+>MU4;i;OAg@%R}ql^+EZ*6b@5kf&^v!J6`(Xp-K!szhnZ7ah$BvL{$}2&tHqI?gdasow_W%#$d~;hCvl)V?m#bq zEysSxpGFZoc<61&f4`kK)Z{qRn!B79T(VybI;9dL)>pn6DrHwvI}LXo+D5J5;VNq* z)XbwjYwvno9rz?caBD%mQV_Mt^#V&iZ-OvIE)Tgtn@um61e=sT{6B+Y5c_`({@qx> zAjJ>Gm(zrNzRrm}CpDFYnw5oxfrTZ!$?`}yC11Va`)DTru(e-=q@VZAJjgxrLAOZj zoO&SdR}J#@bHR6FG>%SA;mV+igLf(_Dl%qf)LxYfMawL-?z?fut!ZiG_xC49A1CME zbd5Z#g=Z5ofOFE)(kATdO!OPZJ*Y)K$~#l@+B z$x`agEIxM zEteMirR?*BTAd->=)9KCxrq`yoOT#S$A~F9UhoSZ6;L+A;iI<{`1UoL(HBKIIb+#E$mwOp}BN6tr!b+Lx>{seea-^XlHf6W>H zguY26GkxUCFf{cCC!hzntUhlOv2c^`%}3(nH6JSDZl}-5;A>DF{kjB2y$1uEK3C9S=fcs30 zqTg-od-Wu;v^4j3W#zom8gy!JaA2Ux&vB!o#s?PlFK1#|T7=JrYbZoLna8rkF+Oc| zUP=s=a=daA*lN33)$Nr!_vae6*&EB6IK0+cfT*e>-AewDu%3)=^WO+p^Y^(zrNuf) zaO13C)IJOsi`5sQmG&W0!lR0bQWex&ARPmc?{B$jl0+{#M%lMc*fpwmo2CfL06eIXO9GmwS=}oZM0u4WcKEr5sME<9@fESqlD-kB=&r%^K&Nd3`prE-u_^oSXnd zJQl4{-j6j%)B{Mtd~j~ESeuu%wY6O}T!0GM+UEZO{FJD@BcAKmxA*g^(G)_?Y{+#M z@cPZtf}ALi>8d;madt4U7&8~iJX1B_o-JZD!+gMM!|Zp%W=!(6K$Ymp_jRObVdj8(pD9Jv9Gw?0O;D@B;#0Tjn*Q4o z7sW5w+1W9vDC25M)iR|5C;{W}^zwRTV*IfxuS-Q$_0@|j4ZuJ?e0ZsqC5BdRaF`NM zZV0{>4y-k-PKC@9wuR0<4CH%jrFdweqwNO z+~FIP&B#)#$vT^q8^CYhZtU!!mCeL3$Q#LK0xKJJ>{(Gr!K_fJxhrXU790 zVpf?HwN}jR5u57ZJ)fdu;g>J5vp?T!8QyxsJeHm;`t#1@SU^^0VOpN}qCBnISQT-f z?=8F;{Ib4y&3MC1pV#)Zl0`3O7^3gXS+_KNn`;2krH6PHG2vYl)+LMAJoST zxo*7>UIB5F^uPBCk3?mqgwHAR0S^R9Ha$G7{uL#rM^XTT`I(wfGT))#EdTZ?0)g1N z*b$4P;P2kJE=dZuHYN)U3@jE-_c)y8hC-n#sPswz043wq8F5)rpp(V+y+&BehlY#V z0&v%0F;J;%C=gE0F=@qt0y1l54)S0*#w!#cu_*2ZRyZz1HPo}&^fHixzgJRje^zK% zN?rZzaGFh{VVXf2uUYTo@ILl_h~}-Ev!fg^<9BmpMM6%Gb$%pC4Q4PV(#8SA4j>DF zJpB-g$m69Cm|h+IO0kYGbxuw`*JTj^1G{>9Q0nUHLK=vr6JlfK&CD_xvmF5Nz*XIE zbnN(5BS&~XmbGG;fq4H{&3@~Srdwj%B5d1eZk&p0?o?aD-v%6b(ZbR#;kN&D{Q2th zmP!Z4`QYgnwswZuRY~!$>xDU(m#qasdun%s9w|2v!sRRCqCSkqD#DKUOJos0Yom#2 zw~flrAUq7yz^xGlW=edzex@q&^9$%u(;g%B14N;-C|+9~Cj)|Z(3_=w8M$%P>ScbV%-Ga9J4Ot(nEz}%chLPA397o;_x1IBF- zi3WAJBT)}FcdO;@lzzlnXs;7Eju}H)f_`0cWjq{wRueEj{Hu&8BqnIlNmm@T&ZL}z z-zJQZsLbUFKycgNV(Xd&N+0ldH#R;tH;Wl@k@b;nn%6;+`P7y$f)x+EP*0yX;L6gH z{}_L@BM7e~SS4=FSQbF_xd*zseSzVp2_fE}O(WqAy6qpht`CW{ z*4w1IvyN~&S)fr3Z5|R2=r!R)Sd}{M05Qm`F@4+Ptq#JIFrP>G0H$?l;(IR03}d<1 z-j564Ed0^Y(S0{p(vz^J(whjS{Etobvp-s_nwdKhN&hZ06kOlwjFE17R_|}j%*>b; zY{J6izHPLCM#lK&^~I83qF_)h+vj|zy+Q=@j39B7;Q;r;#NKR{qR08BpRFxZRFMu* zg!QsxjvU&)0T&t0FB9%xCgq7>(gxz+UM!~=ZB$3P)1eW$S^|FcmzH&}e6iMDs~~yE zt(PW$7jK*1QaP>`_e za%cLze_V7l_>-#T>cO8ZPuO>#hhY!}iWS zbGAA~N~DKVe<{3r6VmFQ?yCK#Rh`j5lSR+$Bk1vgkAo$3jV&xV7-_z0!{vQLflAP^ zPKzP@x)RssME@KO0|N!5rmhYqBa4WM!QRf2!kbcFM8XVEi%C3+1fn(q1yq~HIZNaN zLwVGbdPuLZmkut7e(yeu2=knY78!ITnpF7>Ga5c`wNyB~xl%cJ6tm>C_PI#9cC6FfrkP%Cleu0f_)mVhRP$$#q(oEHCXnh>+GX7>Ig1(vIBBZjs0Fr_@@rshfiz ztuWqJd+gxE7%ES_c|lak8d+47rXFr=MwAPD8xqGQJNc<0Z$|n17*vJO((393$uX2F zI*BEw<2J0sNpiyE9V(=}HSYC++u7ybICXdhIy%Ygw`1FTOk7;J*4EZBqZoth+IZr zTRP()I8%2K5Gjp!8pXa(+$l%QM;Y+YjRXRkJS>WMDWv*|+|#on(l*Q}`Eh=J{_ab_ zlQpZTR5md9vW_&++ly(Dc%MxaRwX-sHufR!Vm!jT-WG0{BbI3hm}!sr5{u0N&+Bk< zLLj267q5X>$YWB4)pX;;SOni>{vOZ{3YvathUU;9B;`FAvKUcD@%J=AlJ!DAy0Z}* zKd`+$8CwNaM|5y}j@&HV={1%_CO8LP*J|Q~e?d`tuOAv6kM@92pJ}-qT;*NJp6+GofT4 zv(ZGT>C5=17!XGfylU|3bxPwmb=GgBOCOUt5Gt0Lr-vhn`M zd*eaT2W32zT&;lmt%W9)Ko~cdMivN=L8C=09Y8tG_e0{&%}yNdd74f zf72IN6w7F9C$4XV$+BJq+wfw6WMyT6Np0qPrq@l22#rO*4)r08n8=S6^M(RfBslDQ z_ll8raXh&lcKAk1?)tFSiim6*hIA(!MNSsAGR@G3Nr;NI5!(a#O(p6vbM97p z&hD}XY3Cn@wO}xEa6|uZlr$tzOW_0Y)}wAjJ2So;9352k{?I^CcOtFQOjg^yik_z$ zb4eT@8@u~88pkye#0E3&!wB};m|BcvqF_gnkwG&GB8H`lvchJ!fI`*`F!w0B^F(LH z{#pD%pOq|v`a0t-^xBX{6+CE@LR@23=H7_^1UrEUkRq)0pLE@TK9%Mr2cDl_D7KJR zjw?k4zC=mCyzp2LC+pf;ab9&Tvxj_EM^}TDS(54ZpBLr z7ObM2hr#lG1R!888DE80;kCN3takDgW|Nnd(Ve#AkLpu5^R-XiyFy^2s_(xU81k6` z%jSR2or~4D?Ak%eNFw#7Hl3W+toJ+fFp1=Q-Zu~^z4sDpckMWIC?ZDS*iLF*e;d1e z-a$s((YsK)=ufQu`+oUiLE3KJXtzNg`NR(hDVC;HBStJ?Yx2P4z`DVqAtE9kTN|6i z)YKo%qr^E>x7x4vdG|ibDdY7-kH_D)y~%<0o?LNmfLs2oaU-?2d3;%4Icm#nd^nD; z^;JMscn7mN!b(m~4r7TFyuD3U(17^ndR9>GnAP=Ct(3tAlNFTNs;?$!?Nq-rWt#i$ z>tH%!UfCNIgh13rWPtQ^5z#5MdDMxKuv@CcH=w@Uv_SyC+dXly6LtbNGIId9Y@C9| z#@ZH#Kdk~kC)XmlS0W2Iv-=9co|p1{s45CZ+Ey(D?@pC*TpM^~)c**PkeG!sOqgC1 zbX(X-vWSTiut^zYs6rG3H_s~CSkPJK)=!=zf?XKenZO1di9RP${e{opZKDm!wK^gf zfLO?R*7qH9tk;8)CJwGO$`?i)Ucdg>Va{aX0&czx@@{zeq)=E77b7+{?8TTkMQQF` zsC7UiAS5O2dpE1~3Q7x$wLCj!F;&@LSQ&9p9{DO7>BhStCkJs5$k7W<@so?PnI^ID zlOx$GJ^Pn$X#q8};{NXiga6aT`0u36RLlPRwJ1vxx^ZQ=U*7&uR-5qe^ZrcgyVpi) zmEAv1QIctLwqIs5tPy=#Qh&wnNhZ;QBGXl8uK;V&6;Si1?(oTRgc-KlA)cH>2JoWM zYwNSRW`7!-J|#T$6l!@d5BacOXV*PFp01uwKXwz4!8j1K6)_2VDA!k4M1j4>6|Td( zT+bkoUDoiWdPYJ&>GSh~v&Y|1UxCU(xRNFX59X))sHH)lQry6`$%ce(yFd_X+y^!0 zw#mo#*9ds=$5)`>9H}$iNIFmyB}I6^Fzg!GVJrqx`R9G}jtL-T-z+T;u)Tz2I>hf? z6urRab#Fp};uxsT3JEmyJ7&V zpMd(t^a6vJ)r(-AB)CTXR`8^x;9Kxf?13oa6-xfuL;PuYmt|lZ_1YSowpaZ6B_azu z(YZm1wh0^GnU7Nsm4(z!g@pofnTjorQz4`-2f1k7k0CvLI(Jz9njZ3<(}2XxslSPI zeCwlR3(0vHZ$}3X@5yo;^I^?vHyeHzJ1Wm*;7f!dia%;ujxsbGB1>FYAxePTnJ;i-Gx}b-kge%Po`dO zA8WsifY&!qX5K_3`bQM zw?!|sA^1>0)mXNPX#q-8IcWjtKpzBZ@uss+A+sD4FTqv8!`*z1tc0@W+|DF5wR#r6 znXY1t*d&B!tduSW*{=x3l`Jry3jo4#uh}i&gR8cbEQC4CO8#*=@_x&Z9TgvzzHO9x zw6q%#_i&fphIyPIyt~ck$fHbHoy7N2kV;_fiaKgo_>Ua}K6`ylVr} zP*rMjVVB~bM~>Dp6^X{P!6P*hT1(TxcCyEN-rl${{!AWH2&f=@$~d8 zsw2avl_*}^6#+cusQ%y57i*%$+=$sc2>Bf*x}w7RX!z$-Rm8?jnGfK9fr2|#PsOh0 zvfy+e8K+5b3Tj(#@%5A2_()$;W-Wez?q)tASQMK8T~p`!!EiB<&Jg_xg+L;hO4v2n zn%d<|f&c=6Ftf5=I!1M_z%2cr*q$b*1)=`^f+FqY6eM7VD{~Hx?k&MW%)Jr@WbdV? znGJq8rt+EEs9?x^A1saT5*?H&EspNSqZfGgq#Y3A)|d8GNEojZUqRs$(OnESHowye zH7Ixz8e%9P=D2X<{^88e*SEVT|ME{XW(rx3`0*aM%9gT1H9hV6`7>SjlH%XiXDFRf zY-B+4x;P;GSXo&a2j(!E75Y6yF0zYY9{c+0If7>#Nm5d>>$3Id%>kD0;v+^a*(H#R z@_6L>=TOUuKMULJ^7cOkXG#w<{N8&m^|kJ65iGUV?FA(ZEE=;nH0TCK!$%q4Hq@?; ze7_M%M~xn+{16j~wNgulmp6hK~1HJe|5WLm{4-4zjK zmq|-FYYSV`a_(~qy;=DTv(=^T58iXIIvmn~DrCj*;92li4Thnt&ODxM;v<%3d2M+}NjI3(aZF-A{pTnEW-c9? zmb_^3sTh+tvcBMh;J>Fr)D;!y>jR(t(S@;AmiKT9jW2(Oi6LNBBSa0 z+2m#Qg3|g0rQ3K@9L3o^uHF5iCa4owB_SnYbo_hjH}V)1LwPRq&Lr(fyiM?Bx*6#6I}{&RQVqqiD!%0vOdCR*L+h0iX^R+Lz~^!+O@LgXqH{*s(!3VfAd9G&LQZn z#8-DhPA&-hwtNaJ;=SWk+El;qz?9DHfvVD}#$3Hb1f)Q%=PE7JqH>E4*b&VW%7hJM zAWu7tY@REyqorbDukuC?8VK9-HO6BKyx79Q5{%TW>o57%(iO?9B7V^jqY2F&QD0or zHrzg}`qi|-b`m z{9y$FCUl8%9!ytDg#V+O^uHTFn+n|>nf9`(zrV!w|CvQG-WO2d-J0n7ECEs&=*M*V z_co&Q*LE~+Kx8pUpH-5j&-ya$y5+;lW$3ux+z=!uD-Ni^qfLSf$F-DH)1!q^eRaVw zM&Fe$BnRy5t+R6&NR;stvlGj>>bkLi8J+L`Vp^V=^TXb{bxSWRzvvZcn?Up810<>?a5^DNQ6qS@caawkR{E=3=sp^5?U;aDcLs= ziJ!eaL$DH4{AddpYqua{k(aTNW-B~#oBOy`Z$-Vn%RL7^E+J=P# z5RznDR5kPtKZ$^VT!IdyASFRvrm^R~Jv1U}oOxON_QEQmHxJ zsBt@wVAs@i$ap+U4egniEf$w1cZdpUz~^o*5d_2 zcX{`n5!`ewNPC=N*0Rz1B6sRW21b8V$|y?m^Zz@+izG9t{Q@XejicADbBMeU7M9PS z?ELdb-SbmX5jh|zptRDZ?`{=pT=0Xth*3{2*l|wTE8>UK8u-y5isxTt1rQiRv&=^0 z#)qhalp7Qfz&(j;9adidJJR|vT<2)=Kl&hTgFHAm*C`j!!<)5sy(p1 z?8AnX(M=iY$kp=N1>%?R$I}@8c|umziK9QOsGy&S8EpFnWhXe2F1L*8O`5TjHrB6s z+IXK^k;i2ZjafxxP()vUr>R3(YPH8E{uN|KZOkwPurL09$sZRNgA96c!csW(H?Y2T zaM(fYV@$bv=mrfx+7mk^L9X2XVf3BzmqM~=I5X{Oa(RxOa_aiowBUpyZ?}Wxz5ZDU zAiR0QDP(GKG~o28ML($h;(2o!=my`}+MA4h6&ufXu> z*F9LJjH!n(5prvckLG9-yiVJd}C!wz)8d@ON@( z8~g?K^Y&s4XAJK-hd+0BzsF8hGLlyl!al=X8r16WRml?ga9mRzk$z#i@FtjbTNMaY z_5hDQD3V!i`kHYAYj}uo?z81IZ9mhiB|nn{)I(@cT_3y}m+l3J?Rsx+JrmqJ1L{$^ z7TS0OY_PDC;&J=8j!E~w=4Oc#?QneFVQf;>u-|+HJpnf=1>;K{x_D?O`}wQV=T@L4 zyt!i^(elcK(wmS)B2Hlz7d!rJKC8c)edHThoSTC1B&nY+6|CQGvYa-;encfnaT)YF z6n}YS&3ld|+ws({U!V0I$U@-oyA0znPwSb!qZvh8i4JNc7-?$E@~^)7YR=exHG;;s zyTc^ug)|FU!wuG-Ir&$uYP!_%X+qVo)%{#00_lOIqCq=s0Qd-kGc^L&2a>?6y;K10 z<#D`D8agYdeem{7LY|d%HCFU3nf-E zfqCKGSBCqM3TV(%zfSRGRrtI>?zY5xiS?7rhG!QpPz3K5<>f^QhTF?G7zQ#^Jj+CI4_yOw;P;w#E#PRjq`Z|^*AJfSRxNtIfK=Z68WQ$ebVS_&0% HRw4fntNHmS diff --git a/monkestation/code/game/objects/items/storage/uplink_kits.dm b/monkestation/code/game/objects/items/storage/uplink_kits.dm index 479cd08b18c3..934e853f3820 100644 --- a/monkestation/code/game/objects/items/storage/uplink_kits.dm +++ b/monkestation/code/game/objects/items/storage/uplink_kits.dm @@ -215,6 +215,16 @@ new /obj/item/gun/ballistic/automatic/plastikov(src) new /obj/item/ammo_box/magazine/plastikov9mm(src) +/obj/item/storage/box/syndie_kit/khan_package + name = "Tunel Khans Khare Paccage" + desc = "It's a syndicate box written all over with gray crayon." + icon_state = "syndiebox" + illustration = "writing_syndie" + +/obj/item/storage/box/syndie_kit/khan_package/PopulateContents() + new /obj/item/book/granter/martial/the_tunnel_arts(src) + new /obj/item/clothing/suit/jacket/det_suit/khan(src) + #undef KIT_ITEM_CATEGORY_SUPPORT #undef KIT_ITEM_CATEGORY_WEAPONS #undef KIT_ITEM_CATEGORY_MISC diff --git a/monkestation/code/modules/martial_arts/granters/tunnel_arts_gr.dm b/monkestation/code/modules/martial_arts/granters/tunnel_arts_gr.dm new file mode 100644 index 000000000000..288cd6953074 --- /dev/null +++ b/monkestation/code/modules/martial_arts/granters/tunnel_arts_gr.dm @@ -0,0 +1,33 @@ +/obj/item/book/granter/martial/the_tunnel_arts + martial = /datum/martial_art/the_tunnel_arts + name = "odd scroll" + martial_name = "tunnel arts" + desc = "A scroll made up of torn books, scrwaled with gray crayon." + greet = span_sciradio("You can visualize how you and your kind will one day rule the spinward sector with a gray fist. You've learned The Tunnel Arts. You can review what you've learned at any time within The Tunnel Arts tab.") + icon = 'icons/obj/scrolls.dmi' + icon_state = "scroll-ancient" + remarks = list("I must prove myself worthy to the masters of the maintainence...", + "What do you mean you can clone yourself...?", + "I feel someone with the fireaxe running away from the captain...", + "I don't think this would combine with other martial arts...", + "Graytide sectorwide..." + ) + +/obj/item/book/granter/martial/the_tunnel_arts/on_reading_finished(mob/living/carbon/user) + . = ..() + update_appearance() + +/obj/item/book/granter/martial/the_tunnel_arts/update_appearance(updates) + . = ..() + if(uses <= 0) + name = "odd scroll" + desc = "Whatever was written here, you can't recognize it anymore." + else + name = initial(name) + desc = initial(desc) + icon_state = initial(icon_state) + +/obj/item/book/granter/martial/the_tunnel_arts/can_learn(mob/user) + //someone ought to find logic to make it assistant only, but I don't wanna + return TRUE + diff --git a/monkestation/code/modules/martial_arts/misc/clothing.dm b/monkestation/code/modules/martial_arts/misc/clothing.dm new file mode 100644 index 000000000000..ac7e3d90eab1 --- /dev/null +++ b/monkestation/code/modules/martial_arts/misc/clothing.dm @@ -0,0 +1,8 @@ +/obj/item/clothing/suit/jacket/det_suit/khan + name = "khan warcoat" + desc = "More experienced khans sometimes get their hands on Nanotrasen kevlar trenchcoats. And when they do, they inevitably tear the arms off them to show off the grey jumpsuit underneath. \ + Bears a crudely drawn kanji symobl on the back: '悪'. It doesn't look quite right..." + icon_state = "khancoat" + inhand_icon_state = null + body_parts_covered = CHEST|GROIN + diff --git a/monkestation/code/modules/martial_arts/misc/martial_effects.dm b/monkestation/code/modules/martial_arts/misc/martial_effects.dm new file mode 100644 index 000000000000..d2ab1c6f70f6 --- /dev/null +++ b/monkestation/code/modules/martial_arts/misc/martial_effects.dm @@ -0,0 +1,23 @@ +/datum/status_effect/no_gravity + id = "no_gravity" + alert_type = null + duration = 2 SECONDS + status_type = STATUS_EFFECT_UNIQUE + +/datum/status_effect/no_gravity/on_apply() + owner.AddElement(/datum/element/forced_gravity, 0) + +/datum/status_effect/no_gravity/on_remove() + owner.RemoveElement(/datum/element/forced_gravity, 0) + + + +/datum/status_effect/amok/proc/exclusion_check(mob/living/potential_target) + return IS_HERETIC_OR_MONSTER(potential_target) + +/datum/status_effect/amok/tunnel_madness + id = "tunnel_madness" + +/datum/status_effect/amok/tunnel_madness/exclusion_check(mob/living/potential_target) + return faction_check(potential_target.faction, list(FACTION_RAT)) + diff --git a/monkestation/code/modules/martial_arts/tunnel_arts.dm b/monkestation/code/modules/martial_arts/tunnel_arts.dm new file mode 100644 index 000000000000..654b474299f7 --- /dev/null +++ b/monkestation/code/modules/martial_arts/tunnel_arts.dm @@ -0,0 +1,253 @@ +#define SPACE_WIND_GOD_FIST_COMBO "HD" +#define CHAOS_REIGNS_COMBO "DH" +#define ONE_THOUSAND_FISTS_COMBO "HH" + +#define TUNNEL_ARTS_TRAIT "sleeping_carp" +//god's sketchiest solution + +/datum/martial_art/the_tunnel_arts + name = "The Tunnel Arts" + id = MARTIALART_TUNNELARTS + allow_temp_override = FALSE + help_verb = /mob/living/proc/tunnel_arts_help + display_combos = TRUE + /// List of traits applied to users of this martial art. + var/list/tunnel_traits = list(TRAIT_HARDLY_WOUNDED, TRAIT_NOSOFTCRIT, TRAIT_BATON_RESISTANCE, TRAIT_PERFECT_ATTACKER) + /// Probability of successfully blocking attacks while on throw mode + block_chance = 50 + +/datum/martial_art/the_tunnel_arts/teach(mob/living/new_holder) + . = ..() + new_holder.add_traits(tunnel_traits, TUNNEL_ARTS_TRAIT) + RegisterSignal(new_holder, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + new_holder.faction |= FACTION_RAT //:D + +/datum/martial_art/the_tunnel_arts/on_remove(mob/living/remove_from) + remove_from.remove_traits(tunnel_traits, TUNNEL_ARTS_TRAIT) + UnregisterSignal(remove_from, list(COMSIG_ATOM_ATTACKBY)) + remove_from.faction -= FACTION_RAT //:( + return ..() + +/datum/martial_art/the_tunnel_arts/proc/check_streak(mob/living/attacker, mob/living/defender) + if(findtext(streak, SPACE_WIND_GOD_FIST_COMBO)) + reset_streak() + return god_fist(attacker, defender) + + if(findtext(streak, CHAOS_REIGNS_COMBO)) + reset_streak() + return chaos_punch(attacker, defender) + + if(findtext(streak, ONE_THOUSAND_FISTS_COMBO)) + reset_streak() + return thousand_fists(attacker, defender) + + return FALSE + +///Space Wind God Fist: Harm Disarm, stuns the target briefly and temporarily causing them to lose personal gravity. +/datum/martial_art/the_tunnel_arts/proc/god_fist(mob/living/attacker, mob/living/defender) + var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + defender.visible_message( + span_danger("[attacker] uppercuts [defender], sending them skyward!"), + span_userdanger("[attacker] uppercuts you, sending you hurtling through the air!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) + to_chat(attacker, span_danger("You uppercut [defender]!")) + playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + log_combat(attacker, defender, "god fist (The Tunnel Arts))") + defender.apply_damage(20, attacker.get_attack_type(), affecting) + defender.emote("flip") + defender.emote("spin") + defender.apply_status_effect(/datum/status_effect/no_gravity) + defender.Paralyze(1 SECONDS) + return TRUE + +///Chaos Reigns: Disarm Harm, Launches the target backwards, confuses them and causes the target to randomly lash out at others. +/datum/martial_art/the_tunnel_arts/proc/chaos_punch(mob/living/attacker, mob/living/defender) + var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + defender.visible_message( + span_danger("[attacker] slams their palm into [defender]!"), + span_userdanger("[attacker] palm strikes you, rattling you to your very core!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) + to_chat(attacker, span_danger("You palm strike [defender], corrupting their Chi energy!")) + playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + log_combat(attacker, defender, "god fist (The Tunnel Arts))") + defender.apply_damage(30, attacker.get_attack_type(), affecting) + var/atom/throw_target = get_edge_target_turf(defender, attacker.dir) + defender.throw_at(throw_target, 3, 4, attacker) + defender.apply_status_effect(/datum/status_effect/amok/tunnel_madness) + defender.adjust_confusion_up_to(5 SECONDS, 10 SECONDS) + defender.adjust_dizzy_up_to(5 SECONDS, 10 SECONDS) + return TRUE + +///One Thousand Fists: Harm Harm, Delivers a lethal strike, and produces a duplicate of yourself to fight with you. Only works if the target is alive, and has a mind. +/datum/martial_art/the_tunnel_arts/proc/thousand_fists(mob/living/attacker, mob/living/defender) + var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + defender.visible_message( + span_danger("[attacker] punches [defender] with a rapid series of blows!"), + span_userdanger("[attacker] rapidly punches you!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) + to_chat(attacker, span_danger("You rapidly punch [defender]!")) + + // Borrows this trick from standard holoparsites + for(var/sounds in 1 to 4) + addtimer(CALLBACK(src, PROC_REF(do_attack_sound), defender.loc), sounds DECISECONDS, TIMER_DELETE_ME) + + log_combat(attacker, defender, "god fist (The Tunnel Arts))") + defender.apply_damage(20, attacker.get_attack_type(), affecting) + + if(!defender.mind || defender.stat != CONSCIOUS || prob(50)) + return TRUE + + var/mob/living/simple_animal/hostile/illusion/khan = new(attacker.loc) + khan.faction = attacker.faction.Copy() + khan.Copy_Parent(attacker, 100, attacker.health/2.5, 12, 30) + khan.GiveTarget(defender) + attacker.visible_message( + span_danger("[attacker] seems to duplicate before your very eyes!"), + span_userdanger("[attacker] seems to duplicate before your eyes!"), + span_hear("You hear a multitude of stamping feet!"), + null, + attacker, + ) + to_chat(attacker, span_danger("You conjure an illusionary warrior to fight with you!")) + return TRUE + +/// Echo our punching sounds +/datum/martial_art/the_tunnel_arts/proc/do_attack_sound(atom/playing_from) + playsound(playing_from, 'sound/weapons/punch1.ogg', 25, TRUE, -1) + +/datum/martial_art/the_tunnel_arts/grab_act(mob/living/attacker, mob/living/defender) + if(!check_usability(attacker)) //allows for deniability + return MARTIAL_ATTACK_INVALID + + add_to_streak("G", defender) + if(check_streak(attacker, defender)) + return MARTIAL_ATTACK_SUCCESS + + log_combat(attacker, defender, "grabbed (The Tunnel Arts)") + return MARTIAL_ATTACK_INVALID // normal grab + +/datum/martial_art/the_tunnel_arts/harm_act(mob/living/attacker, mob/living/defender) + if(attacker.grab_state == GRAB_KILL \ + && attacker.zone_selected == BODY_ZONE_HEAD \ + && attacker.pulling == defender \ + && defender.stat != DEAD \ + ) + var/obj/item/bodypart/head = defender.get_bodypart(BODY_ZONE_HEAD) + if(!isnull(head)) + playsound(defender, 'sound/effects/wounds/crack1.ogg', 100) + defender.visible_message( + span_danger("[attacker] snaps the neck of [defender]!"), + span_userdanger("Your neck is snapped by [attacker]!"), + span_hear("You hear a sickening snap!"), + ignored_mobs = attacker + ) + to_chat(attacker, span_danger("In a swift motion, you snap the neck of [defender]!")) + log_combat(attacker, defender, "snapped neck") + defender.apply_damage(100, BRUTE, BODY_ZONE_HEAD, wound_bonus=CANT_WOUND) + if(!HAS_TRAIT(defender, TRAIT_NODEATH)) + defender.death() + defender.investigate_log("has had [defender.p_their()] neck snapped by [attacker].", INVESTIGATE_DEATHS) + return MARTIAL_ATTACK_SUCCESS + + add_to_streak("H", defender) + if(check_streak(attacker, defender)) + return MARTIAL_ATTACK_SUCCESS + + log_combat(attacker, defender, "punched (The Tunnel Arts)") + return MARTIAL_ATTACK_INVALID //normal punch + +/datum/martial_art/the_tunnel_arts/disarm_act(mob/living/attacker, mob/living/defender) + if(!check_usability(attacker)) //allows for deniability + return MARTIAL_ATTACK_INVALID + + add_to_streak("D", defender) + if(check_streak(attacker, defender)) + return MARTIAL_ATTACK_SUCCESS + + log_combat(attacker, defender, "disarmed (The Tunnel Arts)") + return MARTIAL_ATTACK_INVALID // normal disarm + +/datum/martial_art/the_tunnel_arts/proc/check_usability(mob/living/khan_user) + if(!(khan_user.istate & ISTATE_HARM)) // monke edit: istates/intents + return FALSE + if(khan_user.incapacitated(IGNORE_GRAB)) //NO STUN + return FALSE + if(!(khan_user.mobility_flags & MOBILITY_USE)) //NO UNABLE TO USE + return FALSE + var/datum/dna/dna = khan_user.has_dna() + if(dna?.check_mutation(/datum/mutation/human/hulk)) //NO HULK + return FALSE + if(!isturf(khan_user.loc)) //NO MOTHERFLIPPIN MECHS! + return FALSE + return TRUE + +///Signal from getting attacked with an item, for a special interaction with touch spells +/datum/martial_art/the_tunnel_arts/proc/on_attackby(mob/living/khan_user, obj/item/attack_weapon, mob/attacker, params) + SIGNAL_HANDLER + + if(!istype(attack_weapon, /obj/item/melee/touch_attack) || !check_usability(khan_user)) + return + var/obj/item/melee/touch_attack/touch_weapon = attack_weapon + khan_user.visible_message( + span_danger("[khan_user] carefully dodges [attacker]'s [touch_weapon]!"), + span_userdanger("You take great care to remain untouched by [attacker]'s [touch_weapon]!"), + ignored_mobs = list(attacker), + ) + to_chat(attacker, span_userdanger("[khan_user] carefully dodges your [touch_weapon], remaining completely untouched!"), type = MESSAGE_TYPE_COMBAT) + khan_user.balloon_alert(attacker, "miss!") + playsound(khan_user, 'monkestation/sound/effects/miss.ogg', vol = 50, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) + return COMPONENT_NO_AFTERATTACK + +/* +/datum/martial_art/the_tunnel_arts/proc/check_block(mob/living/khan_user, atom/movable/hitby, damage, attack_text, attack_type, ...) + SIGNAL_HANDLER + + if(!check_usability(khan_user) || !khan_user.throw_mode || khan_user.incapacitated(IGNORE_GRAB)) + return NONE + if(attack_type == PROJECTILE_ATTACK) + return NONE + if(!prob(block_chance)) + return NONE + + var/mob/living/attacker = GET_ASSAILANT(hitby) + if(istype(attacker) && khan_user.Adjacent(attacker)) + khan_user.visible_message( + span_danger("[khan_user] blocks [attack_text] and twists [attacker]'s arm behind [attacker.p_their()] back!"), + span_userdanger("You block [attack_text]!"), + ) + attacker.Stun(4 SECONDS) + else + khan_user.visible_message( + span_danger("[khan_user] blocks [attack_text]!"), + span_userdanger("You block [attack_text]!"), + ) + return SUCCESSFUL_BLOCK +*/ + +/// Verb added to humans who learn the tunnel arts. +/mob/living/proc/tunnel_arts_help() + set name = "Remember the Arts" + set desc = "Remember the martial techniques of Maint Khan, who brought to the Spinward Sector the knowledge of the Tunnel Arts." + set category = "The Tunnel Arts" + + to_chat(usr, "You retreat inward and recall the teachings of the Tunnel Arts...\n\ + [span_notice("One Thousand Fists")]: Punch Punch. Deal additional damage every second (consecutive) punch, and potentially conjure forth an illusionary Khan Warrior.\n\ + [span_notice("Chaos Reigns")]: Shove Punch. Launch your opponent away from you and corrupt their Chi energy, causing them to flail madly in their confused state!\n\ + [span_notice("Space Wind God Fist")]: Punch Shove. Send the target spinning helplessly through the air with this vicious uppercut.\n\ + While in throw mode (and not stunned, not a hulk, and not in a mech), you can block various attacks against you in melee with your bare hands!") + +#undef SPACE_WIND_GOD_FIST_COMBO +#undef CHAOS_REIGNS_COMBO +#undef ONE_THOUSAND_FISTS_COMBO diff --git a/monkestation/code/modules/uplink/uplink_items/job.dm b/monkestation/code/modules/uplink/uplink_items/job.dm index f3a3087710cb..f3105229bd4e 100644 --- a/monkestation/code/modules/uplink/uplink_items/job.dm +++ b/monkestation/code/modules/uplink/uplink_items/job.dm @@ -78,3 +78,10 @@ cost = 8 item = /obj/item/clothing/gloves/color/yellow/power_gloves restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN) + +/datum/uplink_item/role_restricted/tunnel_khans + name = "Tunnel Khans Care Package" + desc = "A... questionably packed box written on with gray crayon. It's really hard to read. We hope that your assistant mind can comprehend it better than us." + cost = 13 + item = /obj/item/storage/box/syndie_kit/khan_package + restricted_roles = list(JOB_ASSISTANT) diff --git a/tgstation.dme b/tgstation.dme index ecb1e4c86e75..f270b2ee16a0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7384,7 +7384,11 @@ #include "monkestation\code\modules\mapping\mapping_helpers.dm" #include "monkestation\code\modules\maptext\maptext_image_helper.dm" #include "monkestation\code\modules\martial_arts\tribal_claw.dm" +#include "monkestation\code\modules\martial_arts\tunnel_arts.dm" #include "monkestation\code\modules\martial_arts\granters\tribal_claw_gr.dm" +#include "monkestation\code\modules\martial_arts\granters\tunnel_arts_gr.dm" +#include "monkestation\code\modules\martial_arts\misc\clothing.dm" +#include "monkestation\code\modules\martial_arts\misc\martial_effects.dm" #include "monkestation\code\modules\martial_arts\spells\spells.dm" #include "monkestation\code\modules\mech_comp\_interface.dm" #include "monkestation\code\modules\mech_comp\_message.dm" From 32e3c4b33cc86376bd5418b16aa0c6ee591dba18 Mon Sep 17 00:00:00 2001 From: ven1883 <129563993+ven1883@users.noreply.github.com> Date: Sat, 30 Nov 2024 01:24:42 -0600 Subject: [PATCH 2/3] the cleaner --- .../code/modules/martial_arts/tunnel_arts.dm | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/monkestation/code/modules/martial_arts/tunnel_arts.dm b/monkestation/code/modules/martial_arts/tunnel_arts.dm index 654b474299f7..04ef5d87cd50 100644 --- a/monkestation/code/modules/martial_arts/tunnel_arts.dm +++ b/monkestation/code/modules/martial_arts/tunnel_arts.dm @@ -210,32 +210,6 @@ playsound(khan_user, 'monkestation/sound/effects/miss.ogg', vol = 50, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) return COMPONENT_NO_AFTERATTACK -/* -/datum/martial_art/the_tunnel_arts/proc/check_block(mob/living/khan_user, atom/movable/hitby, damage, attack_text, attack_type, ...) - SIGNAL_HANDLER - - if(!check_usability(khan_user) || !khan_user.throw_mode || khan_user.incapacitated(IGNORE_GRAB)) - return NONE - if(attack_type == PROJECTILE_ATTACK) - return NONE - if(!prob(block_chance)) - return NONE - - var/mob/living/attacker = GET_ASSAILANT(hitby) - if(istype(attacker) && khan_user.Adjacent(attacker)) - khan_user.visible_message( - span_danger("[khan_user] blocks [attack_text] and twists [attacker]'s arm behind [attacker.p_their()] back!"), - span_userdanger("You block [attack_text]!"), - ) - attacker.Stun(4 SECONDS) - else - khan_user.visible_message( - span_danger("[khan_user] blocks [attack_text]!"), - span_userdanger("You block [attack_text]!"), - ) - return SUCCESSFUL_BLOCK -*/ - /// Verb added to humans who learn the tunnel arts. /mob/living/proc/tunnel_arts_help() set name = "Remember the Arts" From f4c9a447727b2899ab7d55c5bd8b4b528d029ed2 Mon Sep 17 00:00:00 2001 From: ven1883 <129563993+ven1883@users.noreply.github.com> Date: Sat, 30 Nov 2024 01:39:39 -0600 Subject: [PATCH 3/3] woops --- monkestation/code/modules/martial_arts/tunnel_arts.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monkestation/code/modules/martial_arts/tunnel_arts.dm b/monkestation/code/modules/martial_arts/tunnel_arts.dm index 04ef5d87cd50..2b183d7e4cf0 100644 --- a/monkestation/code/modules/martial_arts/tunnel_arts.dm +++ b/monkestation/code/modules/martial_arts/tunnel_arts.dm @@ -12,7 +12,7 @@ help_verb = /mob/living/proc/tunnel_arts_help display_combos = TRUE /// List of traits applied to users of this martial art. - var/list/tunnel_traits = list(TRAIT_HARDLY_WOUNDED, TRAIT_NOSOFTCRIT, TRAIT_BATON_RESISTANCE, TRAIT_PERFECT_ATTACKER) + var/list/tunnel_traits = list(TRAIT_HARDLY_WOUNDED, TRAIT_NOSOFTCRIT, TRAIT_BATON_RESISTANCE, TRAIT_PERFECT_ATTACKER, TRAIT_NOGUNS) /// Probability of successfully blocking attacks while on throw mode block_chance = 50