mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-01-18 23:21:41 +00:00
- ensure that sfxinfo_t is always fully initialized, regardless how the setup is performed.
The recent pitch additions did not do this on all possible paths.
This commit is contained in:
parent
4deb7593b5
commit
a6842b6482
3 changed files with 30 additions and 93 deletions
|
@ -50,7 +50,6 @@ enum
|
|||
};
|
||||
static FRandom pr_soundpitch ("SoundPitch");
|
||||
SoundEngine* soundEngine;
|
||||
int sfx_empty = -1;
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
|
@ -713,10 +712,9 @@ sfxinfo_t *SoundEngine::LoadSound(sfxinfo_t *sfx)
|
|||
{
|
||||
unsigned int i;
|
||||
|
||||
// If the sound doesn't exist, replace it with the empty sound.
|
||||
if (sfx->lumpnum == -1)
|
||||
if (sfx->lumpnum == sfx_empty)
|
||||
{
|
||||
sfx->lumpnum = sfx_empty;
|
||||
return sfx;
|
||||
}
|
||||
|
||||
// See if there is another sound already initialized with this lump. If so,
|
||||
|
@ -1532,31 +1530,12 @@ int SoundEngine::AddSoundLump(const char* logicalname, int lump, int CurrentPitc
|
|||
S_sfx.Reserve(1);
|
||||
sfxinfo_t &newsfx = S_sfx.Last();
|
||||
|
||||
newsfx.data.Clear();
|
||||
newsfx.name = logicalname;
|
||||
newsfx.lumpnum = lump;
|
||||
newsfx.next = 0;
|
||||
newsfx.index = 0;
|
||||
newsfx.Volume = 1;
|
||||
newsfx.Attenuation = 1;
|
||||
newsfx.PitchMask = CurrentPitchMask;
|
||||
newsfx.DefPitch = 0.0;
|
||||
newsfx.DefPitchMax = 0.0;
|
||||
newsfx.NearLimit = nearlimit;
|
||||
newsfx.LimitRange = 256 * 256;
|
||||
newsfx.bRandomHeader = false;
|
||||
newsfx.bLoadRAW = false;
|
||||
newsfx.b16bit = false;
|
||||
newsfx.bUsed = false;
|
||||
newsfx.bSingular = false;
|
||||
newsfx.bTentative = false;
|
||||
newsfx.ResourceId = resid;
|
||||
newsfx.RawRate = 0;
|
||||
newsfx.link = sfxinfo_t::NO_LINK;
|
||||
newsfx.Rolloff.RolloffType = ROLLOFF_Doom;
|
||||
newsfx.Rolloff.MinDistance = 0;
|
||||
newsfx.Rolloff.MaxDistance = 0;
|
||||
newsfx.LoopStart = -1;
|
||||
|
||||
if (resid >= 0) ResIdMap[resid] = S_sfx.Size() - 1;
|
||||
return (int)S_sfx.Size()-1;
|
||||
|
|
|
@ -8,7 +8,12 @@ struct FRandomSoundList
|
|||
uint32_t Owner = 0;
|
||||
};
|
||||
|
||||
extern int sfx_empty;
|
||||
enum
|
||||
{
|
||||
sfx_empty = -1
|
||||
};
|
||||
|
||||
|
||||
|
||||
//
|
||||
// SoundFX struct.
|
||||
|
@ -17,71 +22,38 @@ struct sfxinfo_t
|
|||
{
|
||||
// Next field is for use by the system sound interface.
|
||||
// A non-null data means the sound has been loaded.
|
||||
SoundHandle data;
|
||||
SoundHandle data{};
|
||||
|
||||
FString name; // [RH] Sound name defined in SNDINFO
|
||||
int lumpnum; // lump number of sfx
|
||||
int lumpnum = sfx_empty; // lump number of sfx
|
||||
|
||||
unsigned int next, index; // [RH] For hashing
|
||||
float Volume;
|
||||
unsigned int next = -1, index = 0; // [RH] For hashing
|
||||
float Volume = 1.f;
|
||||
|
||||
int ResourceId; // Resource ID as implemented by Blood. Not used by Doom but added for completeness.
|
||||
uint8_t PitchMask;
|
||||
int16_t NearLimit; // 0 means unlimited
|
||||
float LimitRange; // Range for sound limiting (squared for faster computations)
|
||||
float DefPitch; // A defined pitch instead of a random one the sound plays at, similar to A_StartSound.
|
||||
float DefPitchMax; // Randomized range with stronger control over pitch itself.
|
||||
int ResourceId = -1; // Resource ID as implemented by Blood. Not used by Doom but added for completeness.
|
||||
float LimitRange = 256*256; // Range for sound limiting (squared for faster computations)
|
||||
float DefPitch = 0.f; // A defined pitch instead of a random one the sound plays at, similar to A_StartSound.
|
||||
float DefPitchMax = 0.f; // Randomized range with stronger control over pitch itself.
|
||||
|
||||
unsigned bRandomHeader:1;
|
||||
unsigned bLoadRAW:1;
|
||||
unsigned b16bit:1;
|
||||
unsigned bUsed:1;
|
||||
unsigned bSingular:1;
|
||||
int16_t NearLimit = 4; // 0 means unlimited.
|
||||
uint8_t PitchMask = 0;
|
||||
bool bRandomHeader = false;
|
||||
bool bLoadRAW = false;
|
||||
bool b16bit = false;
|
||||
bool bUsed = false;
|
||||
bool bSingular = false;
|
||||
bool bTentative = true;
|
||||
|
||||
unsigned bTentative:1;
|
||||
TArray<int> UserData;
|
||||
|
||||
int RawRate; // Sample rate to use when bLoadRAW is true
|
||||
int RawRate = 0; // Sample rate to use when bLoadRAW is true
|
||||
int LoopStart = -1; // -1 means no specific loop defined
|
||||
|
||||
int LoopStart; // -1 means no specific loop defined
|
||||
|
||||
unsigned int link;
|
||||
unsigned int link = NO_LINK;;
|
||||
enum { NO_LINK = 0xffffffff };
|
||||
|
||||
FRolloffInfo Rolloff;
|
||||
float Attenuation; // Multiplies the attenuation passed to S_Sound.
|
||||
|
||||
void MarkUsed(); // Marks this sound as used.
|
||||
|
||||
void Clear()
|
||||
{
|
||||
data.Clear();
|
||||
lumpnum = -1; // lump number of sfx
|
||||
next = -1;
|
||||
index = 0; // [RH] For hashing
|
||||
Volume = 1.f;
|
||||
ResourceId = -1;
|
||||
PitchMask = 0;
|
||||
NearLimit = 4; // 0 means unlimited
|
||||
LimitRange = 256*256;
|
||||
|
||||
bRandomHeader = false;
|
||||
bLoadRAW = false;
|
||||
b16bit= false;
|
||||
bUsed = false;
|
||||
bSingular = false;
|
||||
|
||||
bTentative = true;
|
||||
|
||||
RawRate = 0; // Sample rate to use when bLoadRAW is true
|
||||
|
||||
LoopStart = 0; // -1 means no specific loop defined
|
||||
|
||||
link = NO_LINK;
|
||||
|
||||
Rolloff = {};
|
||||
Attenuation = 1.f;
|
||||
}
|
||||
FRolloffInfo Rolloff{};
|
||||
float Attenuation = 1.f; // Multiplies the attenuation passed to S_Sound.
|
||||
};
|
||||
|
||||
// Rolloff types
|
||||
|
|
|
@ -766,7 +766,6 @@ void S_ParseSndInfo (bool redefine)
|
|||
|
||||
S_ShrinkPlayerSoundLists ();
|
||||
|
||||
sfx_empty = fileSystem.CheckNumForName ("dsempty", ns_sounds);
|
||||
S_CheckIntegrity();
|
||||
}
|
||||
|
||||
|
@ -1671,19 +1670,6 @@ int S_FindSkinnedSoundEx (AActor *actor, const char *name, const char *extendedn
|
|||
return S_FindSkinnedSound (actor, id);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// sfxinfo_t :: MarkUsed
|
||||
//
|
||||
// Marks this sound for precaching.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void sfxinfo_t::MarkUsed()
|
||||
{
|
||||
bUsed = true;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// S_MarkPlayerSounds
|
||||
|
|
Loading…
Reference in a new issue