diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-11-27 19:32:35 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-11-27 19:32:35 +0000 |
| commit | 8fa8485a3a207565a610dac981cb2da2a6a6d040 (patch) | |
| tree | 5ee8d57e86c4e7d5b17fc8772f79e719d1789c92 | |
| parent | 9a8c0809c78782a1bcd038fe29277c12dbe781b8 (diff) | |
| download | zcatch-8fa8485a3a207565a610dac981cb2da2a6a6d040.tar.gz zcatch-8fa8485a3a207565a610dac981cb2da2a6a6d040.zip | |
fixed CTF sounds. fixed close teewars bug
| -rw-r--r-- | datasrc/teewars.ds | 16 | ||||
| -rw-r--r-- | src/engine/client/client.c | 3 | ||||
| -rw-r--r-- | src/engine/client/gfx.c | 4 | ||||
| -rw-r--r-- | src/engine/client/snd.c | 3 | ||||
| -rw-r--r-- | src/engine/interface.h | 1 | ||||
| -rw-r--r-- | src/game/client/game_client.cpp | 26 | ||||
| -rw-r--r-- | src/game/game_protocol.h | 5 | ||||
| -rw-r--r-- | src/game/server/game_server.cpp | 12 | ||||
| -rw-r--r-- | src/game/server/srv_common.h | 3 | ||||
| -rw-r--r-- | src/game/server/srv_ctf.cpp | 13 |
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; |