- Added PrecacheSounds mapinfo option. This takes a list of sounds to preload when the level is

loaded.

SVN r3837 (trunk)
This commit is contained in:
Randy Heit 2012-08-22 22:36:06 +00:00
parent 8a021c4b4b
commit 9d82c7fa0e
4 changed files with 35 additions and 7 deletions

View file

@ -2209,15 +2209,15 @@ void D_DoomMain (void)
// [RH] Load sound environments
S_ParseReverbDef ();
// [RH] Parse any SNDINFO lumps
Printf ("S_InitData: Load sound definitions.\n");
S_InitData ();
// [RH] Parse through all loaded mapinfo lumps
Printf ("G_ParseMapInfo: Load map definitions.\n");
G_ParseMapInfo (iwad_info->MapInfo);
ReadStatistics();
// [RH] Parse any SNDINFO lumps
Printf ("S_InitData: Load sound definitions.\n");
S_InitData ();
Printf ("Texman.Init: Init texture manager.\n");
TexMan.Init();
C_InitConback();

View file

@ -36,8 +36,8 @@
#include "doomtype.h"
#include "doomdef.h"
//#include "autosegs.h"
#include "sc_man.h"
#include "s_sound.h"
struct level_info_t;
struct cluster_info_t;
@ -327,6 +327,8 @@ struct level_info_t
TArray<FSpecialAction> specialactions;
TArray<FSoundID> PrecacheSounds;
level_info_t()
{
Reset();

View file

@ -269,6 +269,7 @@ void level_info_t::Reset()
teamdamage = 0.f;
specialactions.Clear();
DefaultEnvironment = 0;
PrecacheSounds.Clear();
}
@ -1029,7 +1030,7 @@ DEFINE_MAP_OPTION(specialaction, true)
sa->Action = P_FindLineSpecial(parse.sc.String, &min_arg, &max_arg);
if (sa->Action == 0 || min_arg < 0)
{
parse.sc.ScriptError("Unknown specialaction '%s'");
parse.sc.ScriptError("Unknown specialaction '%s'", parse.sc.String);
}
int j = 0;
while (j < 5 && parse.sc.CheckString(","))
@ -1040,6 +1041,25 @@ DEFINE_MAP_OPTION(specialaction, true)
if (parse.format_type == parse.FMT_Old) parse.sc.SetCMode(false);
}
DEFINE_MAP_OPTION(PrecacheSounds, true)
{
parse.ParseAssign();
do
{
parse.sc.MustGetString();
FSoundID snd = parse.sc.String;
if (snd == 0)
{
parse.sc.ScriptMessage("Unknown sound \"%s\"", parse.sc.String);
}
else
{
info->PrecacheSounds.Push(snd);
}
} while (parse.sc.CheckString(","));
}
DEFINE_MAP_OPTION(redirect, true)
{
parse.ParseAssign();

View file

@ -477,7 +477,8 @@ void S_PrecacheLevel ()
AActor *actor;
TThinkerIterator<AActor> iterator;
while ( (actor = iterator.Next ()) != NULL )
// Precache all sounds known to be used by the currently spawned actors.
while ( (actor = iterator.Next()) != NULL )
{
S_sfx[actor->SeeSound].bUsed = true;
S_sfx[actor->AttackSound].bUsed = true;
@ -486,6 +487,11 @@ void S_PrecacheLevel ()
S_sfx[actor->ActiveSound].bUsed = true;
S_sfx[actor->UseSound].bUsed = true;
}
// Precache all extra sounds requested by this map.
for (i = 0; i < level.info->PrecacheSounds.Size(); ++i)
{
S_sfx[level.info->PrecacheSounds[i]].bUsed = true;
}
for (i = 1; i < S_sfx.Size(); ++i)
{