]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/minigames/minigame/ps.qc
Merge branch 'terencehill/minplayers_per_team' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / minigames / minigame / ps.qc
index 3acef2fd5f7d79571e95d5582d3a1e6650d8c9e0..6850bd834ba40b0f3d4d3cd2af530e2670a6f354 100644 (file)
@@ -1,3 +1,6 @@
+#include "ps.qh"
+REGISTER_MINIGAME(ps, "Peg Solitaire");
+
 const float PS_TURN_MOVE  = 0x0100; // player has to click on a piece on the board
 const float PS_TURN_WIN   = 0x0200; // player has won
 const float PS_TURN_DRAW  = 0x0400; // player can make no more moves
@@ -11,17 +14,17 @@ const int PS_TILE_SIZE = 8;
 // find same game piece given its tile name
 entity ps_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;
 }
 
 bool ps_draw(entity minigame)
 {
        int valid = 0;
-       entity e = world;
+       entity e = NULL;
        while( ( e = findentity(e,owner,minigame) ) )
                if( e.classname == "minigame_board_piece" )
                {
@@ -36,15 +39,19 @@ bool ps_tile_blacklisted(string tile)
        int number = minigame_tile_number(tile);
        int letter = minigame_tile_letter(tile);
        if(letter < 2)
+       {
                if(number < 2)
                        return true;
                else if(number > PS_NUM_CNT - 3)
                        return true;
+       }
        if(letter > PS_LET_CNT - 3)
+       {
                if(number < 2)
                        return true;
                else if(number > PS_NUM_CNT - 3)
                        return true;
+       }
 
        return false;
 }
@@ -67,7 +74,7 @@ bool ps_winning_piece(entity minigame)
        //int number = minigame_tile_number(piece.netname);
        //int letter = minigame_tile_letter(piece.netname);
 
-       entity e = world;
+       entity e = NULL;
        while ( ( e = findentity(e,owner,minigame) ) )
                if ( e.classname == "minigame_board_piece" )
                {
@@ -102,7 +109,7 @@ bool ps_winning_piece(entity minigame)
                                        return false; // a move is valid, abort!
                        }
                }
-       
+
        return true;
 }
 
@@ -136,11 +143,10 @@ bool ps_move_piece(entity minigame, entity piece, string pos, int leti, int numb
        if(!middle)
                return false;
 
-       if(middle.netname) { strunzone(middle.netname); }
-       remove(middle);
+       strfree(middle.netname);
+       delete(middle);
 
-       if(piece.netname) { strunzone(piece.netname); }
-       piece.netname = strzone(pos);
+       strcpy(piece.netname, pos);
 
        minigame_server_sendflags(piece,MINIG_SF_ALL);
 
@@ -225,12 +231,12 @@ int ps_server_event(entity minigame, string event, ...)
                }
                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);
+                               strfree(e.netname);
+                               delete(e);
                        }
                        return false;
                }
@@ -248,7 +254,7 @@ int ps_server_event(entity minigame, string event, ...)
                {
                        switch(argv(0))
                        {
-                               case "move": 
+                               case "move":
 
                                        ps_move(minigame, ...(0,entity), (...(1,int) == 3 ? argv(1) : string_null), (...(1,int) == 3 ? argv(2) : string_null));
                                        return true;
@@ -257,7 +263,7 @@ int ps_server_event(entity minigame, string event, ...)
                        return false;
                }
        }
-       
+
        return false;
 }
 
@@ -275,7 +281,7 @@ void ps_hud_board(vector pos, vector mySize)
        minigame_hud_fitsqare(pos, mySize);
        ps_boardpos = pos;
        ps_boardsize = mySize;
-       
+
        minigame_hud_simpleboard(pos,mySize,minigame_texture("ps/board"));
 
        vector tile_size = minigame_hud_denormalize_size('1 1 0' / PS_TILE_SIZE,pos,mySize);
@@ -353,7 +359,7 @@ void ps_hud_board(vector pos, vector mySize)
                                draw_pos = true;
                }
        }
-       
+
        entity e;
        FOREACH_MINIGAME_ENTITY(e)
        {
@@ -368,18 +374,18 @@ void ps_hud_board(vector pos, vector mySize)
                        if(e.netname == ps_curr_pos)
                        if(ps_curr_piece.netname != ps_curr_pos)
                        {
-                               minigame_drawpic_centered( tile_pos,  
+                               minigame_drawpic_centered( tile_pos,
                                                minigame_texture("ps/tile_available"),
                                                tile_size, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL );
                        }
                        if(e == ps_curr_piece)
                        {
-                               minigame_drawpic_centered( tile_pos,  
+                               minigame_drawpic_centered( tile_pos,
                                                minigame_texture("ps/tile_selected"),
                                                tile_size, tile_color, panel_fg_alpha, DRAWFLAG_ADDITIVE );
                        }
 
-                       minigame_drawpic_centered( tile_pos,  
+                       minigame_drawpic_centered( tile_pos,
                                        minigame_texture("ps/piece"),
                                        tile_size * 0.8, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL );
                }
@@ -408,17 +414,17 @@ void ps_hud_board(vector pos, vector mySize)
                        remaining_text = "All pieces cleared!";
                else
                        remaining_text = strcat("Remaining pieces: ", ftos(remaining));
-               
+
                vector win_pos = pos+eY*(mySize_y-winfs_y)/2;
                vector win_sz;
                win_sz = minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos,
-                       sprintf("Game over! %s", remaining_text), 
+                       sprintf("Game over! %s", remaining_text),
                        winfs, 0, DRAWFLAG_NORMAL, 0.5);
-               
+
                drawfill(win_pos-eY*hud_fontsize_y,win_sz+2*eY*hud_fontsize_y,'1 1 1',0.5,DRAWFLAG_ADDITIVE);
-               
+
                minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos,
-                       sprintf("Game over! %s", remaining_text), 
+                       sprintf("Game over! %s", remaining_text),
                        winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5);
        }
 }
@@ -427,14 +433,14 @@ void ps_hud_board(vector pos, vector mySize)
 // Required function, draw the game status panel
 void ps_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);
-       
+
        pos_y += ts_y;
        mySize_y -= ts_y;
-       
+
        vector player_fontsize = hud_fontsize * 1.75;
        ts_y = ( mySize_y - 2*player_fontsize_y ) / 2;
        ts_x = mySize_x;
@@ -462,14 +468,14 @@ void ps_hud_status(vector pos, vector mySize)
                {
                        mypos = pos;
                        minigame_drawcolorcodedstring_trunc(mySize_x,mypos,
-                               GetPlayerName(e.minigame_playerslot-1),
+                               entcs_GetName(e.minigame_playerslot-1),
                                player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
-                       
+
                        mypos_y += player_fontsize_y;
-                       //drawpic( mypos,  
+                       //drawpic( mypos,
                        //              minigame_texture("ps/piece"),
                        //              tile_size, '1 0 0', panel_fg_alpha, DRAWFLAG_NORMAL );
-                       
+
                        //mypos_x += tile_size_x;
 
                        drawstring(mypos,sprintf(_("Pieces left: %s"), ftos(remaining)),'28 28 0',
@@ -486,10 +492,10 @@ string ps_turn_to_string(int turnflags)
 
        if ( turnflags & PS_TURN_WIN )
                return _("Well done, you win!");
-       
+
        if ( turnflags & PS_TURN_MOVE )
                return _("Jump a piece over another to capture it");
-       
+
        return "";
 }
 
@@ -504,15 +510,14 @@ void ps_make_move(entity minigame)
                else
                {
                        minigame_cmd("move ", ps_curr_piece.netname, " ", ps_curr_pos);
-                       ps_curr_piece = world;
+                       ps_curr_piece = NULL;
                }
        }
 }
 
 void ps_set_curr_pos(string s)
 {
-       if ( ps_curr_pos )
-               strunzone(ps_curr_pos);
+       strfree(ps_curr_pos);
        if ( s )
                s = strzone(s);
        ps_curr_pos = s;
@@ -526,7 +531,7 @@ int ps_client_event(entity minigame, string event, ...)
                case "activate":
                {
                        ps_set_curr_pos("");
-                       ps_curr_piece = world;
+                       ps_curr_piece = NULL;
                        minigame.message = ps_turn_to_string(minigame.minigame_flags);
                        return false;
                }
@@ -605,8 +610,8 @@ int ps_client_event(entity minigame, string event, ...)
                                if ( sf & MINIG_SF_UPDATE )
                                {
                                        sent.message = ps_turn_to_string(sent.minigame_flags);
-                                       if ( sent.minigame_flags & minigame_self.team )
-                                               minigame_prompt();
+                                       //if ( sent.minigame_flags & minigame_self.team )
+                                               //minigame_prompt();
                                }
                        }
 
@@ -617,4 +622,4 @@ int ps_client_event(entity minigame, string event, ...)
        return false;
 }
 
-#endif
\ No newline at end of file
+#endif