From 6508e517cb51fdffac22a7686a2c0bbd91bd1213 Mon Sep 17 00:00:00 2001 From: LegendaryGuard Date: Sat, 20 Feb 2021 16:27:29 +0100 Subject: [PATCH] Added Trouble in Terrorist Town gamemode, using another way to recover the lost gamemode, there are still things that need to be completed --- gamemodes-client.cfg | 1 + gamemodes-server.cfg | 21 + gfx/menu/luma/gametype_ttt.tga | Bin 0 -> 65580 bytes gfx/menu/luminos/gametype_ttt.tga | Bin 0 -> 65580 bytes gfx/menu/wickedx/gametype_ttt.tga | Bin 0 -> 65580 bytes gfx/menu/xaw/gametype_ttt.tga | Bin 0 -> 65580 bytes notifications.cfg | 11 + qcsrc/common/ent_cs.qc | 6 + qcsrc/common/gamemodes/gamemode/_mod.inc | 3 +- qcsrc/common/gamemodes/gamemode/_mod.qh | 3 +- qcsrc/common/gamemodes/gamemode/ttt/_mod.inc | 8 + qcsrc/common/gamemodes/gamemode/ttt/_mod.qh | 8 + qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qc | 84 ++++ qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qh | 3 + qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc | 460 ++++++++++++++++++ qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qh | 17 + qcsrc/common/gamemodes/gamemode/ttt/ttt.qc | 1 + qcsrc/common/gamemodes/gamemode/ttt/ttt.qh | 44 ++ qcsrc/common/notifications/all.inc | 8 + qcsrc/common/notifications/all.qh | 3 +- qcsrc/common/scores.qh | 4 + qcsrc/common/stats.qh | 2 + qcsrc/menu/xonotic/util.qc | 2 + qcsrc/server/world.qc | 3 + 24 files changed, 689 insertions(+), 3 deletions(-) create mode 100644 gfx/menu/luma/gametype_ttt.tga create mode 100644 gfx/menu/luminos/gametype_ttt.tga create mode 100644 gfx/menu/wickedx/gametype_ttt.tga create mode 100644 gfx/menu/xaw/gametype_ttt.tga create mode 100644 qcsrc/common/gamemodes/gamemode/ttt/_mod.inc create mode 100644 qcsrc/common/gamemodes/gamemode/ttt/_mod.qh create mode 100644 qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qc create mode 100644 qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qh create mode 100644 qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc create mode 100644 qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qh create mode 100644 qcsrc/common/gamemodes/gamemode/ttt/ttt.qc create mode 100644 qcsrc/common/gamemodes/gamemode/ttt/ttt.qh diff --git a/gamemodes-client.cfg b/gamemodes-client.cfg index c43b9d1d3..633b73fe2 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_ttt //LegendGuard adds ttt client hook for TTT 20-02-2021 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 c15baaf9d..05531496e 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_ttt //LegendGuard adds ttt hook for TTT 20-02-2021 // 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_ttt //LegendGuard adds ttt hook for TTT 20-02-2021 // 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_ttt_respawn_delay_small 0 //LegendGuard adds ttt cvars for TTT 20-02-2021 +set g_ttt_respawn_delay_small_count 0 +set g_ttt_respawn_delay_large 0 +set g_ttt_respawn_delay_large_count 0 +set g_ttt_respawn_delay_max 0 +set g_ttt_respawn_waves 0 +set g_ttt_weapon_stay 0 // ========= @@ -556,3 +565,15 @@ 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" + +//LegendGuard adds ttt cvars for TTT 20-02-2021 +// ========== +// trouble in terrorist town +// ========== +set g_ttt 0 "Trouble in Terrorist Town: A group of space terrorists have traitors among them. Traitors must kill terrorists, while the terrorists have to try to find and kill the traitors" +set g_ttt_not_lms_maps 0 "when this is set, LMS maps will NOT be listed in ttt" +set g_ttt_traitor_count 0.25 "number of players who will become traitors, 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_ttt_punish_teamkill 1 "kill the player when they kill an ally" +set g_ttt_reward_innocent 1 "give a point to all innocent players if the round timelimit is reached, in addition to the points given for kills" +set g_ttt_warmup 10 "how long the players will have time to run around the map before the round starts" +set g_ttt_round_timelimit 180 "round time limit in seconds" \ No newline at end of file diff --git a/gfx/menu/luma/gametype_ttt.tga b/gfx/menu/luma/gametype_ttt.tga new file mode 100644 index 0000000000000000000000000000000000000000..d36db5ddd83d6ac60c98797a74771b7857af9d0e GIT binary patch literal 65580 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

WD9RM6ik1uLwTY%pJ``>9_ zxBGa$@Zq@)**h2il)7bh%WU+G0_+*FI|~xf&GB*MMcq7*{ovfXjBEQ{Qqc`kw#@lD z#eYbRH26hU$g~#ur&j+`7;$+Ax`6ON9k*q^x}7TXH?Id{1y2f}-a3?fe)G(zHNU=l z%B{Oi2=wg=Jxykv2cYY91kT?e_nSe7?+|OQMSe&XVoK#ae|oL{e}zia7+CnA15(#u zP0pW^0lrVUpB?odn)~>| z7G<}ItyY8wy38~4M|i~JOIwY{{0HZ*9#bEgTPX!!K+37r_Xl-T&FGBiZ*)txi9;VQR{@d973M z*{81@Q9Jj5n}gACW(|BDc_4B?$pSf=*FpRW*nQ|Mxo6f*c(!grlk;vpi)~{aebBAv zAWuiY>$~&)2iE&D_`rMUf%Q38!@U=|ac#9S=x47p{-@wC^*27hQg=WObMR2|w~+zl zdzK;&Ao*TZfq5P9u_6BJ5Ag}K1orLWNqxc9@wA2fMiOclFc$#}s9vmX%MKx{;Hjr)q?2I#ED zJ4XYuLZ*M3wqwyx`B66y3Qnk|aG*$z70EC71vYE}x@z{lQ^D!SR}4=_Z* z75q#7gR>!pFAS%Ze?WXGkvI1n5Bm=h*r&kzQt*pqMqJy4Pvnvr?q)kdY)54`=rNik zr8`59@RS#i&gCBq7@CIvA@jo4St1j3T?;sgKQI-0PWkkdO(6IncAofofVny+d|!|G zh>Qj&jkgYYWUl|MY1$s=j`^_$@Yc+)l@9Y#hnKMw=`)N^@BqIj{D^VPL3VwTLheBJ zK397qx)8G9ikdh6k;3pxJMzzOoSwR4ZtI8Ka~dD-cI>%8+9Gr-i3bi~4Lc!kTOn^h z;rqMLT|IK`YH+QhJ2|1$UzD8VsM)>>|3kn|^7b8iX%^ea4c|x2&c6Qtx((!d4|Cf| z&Tl_zO}zV1bJvDi18NW!P-C^M4f$r|#{=Gn?g;-Wcy{Ml*43Shl0zmpPg*gmPWG{&k;d@LJB)Xat;j#Kc4EfPB|k?8 zjeP5xd(YxWSfkCXksq*M$Z-N|I*@hj3J?8`wfqcvYQp+9V4Z7`e^Z5P<;Wi|wS=0t znbbxJ`~~h(tFs%p?+4~i0r$V6($CUcxj?a-f_Tw6$6Y;JP@C~|&RQs;s1 z$9nNkS~0E_ch_sJ${>R(Li5#tufzi0MlLns+^77Oe7FvbS90=3fU8rPj}zne=eUt} zfbpMq?@{ayIXW@e&?!3?{E)F`Y{LZNdhtgC24_6Iu@BgbUsvc_x0iL;2_KiZoKB}j zu#)>kF5nL|o>~7}dhpn{GfoAMGsfYg({%*#Jz!VURD4Ky#-EycUf!p43jKckc*e^+ zmt?FS*D(E{PhWif=gjbz_X$7J@loQ0`nb&aqx5>Q=jl)3z~OXkhq%Czwd3&}WNcsf z1A5J;Pgf4FbJL?&iPNrKEq3EiUkm&_iKWg1_Toz&h%D{OdP=Uy7hL}UJa~tEFUcRQ z#u`^3cdWE0c^O{R(|8TmtOfRafqN+RKmzkA!0=dW&1wU6iL=^LUqf3)U6RW;e{9aw zr>x={IsMji%xyMx1j(!RFdnw>v7G1w0KF4anvNmvji}Ae2HObwQ zT`T`&8h+1U&I!j%zu$lluhUFQ6aZc6YFTM2mz^CXjQJCw^UlLy^2M z^6CFhYxreljiG798_e*>--aJ%R{H9(Z>Q~DW}koe#7caG>k84m%x$gy`|NsrHR}rv z=k%t&%WwRNdRtTY;Pl$UdnZ@r9}O6mwrW)U^y5JzjPXyx6rQQEiR?G?e4X~qe1O=4 zl23|<0DtrwbpO1E=R)G}Sv~RSVQU};cpaVSjB7WGeXPMo)<@#M%aHjqpqDYgxgX~{ zquYz0SMn>GA@>^s@4D2PRVN>`BK0C=si!Hq8os}X8i3{04( z>N@f_7E@+ul3O)~bDQQ~W_!e8ldLTl!x%YWU5N)i5`+AZZbxx9S=^8cNr z6(ee8;5*9_8*=l^FI3wi-)H>urmmasm1j0i`#fXSm#;3zx*EzvW(G?W@uNWh)?n(@G?|IL&SBdlJ^M_cMt;~HDbm74|Ea3Mf;65B1 zPjaFpC#*Hc&sm!fpsR+^{hR0jHB_Aiu&37Aj+k8WCD>(Cq0>Ip6#9*2KLl!Y$Op2< zS7+nPHEJzw7xpvPlsRZ6!L^dW!w!4h4%<>4sX-|jfPa@-%#!nI_>)R5kRwg*LC-9O z&$kS98|4_U$bHFSug(~2!K3PlElQt~%ljd4{Tv)<#n^x5U0s=DZ|;-)t#Rmy)49Hg zdAf66@_07!dq4LHE! zb-zou0{s2h7$=DRz@M-K^*j@SJL53(0*O7#7{x|W{2yIkVnYwlZ;abEr}Y(&p2ZG9 z8=F`kf9CHDuasP`aq#y+#C5s@yLR|?zGY26Wu2O`=I=mvb)~)nTCGgXwH&Z51+A5E zLnga?4qyLCvl=i*vvj2{b2>G)e$)p->$V>Kf%{Lu+g`H+mZf<|8Q@-)+>LT>QlmsX zPvXY-5z29`EWgV#ma@RR4DT;X9d%h(u4C_)r>?#t&r0m48ZfWPeRUXreV%&wDUik3rdLyxS;y!)yu+uYFj(jtLeBfB#9}SK^WlT}X z%P8U`QGAc&z5lAI`^@(~WzC}LCl-4wA#ms$nVV;Ql?M$MoZmRjDE`IRd&kk^$vqNT zrTD$TUB=0n8Kbfl;bjsFB#$&AcvOQ^;FHjO0JN}#wU`R;90h&%gLXvL|H!(xWGy~| zufEScZ*#p4_)vp9|4P82obX`QSn6wSeR^v)n~?7dfqiOI&0;yRnq|}&F2q;o34UOw z*@=BXEkQYGx&m}riRUZxo+`|-Dzsfyj^LK6zmdFNba~a_HBrot&&VL0iv|>I#(mK%W;aQHnZxBu3KY@47V15gkm*mR@ z(su|raDexmCl}~3exjVGx3II#aWnCq>Usb=7wb&UjftFrLhSnjVvM=?+cH*;sV9E; zMDkkQ#8-TtQ=YQ8U4gU z|1Zczig)W~k?7@Um%_OWa*lIDJ$n^g*gCHezm|&s3C=3Nrs7=^$5HXCLhQz@u+6h? z`wplm^9%<5%UB1=7nQunKFIvetXmt_`%Biah0qh%qz0%qbz;?*NG+K?b$0k((7Q?m zQA3SgX2YHkR`Y@V)eqPg0^JXpU_*X}E%Dlt#OX>=Csx)OxI=rAuU(Dz)}Vf?Chx3G z-=eom9!DMEQAf`4j@rPiR#8*;Nqzyfwcuxc?thzp8Z$PjvuprN7^}XC}YJz7fA>0O!_&2YaEjGsL;>?OOO_`eSr4J?@Jh z4xP)ok`rShZ^C#cWODw_C2g~i@hRkx#i2LAr?pt-5lf%XSBxW$dDpMqS;Ve8{u!1@hgt@w_){A^uUxd+p1Z zJ9CtLjxV6O=J43Y&}n_iv7|P>D(5OLYpa!&8qzuas4b_C_{eXXjqEqFfE=A`&Gda4 zF#Rl4Z65eRjz($vkz9>RysO%xj=&sv6R)oiACR2EhP=NK^xlYP8llHG68#d`H01tw z@F%?k9=;>Li90j`p6@cwCdi3q!kd7tz`P~v-kRf&Jkwsy1AULV^y0hZH4or9$$K5e zec}%kU%*W8Xg=>=N{eXq3$t1!}Iu?O;2wgGF{j_yKwEqCNF?{H0!6!732f&eeTx7Ced$5wG8sp z@-J+jSs2azA{WH}B!1xsr`JVqnf29iL z$C|8973$+?MvlD&PBj8fO`vVDC0YO%sj-n-f{!JS516(PKF;qC8AEf%An|3<=R_8L!g_xW z@0VD=f;s(l0LQvT^QZpsBGLpaT#Cf56Z{{wrUq{=< zxI$@XSd$w*{VO~>8!{zd@&*L{lJA2}khjOFeVTXQG6_8UoIYddJBnu``5uMt7_(~3 zTk)q>k1ve6wwE;*nXLN+lzy&cvRQvH%jqI{{ny9eb$jVY`ir@BSm6M1z~|(%M*^P+ z-XFnuc)#|H@y8(>lDE$OI`{7JAmSY0A2<;A=v*%G;JfH0d%$mh?w)`x$=l zHT`^ujBkw0t_RJ$0i9NX-pg}c>c>m6$C2Xq_};98(DfEf)huH^)GS5;_x@(s3;dma z)a=+xpbT}o6^YMEU8dBP>h)Oy%kC;~{2SK!J9IM1+x!8(^F8DF4m@lH9f{ulEx*5o z{=Z>P-@<=d(SBgPf8t)D^RDzGG%kF76z3<<-&Fe2bGAES<8{%N(AQGVE$8S?^I{&p z%yk9FV1BRX{hK-Nr0u62W3FNs-E?;-7J1OKcTUvxeUfW0K3L+R`*OlI%}&|v)II?} z+H;ZZ9*%ZTb=Ygs!DAZ4onG^6Ah@M_#tMeVbUDw(F zc(25eBo|9~2tG;Eg)OrS*G>H3Ik~+N%rnBn!8Qt?blA?egkX zYOlAW-2vKRuihn(Q@?c@y)TR$>8s$!ZStohw#{yte(zYIG5*mx#ecE8jWKtQlGCv{ z<5sA93c3Gr{)4MMV{GVmZ^jW%Aa(}boB6vsqBHy@{FMy>+&StvBDAjCY=RF-f(NhQ zi`*lzTcKs?H~RJ=Q`n|ih3Es%+`3ymC0{>w_u}@6?t z_{FWUp&mVtcsiC`!TL#Es>Da7{^tkQ@-t|wDRxQ&{HnFc>8c73E+2@kHjjEfcl3DQ zPmuLLXjV(0`DdSNmQR5F*uQ|i&_Df^ftObT{xyJ2J#@u)q1BJsr=T@(??PTyKm2SX zfu+dfU!mdg;J`1yUS#xen$#{0hR+Y;+CcDP5Wj~2W2r+MMgLNBIgR5&jvml$5O}?r z*x12S!Q)Sz4ViZC+{S6=v5&&2$GdoL-?8uAOyK^JW-$S{k9mdP3(Q~ruopu)i3`X+4D632_2M4@!>{2h9eKw< zufAm`ZJz$QQ}EcgmLscN+`C#V1BOmCsa2T+%x8k1QkylE;}p(Kg(pnoyXfq5fsMrT z+@bv-&TaM^Q2F3K*X~#Eom}}GTRan;i@Li@w9C}cQG*wGIfqym?P?Br9eR`B5tnoI zb}3ixd3Ntu+5r#8Nch1c#u>ic-ZC29K0atf?PT%@(?X_xl(BVwtL$A)ZL>E{`y`dR zyM&cv-bxg@CqGNUMDk1p_KHr0|Gx@QAl>dx){#R{rq&@Q*c%@&AP8Uxh#VVtM+M*g#$2(-=RkQZJ z!j@SFsXy4c=9h+>(W%zD_preaX%Pr){aAmgNAiFdyGvtV7EgGGH{S!mlVE;t0zdWz z41MGDLGQlz4d*tb#66Z8EV0vcpPksiMLCYjHx6I@qwgM{nZQK!GWq&>xEiD5j?z`f__c=+QUGha>sP| z3;oB#`&GWb8TOLrD?Y&J8=@xb9v9wCqM)fu5- zwf4$hEAoMuVJkIwufkq^2OdIO;wzJetz^7+d}Zn$=T5QM)6xEet3-SDwtMRCVDnUD zEdJZ4;PF#rS~Pg^jGV~Cv+F0Re0-sIvGs&5g~v-AUz*bA6b{^GY}ZV;4*TbZO!+jN z`4~JMOBq&H)6pb2SAHt9b{QUVzSyL4SLo<&D5o@*X5_b1v{54_^0U>>ZJ<-@pSTPSyzD zPF-lfIy}1qH58@sv6eu0FSd?-{(R8$hmd=9_uquQ-~sef5&KVkJoWkB1X=PW{JR5V z7{dGJ_zbML{%GLv$4_q^$dwu+@+GpPZiOb3*A{bazw5)WO*3zwTs{8!@s%U5kVkRp zh|hpap`Lv%QHyxxh*#gMhrIjTJmS~S5VmF3v&bvEvZ;xXd>1{RMPjS0k=`UGBk^`U z-$K>VNev!N&$HmjHASn$VOiHga%OVzucsmJlP+wUm2i5^__)LV17GZ0-t9SYp_tWU z8%2BeDk=7UjBo!6z<&xkqSSgQnv{4UJV#(3L*AysFVW+~Uwqpnc{`z=eeu_nHhA?Z zYuGsb^GI}&)W?^$8>zveUcfn%cx(juc7}kVH4UN@ywn%KA;n7sSLM6#1CcY}fcUAe z?{_m1Yr4W3AA{a^A=lSI+rGft8Tij)ykm*!_6L8dk7u6)@$1W;F8EM|@8k2Y%)Y{9 z!3jHZt85ptuO9I{s};oU!#-!v-2Vam!LN$QfEw&sS|3_zicRq)@9&5l8N%R3cylHAFNOVqAhqSodDH9P0BV;`K%jJbC#gB<2G@+?!atJ0p{3{8)^ z8JZDu=U^7LIrTWy_Ti(E+!;`ym@D35hX2D0TTR;+w0R2t7|6>stoyB5__3f-Nrp4)3nH%XH-&ATm$7z2 z)5q{{gHQj8pyBu=vHNs=QDP0^%N3u#83*_+GC<;iQKOuLi9Iv#HUtB-fLmRm0g8*j|Lc}9z*o>)2qjkd-IFr%N52wJfmn^ z&$~6}UJLB0!PE0B$+rVmf*(>>mrVX6c5>n6Jxh%z>4)4eVmdR8*Y>&?;Y~*D|9tk{ zAeXN3GuHQ+Pk-V6lO^9v(W2;R$touV_zUb`wfm9dPwyNxonHH!JpYKjTMTXv#nAhz z8#d4UI%?OF_Rp|A9(kh+N?Z3^^YCl?+_IG~K=mawFT7uGIu6`0#q&<7`7y))EbF^l z^do5A6`ngAn2zW7V2<6P?VqvfzlPSE1Mfz(x-=EX$4^s+`%ALto9zm6c(#&n9{}y2 zMDCk)zJCexS1+;`Lvjp~kg1?@B1^i>kv%jz@fBV8V8QAsdD~8ufCl@Sp{ge;0 z;QcuVJbL7EjeOc_;^#NRf0C*RibD>oTwJl+;r)N@!?|vHdi#heY|GsAwZArbjDBW7 zUqkn^R=6O#pLgH#hFy!>$B6#_{DI_o2_F5UFG$A&(OK|IlgD~}ze^$f{|q#?6TZI! zdUxh1c9ZzV`hXX*k54OL{|PXcy}aI{)udIX$sTTY#O-9?T$@Fm+25Jmta9 zGX;PByPT6I^_A417GB=5uprdUA&0#jGFFXkkV>pRb?3r1sl-E5j|UD*I~p)F6?-`C zfP2rJ2=GMm_Fl?=ReNuyeR6MAt}XOm1b<{VdDg3Px6b`GZQI<|Y2Z*=sCS>VT~6&% zsqsp|cbbIGM{Lhh;<~Zk{mUnj6OKRbFnYbN_vtkMyT9)b^eVOn`o;_N1)=R-P90)` ze`)v-d144c-&;NI-ADVDcaOb)W?g~m$4vKshQItSg1_W}KO^Vh@?Ph{z+tt{Azu%$ z#zDZ{nd4+&K8#}z)?ECiUjb{O{f5B14##S=3bfL+65LlTgq#iba<%G5zU}GHG>hN< z1NakzEk|ya>@g_&a=jz|d~iYhxUxUTP31Y6`wkw5qudLtLa-{(XNc5$#ev}#m6!?A#2>G&;;FOb<{#}&mbiCdV+StuZH zJ!|cRCaJrZbV$9hWlrX!i<|P0{{`p)l3y))f|B*nj_qpWkSp0J)HmOl;Yji-gqF6~WV zuH-&PMf=F>Vhi!@yNuJUe&fFogzt-=@899~f4;}54K^hE=F%ibr!H}%#^B^f=$;bW z=?YI61TKhg&lNefjyTrgz`-@{P&1W$ZI4r4Va_h6_F3#5V@x2{|NQM7_WQPq_T9L2Y^Kl*7RXS@YKD{2u}P#=yLY_m}5; zDOz#i{a)yN`#NiuRaAn=ZCQlD}_fEgKeQqA{%KZIqJ<>N$`!wn7hTk&KzoqU?!CmOu9GBxL zx`NmZ)GGu3(`zSWflFB;Gt_yre@E87D0lN^Zlrm=jg;6YLQU497v5cn$H1Y8n3QsiSSwJNHPS;ia5a~$K5lk7ueI^@;6 z5WW<~dWJGSSDN_KCAY^OJHHj{{t>WlNE4f{3auQ?j%K_3Xa1k)b80O4e~3?Xy8n-0 zFT4QQmmuy}n*Crap!dl>+;#B*sQN5;QA==8;(v~eP2xQ>IVXFH1aodT{?$|7z3gtT z99=I8y*n;wWWDF;VJVT->^3od>H&;OR+l9%lWUdaA>;-gr~ zy@4Dz6C*gt9Kz7CZu<|a96?MgD~=i^k#nLOD)=iOfewG6d$ku1{vK$y@Y0S2*&Ank zn!a=4PdSp0dC+@6-XZF@;ny5#KJvR?9{c9yNnJPjdtB>JPGz5*kSU*}qg!ShP6mrV zivGe1?jH+E*uShx6!JgZyHDwG_P@h-Uo8EgdoS?kgz{hMJXvxy$OnCJ#)v(hwsl_X z$KL(QW82vny!%x!_zkXR*f6Dq;lj3g3GfVK8hbvZf(KFuC@m${pkSIz?Vr#zx?u+O zzK`&SD}RxDPkhFGN*mb6>CwgQ^FSYwI}!^%Y?8S1*$tCT9uC$9bUuMU`+ceW)-m|^ zyP=1*0@feW-k}Nn#qKMMJy;SRU2Ibq&3YF9eKTp=eMZ#gBN_4?h_`mu%=0 zAFny5LTm&Df06wvubFkYXnJ<%NFn|N$;ZsZ2atpxJqa5-k=RNidjcln!%v{jBZ2ek zNUT3W&a3O)trM4bv*a1eB=pQo{Q3p#c}LF2{`{~_Gvdjoi6kZv?%S^{JizXWPrtGm z``x;mqR7P%9xU=)VmtUL^TRgJieEFnv4MFQ;AsZtrM@#C74KPry~o}yadGg0^u!2L zDtiE>(NfGfkN^+3y4NLj^{ai*7xbd~VePON>wu!aym)eDx72x>o?|23pw1t@^nkTH z1nm82&d}UgWNmlg{4MY?aF^6`Hvj@CF_7s^2517w-d2($%^9&_#;~I8f zO2pN@)HdsWLS-Wg&xJon3(U`~HeT8`Uvlnqx6J(}lUjdrGRq~hPeZ&{zjE>3{mR98 z_bVI6Ihq{Hn2$y0Imdlo{mLeI_bHR;)2~8G@VIv}cRRJq!Jm-BUTV*&osD44!>Jt& z_v&L8;XklaCix#G>g1KY7r!54DS!rFkpE{u=K=1P2KOGt4IVv966>)uc=ob0h;NtJ zrD5fmw+%N!JyTL;udl=>3jTrz!UrCl3&|xG^niRwVnLQX%k#ZUsXoMSDE=b!Xncp& z495b8$HE|uf;;z4uQ7pR56%2PP~gvZ$#?Ar?2F(pK3{=xBMa z2mI&rKVkR)Z2U#9_>TV?p)MRBPz7LK4cOKu4xw-WSbvON_$_*2Tl@tM90xPjUpY#g z(ihw%=4W$e%j|F1b8S6)EQpVYy_cw`W50vKoBQ1hup4u?&Ha|WaO$LZ^eUe0>R^== zIJ{QU9+%E3CsvJ0AvRANm&`Hwv>aEDOFq5&7mnuN>YAKa_oc|*3B==)i0vo3J6I(k z@8jU#(eREZ$RY)QbnFQB`OZ4xJ3#3cIuCznx^sMG`ua&98iYP2hDUA~P2g7AK&-&v z126OJT}H)tWFMF(;6a44CD~Wf2+BJVnb z{Tq}&h@6Q6k>RR^hZPWTX3q>cUQkE<+68i@4|r5yKo=mKRIR*UXCTQh)tsZox`8}2s!@9bavx(;Ug-ZPu`h|@p<&NQ?MuJ-rzH^ zveE;nwN&>6;rAfknJjuh2Cx?yKrASC-K1s@L{>(Pn&uMVX z!hk(uK%aRgy5xQ8`WdJ2|NX3`7kqXJV;=>bbp_Vn0Q+XN2DCS5l{lwz`-t`1kjraL zjg95_*TDa;;y>z1j-UrPAbr2Y0sKNmI6!`h;sb&MG|3P7hViyT4)kK4BjEv(qwR(7 zXq#{UiWkE+O-qZpbBx&B#X|f#ImBa=@W+ZTCYI+V7ykK*VKo!jnvBj z`~gDy5;MBI%PEyT{*f8Q4eNjV@WC#pj^UeUfAxrZ5T!>hS1>PSU_ToAE(?wngO9X} z6dx4(%%lHXKVUuf0Dlj17-cW#5$OJ1fc4kFTw;FW_pd>#NGpv!UV=SUY~=rnsnxa| z!vCWFr*gmOxwY7jSHJ;pa9}t%z*uw~Xbm4AH<14usDR!fbw9Q72{k}B5Z}Njv{vYc z9f4&(=I|>xu>|<9#^-YEfV)F1IgCP|vL9XEt)sqaXV#8S#4q&1t550YLBngs1CR74 z7q>y%x||SMq3ev;<_f;L-l)eH1>VGn)p=d7l>7DEEpjU02lq|{rR{d=@PfU=qgcl$ zj42$MpzQyk5p^^1F&L@YRq%gCp7;Te-cJP{BA4;&8+->{{9}{L0>?aS_+| zWsBW;VcUX4!3oLpIq20d`Z+#=^u$PIL$V)jqBpq#;Jo2@(3s~j_fDil+}NLdW$&`Y z9gBXBU_X1s14RGBHa3u(Laxvc;d(CN9Fv!0N%DW#qqw`J2fFTD)_4eT?no2ge^Xk0 zn!sQD{-wzMD87>a)FI!)%4HD$;~4V)9sb~f#d_K){zB-ofX?AuoyK3x*t zUq=3S3OH8-#Vm$&7M&raYdx`Nn8Pj7`v-gaTs&HbXwQxkEZ@Ts}U zZ~Z*ixhDo)PW-*UhCK(-}ATu>a+58u_&Q0`17Lc=PIKFaBY&YL`ppHKr zxq<(8KrX(CEBI4)P=DqIFP(f)7+D7-(CSmDKO z3-XVx7@mLFe-LeOK6*j^Q9u1C-=)dIMvc@aEmlog&YMOpS}Ux+fjDXJ#Zt7Np?& zdvsw-HgpUQ6;t#JUq}@FAp`h}4sq}F>YTL`KX@QIKDj`T?i>$FAzqPiBbN) z^P6TSv%gdf`%NMftR+`4{NCxc1xNjd++&QPjBz7)>dd;02mX%0`$wAO`-tyXV*Zlv zp?rU=v#l>Veuv5L72DtB{@UQLa9|TS&{<I2Gq!p(&(2hL>#Q#u< zI-wfG2p{B7~mWghnK|9itfQ1qL964m!Z-hDHqu4|8T=iIA%oQ%)z z9yW>pPkc?pl=4ok8ZGtLk!JWuq654jFRc)t1Mt6Yin)8tbkMs$I8xl;*3HJSc~;9u zw~qy;67S7QO9;mjiaz)VsR5ULL(%nWGUm6C4NcG&KBr!&4ZZ>g_`-1DJ{@_ml=FeWUTW440Ee?2 zZ&Uw3`E!u$%Z#r!%=CnP+fD|L$)!#UAI@(%>~T{NXE;+p9MMRg33*-TjV~UbQ%C*x zStCCF0``C^V4sbgBi;j$>z#5h@0@RpxfP0jAhIN^0DNL!m}*kz70&vye@3xb_TnvM zpL7*>5?}p=9Sh_hW#5aOhDM|AoLH5}UX4k_iQ~xqdV;Q^>^jNu+qtA2Igkf);SJ~z z_AK(LZ*uQT07on2u2V~i6 zv}WbTULdo6CdZ8bXI@Bsk&h#_Lgb6%E2~4Ti0m=Z9Qn`^c_BVx`M;*oz<(yPz=hvI z%xfFJkK!A-M!X33eGs+!XV`aPlks@a$eevHT{AE5n4d$9jEetA-L~WbswR2B=-Da` zXg;UngWQ9E*$DpRvL93yg}^x%x6U?7jRm-aAAbUSx>l3Ca0P$leC&Sr9>&NU`;~2x zj1KVR`o5gq%eq7ejM2T6&lX;8Ku#&0P}zOTH(+U4HTE6s_NB?G+xtD#8tHv#5Fx}Vbhk^Lo{sNY^OQnT93f1d}we%ddBy&NrMFSj%B0RLaG4P{TC zui4L=xO$$Lc#K&zxys&BX z?IQvCze|(2zvzDD;r*rX{S{w~ zJoaN>#qa?y^F3aL+3WtUa9|TS5KNxI=8yURaB|LOl6UILJ|M3Arw4qX4)AV>4%nPI zv}7*r;RlY;`xx{B@d>zr6YHVFgV6ug4U<~L+zj=ACyvNKwq~$LI{UGnlzs5g-*lT^ zuLqHR8wB!c&UOj=>M!O$yYF;Xvj26%`>*;_xh2!F3HG6P zf``RsOPl~7@zS2~0R4ZO<^N{ozpg(=*ZvV7MR(vmoNLpeCwH!e;OE6PU;XAm^6BrL zSdp{ascp*X^%HZV`M(!(g3;=(;Q?m&OT1lT%E~8zpMX3A(!@}+P{S{#H^k0e%kc|t~&gse~~MaTLwKRr`Ak}Bj+>e z;rUI}bP@9b#%bV5GWQDX)Skb|63}t;4ZenclZXR)?4;& zk{W&w_DlxR~G*pEwgPYE_ZQ#4&_Cz&rt<>1 zCc0sE`g2pB^pTmM{KS&KrtnsLSHNEKRLD^?kq^5I+2}!&yw85XxE(s)m%#fEvS0kZ z`2CCf4$*8@Bm1F4ORxVP`~?@39C!o|0RGm*hi%zgpd@20i{4*_z5QzeciCgGIW~ao z>D`&w@nGgP9Y44?akM?~x(AOgY|0`pSbVV9Lmg6xz2(N-IV|-XrYQb*;qEbi_D%IR z${zeL$kS2qVZC1Z|M)KaUgE|NP6Zop9rQ2~KNkNY=P$7*>b5-c%c1`%*bnCm(k*3A5j1M@H_4Q zjsrR_D4P#HA^nMeSn`QQFLu9@ z{j75-CwpvgeDkioHLG3SHH*yuF8mb^41foCu(v1q;>A3BQD?5(B$cQ?dqZM`!21LI z0$+m%9mpRZi0q$+f56+PZ@B~PX&e)EV=w!&Q2%I#ztI2F+Xo9DU)oY|B4|YRrm3H% z6U)yacZVF?1^9CVf$u7#;p9sF$oIR)0=y^@pW9|#&SbK1zKXaOfZR^c{)g5FX%-E>wdkUoH zi@1CKF6jUK#;LiH*LNFFubYq+G^!5y9v1Q7P(16B%wFuGmuDYv?~%_9^Yxw#wjhb_|F96V{(k~@&68ga*ZV}L@r1){-+51)=>e2t5X9u z(G+{{q@qU^b3l(!{8{N1x_+T>g1j)5^Cd8q`arQ6Xrcq8kn@uqt>^hEc+0ccrz&q0 zomJ_uN=~VL+~5JajwAnVb#1RxA^!uz9-bDy=tnbB6`#DU(#H}M|+fX{$` zTjB+Mq5mo9-d^P3gi;$C`#b#~f&aHpK^EsmT-%w?LZpy0Au-|S$QG&7PT0Qi`}C8m z$7aDJvd)K0&0=o|+LWwgLBrG6{?;S`_{SkzUeJF${@c_`+vXM^U-H12boPOMN&okt z|IKs0X0IK~N8JC29HQv$^S{fJ*sH3?6#1|0NwF(+y;I?WS-;fb2yC%8MBh}uMIRB} zQE1#u=fC5RxgU9+rt;#IZ(4F;E}FtGZzt~5E7hZS$q?qd48A0LV>rSye}d0TzJHO= zU-G?G%m-R3zM_|A!`^LHYl-=gkMh6e^ZA!JB{Ii#4*%^7AM$L&UV;6oLF&zadlDOD z{B_y;r7?E?C)6bW1pIsB8=Qpw>w*5YA3x7C$p@A=5BqWC?O609`rou%$rC*qI4lJ} z9D8$Fyl``{if7;a)LVzVunUhXA0Ydpu!rh7*+<#st6!)-@GXBcVhoA{x`x}_8IZ$$6l}O z8RpI2L(qL~aG(+P-^YwsYF2xK*Aw`?+}*L%p8wO{nSj@LZhQRONn{|ANJUIBJBXpx z)^NF}lJ9aQH5LkTpfM8ZCK|9umi%GGV;k{sQZaQmB&*55v|CH5lm8QA!3N9pe)@W3%_`KR#pT?X@) zc>r8itv|&FMPv4tw1=L`|M;K2!$x73|7`C&M`K@W4blH^#DRahBl!+CqEp03Y3$F2 z_T$m{gyko_-{J3-zu&}ruvK18@oB{S#0{X&@y|vf`|;B~kU!CX`fHZUI_4og6IkEH zPO#A9`qCWgBO|4!OxkTd*;Zd z+lrAFP7^j%;`pDvOns(2c%;CQCr`X&;TH!o@!PLZjT?KeII*~&Y@3s}DW=QieM?@s zhEI>&pB%1psDK=Te0+#kxX0DqX(3lOM0ddV>;DNl*84n<@+}YXj33YK?|uqwz5GvE zhbbRWeq=+xd&cfvdOF6m`Od))8t2OWu-g&r`6Iu^1H>2O*CrQV@0>ii;?CL6b{Tu)z4H5?dElP$uCXthgyD;#`QWY$u-mW5eIm{$ z{SJDm>b`Aeew5sgM&6I*nN*Xt3x2;A^p|2ir1$+C>n*HpaJZ%S{|ETo6M8>5*)RIv zfc|%gH`p3txh@_>4AOARGvNhrr&t4E|1Hn^)Ig3sivHIMxz+=DCH&?otP2(}?{1hs z#OI^^%f?<}%?Hk%-QJ`1km5Ip6}q)`R`*=uAH8)CXryUkDeyWnTKUdR|x z?(*IxV{d^eVdA{WE6xS)$2z8Tg$@5_CQ z3veQnH!v(0%*Pw({n(IoJG5(7!q?XFs5zPI49-QniVmTXjVB7Se)P-ru z8ekYTAws|kr@lM7Um$asSpz`xChT|Mou7klq40SOyuWP05TE_K(?(vv4xqYcMf3+F z;$${CU}4wrzvLd@xv&6CxPpUkjH701`E&Hy_w(wu2KfHp9i1LRbziXEe$!9$yPB6grHk{(uN2A zC%TD=N0aQg^MIYU@=F_8fB&{f=F4}fm}h)}gt&OVm5>W=GO_$_XSs%Ge|FwLj~_S2b;}i=w_-uSX31MW{i(c9 zw$CxSpGJo_^FYpRVvNpH7v=-j{TtyO$zA1Ft2Wj&cws8fHjRFd=DG=tN9C_9fiHwv zwjUeeMPkwJP+N_)>PDjdQbv?T09qbT=_<7F|SG<NMn#{Ud-K-PI)dS+^hl%{Vh(rWUa!gy~*{zxzSIE49s3gcj5Vtq=4_TiX5OF#A_c0^W_Wi+s^cnE&m3iN-oZAx z114$V&h$~YHpTa#*6U-3i8z~L4CwA}l z=9sRE+s*sx&`R<+&3e4>yHB{&SZ&Du(KM;C8n1p$&CO&xu zoaEc*h$kwF1z@ec{{}XJ&r@G`O(ZPUX;e@k}YkbcCU4@CzY1Qx*{t3(X=(bSA6OH4==_&Auc-vpm<2i~zi zcEC{jM7b?1Q-_y2l)db=%V6U(h86e!G4Y?9Zeo-D2R@N}aAIoMfL13MX72uEJe5CU%w zV*JZCp_uhPZ2K|>2Z~PYE00Avjar+}Ccc2n$!SPa~1@gV^@M7uFGax8^s>of5uUE#!Vx>}2J!?FLAHqIts$UieEq z@U0YE!5S+ATR-b;8+AAzma%UHf%K3hu!UzR9t1luwZV!r{#Dy80KG4WI6&2cc%1ib zOW&xjr*gz1>92I^)4od%z?rZ1W}13E=m6;ItFC87w7CQ(aQ^8WYW+e-69x`h~W2O zoI4TvzRG*P%sVP4@_AZsU6*?+U$PnJKhC(Q$C^`qQq|NbAJ@YQpjMI}^*Igg$+`3( zwz^mvbyF9Owp^x;qmLgl+KT}W@=VjGAeXQM#wjKR|J0)4#D#(*i62NjZO0LO#`prw z901RoIe>BUCjOd_Shousvhc@KhpCsBsd{TafeDsJT~lNCb=cyJU0wK~#?FfVEnOSF zAm6_5*p8IEwUe9ugik*oJe5LhfQ@>yTL9{|mS#WsxR4&faX(=Za7ocMVJ$05jS#X1g# zmj-anz8v@9ck<=vdM!A&5%+JvHEP3G)%aZy@f>B5kEK;li|g9QJ+*nL%_rKsz1|xi zU%chAh4tQ^hmiiTfGu{o<+2<;O@F~E7B$53M9zDIKWXBEneVC~4}zJ`ROhEXecPA5 z8N<5^$9~bAey-bBPH1@Y=%%=9fBS6b?Gw8)uC5Jhe*WG0gL7re)%rSMb@c)Z8`U&3^=Imfvl_cC+o;zQr${Tr?_Z2lSIZ9}R6}XB!MndT{Ud zjMwJWrfGz{Rh^Q@pwXi|V?*fl1m8Ddyf=sDtO~P5jmi--irL0Kl8b;dK;hz*I^E+!SyTCDsVm3!1IR}d}HV{Fuc6*pLi_jY!zEZ zd{xGaF*7ne;8T*ez zlX}>zYx9hM!k79dXriV%M#0d%J~r%z)XsVWdE9uuun^%1#-dROF{WwGlhhu4qm`ovM2hdK?Ondtc|p0FqK{uU=Z90ma1p3d5ck*Ej2s@%2KH#eKWiapG7`dyu zetqbVQH(j&2}ojGuBP_d9(*t-x6SVR?ecNKrva3@^k39;Hhw=-a~D}J*)JQrnFC~h zvCDtv`T}s~E@g!^JH0NV^>t6EfRzu??S{U~j&GYo*IXW3RZ?BsW483Z= zm#Rl6pJh-yIt#Q{4KwMk)p*7l?AKyjhv%-#clFQ_>vJsKtpV3ETkcVx^XhS(y4#_rjsA;e>QXzmo=(25JJrX{1ow>jK9K}-U(c}}Lmx_) z62|#*)=h7d6O+Agu0$be|KJZ3ADxT4cI8N}o=V9BycIFmCJl(P}KD?_x7!{_T1hTFU$4}7Dt?8p~YzK0lYQluU3z`cupoefn zcCCwOdFsffxV*1(*5lK8S9ah+VI|8~q_rYBQ>uwrK>dVUr^wqluzcJp>g+17NHu{o zpj86&4}Qf>+a-16JXmNS6$t z?z3>jumkv#BUBn4umXK%aKz}FM(nGGfpn&UlFjhJ1onk_w*We=pvKdV<>TrSy5IX7 zaKSHpv@!bfv3KU>o!FU1eBVOsymK!fUN`jucENA(2OnKLy7CU}Gb^Bz{ENyvos)XsNQWUgMk2FGk4r=JhMNx&r+;+%z4NMU+&?vxEJ*}$k&Lb9&#*kl1rbrJeVil zsllk4=x#C8++IDBwH>vYu=5(9%H2`*``WSHh6fT@3r@!tFb&@3{k^mnK(8&OnnL)1 zgBat=6RjtGivDc_y|u>b$G9BM{#a-g&NcxWrq9D(3s%b(a6Cv858OwL&jB!EvZ?KK z0E~`(U^MI`w|~om0q(04d)ri7CZXu}V~eiWkI%aDSsUh_#?W2!a}9VgNcl?eoIkWI zId=#cy3E6=lZU zfR|TduX>{i{N35|z-C=sx*&A-2R|l|+@&C7zu^JKW+Ql^B{rf?@WM0D?0IDDXymGF zG^WNgTg~Aq@PqILRquN-vSYD17T%m{0}7AWZc`f1HAi!e=lT2@#%Cw&jxG6(6+5tave+TPAqdJ zGQxI_K3h$@uP=YEhqmjyOTz2;1c*;fWgbYP?j-YFapujE$Y9Ax!vpNsfUb3+ao0HX2Nvd83)*;1fsFaU67>jQ*qZCO>Vb_hw?G(F#mjCxg74%vAI@h(^}WtB=kq&cNjvzb zB{tQ@$bts&n0(OHnA!Lhs2McGU>-gTRoQiY^dQ!~^Pk@c`?6dk+~ zbZ*Yv+8P=^#krl>YTYK;&<#DUhuJd5Ip1!(2OpcyTEkz>**0SSP~4gPPBl5dvT{%9!m zYm6)w4G+@dpPs7 zXg>#e{%vE+7GfpsmMG~3AtYxd%5h#RiUZuv8FM$t3vmx;up@ZB;G-vF2@`YsQ4pn z&i?R}FFfHht0Q;`)J97rPh}DMIQ8+|lBta-+UHOcm;6cFSUdgyJ#X&3ilYaN9FRUB zn|ANv=+Xl%*MsO=*v#B#!w1mQOLij0qz`@;U)kOm|Ng8KOEbm;z?Tb@jShXFEOUXe zyTKFXkRP(omSs()de;GSWMe9_;YqG=edWoQNFX;Ed_<3E)?x{*tYUAWr;Q(Axei6< zABXl@uZ(ii-a)V5YHRzPK3s%W4VV9_Bc3W}uQ_Km( z4S;3ho`8H#!hgJ!7y@iXUTN?H+Y-cyzJPZMjq&V_4YkB9*6^v!>q*$! zh(GX5!>&G$Yeci=NXCW}i>yyW)~7@F*YTxiKW4{ED5ATQ_P-#}Z+>9r1Nn`QTCeJwv!JZ|P{i`3pO5@T)yw`u`AgxJFAF zhP{P(Va8Nq+tCl!VS`)GHVzwF81f+uzDR0B?hBYFDey)LG)`}i%pmSu>-S06Rx_x3 z`6fKHxx3}M5MSC1?5ksu^9SqO?=jR#^Is*zL-3*Dh5gV+x|rlb3bC%?@WRZnpIiKN z%ViX{*a3{|eyrOjjU^ryo^hNL!?~jO2f=oF>so_pyq}{z1h49Rgn!Wk4qBObw;RyT z(L_(h8atZf^Lw{_f2OsrfU^gjJ>cvCXAd}gz}W-N9&q-6vj?0#;Oqfs4>)_^ cU-UqqXZv>O*SUA+o;~V6*RgZA4h^jT2Hx88egFUf literal 0 HcmV?d00001 diff --git a/gfx/menu/luminos/gametype_ttt.tga b/gfx/menu/luminos/gametype_ttt.tga new file mode 100644 index 0000000000000000000000000000000000000000..7fd5a53418fb292b5562e8505687e1e1f48f92d3 GIT binary patch literal 65580 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

+PyL}q3{icXn+$Y|* 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

+PyL}q3{icXn+$Y|* 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 Y9X6UWdArG5Z8>45jVEuu(F*VSe>;Y92mk;8 literal 0 HcmV?d00001 diff --git a/notifications.cfg b/notifications.cfg index 61fafdecb..ff9fbfad7 100644 --- a/notifications.cfg +++ b/notifications.cfg @@ -285,6 +285,11 @@ seta notification_INFO_SUPERSPEC_MISSING_UID "2" "0 = off, 1 = print to console, seta notification_INFO_SUPERWEAPON_PICKUP "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" seta notification_INFO_TEAMCHANGE_LARGERTEAM "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" seta notification_INFO_TEAMCHANGE_NOTALLOWED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" + +//LegendGuard adds ttt notifications for TTT 20-02-2021 +seta notification_INFO_TTT_TRAITOR_WIN "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" +seta notification_INFO_TTT_INNOCENT_WIN "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" + seta notification_INFO_VERSION_BETA "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" seta notification_INFO_VERSION_OLD "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" seta notification_INFO_VERSION_OUTDATED "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)" @@ -538,6 +543,12 @@ seta notification_CENTER_TEAMCHANGE_SPECTATE "1" "0 = off, 1 = centerprint" seta notification_CENTER_TEAMCHANGE_SUICIDE "1" "0 = off, 1 = centerprint" seta notification_CENTER_TIMEOUT_BEGINNING "1" "0 = off, 1 = centerprint" seta notification_CENTER_TIMEOUT_ENDING "1" "0 = off, 1 = centerprint" +//LegendGuard adds ttt notification for TTT 20-02-2021 +seta notification_CENTER_TTT_TRAITOR "1" "0 = off, 1 = centerprint" +seta notification_CENTER_TTT_TRAITOR_WIN "1" "0 = off, 1 = centerprint" +seta notification_CENTER_TTT_INNOCENT "1" "0 = off, 1 = centerprint" +seta notification_CENTER_TTT_INNOCENT_WIN "1" "0 = off, 1 = centerprint" + seta notification_CENTER_VEHICLE_ENTER "1" "0 = off, 1 = centerprint" seta notification_CENTER_VEHICLE_ENTER_GUNNER "1" "0 = off, 1 = centerprint" seta notification_CENTER_VEHICLE_ENTER_STEAL "1" "0 = off, 1 = centerprint" diff --git a/qcsrc/common/ent_cs.qc b/qcsrc/common/ent_cs.qc index 777bd417a..5f0d78897 100644 --- a/qcsrc/common/ent_cs.qc +++ b/qcsrc/common/ent_cs.qc @@ -157,6 +157,12 @@ ENTCS_PROP(SOLID, true, sv_solid, solid, ENTCS_SET_NORMAL, { WriteByte(chan, ent.sv_solid); }, { ent.sv_solid = ReadByte(); }) +//LegendGuard adds ENTCS_PROP from TTT 20-02-2021 +// gamemode specific player ttt status (independent of score and frags) +ENTCS_PROP(TTT_STATUS, true, ttt_status, ttt_status, ENTCS_SET_NORMAL, + { WriteShort(chan, ent.ttt_status); }, + { ent.ttt_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..759f00def 100644 --- a/qcsrc/common/gamemodes/gamemode/_mod.inc +++ b/qcsrc/common/gamemodes/gamemode/_mod.inc @@ -15,4 +15,5 @@ #include #include #include -#include +#include //LegendGuard adds _mod.inc for Trouble In Terrorist Town 20-02-2021 +#include \ No newline at end of file diff --git a/qcsrc/common/gamemodes/gamemode/_mod.qh b/qcsrc/common/gamemodes/gamemode/_mod.qh index ffd71d59d..ef725161b 100644 --- a/qcsrc/common/gamemodes/gamemode/_mod.qh +++ b/qcsrc/common/gamemodes/gamemode/_mod.qh @@ -15,4 +15,5 @@ #include #include #include -#include +#include //LegendGuard adds _mod.qh for Trouble In Terrorist Town 20-02-2021 +#include \ No newline at end of file diff --git a/qcsrc/common/gamemodes/gamemode/ttt/_mod.inc b/qcsrc/common/gamemodes/gamemode/ttt/_mod.inc new file mode 100644 index 000000000..5574f4aaf --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/ttt/_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/ttt/_mod.qh b/qcsrc/common/gamemodes/gamemode/ttt/_mod.qh new file mode 100644 index 000000000..09983d725 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/ttt/_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/ttt/cl_ttt.qc b/qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qc new file mode 100644 index 000000000..a5b4ce4f0 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qc @@ -0,0 +1,84 @@ +#include "cl_ttt.qh" + +#include +#include + +void HUD_Mod_TTT(vector pos, vector mySize) +{ + mod_active = 1; // ttt should always show the mod HUD + + int mystatus = entcs_receiver(player_localnum).ttt_status; + string player_text = ""; + vector player_color = '1 1 1'; + //string player_icon = ""; + if(mystatus == TTT_STATUS_TRAITOR) + { + player_text = _("Traitor"); + player_color = '1 0 0'; + //player_icon = "player_red"; + } + else if(mystatus == TTT_STATUS_INNOCENT) + { + player_text = _("Innocent"); + player_color = '0 1 0'; + //player_icon = "player_neutral"; + } + else + { + // if the player has no valid status, don't draw anything + return; + } + + string time_text = string_null; + vector timer_color = '1 1 1'; + if(!STAT(GAME_STOPPED) && !warmup_stage && STAT(TTT_ROUNDTIMER) > 0) + { + float timeleft = max(0, STAT(TTT_ROUNDTIMER) - time); + timeleft = ceil(timeleft); + float minutesLeft = floor(timeleft / 60); + time_text = seconds_tostring(timeleft); + if(intermission_time || minutesLeft >= 5 || warmup_stage || STAT(TTT_ROUNDTIMER) == 0) + timer_color = '1 1 1'; //white + else if(minutesLeft >= 1) + timer_color = '1 1 0'; //yellow + else + timer_color = '1 0 0'; //red + } + + //drawpic_aspect_skin(pos, player_icon, vec2(0.5 * mySize.x, mySize.y), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + if(!time_text) + drawstring_aspect(pos, player_text, vec2(mySize.x, mySize.y), player_color, panel_fg_alpha, DRAWFLAG_NORMAL); + else + { + drawstring_aspect(pos, player_text, vec2(0.5 * mySize.x, mySize.y), player_color, panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos + eX * (0.5 * mySize.x), time_text, vec2(0.5 * mySize.x, mySize.y), timer_color, panel_fg_alpha, DRAWFLAG_NORMAL); + } +} + +REGISTER_MUTATOR(cl_ttt, true); + +MUTATOR_HOOKFUNCTION(cl_ttt, ForcePlayercolors_Skip, CBC_ORDER_LAST) +{ + if(!ISGAMETYPE(TTT)) + return false; + + entity player = M_ARGV(0, entity); + entity e = entcs_receiver(player.entnum - 1); + int innocent_status = ((e) ? e.ttt_status : 0); + int mystatus = entcs_receiver(player_localnum).ttt_status; + + int plcolor = TTT_COLOR_INNOCENT; // default to innocent + //TODO: add Detective 20-02-2021 + if((mystatus == TTT_STATUS_TRAITOR || intermission || STAT(GAME_STOPPED)) && innocent_status == TTT_STATUS_TRAITOR) + plcolor = TTT_COLOR_TRAITOR; + + + player.colormap = 1024 + plcolor; + return true; +} + +MUTATOR_HOOKFUNCTION(cl_ttt, DrawScoreboard_Force) +{ + // show the scoreboard when the round ends, so players can see who the hunter was + return STAT(GAME_STOPPED); +} diff --git a/qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qh b/qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qh new file mode 100644 index 000000000..508ddf2ac --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/ttt/cl_ttt.qh @@ -0,0 +1,3 @@ +#pragma once + +void HUD_Mod_TTT(vector pos, vector mySize); diff --git a/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc b/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc new file mode 100644 index 000000000..4730ec26b --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qc @@ -0,0 +1,460 @@ +#include "sv_ttt.qh" + +float autocvar_g_ttt_traitor_count = 0.25; +float autocvar_g_ttt_round_timelimit = 180; +float autocvar_g_ttt_warmup = 10; +bool autocvar_g_ttt_punish_teamkill = true; +bool autocvar_g_ttt_reward_innocent = true; + +//TODO: add Detective and corpse function if a player is DEAD +void ttt_FakeTimeLimit(entity e, float t) +{ + if(!IS_REAL_CLIENT(e)) + return; +#if 0 + 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); +#else + STAT(TTT_ROUNDTIMER, e) = t; +#endif +} + +void nades_Clear(entity player); + +void Ttt_UpdateScores(bool timed_out) +{ + // give players their hard-earned kills now that the round is over + FOREACH_CLIENT(true, + { + it.totalfrags += it.ttt_validkills; + if(it.ttt_validkills) + GameRules_scoring_add(it, SCORE, it.ttt_validkills); + it.ttt_validkills = 0; + // player survived the round + if(IS_PLAYER(it) && !IS_DEAD(it)) + { + if(autocvar_g_ttt_reward_innocent && timed_out && it.ttt_status == TTT_STATUS_INNOCENT) + GameRules_scoring_add(it, SCORE, 1); // reward innocents who make it to the end of the round time limit + if(it.ttt_status == TTT_STATUS_INNOCENT) + GameRules_scoring_add(it, TTT_RESISTS, 1); + else if(it.ttt_status == TTT_STATUS_TRAITOR) + GameRules_scoring_add(it, TTT_HUNTS, 1); + } + }); +} + +float Ttt_CheckWinner() +{ + if(round_handler_GetEndTime() > 0 && round_handler_GetEndTime() - time <= 0) + { + // if the match times out, innocents win too! + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_TTT_INNOCENT_WIN); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_TTT_INNOCENT_WIN); + FOREACH_CLIENT(true, + { + if(IS_PLAYER(it)) + nades_Clear(it); + ttt_FakeTimeLimit(it, -1); + }); + + Ttt_UpdateScores(true); + + allowed_to_spawn = false; + game_stopped = true; + round_handler_Init(5, autocvar_g_ttt_warmup, autocvar_g_ttt_round_timelimit); + return 1; + } + + int innocent_count = 0, traitor_count = 0; + FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), + { + if(it.ttt_status == TTT_STATUS_INNOCENT) + innocent_count++; + else if(it.ttt_status == TTT_STATUS_TRAITOR) + traitor_count++; + }); + if(innocent_count > 0 && traitor_count > 0) + { + return 0; + } + + if(traitor_count > 0) // traitors win + { + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_TTT_TRAITOR_WIN); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_TTT_TRAITOR_WIN); + } + else if(innocent_count > 0) // innocents win + { + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_TTT_INNOCENT_WIN); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_TTT_INNOCENT_WIN); + } + else + { + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_ROUND_TIED); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_ROUND_TIED); + } + + Ttt_UpdateScores(false); + + allowed_to_spawn = false; + game_stopped = true; + round_handler_Init(5, autocvar_g_ttt_warmup, autocvar_g_ttt_round_timelimit); + + FOREACH_CLIENT(true, + { + if(IS_PLAYER(it)) + nades_Clear(it); + ttt_FakeTimeLimit(it, -1); + }); + + return 1; +} + +void Ttt_RoundStart() +{ + allowed_to_spawn = boolean(warmup_stage); + int playercount = 0; + FOREACH_CLIENT(true, + { + if(IS_PLAYER(it) && !IS_DEAD(it)) + { + ++playercount; + it.ttt_status = TTT_STATUS_INNOCENT; + } + else + it.ttt_status = 0; // this is mostly a safety check; if a client manages to somehow maintain a ttt status, clear it before the round starts! + it.ttt_validkills = 0; + }); + int traitor_count = bound(1, ((autocvar_g_ttt_traitor_count >= 1) ? autocvar_g_ttt_traitor_count : floor(playercount * autocvar_g_ttt_traitor_count)), playercount - 1); // 20%, but ensure at least 1 and less than total + int total_traitors = 0; + FOREACH_CLIENT_RANDOM(IS_PLAYER(it) && !IS_DEAD(it), + { + if(total_traitors >= traitor_count) + break; + total_traitors++; + it.ttt_status = TTT_STATUS_TRAITOR; + }); + + FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), + { + if(it.ttt_status == TTT_STATUS_INNOCENT) + Send_Notification(NOTIF_ONE_ONLY, it, MSG_CENTER, CENTER_TTT_INNOCENT); + else if(it.ttt_status == TTT_STATUS_TRAITOR) + Send_Notification(NOTIF_ONE_ONLY, it, MSG_CENTER, CENTER_TTT_TRAITOR); + + ttt_FakeTimeLimit(it, round_handler_GetEndTime()); + }); +} + +bool Ttt_CheckPlayers() +{ + static int prev_missing_players; + allowed_to_spawn = true; + int playercount = 0; + FOREACH_CLIENT(IS_PLAYER(it) && !IS_DEAD(it), + { + ++playercount; + }); + if (playercount >= 2) + { + if(prev_missing_players > 0) + Kill_Notification(NOTIF_ALL, NULL, MSG_CENTER, CPID_MISSING_PLAYERS); + prev_missing_players = -1; + return true; + } + if(playercount == 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 ttt_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 ttt_Initialize() // run at the start of a match, initiates game mode +{ + GameRules_scoring(0, SFL_SORT_PRIO_PRIMARY, 0, { + field(SP_TTT_RESISTS, "resists", 0); + field(SP_TTT_HUNTS, "hunts", SFL_SORT_PRIO_SECONDARY); + }); + + allowed_to_spawn = true; + round_handler_Spawn(Ttt_CheckPlayers, Ttt_CheckWinner, Ttt_RoundStart); + round_handler_Init(5, autocvar_g_ttt_warmup, autocvar_g_ttt_round_timelimit); + EliminatedPlayers_Init(ttt_isEliminated); +} + + +// ============== +// Hook Functions +// ============== + +MUTATOR_HOOKFUNCTION(ttt, ClientObituary) +{ + // in ttt, announcing a frag would tell everyone who the traitor is + 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.ttt_status == frag_target.ttt_status) + GiveFrags(frag_attacker, frag_target, ((autocvar_g_ttt_punish_teamkill) ? -1 : -2), frag_deathtype, wep_ent.weaponentity_fld); + } + + M_ARGV(5, bool) = true; // anonymous attacker +} + +MUTATOR_HOOKFUNCTION(ttt, PlayerPreThink) +{ + entity player = M_ARGV(0, entity); + + if(IS_PLAYER(player) || player.caplayer) + { + // update the scoreboard colour display to out the real killer at the end of the round + // running this every frame to avoid cheats + int plcolor = TTT_COLOR_INNOCENT; + if(player.ttt_status == TTT_STATUS_TRAITOR && game_stopped) + plcolor = TTT_COLOR_TRAITOR; + setcolor(player, plcolor); + } +} + +MUTATOR_HOOKFUNCTION(ttt, PlayerSpawn) +{ + entity player = M_ARGV(0, entity); + + player.ttt_status = 0; + player.ttt_validkills = 0; + player.caplayer = 1; + if (!warmup_stage) + eliminatedPlayers.SendFlags |= 1; +} + +MUTATOR_HOOKFUNCTION(ttt, 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(ttt, 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(ttt, reset_map_players) +{ + FOREACH_CLIENT(true, { + CS(it).killcount = 0; + it.ttt_status = 0; + ttt_FakeTimeLimit(it, -1); // restore original timelimit + 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(ttt, reset_map_global) +{ + allowed_to_spawn = true; + return true; +} + +entity ttt_LastPlayerForTeam(entity this) +{ + entity last_pl = NULL; + FOREACH_CLIENT(IS_PLAYER(it) && it != this, { + if (!IS_DEAD(it) && this.ttt_status == it.ttt_status) + { + if (!last_pl) + last_pl = it; + else + return NULL; + } + }); + return last_pl; +} + +void ttt_LastPlayerForTeam_Notify(entity this) +{ + if (!warmup_stage && round_handler_IsActive() && round_handler_IsRoundStarted()) + { + entity pl = ttt_LastPlayerForTeam(this); + if (pl) + Send_Notification(NOTIF_ONE_ONLY, pl, MSG_CENTER, CENTER_ALONE); + } +} + +MUTATOR_HOOKFUNCTION(ttt, PlayerDies) +{ + entity frag_attacker = M_ARGV(1, entity); + entity frag_target = M_ARGV(2, entity); + float frag_deathtype = M_ARGV(3, float); + + ttt_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_ttt_punish_teamkill && frag_attacker != frag_target && IS_PLAYER(frag_attacker) && IS_PLAYER(frag_target) && frag_attacker.ttt_status == frag_target.ttt_status && !ITEM_DAMAGE_NEEDKILL(frag_deathtype)) + if(!warmup_stage && round_handler_IsActive() && round_handler_IsRoundStarted()) // don't autokill if the round hasn't + Damage(frag_attacker, frag_attacker, frag_attacker, 100000, DEATH_MIRRORDAMAGE.m_id, DMG_NOWEP, frag_attacker.origin, '0 0 0'); + return true; +} + +MUTATOR_HOOKFUNCTION(ttt, ClientDisconnect) +{ + entity player = M_ARGV(0, entity); + + if (IS_PLAYER(player) && !IS_DEAD(player)) + ttt_LastPlayerForTeam_Notify(player); + return true; +} + +MUTATOR_HOOKFUNCTION(ttt, MakePlayerObserver) +{ + entity player = M_ARGV(0, entity); + + if (IS_PLAYER(player) && !IS_DEAD(player)) + ttt_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.ttt_validkills = 0; + player.ttt_status = 0; + ttt_FakeTimeLimit(player, -1); // restore original timelimit + return false; // allow team reset + } + return true; // prevent team reset +} + +MUTATOR_HOOKFUNCTION(ttt, Scores_CountFragsRemaining) +{ + // announce remaining frags? + return true; +} + +MUTATOR_HOOKFUNCTION(ttt, GiveFragsForKill, CBC_ORDER_FIRST) +{ + entity frag_attacker = M_ARGV(0, entity); + if(!warmup_stage && round_handler_IsActive() && round_handler_IsRoundStarted()) + frag_attacker.ttt_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(ttt, 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 traitor! +} + +MUTATOR_HOOKFUNCTION(ttt, CalculateRespawnTime) +{ + // no respawn calculations needed, player is forced to spectate anyway + return true; +} + +MUTATOR_HOOKFUNCTION(ttt, 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(ttt, 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(ttt, GetPlayerStatus) +{ + entity player = M_ARGV(0, entity); + + return player.caplayer == 1; +} + +MUTATOR_HOOKFUNCTION(ttt, BotShouldAttack) +{ + entity bot = M_ARGV(0, entity); + entity targ = M_ARGV(1, entity); + + if(targ.ttt_status == bot.ttt_status) + return true; +} diff --git a/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qh b/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qh new file mode 100644 index 000000000..20b300bfc --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/ttt/sv_ttt.qh @@ -0,0 +1,17 @@ +#pragma once + +#include +#include +void ttt_Initialize(); + +REGISTER_MUTATOR(ttt, false) +{ + MUTATOR_STATIC(); + MUTATOR_ONADD + { + ttt_Initialize(); + } + return false; +} + +.int ttt_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/gamemodes/gamemode/ttt/ttt.qc b/qcsrc/common/gamemodes/gamemode/ttt/ttt.qc new file mode 100644 index 000000000..0e43e0925 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/ttt/ttt.qc @@ -0,0 +1 @@ +#include "ttt.qh" diff --git a/qcsrc/common/gamemodes/gamemode/ttt/ttt.qh b/qcsrc/common/gamemodes/gamemode/ttt/ttt.qh new file mode 100644 index 000000000..d2bc4ff6e --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/ttt/ttt.qh @@ -0,0 +1,44 @@ +#pragma once + +#include +#include + +#ifdef CSQC +void HUD_Mod_TTT(vector pos, vector mySize); +#endif +CLASS(TroubleinTerroristTown, Gametype) + INIT(TroubleinTerroristTown) + { + this.gametype_init(this, _("Trouble in Terrorist Town"),"ttt","g_ttt",GAMETYPE_FLAG_USEPOINTS,"","timelimit=30 pointlimit=20",_("A group of space terrorists have traitors among them. Traitors must kill terrorists, while the terrorists have to try to find and kill the traitors")); + } + METHOD(TroubleinTerroristTown, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter)) + { + return true; + } + METHOD(TroubleinTerroristTown, m_isForcedSupported, bool(Gametype this)) + { + if(!cvar("g_ttt_not_lms_maps")) + { + // if this is unset, all LMS maps support TroubleinTerroristTown too + if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_LMS.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(TroubleinTerroristTown, m_modicons, void(vector pos, vector mySize), HUD_Mod_TTT); +#endif +ENDCLASS(TroubleinTerroristTown) +REGISTER_GAMETYPE(TTT, NEW(TroubleinTerroristTown)); + +#ifdef GAMEQC +// shared state signalling the player's ttt status +//TODO: add Detective STATUS and COLOR 20-02-2021 +.int ttt_status; +const int TTT_STATUS_INNOCENT = 1; +const int TTT_STATUS_TRAITOR = 2; + +// hardcoded player colors for ttt +const int TTT_COLOR_INNOCENT = 51; // green +const int TTT_COLOR_TRAITOR = 68; // red +#endif diff --git a/qcsrc/common/notifications/all.inc b/qcsrc/common/notifications/all.inc index d692d73c8..0e4bb7157 100644 --- a/qcsrc/common/notifications/all.inc +++ b/qcsrc/common/notifications/all.inc @@ -439,6 +439,9 @@ string multiteam_info_sprintf(string input, string teamname) { return ((input != 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"), "") + //LegendGuard adds MSG_INFO_NOTIF for TTT 20-02-2021 + MSG_INFO_NOTIF(TTT_TRAITOR_WIN, N_CONSOLE, 0, 0, "", "", "", _("^K1Traitors^BG win the round"), "") + MSG_INFO_NOTIF(TTT_INNOCENT_WIN, N_CONSOLE, 0, 0, "", "", "", _("^F1Innocents^BG win the round"), "") MSG_INFO_NOTIF(VERSION_BETA, N_CONSOLE, 2, 0, "s1 s2", "", "", _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have ^F2Xonotic %s"), "") MSG_INFO_NOTIF(VERSION_OLD, N_CHATCON, 2, 0, "s1 s2", "", "", _("^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"), "") @@ -770,6 +773,11 @@ string multiteam_info_sprintf(string input, string teamname) { return ((input != MSG_CENTER_NOTIF(TIMEOUT_BEGINNING, N_ENABLE, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout begins in ^COUNT"), "") MSG_CENTER_NOTIF(TIMEOUT_ENDING, N_ENABLE, 0, 1, "", CPID_TIMEIN, "1 f1", _("^F4Timeout ends in ^COUNT"), "") + //LegendGuard adds MSG_CENTER_NOTIF for TTT 20-02-2021 + MSG_CENTER_NOTIF(TTT_TRAITOR, N_ENABLE, 0, 0, "", CPID_TTT, "5 0", strcat(BOLD_OPERATOR, _("^BGYou are ^K1traitor^BG! Kill all the innocents without raising suspicion!")), "") + MSG_CENTER_NOTIF(TTT_TRAITOR_WIN, N_ENABLE, 0, 0, "", CPID_ROUND, "0 0", _("^K1Traitors^BG win the round"), "") + MSG_CENTER_NOTIF(TTT_INNOCENT, N_ENABLE, 0, 0, "", CPID_TTT, "5 0", strcat(BOLD_OPERATOR, _("^BGYou are ^F1innocent^BG! Try to find out who is/are traitor(s) and survive until time is up!")), "") + MSG_CENTER_NOTIF(TTT_INNOCENT_WIN, N_ENABLE, 0, 0, "", CPID_ROUND, "0 0", _("^F1Innocents^BG win the round"), "") MSG_CENTER_NOTIF(JOIN_PREVENT_MINIGAME, N_ENABLE, 0, 0, "", CPID_Null, "0 0", _("^K1Cannot join given minigame session!"), "" ) diff --git a/qcsrc/common/notifications/all.qh b/qcsrc/common/notifications/all.qh index 72017e3dc..8c921055a 100644 --- a/qcsrc/common/notifications/all.qh +++ b/qcsrc/common/notifications/all.qh @@ -40,7 +40,7 @@ string Get_Notif_TypeName(MSG net_type) LOG_WARNF("Get_Notif_TypeName(%d): Improper net type!", ORDINAL(net_type)); return ""; } - +//LegendGuard adds CASE(CPID, TTT) after TIMEIN for TTT 20-02-2021 ENUMCLASS(CPID) CASE(CPID, ASSAULT_ROLE) CASE(CPID, ROUND) @@ -72,6 +72,7 @@ ENUMCLASS(CPID) CASE(CPID, TEAMCHANGE) CASE(CPID, TIMEOUT) CASE(CPID, TIMEIN) + CASE(CPID, TTT) CASE(CPID, VEHICLES) CASE(CPID, VEHICLES_OTHER) /** always last */ diff --git a/qcsrc/common/scores.qh b/qcsrc/common/scores.qh index 3bc6c5563..84d992ac8 100644 --- a/qcsrc/common/scores.qh +++ b/qcsrc/common/scores.qh @@ -85,6 +85,10 @@ REGISTER_SP(NEXBALL_FAULTS); REGISTER_SP(ONS_TAKES); REGISTER_SP(ONS_CAPS); + +REGISTER_SP(TTT_RESISTS); //LegendGuard adds REGISTER_SP for TTT 20-02-2021 //Innocents as number of suvivals +REGISTER_SP(TTT_HUNTS); //Traitors as number of hunts + #endif diff --git a/qcsrc/common/stats.qh b/qcsrc/common/stats.qh index 67f7fd60c..880b378c8 100644 --- a/qcsrc/common/stats.qh +++ b/qcsrc/common/stats.qh @@ -434,3 +434,5 @@ REGISTER_STAT(GUNALIGN, int) #ifdef SVQC SPECTATE_COPYFIELD(_STAT(GUNALIGN)) #endif + +REGISTER_STAT(TTT_ROUNDTIMER, float) //LegendGuard adds TTT_ROUNDTIMER for TTT 20-02-2021 diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index e77049d20..5a98716bd 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -683,6 +683,8 @@ float updateCompression() GAMETYPE(MAPINFO_TYPE_ASSAULT) \ /* GAMETYPE(MAPINFO_TYPE_DUEL) */ \ /* GAMETYPE(MAPINFO_TYPE_INVASION) */ \ + GAMETYPE(MAPINFO_TYPE_TTT) \ + //LegendGuard adds GAMETYPE for menu for TTT 20-02-2021 /**/ // hidden gametypes come last so indexing always works correctly diff --git a/qcsrc/server/world.qc b/qcsrc/server/world.qc index 9da86388c..91cb13810 100644 --- a/qcsrc/server/world.qc +++ b/qcsrc/server/world.qc @@ -301,6 +301,8 @@ void cvar_changes_init() BADCVAR("g_tdm"); BADCVAR("g_tdm_on_dm_maps"); BADCVAR("g_tdm_teams"); + BADCVAR("g_ttt"); + BADCVAR("g_ttt_not_dm_maps"); BADCVAR("g_vip"); BADCVAR("leadlimit"); BADCVAR("nextmap"); @@ -310,6 +312,7 @@ void cvar_changes_init() BADCVAR("g_mapinfo_ignore_warnings"); BADCVAR("g_maplist_ignore_sizes"); BADCVAR("g_maplist_sizes_count_bots"); + //LegendGuard adds BADCVAR(g_*) for TTT 20-02-2021 // long BADCVAR("hostname"); -- 2.39.2