]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/minigames/minigame/nmm.qc
Implement basic spectator support for the minigames
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / minigames / minigame / nmm.qc
index ab35deaf9656fa35842c4ca53acd1182df2cb16f..ea7f3b42c76e97626100b7207f65b579a5b645c4 100644 (file)
@@ -17,6 +17,8 @@ const int NMM_PIECE_DEAD  = 0x0; // captured by the enemy
 const int NMM_PIECE_HOME  = 0x1; // not yet placed
 const int NMM_PIECE_BOARD = 0x2; // placed on the board
 
+const int NMM_SPECTATOR_TEAM = 255; // must be above max teams and equal to or below 255
+
 .int  nmm_tile_distance;
 .entity nmm_tile_piece;
 .string nmm_tile_hmill;
@@ -244,7 +246,7 @@ int nmm_server_event(entity minigame, string event, ...)
                for ( e = minigame.minigame_players; e; e = e.list_next )
                        n++;
                if ( n >= 2 )
-                       return 0;
+                       return NMM_SPECTATOR_TEAM;
                if ( minigame.minigame_players && minigame.minigame_players.team == 1 )
                        return 2;
                return 1;
@@ -517,16 +519,19 @@ void nmm_hud_status(vector pos, vector mySize)
        float piece_light = 1;
        entity e = NULL;
 
-       mypos = pos;
-       if ( (active_minigame.minigame_flags&NMM_TURN_TEAM) == 2 )
-               mypos_y  += player_fontsize_y + ts_y;
-       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*piece_sz_y,'1 1 1',0.25,DRAWFLAG_ADDITIVE);
+       if(minigame_self.team != NMM_SPECTATOR_TEAM)
+       {
+               mypos = pos;
+               if ( (active_minigame.minigame_flags&NMM_TURN_TEAM) == 2 )
+                       mypos_y  += player_fontsize_y + ts_y;
+               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*piece_sz_y,'1 1 1',0.25,DRAWFLAG_ADDITIVE);
+       }
 
        FOREACH_MINIGAME_ENTITY(e)
        {
-               if ( e.classname == "minigame_player" )
+               if ( e.classname == "minigame_player" && e.team != NMM_SPECTATOR_TEAM )
                {
                        mypos = pos;
                        if ( e.team == 2 )
@@ -596,6 +601,9 @@ void nmm_make_move(entity minigame)
 
 string nmm_turn_to_string(int turnflags)
 {
+       if( minigame_self.team == NMM_SPECTATOR_TEAM )
+               return _("You are spectating");
+
        if ( turnflags & NMM_TURN_WIN )
        {
                if ( (turnflags&NMM_TURN_TEAM) != minigame_self.team )