From 9ffa59376f8521717217726688984a01e9aed885 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 30 Jan 2017 21:42:15 +1000 Subject: [PATCH] Remove snake minigame (may be reimplemented as a mod in the future) --- gfx/hud/default/minigames/snake/board.jpg | Bin 9107 -> 0 bytes .../default/minigames/snake/board_alpha.jpg | Bin 1686 -> 0 bytes gfx/hud/default/minigames/snake/body.tga | Bin 262188 -> 0 bytes gfx/hud/default/minigames/snake/head.tga | Bin 262188 -> 0 bytes gfx/hud/default/minigames/snake/icon.jpg | Bin 10695 -> 0 bytes .../default/minigames/snake/icon_notif.jpg | Bin 11780 -> 0 bytes .../minigames/snake/icon_notif_alpha.jpg | Bin 606 -> 0 bytes gfx/hud/default/minigames/snake/mouse.tga | Bin 262188 -> 0 bytes gfx/hud/default/minigames/snake/tail.tga | Bin 262188 -> 0 bytes gfx/hud/default/minigames/snake/tongue.tga | Bin 262188 -> 0 bytes qcsrc/common/minigames/minigame/_mod.inc | 1 - qcsrc/common/minigames/minigame/_mod.qh | 1 - qcsrc/common/minigames/minigame/all.qh | 1 - qcsrc/common/minigames/minigame/snake.qc | 844 ------------------ qcsrc/common/minigames/minigame/snake.qh | 1 - 15 files changed, 848 deletions(-) delete mode 100644 gfx/hud/default/minigames/snake/board.jpg delete mode 100644 gfx/hud/default/minigames/snake/board_alpha.jpg delete mode 100644 gfx/hud/default/minigames/snake/body.tga delete mode 100644 gfx/hud/default/minigames/snake/head.tga delete mode 100644 gfx/hud/default/minigames/snake/icon.jpg delete mode 100644 gfx/hud/default/minigames/snake/icon_notif.jpg delete mode 100644 gfx/hud/default/minigames/snake/icon_notif_alpha.jpg delete mode 100644 gfx/hud/default/minigames/snake/mouse.tga delete mode 100644 gfx/hud/default/minigames/snake/tail.tga delete mode 100644 gfx/hud/default/minigames/snake/tongue.tga delete mode 100644 qcsrc/common/minigames/minigame/snake.qc delete mode 100644 qcsrc/common/minigames/minigame/snake.qh diff --git a/gfx/hud/default/minigames/snake/board.jpg b/gfx/hud/default/minigames/snake/board.jpg deleted file mode 100644 index dfc5c3cfac254e4deb2084633cdbb137ebd418f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9107 zcmeGiTW}j!^{(EQW!Z9U653ALD9)o$S#QY_bsbB#6G4<1S$VWWr>s_2@;0koWp`ye z`D#OxL1ny^<7=?!bzVd{C98i>@w^ zGeFooVAhjWxq{i*d0CUydAZ5v^K2{0kY$TJ7rC0zG5r7eLd=4Qu zsB%PNvFM87W4n#eip}hoK`ZuE7-Y%iV(ftF59f=>*8U^%Qw&ufC35XI(BsJG@pyVXzMdXmpx4_Q81DD^`iFOH z+cvyy+m3*bUPh%OYfGlDx3|yVH{kaV4Eg>3AyW8<^d^DZQP6%K1w3d4qQeA{Ex_0V zO#7GMq_=&MnE)%D486c$a@i4Mb2wdYPmi~kS<7UQ&2BOW5aVF%HiymWc6pq3UmTbL zyJP2I)H(SHZd>rwV=>pzlTUpow`*j$^g<<`P|jY;yLT_o-MIP=uO>h6weNm<&(!D3 z)#(dQYpLy*kG_T9{odn0d8zfQ_h$Be{vJvl@yc%gLZ zMtr1lRXMwypBv`Y#5=oP!~pl6vRwFBVPv_qTo^gGAz`BZ^UaB0+MM|1&56IXIq{b_C;rOj#9!T< z_-mUJ-(=ihZ(r}bYc*fRMq4q(>^Vo5~El_|W!i z+H=y)H-3~k_x$fpf0FXDly?ov0k}yKn^_8(wZ#|P?Cz#tg6jbWLcyV1xdqL zYBdOhz@*NL3c>qn+c{y0NaO^Kv>|L=Csqz~4P2f+Q3jIUnciSlk>%PP)>_RYl}C7B z`p_&=kPN>XV$mGJNJA~uB&v|NX-NY{)#OA?GA!~{T7swv5>*NO9x9zLKJalp8XqMp zY#}ICJs#}v_()R|WJv}7b|RT?YLe*$I9X9Fq*Pan7Lr$_{3;@8tH_~>s9K!Eb#1{y zrW@jvg+LrvRpl1RqZx^iNb-H2XNMUB#Dm&E-iEOGAw<~3QF;xvwUK#iQO&#LCEATSYznwX6a z;hL^yO}Axu_HNYe953qhS%u&K0MS6N0bY@t$LBE&F3eCts+-~S6GjPa%E_80H$+*g z8%=yBhnUbo?=$Hop+4Wq=rtK&ndRlTC^1TZ5K2=fNhxGK7!<1WZ-67R-gK+imiFHg_FAfr|0_Hi3lGt4u1?#2 za1(ALZg&%i?u_)+d_82n^%ToA zA|bUzlHW+Kbyeh+R8`lkTV9I-kEUrd*{vA`#5FS#<*b>jcUrP0CdFN^2`ik2N$^nl zbkj`wUR{__2&d4fvrzq~{kOLivFp)6gWpXls`c*2i;EMrGFR`C^7B{}%XmpEs0Yi% zLuLZ=nB*?uo_Se0GbsvnGgAG!^9M~bc64>MOoRJe}b3qw4=R-CT8eWW9J^1^hU zxItlkjRhzS2RbT6PFebdW++bN_4!R^>56_cZzASi0O7o{1I`~?=aa4T$=3PgpB=^i zr_U!e7wm*3kI+MK(|17qXc8X0GCYJaVqrr+53mNeN+H->z!v+~5-iHYk3}&QK~bb{ zRcKH8Ud4?Z&=LH#uljrDHLaNqhb48CBX4&`dASi@;+o;;Xe5m8n^ql@uTS*eGknM@`eiG^da5J-g7(~`z5 zg(P*CsbLDMyduz33`;b^4!xy~2fb>50bZmp-3haO_w9dY%G(FBt8;_cY+aJv?y1F z+Uai5SgLHkIP4OIc~gah)9nZsi`gleZ;==jrpAN$LVw}G6vxxTA>wk9hL4yJ+7;OaR1NE6qCtTi6lL%7cIrwg;?{FG3~D#+!h@-s7& z>8Z)Fd^$HB$wZRrNIEq+JvkFefC^nX^WhKC+jePw>k0jmi#;?)iI=}a4`J7J-WRi*E?L} z(fX&kO%9{*-F?7rv+L(YLV$~Y4|h2n4yVKAbh>(6aQAv#E>Ew| z>+SV=eFHvv8I_K#Eg84l-RJAuF)*;>eSQzW0N=ym^or~Zd_dN}hhIbw>qlqZP`z}M z@8X>Vc;Dt6SVKW8fpwI@brk(eF#{jS$xFR&R`++S-NOFM5$J~j@h~>{{|1CUL}B>9 Z2MZ?u_h8a(HWz&5Fl0JlhSBM-{~fvhy(9nt diff --git a/gfx/hud/default/minigames/snake/board_alpha.jpg b/gfx/hud/default/minigames/snake/board_alpha.jpg deleted file mode 100644 index 44a87081f014a4f6c72edc812729065542e81ca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1686 zcmex= z&EU+y#K;IjP{7Q}3<7K{EX=IzZ0zhH%)!ac$-%+J!OqUb%f-db0|e}xeEhsTd>}T+ z5Ri6|E+FFJVCMj-APxLKz#zy0au+kB5(ASUBeNjm|04|YK)132eFX9p6fiO|v#_!O zoy5frRIpV5=zL~oCZJnI} zgNkudQ4=SZn7D+bl&YG#hNhN@shPQjrIoXbtDC!rr&n-DXjpheWK?oWYFc_mW>#@Y zX<2ziWmR)aYg>CqXV;|3Q>IRvK4a#rMT?g#UABD1%2k^-Z`rzS`;MKv4jn#n^w{we zCr@3veC6u3>o;!Rdidz^lc&#~zj*oTuqec!9r-=(U9^_Ou4*DRPRCJL`OvU7(>PL{* wz&<0+V@+iF4DK<6ziu(`Ff#%pk6Dnxo}sTxV*%4B9u0%hG%zC50RR7+08Ew_D*ylh diff --git a/gfx/hud/default/minigames/snake/body.tga b/gfx/hud/default/minigames/snake/body.tga deleted file mode 100644 index b8064cc40cad66c250dac72394f76b8dc7cf8e44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262188 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

)FUjF#)>YbZA*udL>*tekLehJsooB&+ z_TMG>&AK+_U84UE1Jbth;JzvM)ZGwg}wzi4P;eYx)Fp&#g%S0cLUjFbu zz4h1SnaS`_Y>Jzy>vGk*{PJ{pYYK{A`*IIWU z;IyZ^%~%~x<#dw$*PXdUzEa69^Nzhg4Oc74{)ekcDxSyvS#kc z$E<&1{i}5UQ_T(TC&p!}b7B6ca>0N2lVg40rUZGCj9=G@gL^>&N%BAo^kvSUmLigHhyOS|4(O}{eaVJ z;&%_Et{?uxy6x=8(_hCkt?hM*W%=d4~U;-{Exq8 zj$5#nSlv?HFOf@px!`|%^}_x5>y>Kf-Sejph&?0xkG)pTZwA6v?DcYcsq?XOZP#>P z-&N=OCfXMM$Idgq85(=766MjW_c{GE{zuOX|D)H)D<+u_wKk0b{D(=?m}GhMF^T{B zY7N)a+B636A0|y>lI79IB>wBGHC$6`(-^>im^6(^mPa3xM}K+8f)aJEgql+W7?8)n zm&=z{72`ks9}I|OVAq<}D+|b8WcG~r^2U32=5MTj_NhGl$A1_Q$-ugoH?GMfdy(0@ z#{wP;+aAcy%38VQ&FVJF|AX`a^Z_s+i-E%C`SYVriD%V_h%@#FZWSYjew*xNWKYiI{OAMsv%1q_H_;N7?X^m7V&JcEAcF&PmX~vGPWGefxPP|Wedn>-Cdg=6 z*sKaJYIPukQZ=0)cyZ&11yCL zQCx&PP6Pw~VxV&5@G+sBcR#mi-fZVw;9>IjSN`NFI?w74YPW^l?|1v}JZ|5*#qIDS znisYSd~_~&LgnahhVnezbI<;6Rgv<4FMR-g01Vj8KyizLyN?|H@^7E@4d=Z3`JY}h zr4QNLojv)9&#&$|_5D7#+c7zb+TUn76J@+U93d8zOB-+t)efskW*y#71W zKe7Bl=Nch9U`j4iWN%0IMa}bv!$!+=%> z7?aH$lT)3`bKe~`{Cu5`$I{lKc{g@b=N+Bvi2o1$0Q~?Ac+S9<^Lm~AL-l#yCfDwa z#Z8^l%$zo5nEL+UjpXln{;3{Un7^6Z6MK7~)oI#8RsR<9x_vs`jxX_`?r$tNVC&#B1~=>YqvP+x}int5qu=EK$b_x)1K#eM0lR+=o^)j6?6L;CfcH067j3|zjX zs_>0hHnjifgFhEFHZ*Aayq+$Xy=bSgu_3em=#kuyKibve{q0*@SHHMEr|QlHB{yF` zz1!6Bl|$5Tm5x>Qyt-?r4s+G-7B5lXd3da#S>BU5*;&r-msP7E)+*jssqyI%b)M_qZkDwb$yPy venxTK-aQ4!>W}7l;fB}qQ0sK^@AAv8xM=*C?~VC~%5x`-9`l`x`epnd9L=JH diff --git a/gfx/hud/default/minigames/snake/head.tga b/gfx/hud/default/minigames/snake/head.tga deleted file mode 100644 index 0679f84e630c22688ea7c72075aeda5ccb325e43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262188 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 diff --git a/gfx/hud/default/minigames/snake/icon.jpg b/gfx/hud/default/minigames/snake/icon.jpg deleted file mode 100644 index 14252ae10966524bc9ef6206fc12e15422dc697b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10695 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 diff --git a/gfx/hud/default/minigames/snake/icon_notif.jpg b/gfx/hud/default/minigames/snake/icon_notif.jpg deleted file mode 100644 index 988b6db680773d2e5ad48bc34fcd90d71f6f5b12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11780 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 diff --git a/gfx/hud/default/minigames/snake/icon_notif_alpha.jpg b/gfx/hud/default/minigames/snake/icon_notif_alpha.jpg deleted file mode 100644 index 040990f6d5ec0dd7a9d8d435991b2e158a88d7f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 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 #include #include -#include #include diff --git a/qcsrc/common/minigames/minigame/_mod.qh b/qcsrc/common/minigames/minigame/_mod.qh index 5098420f0..fe8378bf1 100644 --- a/qcsrc/common/minigames/minigame/_mod.qh +++ b/qcsrc/common/minigames/minigame/_mod.qh @@ -5,5 +5,4 @@ #include #include #include -#include #include diff --git a/qcsrc/common/minigames/minigame/all.qh b/qcsrc/common/minigames/minigame/all.qh index 74df391de..5bbb7ebbf 100644 --- a/qcsrc/common/minigames/minigame/all.qh +++ b/qcsrc/common/minigames/minigame/all.qh @@ -69,7 +69,6 @@ that .owner is set to the minigame session entity and .minigame_autoclean is tru #include "pong.qc" #include "ps.qc" #include "pp.qc" -#include "snake.qc" #include "bd.qc" /** diff --git a/qcsrc/common/minigames/minigame/snake.qc b/qcsrc/common/minigames/minigame/snake.qc deleted file mode 100644 index 3aedeb016..000000000 --- a/qcsrc/common/minigames/minigame/snake.qc +++ /dev/null @@ -1,844 +0,0 @@ -#include "snake.qh" -REGISTER_MINIGAME(snake, "Snake"); // SNAAAAKE - -const float SNAKE_TURN_MOVE = 0x0100; // the snake is moving, player must control it -const float SNAKE_TURN_WIN = 0x0200; // multiplayer victory -const float SNAKE_TURN_LOSS = 0x0400; // they did it?! -const float SNAKE_TURN_TYPE = 0x0f00; // turn type mask - -const int SNAKE_TURN_TEAM = 0x000f; // turn team mask - -const int SNAKE_SF_PLAYERSCORE = MINIG_SF_CUSTOM; - -const int SNAKE_LET_CNT = 15; -const int SNAKE_NUM_CNT = 15; - -const int SNAKE_TILE_SIZE = 15; - -const int SNAKE_TEAMS = 6; - -bool autocvar_sv_minigames_snake_wrap = false; -float autocvar_sv_minigames_snake_delay_initial = 0.7; -float autocvar_sv_minigames_snake_delay_multiplier = 50; -float autocvar_sv_minigames_snake_delay_min = 0.1; -#ifdef SVQC -int autocvar_sv_minigames_snake_lives = 3; -#endif - -.int snake_score; - -.float snake_delay; -.vector snake_dir; - -.entity snake_next, snake_last, snake_prev; - -.bool snake_tail; - -.int snake_lives[SNAKE_TEAMS + 1]; - -.int snake_lost_teams; - -bool snake_alone(entity minig) -{ - int headcount = 0; - entity e = NULL; - while ( ( e = findentity(e,owner,minig) ) ) - if ( e.classname == "minigame_board_piece" && e.cnt == 1 ) - ++headcount; - - return headcount <= 1; -} - -// find same game piece given its tile name -entity snake_find_piece(entity minig, string tile) -{ - entity e = NULL; - while ( ( e = findentity(e,owner,minig) ) ) - if ( e.classname == "minigame_board_piece" && e.netname == tile ) - return e; - return NULL; -} - -// find same game piece given its cnt -entity snake_find_cnt(entity minig, int steam, int tile) -{ - entity e = NULL; - while ( ( e = findentity(e,owner,minig) ) ) - if ( e.classname == "minigame_board_piece" && e.cnt == tile && e.team == steam ) - return e; - return NULL; -} - -// check if the tile name is valid (15x15 grid) -bool snake_valid_tile(string tile) -{ - if ( !tile ) - return false; - int number = minigame_tile_number(tile); - int letter = minigame_tile_letter(tile); - return 0 <= number && number < SNAKE_NUM_CNT && 0 <= letter && letter < SNAKE_LET_CNT; -} - -entity snake_find_head(entity minig, int steam) -{ - entity e = NULL; - while ( ( e = findentity(e,owner,minig) ) ) - if ( e.classname == "minigame_board_piece" && e.cnt == 1 && e.team == steam ) - return e; - return NULL; -} - -void snake_new_mouse(entity minigame) -{ - RandomSelection_Init(); - int i, j; - for(i = 0; i < SNAKE_LET_CNT; ++i) - for(j = 0; j < SNAKE_NUM_CNT; ++j) - { - string pos = minigame_tile_buildname(i, j); - if(!snake_find_piece(minigame, pos)) - RandomSelection_AddString(pos, 1, 1); - } - - entity piece = msle_spawn(minigame,"minigame_board_piece"); - piece.team = 0; - piece.netname = strzone(RandomSelection_chosen_string); - minigame_server_sendflags(piece,MINIG_SF_ALL); - - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); -} - -entity snake_get_player(entity minigame, int pteam); -int snake_winning_team(entity minigame) -{ - int winning_team = 0; - for(int i = 1; i <= SNAKE_TEAMS; ++i) - { - entity pl = snake_get_player(minigame, i); - if(pl && minigame.snake_lives[i] > 0) - { - if(winning_team) - return 0; - winning_team = i; - } - } - - return winning_team; -} - -void snake_check_winner(entity minigame) -{ - if(snake_alone(minigame) && !minigame.snake_lost_teams) - return; - - int winner = snake_winning_team(minigame); - - int alivecnt = 0; - for(int i = 1; i <= SNAKE_TEAMS; ++i) - { - entity pl = snake_get_player(minigame, i); - if(pl && minigame.snake_lives[i] > 0) - ++alivecnt; - } - - if(!alivecnt) - { - minigame.minigame_flags = SNAKE_TURN_LOSS; - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); - return; - } - - if(winner) - { - minigame.minigame_flags = SNAKE_TURN_WIN | winner; - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); - } -} - -void snake_move_head(entity minigame, entity head); -void snake_head_think(entity this) -{ - entity minigame = this.owner; - - if(minigame.minigame_flags & SNAKE_TURN_MOVE) - snake_move_head(minigame, this); - - snake_check_winner(minigame); - - this.nextthink = time + this.snake_delay; -} - -void minigame_setup_snake(entity minigame, int pteam) -{ - RandomSelection_Init(); - int i, j; - for(i = 1; i < SNAKE_LET_CNT - 1; ++i) - for(j = 1; j < SNAKE_NUM_CNT - 1; ++j) - { - string pos = minigame_tile_buildname(i, j); - if(!snake_find_piece(minigame, pos)) - RandomSelection_AddString(pos, 1, 1); - } - - entity piece = msle_spawn(minigame,"minigame_board_piece"); - piece.team = pteam; - piece.netname = strzone(RandomSelection_chosen_string); - piece.cnt = 1; - piece.snake_next = NULL; - piece.snake_prev = NULL; - piece.snake_last = piece; - setthink(piece, snake_head_think); - piece.snake_delay = autocvar_sv_minigames_snake_delay_initial; - piece.nextthink = time + 0.1; - minigame_server_sendflags(piece,MINIG_SF_ALL); -} - -void snake_setup_pieces(entity minigame) -{ - snake_new_mouse(minigame); - - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); -} - -entity snake_get_player(entity minigame, int pteam) -{ - entity e; -#ifdef SVQC - for(e = minigame.minigame_players; e; e = e.list_next) -#elif defined(CSQC) - e = NULL; - while( (e = findentity(e,owner,minigame)) ) - if ( e.classname == "minigame_player" ) -#endif - if(e.team == pteam) - return e; - return NULL; -} - -void snake_add_score(entity minigame, int pteam, int thescore) -{ -#ifdef SVQC - if(!minigame) - return; - entity pl = snake_get_player(minigame, pteam); - if(pl) - { - pl.snake_score += thescore; - pl.SendFlags |= SNAKE_SF_PLAYERSCORE; - } -#endif -} - -void snake_move_body(entity minigame, entity head, bool ate_mouse) -{ - for(entity e = head.snake_last; e; e = e.snake_prev) - { - if(!e || e == head) { break; } - - entity nextpiece = e.snake_prev; // can be head - - if(e.netname) { strunzone(e.netname); } - e.netname = strzone(nextpiece.netname); - e.snake_dir = nextpiece.snake_dir; - minigame_server_sendflags(e, MINIG_SF_UPDATE); - } - - if(ate_mouse) - { - entity tail = head.snake_last; - - tail.snake_tail = false; - - int newcnt = tail.cnt + 1; - head.snake_delay = max(autocvar_sv_minigames_snake_delay_min, autocvar_sv_minigames_snake_delay_initial - (newcnt / autocvar_sv_minigames_snake_delay_multiplier)); - snake_add_score(minigame, head.team, 1); - - entity piece = msle_spawn(minigame,"minigame_board_piece"); - piece.cnt = newcnt; - piece.team = head.team; - piece.snake_prev = tail; - piece.snake_dir = tail.snake_dir; - piece.snake_next = NULL; - piece.snake_tail = true; - piece.netname = strzone(tail.netname); - - tail.snake_next = piece; - head.snake_last = piece; - - minigame_server_sendflags(piece,MINIG_SF_UPDATE); - - //minigame_server_sendflags(minigame,MINIG_SF_UPDATE); - } -} - -void snake_eat_team(entity minigame, int pteam) -{ - entity head = snake_find_head(minigame, pteam); - if(!head) { return; } - - minigame.snake_lives[pteam] -= 1; - - entity pl = snake_get_player(minigame, pteam); -#ifdef SVQC - pl.SendFlags |= SNAKE_SF_PLAYERSCORE; -#endif - - head.nextthink = time + 1; // make sure they don't to eat us somehow - - entity e = NULL; - while ( ( e = findentity(e,owner,minigame) ) ) - if ( e.classname == "minigame_board_piece" && e.cnt && e.team == pteam ) - { - if(e.netname) { strunzone(e.netname); } - delete(e); - } - - if(minigame.snake_lives[pteam] <= 0) - minigame.snake_lost_teams |= BIT(pteam); - - if(pl && minigame.snake_lives[pteam] > 0) - minigame_setup_snake(minigame, pteam); -} - -void snake_move_head(entity minigame, entity head) -{ - if(!head.snake_dir_x && !head.snake_dir_y) - return; // nope! - - string newpos; - - if(autocvar_sv_minigames_snake_wrap) - newpos = minigame_relative_tile(head.netname, head.snake_dir_x, head.snake_dir_y, SNAKE_NUM_CNT, SNAKE_LET_CNT); - else - { - int myx = minigame_tile_letter(head.netname); - int myy = minigame_tile_number(head.netname); - - myx += head.snake_dir_x; - myy += head.snake_dir_y; - - newpos = minigame_tile_buildname(myx, myy); - } - - entity hit = snake_find_piece(minigame, newpos); - - if(!snake_valid_tile(newpos) || (hit && hit.cnt && hit.team == head.team)) - { - if(snake_alone(minigame)) - { - minigame.minigame_flags = SNAKE_TURN_LOSS; - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); - } - else - { - snake_add_score(minigame, head.team, -1); - snake_eat_team(minigame, head.team); - } - - return; - } - - bool ate_mouse = (hit && !hit.cnt); - - // move the body first, then set the new head position? - snake_move_body(minigame, head, ate_mouse); - - if(head.netname) { strunzone(head.netname); } - head.netname = strzone(newpos); - minigame_server_sendflags(head,MINIG_SF_UPDATE); - - // above check makes sure it's not our team - if(hit.cnt) - { - snake_eat_team(minigame, hit.team); - snake_add_score(minigame, head.team, 1); - } - - if(ate_mouse) - { - if(hit.netname) { strunzone(hit.netname); } - delete(hit); - - snake_new_mouse(minigame); - } -} - -// make a move -void snake_move(entity minigame, entity player, string dxs, string dys ) -{ - if ( minigame.minigame_flags & SNAKE_TURN_MOVE ) - if ( dxs || dys ) - { - //if ( snake_valid_tile(pos) ) - //if ( snake_find_piece(minigame, pos) ) - { - entity head = snake_find_head(minigame, player.team); - if(!head) - return; // their head is already dead - - int dx = ((dxs) ? bound(-1, stof(dxs), 1) : 0); - int dy = ((dys) ? bound(-1, stof(dys), 1) : 0); - - int myl = minigame_tile_letter(head.netname); - int myn = minigame_tile_number(head.netname); - - entity check_piece = snake_find_piece(minigame, minigame_tile_buildname(myl + dx, myn + dy)); - if(check_piece && check_piece.cnt == 2) - return; // nope! - - if(head.snake_dir == '0 0 0') - head.nextthink = time; // TODO: make sure this can't be exploited! - head.snake_dir_x = dx; - head.snake_dir_y = dy; - head.snake_dir_z = 0; - minigame_server_sendflags(head,MINIG_SF_UPDATE); - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); - } - } -} - -#ifdef SVQC - - -// required function, handle server side events -int snake_server_event(entity minigame, string event, ...) -{ - switch(event) - { - case "start": - { - snake_setup_pieces(minigame); - minigame.minigame_flags = SNAKE_TURN_MOVE; - minigame.snake_lost_teams = 0; - - if(SNAKE_TEAMS > 1) - { - for(int i = 1; i <= SNAKE_TEAMS; ++i) - minigame.snake_lives[i] = autocvar_sv_minigames_snake_lives; - } - else - minigame.snake_lives[1] = 1; - - return true; - } - case "end": - { - entity e = NULL; - while( (e = findentity(e, owner, minigame)) ) - if(e.classname == "minigame_board_piece") - { - if(e.netname) { strunzone(e.netname); } - delete(e); - } - return false; - } - case "join": - { - int pl_num = minigame_count_players(minigame); - - if(pl_num >= SNAKE_TEAMS) { return false; } - - int t = 1; // Team 1 by default - - for(int i = 1; i <= SNAKE_TEAMS; ++i) - { - entity e = snake_get_player(minigame, i); - if(!e) - { - t = i; - break; - } - } - - if(!snake_find_head(minigame, t) && !(minigame.snake_lost_teams & BIT(t))) - { - entity pl = ...(1,entity); - if(pl) - { - //pl.snake_lives = ((SNAKE_TEAMS > 1) ? autocvar_sv_minigames_snake_lives : 1); - // send score anyway, lives are set - pl.SendFlags |= SNAKE_SF_PLAYERSCORE; - } - minigame_setup_snake(minigame, t); - } - - return t; - } - case "cmd": - { - switch(argv(0)) - { - case "move": - snake_move(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) == 3 ? argv(2) : string_null)); - return true; - } - - return false; - } - case "network_send": - { - entity sent = ...(0,entity); - int sf = ...(1,int); - if ( sent.classname == "minigame_board_piece" && (sf & MINIG_SF_UPDATE) ) - { - int letter = minigame_tile_letter(sent.netname); - int number = minigame_tile_number(sent.netname); - - WriteByte(MSG_ENTITY,letter); - WriteByte(MSG_ENTITY,number); - - WriteByte(MSG_ENTITY,sent.cnt); - WriteByte(MSG_ENTITY,sent.snake_tail); - - int dx = sent.snake_dir_x; - int dy = sent.snake_dir_y; - if(dx == -1) dx = 2; - if(dy == -1) dy = 2; - WriteByte(MSG_ENTITY,dx); - WriteByte(MSG_ENTITY,dy); - } - else if ( sent.classname == "minigame_player" && (sf & SNAKE_SF_PLAYERSCORE ) ) - { - WriteLong(MSG_ENTITY,sent.snake_score); - WriteByte(MSG_ENTITY,max(0, minigame.snake_lives[sent.team])); - } - else if ( sent.classname == "minigame" && (sf & MINIG_SF_UPDATE ) ) - { - WriteByte(MSG_ENTITY,autocvar_sv_minigames_snake_wrap); - } - return false; - } - } - - return false; -} - - -#elif defined(CSQC) - -vector snake_boardpos; // HUD board position -vector snake_boardsize;// HUD board size - -bool snake_wrap; - -vector snake_teamcolor(int steam) -{ - switch(steam) - { - case 1: return '1 0 0'; - case 2: return '0 0 1'; - case 3: return '1 1 0'; - case 4: return '1 0 1'; - case 5: return '0 1 0'; - case 6: return '0 1 1'; - } - - return '1 1 1'; -} - -// Required function, draw the game board -void snake_hud_board(vector pos, vector mySize) -{ - minigame_hud_fitsqare(pos, mySize); - snake_boardpos = pos; - snake_boardsize = mySize; - - minigame_hud_simpleboard(pos,mySize,minigame_texture("snake/board")); - - vector tile_size = minigame_hud_denormalize_size('1 1 0' / SNAKE_TILE_SIZE,pos,mySize); - vector tile_pos; - - entity e; - FOREACH_MINIGAME_ENTITY(e) - { - if ( e.classname == "minigame_board_piece" ) - { - tile_pos = minigame_tile_pos(e.netname,SNAKE_NUM_CNT,SNAKE_LET_CNT); - tile_pos = minigame_hud_denormalize(tile_pos,pos,mySize); - - vector tile_color = snake_teamcolor(e.team); - - string thepiece = "snake/mouse"; - if(e.cnt) - thepiece = "snake/body"; - if(e.snake_tail) - thepiece = "snake/tail"; - if(e.cnt == 1) - { - int dx = minigame_tile_letter(e.netname) + e.snake_dir_x * 2; - int dy = minigame_tile_number(e.netname) + e.snake_dir_y * 2; - entity mouse = snake_find_piece(active_minigame, minigame_tile_buildname(dx, dy)); - thepiece = "snake/head"; - if(mouse && mouse.team != e.team) - { - float myang = 0; - int myx = minigame_tile_letter(e.netname); - int myy = minigame_tile_number(e.netname); - if(myx - 2 == dx) - myang = M_PI*3/2; - if(myx + 2 == dx) - myang = M_PI/2; - if(myy - 2 == dy) - myang = M_PI; - - int newx = minigame_tile_letter(e.netname) + e.snake_dir_x; - int newy = minigame_tile_number(e.netname) + e.snake_dir_y; - string newpos = minigame_tile_buildname(newx, newy); - - vector my_pos = minigame_tile_pos(newpos,SNAKE_NUM_CNT,SNAKE_LET_CNT); - my_pos = minigame_hud_denormalize(my_pos,pos,mySize); - - drawrotpic(my_pos, myang, minigame_texture("snake/tongue"), - tile_size, tile_size/2, tile_color, - panel_fg_alpha, DRAWFLAG_NORMAL ); - } - } - - if(e.cnt == 1 || e.snake_tail) - { - vector thedir = e.snake_dir; - float theang = 0; - if(e.snake_tail) - { - int thex = minigame_tile_letter(e.netname); - int they = minigame_tile_number(e.netname); - entity t = snake_find_cnt(active_minigame, e.team, e.cnt - 1); - int tx = minigame_tile_letter(t.netname); - int ty = minigame_tile_number(t.netname); - - if(thex - 1 == tx) - { - thedir_y = 0; - thedir_x = -1; - } - if(they + 1 == ty) - { - thedir_x = 0; - thedir_y = 1; - } - if(they - 1 == ty) - { - thedir_x = 0; - thedir_y = -1; - } - } - - if(thedir_y == -1) - theang = M_PI; - if(thedir_x == 1) - theang = M_PI/2; - if(thedir_x == -1) - theang = M_PI*3/2; - - drawrotpic(tile_pos, theang, minigame_texture(thepiece), - tile_size, tile_size/2, tile_color, - panel_fg_alpha, DRAWFLAG_NORMAL ); - } - else - { - minigame_drawpic_centered( tile_pos, - minigame_texture(thepiece), - tile_size, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL ); - } - } - } - - if ( (active_minigame.minigame_flags & SNAKE_TURN_LOSS) || (active_minigame.minigame_flags & SNAKE_TURN_WIN) || (active_minigame.snake_lives[minigame_self.team] <= 0) ) - { - int scores = minigame_self.snake_score; - - vector winfs = hud_fontsize*2; - string scores_text, victory_text; - victory_text = "Game over!"; - scores_text = strcat("Score: ", ftos(scores)); - - if(active_minigame.minigame_flags & SNAKE_TURN_WIN) - if((active_minigame.minigame_flags & SNAKE_TURN_TEAM) == minigame_self.team) - victory_text = "You win!"; - if(active_minigame.snake_lives[minigame_self.team] <= 0) - victory_text = "You ran out of lives!"; - - vector win_pos = pos+eY*(mySize_y-winfs_y)/2; - vector win_sz; - win_sz = minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos, - sprintf("%s %s", victory_text, scores_text), - winfs, 0, DRAWFLAG_NORMAL, 0.5); - - drawfill(win_pos-eY*hud_fontsize_y,win_sz+2*eY*hud_fontsize_y,'0.3 0.3 1',0.8,DRAWFLAG_ADDITIVE); - - minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos, - sprintf("%s %s", victory_text, scores_text), - winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5); - } -} - - -// Required function, draw the game status panel -void snake_hud_status(vector pos, vector mySize) -{ - HUD_Panel_DrawBg(); - vector ts = minigame_drawstring_wrapped(mySize.x, pos, active_minigame.descriptor.message, - hud_fontsize * 2, '0.25 0.47 0.72', panel_fg_alpha, DRAWFLAG_NORMAL,0.5); - ts.y += hud_fontsize.y; - pos.y += ts.y; - mySize.y -= ts.y; - - vector player_fontsize = hud_fontsize * 1.75; - ts.y = player_fontsize.y + (mySize.y - SNAKE_TEAMS * player_fontsize.y) / SNAKE_TEAMS; - ts.x = mySize_x; - vector mypos; - - entity e; - FOREACH_MINIGAME_ENTITY(e) - { - if ( e.classname == "minigame_player" ) - { - mypos = pos + eY * (e.team - 1) * ts.y; - - if (e == minigame_self) - { - const vector hl_size = '1 1 0'; - drawfill(mypos + hl_size, ts - 2 * hl_size, snake_teamcolor(e.team), 0.25 * panel_fg_alpha, DRAWFLAG_ADDITIVE); - drawborderlines(hl_size.x, mypos + hl_size, ts - 2 * hl_size, snake_teamcolor(e.team), panel_fg_alpha, DRAWFLAG_NORMAL); - } - else - drawfill(mypos, ts, snake_teamcolor(e.team), 0.25 * panel_fg_alpha, DRAWFLAG_ADDITIVE); - - minigame_drawcolorcodedstring_trunc(mySize.x - hud_fontsize.x * 0.5, mypos + eX * hud_fontsize.x * 0.25, - entcs_GetName(e.minigame_playerslot - 1), - player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - - mypos.y += player_fontsize.y; - drawstring_aspect(mypos, ftos(e.snake_score), ts - eY * player_fontsize.y - eX * ts.x * (3 / 4), - '0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring_aspect(mypos + eX * ts.x * (1 / 4), strcat("1UP: ", ftos(active_minigame.snake_lives[e.team])), ts - eY * player_fontsize.y - eX * ts.x * (1 / 4), - '1 0.44 0.54', panel_fg_alpha, DRAWFLAG_NORMAL); - } - } -} - -// Turn a set of flags into a help message -string snake_turn_to_string(int turnflags) -{ - if ( turnflags & SNAKE_TURN_LOSS ) - return _("Game over!"); - - if ( turnflags & SNAKE_TURN_WIN ) - { - if ( (turnflags&SNAKE_TURN_TEAM) != minigame_self.team ) - return _("You ran out of lives!"); - return _("You win!"); - } - - if(active_minigame.snake_lives[minigame_self.team] <= 0) - return _("You ran out of lives!"); - - if ( (snake_find_head(active_minigame, minigame_self.team)).snake_dir == '0 0 0' ) - return _("Press an arrow key to begin the game"); - - if ( turnflags & SNAKE_TURN_MOVE ) - if(snake_wrap) - return _("Avoid the snake's body, collect the mice!"); - else - return _("Avoid the screen edges and the snake's body, collect the mice!"); - - return ""; -} - -// Make the correct move -void snake_set_direction(entity minigame, int dx, int dy) -{ - //if ( minigame.minigame_flags == SNAKE_TURN_MOVE ) - //{ - minigame_cmd("move ",ftos(dx), " ", ftos(dy)); - //} -} - -// Required function, handle client events -int snake_client_event(entity minigame, string event, ...) -{ - switch(event) - { - case "activate": - { - minigame.message = snake_turn_to_string(minigame.minigame_flags); - return false; - } - case "key_pressed": - { - //if((minigame.minigame_flags & SNAKE_TURN_TEAM) == minigame_self.team) - { - switch ( ...(0,int) ) - { - case K_RIGHTARROW: - case K_KP_RIGHTARROW: - snake_set_direction(minigame, 1, 0); - return true; - case K_LEFTARROW: - case K_KP_LEFTARROW: - snake_set_direction(minigame, -1, 0); - return true; - case K_UPARROW: - case K_KP_UPARROW: - snake_set_direction(minigame, 0, 1); - return true; - case K_DOWNARROW: - case K_KP_DOWNARROW: - snake_set_direction(minigame, 0, -1); - return true; - } - } - - return false; - } - case "network_receive": - { - entity sent = ...(0,entity); - int sf = ...(1,int); - if ( sent.classname == "minigame" ) - { - if ( sf & MINIG_SF_UPDATE ) - { - snake_wrap = ReadByte(); - sent.message = snake_turn_to_string(sent.minigame_flags); - //if ( sent.minigame_flags & minigame_self.team ) - minigame_prompt(); - } - } - else if(sent.classname == "minigame_board_piece") - { - if(sf & MINIG_SF_UPDATE) - { - int letter = ReadByte(); - int number = ReadByte(); - if(sent.netname) { strunzone(sent.netname); } - sent.netname = strzone(minigame_tile_buildname(letter, number)); - - sent.cnt = ReadByte(); - sent.snake_tail = ReadByte(); - - int dx = ReadByte(); - int dy = ReadByte(); - - if(dx == 2) dx = -1; - if(dy == 2) dy = -1; - - sent.snake_dir_x = dx; - sent.snake_dir_y = dy; - sent.snake_dir_z = 0; - } - } - else if ( sent.classname == "minigame_player" && (sf & SNAKE_SF_PLAYERSCORE ) ) - { - sent.snake_score = ReadLong(); - minigame.snake_lives[sent.team] = ReadByte(); - } - - return false; - } - } - - return false; -} - -#endif diff --git a/qcsrc/common/minigames/minigame/snake.qh b/qcsrc/common/minigames/minigame/snake.qh deleted file mode 100644 index 6f70f09be..000000000 --- a/qcsrc/common/minigames/minigame/snake.qh +++ /dev/null @@ -1 +0,0 @@ -#pragma once -- 2.39.2