- removed dependency on global time in sound sequence code.

This can better use a countdown timer that doesn't depend on external behavior.
This commit is contained in:
Christoph Oelckers 2019-01-07 17:22:38 +01:00
parent ed3bb2fd09
commit 36f0ab2ea1
2 changed files with 11 additions and 12 deletions

View File

@ -34,6 +34,7 @@
#include "po_man.h" #include "po_man.h"
#include "gi.h" #include "gi.h"
#include "c_dispatch.h" #include "c_dispatch.h"
#include "g_level.h" #include "g_level.h"
#include "serializer.h" #include "serializer.h"
#include "d_player.h" #include "d_player.h"
@ -51,8 +52,6 @@
#define HexenEnvSeq(a) ((a) | 0x80) #define HexenEnvSeq(a) ((a) | 0x80)
#define HexenLastSeq (0xff) #define HexenLastSeq (0xff)
#define TIME_REFERENCE level.time
// TYPES ------------------------------------------------------------------- // TYPES -------------------------------------------------------------------
typedef enum typedef enum
@ -326,7 +325,7 @@ void DSeqNode::Serialize(FSerializer &arc)
if (arc.isWriting()) if (arc.isWriting())
{ {
seqOffset = (int)SN_GetSequenceOffset(m_Sequence, m_SequencePtr); seqOffset = (int)SN_GetSequenceOffset(m_Sequence, m_SequencePtr);
delayTics = m_DelayUntilTic; delayTics = m_DelayTics;
volume = m_Volume; volume = m_Volume;
atten = m_Atten; atten = m_Atten;
id = m_CurrentSoundID; id = m_CurrentSoundID;
@ -373,7 +372,7 @@ void DSeqNode::Serialize(FSerializer &arc)
// Can I just Destroy() here instead of erroring out? // Can I just Destroy() here instead of erroring out?
} }
ChangeData (seqOffset, delayTics - TIME_REFERENCE, volume, id); ChangeData (seqOffset, delayTics, volume, id);
m_SequenceChoices.Resize(numchoices); m_SequenceChoices.Resize(numchoices);
if (numchoices > 0 && arc.BeginArray("choices")) if (numchoices > 0 && arc.BeginArray("choices"))
@ -828,7 +827,7 @@ void DSeqNode::ActivateSequence (int sequence)
{ {
m_SequencePtr = Sequences[sequence]->Script; m_SequencePtr = Sequences[sequence]->Script;
m_Sequence = sequence; m_Sequence = sequence;
m_DelayUntilTic = 0; m_DelayTics = 0;
m_StopSound = Sequences[sequence]->StopSound; m_StopSound = Sequences[sequence]->StopSound;
m_CurrentSoundID = 0; m_CurrentSoundID = 0;
m_Volume = 1; // Start at max volume... m_Volume = 1; // Start at max volume...
@ -1192,9 +1191,9 @@ DEFINE_ACTION_FUNCTION(_Sector, IsMakingLoopingSound)
void DSeqNode::Tick () void DSeqNode::Tick ()
{ {
if (TIME_REFERENCE < m_DelayUntilTic) if (m_DelayTics > 0)
{ {
return; if (--m_DelayTics > 0) return;
} }
for (;;) for (;;)
{ {
@ -1239,7 +1238,7 @@ void DSeqNode::Tick ()
// command will repeat until the sequence is stopped. // command will repeat until the sequence is stopped.
m_CurrentSoundID = FSoundID(GetData(m_SequencePtr[0])); m_CurrentSoundID = FSoundID(GetData(m_SequencePtr[0]));
MakeSound (0, m_CurrentSoundID); MakeSound (0, m_CurrentSoundID);
m_DelayUntilTic = TIME_REFERENCE + m_SequencePtr[1]; m_DelayTics = m_SequencePtr[1];
return; return;
case SS_CMD_RANDOMSEQUENCE: case SS_CMD_RANDOMSEQUENCE:
@ -1274,13 +1273,13 @@ void DSeqNode::Tick ()
break; break;
case SS_CMD_DELAY: case SS_CMD_DELAY:
m_DelayUntilTic = TIME_REFERENCE + GetData(*m_SequencePtr); m_DelayTics = GetData(*m_SequencePtr);
m_SequencePtr++; m_SequencePtr++;
m_CurrentSoundID = 0; m_CurrentSoundID = 0;
return; return;
case SS_CMD_DELAYRAND: case SS_CMD_DELAYRAND:
m_DelayUntilTic = TIME_REFERENCE + GetData(m_SequencePtr[0]) + pr_sndseq(m_SequencePtr[1]); m_DelayTics = GetData(m_SequencePtr[0]) + pr_sndseq(m_SequencePtr[1]);
m_SequencePtr += 2; m_SequencePtr += 2;
m_CurrentSoundID = 0; m_CurrentSoundID = 0;
return; return;
@ -1493,7 +1492,7 @@ void SN_ChangeNodeData (int nodeNum, int seqOffset, int delayTics, float volume,
void DSeqNode::ChangeData (int seqOffset, int delayTics, float volume, FSoundID currentSoundID) void DSeqNode::ChangeData (int seqOffset, int delayTics, float volume, FSoundID currentSoundID)
{ {
m_DelayUntilTic = TIME_REFERENCE + delayTics; m_DelayTics = delayTics;
m_Volume = volume; m_Volume = volume;
m_SequencePtr += seqOffset; m_SequencePtr += seqOffset;
m_CurrentSoundID = currentSoundID; m_CurrentSoundID = currentSoundID;

View File

@ -49,7 +49,7 @@ protected:
FSoundID m_CurrentSoundID; FSoundID m_CurrentSoundID;
int m_StopSound; int m_StopSound;
int m_DelayUntilTic; int m_DelayTics;
float m_Volume; float m_Volume;
float m_Atten; float m_Atten;
int m_ModeNum; int m_ModeNum;