about summary refs log tree commit diff
path: root/src/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/game')
-rw-r--r--src/game/client/game_client.cpp26
-rw-r--r--src/game/game_protocol.h5
-rw-r--r--src/game/server/game_server.cpp12
-rw-r--r--src/game/server/srv_common.h3
-rw-r--r--src/game/server/srv_ctf.cpp13
5 files changed, 40 insertions, 19 deletions
diff --git a/src/game/client/game_client.cpp b/src/game/client/game_client.cpp
index d4a0ced9..e1949611 100644
--- a/src/game/client/game_client.cpp
+++ b/src/game/client/game_client.cpp
@@ -24,6 +24,7 @@ enum
 	CHN_GUI=0,
 	CHN_MUSIC,
 	CHN_WORLD,
+	CHN_GLOBAL,
 };
 
 data_container *data = 0x0;
@@ -550,7 +551,8 @@ extern "C" void modc_init()
 	// setup sound channels
 	snd_set_channel(CHN_GUI, 1.0f, 0.0f);
 	snd_set_channel(CHN_MUSIC, 1.0f, 0.0f);
-	snd_set_channel(CHN_WORLD, 1.0f, 1.0f);
+	snd_set_channel(CHN_WORLD, 0.9f, 1.0f);
+	snd_set_channel(CHN_GLOBAL, 1.0f, 0.0f);
 
 	// load the data container
 	data = load_data_from_memory(internal_data);
@@ -718,22 +720,11 @@ static void process_events(int s)
 				temp_system.new_particle(p, v, 0.5f+0.5f*frandom(), 16.0f, 128.0f, 0.985f);
 			}
 		}
-		else if(item.type == EVENT_SOUND)
+		else if(item.type == EVENT_SOUND_WORLD)
 		{
 			ev_sound *ev = (ev_sound *)data;
-			vec2 p(ev->x, ev->y);
-			int soundid = ev->sound; //(ev->sound & SOUND_MASK);
-			//bool bstartloop = (ev->sound & SOUND_LOOPFLAG_STARTLOOP) != 0;
-			//bool bstoploop = (ev->sound & SOUND_LOOPFLAG_STOPLOOP) != 0;
-			//float vol, pan;
-			//sound_vol_pan(p, &vol, &pan);
-
-			if(soundid >= 0 && soundid < NUM_SOUNDS)
-			{
-				// TODO: we need to control the volume of the diffrent sounds
-				// 		depening on the category
-				snd_play_random(CHN_WORLD, soundid, 1.0f, p);
-			}
+			if(ev->sound >= 0 && ev->sound < NUM_SOUNDS)
+				snd_play_random(CHN_WORLD, ev->sound, 1.0f, vec2(ev->x, ev->y));
 		}
 	}
 }
@@ -2789,6 +2780,11 @@ extern "C" void modc_message(int msg)
 		client_datas[cid].emoticon = emoticon;
 		client_datas[cid].emoticon_start = client_tick();
 	}
+	else if(msg == MSG_SOUND_GLOBAL)
+	{
+		int soundid = msg_unpack_int();
+		snd_play_random(CHN_GLOBAL, soundid, 1.0f, vec2(0,0));
+	}
 }
 
 extern "C" void modc_connected()
diff --git a/src/game/game_protocol.h b/src/game/game_protocol.h
index e18fa746..a490fb08 100644
--- a/src/game/game_protocol.h
+++ b/src/game/game_protocol.h
@@ -30,7 +30,7 @@ enum
 	OBJTYPE_FLAG,
 	EVENT_EXPLOSION,
 	EVENT_DAMAGEINDICATION,
-	EVENT_SOUND,
+	EVENT_SOUND_WORLD,
 	EVENT_SMOKE,
 	EVENT_SPAWN,
 	EVENT_DEATH,
@@ -50,7 +50,8 @@ enum
 	MSG_STARTINFO, // client -> server
 	MSG_CHANGEINFO, // client -> server
 	MSG_READY_TO_ENTER, // server -> client
-    MSG_WEAPON_PICKUP
+    MSG_WEAPON_PICKUP,
+    MSG_SOUND_GLOBAL,
 };
 
 enum
diff --git a/src/game/server/game_server.cpp b/src/game/server/game_server.cpp
index 84ab162a..0b6a0250 100644
--- a/src/game/server/game_server.cpp
+++ b/src/game/server/game_server.cpp
@@ -1398,7 +1398,7 @@ void create_targetted_sound(vec2 pos, int sound, int target, int loopingflags)
 		return;
 
 	// create a sound
-	ev_sound *ev = (ev_sound *)events.create(EVENT_SOUND, sizeof(ev_sound), target);
+	ev_sound *ev = (ev_sound *)events.create(EVENT_SOUND_WORLD, sizeof(ev_sound), target);
 	if(ev)
 	{
 		ev->x = (int)pos.x;
@@ -1412,6 +1412,16 @@ void create_sound(vec2 pos, int sound, int loopingflags)
 	create_targetted_sound(pos, sound, -1, loopingflags);
 }
 
+void create_sound_global(int sound, int target)
+{
+	if (sound < 0)
+		return;
+
+	msg_pack_start(MSG_SOUND_GLOBAL, MSGFLAG_VITAL);
+	msg_pack_int(sound);
+	server_send_msg(-1);
+}
+
 // TODO: should be more general
 player* intersect_player(vec2 pos0, vec2 pos1, vec2& new_pos, entity* notthis)
 {
diff --git a/src/game/server/srv_common.h b/src/game/server/srv_common.h
index 74fb607c..70e52d5b 100644
--- a/src/game/server/srv_common.h
+++ b/src/game/server/srv_common.h
@@ -2,6 +2,9 @@
 #include "../game.h"
 #include "data.h"
 
+
+void create_sound_global(int sound, int target=-1);
+
 //
 class event_handler
 {
diff --git a/src/game/server/srv_ctf.cpp b/src/game/server/srv_ctf.cpp
index e941c804..81f1bb84 100644
--- a/src/game/server/srv_ctf.cpp
+++ b/src/game/server/srv_ctf.cpp
@@ -43,6 +43,7 @@ int gameobject_ctf::on_player_death(class player *victim, class player *killer,
 			had_flag |= 2;
 		if(f && f->carrying_player == victim)
 		{
+			create_sound_global(SOUND_CTF_DROP);
 			f->drop_tick = server_tick();
 			f->carrying_player = 0;
 			had_flag |= 1;
@@ -77,6 +78,9 @@ void gameobject_ctf::tick()
 					teamscore[fi^1]++;
 					for(int i = 0; i < 2; i++)
 						flags[i]->reset();
+					
+					dbg_msg("", "capture sound %d", SOUND_CTF_CAPTURE);
+					create_sound_global(SOUND_CTF_CAPTURE);
 				}
 			}			
 		}
@@ -91,21 +95,28 @@ void gameobject_ctf::tick()
 				{
 					// return the flag
 					if(!f->at_stand)
+					{
+						create_sound_global(SOUND_CTF_RETURN);
 						f->reset();
+					}
 				}
 				else
 				{
 					// take the flag
 					f->at_stand = 0;
 					f->carrying_player = players[i];
+					create_sound_global(SOUND_CTF_GRAB);
 					break;
 				}
 			}
 			
-			if(!f->carrying_player)
+			if(!f->carrying_player && !f->at_stand)
 			{
 				if(server_tick() > f->drop_tick + SERVER_TICK_SPEED*30)
+				{
+					create_sound_global(SOUND_CTF_RETURN);
 					f->reset();
+				}
 				else
 				{
 					f->vel.y += gravity;