]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/minigames/minigame/snake.qc
Merge branch 'master' into terencehill/hud_updates
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / minigames / minigame / snake.qc
index cbb13420fb1573ad76e31e2b7eb6a1057e0fa51c..cd45ed96d6662cada5cdf4d9f669ded4a4e1e61d 100644 (file)
@@ -1,3 +1,4 @@
+#include "snake.qh"
 REGISTER_MINIGAME(snake, "Snake"); // SNAAAAKE
 
 const float SNAKE_TURN_MOVE  = 0x0100; // the snake is moving, player must control it
@@ -38,7 +39,7 @@ int autocvar_sv_minigames_snake_lives = 3;
 bool snake_alone(entity minig)
 {
        int headcount = 0;
-       entity e = world;
+       entity e = NULL;
        while ( ( e = findentity(e,owner,minig) ) )
                if ( e.classname == "minigame_board_piece" && e.cnt == 1 )
                        ++headcount;
@@ -49,21 +50,21 @@ bool snake_alone(entity minig)
 // find same game piece given its tile name
 entity snake_find_piece(entity minig, string tile)
 {
-       entity e = world;
+       entity e = NULL;
        while ( ( e = findentity(e,owner,minig) ) )
                if ( e.classname == "minigame_board_piece" && e.netname == tile )
                        return e;
-       return world;
+       return NULL;
 }
 
 // find same game piece given its cnt
 entity snake_find_cnt(entity minig, int steam, int tile)
 {
-       entity e = world;
+       entity e = NULL;
        while ( ( e = findentity(e,owner,minig) ) )
                if ( e.classname == "minigame_board_piece" && e.cnt == tile && e.team == steam )
                        return e;
-       return world;
+       return NULL;
 }
 
 // check if the tile name is valid (15x15 grid)
@@ -78,11 +79,11 @@ bool snake_valid_tile(string tile)
 
 entity snake_find_head(entity minig, int steam)
 {
-       entity e = world;
+       entity e = NULL;
        while ( ( e = findentity(e,owner,minig) ) )
                if ( e.classname == "minigame_board_piece" && e.cnt == 1 && e.team == steam )
                        return e;
-       return world;
+       return NULL;
 }
 
 void snake_new_mouse(entity minigame)
@@ -94,7 +95,7 @@ void snake_new_mouse(entity minigame)
        {
                string pos = minigame_tile_buildname(i, j);
                if(!snake_find_piece(minigame, pos))
-                       RandomSelection_Add(world, 0, pos, 1, 1);
+                       RandomSelection_Add(NULL, 0, pos, 1, 1);
        }
 
        entity piece = msle_spawn(minigame,"minigame_board_piece");
@@ -153,16 +154,16 @@ void snake_check_winner(entity minigame)
 }
 
 void snake_move_head(entity minigame, entity head);
-void snake_head_think()
+void snake_head_think(entity this)
 {
-       entity minigame = self.owner;
+       entity minigame = this.owner;
 
        if(minigame.minigame_flags & SNAKE_TURN_MOVE)
-               snake_move_head(minigame, self);
+               snake_move_head(minigame, this);
 
        snake_check_winner(minigame);
 
-       self.nextthink = time + self.snake_delay;
+       this.nextthink = time + this.snake_delay;
 }
 
 void minigame_setup_snake(entity minigame, int pteam)
@@ -174,17 +175,17 @@ void minigame_setup_snake(entity minigame, int pteam)
        {
                string pos = minigame_tile_buildname(i, j);
                if(!snake_find_piece(minigame, pos))
-                       RandomSelection_Add(world, 0, pos, 1, 1);
+                       RandomSelection_Add(NULL, 0, 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 = world;
-       piece.snake_prev = world;
+       piece.snake_next = NULL;
+       piece.snake_prev = NULL;
        piece.snake_last = piece;
-       piece.think = snake_head_think;
+       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);
@@ -203,13 +204,13 @@ entity snake_get_player(entity minigame, int pteam)
 #ifdef SVQC
        for(e = minigame.minigame_players; e; e = e.list_next)
 #elif defined(CSQC)
-       e = world;
+       e = NULL;
        while( (e = findentity(e,owner,minigame)) )
                if ( e.classname == "minigame_player" )
 #endif
        if(e.team == pteam)
                return e;
-       return world;
+       return NULL;
 }
 
 void snake_add_score(entity minigame, int pteam, int thescore)
@@ -255,7 +256,7 @@ void snake_move_body(entity minigame, entity head, bool ate_mouse)
                piece.team = head.team;
                piece.snake_prev = tail;
                piece.snake_dir = tail.snake_dir;
-               piece.snake_next = world;
+               piece.snake_next = NULL;
                piece.snake_tail = true;
                piece.netname = strzone(tail.netname);
 
@@ -282,19 +283,19 @@ void snake_eat_team(entity minigame, int pteam)
 
        head.nextthink = time + 1; // make sure they don't to eat us somehow
 
-       entity e = world;
+       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); }
-                       remove(e);
+                       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);  
+               minigame_setup_snake(minigame, pteam);
 }
 
 void snake_move_head(entity minigame, entity head)
@@ -354,7 +355,7 @@ void snake_move_head(entity minigame, entity head)
        if(ate_mouse)
        {
                if(hit.netname) { strunzone(hit.netname); }
-               remove(hit);
+               delete(hit);
 
                snake_new_mouse(minigame);
        }
@@ -415,17 +416,17 @@ int snake_server_event(entity minigame, string event, ...)
                        }
                        else
                                minigame.snake_lives[1] = 1;
-                       
+
                        return true;
                }
                case "end":
                {
-                       entity e = world;
+                       entity e = NULL;
                        while( (e = findentity(e, owner, minigame)) )
                        if(e.classname == "minigame_board_piece")
                        {
                                if(e.netname) { strunzone(e.netname); }
-                               remove(e);
+                               delete(e);
                        }
                        return false;
                }
@@ -465,8 +466,8 @@ int snake_server_event(entity minigame, string event, ...)
                {
                        switch(argv(0))
                        {
-                               case "move": 
-                                       snake_move(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) == 3 ? argv(2) : string_null)); 
+                               case "move":
+                                       snake_move(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) == 3 ? argv(2) : string_null));
                                        return true;
                        }
 
@@ -506,7 +507,7 @@ int snake_server_event(entity minigame, string event, ...)
                        return false;
                }
        }
-       
+
        return false;
 }
 
@@ -539,7 +540,7 @@ 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);
@@ -633,7 +634,7 @@ void snake_hud_board(vector pos, vector mySize)
                        }
                        else
                        {
-                               minigame_drawpic_centered( tile_pos,  
+                               minigame_drawpic_centered( tile_pos,
                                                minigame_texture(thepiece),
                                                tile_size, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL );
                        }
@@ -654,17 +655,17 @@ void snake_hud_board(vector pos, vector mySize)
                        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), 
+                       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), 
+                       sprintf("%s %s", victory_text, scores_text),
                        winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5);
        }
 }
@@ -673,26 +674,18 @@ void snake_hud_board(vector pos, vector mySize)
 // Required function, draw the game status panel
 void snake_hud_status(vector pos, vector mySize)
 {
-       HUD_Panel_DrawBg(1);
+       HUD_Panel_DrawBg();
        vector ts;
        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 = ( mySize_y - 2*player_fontsize_y ) / SNAKE_TEAMS;
+       ts_y = ( mySize_y - SNAKE_TEAMS*player_fontsize_y ) / SNAKE_TEAMS;
        ts_x = mySize_x;
        vector mypos;
-       vector tile_size = '48 48 0';
-
-       mypos = pos;
-       if ( minigame_self.team > 1 )
-               mypos_y  += player_fontsize_y + (ts_y * (minigame_self.team - 1));
-       drawfill(mypos,eX*mySize_x+eY*player_fontsize_y,'1 1 1',0.5,DRAWFLAG_ADDITIVE);
-       mypos_y += player_fontsize_y;
-       drawfill(mypos,eX*mySize_x+eY*tile_size_y,'1 1 1',0.25,DRAWFLAG_ADDITIVE);
 
        entity e;
        FOREACH_MINIGAME_ENTITY(e)
@@ -700,28 +693,21 @@ void snake_hud_status(vector pos, vector mySize)
                if ( e.classname == "minigame_player" )
                {
                        mypos = pos;
-                       if ( e.team > 1 )
-                               mypos_y  += player_fontsize_y + (ts_y * (e.team - 1));
-                       minigame_drawcolorcodedstring_trunc(mySize_x,mypos,
-                               GetPlayerName(e.minigame_playerslot-1),
-                               player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
-
-                       vector tile_color = snake_teamcolor(e.team);
+                       mypos_y  += (e.team-1) * (player_fontsize_y + ts_y);
 
-                       mypos_y += player_fontsize_y;
-                       drawpic( mypos,
-                                       minigame_texture("snake/head"),
-                                       tile_size * 0.7, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL );
+                       drawfill(mypos, ts, snake_teamcolor(e.team), 0.25, DRAWFLAG_ADDITIVE);
 
-                       mypos_x += tile_size_x;
+                       minigame_drawcolorcodedstring_trunc(mySize_x,mypos,
+                               entcs_GetName(e.minigame_playerslot-1),
+                               player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
 
-                       drawstring(mypos,ftos(e.snake_score),tile_size,
+                       drawstring(mypos+eY*player_fontsize_y,ftos(e.snake_score),'48 48 0' * (SNAKE_TEAMS * 0.1),
                                           '0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+                       drawstring(mypos+(eY*player_fontsize_y) + (eX*player_fontsize_x),strcat("1UP: ", ftos(active_minigame.snake_lives[e.team])),'48 48 0' * (SNAKE_TEAMS * 0.1),
+                                                        '1 0.44 0.54', panel_fg_alpha, DRAWFLAG_NORMAL);
 
-                       mypos_x += tile_size_x;
-
-                       drawstring(mypos,strcat("1UP: ", ftos(active_minigame.snake_lives[e.team])),tile_size * 0.6,
-                                                        '0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+                       if ( e == minigame_self )
+                               drawborderlines(1, mypos, ts, snake_teamcolor(e.team), 1, DRAWFLAG_NORMAL);
                }
        }
 }
@@ -741,7 +727,7 @@ string snake_turn_to_string(int turnflags)
 
        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");
 
@@ -750,7 +736,7 @@ string snake_turn_to_string(int turnflags)
                        return _("Avoid the snake's body, collect the mice!");
                else
                        return _("Avoid the screen edges and the snake's body, collect the mice!");
-       
+
        return "";
 }
 
@@ -850,4 +836,4 @@ int snake_client_event(entity minigame, string event, ...)
        return false;
 }
 
-#endif
\ No newline at end of file
+#endif