diff options
Diffstat (limited to 'src/game')
| -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 |
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; |