From 14fcdf9c0f77aa57d45cef6efaa16ff012ab62b2 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Tue, 9 Nov 2010 20:24:23 +0100 Subject: [PATCH] add a specific "linkjoin" effect --- effectinfo.txt | 53 +++++++++++++++++++++++++++++ qcsrc/server/w_crylink.qc | 46 +++++++++++++++++++++++-- sound/weapons/crylink_linkjoin.ogg | Bin 0 -> 9117 bytes 3 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 sound/weapons/crylink_linkjoin.ogg diff --git a/effectinfo.txt b/effectinfo.txt index 3ad766d85f..9529ebecc8 100644 --- a/effectinfo.txt +++ b/effectinfo.txt @@ -5060,3 +5060,56 @@ velocitymultiplier 2.5 airfriction 8 gravity 1.3 stretchfactor 0.1 + + + +// crylink linkjoin effect +// decal +// used in qcsrc/client/damage.qc: pointparticles(particleeffectnum("crylink_linkjoin"), org2, '0 0 0', 1) +effect crylink_linkjoin +countabsolute 1 +type decal +tex 47 47 +size 8 8 +alpha 256 256 0 +originjitter 12 12 12 +//lightradius 60 +//lightradiusfade 300 +//lightcolor 3.2 0.4 4 +// purple flare effect +effect crylink_linkjoin +countabsolute 1 +type static +tex 39 39 +color 0x504060 0x504060 +size 8 8 +alpha 256 256 512 +// purple sparks +effect crylink_linkjoin +count 10 +type spark +tex 41 41 +color 0xA040C0 0xA040C0 +bounce 2 +size 1 2 +alpha 256 256 1024 +velocityjitter 256 256 256 +// purple splash +effect crylink_linkjoin +count 1.5 +type static +color 0xE070FF 0xE070FF +size 8 8 +alpha 256 256 512 +velocityjitter 8 8 8 +// purple splash +effect crylink_linkjoin +count 1.5 +type static +color 0xE070FF 0xE070FF +size 8 8 +alpha 256 256 1024 +velocityjitter 32 32 32 + + + diff --git a/qcsrc/server/w_crylink.qc b/qcsrc/server/w_crylink.qc index 5424b64b8e..de5abb1fda 100644 --- a/qcsrc/server/w_crylink.qc +++ b/qcsrc/server/w_crylink.qc @@ -52,6 +52,8 @@ vector W_Crylink_LinkJoin(entity e, float joinspeed) float avg_dist, n; entity p; + w_crylink_linkjoin_time = 0; + avg_origin = e.origin; avg_velocity = e.velocity; n = 1; @@ -64,6 +66,9 @@ vector W_Crylink_LinkJoin(entity e, float joinspeed) avg_origin *= (1.0 / n); avg_velocity *= (1.0 / n); + if(n < 2) + return avg_origin; // nothing to do + // yes, mathematically we can do this in ONE step, but beware of 32bit floats... avg_dist = pow(vlen(e.origin - avg_origin), 2); for(p = e; (p = p.queuenext) != e; ) @@ -71,7 +76,6 @@ vector W_Crylink_LinkJoin(entity e, float joinspeed) avg_dist *= (1.0 / n); avg_dist = sqrt(avg_dist); - w_crylink_linkjoin_time = 0; if(avg_dist == 0) return avg_origin; // no change needed @@ -116,6 +120,32 @@ vector W_Crylink_LinkJoin(entity e, float joinspeed) return targ_origin; } +void W_Crylink_LinkJoinEffect_Think() +{ + // is there at least 2 projectiles very close? + entity e, p; + float n; + e = self.owner.crylink_lastgroup; + n = 0; + if(e) + { + if(vlen(e.origin - self.origin) < vlen(e.velocity) * frametime) + ++n; + for(p = e; (p = p.queuenext) != e; ) + { + if(vlen(p.origin - self.origin) < vlen(p.velocity) * frametime) + ++n; + } + if(n >= 2) + { + // they seem to touch... + // TODO make a specific particle effect for this + pointparticles(particleeffectnum("crylink_linkjoin"), self.origin, '0 0 0', 1); + } + } + remove(self); +} + // NO bounce protection, as bounces are limited! void W_Crylink_Touch (void) { @@ -434,14 +464,23 @@ float w_crylink(float req) // fired and released now! if(self.crylink_lastgroup) { + vector pos; if(self.crylink_waitrelease == 1) { - W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_primary_joinspeed")); + pos = W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_primary_joinspeed")); } else { - W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_secondary_joinspeed")); + pos = W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_secondary_joinspeed")); } + + entity linkjoineffect; + linkjoineffect = spawn(); + linkjoineffect.classname = "linkjoineffect"; + linkjoineffect.think = W_Crylink_LinkJoinEffect_Think; + linkjoineffect.nextthink = time + w_crylink_linkjoin_time; + linkjoineffect.owner = self; + setorigin(linkjoineffect, pos); } } self.crylink_waitrelease = 0; @@ -454,6 +493,7 @@ float w_crylink(float req) precache_model ("models/weapons/h_crylink.iqm"); precache_sound ("weapons/crylink_fire.wav"); precache_sound ("weapons/crylink_fire2.wav"); + precache_sound ("weapons/crylink_linkjoin.wav"); } else if (req == WR_SETUP) weapon_setup(WEP_CRYLINK); diff --git a/sound/weapons/crylink_linkjoin.ogg b/sound/weapons/crylink_linkjoin.ogg new file mode 100644 index 0000000000000000000000000000000000000000..26c7af5d86e90829de6115b71dc7d139aaf8a72c GIT binary patch literal 9117 zcmb7ocRXBA_y5(q5G9DRdI^axt3(T75hYe9+D5b}Yt`r_dhZdDutbltTB4+=(M2bS z8iEKx)Zbk`&+~eo-ygs4_cyP(^E&sOnKSpyocEbCSKH3+0e}nqQ%L16iE4}tISwn1 zr;EF_Jrc{pxm$KA`K66>K{ViKV@LkGU`JvlDJzoSt_Yp~XGy}l)WZUbjqF_?-_&-u zgE-k+8(e6Is6#}Bg(ZZ=gvGJSa0o6t^C&4B-~hw`5X7O$@HuEO5e@)U0FYNEmG0No zeDKXL_{}|9zep^#SaxsFH?k3=wwjBW{JwxZBt+bn4gm0hAb#R(_j#rD<^xv76>423 zfle$H9wnU07%rDKWwODZGNZIEx5`RPVN3vk3!y;F9!9ID#vcB!h98}29nD{uY2CwL z#Ek3}>4bz*O0N~9=qQo!7wEtQiVITpU_xUi$gO6gS>(3jAta1S2~_g0=E4pL_$?sQ z_JWDke5vo!EC>*UwOl=k_DdCW-w<=(4)Xvtx9(N$AyJ_bJ&6Zma&Uc>QGK`}+}zyD zdDPQ+G~IdJ;DRu4Hm-A?{_lEWIs^yEXji=?+1}Vu@B4%Mt{tWq3ubOnx~N z*dg-O5+r*td$$itnZ2A>O#6J~LzMn=-p1n0=g5BOYK~Js<6;i7pT8%oJuho88`-Z; zo{hewe6BtxDlZ-ed5o($lpTy#U_bleY@*^xBXF$oVD`$JMp}@HN`20YY1F^eccB#7 zUu==n{{gxHj)Kc3Ki@$(1E?yN@9IB(o$cy#}xv(4p0AW=B>Ba034AznCMLF)I0&fbEqXl~S zYI;S#2x6PEPyNyxZ$D8flZ(_2!vrNp4Q%2tE4j!DsG1`hGiGuF4LUeK`Vvv#rb28J z6$u$H@DY*e4x%D2g!Df*?ibepHOtU{)PWsl(3vm&`NEmuhMvyG8K~*{aPtY&+_?YT zc-+Hl5eVb-|Eia!gO&hTI9c(K17Eap+`KBG#`;bjKC42o`}ghglWCMah?C%!GF|o)PEuegbfEY zeo^hekrV&@c08wgGM8~O&joUdvvPkFzy80FllM5fC^Nb!GI}*Ko-ZohJ}SGU@wHP= z#YWTrSpSV25HMg>(c@D2FXXg|Fe`)LsTS1Qy|hto2#gLMD%bvV0|1~ckz4~CO1O0O zghurwM)ic?`f~99sf=Qw1uksbMWm&WK4kLi&itJ0_c&IG+;<}r8SmQ{%hBcblS(Yo zhb)Z~-zP5XZloKyXes~|7&{q4nU#ClS91#P>n-Kv59>PQAXBAbENEKC9!$QzwFXAA z9}2$4>h)l1r*vVMLMAdW7`TGZTPjitV`|_o4nRfBj!x85<6p^fr{qWH*z~g(rXqWw z%Q>OL>cu(8VJLr+9`@C}U;Rgpem|7|MHqN?;WC4dU>FD$e83GCpzPd{RUf&lJ1nld zr#Xa@8}cw$AJKe3qXHkjs|(jM#5fP>BTR?IN4|ou61w_uT?yw&efadg=198M_^7ik z9A#SPY~}4deIPed3%)wfdYGGfIZqxSOvmHyU8phyRiU&DN1Y#_oXu%e#_8aO=_;dX z2*Y&L!!*R~_}w9t%4n*&E(&3qWHV*|wG zfw}QMN*C^Lnufqi51i+&MNE$QFL;=nV>KHX@B2@Wr!9}677jH>>OccgBPjp5eUx1m z%KT7e{Et68-QNa-cz75-SA5*D6I)WUQL;(eD)8mwTe5e%GcC7LQPYRcvvxBr2|J4? z9Z8PUA4N9mkTWe6f~~t^0SF`CLi_2$jiaU?O)a-JnnY$=Drw=P<8V{Sh|#q0Mf!ln z3IB!Ls{fwIYQlfcJHX02cf2lcVc);UX+xFm>C4}}O>vvY9qz}{t6uT_zsN~Ihr;@X z@GEj!rfLo#k_ND(a;Fp_VAmrD;{lpd2}W&0CAwN*+pA83E})003t5vZtz@S5Lit~% zrYrFageWDP*p%{vz(JkE-k0wdjpep|2c2Jd2 zyOFZGP26{9MymX#JQ21^Tnm<>axLeFp603>pFw;0R}l z{VD4*C??&}p=yQRW&pE1=Gfm{H0GdHwLE3rE4RX6+t)~RMF}*JUYTE{Zp^`1WQF;k z$@#}XRYGG^px|QiQ6|uiu?cXk#z9rZ?b(j~A38H_w1vi)ZF=R}(;fR753)@YL8z18 z1`ni69YPScBp0v^<7;OKBV_N$Ng0HE&P3`7bmW94!rC*DRIr|$P#qX73#8QfQSs<~(fBQ4j!vKDY^f*}bbPftak~8lX`b0a59RbX5MZ3QLS1mioNbJ-oXI+8 zbLf*<5E0iRtTLyXwvJnFk$3*m!~@!Bn1LWtCnJ`Hg2#eyFTRQp0IbNB2-(BQmB6ep zRY{GX8vrcZZ~#bKn5fR%_b&Ho@T$W%$5HF!QzneN_4fSHV}|Wri?4J#}=Ns>muNHCYc<4)0f2L!-w` zVyfKlgS&vCH;o0I(ZoThgTdw}=%pr(A|S|3Y2-N>;5O0?jI1I$oR0#qcD z{cn>!3~n=-T`Ut95Tp<((vgFt1Oa>(CIYIt$cNSV|KWut{=<8fswaBM<4)B9A&Tt> z@?hPUW3h|I;_(lUAC1+AmGYy(q?_+DTS*0_|4>)|P3irsUx6O%pAq0N684L+*ydFj zRtuKG&U--#plJcXbsjttE%9I2>Kli}@tAo77mg36%8-5&Cw^7zLPvB#K0_i%`P*|a z5&W*+~=YdxZiTNxNIuK++NAr`1qGsyEfxXG4^VQ<)5E^fU*kS5)zzwRaR43REDl9 zY2_6V5U8yvD=a83FKeiI_fz6!zs=Sb_rQ6*2L&!3P@M|R-`NakJrS_*DCJ&!xbWuS zk-o{#TMcQN9A+jidy$4RUkRxwEGHHI{8mhQ(yo&4!^i)_pGi@CEe*+Voivk^B*FI7 zdwZWBC@_(+w2jN^2wZ1Wq=ASPuH-t*a_|jZW!}E_H1|Dpm17NAiL4x=9-?kS<9S3J z%b5$RZ!we~c9sC8YR9xKYe*J~Fn6|nr+BaQfuyV0Q6yu89Ut7XM{^AEGwfEmMVjegT}pFYmLTy)mEM&T)w^~UEuzjd~u zu=+`y07q_f((mWA^K7nAm*{INz3o#o_XYLK+>zb@;Hx$;FXLlJiQJC)LcOX5b9}in zUCs0POm}K5EK!rsjS>-0N=YN@C==_1H;+exY(-x8_Knhfi-}mrLvH!!i z>-VEnY}7e97bXsH59dQqNAI==+i17HsE~5Ku92J7Dn(gQf_kD7Cwgj?ytLCK?@c-= z!=16A_Qg?beh6ybP|NlGeBj)^y6Ygk(W#Q*{XJ*?;YUR$w6Ef89&Kn%roz7#7MP`0 zx)@S%yt|%>8>{Csm-|#K?fnX_e>Dd*fB>+VK{#Id8;I8~PtzgiSJTCt!Go(lWuXK2 z31$M6a3=eusGslw@5NY}Vnwvsg6WePJC^q4#*95Rw;hs7-3d+b6*A-8a-qc^>wWS| zGM@jK9STv1R{FHkIvv~pH346~3>|O_u9uU{rN&EX*|YY6s6CA>GgIvGxRvLVe$)P? zy$2dxi=!KDw{?YzoCQ*OH<1dpkclvAn?;s9A|s>nlu?!|MdMrAH%s*0ybeOITL3NB zBZ_(B0?FYd9jB!?FuQ8kSsH6XO@h#dQSWpVm{Hf(s0)F_^V^8R7j+Iy8J{ZD$BxgT zF^4zF=(-Nf0_Bdh&N-7jZ;_hXF9ocm{D`d+<7FCpd1Sy?d6%+-dtBELC_xZ{bQ+U}Q#5D0?- zC2^Oo`TA3eAkNL(OVAPzFCgH!y%>EZup#y6p(y>gmz-V{RE#oScKkSdKMiPbg`YjX zZAA*$MeZb`_cpf8-}UR$oZ2qx{|=-K%3v00M(b&<`g4W7*FG{UEl!iw-HIkIEhR4h z{`%lyE^qTy{ikw?Dle7mx9bD6Cme4n`Cm_c&VzD03R-`=^TdXRw!?s=(&b&vm6VD^ zF;j^VF)3v8ZWh0j?~Gh35fF>Vk;57499l?wTN{V9wEat}$Z@`I#`&Yz13A&`zNI`z zPB9vM_sRmA4$lqgAbnlZyk1GRmD|_O<(N|Ti;~qokB??^D{P*%Z!dfJ_B6^AZz+4k z&sX#BP)7QAx6U^`{KO+sKV?b0t3)&8nH&70EDZ7SRkTHY&4)V*q37@FYkP*?kytBd z{M>jVZoWRwg$smu4~Cq)Ha3f3J*oNrtXC6^@sSzfnvyX#j1Fb=U(?+<3h-Eg788|` zud$y3+uTp{jE7e>B3bE?MM)&rgUsM63{1X3;7>MDFPEaf^lmf(K996UM%PX-f2-sO zx}Lcm3k4DjHJk<{U9VF7p2QAiy;oJ?dUI-8hwN=Psra(&b2YWeucQkty;J*=Oc_Hz z`h2Y_x=Iw^SyB`fCL3@EnE&ug;90$;?ZoJ=5S6b{Jvp{!6yh}Iyy|fe!u_t9e(o2;`4~)lCf$jzBkXfSa&~FEv#AkidNsI<8GVH zQ3l!?Is-q6ybRk&6QLGud4q4n^NGcG7gb3t8^E+|O19t1t8hyHVcVWH9Mj~vG{$RH z4wX@F^i9iCCsx2wKgZ0yNI;`yYp!V_d~!=>xJ{_5E&D!LP;|c3;H3U}lTL=#gKfes z`ueei7XJtJ6EpS3M{TGCp~<&v%#Pnv8PB^Fzdud9Q>wz~@=n&kli)zNk@~}oB~khG z?TQjlUrIu%!HVhCF7;k7YcVf3L^>|8MZV(nI-c*CoLmO@*(&e>FOdr{Ai;deaXZ`& zS|*|2VtaA2*8MVnxC7%d(S`Uy95-_#hQvl{gN}h%8oxKFWf%QdzP5jaIe0D-?wEW& za4PR)P@bhl7I?k(*5=uPMAcVP+7zUEIC(rf=BA`1Yyf(|*xDe9dZ8m4J(hdM%^^h8 zk(99aB$<*U3c8|^TKd4#SU_jcC4LmheR+x02~neU^h!xAronG6BYY4v{T zh{A)5yl?V7Q^zQ>4%l~CIITKMeLA`$B7&pu@Ziz#OCRk3iXbv(5-<&+0Z`e*Pv~yR z@DOA*&aZc_or#2t;&bV}8(x!-5o!oTD9o?i!NCWfDxV`JU2Ev~0{45}>mW{pWE}a? zGbMm{Kt@NGywQ~447>(epxQUb0NykKhP0IBy70u@fe!~BW)UriC(<1F;+_W!6Y>=g z|6H4MVa|@GSbO+V4G01Nr;~Bl<8g5fQrG?sT;shpqAS@@mbDCNvlF6%LoTS1+YLaW zcRDJZXH~!}*&maYi8I8W2Z+8?dmQttF^ALgB)0Ml{q_Cg$zJpJ;~yS%0m!1}8-6Gu zr?Z`3`>%a5E_R=5oX@(wf6-`VnN>Bnt0Z+g6zrwML}lBx6BkM)cMLxDHZ|8I%)c%f z&u0HIY5ZPQlr^-1)gRYcmB8p+)Lb^o2lkW!SaDSmA_9P;Zzh4_q`>^xH->rkQ5|vM z_Q#C$Q=B`beZBR`du#-DaTb{<5_A?9uFAnYU`1*>I`PgA8L^qlXc*Sz47h zy-!Yl3-{`BI!zjtbajr7S5l(7CC=%*K{`uTUQdvp%$lshrH0AKc1FGL;VR`b~ ztE^`=Ap=w&7!y*yzhyC9Ijb~KZ0jIV6#_T}xo2bsIT>Yn`-Zckz%*eBe>Zn?MV?kx zQX{{isM+NzQYt>u`9)iN$#?bU>+w%WfMGG=VH>$=k=$C?$Rdv;>}2ms_YF5=3n`SK z`jPBiy|pUQmJKmueRE;)6Kl@AU9MBZyK8b*nBtr=q+)a>>LRkZ-t z$=<&j)tiCjvCD};n!j$uz{4+ho|ix zGge1R)D$g^wM7~XXTk6Ms#Uj;`F=o_=>X$O-1p4j5|KjyB17{6Kj`Y)q@an#m5ipS zdhtm+F--s8BIgyxdV2sE95GKmI;geYDxS8W&3$@=UXYI4B9AwhR&R-pdvU`Wqo7+~ z_wAQfg2F7jnA;1xQ18+uH(bpE9w6JeY&y6wz+n9EnoUK3+~(KC#%?virx0K;Z;|BH z`QQHbnL$xC#PfaJ>!l&WM1)2yZ+icjM#Ka{_FPINtM4pwO@wx#E5pfyzReC2Hatq2 z2VQX=&-STG;Q+X(tk++6d1ZE_*A~tniU$&(Za?02T(9_4>L0r?MSur{^?7OialOxG zxRF60)pjGojuZ&E$vqq_=d7Opg?|4x*j%U1z@kE*GTy z*d`k}C~-;_CFrVStWTj7e$zg+gvPS^h3x*ia)6MMd5tt^yQ^T78k&lyc0LBqFK_j770PGMvL-!{@#+tI-;SeQ z@>h&UYD#jDPJw8+S$+=8XdGD>(KwK0UOf|vO?*?E2jRc*xHPy{lez>Xd%MGUWWL5w z8snU0^zQpb?2WjtUn!se8>!a+e^naG$qo`oS^R?r=}7n{xEXt1}wjZ(uAKx10>T zCBXM*vR}_iuc(Zy`3hmufL+_K}<`K zeS`U5t=cUY^A6dS54-{>0Jf&#n>(uv$}u!~$)ny$)$n(W2TGpVaVK<)Z^Q*Z` zGK3fTqo`+b_TuB6omTmM+k+EksES_KZ8(6@PCKglMXkcl{>McjQuyfvuiVjE^o&F# zu<%9l_W}C{KQtrnSKTndwSmJsvo*?it%25x9eBC9g+!94s+(Zkf>6F+#Z5b3&hQmX z>O9pXkK`P^9WBfS`Don!!}d-;-|bIF`n37Fzwes)^xh){E`C?wpT~eB!Gir=0se0R zqz2MlDH<`=_4&n-I2VOAqjtY$#+GwpLA|sU%KKSqH4-{Nf@_JR7W4!!#XVMf75rc?Ms*Q;96w@z2s~hqF>C z4Y~3gyFNn50tuPDW5SJ{|nGSU1mAsT(I0<8ltHAw)kp+M4@Vu%L zJv^TBNVlWYY_|O)gH?WAtFUXy&5wT?aJfaX3oXf%_7#0H3jOqxyTHY3?%B!56&Qzj zNdweT{`H`bp0bqd*m<0iKj=q33AzSEpHOcJ`&=n!ZkFn-~!A) z(t=@**$=YzU*tbcKrmOZrqO0R+2rq{C}?=Y8GJ@4rr5*W*&Sd}nykYb0yLg$OOveXXBN z4(2uWS2xo%P8(NBG@a$0m!BZx+-V6A4t!LU#t-1K>5ySrkxf+&XoN#Va)<-M;7*40 zMu?S`adT5%i=GbiU`zNXR>pz*D0LNApiY5xe)@Re1+1p2v?q)EJkN9YYR{xZxWlZNjp%gY1&oYZ2G1z zKIb#2yrA}_0z;TmRc7zG4P#T^kYqwE{8qgd!q-v=C zh}7%`tM2S(b&3fh-d0v z153a4G#Xb~4Pq2sHX2lv=GGsLYx0}~32vJ*JTIkTI@#-;Vw)OEFnRG)!D+<6LFc*c z_fd~4L)SzJ{6fWU(y#Q|E(&rz5T-LZ@Czaz=^jh*!0%sE1D*C{reaQ%^!qm+ zk+1^8SclORS_J~9S1Ps)o1HXjFWHDQDQnecjgRxkhAiQpQF|N_X#eI926>a~4#44Y z$r!!xtz8$x*$E?Y$ImAxveLa93tY;81*gT_H+*FEI>4oXK3dlQ()jo9|`KzULA59~Z^R{#J2 literal 0 HcmV?d00001 -- 2.39.2