about summary refs log tree commit diff
path: root/src/engine/client/ec_client.c
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-21 19:12:09 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2009-01-21 19:12:09 +0000
commitf0760ac0d374460b23eab0650dfadc8f20d72010 (patch)
tree8ff48fe3a22e7f6ac33fc058dfca46bcd79fb57b /src/engine/client/ec_client.c
parent38a9e32efd470660257ef4e74de8fed9b1a50eb3 (diff)
downloadzcatch-f0760ac0d374460b23eab0650dfadc8f20d72010.tar.gz
zcatch-f0760ac0d374460b23eab0650dfadc8f20d72010.zip
improved crapnet so it changes between different ping configurations. improved the game timer
Diffstat (limited to 'src/engine/client/ec_client.c')
-rw-r--r--src/engine/client/ec_client.c44
1 files changed, 33 insertions, 11 deletions
diff --git a/src/engine/client/ec_client.c b/src/engine/client/ec_client.c
index 2b859c54..138235e8 100644
--- a/src/engine/client/ec_client.c
+++ b/src/engine/client/ec_client.c
@@ -270,7 +270,8 @@ static SMOOTHTIME game_time;
 static SMOOTHTIME predicted_time;
 
 /* graphs */
-static GRAPH input_late_graph;
+static GRAPH inputtime_margin_graph;
+static GRAPH gametime_margin_graph;
 static GRAPH fps_graph;
 
 /* -- snapshot handling --- */
@@ -586,7 +587,8 @@ void client_connect(const char *server_address_str)
 	netclient_connect(net, &server_address);
 	client_set_state(CLIENTSTATE_CONNECTING);
 	
-	graph_init(&input_late_graph, 0.0f, 1.0f);
+	graph_init(&inputtime_margin_graph, -150.0f, 150.0f);
+	graph_init(&gametime_margin_graph, -150.0f, 150.0f);
 }
 
 void client_disconnect_with_reason(const char *reason)
@@ -734,7 +736,8 @@ static void client_debug_render()
 		graph_scale_max(&fps_graph);
 		graph_scale_min(&fps_graph);
 		graph_render(&fps_graph, x, sp*5, w, h, "FPS");
-		graph_render(&input_late_graph, x, sp*5+h+sp, w, h, "Input Margin");
+		graph_render(&inputtime_margin_graph, x, sp*5+h+sp, w, h, "Prediction Margin");
+		graph_render(&gametime_margin_graph, x, sp*5+h+sp+h+sp, w, h, "Gametime Margin");
 	}
 }
 
@@ -1069,17 +1072,13 @@ static void client_process_packet(NETCHUNK *packet)
 				
 				if(time_left < 0)
 				{
-					graph_add(&input_late_graph, time_left/100.0f+0.5f, 1,0,0);
-					
-					if(config.debug)
-						dbg_msg("client", "input was late with %d ms", time_left);
-						
+					graph_add(&inputtime_margin_graph, time_left, 1,0,0);
 					if(predicted_time.up_adjustspeed < 30.0f)
 						predicted_time.up_adjustspeed *= 2.0f;
 				}
 				else
 				{
-					graph_add(&input_late_graph, time_left/100.0f+0.5f, 0,1,0);
+					graph_add(&inputtime_margin_graph, time_left, 0,1,0);
 					
 					predicted_time.up_adjustspeed *= 0.95f;
 					if(predicted_time.up_adjustspeed < 1.0f)
@@ -1240,6 +1239,31 @@ static void client_process_packet(NETCHUNK *packet)
 						
 						/* add new */
 						snapstorage_add(&snapshot_storage, game_tick, time_get(), snapsize, (SNAPSHOT*)tmpbuffer3, 1);
+
+						/* adjust gametime timer */
+						{
+							int64 now = st_get(&game_time, time_get());
+							int64 tickstart = game_tick*time_freq()/50;
+							int64 time_left = (tickstart-now)*1000 / time_freq();
+
+							if(time_left < 0)
+							{
+								graph_add(&gametime_margin_graph, time_left, 1,0,0);
+								if(game_time.down_adjustspeed < 30.0f)
+								{
+									game_time.down_adjustspeed *= 2.0f;
+									dbg_msg("", "%f", game_time.down_adjustspeed);
+								}
+							}
+							else
+							{
+								graph_add(&gametime_margin_graph, time_left, 0,1,0);
+								
+								game_time.down_adjustspeed *= 0.95f;
+								if(game_time.down_adjustspeed < 1.0f)
+									game_time.down_adjustspeed = 1.0f;
+							}
+						}
 						
 						/* add snapshot to demo */
 						if(demorec_isrecording())
@@ -1463,8 +1487,6 @@ static void client_update()
 			intratick = (now - prevtick_start) / (float)(curtick_start-prevtick_start);
 			ticktime = (now - prevtick_start) / (float)freq; /*(float)SERVER_TICK_SPEED);*/
 
-			/*graph_add(&intra_graph, intratick*0.25f);*/
-
 			curtick_start = new_pred_tick*time_freq()/50;
 			prevtick_start = prev_pred_tick*time_freq()/50;
 			predintratick = (pred_now - prevtick_start) / (float)(curtick_start-prevtick_start);