mirror of
https://github.com/ZDoom/Raze.git
synced 2025-01-18 14:41:55 +00:00
- fixed some issues with Exhumed's ambient and creepy sounds.
Both now refer to a proper target for bookkeeping.
This commit is contained in:
parent
69aba5f3ea
commit
1a66878205
1 changed files with 31 additions and 12 deletions
|
@ -130,6 +130,7 @@ bool looped[kMaxSounds];
|
|||
short StaticSound[kMaxSounds];
|
||||
int fakesources[] = { 0, 1, 2, 3 };
|
||||
int swirlysources[4]= { 0, 1, 2, 3 };
|
||||
FVector3 amb, creepy;
|
||||
|
||||
int nLocalChan = 0;
|
||||
|
||||
|
@ -425,7 +426,11 @@ void EXSoundEngine::CalcPosVel(int type, const void* source, const float pt[3],
|
|||
}
|
||||
auto fcampos = GetSoundPos(&campos);
|
||||
|
||||
if (type == SOURCE_Unattached || type == SOURCE_Ambient)
|
||||
if (type == SOURCE_Ambient)
|
||||
{
|
||||
*pos = *(FVector3*)source;
|
||||
}
|
||||
else if (type == SOURCE_Unattached)
|
||||
{
|
||||
pos->X = pt[0];
|
||||
pos->Y = pt[1];
|
||||
|
@ -602,31 +607,27 @@ void CheckAmbience(short nSector)
|
|||
{
|
||||
short nSector2 = SectSoundSect[nSector];
|
||||
walltype* pWall = &wall[sector[nSector2].wallptr];
|
||||
if (!soundEngine->IsSourcePlayingSomething(SOURCE_Ambient, nullptr, -1))
|
||||
if (!soundEngine->IsSourcePlayingSomething(SOURCE_Ambient, &amb, -1))
|
||||
{
|
||||
vec3_t v = { pWall->x, pWall->y, sector[nSector2].floorz };
|
||||
FVector3 vv = GetSoundPos(&v);
|
||||
soundEngine->StartSound(SOURCE_Ambient, nullptr, &vv, CHAN_BODY, CHANF_NONE, SectSound[nSector], 1.f, ATTN_NORM);
|
||||
amb = GetSoundPos(&v);
|
||||
soundEngine->StartSound(SOURCE_Ambient, &amb, nullptr, CHAN_BODY, CHANF_NONE, SectSound[nSector] + 1, 1.f, ATTN_NORM);
|
||||
return;
|
||||
}
|
||||
soundEngine->EnumerateChannels([=](FSoundChan* chan)
|
||||
{
|
||||
if (chan->SourceType == SOURCE_Ambient)
|
||||
{
|
||||
FVector3 vv;
|
||||
if (nSector == nSector2)
|
||||
{
|
||||
spritetype* pSprite = &sprite[PlayerList[0].nSprite];
|
||||
vv = GetSoundPos(&pSprite->pos);
|
||||
amb = GetSoundPos(&pSprite->pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
vec3_t v = { pWall->x, pWall->y, sector[nSector2].floorz };
|
||||
vv = GetSoundPos(&v);
|
||||
amb = GetSoundPos(&v);
|
||||
}
|
||||
chan->Point[0] = vv.X;
|
||||
chan->Point[1] = vv.Y;
|
||||
chan->Point[2] = vv.Z;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -635,7 +636,7 @@ void CheckAmbience(short nSector)
|
|||
}
|
||||
else
|
||||
{
|
||||
soundEngine->StopSound(SOURCE_Ambient, nullptr, -1);
|
||||
soundEngine->StopSound(SOURCE_Ambient, &amb, -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -666,7 +667,25 @@ void UpdateCreepySounds()
|
|||
if (totalmoves & 2)
|
||||
vax = -vax;
|
||||
|
||||
PlayFXAtXYZ(vsi, pSprite->x + vdx, pSprite->y + vax, pSprite->z, pSprite->sectnum);
|
||||
vec3_t sp = { pSprite->x + vdx, pSprite->y + vax, pSprite->z };
|
||||
creepy = GetSoundPos(&sp);
|
||||
|
||||
if ((vsi & 0x1ff) >= kMaxSounds || !soundEngine->isValidSoundId((vsi & 0x1ff) + 1))
|
||||
{
|
||||
initprintf("PlayFX2: Invalid creepy sound nSound == %i, nSprite == %i\n", vsi);
|
||||
return;
|
||||
}
|
||||
|
||||
int nVolume = 255;
|
||||
short v10 = (vsi & 0xe00) >> 9;
|
||||
vsi &= 0x1ff;
|
||||
|
||||
int nPitch = 0;
|
||||
if (v10) nPitch = -(totalmoves & ((1 << v10) - 1)) * 16;
|
||||
|
||||
GetSpriteSoundPitch(&nVolume, &nPitch);
|
||||
soundEngine->StopSound(SOURCE_Ambient, &creepy, CHAN_BODY);
|
||||
soundEngine->StartSound(SOURCE_Ambient, &creepy, nullptr, CHAN_BODY, CHANF_NONE, vsi + 1, nVolume / 255.f, ATTN_NONE, nullptr, (11025 + nPitch) / 11025.f);
|
||||
}
|
||||
}
|
||||
nCreepyTimer = kCreepyCount;
|
||||
|
|
Loading…
Reference in a new issue