about summary refs log tree commit diff
path: root/src/game
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2007-08-05 09:12:38 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2007-08-05 09:12:38 +0000
commit1e296e47413c3c9a26482d17dae13cf3a4340383 (patch)
tree7c6a11b153339641427498f9be27a7af3805940c /src/game
parent421300ffb893ff406f9334482d9867d38ec67c00 (diff)
downloadzcatch-1e296e47413c3c9a26482d17dae13cf3a4340383.tar.gz
zcatch-1e296e47413c3c9a26482d17dae13cf3a4340383.zip
fixed so that the damage indicators doesn't group together with the shotgun
Diffstat (limited to 'src/game')
-rw-r--r--src/game/server/game_server.cpp28
-rw-r--r--src/game/server/game_server.h2
2 files changed, 22 insertions, 8 deletions
diff --git a/src/game/server/game_server.cpp b/src/game/server/game_server.cpp
index 819215cb..9e4de2a4 100644
--- a/src/game/server/game_server.cpp
+++ b/src/game/server/game_server.cpp
@@ -28,7 +28,7 @@ const float hook_drag_speed = 15.0f;
 const float gravity = 0.5f;
 
 class player* get_player(int index);
-void create_damageind(vec2 p, vec2 dir, int amount);
+void create_damageind(vec2 p, float angle_mod, int amount);
 void create_explosion(vec2 p, int owner, int weapon, bool bnodamage);
 void create_smoke(vec2 p);
 void create_spawn(vec2 p);
@@ -739,6 +739,7 @@ void player::reset()
 	dead = true;
 	spawning = false;
 	die_tick = 0;
+	damage_taken = 0;
 	state = STATE_UNKNOWN;
 }
 
@@ -1361,12 +1362,23 @@ bool player::take_damage(vec2 force, int dmg, int from, int weapon)
 	if(from == client_id)
 		dmg = max(1, dmg/2);
 
-	// create healthmod indicator
-	create_damageind(pos, normalize(force), dmg);
-
 	if (gameobj.gametype == GAMETYPE_TDM && from >= 0 && players[from].team == team)
 		return false;
 
+	damage_taken++;
+
+	// create healthmod indicator
+	if(server_tick() < damage_taken_tick+25)
+	{
+		// make sure that the damage indicators doesn't group together
+		create_damageind(pos, damage_taken*0.25f, dmg);
+	}
+	else
+	{
+		damage_taken = 0;
+		create_damageind(pos, 0, dmg);
+	}
+
 	if(armor)
 	{
 		armor -= 1;
@@ -1382,7 +1394,7 @@ bool player::take_damage(vec2 force, int dmg, int from, int weapon)
 	else
 		armor -= dmg;
 	
-	damage_taken_tick = server_tick()+50;
+	damage_taken_tick = server_tick();
 	
 	// do damage hit sound
 	if(from >= 0)
@@ -1451,7 +1463,7 @@ void player::snap(int snaping_client)
 	if(length(vel) > 15.0f)
 		player->emote = EMOTE_HAPPY;
 	
-	if(damage_taken_tick > server_tick())
+	if(damage_taken_tick+50 > server_tick())
 		player->emote = EMOTE_PAIN;
 	
 	if(player->emote == EMOTE_NORMAL)
@@ -1688,9 +1700,9 @@ player *get_player(int index)
 	return &players[index];
 }
 
-void create_damageind(vec2 p, vec2 dir, int amount)
+void create_damageind(vec2 p, float angle, int amount)
 {
-	float a = 3 * 3.14159f / 2;
+	float a = 3 * 3.14159f / 2 + angle;
 	//float a = get_angle(dir);
 	float s = a-pi/3;
 	float e = a+pi/3;
diff --git a/src/game/server/game_server.h b/src/game/server/game_server.h
index 7a5f8338..f084ae16 100644
--- a/src/game/server/game_server.h
+++ b/src/game/server/game_server.h
@@ -217,6 +217,8 @@ public:
 	int reload_timer;
 	int attack_tick;
 	
+	int damage_taken;
+	
 	// we need a defered position so we can handle the physics correctly
 	baselib::vec2 defered_pos;
 	baselib::vec2 vel;