about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2007-11-27 19:32:35 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2007-11-27 19:32:35 +0000
commit8fa8485a3a207565a610dac981cb2da2a6a6d040 (patch)
tree5ee8d57e86c4e7d5b17fc8772f79e719d1789c92
parent9a8c0809c78782a1bcd038fe29277c12dbe781b8 (diff)
downloadzcatch-8fa8485a3a207565a610dac981cb2da2a6a6d040.tar.gz
zcatch-8fa8485a3a207565a610dac981cb2da2a6a6d040.zip
fixed CTF sounds. fixed close teewars bug
-rw-r--r--datasrc/teewars.ds16
-rw-r--r--src/engine/client/client.c3
-rw-r--r--src/engine/client/gfx.c4
-rw-r--r--src/engine/client/snd.c3
-rw-r--r--src/engine/interface.h1
-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
10 files changed, 66 insertions, 20 deletions
diff --git a/datasrc/teewars.ds b/datasrc/teewars.ds
index f3534d00..9efd253f 100644
--- a/datasrc/teewars.ds
+++ b/datasrc/teewars.ds
@@ -179,6 +179,22 @@ sounds {
 	chat_client {
 		"data/audio/sfx_msg-client.wv"
 	}
+
+	ctf_drop {
+		"data/audio/sfx_ctf_drop.wv"
+	}
+
+	ctf_return {
+		"data/audio/sfx_ctf_rtn.wv"
+	}
+	
+	ctf_grab {
+		"data/audio/sfx_ctf_grab_pl.wv"
+	}
+
+	ctf_capture {
+		"data/audio/sfx_ctf_cap_pl.wv"
+	}
 }
 
 
diff --git a/src/engine/client/client.c b/src/engine/client/client.c
index 6606ecf6..dcac2234 100644
--- a/src/engine/client/client.c
+++ b/src/engine/client/client.c
@@ -989,6 +989,9 @@ static void client_run()
 		/* panic quit button */
 		if(inp_key_pressed(KEY_LCTRL) && inp_key_pressed(KEY_LSHIFT) && inp_key_pressed('Q'))
 			break;
+		
+		if(!gfx_window_open())
+			break;
 			
 		/* pump the network */
 		client_pump_network();
diff --git a/src/engine/client/gfx.c b/src/engine/client/gfx.c
index e89fd199..c85e2a91 100644
--- a/src/engine/client/gfx.c
+++ b/src/engine/client/gfx.c
@@ -261,6 +261,10 @@ int gfx_window_active()
 	return glfwGetWindowParam(GLFW_ACTIVE) == GL_TRUE ? 1 : 0;
 }
 
+int gfx_window_open()
+{
+	return glfwGetWindowParam(GLFW_OPENED) == GL_TRUE ? 1 : 0;
+}
 
 VIDEO_MODE fakemodes[] = {
 	{320,240,8,8,8}, {400,300,8,8,8}, {640,480,8,8,8},
diff --git a/src/engine/client/snd.c b/src/engine/client/snd.c
index ba8d03ef..f2b7f9a4 100644
--- a/src/engine/client/snd.c
+++ b/src/engine/client/snd.c
@@ -381,11 +381,12 @@ int snd_load_wv(const char *filename)
 			return -1;
 		}
 
+		/*
 		if(snd->rate != 44100)
 		{
 			dbg_msg("sound/wv", "file is %d Hz, not 44100 Hz. filename='%s'", snd->rate, filename);
 			return -1;
-		}
+		}*/
 		
 		if(bitspersample != 16)
 		{
diff --git a/src/engine/interface.h b/src/engine/interface.h
index f3f59029..9dd0446f 100644
--- a/src/engine/interface.h
+++ b/src/engine/interface.h
@@ -118,6 +118,7 @@ int gfx_get_video_modes(VIDEO_MODE *list, int maxcount);
 void gfx_set_vsync(int val);
 
 int gfx_window_active();
+int gfx_window_open();
 
 /* textures */
 /*
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;