about summary refs log tree commit diff
path: root/src/game/client/game_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/client/game_client.cpp')
-rw-r--r--src/game/client/game_client.cpp43
1 files changed, 41 insertions, 2 deletions
diff --git a/src/game/client/game_client.cpp b/src/game/client/game_client.cpp
index 75899ae5..c910014c 100644
--- a/src/game/client/game_client.cpp
+++ b/src/game/client/game_client.cpp
@@ -753,10 +753,15 @@ static void process_events(int s)
 
 static player_core predicted_prev_player;
 static player_core predicted_player;
+static int predicted_tick = 0;
 static int last_new_predicted_tick = -1;
 
 extern "C" void modc_predict()
 {
+	player_core before_prev_player = predicted_prev_player;
+	player_core before_player = predicted_player;
+
+
 	// repredict player
 	world_core world;
 	int local_cid = -1;
@@ -849,6 +854,27 @@ extern "C" void modc_predict()
 		if(tick == client_predtick() && world.players[local_cid])
 			predicted_player = *world.players[local_cid];
 	}
+	
+	if(config.debug && predicted_tick == client_predtick())
+	{
+		if(predicted_player.pos.x != before_player.pos.x ||
+			predicted_player.pos.y != before_player.pos.y)
+		{
+			dbg_msg("client", "prediction error, (%d %d) (%d %d)", 
+				(int)before_player.pos.x, (int)before_player.pos.y,
+				(int)predicted_player.pos.x, (int)predicted_player.pos.y);
+		}
+
+		if(predicted_prev_player.pos.x != before_prev_player.pos.x ||
+			predicted_prev_player.pos.y != before_prev_player.pos.y)
+		{
+			dbg_msg("client", "prediction error, prev (%d %d) (%d %d)", 
+				(int)before_prev_player.pos.x, (int)before_prev_player.pos.y,
+				(int)predicted_prev_player.pos.x, (int)predicted_prev_player.pos.y);
+		}
+	}
+	
+	predicted_tick = client_predtick();
 }
 
 static void clear_object_pointers()
@@ -2441,7 +2467,7 @@ void render_game()
 		gfx_quads_end();
 	}
 
-	if(local_character && !spectate)
+	if(local_character && !spectate && !(gameobj && gameobj->game_over))
 	{
 		gfx_texture_set(data->images[IMAGE_GAME].id);
 		gfx_quads_begin();
@@ -2668,7 +2694,7 @@ void render_game()
 		}
 
 		// render small score hud
-		if(gametype == GAMETYPE_TDM || gametype == GAMETYPE_CTF)
+		if(!(gameobj && gameobj->game_over) && (gametype == GAMETYPE_TDM || gametype == GAMETYPE_CTF))
 		{
 			for(int t = 0; t < 2; t++)
 			{
@@ -2792,6 +2818,19 @@ void render_game()
 		}
 		else
 		{
+				
+			if(gameobj && gameobj->game_over)
+			{
+				const char *text = "DRAW!";
+				if(gameobj->teamscore[0] > gameobj->teamscore[1])
+					text = "Red Team Wins!";
+				else if(gameobj->teamscore[1] > gameobj->teamscore[0])
+					text = "Blue Team Wins!";
+					
+				float w = gfx_pretty_text_width(92.0f, text, -1);
+				gfx_pretty_text(width/2-w/2, 45, 92.0f, text, -1);
+			}
+			
 			render_scoreboard(width/2-w-20, 150.0f, w, 0, "Red Team");
 			render_scoreboard(width/2 + 20, 150.0f, w, 1, "Blue Team");
 		}