From 73fb300538db7974596cafdfa8b9bda3fce11213 Mon Sep 17 00:00:00 2001 From: greenmarine Date: Mon, 4 May 2009 17:56:43 +0000 Subject: [PATCH] Move announcer sounds for remaining map time to CSQC. Fixed resetting the "already played sound"-markers after ready-restart. Client can now define (see audio settings menu) whether he wants: - no announcer played - 1minute announcer - 5minute announcer - both git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6662 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 1 + data/qcsrc/client/Defs.qc | 4 ++ data/qcsrc/client/Main.qc | 1 + data/qcsrc/client/View.qc | 1 + data/qcsrc/client/miscfunctions.qc | 43 ++++++++++++++++++- .../qcsrc/menu/nexuiz/dialog_settings_audio.c | 8 ++++ data/qcsrc/server/g_world.qc | 8 ---- data/qcsrc/server/miscfunctions.qc | 1 - 8 files changed, 57 insertions(+), 10 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index 57eceaaf4..66cc3df63 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -790,6 +790,7 @@ cl_sound_ric3 weapons/ric3.wav cl_sound_r_exp3 "" sv_sound_land "" sv_sound_watersplash "" +seta cl_sound_maptime_warning "1" "play announcer sound telling you the remaining maptime - 0: do not play at all, 1: play at one minute, 2: play at five minutes, 3: play both" seta cl_hitsound 1 diff --git a/data/qcsrc/client/Defs.qc b/data/qcsrc/client/Defs.qc index e1e415a1c..e30855e4f 100644 --- a/data/qcsrc/client/Defs.qc +++ b/data/qcsrc/client/Defs.qc @@ -209,6 +209,10 @@ float spectatee_status; // short mapname string shortmapname; +//remaining maptime announcer sounds, true when sound was already played +float announcer_1min; +float announcer_5min; + // database for misc stuff float tempdb; vector hook_shotorigin; diff --git a/data/qcsrc/client/Main.qc b/data/qcsrc/client/Main.qc index e93472a96..ec1abe7b0 100644 --- a/data/qcsrc/client/Main.qc +++ b/data/qcsrc/client/Main.qc @@ -147,6 +147,7 @@ void CSQC_Init(void) GibSplash_Precache(); Casings_Precache(); DamageInfo_Precache(); + Announcer_Precache(); get_mi_min_max_texcoords(1); // try the CLEVER way first minimapname = strcat("gfx/", mi_shortname, "_radar.tga"); diff --git a/data/qcsrc/client/View.qc b/data/qcsrc/client/View.qc index 12a0c9937..1f193c43b 100644 --- a/data/qcsrc/client/View.qc +++ b/data/qcsrc/client/View.qc @@ -316,6 +316,7 @@ void CSQC_UpdateView(float w, float h) PostInit(); CheckForGamestartChange(); + maptimeAnnouncer(); fov = cvar("fov"); if(button_zoom || fov <= 59.5) diff --git a/data/qcsrc/client/miscfunctions.qc b/data/qcsrc/client/miscfunctions.qc index da5df24ca..55f48a071 100644 --- a/data/qcsrc/client/miscfunctions.qc +++ b/data/qcsrc/client/miscfunctions.qc @@ -11,7 +11,10 @@ void restartAnnouncer_Think() { if (!spectatee_status) //do cprint only for players centerprint("^1Begin!"); - sound(self, CHAN_VOICE, "announcer/robotic/begin.wav", VOL_BASEVOICE, ATTN_NONE); + sound(self, CHAN_VOICE, "announcer/robotic/begin.wav", VOL_BASEVOICE, ATTN_NONE); + //reset maptime announcers now as well + announcer_5min = announcer_1min = FALSE; + remove(self); return; } @@ -25,6 +28,44 @@ void restartAnnouncer_Think() { self.nextthink = getstatf(STAT_GAMESTARTTIME) - (countdown - 1); } +} + +/** + * Plays the 1minute or 5 minutes (of maptime) remaining sound, if client wants it + */ +void maptimeAnnouncer() { + float timelimit; + timelimit = getstatf(STAT_TIMELIMIT); + float timeleft; + timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time); + + //5 minute check + if (cvar("cl_sound_maptime_warning") >= 2) { + //make sure that after connect (and e.g. 4 minutes left) we will not get a wrong sound + if (!announcer_5min && timelimit > 0 && timeleft < 300 && timeleft > 299) { + announcer_5min = TRUE; + //dprint("i will play the sound, I promise!\n"); + sound(self, CHAN_VOICE, "announcer/robotic/5minutesremain.wav", VOL_BASEVOICE, ATTN_NONE); + } + + } + + //1 minute check + if (cvar("cl_sound_maptime_warning") == 1 || cvar("cl_sound_maptime_warning") == 3) { + if (!announcer_1min && timelimit > 0 && timeleft < 60) { + announcer_1min = TRUE; + sound(self, CHAN_VOICE, "announcer/robotic/1minuteremains.wav", VOL_BASEVOICE, ATTN_NONE); + } + } +} + +/** + * Add all future announcer sounds precaches here. + * TODO: make all announcer sound() calls client-side in the end, to allow queues etc. + */ +void Announcer_Precache () { + precache_sound ("announcer/robotic/1minuteremains.wav"); + precache_sound ("announcer/robotic/5minutesremain.wav"); } void AuditLists() diff --git a/data/qcsrc/menu/nexuiz/dialog_settings_audio.c b/data/qcsrc/menu/nexuiz/dialog_settings_audio.c index ab67ea2a6..2d288bc75 100644 --- a/data/qcsrc/menu/nexuiz/dialog_settings_audio.c +++ b/data/qcsrc/menu/nexuiz/dialog_settings_audio.c @@ -156,6 +156,14 @@ void fillNexuizAudioSettingsTab(entity me) me.TD(me, 1, 3, e = makeNexuizTextLabel(0.1, "Frequency:")); me.TD(me, 1, 2, sl); me.TR(me); + me.TR(me); + me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Time warning:")); + me.TD(me, 1, 2, e = makeNexuizTextSlider("cl_sound_maptime_warning")); + e.addValue(e, "None", "0"); + e.addValue(e, "1 minute", "1"); + e.addValue(e, "5 minutes", "2"); + e.addValue(e, "Both", "3"); + e.configureNexuizTextSliderValues(e); me.TR(me); me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "cl_hitsound", "Hit indicator")); diff --git a/data/qcsrc/server/g_world.qc b/data/qcsrc/server/g_world.qc index 30ef75a17..53d5049a1 100644 --- a/data/qcsrc/server/g_world.qc +++ b/data/qcsrc/server/g_world.qc @@ -1368,8 +1368,6 @@ void CheckRules_Player() // (div0: and that in CheckRules_World please) }; -float checkrules_oneminutewarning; - float checkrules_equality; float checkrules_suddendeathwarning; float checkrules_suddendeathend; @@ -1901,12 +1899,6 @@ void CheckRules_World() return; } - if (!checkrules_oneminutewarning && timelimit > 0 && time > timelimit - 60) - { - checkrules_oneminutewarning = TRUE; - play2all("announcer/robotic/1minuteremains.wav"); - } - checkrules_status = WinningCondition_RanOutOfSpawns(); if(checkrules_status == WINNING_YES) { diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 6a2d6307c..a22fc8a10 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -1437,7 +1437,6 @@ void precache() precache_sound ("announcer/robotic/begin.wav"); precache_sound ("announcer/robotic/timeoutcalled.wav"); precache_sound ("announcer/robotic/1fragleft.wav"); - precache_sound ("announcer/robotic/1minuteremains.wav"); precache_sound ("announcer/robotic/2fragsleft.wav"); precache_sound ("announcer/robotic/3fragsleft.wav"); if (g_minstagib) -- 2.39.2