about summary refs log tree commit diff
path: root/src/game
diff options
context:
space:
mode:
authorJakob Fries <jakob.fries@gmail.com>2007-08-09 00:18:11 +0000
committerJakob Fries <jakob.fries@gmail.com>2007-08-09 00:18:11 +0000
commitd5e3c556bf1812c89dea13a5924e619dd2b8ccef (patch)
treeebce2f13931d905a656eb0d4ccc470ac87f4fdb8 /src/game
parent204a66b6105aae0a40293464c76076f2b188ff45 (diff)
downloadzcatch-d5e3c556bf1812c89dea13a5924e619dd2b8ccef.tar.gz
zcatch-d5e3c556bf1812c89dea13a5924e619dd2b8ccef.zip
emotes
Diffstat (limited to 'src/game')
-rw-r--r--src/game/client/game_client.cpp32
-rw-r--r--src/game/game.h5
-rw-r--r--src/game/server/game_server.cpp38
-rw-r--r--src/game/server/game_server.h3
4 files changed, 64 insertions, 14 deletions
diff --git a/src/game/client/game_client.cpp b/src/game/client/game_client.cpp
index 487ec73d..38515b7f 100644
--- a/src/game/client/game_client.cpp
+++ b/src/game/client/game_client.cpp
@@ -790,7 +790,7 @@ static void anim_eval_add(animstate *state, animation *anim, float time, float a
 	anim_add(state, &add, amount);
 }
 
-static void render_tee(animstate *anim, int skin, vec2 dir, vec2 pos)
+static void render_tee(animstate *anim, int skin, int emote, vec2 dir, vec2 pos)
 {
 	vec2 direction =  dir;
 	vec2 position = pos;
@@ -819,10 +819,26 @@ static void render_tee(animstate *anim, int skin, vec2 dir, vec2 pos)
 				// draw eyes
 				if(p == 1)
 				{
-					// normal
-					select_sprite(SPRITE_TEE_EYE_NORMAL, 0, 0, shift*4);
+					switch (emote)
+					{
+						case EMOTE_PAIN:
+							select_sprite(SPRITE_TEE_EYE_PAIN, 0, 0, shift*4);
+							break;
+						case EMOTE_HAPPY:
+							select_sprite(SPRITE_TEE_EYE_HAPPY, 0, 0, shift*4);
+							break;
+						case EMOTE_SURPRISE:
+							select_sprite(SPRITE_TEE_EYE_SURPRISE, 0, 0, shift*4);
+							break;
+						case EMOTE_ANGRY:
+							select_sprite(SPRITE_TEE_EYE_ANGRY, 0, 0, shift*4);
+							break;
+						default:
+							select_sprite(SPRITE_TEE_EYE_NORMAL, 0, 0, shift*4);
+							break;
+					}
 					gfx_quads_draw(position.x-4+direction.x*4, position.y-8+direction.y*3, basesize, basesize);
-					gfx_quads_draw(position.x+4+direction.x*4, position.y-8+direction.y*3, basesize, basesize);
+					gfx_quads_draw(position.x+4+direction.x*4, position.y-8+direction.y*3, -basesize, basesize);
 				}
 			}
 
@@ -1078,7 +1094,7 @@ static void render_player(const obj_player *prev, const obj_player *player)
 
 	// render the tee
 	int skin = gametype == GAMETYPE_TDM ? skinseed + player->team : player->clientid;
-	render_tee(&state, skin, direction, position);
+	render_tee(&state, skin, player->emote, direction, position);
 
 	if(player->state == STATE_CHATTING)
 	{
@@ -1552,7 +1568,7 @@ void render_game()
 			// render victim tee
 			x -= 24.0f;
 			int skin = gametype == GAMETYPE_TDM ? skinseed + client_datas[killmsgs[r].victim].team : killmsgs[r].victim;
-			render_tee(&idlestate, skin, vec2(1,0), vec2(x, y+28));
+			render_tee(&idlestate, skin, EMOTE_NORMAL, vec2(1,0), vec2(x, y+28));
 			x -= 32.0f;
 
 			// render weapon
@@ -1570,7 +1586,7 @@ void render_game()
 			// render killer tee
 			x -= 24.0f;
 			skin = gametype == GAMETYPE_TDM ? skinseed + client_datas[killmsgs[r].killer].team : killmsgs[r].killer;
-			render_tee(&idlestate, skin, vec2(1,0), vec2(x, y+28));
+			render_tee(&idlestate, skin, EMOTE_NORMAL, vec2(1,0), vec2(x, y+28));
 			x -= 32.0f;
 			
 			// render killer name
@@ -1746,7 +1762,7 @@ void render_game()
 				gfx_pretty_text(x+w-tw-35, y, font_size, buf);
 
 				// render avatar
-				render_tee(&idlestate, player->clientid, vec2(1,0), vec2(x+90, y+28));
+				render_tee(&idlestate, player->clientid, EMOTE_NORMAL, vec2(1,0), vec2(x+90, y+28));
 				y += 50.0f;
 			}
 			
diff --git a/src/game/game.h b/src/game/game.h
index bcb5007c..ef2007a9 100644
--- a/src/game/game.h
+++ b/src/game/game.h
@@ -58,10 +58,11 @@ enum
 enum
 {
 	EMOTE_NORMAL=0,
-	EMOTE_BLINK,
-	EMOTE_WINK,
 	EMOTE_PAIN,
 	EMOTE_HAPPY,
+	EMOTE_SURPRISE,
+	EMOTE_ANGRY,
+	EMOTE_BLINK,
 };
 
 enum
diff --git a/src/game/server/game_server.cpp b/src/game/server/game_server.cpp
index 1d6b101f..5428ef5f 100644
--- a/src/game/server/game_server.cpp
+++ b/src/game/server/game_server.cpp
@@ -806,6 +806,9 @@ void player::try_respawn()
 	
 	active_weapon = WEAPON_GUN;
 	reload_timer = 0;
+
+	emote_type = EMOTE_HAPPY;
+	emote_stop = server_tick() + server_tickspeed(); 
 	
 	// Create sound and spawn effects
 	create_sound(pos, SOUND_PLAYER_SPAWN);
@@ -1407,7 +1410,7 @@ bool player::take_damage(vec2 force, int dmg, int from, int weapon)
 	
 	// do damage hit sound
 	if(from >= 0)
-		create_targetted_sound(pos, SOUND_HIT, from);
+		create_targetted_sound(players[from].pos, SOUND_HIT, from);
 			
 	// check for death
 	if(health <= 0)
@@ -1433,6 +1436,8 @@ bool player::take_damage(vec2 force, int dmg, int from, int weapon)
 	else
 		create_sound(pos, SOUND_PLAYER_PAIN_SHORT);
 
+	emote_type = EMOTE_PAIN;
+	emote_stop = server_tick() + 500 * server_tickspeed() / 1000;
 
 	// spawn blood?
 	return true;
@@ -1446,7 +1451,14 @@ void player::snap(int snaping_client)
 	player->y = (int)pos.y;
 	player->vx = (int)vel.x;
 	player->vy = (int)vel.y;
-	player->emote = EMOTE_NORMAL;
+
+	if (emote_stop < server_tick())
+	{
+		emote_type = EMOTE_NORMAL;
+		emote_stop = -1;
+	}
+
+	player->emote = emote_type;
 
 	player->latency = latency_avg;
 	player->latency_flux = latency_max-latency_min;
@@ -1472,8 +1484,8 @@ void player::snap(int snaping_client)
 	if(length(vel) > 15.0f)
 		player->emote = EMOTE_HAPPY;
 	
-	if(damage_taken_tick+50 > server_tick())
-		player->emote = EMOTE_PAIN;
+	//if(damage_taken_tick+50 > server_tick())
+	//	player->emote = EMOTE_PAIN;
 	
 	if(player->emote == EMOTE_NORMAL)
 	{
@@ -1590,6 +1602,24 @@ void powerup::tick()
 				pplayer->active_weapon = WEAPON_NINJA;
 				respawntime = data->powerupinfo[type].respawntime;
 				create_sound(pos, SOUND_PICKUP_NINJA);
+
+				// loop through all players, setting their emotes
+				entity *ents[64];
+				const int types[] = {OBJTYPE_PLAYER};
+				int num = world.find_entities(vec2(0, 0), 1000000, ents, 64, types, 1);
+				for (int i = 0; i < num; i++)
+				{
+					player *p = (player *)ents[i];
+					if (p != pplayer)
+					{
+						p->emote_type = EMOTE_SURPRISE;
+						p->emote_stop = server_tick() + server_tickspeed();
+					}
+				}
+
+				pplayer->emote_type = EMOTE_ANGRY;
+				pplayer->emote_stop = server_tick() + 1200 * server_tickspeed() / 1000;
+
 				break;
 			}
 		default:
diff --git a/src/game/server/game_server.h b/src/game/server/game_server.h
index f084ae16..91727b06 100644
--- a/src/game/server/game_server.h
+++ b/src/game/server/game_server.h
@@ -218,6 +218,9 @@ public:
 	int attack_tick;
 	
 	int damage_taken;
+
+	int emote_type;
+	int emote_stop;
 	
 	// we need a defered position so we can handle the physics correctly
 	baselib::vec2 defered_pos;