about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-01-20 15:19:30 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-01-20 15:19:30 +0000
commit805a74c1e4e487c1fabafc57858cd591e6dfed9d (patch)
treede66fae77a698b34420a8f24e4bd93ba69cf5274
parentf63bcc8673ddab0520faf34276dfa9141c609102 (diff)
downloadzcatch-805a74c1e4e487c1fabafc57858cd591e6dfed9d.tar.gz
zcatch-805a74c1e4e487c1fabafc57858cd591e6dfed9d.zip
fixed collision bug with player <-> player
-rw-r--r--src/game/client/gc_hooks.cpp6
-rw-r--r--src/game/g_game.cpp9
-rw-r--r--src/game/server/gs_server.cpp8
3 files changed, 7 insertions, 16 deletions
diff --git a/src/game/client/gc_hooks.cpp b/src/game/client/gc_hooks.cpp
index a320498b..ca425059 100644
--- a/src/game/client/gc_hooks.cpp
+++ b/src/game/client/gc_hooks.cpp
@@ -164,12 +164,6 @@ extern "C" void modc_predict()
 			if(!world.players[c])
 				continue;
 
-			
-			// TODO: this should be moved into the g_game
-			// but not done to preserve the nethash
-			if(length(world.players[c]->vel) > 150.0f)
-				world.players[c]->vel = normalize(world.players[c]->vel) * 150.0f;
-
 			world.players[c]->move();
 			world.players[c]->quantize();
 		}
diff --git a/src/game/g_game.cpp b/src/game/g_game.cpp
index 4befc33e..66da6295 100644
--- a/src/game/g_game.cpp
+++ b/src/game/g_game.cpp
@@ -318,13 +318,14 @@ void player_core::tick()
 			vec2 dir = normalize(pos - p->pos);
 			if(d < phys_size*1.25f && d > 1.0f)
 			{
-				float a = phys_size*1.25f - d;
+				float a = (phys_size*1.45f - d);
 				
 				// make sure that we don't add excess force by checking the
 				// direction against the current velocity
 				vec2 veldir = normalize(vel);
 				float v = 1-(dot(veldir, dir)+1)/2;
-				vel = vel + dir*a*v;
+				vel = vel + dir*a*(v*0.75f);
+				vel = vel * 0.85f;
 			}
 			
 			// handle hook influence
@@ -345,6 +346,10 @@ void player_core::tick()
 			}
 		}
 	}	
+
+	// clamp the velocity to something sane
+	if(length(vel) > 100.0f)
+		vel = normalize(vel) * 100.0f;
 }
 
 void player_core::move()
diff --git a/src/game/server/gs_server.cpp b/src/game/server/gs_server.cpp
index 31b1975e..914fd8e1 100644
--- a/src/game/server/gs_server.cpp
+++ b/src/game/server/gs_server.cpp
@@ -1312,14 +1312,6 @@ void player::tick_defered()
 		vec2 start_vel = core.vel;
 		bool stuck_before = test_box(core.pos, vec2(28.0f, 28.0f));
 		
-		// TODO: this should be moved into the g_game
-		// but not done to preserve the nethash
-		if(length(core.vel) > 150.0f)
-		{
-			dbg_msg("server", "insane move! clamping (%f,%f) %f", core.vel.x, core.vel.y, length(core.vel));
-			core.vel = normalize(core.vel) * 150.0f;
-		}
-		
 		core.move();
 		bool stuck_after_move = test_box(core.pos, vec2(28.0f, 28.0f));
 		core.quantize();