From 8f61a40877542ac94baa74c5ed653c77b77bd855 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 13 Jul 2020 00:48:21 +1000 Subject: [PATCH] Survival gamemode: Identify and eliminate all the hunters before all your allies are gone --- gamemodes-client.cfg | 1 + gamemodes-server.cfg | 20 + gfx/menu/luma/gametype_surv.tga | Bin 0 -> 65580 bytes gfx/menu/luminos/gametype_surv.tga | Bin 0 -> 65580 bytes gfx/menu/wickedx/gametype_surv.tga | Bin 0 -> 65580 bytes gfx/menu/xaw/gametype_surv.tga | Bin 0 -> 65580 bytes notifications.cfg | 6 + qcsrc/client/csqcmodel_hooks.qc | 13 +- qcsrc/client/hud/panel/scoreboard.qc | 10 +- qcsrc/client/mutators/events.qh | 9 +- qcsrc/common/ent_cs.qc | 5 + qcsrc/common/gamemodes/gamemode/_mod.inc | 1 + qcsrc/common/gamemodes/gamemode/_mod.qh | 1 + .../gamemodes/gamemode/survival/_mod.inc | 8 + .../gamemodes/gamemode/survival/_mod.qh | 8 + .../gamemode/survival/cl_survival.qc | 40 ++ .../gamemode/survival/cl_survival.qh | 1 + .../gamemodes/gamemode/survival/survival.qc | 1 + .../gamemodes/gamemode/survival/survival.qh | 10 + .../gamemode/survival/sv_survival.qc | 420 ++++++++++++++++++ .../gamemode/survival/sv_survival.qh | 20 + qcsrc/common/mapinfo.qh | 28 ++ qcsrc/common/notifications/all.inc | 8 + qcsrc/common/notifications/all.qh | 1 + qcsrc/menu/xonotic/util.qc | 1 + qcsrc/server/g_damage.qc | 29 +- qcsrc/server/g_world.qc | 2 + qcsrc/server/mutators/events.qh | 11 + 28 files changed, 634 insertions(+), 20 deletions(-) create mode 100644 gfx/menu/luma/gametype_surv.tga create mode 100644 gfx/menu/luminos/gametype_surv.tga create mode 100644 gfx/menu/wickedx/gametype_surv.tga create mode 100644 gfx/menu/xaw/gametype_surv.tga create mode 100644 qcsrc/common/gamemodes/gamemode/survival/_mod.inc create mode 100644 qcsrc/common/gamemodes/gamemode/survival/_mod.qh create mode 100644 qcsrc/common/gamemodes/gamemode/survival/cl_survival.qc create mode 100644 qcsrc/common/gamemodes/gamemode/survival/cl_survival.qh create mode 100644 qcsrc/common/gamemodes/gamemode/survival/survival.qc create mode 100644 qcsrc/common/gamemodes/gamemode/survival/survival.qh create mode 100644 qcsrc/common/gamemodes/gamemode/survival/sv_survival.qc create mode 100644 qcsrc/common/gamemodes/gamemode/survival/sv_survival.qh diff --git a/gamemodes-client.cfg b/gamemodes-client.cfg index c43b9d1d3..a95ac6d66 100644 --- a/gamemodes-client.cfg +++ b/gamemodes-client.cfg @@ -32,6 +32,7 @@ alias cl_hook_gamestart_ka alias cl_hook_gamestart_ft alias cl_hook_gamestart_inv alias cl_hook_gamestart_duel +alias cl_hook_gamestart_surv alias cl_hook_gameend "rpn /cl_matchcount dup load 1 + =" // increase match count every time a game ends alias cl_hook_shutdown alias cl_hook_activeweapon diff --git a/gamemodes-server.cfg b/gamemodes-server.cfg index b1631b233..94ace93e2 100644 --- a/gamemodes-server.cfg +++ b/gamemodes-server.cfg @@ -29,6 +29,7 @@ alias sv_hook_gamestart_ka alias sv_hook_gamestart_ft alias sv_hook_gamestart_inv alias sv_hook_gamestart_duel +alias sv_hook_gamestart_surv // there is currently no hook for when the match is restarted // see sv_hook_readyrestart for previous uses of this hook //alias sv_hook_gamerestart @@ -58,6 +59,7 @@ alias sv_vote_gametype_hook_ons alias sv_vote_gametype_hook_rc alias sv_vote_gametype_hook_tdm alias sv_vote_gametype_hook_duel +alias sv_vote_gametype_hook_surv // Example preset to allow 1v1ctf to be used for the gametype voting screen. // Aliases can have max 31 chars so the gametype can have max 9 chars. @@ -208,6 +210,13 @@ set g_duel_respawn_delay_large_count 0 set g_duel_respawn_delay_max 0 set g_duel_respawn_waves 0 set g_duel_weapon_stay 0 +set g_surv_respawn_delay_small 0 +set g_surv_respawn_delay_small_count 0 +set g_surv_respawn_delay_large 0 +set g_surv_respawn_delay_large_count 0 +set g_surv_respawn_delay_max 0 +set g_surv_respawn_waves 0 +set g_surv_weapon_stay 0 // ========= @@ -551,3 +560,14 @@ set g_duel 0 "Duel: frag the opponent more in a one versus one arena battle" //set g_duel_warmup 180 "Have a short warmup period before beginning the actual duel" set g_duel_with_powerups 0 "Enable powerups to spawn in the duel gamemode" set g_duel_not_dm_maps 0 "when this is set, DM maps will NOT be listed in duel" + +// ========== +// survival +// ========== +set g_survival 0 "Survival: identify and eliminate all the hunters before all your allies are gone" +set g_survival_not_dm_maps 0 "when this is set, DM maps will NOT be listed in survival" +set g_survival_hunter_count 0.25 "number of players who will become hunters, set between 0 and 0.9 to use a multiplier of the current players, or 1 and above to specify an exact number of players" +set g_survival_punish_teamkill 1 "kill the player when they kill an ally" +set g_survival_reward_survival 1 "give a point to all surviving players if the round timelimit is reached, in addition to the points given for kills" +set g_survival_warmup 10 "how long the players will have time to run around the map before the round starts" +set g_survival_round_timelimit 180 "round time limit in seconds" diff --git a/gfx/menu/luma/gametype_surv.tga b/gfx/menu/luma/gametype_surv.tga new file mode 100644 index 0000000000000000000000000000000000000000..e89e60b49e648e28a323ac4802fe310032a3d0ba GIT binary patch literal 65580 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 literal 0 HcmV?d00001 diff --git a/gfx/menu/luminos/gametype_surv.tga b/gfx/menu/luminos/gametype_surv.tga new file mode 100644 index 0000000000000000000000000000000000000000..67a545d707d6f5caa5b8c951150d355f45f8c325 GIT binary patch literal 65580 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 GZuMVV$MJ~( literal 0 HcmV?d00001 diff --git a/gfx/menu/wickedx/gametype_surv.tga b/gfx/menu/wickedx/gametype_surv.tga new file mode 100644 index 0000000000000000000000000000000000000000..67a545d707d6f5caa5b8c951150d355f45f8c325 GIT binary patch literal 65580 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 GZuMVV$MJ~( literal 0 HcmV?d00001 diff --git a/gfx/menu/xaw/gametype_surv.tga b/gfx/menu/xaw/gametype_surv.tga new file mode 100644 index 0000000000000000000000000000000000000000..bc72cd107e56f8fe61317ec84d504d8b6a71b988 GIT binary patch literal 65580 zcmeI52lNz0*7nIkKn#G2l0-p8#ee}LW-;e1=A3hmn6s{~IjuRYVs;H+T62zwU{+vN zMB+cp^nAbHJyY{F!yiRoef8bLob#NjuI{d?uIJXRTeqrv8Z~OtDE&@tbZVpSt2yEFaWFqmIq4%+El?&ZOLsh*y%ef#!3;l3~Y%KN%t3$PQ|2OI{D0Vjde!0BKx za&T(fwrx-3{-eRcU>~p}*bJ-%Rt8Igg~9y5amDdvHemUVJ57M~60?4PTni-b)xC*( z`Iw)++O`Kz-oYuo!Sm=me4sXcJf;F^hj1;Sc;J z{%!N5^A~{oUVZ!aT^>Hy1KY2^{`!ah;~)Qc@|$nI84JDxZzxW-fXkYKI5K`!TaE?l~-Q*g-)G1Jx0EF1Lfdsa3t6RXdkQ&mI6J2FQ5!)7bY37j>#S%I_vj4 zv_RrM^?m1K&e0d6??cyWTZ2Oe4jg#NGtWFT3U2N5_V+yRMUF*Qg-FL%sM~qxohOmc z58xXxqDPM&Z&1cia4)zLoC*#ETZ6SgU$78xZjiH%e708kI~ z0FFtHP1+~wD#wCZdVogwAO38|WbbiP`Xuy8Dg!@j3ovDE^k;(l z{ndZAU*g|(RnIPr54S(O=-)YXjWyP|^!D3t9}d^~zW-aepGF=|I_abW`A-GPz!+>o zW#DD-Ah-sc2KE7)fz`lbK>t7o;5g-YrQY%x;+N-|IcTG5cz*4**ZxCb-qq!KoUc== z=U*gLcM99kw$#Sb-d;>UKAh;!J(l*m{{8pgcfRNR?$`GH8Oq7mUw>UX^2j5V0d0cu zU`&S&9fniBdSD2+8k`LF1RI0?KpAk&Da{Mj0nKRR#`*R)o_Nl;KjT=VKN9(}Qu&5S zF4B4G{8#wp`JZO&$M(~&KM0(H-F_du{~Fz&IM0VEK8+3-IdWv_zylAgr<~9OtFF50 zxA+T{ffvAi;0mChXgA>6!E#_>(3!TJ6U;{2wge#qwzX}XI9_FyRYDF{T4|+50-sc1 z-F4S(lt9^yehaw2aRT`^7L*a79*rrxajJ)PN_G1!vf%v*>HdbobdBLm{N!KVY5!0B z+qahJ+`02ww8`#Z@EK>E@jU!H*H3nzTsFuj>GGS-Hxy38zt_L`;)~gK+ijO*U_9;k z4bS!-c$Vk53tR$@0Xu`WK|ioC=jQ=)(5|y_+yXSEy&K#1axK5|icB?P3=5EVBY_`E zG@b#Pke-mPNymmwbLZojJez_hloO!LCY0So`A{aTld@ph)H7s(x`$ryct%Lqq)-|9 zIhaqn)-dG@rw#oY;$Pc;iJm=su1)=SlmF|kyY5YRs^)(>9?RUP^gQ>~Y3VpZ$ASCq zyRWqArkg4QQ^2_X{ri8(bG`?L@f^2<^TFX@dqDEq%YYs{-@LTz?DVx(v~x4syXlH6 zuGm<<;i%D?Ypxmm!$)J*B^r~r2rdoFXi8W?nO~2aiSluC;t4H?iuU@C?()0?$_AFP%#q8hRg4mO{U%W6F9a(zwQPPoVHp!nVZQmC=^G+LC8G@;1E) z|F!=*gFallI`wpI_xP7ze)&_l((jYze$#N5=kXWf>An8?az9rYSafkA`&V*e_>rN5U*G7%uRf5@=&e< zT(8_3@4z*4nKv@f4$MYfL+2m^+Qm(k0l2OHDFgEFJlZip8z9zxSg&7|e76Qith3HK zmmYM`K~KN)&O5ICDFey>pX8t+o$#A=N!c|z6u`Z*{);I{ggbb$P; z1N5)!16+{(Udti_KFc6*9QYgSxI^&SyoF6Tn!P`1PLT9Lk_CBBn5J*b?aaVA!6T16 zl5MfY7S0LO10e%E<4Eu_&vrj)R}r2J_T)L`WdLc*fW^TgTqn;(qhH&82p>(9K!Sco$v(0eSm#&eU8^AzGgX8e$@}#0`1wofPBi`k>EIRQW>WZo(fI_ zXMi)oS>T*9E+o7NTmmiwSAfgO>k4ogxEP!d&ZO*<2$hljxn>aIRvd3g-&D6Khs%Ry z;YOKQn)p(rFAbIxq^%-IUz20UVej3XWAoXTa0kNexnKD;T{&BaW97{8M;YtJc+iQk zJ$j)ve7VNc(9dx}{*@2yK-U5EvFi(31oUU$)ZZ@Gy8pkk@0Rd;9>nk8G-1xEwZ_a$u*p|YU9 zQNH?6p7!WG=>PVFj_(cqk`9pnWCu7Ga2#;Gr4LvUpYVFD32#F_`+(!X*+AL96+8f* z1}}qm!AS5e_zp}0Q-QiXLwA(W8?FOqLxv0~=>u*^7Vf_L?$WNi?wZ|v^UbA$4?Z~K zdAz?C`5I4X-XDVJ!4Pl_xPbOLmGDHaJsAupeje9fvH9kk--;f2Xt&*Vdy+h#0sjUs zgV(_8?}N|5SRiMUK^-W9637hq-h1!T@ZrNlC!{gJ@&D+fk1m~m{`n<+ zL#AVQWayN_Ip>^HxAoRrPsCq1hB0k8dAtZ71$Tm*!1drpa4YAB?6S))&r;Vf>~73fD~Go~eXW2_xEa!Iv8xnUsSOm-uPmb#|`X&Ay3)BOS6-fr>Cayiu6D$sv2W#N3 z+XSD&4$Ld|0!LwIo{rpKVm&Bt2<160ybjdWUsIPKsgp8L3kpCv$bj>`@c+oO+#BL| zC|z>NC7~bG5n{xM5g9yY*cgSg&pvxHdf^B5Baa}DH^FmYD0rH3hGFl%yw_fPeZ*en zvDgulxwn=)>OeidrT}A1Jt!nFE){+b>AG@QB%cB(l4pQ23U9peM%^v9+%gHd9z)$e zp)Tsfmw@f@7{^0si+c(0;8=cdCob+Gejn!^^g8e~P`|wj-Uc6V?jyqCTswlc{+Ryo z$sT*`F@p7zx70b<2zPQ$`8tMccj0(FWMf&l=*fBa(f!g-{*yi6d_a4^y_e1l9S@uv zy8gBV+%FGShx>u(n(ZiOPjCd~pGLWtQ~qtpg8kC|`2qNn_87;0&|20M3UDX?B>`92 zwbx!7ynp%Sm(l0%xZ{ozdx%TSIV*O;#~**}xr{Jl4pPsav`O4I0sX7Z@kzNH$AuB( z`T1p+UG@|6lv;SHhoj&M?lL$IeE#|8nPB{B2u1DK^0^eob?Ls8k9i7YA)~A!WfmB} zregn${@SL)&%-C;6fiJjB3C?Ez)Ld4c1HIz&0@ z0{06ckw(;63~ZU-GWV1on~@=#xdpO7%b{ zcyFM>GwoVpE>Sw{u)|7s-E~)G3`pYxZJeRg3x^zXNG(3Y0ybscZMWSviLrhRd5Q1A zk6;qAQG?xSUk#4r4F1CA(C$d`<~UPEri|qfGM76S_js=`FY62cp~H|fWgtUtiw`{T zKpoFJk#}Rhqb=m{EASc6K2mQ9b;L+u`WLj@H-w|Xf514>$HVyq@|d#CHrv!3aKHhz z$aVdrk3L#>_0?C4&pr2Cfifo3w%(%*3?q*l2~Q<-99SO?oLh8rxl;=2850tS2a!^D@ z+=m*R<$1Tvgp_}En9duPWuYPmiGS-2|D{hp`6Ofjxh%@l@y8!O6<@|g`sjG{(vRSK z@SXZln8yBU_sNS1*fx`}S*OZ3`!DLymG#V{itNM6*n^$D{`%|L2OoTp@hmYO(x&ya z?F63lE86;X;9TWGI5>d##)SF^9KUDw*N_aT3xsmuzKhvu>p94`6a3Fl`3n(u&Y>JQ z|JE<&yyOJx<(Q;i8oKSa+kVJ%OrU?%V=u`~9mtsHmE>7oYDx$0FPCohMI%J{d#1l`@YT zV`PyrBts8o|Ni&CGwh0(JD2kN;&8Av{OjZFHM8XB zu1oqL$wL|wn!|r9_-{?VZQx%YgMLldVHPITpRp=+*c9weeY8oP!`#7r&ttoN1&334 zh61wh+%U!gY=huly=q(ArXPLuQ3;z``@iHE!I1cK14v{EeCYPyexfQU3vc z=_JkHr1x(W6TZp?p5dDeHiWEkHdp%5(g$=0A9{pTb|pT51J6eFYnzF15Gb zdaHU`6tQK)M@=CuQN>jmoSq@v7=g48EF3Zb6;$Lp7IZt+F zLoy)$v|Z`aOE1+YBKO)klW9k7z;_5ArtQ`L`W^KNt_U~3X8fNK?UnR0|L!x2Jt~yr zzN+Sgt&p`g*a34A?+kiVj}-{l13Q7^Isf-P_uO+R{=d=KF;iJzw(i<&Ap`n+u@M^N zlkqb+Q^(r})baLh{YC0>`ANJt6siyGo9Ye68|<=aWB}RBcwa5J|2h8AN%CnuGwif_ zd|~y-WgUFfg97;$kmUknRe^E6aMMjUW!fC-c4U4p; z+^avG?|e=>zD#%*aQ?L)=LZtk2hhDj-tQDq2H-#TF}at8@|qxL%0LU^Z3*W9^HV2n z0`-7n!5+jtYMAFup{~k+&r?)S%c*_a_K{2dgynR{;R?_8EBag5 z2I>UmK#ud*RL9j9>I7`X26e&T{`R-&`o4LT`+smG56G_jR}1^@yKg5sgL`vno*CIpbf`!f%&P& zB82@3m4Use&uR3LJL$XcqVLC}7i*cHO@-fz3~*hBd}Xv-^l|378F|LISIwuqFc)?o zp*DhR2HFQdJ1&@qGNAnMj#G>&lv&XSjx|aDH!${xj9qcX6(xMknfn(RTeJa+JWtWN z4ZfLr#<^PLxCVKsbxsFrn2XjjM%1AXip~#|finNfK*&J~}lp+}LMN*qHK~QLef`JuoMA z=|X)MBfc`&1nkT4ne?5z>1!V;1L(vWY?|5~cGw|}1qH5ie9J(E7spq}@oE|HSX9%doF{4|OR~hW<$BR+R|T#qFxJ##Un&dwZ>FFNCgb~>eCVNv)-Zpo$6hQZ8Ax&<=a!M@o;8M&eh=C# zaX*zd*0260cpE$p57*PKClc-k2kY=Ged(KB34hN2|C{6@@t+$58c}v5^i8}ELEYSc zsSLCRbAtsyAD|3u!MXjZrsBiR&Com}|t`srtHf?3m#kBUe_$@wrsEFVFdd8+a?7dFGj}Q-&R)9*7jF(1E3v=KeTnW-bxrqo{Z;etF?9=2zWSgEXilA4 zPzP;7WuPli2K;Ra4&ZToV`$UI6#f&idJ$XYasu0|=L(FLq&WHWxZTAAW;Bd7ByJZ}xiL6Nej0M=7hVH=+n~->0;vKoB8(5t9s-)>BR9?@(2l@}!YtK9HypgoePmHBC^x=AS zD7JwgiY(y&_8pSw>-LpAr^eOYw0%jPAiwS_aD7R6XlSnC{D3yB^n_yw`wTx%#MC=1E}_l7>ezR(`5L;uwxL-mXWt{a5!$Gq_! zXS79zeksy6>ii;YrB0OlvBXD!mq>RH#1-HKFo?dkF6hU(1qtWjd^>ce>o}EP;+r{q z<(-pX8#fQRH>8|Kl+y@V3;xU8hdjWodO&-i1@U&oJAy7?ai9!1M?H}66!N$Z|IVYd z$J@-CzGjVJ0&@e`(rUD!@pl#F*Lff9R^f+xBThasM^GortM+n3vLKhrgMJ^^9+0iD z8Pc`t5}vJ+zqXgWDhG0}USXy&fu7$95RlF3@8h!PF4Kt%goC_rVLQ` z80&o&o+;zmiaet}1J^|}o?YHE>Y%=Ney@+jeKh)bMi74m$o)0Ib+&!zJDU?~TP;f1 z1gzvvTY^B+l!m0qOCsigSO;N;Y3`FYoFA z(vvJW4x~AOd)#N|cpkz9sjvH#Rs)+6cQ4c_gntM3g6FB@aO8CiYe7>OBi(BeZAUxW zmeJR=jrH$xeS;v+5_9xePgW;5o+lYdp?wye8{E6*#4|UT7q&_Xy{#=Cdc!e5eQp0& z2CP%6S6K%nJrLsp=d5?gu=hA$;o0GVl<1 ziMo$s9ybBKT%gU0v~zHu+F9;|$J*=af9`7#jvLMivAG-63Ce?Zm$oJ4>SrnOjML?1 znrld|O^mSH+~@gstf4*`Wy!bDz7Ks*IDvK=OZXY>^Dg0Yz6|1qJ1~MX*Kuqj(o&;&AsV;+33gQD}VAS$8zQRj(p87 z;M%ZV?zk=GDQmuW(u&Y^L7@+*m1)FVagFmp*9gqZFIA~>TK@Ms!-ul8^QK>d{277(0LwZM4EPja|ipq zb|!gE2j?d4VbZqLFJOL224+-0pFx{ZTN54PyjI?|?Wcf=w9Po$MSVYt@C`V4n)p4m z=jDXH`>+q;7U)^~{gNDaCG136d-%2AH>1DHeY|tZap-xu=bD(O8RtHaeb?Rjy6ZX4 z*IJX8@6Gvs_1vHn=Um(C4D{*FPnzh=b@Ng;`?0>hIXLz`CC7L9ZC_5;<}=+;y>A|! ziFYS17A3wc7(m>0<2?zFC;S_@pFG{K`vqfVEp4j~sMr9uvyd;ja%{Fuo%5-q*+-P& zQ_AS88F^JBxO5zM3{fZ8hx4+KkLzdF-auDRCj;ai@}bYjxutcmE^=($Qaw{$ErA@{=k?|5&()vrdfrRKA0xbt@DkcwJAV(39q(6zw;GcZ7(Hax_?Sf{6tvC+dOx~{J%@4Yhwh*D~dFtt`I;@q=1`FYMh z+#Bfc?@2wq&+&ah@?O~UW%TBH=YRU8`*PmATq9bQP@mP7z;%M72rmV9k^Tbq|0ry; zDa_%5f7{P?O}yKW?eq3S?Kt;&*e~s~l;eEP^|Fllc3u{y`#tnMp?X@~9zJ`@ zl5_K42Dpc0P10P;-3V;Ru~?5h)Y)qhUkz|-^_4hYr5vtAxC-g3kQV35*R0K9x_5oz z&RewqwgbC@1Heh(Z(M&5;S2P+k@&zSvUXC?Ph!6k`fTK#_0X`#)zgd@l`)(0gL~RI z#(l3vPiOj4ng3_xJsp3hx&P30Hv4fya|h)?-TwE#|2^h_w0DE~D1WD%a!Sa7buHK1 z`WLbN^a0dx?>Ne|&wmQu=b2w7e1h;ULg#mb2@e4~0r&K|meL1KyV0LJAq(*x4Cb+6 z>nHBj`RT{?jkqqjPa*j>B@f4X$7^-9a?}+#hggns1|TOJbG!rRb|>7I@PGu44+8sx zy}5Q*(suzn3(~Bs*aZwCZ8yR_%h;E2Kj6J`ZFnGX+&>ze0xkwOf=9qBwBu*Yw|_!U z>qm2sUG!1s@T?7me~i5lCCVvreFgN5lH9wO%z2=8njEM$hAt61+#dzexBPxP!RweVhht z=fu71`HR4dezcD8r+=q4T*rHUIqu!FQ~9a)xi7|k@@hn$+UH5<$9#OJDp^8LOe z<5(}WZ>|T9cSFE)-1{E*igA1bd>6`X7~?DZ?Oh8GTb*_&VkXce&zm` zZ1tE+s+S#?T~|_%P-cU0o$&hWuaD~z@719;pzA{Vh15e;d1V|I@%a~&W7oSFkG`Xx zpOXFo&-gNUg7{tZrz;5u(=LZ{en;ZI2e=|W{XTHtm1E!SnuBL<1NY65FXwsA^QYlG z34r=u{>ek`9rI(ImQY*1BWc=UOLDwA;nu)Dst&%G_)UcBVc)<07kGl}p901o=lsK* zyARw;+C3cKUB3Qa)465{cmO<7hVQLBPF!f)JOX@=&iCmaC43SL1L{Hh#3;h==!=ux z8<}iu`?7O2*Lm#U?h!;rN<61Jzl857(&a?%)frX%J0@pvFDf>geqz>X!se&kY7WD% zZ8-(wJ;lTQS%sn3yYNML&{Pb<$bG&7U&VCyXK4Km=0{i_FFpBs{@L3-8 zfsx>oG9r$hJraC@?*5j#|A+j3!Vm6V*`oHBJ{RqE{U?U%cIAL?6~w$;oo_$1PgirF z^nbF)%KT3w14$lSOV)=-`P0GqzjlJM;yBWf9GGT(%>zA^k&paq>rVvV1MNL^zisyd zc!+krnKr$E@F=h|ylp`G3Z(T$k1qiC9pSzm+_#c@;?vlAsn6#_@`=7*=H73XY3uu) z0Ow;p(VMH1*G}lHLr7C+-vXZGoV;5<>nRUEfFHql?jJ|^J>hqRW5F1~{bR^yH2QKJ zHv1&}BQ>;7EgaR-7e$?8Upb!AA|%~w1FVtMGDmkW{3OblN}qOrRndLGuD!875;nH| z%(=XCFZ-H49`%8oXvaGrw?8J>zuiNJ+_;}U_GKYQ5m%n_@Vv+Rc->Pnqq(1R0sZ#c z3Cd1GvS2>yFXj$)= zx4u(=x+}nahRX8P6mtC(d}cM+YBj7~y51RU9khMeyv}{pxjDUSzpH@sqM(nuCSHWY z0({r=ymgdOB!Bk>#X65ZI@kT=ocfp04`B!DpUrch_*V}&Ug+a@?VdHJ49=#5_Mni@ zYH&}?FD;k)Ob6{n*A<=nIsb1!4t(|^c1#^}hbhR7eaXIKJ1YY(0sXsI@vJAo)1Hj^ z8^FbKaMFw8`QY4laJ2bc*OB`M$Nan;ke}Q;?%VfU5N}KV;e#i>67@KMwYI16v3!J# ze#jhp6lr64o(br=TI5F`h3#J?kA_g-T!DHO@MjgZhk5?6b@TdGu9HtJ`EBz)((<{G z2W5pm<2q;&j*E;Zu`WV6r97xl@Zgy5dc6BX9hc=j!DIWdx>|ct$dm69xF@(A#=8a1 zCqy}Yn$UaF{rZ>WS-UgUAs^}k(0Aw$!+9&4wppF5JjZwE`p8@OV3Y^>_q=-n?dy5&)d%t=ck-&OplzT` z2? zDt#37Olj#l@9|#qFfa2oZ)MK1lox%F=*nuHkRhW5`cNJFd1`6P>hEcXOwdNPpH0DvaNY~<)&KrigZ%rh{!H;KKjt2LMlbS3|#2?ru`2h(?MgWE4@ z@5%I?ddFY;t~?6+lf0@+$jP z*ygFdmhKslw*x8K&v~*2}dyZEy90bFnlwSdYYMl1IzT>!MVTygYi3 z_u2-^q4t1z^X^{k&9+S2NSR~bZ(as6+Bw<&lNeVgBDa&NpWn_(-%2v>_thrRCO^<# zpEBkj%6%Jy(EmC9-P4u&|1au)?r*IACu|Oaf4J{XT>c$j4nj{|hp*%V`r4#2|KVp- z1{y+MCVaO-K5P^1aqVwyboC_r8)B?gU)VObcbpXFu#v=cx@o#+6&H~)B(SSf7?V?#<+;!6q9luXos?w2Jj}~H&D%2M+xdcJD{Bq#?|jL5l-xU4*53P?F=QK#eMP^wJdQT~kToxTFgt)XL0|fQclh_aJidqTp1zsx|8VU5zcHM<&g)vw9JE&# z@^wvb9YXEQbLdA8V*8F{9y^(~kGWfQ-nq1g_owNJC zgkyt!$o`%BSia5kZS8f+mp)hT*Va(KXm7YrP9L1|X5Z%-!UnL-^|xr3D|_k*#|rD~ zSke&xsUC*;y5#xyTz(u#{F|qFTZXov`$5^y8{>?6&$%jXol!q^zkUBFAorhvkAe37 zTlj=O=h?od-fyv|WC(NHGfCeQsQdlM#-ecVdpz#tPydNG)Am38qY-^y{jcw@B?$YU zdM!eH0O26&c?#hzl>HL6%@}N)TKA+X<8q#C0mnY|n{DgZrwyd;OE$G*zr3kyz0Wb* zeNtZUI<36sbwIxTtJ_&$FZ1Ng`z_P5)gk8NJVP09&Tao!4`9QF4tD%eH~2o7I>frq zi2r>5udYivt{wyO{F}FBSQavux!$1MJ1#J{GUFLUkXLXWBFKe*2iRXgTUw^^ALW?f?4UY*5|S`@i-#5d8IyK8I+aL|6`u#e8q8*`E$m2Rls*qOS|gx)!%Qwf0bi>eg6bE z1J}OvySo0VF5U`$)=gGb$1`bDDFfO&_Q%w}Y?Fi}1M=bg-R~9XPfa>F zF9+&_G`8BlsegGrJjeWBIZES>V=%As}eI_jL^Z_Lm|HP}}_mizv@giq7ncN1Psd!GxA2M2B^wvymNkiZ|?W8uUQxGx4i29Z@L^=zP?H4BKk4R({o7xQ=WE(}9OJ?iZ1Fmum1nQa52|_hIQ0+h0sDkLRp)H_PK0flLgUrP zp7VO|OMOcI z<9xz7i1#|~Fz?LtO``vzEo>9?e^Ec5bx8F=ZtO2pSr_>aZTcbYISkxJn_mFuM-uK1 zHU(>Nz8~mAzjwUvjP93v-``6%U$XgUy6?+B<)raH_W5!w|1E%PfE_5a8}Yti4d9&P zNYXB(PInN0iuhZ^KP5gE{wFX$C?MPNU)hV5mjSuAKil^9S8XBfGvGH9@(3HLoEB^L z#4BO>p15D$<YPbfpqUmJqwwB=p< zOZOU@7kS2aJ}AR)Puc$q@E`B^QmxYzC&9+MtCjlehNJ73pV4}eHTk3 z)9#<_3jdwp-*q16ddb&kzn^KFPu|myyej)Y(>Or6?$2*U+0F(0UUUz_rGR_=wgrv_ zXM-C+?872$IGl`Oem9l5T)ew1&#A8`&Xs@p(l*piaDM3e4bSH{Ya%pWh3M0yMW}xF zJa$Nl@h5z2+Sqbxe(1C4|MH*j|JD3!b9#?`mih^BS*B z_Yr2~74KtHC-?Hjx5v0A`agAud6O~#|9+ot61wv?HyozuLc#(cE0)OXt*3b13hYs*LwF8~&$+_dT{yO`zeatx;Hc-a6?SDZh#JWiN zID9qwYx3}Vd9eN6&uf0lLYng%{!;%}7WGG{OQ?SZJX7SU@7B4bdPOL=A{~3qYb@V; za(TqJ82px@d?RB;`S*PeWl&v|t(=FUWp|tXI}#~zW-|jrWQ76p~Nn z{m;A%pl_=6fOCQlV1D4*@Jc`*lrnH4xSD!Dh8^@F?>S6jd@nfm;gies(b?DKh-(6_ zeQGz^e%b=IuVX|)vJ+->?DgKKKUEn}56D0D2*^kB4e4*PuWRS|UY7m|c~>uKtGlPe z`yF4bqk6<|%xWJb-cvnNn9{w*vB!J7*F4B8BhQ!@YXeeNkuo#N)-DWRhc*&&UXT6% z1NOgr86O4qBlq%eN1W(teaO?kKPUXpM%bL^YDzzgcR1kiSLyo1c|Nr7D+7)LReGRt zSq9t}67T0xejDoooEI!Yy821`bbmtUD|ezxU&EjO19D$ayBD1cYNPw@9s9ducb zNo|?hwwim=EAxqTO}a-JunheOc^R-AInf{N+Ma8#)j~zf&R!e zr%dJ8XT4seG(*$9)_c5{Je-p{2M*i6%yWjVlPLr2f6DM%7m@pdd)TlizM<{kp#AQr z{hV8ATWvwuANaoZyc}zbw?r>h{?8Q7=o zNsm@Iv>z*5v{i|Eg%8MmDB2tPqtyrQ2h=7spCn7h9dlf((Z+DEo@t45#|g*%G#Az1 zY?^iU8n5*p?_^=< zAawn;JLlB7{(oc(*6Q5P862^eknhI-<9L#RG#)q>Pc{5qSR?<`CuBjrpxvp=sjuZd%}bK5u@AdO;J7cpiF@ad zt~04STx%4@O-p`7uk{}9)h9(>Y5waRIAEEUjjqYqhggrUm_*x+rJf&A&!OOE+VC`Z z-j(>er2CFl7p|F;(06T{YnyZYhwz{DK>B`5UJv+=2z6*=*@VswTqp8fV&DB-4CtTO ziL_I|EgZkVwV$HbenO7w&)D1bUp3)};jP*1$b zb#cA-dB6E288CnQy5lf)38-_F8OxRLhWruQ^zy17NM7Yso5A1U8ZUIr*Xct=l#3{WS>gXX|_f$Ic4sPpo~HvxxH&npR^Bz-uc ze$A<%fGo&uw3A%PnSN9Ik$PDh!9Gnt%4k2o+*6O(kEq?{HFB>{H^F21(;jp_scqmKO?{%icfOxw$-H=$fcAywyvA#h!;E{K z=hb2JI`^r3lY+9`+Z$z52fr&^M5bKt{Q|rW9;Dqa1Gb;*Z7UJ>B8>0!P`>^+|F1Lb zH2L|Xf0mKP8fAd;;~f#|67~S~bDh9<13PnWNn~JM(j2=k;8=ga+h8=u%6Yv$9`&Pr z%RXR#aXs91!lX;(!TwopFTaOUBwiql|LHK@KIL^~y_|W!`IukIS2;`kQ+DhLW$c)S z|Fn)op0W49I%xmd-}MW*zHFLfhk5WE74AI-nRY(c#J9QK56M1;dgghxtU1-A>#cib zKfC29Yt+#>QGxzHj`kW!J}(jaZq)gd;k@5D)$)WrvHd!LHo*So|F-_G@t^DgWzIOd zr(z3GAIAW{@!_0A|6p(Gz8Y|^z-i!i(p}5=5-8_&iGS^G`f#+fK2`SzsYBHXsc*tf z2IRlMI!nkw`8e9s>%886n)VmDhs1nEb^q5c_d5HjJP7iutR>2~_5n6ara#C%Yo;j+ z`gW*)iD%0rBQ3+$%oqb=FD&xne^=Cz$5h7mT5OXd^0_K)}-%H&%oP3AT zUjHCInD*SAxbyzLq`Uq)C;iQDF4)%opL=DV_DA=B^RJcx>JaM%)X{NBThRSNa}w`K zT~`2GQ}5$QyUynVpMW1puYv!f{a+ogo$VaJKB)~SmuXxsbCbclDCS{X+NSdF_1@?G z`f~ImxzEP&zq)cs~>_yydLw>X}rAybF)D8C*BU zrVIa!dO}-4-;y#*zbo-P75#6Vw0I|kYhr%NJ$}Qvo^gFDdHK#-*nO#-R2FqDq8}zv zzb|Q@S7@Jm2`?r*1Z+-xMPPqYulm2u+SZLZsJ5k3)!CJ(31NyLC%XpjfqmlI~__=(KA?AMW*|pEw&WZaO^?&=kI)G5vpMo>5 z7v66^=4ZcmZfQB%1<4nny{>F%Bgl7N2E1SY5&hQh!Nfkoq>uCux~8w+!n~9Np&yI6 zLd;d^_hFN8Pmz6k1@iE_&UMH|tbrx|EtC4{2Pm*M=)8Xf?K6ya`Uee!#>Kj{GVj`I%tK6OiT0lyE^n)=TPdV-ax|Bi&G5W1G}3Uj}2@XPo= zi0a5#JCUcvzqXvVmNvX|IosTJl4}s08`6%^&Yt%=uTS&;#J}Udeb#c^4~opiyMNTN z$!8ygBtgnzS3hbM*Z$@x4w(@2MxlkCym%jI~d)$2In9IEFhes5{Zsv3BBp z+EN~y?s=~Bzhb>F_MMrJ^5pzo{w&8aLHo^qOMSv8udVLBRrN+0mHiox<@$!TPdz7Z zsqd-}v>lW?VO$w0pAS8+4Cw15kN93AwoQx+rYCTp|M@VPeIlRHHqV2*sN4DQejuUq z=M{*%=W3qv*zdgGZ?S~#|D)&qKPOlD`Jlc4<^awK8zaZs0PTn?vrB@393M=0Ie3z1 z9mV&trf45m^Y0u^o6U7W^(wj|;@AoL$XqWius5{ex+%w*_5;`Y9n84icL%)Re5(0Z zHz-%?YU<%$fug=w{Ri+_@y%+FVe`kn6aBYojF4OOPJr>J)DX(&D>f;1M8^KdBL1eL zwxfDTIZ-!&_^t~&$^Uo@pAXz#OWjVQy>=sX?CeX}6}aBxT8r~O$Nm_9|4jbXJ7UpA z7md(5m32UK>g_lF{N9jz#nvUtnL)gzBBlDBW{Oj9^aaz9A)vgWdOCgVdwi-59 zrXQ6x6aU+{=-P?L+G3vP+Kjy8KKI`^ew&~AKlT3{|6W_9PR_Y&@xjO3Tt4K*dZC~E z@2FU(bZtQH6W{LhO#43bdy&&V&~zR5gpZ%+$#~|BH86Eeg@48h|NnCmHs&bm@;uLQ z2laB!Z(nh}XC=~m6Q7TGdqTgF*epNx%m1JCllvrp+5q(XM)1~%I%)@M1Gqn-7vbt0 zyI1vea5ru74z~FO+Bx=x>4TT2#J{#x^3@p1r+eq@(~R-qOE>gbA0Fr9J%93!`?x<# z{Hy=9|I{<`@0uSznj+WM1OG>40(Rj9d^xQ?Q!2_W}MRJEQggoFZXhu_I+1} zp7R=IKwaRy=0RRX#-8}!Hgyd)MiIHJVaytXAKbORhk$<4vp`GsXhjIc!1mb6(+jWu=_AJ{q~70>)9tG1TX4 z{0~2Hekw9h2mke~-PXZb9rY?GYjP>4_VL8|jNbq88n5*pZBliYvc$L)vPBt1p1ltL zl<)L?NZUL?J#GNn{QH7UL4Wv;zE8Zp{R!RLl)1LwMC9W-VD7X?i8A_Xcg$|fPo7A&s(*73wXtz7w>c6$$>wEWDn_OS6wjcIZ^dpZ= z_dM76ZS44e9goc?@l7A|J(~=hBSSancb5C{)afh2kLgqI;^+AgJ90Gs!%5^n75ic$ z`rrRd4!;dtrvHGRDgM;~@~J?91Ts%5WdEqVL@4Yic@BfjO2;dCfg#Q;dmAZ_l9^U}hqh10}Bg0Q%r@x4<_=>WBWKWoSVGP_&q!0W5?-_kM zzR#ZYKmFf#u`BNZsuwsH*Lbb>aBq=y%v$>YMEuE<7?-Bt9~{SeF-B;LDD+Wetvr;{C)JVitbOgmpuGgKkGn0t@weQ133Ou@96)8?hENe7;6DM z%dW&vApbsw zbiLl=#DB`qai9LC4p#3^1Y;=wBf^(y>qiM)o4Ap>-^x7vapo28V-tMDJmF)?90P|n z*mABrBpr~+Gki~j#65jKeAL`iRCdV2|7sr1TJRY3%D1csz61CFqRd;U$Av)d2XVXs zq3b-oh|dq^B<`AOd@r5QZ?a4??*3WaTW&S~^y@~#dQ$J^ge^fwpdV;O>b^B`_XJ%F zo@P$;DYm!Y=?%MEzJz=_X47sZ?KszTd{2TlERv75TSgf3c+zA3?RAXx+7fYp$}8ok zPaYjy!@c9cNb2`0;ltp1a3MGYoP`Wr3h%doN6}HwV3&TxI5L5`e=YsF4jCxGZ-Fts zDBwI$K8|xRTq9^a7H`{emLcozLQgtD#yXY(9~6Al6ciMw9nnD72RZD;+c z(f84%{)fU}M)xPV%iDn1u`vgrZIuJZDs8~_94|n88N!W#evONHwg=$j1LlGL$9LsB zt@5Q$-t{2;wfbJP-5kTw-EyB0|L>*G$8p{@KG$p9Yo)y8`FDI^?5{_kPo(V8lw7S|3Q2+`^1u6dhlpW&V%*f=-P_s=806Tl&0H_F?F&_1t!XGxA10t;~LJb!j%CD!)|T}z4m zU4Nxg;@aZ=XUZTrJb>}-By`p}$iv^5OI*$T0LMFm6FI(~wXqlR(~QFx>NkX34{$G^?`+1L-8CE6 zUWD@kd3JozM({YD^E%fAyw7=Ic@7ZY%42@%`s-Je{W|r~&vrS`4z(Wkclqwkxo*^{ zEAbvczqNaA`V+22sNBZ*Ki0h7Jppb2r&AaC8%TUP;`YPN#NA&ZACAHE5q2eQVd6^=E(?@})j3{^(0exm z%EiXza0AY*Pdtq!D-qX^w=|*lkL!5dh?{o@+9G%-y*0Wr_VW@?{eC*`)w6%aU$RM+ zQO7BsFLVK6V`SR3YHb<69nh7~wp<(R0#3%hxfx%`EBNu%0e(ZMz!+L!A8nCwG}cSx zIB}1S9sH*-$$;YkKA|G_6&Rmm{}uVwqgy7CHj;9lrM%my!}){<1N-vIU{TN&$h&rz zI#_v~oqD^M+3((VAx)j&T84esefa7Ic?}R>iZtQ)p}%WU+QNCf_jLpIb>(X=LiM5L z=pSiG*c|@D&a3YCsclpL`YZBpoznP}#sHo}Sx|?m%d`P(TgSPu136X)90V@Fu73!7 zX#{g6|F^AHO%#E&bP`xi--3jG*cG6w5Y)M>Bg#4K9e^u$nu>P*a$)z&U6?ngWT6FOo*K{VdkIzF| z((iK;_x}^x5Vj&Tf7fxF5&9mD<9vfU|F6!y{3kgztR4e+KIZ|prES=aurJT5j@$)k zBVCOzU?}VQ{%_YL_Xfb@ROU{FnczRx+PTg(+Zyis5ud_O^f*tP3sgy}yoT5?Zo;CcIOd(O8v1apy({(0v&>I(CT zb6o5H?D#%R{NEkN>Of_y8EL^e_XY3t{a8EEc2@)hj zt!y7c`-O8|?EuG3?WMuUz%8uBKgXQ!bLMJ4U{n7@|F5%OqyN*M*^K@ket1Jc-}jx0 zBG=W?|HpIRm&^mcWPUK5{X0*aFZo|Uc}Ecr0`Yxxj(dU5)J1(9^DW{{fi_D(emK_@ zC=1F)3*xTB$Yp~4S;R5t)ODdlyoY$m6Y=1jW&9Gq&6RMegO_Uw$5_ z4k)h&Y6se`wnbZ>S-VG_xj0xI=y!2EJ`b*LN8X>qPxk@(;A_TzeJT1;i}Ebsyn=FC z_*uDb3fF&2e}A3(pCO<7$?rTEO_O)8%k!Sv@Bb3-sji8C$1d$a zpN~H1^V%-z(XayuoeMbM(w=s`YasERi62Q^-masqTp##1`=UQ$&G$=e`v0&7I1Zl2 z+W#zdKULV? z)KdveypRP-x=e&k8g$Q~|2E#M`A>GN&u!b;w`dE;SnVNY!1>_ZK)<(opdazI zz!qRPpiQ9u9t_+Yb1~s%gqM-WrG(Dq&LljM(6K{3?-;)cSQD%O`fz?h;GE5}lso;a z+9Gn_w9I|u>V7Ft334iYmW0H2b(qc@ru(WnPkJ)xdXN8`e(Cx0;{fgMx=`5Dv{?%{ zaNN}va2$5dyfElXd}YFQ!4{m;F4&9seuRgD!^+`7gzEP_fa`T$yFSpCSRO1vJ_`|= zZ<^mZchkQbyd#fIQool&xw78EdRHTzOJS0Y>M)&8Vams2`TlR^JTJfLSyLO>wzjc) zz&3{m^?-d)8E}2jIoLdK(w%TII9dj*0M_7mJ;DtMH{-g^i0e1ngiv4Wdc@Ztz9OOP zDT@Q;XaSDRFZoTpK)<*&=P)qiW;=d~?tQ{y=q za1IoDfHe0AIuTLfE(=r=hIE#Kz$s#fVktc zd)~Cq=OxrXqhEDFpda1P@w`X*SRd?spc841@Amf?C%v=jJBm>$;^glTX8GxVgsc@{X)jq2~&Hk&eRZblrlAl!{vhv}vw!C^nAARz{ zxqj+ABXm9KjyGYC%ennN*=E))>3rj}e!qVU*sj$wpv?pa+T7tsQ5T?}^$*1S0G{-< z`kt${y8k^Yx9)|Ekhr#-b2!I!eM;Js?lsZxrcR0e&bgS2k$>>+vD_znJkR|s{(pb& z^EoCNFtpw6i|`e4059^dFHLy@H8{ybc8{Twf z#`~OGR5obe{KaTH)a!ze-`_DiQDq}>hAGX^>y(FdulbuMlB}gN|NN()RfE(5 ziIc=p(g}&XbUuZNU&EA^!gNobbMs5*Q<<~Ezh(<0o(%KykdOb`YyO%~I;&PQ(*k*} zXEr`F`Odm#RtwB(fmtmus|9AYz^oRS)dI6xU{(vvYJpiTFslV-wZN= 1024) ? cm : (entcs_GetClientColors(cm - 1) + 1024); + if(MUTATOR_CALLHOOK(ForcePlayermodels_Skip, this, islocalplayer)) goto skipforcemodels; @@ -193,9 +196,6 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) // apply it bool isfriend; - int cm; - cm = this.forceplayermodels_savecolormap; - cm = (cm >= 1024) ? cm : (entcs_GetClientColors(cm - 1) + 1024); if(teamplay) isfriend = (cm == 1024 + 17 * myteam); @@ -227,6 +227,11 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) this.skin = this.forceplayermodels_saveskin; } + LABEL(skipforcemodels) + + if(MUTATOR_CALLHOOK(ForcePlayercolors_Skip, this, islocalplayer)) + goto skipforcecolors; + // forceplayercolors too if(teamplay) { @@ -280,7 +285,7 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer) this.colormap = player_localnum + 1; } - LABEL(skipforcemodels) + LABEL(skipforcecolors) if((this.csqcmodel_effects & CSQCMODEL_EF_RESPAWNGHOST) && !autocvar_cl_respawn_ghosts_keepcolors) { diff --git a/qcsrc/client/hud/panel/scoreboard.qc b/qcsrc/client/hud/panel/scoreboard.qc index 120feeafa..999968020 100644 --- a/qcsrc/client/hud/panel/scoreboard.qc +++ b/qcsrc/client/hud/panel/scoreboard.qc @@ -364,13 +364,13 @@ void Cmd_Scoreboard_Help() // e.g. -teams,rc,cts,lms/kills ?+rc/kills #define SCOREBOARD_DEFAULT_COLUMNS \ "ping pl fps name |" \ -" -teams,rc,cts,inv,lms/kills +ft,tdm/kills ?+rc,inv/kills" \ -" -teams,lms/deaths +ft,tdm/deaths" \ +" -teams,rc,cts,inv,lms,surv/kills +ft,tdm/kills ?+rc,inv/kills" \ +" -teams,lms,surv/deaths +ft,tdm/deaths" \ " +tdm/sum" \ -" -teams,lms,rc,cts,inv,ka/suicides +ft,tdm/suicides ?+rc,inv/suicides" \ -" -cts,dm,tdm,ka,ft/frags" /* tdm already has this in "score" */ \ +" -teams,lms,rc,cts,inv,ka,surv/suicides +ft,tdm/suicides ?+rc,inv/suicides" \ +" -cts,dm,tdm,ka,ft,surv/frags" /* tdm already has this in "score" */ \ " +tdm,ft,dom,ons,as/teamkills"\ -" -rc,cts,nb/dmg -rc,cts,nb/dmgtaken" \ +" -rc,cts,nb,surv/dmg -rc,cts,nb,surv/dmgtaken" \ " +ctf/pickups +ctf/fckills +ctf/returns +ctf/caps +ons/takes +ons/caps" \ " +lms/lives +lms/rank" \ " +kh/kckills +kh/losses +kh/caps" \ diff --git a/qcsrc/client/mutators/events.qh b/qcsrc/client/mutators/events.qh index 0629c2a9f..2b1792878 100644 --- a/qcsrc/client/mutators/events.qh +++ b/qcsrc/client/mutators/events.qh @@ -179,13 +179,20 @@ MUTATOR_HOOKABLE(DrawViewModel, EV_DrawViewModel); /** Called when updating the view's liquid contents, return true to disable the standard checks and apply your own */ MUTATOR_HOOKABLE(HUD_Contents, EV_NO_ARGS); -/** Return true to disable player model/color forcing */ +/** Return true to disable player model forcing */ #define EV_ForcePlayermodels_Skip(i, o) \ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ /** is local */ i(bool, MUTATOR_ARGV_1_bool) \ /**/ MUTATOR_HOOKABLE(ForcePlayermodels_Skip, EV_ForcePlayermodels_Skip); +/** Return true to disable player color forcing */ +#define EV_ForcePlayercolors_Skip(i, o) \ + /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ + /** is local */ i(bool, MUTATOR_ARGV_1_bool) \ + /**/ +MUTATOR_HOOKABLE(ForcePlayercolors_Skip, EV_ForcePlayercolors_Skip); + /** Called when damage info is received on the client, useful for playing explosion effects */ #define EV_DamageInfo(i, o) \ /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \ diff --git a/qcsrc/common/ent_cs.qc b/qcsrc/common/ent_cs.qc index a7aa27961..abd7c2c35 100644 --- a/qcsrc/common/ent_cs.qc +++ b/qcsrc/common/ent_cs.qc @@ -152,6 +152,11 @@ ENTCS_PROP(SOLID, true, sv_solid, solid, ENTCS_SET_NORMAL, { WriteByte(chan, ent.sv_solid); }, { ent.sv_solid = ReadByte(); }) +// gamemode specific player survival status (independent of score and frags) +ENTCS_PROP(SURVIVAL_STATUS, true, survival_status, survival_status, ENTCS_SET_NORMAL, + { WriteShort(chan, ent.survival_status); }, + { ent.survival_status = ReadShort(); }) + #ifdef SVQC int ENTCS_PUBLICMASK = 0; diff --git a/qcsrc/common/gamemodes/gamemode/_mod.inc b/qcsrc/common/gamemodes/gamemode/_mod.inc index a33ec87a0..e261fa7b9 100644 --- a/qcsrc/common/gamemodes/gamemode/_mod.inc +++ b/qcsrc/common/gamemodes/gamemode/_mod.inc @@ -15,4 +15,5 @@ #include #include #include +#include #include diff --git a/qcsrc/common/gamemodes/gamemode/_mod.qh b/qcsrc/common/gamemodes/gamemode/_mod.qh index ffd71d59d..928bd44cb 100644 --- a/qcsrc/common/gamemodes/gamemode/_mod.qh +++ b/qcsrc/common/gamemodes/gamemode/_mod.qh @@ -15,4 +15,5 @@ #include #include #include +#include #include diff --git a/qcsrc/common/gamemodes/gamemode/survival/_mod.inc b/qcsrc/common/gamemodes/gamemode/survival/_mod.inc new file mode 100644 index 000000000..7121d392e --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/survival/_mod.inc @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#ifdef CSQC + #include +#endif +#ifdef SVQC + #include +#endif diff --git a/qcsrc/common/gamemodes/gamemode/survival/_mod.qh b/qcsrc/common/gamemodes/gamemode/survival/_mod.qh new file mode 100644 index 000000000..875e4d247 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/survival/_mod.qh @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#ifdef CSQC + #include +#endif +#ifdef SVQC + #include +#endif diff --git a/qcsrc/common/gamemodes/gamemode/survival/cl_survival.qc b/qcsrc/common/gamemodes/gamemode/survival/cl_survival.qc new file mode 100644 index 000000000..a7899dadb --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/survival/cl_survival.qc @@ -0,0 +1,40 @@ +#include "cl_survival.qh" + +#include + +void HUD_Mod_Survival(vector pos, vector mySize) +{ + mod_active = 1; // survival should always show the mod HUD + + // since survivor state is the default value, spectators are considered survivors + // so we must hide them manually here + if(entcs_GetSpecState(player_localnum) == ENTCS_SPEC_PURE) + return; // no icon while spectating + + int mystatus = entcs_receiver(player_localnum).survival_status; + //string player_icon = ((mystatus == SURV_STATUS_HUNTER) ? "player_red" : "player_neutral"); + string player_text = ((mystatus == SURV_STATUS_HUNTER) ? _("Hunter") : _("Survivor")); + vector player_color = ((mystatus == SURV_STATUS_HUNTER) ? '1 0 0' : '0 1 0'); + //drawpic_aspect_skin(pos, player_icon, vec2(0.5 * mySize.x, mySize.y), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos, player_text, vec2(mySize.x, mySize.y), player_color, panel_fg_alpha, DRAWFLAG_NORMAL); +} + +REGISTER_MUTATOR(cl_surv, true); + +MUTATOR_HOOKFUNCTION(cl_surv, ForcePlayercolors_Skip) +{ + if(!ISGAMETYPE(SURVIVAL)) + return false; + + entity player = M_ARGV(0, entity); + entity e = entcs_receiver(player.entnum - 1); + int surv_status = ((e) ? e.survival_status : 0); + int mystatus = entcs_receiver(player_localnum).survival_status; + + int plcolor = SURV_COLOR_PREY; // green + if((mystatus == SURV_STATUS_HUNTER || intermission || STAT(GAME_STOPPED)) && surv_status == SURV_STATUS_HUNTER) + plcolor = SURV_COLOR_HUNTER; // red + + player.colormap = 1024 + plcolor; + return true; +} diff --git a/qcsrc/common/gamemodes/gamemode/survival/cl_survival.qh b/qcsrc/common/gamemodes/gamemode/survival/cl_survival.qh new file mode 100644 index 000000000..6f70f09be --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/survival/cl_survival.qh @@ -0,0 +1 @@ +#pragma once diff --git a/qcsrc/common/gamemodes/gamemode/survival/survival.qc b/qcsrc/common/gamemodes/gamemode/survival/survival.qc new file mode 100644 index 000000000..1f2d14402 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/survival/survival.qc @@ -0,0 +1 @@ +#include "survival.qh" diff --git a/qcsrc/common/gamemodes/gamemode/survival/survival.qh b/qcsrc/common/gamemodes/gamemode/survival/survival.qh new file mode 100644 index 000000000..314ec629e --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/survival/survival.qh @@ -0,0 +1,10 @@ +#pragma once + +// shared state signalling the player's survival status +.int survival_status; +const int SURV_STATUS_PREY = 0; +const int SURV_STATUS_HUNTER = 1; + +// hardcoded player colors for survival +const int SURV_COLOR_PREY = 51; // green +const int SURV_COLOR_HUNTER = 68; // red diff --git a/qcsrc/common/gamemodes/gamemode/survival/sv_survival.qc b/qcsrc/common/gamemodes/gamemode/survival/sv_survival.qc new file mode 100644 index 000000000..72a0c499e --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/survival/sv_survival.qc @@ -0,0 +1,420 @@ +#include "sv_survival.qh" + +float autocvar_g_survival_hunter_count = 0.25; +float autocvar_g_survival_round_timelimit = 180; +float autocvar_g_survival_warmup = 10; +bool autocvar_g_survival_punish_teamkill = true; +bool autocvar_g_survival_reward_survival = true; + +void surv_FakeTimeLimit(entity e, float t) +{ + if(!IS_REAL_CLIENT(e)) + return; + msg_entity = e; + WriteByte(MSG_ONE, 3); // svc_updatestat + WriteByte(MSG_ONE, 236); // STAT_TIMELIMIT + if(t < 0) + WriteCoord(MSG_ONE, autocvar_timelimit); + else + WriteCoord(MSG_ONE, (t + 1) / 60); +} + +void Surv_count_alive_players() +{ + total_players = 0; + FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), + { + ++total_players; + }); +} + +void nades_Clear(entity player); + +void Surv_UpdateScores(bool timed_out) +{ + // give players their hard-earned kills now that the round is over + FOREACH_CLIENT(true, + { + it.totalfrags += it.survival_validkills; + if(it.survival_validkills) + GameRules_scoring_add(it, SCORE, it.survival_validkills); + it.survival_validkills = 0; + if(autocvar_g_survival_reward_survival && timed_out && IS_PLAYER(it) && !IS_DEAD(it) && it.survival_status == SURV_STATUS_PREY) + GameRules_scoring_add(it, SCORE, 1); // reward survivors who make it to the end of the round time limit + }); +} + +float Surv_CheckWinner() +{ + if(round_handler_GetEndTime() > 0 && round_handler_GetEndTime() - time <= 0) + { + // if the match times out, survivors win too! + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_SURVIVAL_SURVIVOR_WIN); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_SURVIVAL_SURVIVOR_WIN); + FOREACH_CLIENT(true, + { + if(IS_PLAYER(it)) + nades_Clear(it); + surv_FakeTimeLimit(it, -1); + }); + + Surv_UpdateScores(true); + + allowed_to_spawn = false; + game_stopped = true; + round_handler_Init(5, autocvar_g_survival_warmup, autocvar_g_survival_round_timelimit); + return 1; + } + + int survivor_count = 0, hunter_count = 0; + FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), + { + if(it.survival_status == SURV_STATUS_PREY) + survivor_count++; + else if(it.survival_status == SURV_STATUS_HUNTER) + hunter_count++; + }); + if(survivor_count > 0 && hunter_count > 0) + { + return 0; + } + + if(hunter_count > 0) // hunters win + { + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_SURVIVAL_HUNTER_WIN); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_SURVIVAL_HUNTER_WIN); + } + else if(survivor_count > 0) // survivors win + { + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_SURVIVAL_SURVIVOR_WIN); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_SURVIVAL_SURVIVOR_WIN); + } + else + { + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_ROUND_TIED); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_ROUND_TIED); + } + + Surv_UpdateScores(false); + + allowed_to_spawn = false; + game_stopped = true; + round_handler_Init(5, autocvar_g_survival_warmup, autocvar_g_survival_round_timelimit); + + FOREACH_CLIENT(true, + { + if(IS_PLAYER(it)) + nades_Clear(it); + surv_FakeTimeLimit(it, -1); + }); + + return 1; +} + +void Surv_RoundStart() +{ + allowed_to_spawn = boolean(warmup_stage); + FOREACH_CLIENT(true, { it.survival_status = SURV_STATUS_PREY; it.survival_validkills = 0; }); + Surv_count_alive_players(); + int hunter_count = bound(1, ((autocvar_g_survival_hunter_count >= 1) ? autocvar_g_survival_hunter_count : floor(total_players * autocvar_g_survival_hunter_count)), total_players - 1); // 20%, but ensure at least 1 and less than total + int total_hunters = 0; + FOREACH_CLIENT_RANDOM(IS_PLAYER(it) && !IS_DEAD(it), + { + if(total_hunters >= hunter_count) + break; + total_hunters++; + it.survival_status = SURV_STATUS_HUNTER; + }); + + FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), + { + if(it.survival_status == SURV_STATUS_PREY) + Send_Notification(NOTIF_ONE_ONLY, it, MSG_CENTER, CENTER_SURVIVAL_SURVIVOR); + else if(it.survival_status == SURV_STATUS_HUNTER) + Send_Notification(NOTIF_ONE_ONLY, it, MSG_CENTER, CENTER_SURVIVAL_HUNTER); + + surv_FakeTimeLimit(it, round_handler_GetEndTime()); + }); +} + +bool Surv_CheckPlayers() +{ + static int prev_missing_players; + allowed_to_spawn = true; + Surv_count_alive_players(); + if (total_players >= 2) + { + if(prev_missing_players > 0) + Kill_Notification(NOTIF_ALL, NULL, MSG_CENTER, CPID_MISSING_PLAYERS); + prev_missing_players = -1; + return true; + } + if(total_players == 0) + { + if(prev_missing_players > 0) + Kill_Notification(NOTIF_ALL, NULL, MSG_CENTER, CPID_MISSING_PLAYERS); + prev_missing_players = -1; + return false; + } + // if we get here, only 1 player is missing + if(prev_missing_players != 1) + { + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_MISSING_PLAYERS, 1); + prev_missing_players = 1; + } + return false; +} + +bool surv_isEliminated(entity e) +{ + if(e.caplayer == 1 && (IS_DEAD(e) || e.frags == FRAGS_PLAYER_OUT_OF_GAME)) + return true; + if(e.caplayer == 0.5) + return true; + return false; +} + +void surv_Initialize() // run at the start of a match, initiates game mode +{ + allowed_to_spawn = true; + round_handler_Spawn(Surv_CheckPlayers, Surv_CheckWinner, Surv_RoundStart); + round_handler_Init(5, autocvar_g_survival_warmup, autocvar_g_survival_round_timelimit); + EliminatedPlayers_Init(surv_isEliminated); +} + + +// ============== +// Hook Functions +// ============== + +MUTATOR_HOOKFUNCTION(surv, ClientObituary) +{ + // in survival, announcing a frag would tell everyone who the hunter is + // for the sake of anonymity, a barebones + entity frag_attacker = M_ARGV(1, entity); + entity frag_target = M_ARGV(2, entity); + if(IS_PLAYER(frag_attacker) && frag_attacker != frag_target) + { + float frag_deathtype = M_ARGV(3, float); + entity wep_ent = M_ARGV(4, entity); + // "team" kill, a point is awarded to the player by default so we must take it away plus an extra one + // unless the player is going to be punished for suicide, in which case just remove one + if(frag_attacker.survival_status == frag_target.survival_status) + GiveFrags(frag_attacker, frag_target, ((autocvar_g_survival_punish_teamkill) ? -1 : -2), frag_deathtype, wep_ent.weaponentity_fld); + } + + M_ARGV(5, bool) = true; // anonymous attacker +} + +MUTATOR_HOOKFUNCTION(surv, PlayerSpawn) +{ + entity player = M_ARGV(0, entity); + + player.survival_status = SURV_STATUS_PREY; + player.caplayer = 1; + if (!warmup_stage) + eliminatedPlayers.SendFlags |= 1; +} + +MUTATOR_HOOKFUNCTION(surv, ForbidSpawn) +{ + entity player = M_ARGV(0, entity); + + // spectators / observers that weren't playing can join; they are + // immediately forced to observe in the PutClientInServer hook + // this way they are put in a team and can play in the next round + if (!allowed_to_spawn && player.caplayer) + return true; + return false; +} + +MUTATOR_HOOKFUNCTION(surv, PutClientInServer) +{ + entity player = M_ARGV(0, entity); + + if (!allowed_to_spawn && IS_PLAYER(player)) // this is true even when player is trying to join + { + TRANSMUTE(Observer, player); + if (CS(player).jointime != time && !player.caplayer) // not when connecting + { + player.caplayer = 0.5; + Send_Notification(NOTIF_ONE_ONLY, player, MSG_INFO, INFO_CA_JOIN_LATE); + } + } +} + +MUTATOR_HOOKFUNCTION(surv, reset_map_players) +{ + FOREACH_CLIENT(true, { + CS(it).killcount = 0; + if (!it.caplayer && IS_BOT_CLIENT(it)) + it.caplayer = 1; + if (it.caplayer) + { + TRANSMUTE(Player, it); + it.caplayer = 1; + PutClientInServer(it); + } + }); + bot_relinkplayerlist(); + return true; +} + +MUTATOR_HOOKFUNCTION(surv, reset_map_global) +{ + allowed_to_spawn = true; + return true; +} + +entity surv_LastPlayerForTeam(entity this) +{ + entity last_pl = NULL; + FOREACH_CLIENT(IS_PLAYER(it) && it != this, { + if (!IS_DEAD(it) && this.survival_status == it.survival_status) + { + if (!last_pl) + last_pl = it; + else + return NULL; + } + }); + return last_pl; +} + +void surv_LastPlayerForTeam_Notify(entity this) +{ + if (!warmup_stage && round_handler_IsActive() && round_handler_IsRoundStarted()) + { + entity pl = surv_LastPlayerForTeam(this); + if (pl) + Send_Notification(NOTIF_ONE, pl, MSG_CENTER, CENTER_ALONE); + } +} + +MUTATOR_HOOKFUNCTION(surv, PlayerDies) +{ + entity frag_attacker = M_ARGV(1, entity); + entity frag_target = M_ARGV(2, entity); + float frag_deathtype = M_ARGV(3, float); + + surv_LastPlayerForTeam_Notify(frag_target); + if (!allowed_to_spawn) + { + frag_target.respawn_flags = RESPAWN_SILENT; + // prevent unwanted sudden rejoin as spectator and movement of spectator camera + frag_target.respawn_time = time + 2; + } + frag_target.respawn_flags |= RESPAWN_FORCE; + if (!warmup_stage) + { + eliminatedPlayers.SendFlags |= 1; + if (IS_BOT_CLIENT(frag_target)) + bot_clear(frag_target); + } + + // killed an ally! punishment is death + if(autocvar_g_survival_punish_teamkill && frag_attacker != frag_target && IS_PLAYER(frag_attacker) && IS_PLAYER(frag_target) && frag_attacker.survival_status == frag_target.survival_status && !ITEM_DAMAGE_NEEDKILL(frag_deathtype)) + if(!warmup_stage && round_handler_IsActive() && round_handler_IsRoundStarted()) // don't autokill if the round hasn't + ClientKill_Silent(frag_attacker, 0); + //Damage(frag_attacker, frag_attacker, frag_attacker, 100000, DEATH_AUTOTEAMCHANGE.m_id, DMG_NOWEP, frag_attacker.origin, '0 0 0'); + return true; +} + +MUTATOR_HOOKFUNCTION(surv, ClientDisconnect) +{ + entity player = M_ARGV(0, entity); + + if (IS_PLAYER(player) && !IS_DEAD(player)) + surv_LastPlayerForTeam_Notify(player); + return true; +} + +MUTATOR_HOOKFUNCTION(surv, MakePlayerObserver) +{ + entity player = M_ARGV(0, entity); + + if (IS_PLAYER(player) && !IS_DEAD(player)) + surv_LastPlayerForTeam_Notify(player); + if (player.killindicator_teamchange == -2) // player wants to spectate + player.caplayer = 0; + if (player.caplayer) + player.frags = FRAGS_PLAYER_OUT_OF_GAME; + if (!warmup_stage) + eliminatedPlayers.SendFlags |= 1; + if (!player.caplayer) + { + player.survival_validkills = 0; + player.survival_status = 0; + surv_FakeTimeLimit(player, -1); // restore original timelimit + return false; // allow team reset + } + return true; // prevent team reset +} + +MUTATOR_HOOKFUNCTION(surv, Scores_CountFragsRemaining) +{ + // announce remaining frags? + return true; +} + +MUTATOR_HOOKFUNCTION(surv, GiveFragsForKill, CBC_ORDER_FIRST) +{ + entity frag_attacker = M_ARGV(0, entity); + frag_attacker.survival_validkills += M_ARGV(2, float); + M_ARGV(2, float) = 0; // score will be given to the winner when the round ends + return true; +} + +MUTATOR_HOOKFUNCTION(surv, AddPlayerScore) +{ + entity scorefield = M_ARGV(0, entity); + if(scorefield == SP_KILLS || scorefield == SP_DEATHS || scorefield == SP_SUICIDES || scorefield == SP_DMG || scorefield == SP_DMGTAKEN) + M_ARGV(1, float) = 0; // don't report that the player has killed or been killed, that would out them as a hunter! +} + +MUTATOR_HOOKFUNCTION(surv, CalculateRespawnTime) +{ + // no respawn calculations needed, player is forced to spectate anyway + return true; +} + +MUTATOR_HOOKFUNCTION(surv, Bot_FixCount, CBC_ORDER_EXCLUSIVE) +{ + FOREACH_CLIENT(IS_REAL_CLIENT(it), { + if (IS_PLAYER(it) || it.caplayer == 1) + ++M_ARGV(0, int); + ++M_ARGV(1, int); + }); + return true; +} + +MUTATOR_HOOKFUNCTION(surv, ClientCommand_Spectate) +{ + entity player = M_ARGV(0, entity); + + if (player.caplayer) + { + // they're going to spec, we can do other checks + if (autocvar_sv_spectate && (IS_SPEC(player) || IS_OBSERVER(player))) + Send_Notification(NOTIF_ONE_ONLY, player, MSG_INFO, INFO_CA_LEAVE); + return MUT_SPECCMD_FORCE; + } + + return MUT_SPECCMD_CONTINUE; +} + +MUTATOR_HOOKFUNCTION(surv, GetPlayerStatus) +{ + entity player = M_ARGV(0, entity); + + return player.caplayer == 1; +} + +MUTATOR_HOOKFUNCTION(surv, BotShouldAttack) +{ + entity bot = M_ARGV(0, entity); + entity targ = M_ARGV(1, entity); + + if(targ.survival_status == bot.survival_status) + return true; +} diff --git a/qcsrc/common/gamemodes/gamemode/survival/sv_survival.qh b/qcsrc/common/gamemodes/gamemode/survival/sv_survival.qh new file mode 100644 index 000000000..ad68f02bf --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/survival/sv_survival.qh @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +void surv_Initialize(); + +REGISTER_MUTATOR(surv, false) +{ + MUTATOR_STATIC(); + MUTATOR_ONADD + { + GameRules_scoring(0, SFL_SORT_PRIO_PRIMARY, 0, { + }); + + surv_Initialize(); + } + return false; +} + +.int survival_validkills; // store the player's valid kills to be given at the end of the match (avoid exposing their score until then) diff --git a/qcsrc/common/mapinfo.qh b/qcsrc/common/mapinfo.qh index 9b4dfa257..c1fff6350 100644 --- a/qcsrc/common/mapinfo.qh +++ b/qcsrc/common/mapinfo.qh @@ -608,6 +608,34 @@ ENDCLASS(Duel) REGISTER_GAMETYPE(DUEL, NEW(Duel)); #define g_duel IS_GAMETYPE(DUEL) +#ifdef CSQC +void HUD_Mod_Survival(vector pos, vector mySize); +#endif +CLASS(Survival, Gametype) + INIT(Survival) + { + this.gametype_init(this, _("Survival"),"surv","g_survival",false,true,"","timelimit=20 pointlimit=20",_("Identify and eliminate all the hunters before all your allies are gone")); + } + METHOD(Survival, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter)) + { + return true; + } + METHOD(Survival, m_isForcedSupported, bool(Gametype this)) + { + if(!cvar("g_duel_not_dm_maps")) + { + // if this is set, all DM maps support Survival too + if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH.m_flags)) + return true; // TODO: references another gametype (alternatively, we could check which gamemodes are always enabled and append this if any are supported) + } + return false; + } +#ifdef CSQC + ATTRIB(Survival, m_modicons, void(vector pos, vector mySize), HUD_Mod_Survival); +#endif +ENDCLASS(Survival) +REGISTER_GAMETYPE(SURVIVAL, NEW(Survival)); + const int MAPINFO_FEATURE_WEAPONS = 1; // not defined for instagib-only maps const int MAPINFO_FEATURE_VEHICLES = 2; const int MAPINFO_FEATURE_TURRETS = 4; diff --git a/qcsrc/common/notifications/all.inc b/qcsrc/common/notifications/all.inc index a9a2ee655..296b31835 100644 --- a/qcsrc/common/notifications/all.inc +++ b/qcsrc/common/notifications/all.inc @@ -435,6 +435,9 @@ string multiteam_info_sprintf(string input, string teamname) { return ((input != MSG_INFO_NOTIF(SUPERWEAPON_PICKUP, N_CONSOLE, 1, 0, "s1", "s1", "superweapons", _("^BG%s^K1 picked up a Superweapon"), "") + MSG_INFO_NOTIF(SURVIVAL_HUNTER_WIN, N_CONSOLE, 0, 0, "", "", "", _("^K1Hunters^BG win the round"), "") + MSG_INFO_NOTIF(SURVIVAL_SURVIVOR_WIN, N_CONSOLE, 0, 0, "", "", "", _("^F1Survivors^BG win the round"), "") + MSG_INFO_NOTIF(TEAMCHANGE_LARGERTEAM, N_CONSOLE, 0, 0, "", "", "", _("^BGYou cannot change to a larger team"), "") MSG_INFO_NOTIF(TEAMCHANGE_NOTALLOWED, N_CONSOLE, 0, 0, "", "", "", _("^BGYou are not allowed to change teams"), "") @@ -763,6 +766,11 @@ string multiteam_info_sprintf(string input, string teamname) { return ((input != MSG_CENTER_NOTIF(SUPERWEAPON_LOST, N_ENABLE, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Superweapons have been lost"), "") MSG_CENTER_NOTIF(SUPERWEAPON_PICKUP, N_ENABLE, 0, 0, "", CPID_POWERUP, "0 0", _("^F2You now have a superweapon"), "") + MSG_CENTER_NOTIF(SURVIVAL_HUNTER, N_ENABLE, 0, 0, "", CPID_SURVIVAL, "5 0", strcat(BOLD_OPERATOR, _("^BGYou are a ^K1hunter^BG! Eliminate the survivor(s) without raising suspicion!")), "") + MSG_CENTER_NOTIF(SURVIVAL_HUNTER_WIN, N_ENABLE, 0, 0, "", CPID_ROUND, "0 0", _("^K1Hunters^BG win the round"), "") + MSG_CENTER_NOTIF(SURVIVAL_SURVIVOR, N_ENABLE, 0, 0, "", CPID_SURVIVAL, "5 0", strcat(BOLD_OPERATOR, _("^BGYou are a ^F1survivor^BG! Identify and eliminate the hunter(s)!")), "") + MSG_CENTER_NOTIF(SURVIVAL_SURVIVOR_WIN, N_ENABLE, 0, 0, "", CPID_ROUND, "0 0", _("^F1Survivors^BG win the round"), "") + MULTITEAM_CENTER(TEAMCHANGE, N_ENABLE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Changing to ^TC^TT^K1 in ^COUNT"), "", NAME) MSG_CENTER_NOTIF(TEAMCHANGE_AUTO, N_ENABLE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Changing team in ^COUNT"), "") MSG_CENTER_NOTIF(TEAMCHANGE_SPECTATE, N_ENABLE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Spectating in ^COUNT"), "") diff --git a/qcsrc/common/notifications/all.qh b/qcsrc/common/notifications/all.qh index 481154f3e..efe602a47 100644 --- a/qcsrc/common/notifications/all.qh +++ b/qcsrc/common/notifications/all.qh @@ -73,6 +73,7 @@ ENUMCLASS(CPID) CASE(CPID, OVERTIME) CASE(CPID, POWERUP) CASE(CPID, RACE_FINISHLAP) + CASE(CPID, SURVIVAL) CASE(CPID, TEAMCHANGE) CASE(CPID, TIMEOUT) CASE(CPID, TIMEIN) diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index c0a8c6b2b..236f5ae07 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -683,6 +683,7 @@ float updateCompression() GAMETYPE(MAPINFO_TYPE_ASSAULT) \ /* GAMETYPE(MAPINFO_TYPE_DUEL) */ \ /* GAMETYPE(MAPINFO_TYPE_INVASION) */ \ + /* GAMETYPE(MAPINFO_TYPE_SURVIVAL) */ \ /**/ // hidden gametypes come last so indexing always works correctly diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index 274378f17..9a8be98da 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -209,12 +209,12 @@ float Obituary_WeaponDeath( return true; } -bool frag_centermessage_override(entity attacker, entity targ, int deathtype, int kill_count_to_attacker, int kill_count_to_target) +bool frag_centermessage_override(entity attacker, entity targ, int deathtype, int kill_count_to_attacker, int kill_count_to_target, string attacker_name) { if(deathtype == DEATH_FIRE.m_id) { Send_Notification(NOTIF_ONE, attacker, MSG_CHOICE, CHOICE_FRAG_FIRE, targ.netname, kill_count_to_attacker, (IS_BOT_CLIENT(targ) ? -1 : CS(targ).ping)); - Send_Notification(NOTIF_ONE, targ, MSG_CHOICE, CHOICE_FRAGGED_FIRE, attacker.netname, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), (IS_BOT_CLIENT(attacker) ? -1 : CS(attacker).ping)); + Send_Notification(NOTIF_ONE, targ, MSG_CHOICE, CHOICE_FRAGGED_FIRE, attacker_name, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), (IS_BOT_CLIENT(attacker) ? -1 : CS(attacker).ping)); return true; } @@ -229,16 +229,25 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en // Declarations float notif_firstblood = false; float kill_count_to_attacker, kill_count_to_target; + bool notif_anonymous = false; + string attacker_name = attacker.netname; // Set final information for the death targ.death_origin = targ.origin; string deathlocation = (autocvar_notification_server_allows_location ? NearestLocation(targ.death_origin) : ""); + // Abort now if a mutator requests it + if (MUTATOR_CALLHOOK(ClientObituary, inflictor, attacker, targ, deathtype, attacker.(weaponentity))) { CS(targ).killcount = 0; return; } + notif_anonymous = M_ARGV(5, bool); + + if(notif_anonymous) + attacker_name = "Anonymous player"; + #ifdef NOTIFICATIONS_DEBUG Debug_Notification( sprintf( "Obituary(%s, %s, %s, %s = %d);\n", - attacker.netname, + attacker_name, inflictor.netname, targ.netname, Deathtype_Name(deathtype), @@ -299,8 +308,8 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en CS(attacker).killcount = 0; Send_Notification(NOTIF_ONE, attacker, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAG, targ.netname); - Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAGGED, attacker.netname); - Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(targ.team, INFO_DEATH_TEAMKILL), targ.netname, attacker.netname, deathlocation, CS(targ).killcount); + Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAGGED, attacker_name); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(targ.team, INFO_DEATH_TEAMKILL), targ.netname, attacker_name, deathlocation, CS(targ).killcount); // In this case, the death message will ALWAYS be "foo was betrayed by bar" // No need for specific death/weapon messages... @@ -364,14 +373,14 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en targ, MSG_CHOICE, CHOICE_TYPEFRAGGED, - attacker.netname, + attacker_name, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), (IS_BOT_CLIENT(attacker) ? -1 : CS(attacker).ping) ); } - else if(!frag_centermessage_override(attacker, targ, deathtype, kill_count_to_attacker, kill_count_to_target)) + else if(!frag_centermessage_override(attacker, targ, deathtype, kill_count_to_attacker, kill_count_to_target, attacker_name)) { Send_Notification( NOTIF_ONE, @@ -387,7 +396,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en targ, MSG_CHOICE, CHOICE_FRAGGED, - attacker.netname, + attacker_name, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), @@ -399,8 +408,8 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en if(deathtype == DEATH_BUFF.m_id) f3 = buff_FirstFromFlags(STAT(BUFFS, attacker)).m_id; - if (!Obituary_WeaponDeath(targ, true, deathtype, targ.netname, attacker.netname, deathlocation, CS(targ).killcount, kill_count_to_attacker)) - Obituary_SpecialDeath(targ, true, deathtype, targ.netname, attacker.netname, deathlocation, CS(targ).killcount, kill_count_to_attacker, f3); + if (!Obituary_WeaponDeath(targ, true, deathtype, targ.netname, attacker_name, deathlocation, CS(targ).killcount, kill_count_to_attacker)) + Obituary_SpecialDeath(targ, true, deathtype, targ.netname, attacker_name, deathlocation, CS(targ).killcount, kill_count_to_attacker, f3); } } diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 7231bd8f6..0ea592141 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -287,6 +287,8 @@ void cvar_changes_init() BADCVAR("g_runematch"); BADCVAR("g_shootfromeye"); BADCVAR("g_snafu"); + BADCVAR("g_survival"); + BADCVAR("g_survival_not_dm_maps"); BADCVAR("g_tdm"); BADCVAR("g_tdm_on_dm_maps"); BADCVAR("g_tdm_teams"); diff --git a/qcsrc/server/mutators/events.qh b/qcsrc/server/mutators/events.qh index a310c6cca..35a8f6fd9 100644 --- a/qcsrc/server/mutators/events.qh +++ b/qcsrc/server/mutators/events.qh @@ -90,6 +90,17 @@ MUTATOR_HOOKABLE(PlayerDies, EV_PlayerDies); /**/ MUTATOR_HOOKABLE(PlayerDied, EV_PlayerDied); +/** called when showing an obituary for the player. return true to show nothing (workarounds may be needed) */ +#define EV_ClientObituary(i, o) \ + /** inflictor */ i(entity, MUTATOR_ARGV_0_entity) \ + /** attacker */ i(entity, MUTATOR_ARGV_1_entity) \ + /** target */ i(entity, MUTATOR_ARGV_2_entity) \ + /** deathtype */ i(float, MUTATOR_ARGV_3_float) \ + /** wep entity */ i(entity, MUTATOR_ARGV_4_entity) \ + /** anonymous killer*/ o(bool, MUTATOR_ARGV_5_bool) \ + /**/ +MUTATOR_HOOKABLE(ClientObituary, EV_ClientObituary); + /** allows overriding the frag centerprint messages */ #define EV_FragCenterMessage(i, o) \ /** attacker */ i(entity, MUTATOR_ARGV_0_entity) \ -- 2.39.2