- Removed xlat_parser.h from the repository. Lemon was always being run on

xlat_parser.y because both files had the same time stamp after an update,
  and Lemon only rewrites the header file if it's changed.
- Added $volume SNDINFO command. This is multiplied with the volume the sound
  is played at to arrive at the final volume (before distance attenuation).
- Added the CHAN_AREA flag to disable 3D panning within the min distance of a
  sound. Sector sound sequences (except doors) use this flag.
- Added the CHAN_LOOP flag to replace the S_Looped* sound functions.
- Restored the sound limiting.


SVN r849 (trunk)
This commit is contained in:
Randy Heit 2008-03-25 04:42:26 +00:00
parent 3a80dac348
commit aef34f9aa5
24 changed files with 593 additions and 513 deletions

View file

@ -1,3 +1,14 @@
March 24, 2008
- Removed xlat_parser.h from the repository. Lemon was always being run on
xlat_parser.y because both files had the same time stamp after an update,
and Lemon only rewrites the header file if it's changed.
- Added $volume SNDINFO command. This is multiplied with the volume the sound
is played at to arrive at the final volume (before distance attenuation).
- Added the CHAN_AREA flag to disable 3D panning within the min distance of a
sound. Sector sound sequences (except doors) use this flag.
- Added the CHAN_LOOP flag to replace the S_Looped* sound functions.
- Restored the sound limiting.
March 24, 2008 (Changes by Graf Zahl) March 24, 2008 (Changes by Graf Zahl)
- Added Thomas's submissions for decal assignment to puffs and NOINFIGHTING flag. - Added Thomas's submissions for decal assignment to puffs and NOINFIGHTING flag.
- Reverted changes of r715 in v_collection.cpp because they broke loading - Reverted changes of r715 in v_collection.cpp because they broke loading
@ -469,7 +480,7 @@ February 26, 2008
- More write barriers and pointer declarations. Here are rules I've come up - More write barriers and pointer declarations. Here are rules I've come up
with so far for when write barriers can be ommitted: with so far for when write barriers can be ommitted:
* Initializing pointers for a newly created object: A new object can never * Initializing pointers for a newly created object: A new object can never
black, so none of its pointers that get set by the constructor (or code be black, so none of its pointers that get set by the constructor (or code
just following its creation) need to be behind write barriers. just following its creation) need to be behind write barriers.
* Creating a new thinker and storing it in a pointer: The thinker * Creating a new thinker and storing it in a pointer: The thinker
constructor already puts it behind a write barrier when it links it into constructor already puts it behind a write barrier when it links it into

View file

@ -2538,7 +2538,7 @@ void A_SkullRodStorm (AActor *actor)
P_CheckMissileSpawn (mo); P_CheckMissileSpawn (mo);
if (actor->special1 != -1 && !S_IsActorPlayingSomething (actor, CHAN_BODY, -1)) if (actor->special1 != -1 && !S_IsActorPlayingSomething (actor, CHAN_BODY, -1))
{ {
S_LoopedSoundID (actor, CHAN_BODY, actor->special1, 1, ATTN_NORM); S_SoundID (actor, CHAN_BODY|CHAN_LOOP, actor->special1, 1, ATTN_NORM);
} }
} }
@ -2912,7 +2912,7 @@ void A_FirePhoenixPL2 (AActor *actor)
mo->momz = FixedMul (mo->Speed, slope); mo->momz = FixedMul (mo->Speed, slope);
if (!player->refire || !S_IsActorPlayingSomething (pmo, CHAN_WEAPON, -1)) if (!player->refire || !S_IsActorPlayingSomething (pmo, CHAN_WEAPON, -1))
{ {
S_LoopedSoundID (pmo, CHAN_WEAPON, soundid, 1, ATTN_NORM); S_SoundID (pmo, CHAN_WEAPON|CHAN_LOOP, soundid, 1, ATTN_NORM);
} }
P_CheckMissileSpawn (mo); P_CheckMissileSpawn (mo);
} }

View file

@ -708,7 +708,7 @@ void A_SerpentFXSound (AActor *actor)
{ {
if (!S_IsActorPlayingSomething (actor, CHAN_BODY, -1)) if (!S_IsActorPlayingSomething (actor, CHAN_BODY, -1))
{ {
S_LoopedSound (actor, CHAN_BODY, "SerpentFXContinuous", 1, ATTN_NORM); S_Sound (actor, CHAN_BODY|CHAN_LOOP, "SerpentFXContinuous", 1, ATTN_NORM);
} }
} }

View file

@ -246,7 +246,7 @@ void A_InquisitorJump (AActor *self)
if (self->target == NULL) if (self->target == NULL)
return; return;
S_LoopedSound (self, CHAN_ITEM, "inquisitor/jump", 1, ATTN_NORM); S_Sound (self, CHAN_ITEM|CHAN_LOOP, "inquisitor/jump", 1, ATTN_NORM);
self->z += 64*FRACUNIT; self->z += 64*FRACUNIT;
A_FaceTarget (self); A_FaceTarget (self);
an = self->angle >> ANGLETOFINESHIFT; an = self->angle >> ANGLETOFINESHIFT;
@ -280,7 +280,7 @@ void A_InquisitorCheckLand (AActor *self)
} }
if (!S_IsActorPlayingSomething (self, CHAN_ITEM, -1)) if (!S_IsActorPlayingSomething (self, CHAN_ITEM, -1))
{ {
S_LoopedSound (self, CHAN_ITEM, "inquisitor/jump", 1, ATTN_NORM); S_Sound (self, CHAN_ITEM|CHAN_LOOP, "inquisitor/jump", 1, ATTN_NORM);
} }
} }

View file

@ -809,7 +809,7 @@ void A_LoopActiveSound (AActor *self)
{ {
if (self->ActiveSound != 0 && !S_IsActorPlayingSomething (self, CHAN_VOICE, -1)) if (self->ActiveSound != 0 && !S_IsActorPlayingSomething (self, CHAN_VOICE, -1))
{ {
S_LoopedSoundID (self, CHAN_VOICE, self->ActiveSound, 1, ATTN_NORM); S_SoundID (self, CHAN_VOICE|CHAN_LOOP, self->ActiveSound, 1, ATTN_NORM);
} }
} }

View file

@ -4182,7 +4182,7 @@ int DLevelScript::RunScript ()
{ {
if (activationline) if (activationline)
{ {
SN_StartSequence (activationline->frontsector, lookup, 0); SN_StartSequence (activationline->frontsector, lookup, 0, true);
} }
} }
sp--; sp--;

View file

@ -64,16 +64,16 @@ void DCeiling::PlayCeilingSound ()
{ {
if (m_Sector->seqType >= 0) if (m_Sector->seqType >= 0)
{ {
SN_StartSequence (m_Sector, m_Sector->seqType, SEQ_PLATFORM, 0); SN_StartSequence (m_Sector, m_Sector->seqType, SEQ_PLATFORM, 0, false);
} }
else else
{ {
if (m_Silent == 2) if (m_Silent == 2)
SN_StartSequence (m_Sector, "Silence", 0); SN_StartSequence (m_Sector, "Silence", 0, false);
else if (m_Silent == 1) else if (m_Silent == 1)
SN_StartSequence (m_Sector, "CeilingSemiSilent", 0); SN_StartSequence (m_Sector, "CeilingSemiSilent", 0, false);
else else
SN_StartSequence (m_Sector, "CeilingNormal", 0); SN_StartSequence (m_Sector, "CeilingNormal", 0, false);
} }
} }

View file

@ -236,7 +236,7 @@ void DDoor::DoorSound (bool raise) const
if (m_Sector->seqType >= 0) if (m_Sector->seqType >= 0)
{ {
SN_StartSequence (m_Sector, m_Sector->seqType, SEQ_DOOR, choice); SN_StartSequence (m_Sector, m_Sector->seqType, SEQ_DOOR, choice, true);
} }
else else
{ {
@ -297,7 +297,7 @@ void DDoor::DoorSound (bool raise) const
} }
break; break;
} }
SN_StartSequence (m_Sector, snd, choice); SN_StartSequence (m_Sector, snd, choice, true);
} }
} }
@ -564,7 +564,7 @@ bool DAnimatedDoor::StartClosing ()
m_Line2->flags |= ML_BLOCKING; m_Line2->flags |= ML_BLOCKING;
if (ani.CloseSound != NULL) if (ani.CloseSound != NULL)
{ {
SN_StartSequence (m_Sector, ani.CloseSound, 1); SN_StartSequence (m_Sector, ani.CloseSound, 1, true);
} }
m_Status = Closing; m_Status = Closing;
@ -742,7 +742,7 @@ DAnimatedDoor::DAnimatedDoor (sector_t *sec, line_t *line, int speed, int delay)
MoveCeiling (2048*FRACUNIT, topdist, 1); MoveCeiling (2048*FRACUNIT, topdist, 1);
if (DoorAnimations[m_WhichDoorIndex].OpenSound != NULL) if (DoorAnimations[m_WhichDoorIndex].OpenSound != NULL)
{ {
SN_StartSequence (m_Sector, DoorAnimations[m_WhichDoorIndex].OpenSound, 1); SN_StartSequence (m_Sector, DoorAnimations[m_WhichDoorIndex].OpenSound, 1, true);
} }
} }

View file

@ -298,11 +298,11 @@ static void StartFloorSound (sector_t *sec)
{ {
if (sec->seqType >= 0) if (sec->seqType >= 0)
{ {
SN_StartSequence (sec, sec->seqType, SEQ_PLATFORM, 0); SN_StartSequence (sec, sec->seqType, SEQ_PLATFORM, 0, false);
} }
else else
{ {
SN_StartSequence (sec, "Floor", 0); SN_StartSequence (sec, "Floor", 0, false);
} }
} }

View file

@ -169,9 +169,9 @@ DPillar::DPillar (sector_t *sector, EPillar type, fixed_t speed,
} }
if (sector->seqType >= 0) if (sector->seqType >= 0)
SN_StartSequence (sector, sector->seqType, SEQ_PLATFORM, 0); SN_StartSequence (sector, sector->seqType, SEQ_PLATFORM, 0, false);
else else
SN_StartSequence (sector, "Floor", 0); SN_StartSequence (sector, "Floor", 0, false);
} }
bool EV_DoPillar (DPillar::EPillar type, int tag, fixed_t speed, fixed_t height, bool EV_DoPillar (DPillar::EPillar type, int tag, fixed_t speed, fixed_t height,

View file

@ -58,9 +58,9 @@ void DPlat::Serialize (FArchive &arc)
void DPlat::PlayPlatSound (const char *sound) void DPlat::PlayPlatSound (const char *sound)
{ {
if (m_Sector->seqType >= 0) if (m_Sector->seqType >= 0)
SN_StartSequence (m_Sector, m_Sector->seqType, SEQ_PLATFORM, 0); SN_StartSequence (m_Sector, m_Sector->seqType, SEQ_PLATFORM, 0, false);
else else
SN_StartSequence (m_Sector, sound, 0); SN_StartSequence (m_Sector, sound, 0, false);
} }
// //
@ -174,7 +174,7 @@ void DPlat::Tick ()
m_Status = down; m_Status = down;
if (m_Type == platToggle) if (m_Type == platToggle)
SN_StartSequence (m_Sector, "Silence", 0); SN_StartSequence (m_Sector, "Silence", 0, false);
else else
PlayPlatSound ("Platform"); PlayPlatSound ("Platform");
} }
@ -352,7 +352,7 @@ manual_plat:
plat->m_Low = sec->floorplane.PointToDist (spot, newheight); plat->m_Low = sec->floorplane.PointToDist (spot, newheight);
plat->m_High = sec->floorplane.d; plat->m_High = sec->floorplane.d;
plat->m_Status = DPlat::down; plat->m_Status = DPlat::down;
SN_StartSequence (sec, "Silence", 0); SN_StartSequence (sec, "Silence", 0, false);
break; break;
case DPlat::platDownToNearestFloor: case DPlat::platDownToNearestFloor:

View file

@ -147,6 +147,7 @@ enum SICommands
SI_IfHexen, SI_IfHexen,
SI_IfStrife, SI_IfStrife,
SI_Rolloff, SI_Rolloff,
SI_Volume,
}; };
// Blood was a cool game. If Monolith ever releases the source for it, // Blood was a cool game. If Monolith ever releases the source for it,
@ -186,7 +187,7 @@ MidiDeviceMap MidiDevices;
// EXTERNAL FUNCTION PROTOTYPES -------------------------------------------- // EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
void S_StartNamedSound (AActor *ent, fixed_t *pt, int channel, void S_StartNamedSound (AActor *ent, fixed_t *pt, int channel,
const char *name, float volume, float attenuation, bool looping); const char *name, float volume, float attenuation);
extern bool IsFloat (const char *str); extern bool IsFloat (const char *str);
// PUBLIC FUNCTION PROTOTYPES ---------------------------------------------- // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
@ -242,6 +243,7 @@ static const char *SICommandStrings[] =
"$ifhexen", "$ifhexen",
"$ifstrife", "$ifstrife",
"$rolloff", "$rolloff",
"$volume",
NULL NULL
}; };
@ -440,8 +442,9 @@ int S_AddSoundLump (const char *logicalname, int lump)
newsfx.lumpnum = lump; newsfx.lumpnum = lump;
newsfx.next = 0; newsfx.next = 0;
newsfx.index = 0; newsfx.index = 0;
newsfx.frequency = 0; newsfx.Volume = 1;
newsfx.PitchMask = CurrentPitchMask; newsfx.PitchMask = CurrentPitchMask;
newsfx.NearLimit = 2;
newsfx.bRandomHeader = false; newsfx.bRandomHeader = false;
newsfx.bPlayerReserve = false; newsfx.bPlayerReserve = false;
newsfx.bForce11025 = false; newsfx.bForce11025 = false;
@ -1105,12 +1108,13 @@ static void S_AddSNDINFO (int lump)
break; break;
case SI_Limit: { case SI_Limit: {
// $limit <logical name> <max channels> -- deprecated and ignored // $limit <logical name> <max channels>
int sfx; int sfx;
sc.MustGetString (); sc.MustGetString ();
sfx = S_FindSoundTentative (sc.String); sfx = S_FindSoundTentative (sc.String);
sc.MustGetNumber (); sc.MustGetNumber ();
S_sfx[sfx].NearLimit = MIN(MAX(sc.Number, 0), 255);
} }
break; break;
@ -1141,6 +1145,17 @@ static void S_AddSNDINFO (int lump)
CurrentPitchMask = (1 << clamp (sc.Number, 0, 7)) - 1; CurrentPitchMask = (1 << clamp (sc.Number, 0, 7)) - 1;
break; break;
case SI_Volume: {
// $volume <logical name> <volume>
int sfx;
sc.MustGetString();
sfx = S_FindSoundTentative(sc.String);
sc.MustGetFloat();
S_sfx[sfx].Volume = sc.Float;
}
break;
case SI_Rolloff: { case SI_Rolloff: {
// $rolloff *|<logical name> [linear|log|custom] <min dist> <max dist/rolloff factor> // $rolloff *|<logical name> [linear|log|custom] <min dist> <max dist/rolloff factor>
// Using * for the name makes it the default for sounds that don't specify otherwise. // Using * for the name makes it the default for sounds that don't specify otherwise.
@ -1867,8 +1882,8 @@ void AAmbientSound::Tick ()
if (ambient->sound[0]) if (ambient->sound[0])
{ {
S_StartNamedSound (this, NULL, CHAN_BODY, ambient->sound, S_StartNamedSound (this, NULL, CHAN_BODY|CHAN_LOOP, ambient->sound,
ambient->volume, ambient->attenuation, true); ambient->volume, ambient->attenuation);
SetTicker (ambient); SetTicker (ambient);
} }
else else
@ -1881,7 +1896,7 @@ void AAmbientSound::Tick ()
if (ambient->sound[0]) if (ambient->sound[0])
{ {
S_StartNamedSound (this, NULL, CHAN_BODY, ambient->sound, S_StartNamedSound (this, NULL, CHAN_BODY, ambient->sound,
ambient->volume, ambient->attenuation, false); ambient->volume, ambient->attenuation);
SetTicker (ambient); SetTicker (ambient);
} }
else else

View file

@ -102,8 +102,7 @@ public:
DSeqActorNode (AActor *actor, int sequence, int modenum); DSeqActorNode (AActor *actor, int sequence, int modenum);
void Destroy (); void Destroy ();
void Serialize (FArchive &arc); void Serialize (FArchive &arc);
void MakeSound () { S_SoundID (m_Actor, CHAN_BODY, m_CurrentSoundID, clamp(m_Volume, 0.f, 1.f), m_Atten); } void MakeSound (int loop) { S_SoundID (m_Actor, CHAN_BODY|loop, m_CurrentSoundID, clamp(m_Volume, 0.f, 1.f), m_Atten); }
void MakeLoopedSound () { S_LoopedSoundID (m_Actor, CHAN_BODY, m_CurrentSoundID, clamp(m_Volume, 0.f, 1.f), m_Atten); }
bool IsPlaying () { return S_IsActorPlayingSomething (m_Actor, CHAN_BODY, m_CurrentSoundID); } bool IsPlaying () { return S_IsActorPlayingSomething (m_Actor, CHAN_BODY, m_CurrentSoundID); }
void *Source () { return m_Actor; } void *Source () { return m_Actor; }
DSeqNode *SpawnChild (int seqnum) { return SN_StartSequence (m_Actor, seqnum, SEQ_NOTRANS, m_ModeNum, true); } DSeqNode *SpawnChild (int seqnum) { return SN_StartSequence (m_Actor, seqnum, SEQ_NOTRANS, m_ModeNum, true); }
@ -119,8 +118,7 @@ public:
DSeqPolyNode (polyobj_t *poly, int sequence, int modenum); DSeqPolyNode (polyobj_t *poly, int sequence, int modenum);
void Destroy (); void Destroy ();
void Serialize (FArchive &arc); void Serialize (FArchive &arc);
void MakeSound () { S_SoundID (&m_Poly->startSpot[0], CHAN_BODY, m_CurrentSoundID, clamp(m_Volume, 0.f, 1.f), m_Atten); } void MakeSound (int loop) { S_SoundID (&m_Poly->startSpot[0], CHAN_BODY|loop, m_CurrentSoundID, clamp(m_Volume, 0.f, 1.f), m_Atten); }
void MakeLoopedSound () { S_LoopedSoundID (&m_Poly->startSpot[0], CHAN_BODY, m_CurrentSoundID, clamp(m_Volume, 0.f, 1.f), m_Atten); }
bool IsPlaying () { return S_GetSoundPlayingInfo (&m_Poly->startSpot[0], m_CurrentSoundID); } bool IsPlaying () { return S_GetSoundPlayingInfo (&m_Poly->startSpot[0], m_CurrentSoundID); }
void *Source () { return m_Poly; } void *Source () { return m_Poly; }
DSeqNode *SpawnChild (int seqnum) { return SN_StartSequence (m_Poly, seqnum, SEQ_NOTRANS, m_ModeNum, true); } DSeqNode *SpawnChild (int seqnum) { return SN_StartSequence (m_Poly, seqnum, SEQ_NOTRANS, m_ModeNum, true); }
@ -133,11 +131,10 @@ class DSeqSectorNode : public DSeqNode
{ {
DECLARE_CLASS (DSeqSectorNode, DSeqNode) DECLARE_CLASS (DSeqSectorNode, DSeqNode)
public: public:
DSeqSectorNode (sector_t *sec, int sequence, int modenum); DSeqSectorNode (sector_t *sec, int sequence, int modenum, bool is_door);
void Destroy (); void Destroy ();
void Serialize (FArchive &arc); void Serialize (FArchive &arc);
void MakeSound () { S_SoundID (&m_Sector->soundorg[0], CHAN_BODY, m_CurrentSoundID, clamp(m_Volume, 0.f, 1.f), m_Atten); Looping = false; } void MakeSound (int loop) { S_SoundID (&m_Sector->soundorg[0], CHAN_BODY|(m_IsDoor ? 0 : CHAN_AREA)|loop, m_CurrentSoundID, clamp(m_Volume, 0.f, 1.f), m_Atten); Looping = !!loop; }
void MakeLoopedSound () { S_LoopedSoundID (&m_Sector->soundorg[0], CHAN_BODY, m_CurrentSoundID, clamp(m_Volume, 0.f, 1.f), m_Atten); Looping = true; }
bool IsPlaying () { return S_GetSoundPlayingInfo (m_Sector->soundorg, m_CurrentSoundID); } bool IsPlaying () { return S_GetSoundPlayingInfo (m_Sector->soundorg, m_CurrentSoundID); }
void *Source () { return m_Sector; } void *Source () { return m_Sector; }
DSeqNode *SpawnChild (int seqnum) { return SN_StartSequence (m_Sector, seqnum, SEQ_NOTRANS, m_ModeNum, true); } DSeqNode *SpawnChild (int seqnum) { return SN_StartSequence (m_Sector, seqnum, SEQ_NOTRANS, m_ModeNum, true); }
@ -145,6 +142,7 @@ public:
private: private:
DSeqSectorNode() {} DSeqSectorNode() {}
sector_t *m_Sector; sector_t *m_Sector;
bool m_IsDoor;
}; };
// When destroyed, destroy the sound sequences too. // When destroyed, destroy the sound sequences too.
@ -397,7 +395,7 @@ IMPLEMENT_CLASS (DSeqSectorNode)
void DSeqSectorNode::Serialize (FArchive &arc) void DSeqSectorNode::Serialize (FArchive &arc)
{ {
Super::Serialize (arc); Super::Serialize (arc);
arc << m_Sector << Looping; arc << m_Sector << Looping << m_IsDoor;
} }
//========================================================================== //==========================================================================
@ -415,9 +413,12 @@ static void AssignTranslations (FScanner &sc, int seq, seqtype_t type)
if (IsNum(sc.String)) if (IsNum(sc.String))
{ {
SeqTrans[(atoi(sc.String) & 63) + type * 64] = seq; SeqTrans[(atoi(sc.String) & 63) + type * 64] = seq;
if (type == SEQ_DOOR)
{
Sequences[seq]->bDoorSound |= true;
}
} }
} }
sc.UnGet(); sc.UnGet();
} }
@ -446,11 +447,14 @@ static void AssignHexenTranslations (void)
int trans; int trans;
if (HexenSequences[i].Seqs[j] & 0x40) if (HexenSequences[i].Seqs[j] & 0x40)
trans = 64; {
trans = 64 * SEQ_DOOR;
Sequences[seq]->bDoorSound |= true;
}
else if (HexenSequences[i].Seqs[j] & 0x80) else if (HexenSequences[i].Seqs[j] & 0x80)
trans = 64*2; trans = 64 * SEQ_ENVIRONMENT;
else else
trans = 0; trans = 64 * SEQ_PLATFORM;
SeqTrans[trans + (HexenSequences[i].Seqs[j] & 0x3f)] = seq; SeqTrans[trans + (HexenSequences[i].Seqs[j] & 0x3f)] = seq;
} }
@ -690,6 +694,7 @@ static void AddSequence (int curseq, FName seqname, FName slot, int stopsound, c
Sequences[curseq]->SeqName = seqname; Sequences[curseq]->SeqName = seqname;
Sequences[curseq]->Slot = slot; Sequences[curseq]->Slot = slot;
Sequences[curseq]->StopSound = stopsound; Sequences[curseq]->StopSound = stopsound;
Sequences[curseq]->bDoorSound = false;
memcpy (Sequences[curseq]->Script, &ScriptTemp[0], sizeof(DWORD)*ScriptTemp.Size()); memcpy (Sequences[curseq]->Script, &ScriptTemp[0], sizeof(DWORD)*ScriptTemp.Size());
Sequences[curseq]->Script[ScriptTemp.Size()] = MakeCommand(SS_CMD_END, 0); Sequences[curseq]->Script[ScriptTemp.Size()] = MakeCommand(SS_CMD_END, 0);
} }
@ -738,11 +743,12 @@ DSeqPolyNode::DSeqPolyNode (polyobj_t *poly, int sequence, int modenum)
{ {
} }
DSeqSectorNode::DSeqSectorNode (sector_t *sec, int sequence, int modenum) DSeqSectorNode::DSeqSectorNode (sector_t *sec, int sequence, int modenum, bool is_door)
: DSeqNode (sequence, modenum), : DSeqNode (sequence, modenum),
Looping (false), Looping (false),
m_Sector (sec) m_Sector (sec)
{ {
m_IsDoor = is_door;
} }
//========================================================================== //==========================================================================
@ -786,7 +792,7 @@ DSeqNode *SN_StartSequence (AActor *actor, int sequence, seqtype_t type, int mod
return NULL; return NULL;
} }
DSeqNode *SN_StartSequence (sector_t *sector, int sequence, seqtype_t type, int modenum, bool nostop) DSeqNode *SN_StartSequence (sector_t *sector, int sequence, seqtype_t type, int modenum, bool is_door, bool nostop)
{ {
if (!nostop) if (!nostop)
{ {
@ -794,7 +800,7 @@ DSeqNode *SN_StartSequence (sector_t *sector, int sequence, seqtype_t type, int
} }
if (TwiddleSeqNum (sequence, type)) if (TwiddleSeqNum (sequence, type))
{ {
return new DSeqSectorNode (sector, sequence, modenum); return new DSeqSectorNode (sector, sequence, modenum, is_door);
} }
return NULL; return NULL;
} }
@ -838,12 +844,12 @@ DSeqNode *SN_StartSequence (AActor *actor, FName seqname, int modenum)
return NULL; return NULL;
} }
DSeqNode *SN_StartSequence (sector_t *sec, const char *seqname, int modenum) DSeqNode *SN_StartSequence (sector_t *sec, const char *seqname, int modenum, bool is_door)
{ {
int seqnum = FindSequence (seqname); int seqnum = FindSequence (seqname);
if (seqnum >= 0) if (seqnum >= 0)
{ {
return SN_StartSequence (sec, seqnum, SEQ_NOTRANS, modenum); return SN_StartSequence (sec, seqnum, SEQ_NOTRANS, modenum, is_door);
} }
return NULL; return NULL;
} }
@ -992,7 +998,7 @@ void DSeqNode::Tick ()
if (!IsPlaying()) if (!IsPlaying())
{ {
m_CurrentSoundID = GetData(*m_SequencePtr); m_CurrentSoundID = GetData(*m_SequencePtr);
MakeSound (); MakeSound (0);
} }
m_SequencePtr++; m_SequencePtr++;
break; break;
@ -1014,7 +1020,7 @@ void DSeqNode::Tick ()
{ {
// Does not advance sequencePtr, so it will repeat as necessary. // Does not advance sequencePtr, so it will repeat as necessary.
m_CurrentSoundID = GetData(*m_SequencePtr); m_CurrentSoundID = GetData(*m_SequencePtr);
MakeLoopedSound (); MakeSound (CHAN_LOOP);
} }
return; return;
@ -1022,7 +1028,7 @@ void DSeqNode::Tick ()
// Like SS_CMD_PLAYREPEAT, sequencePtr is not advanced, so this // Like SS_CMD_PLAYREPEAT, sequencePtr is not advanced, so this
// command will repeat until the sequence is stopped. // command will repeat until the sequence is stopped.
m_CurrentSoundID = GetData(m_SequencePtr[0]); m_CurrentSoundID = GetData(m_SequencePtr[0]);
MakeSound (); MakeSound (0);
m_DelayUntilTic = TIME_REFERENCE + m_SequencePtr[1]; m_DelayUntilTic = TIME_REFERENCE + m_SequencePtr[1];
return; return;

View file

@ -30,8 +30,7 @@ public:
void AddChoice (int seqnum, seqtype_t type); void AddChoice (int seqnum, seqtype_t type);
FName GetSequenceName() const; FName GetSequenceName() const;
virtual void MakeSound () {} virtual void MakeSound (int loop) {}
virtual void MakeLoopedSound () {}
virtual void *Source () { return NULL; } virtual void *Source () { return NULL; }
virtual bool IsPlaying () { return false; } virtual bool IsPlaying () { return false; }
virtual DSeqNode *SpawnChild (int seqnum) { return NULL; } virtual DSeqNode *SpawnChild (int seqnum) { return NULL; }
@ -75,6 +74,7 @@ struct FSoundSequence
FName SeqName; FName SeqName;
FName Slot; FName Slot;
int StopSound; int StopSound;
bool bDoorSound;
SDWORD Script[1]; // + more until end of sequence script SDWORD Script[1]; // + more until end of sequence script
}; };
@ -82,8 +82,8 @@ void S_ParseSndSeq (int levellump);
DSeqNode *SN_StartSequence (AActor *mobj, int sequence, seqtype_t type, int modenum, bool nostop=false); DSeqNode *SN_StartSequence (AActor *mobj, int sequence, seqtype_t type, int modenum, bool nostop=false);
DSeqNode *SN_StartSequence (AActor *mobj, const char *name, int modenum); DSeqNode *SN_StartSequence (AActor *mobj, const char *name, int modenum);
DSeqNode *SN_StartSequence (AActor *mobj, FName seqname, int modenum); DSeqNode *SN_StartSequence (AActor *mobj, FName seqname, int modenum);
DSeqNode *SN_StartSequence (sector_t *sector, int sequence, seqtype_t type, int modenum, bool nostop=false); DSeqNode *SN_StartSequence (sector_t *sector, int sequence, seqtype_t type, int modenum, bool full3d, bool nostop=false);
DSeqNode *SN_StartSequence (sector_t *sector, const char *name, int modenum); DSeqNode *SN_StartSequence (sector_t *sector, const char *name, int modenum, bool full3d);
DSeqNode *SN_StartSequence (polyobj_t *poly, int sequence, seqtype_t type, int modenum, bool nostop=false); DSeqNode *SN_StartSequence (polyobj_t *poly, int sequence, seqtype_t type, int modenum, bool nostop=false);
DSeqNode *SN_StartSequence (polyobj_t *poly, const char *name, int modenum); DSeqNode *SN_StartSequence (polyobj_t *poly, const char *name, int modenum);
void SN_StopSequence (AActor *mobj); void SN_StopSequence (AActor *mobj);

View file

@ -94,7 +94,8 @@ extern float S_GetMusicVolume (const char *music);
static fixed_t P_AproxDistance2(fixed_t *listener, fixed_t x, fixed_t y); static fixed_t P_AproxDistance2(fixed_t *listener, fixed_t x, fixed_t y);
static void S_StartSound(fixed_t *pt, AActor *mover, int channel, static void S_StartSound(fixed_t *pt, AActor *mover, int channel,
int sound_id, float volume, float attenuation, bool looping); int sound_id, float volume, float attenuation);
static bool S_CheckSoundLimit(sfxinfo_t *sfx, float pos[3]);
static void S_ActivatePlayList(bool goBack); static void S_ActivatePlayList(bool goBack);
static void CalcPosVel(fixed_t *pt, AActor *mover, int constz, float pos[3], static void CalcPosVel(fixed_t *pt, AActor *mover, int constz, float pos[3],
float vel[3]); float vel[3]);
@ -192,7 +193,7 @@ void S_NoiseDebug (void)
char temp[16]; char temp[16];
fixed_t *origin = chan->Pt; fixed_t *origin = chan->Pt;
if (!chan->Is3D) if (!(chan->ChanFlags & CHAN_IS3D))
{ {
ox = players[consoleplayer].camera->x; ox = players[consoleplayer].camera->x;
oy = players[consoleplayer].camera->y; oy = players[consoleplayer].camera->y;
@ -210,7 +211,7 @@ void S_NoiseDebug (void)
oy = chan->Y; oy = chan->Y;
oz = chan->Z; oz = chan->Z;
} }
color = chan->Loop ? CR_BROWN : CR_GREY; color = (chan->ChanFlags & CHAN_LOOP) ? CR_BROWN : CR_GREY;
Wads.GetLumpName (temp, chan->SfxInfo->lumpnum); Wads.GetLumpName (temp, chan->SfxInfo->lumpnum);
temp[8] = 0; temp[8] = 0;
screen->DrawText (color, 0, y, temp, TAG_DONE); screen->DrawText (color, 0, y, temp, TAG_DONE);
@ -310,6 +311,7 @@ void S_Shutdown ()
{ {
GSnd->StopSound(Channels); GSnd->StopSound(Channels);
} }
GSnd->UpdateSounds();
} }
else else
{ {
@ -587,7 +589,7 @@ void S_LinkChannel(FSoundChan *chan, FSoundChan **head)
void CalcPosVel (fixed_t *pt, AActor *mover, int constz, void CalcPosVel (fixed_t *pt, AActor *mover, int constz,
float pos[3], float vel[3]) float pos[3], float vel[3])
{ {
if (mover != NULL && 0) if (mover != NULL)
{ {
vel[0] = FIXED2FLOAT(mover->momx) * TICRATE; vel[0] = FIXED2FLOAT(mover->momx) * TICRATE;
vel[1] = FIXED2FLOAT(mover->momz) * TICRATE; vel[1] = FIXED2FLOAT(mover->momz) * TICRATE;
@ -621,7 +623,7 @@ void CalcPosVel (fixed_t *pt, AActor *mover, int constz,
//========================================================================== //==========================================================================
static void S_StartSound (fixed_t *pt, AActor *mover, int channel, static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
int sound_id, float volume, float attenuation, bool looping) int sound_id, float volume, float attenuation)
{ {
sfxinfo_t *sfx; sfxinfo_t *sfx;
int chanflags; int chanflags;
@ -630,28 +632,31 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
int pitch; int pitch;
fixed_t x, y, z; fixed_t x, y, z;
FSoundChan *chan; FSoundChan *chan;
float pos[3];
static int sndcount = 0; float vel[3];
if (sound_id <= 0 || volume <= 0 || GSnd == NULL) if (sound_id <= 0 || volume <= 0 || GSnd == NULL)
return; return;
org_id = sound_id; org_id = sound_id;
chanflags = channel & ~7;
if (pt == NULL) if (pt == NULL)
{ {
attenuation = 0; attenuation = 0;
// Give these variables values, although they don't really matter // Give these variables values, although they don't really matter
x = y = z = 0; x = y = z = 0;
fixed_t pt2[3] = { 0, 0, 0 };
CalcPosVel (pt2, mover, chanflags & CHAN_LISTENERZ, pos, vel);
} }
else else
{ {
x = pt[0]; x = pt[0];
y = pt[1]; y = pt[1];
z = pt[2]; z = pt[2];
CalcPosVel (pt, mover, chanflags & CHAN_LISTENERZ, pos, vel);
} }
chanflags = channel & ~7;
if (chanflags & CHAN_IMMOBILE) if (chanflags & CHAN_IMMOBILE)
{ {
pt = NULL; pt = NULL;
@ -672,12 +677,11 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
channel &= 7; channel &= 7;
} }
volume = clamp(volume, 0.f, 1.f);
sfx = &S_sfx[sound_id]; sfx = &S_sfx[sound_id];
// If this is a singular sound, don't play it if it's already playing. // Scale volume according to SNDINFO data.
if (sfx->bSingular && S_CheckSingular(sound_id)) volume = MIN(volume * sfx->Volume, 1.f);
if (volume <= 0)
return; return;
// Resolve player sounds, random sounds, and aliases // Resolve player sounds, random sounds, and aliases
@ -698,6 +702,15 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
sfx = &S_sfx[sound_id]; sfx = &S_sfx[sound_id];
} }
// If this is a singular sound, don't play it if it's already playing.
if (sfx->bSingular && S_CheckSingular(sound_id))
return;
// If this sound doesn't like playing near itself, don't play it if
// that's what would happen.
if (sfx->NearLimit && S_CheckSoundLimit(sfx, pos))
return;
// Make sure the sound is loaded. // Make sure the sound is loaded.
if (sfx->data == NULL) if (sfx->data == NULL)
{ {
@ -722,25 +735,6 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
else else
{ {
basepriority = 0; basepriority = 0;
#if 0
switch (channel)
{
case CHAN_WEAPON:
basepriority = 20;
break;
case CHAN_VOICE:
basepriority = 10;
break;
default:
case CHAN_BODY:
basepriority = 0;
break;
case CHAN_ITEM:
basepriority = -10;
break;
}
basepriority = int(basepriority / attenuation);
#endif
} }
if (mover != NULL && channel == CHAN_AUTO) if (mover != NULL && channel == CHAN_AUTO)
@ -793,34 +787,13 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
if (attenuation > 0) if (attenuation > 0)
{ {
float pos[3]; chan = GSnd->StartSound3D (sfx, volume, attenuation, pitch, basepriority, pos, vel, chanflags);
float vel[3]; chanflags |= CHAN_IS3D;
if (pt)
{
CalcPosVel (pt, mover, chanflags & CHAN_LISTENERZ, pos, vel);
} }
else else
{ {
fixed_t pt2[3]; chan = GSnd->StartSound (sfx, volume, pitch, chanflags);
pt2[0] = x; chanflags |= CHAN_LISTENERZ;
pt2[1] = y;
pt2[2] = z;
CalcPosVel (pt2, mover, chanflags & CHAN_LISTENERZ, pos, vel);
}
chan = GSnd->StartSound3D (sfx, volume, attenuation, pitch, basepriority, looping, pos, vel, !(chanflags & CHAN_NOPAUSE));
if (chan != NULL)
{
chan->ConstZ = !!(chanflags & CHAN_LISTENERZ);
}
}
else
{
chan = GSnd->StartSound (sfx, volume, pitch, looping, !(chanflags & CHAN_NOPAUSE));
if (chan != NULL)
{
chan->ConstZ = true;
}
} }
if (chan != NULL) if (chan != NULL)
{ {
@ -834,7 +807,7 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
chan->X = x; chan->X = x;
chan->Y = y; chan->Y = y;
chan->Z = z; chan->Z = z;
chan->Loop = looping; chan->ChanFlags = chanflags;
if (mover != NULL) if (mover != NULL)
{ {
mover->SoundChans |= 1 << channel; mover->SoundChans |= 1 << channel;
@ -850,19 +823,19 @@ static void S_StartSound (fixed_t *pt, AActor *mover, int channel,
void S_SoundID (int channel, int sound_id, float volume, int attenuation) void S_SoundID (int channel, int sound_id, float volume, int attenuation)
{ {
S_StartSound ((fixed_t *)NULL, NULL, channel, sound_id, volume, SELECT_ATTEN(attenuation), false); S_StartSound ((fixed_t *)NULL, NULL, channel, sound_id, volume, SELECT_ATTEN(attenuation));
} }
void S_SoundID (AActor *ent, int channel, int sound_id, float volume, int attenuation) void S_SoundID (AActor *ent, int channel, int sound_id, float volume, int attenuation)
{ {
if (ent->Sector->MoreFlags & SECF_SILENT) if (ent->Sector->MoreFlags & SECF_SILENT)
return; return;
S_StartSound (&ent->x, ent, channel, sound_id, volume, SELECT_ATTEN(attenuation), false); S_StartSound (&ent->x, ent, channel, sound_id, volume, SELECT_ATTEN(attenuation));
} }
void S_SoundID (fixed_t *pt, int channel, int sound_id, float volume, int attenuation) void S_SoundID (fixed_t *pt, int channel, int sound_id, float volume, int attenuation)
{ {
S_StartSound (pt, NULL, channel, sound_id, volume, SELECT_ATTEN(attenuation), false); S_StartSound (pt, NULL, channel, sound_id, volume, SELECT_ATTEN(attenuation));
} }
void S_SoundID (fixed_t x, fixed_t y, fixed_t z, int channel, int sound_id, float volume, int attenuation) void S_SoundID (fixed_t x, fixed_t y, fixed_t z, int channel, int sound_id, float volume, int attenuation)
@ -871,25 +844,7 @@ void S_SoundID (fixed_t x, fixed_t y, fixed_t z, int channel, int sound_id, floa
pt[0] = x; pt[0] = x;
pt[1] = y; pt[1] = y;
pt[2] = z; pt[2] = z;
S_StartSound (pt, NULL, channel|CHAN_IMMOBILE, sound_id, volume, SELECT_ATTEN(attenuation), false); S_StartSound (pt, NULL, channel|CHAN_IMMOBILE, sound_id, volume, SELECT_ATTEN(attenuation));
}
//==========================================================================
//
// S_LoopedSoundID
//
//==========================================================================
void S_LoopedSoundID (AActor *ent, int channel, int sound_id, float volume, int attenuation)
{
if (ent->Sector->MoreFlags & SECF_SILENT)
return;
S_StartSound (&ent->x, ent, channel, sound_id, volume, SELECT_ATTEN(attenuation), true);
}
void S_LoopedSoundID (fixed_t *pt, int channel, int sound_id, float volume, int attenuation)
{
S_StartSound (pt, NULL, channel, sound_id, volume, SELECT_ATTEN(attenuation), true);
} }
//========================================================================== //==========================================================================
@ -899,7 +854,7 @@ void S_LoopedSoundID (fixed_t *pt, int channel, int sound_id, float volume, int
//========================================================================== //==========================================================================
void S_StartNamedSound (AActor *ent, fixed_t *pt, int channel, void S_StartNamedSound (AActor *ent, fixed_t *pt, int channel,
const char *name, float volume, float attenuation, bool looping) const char *name, float volume, float attenuation)
{ {
int sfx_id; int sfx_id;
@ -914,9 +869,9 @@ void S_StartNamedSound (AActor *ent, fixed_t *pt, int channel,
DPrintf ("Unknown sound %s\n", name); DPrintf ("Unknown sound %s\n", name);
if (ent) if (ent)
S_StartSound (&ent->x, ent, channel, sfx_id, volume, attenuation, looping); S_StartSound (&ent->x, ent, channel, sfx_id, volume, attenuation);
else else
S_StartSound (pt, NULL, channel, sfx_id, volume, attenuation, looping); S_StartSound (pt, NULL, channel, sfx_id, volume, attenuation);
} }
//========================================================================== //==========================================================================
@ -927,17 +882,17 @@ void S_StartNamedSound (AActor *ent, fixed_t *pt, int channel,
void S_Sound (int channel, const char *name, float volume, int attenuation) void S_Sound (int channel, const char *name, float volume, int attenuation)
{ {
S_StartNamedSound ((AActor *)NULL, NULL, channel, name, volume, SELECT_ATTEN(attenuation), false); S_StartNamedSound ((AActor *)NULL, NULL, channel, name, volume, SELECT_ATTEN(attenuation));
} }
void S_Sound (AActor *ent, int channel, const char *name, float volume, int attenuation) void S_Sound (AActor *ent, int channel, const char *name, float volume, int attenuation)
{ {
S_StartNamedSound (ent, NULL, channel, name, volume, SELECT_ATTEN(attenuation), false); S_StartNamedSound (ent, NULL, channel, name, volume, SELECT_ATTEN(attenuation));
} }
void S_Sound (fixed_t *pt, int channel, const char *name, float volume, int attenuation) void S_Sound (fixed_t *pt, int channel, const char *name, float volume, int attenuation)
{ {
S_StartNamedSound (NULL, pt, channel, name, volume, SELECT_ATTEN(attenuation), false); S_StartNamedSound (NULL, pt, channel, name, volume, SELECT_ATTEN(attenuation));
} }
void S_Sound (fixed_t x, fixed_t y, int channel, const char *name, float volume, int attenuation) void S_Sound (fixed_t x, fixed_t y, int channel, const char *name, float volume, int attenuation)
@ -946,18 +901,7 @@ void S_Sound (fixed_t x, fixed_t y, int channel, const char *name, float volume,
pt[0] = x; pt[0] = x;
pt[1] = y; pt[1] = y;
S_StartNamedSound (NULL, pt, channel|CHAN_LISTENERZ|CHAN_IMMOBILE, S_StartNamedSound (NULL, pt, channel|CHAN_LISTENERZ|CHAN_IMMOBILE,
name, volume, SELECT_ATTEN(attenuation), false); name, volume, SELECT_ATTEN(attenuation));
}
//==========================================================================
//
// S_LoopedSound
//
//==========================================================================
void S_LoopedSound (AActor *ent, int channel, const char *name, float volume, int attenuation)
{
S_StartNamedSound (ent, NULL, channel, name, volume, SELECT_ATTEN(attenuation), true);
} }
//========================================================================== //==========================================================================
@ -980,6 +924,38 @@ bool S_CheckSingular(int sound_id)
return false; return false;
} }
//==========================================================================
//
// S_CheckSoundLimit
//
// Limits the number of nearby copies of a sound that can play near
// each other. If there are NearLimit instances of this sound already
// playing within 256 units of the new sound, the new sound will not
// start.
//
//==========================================================================
bool S_CheckSoundLimit(sfxinfo_t *sfx, float pos[3])
{
FSoundChan *chan;
int count;
for (chan = Channels, count = 0; chan != NULL && count < sfx->NearLimit; chan = chan->NextChan)
{
if (chan->SfxInfo == sfx)
{
double dx = FIXED2FLOAT(chan->Pt[0]) - pos[0];
double dy = FIXED2FLOAT(chan->Pt[1]) - pos[2];
double dz = FIXED2FLOAT(chan->Pt[2]) - pos[1];
if (dx*dx + dy*dy + dz*dz <= 256.0*256.0)
{
count++;
}
}
}
return count >= sfx->NearLimit;
}
//========================================================================== //==========================================================================
// //
// S_StopSound // S_StopSound
@ -1048,7 +1024,7 @@ void S_RelinkSound (AActor *from, AActor *to)
{ {
if (chan->Pt == frompt) if (chan->Pt == frompt)
{ {
if (to != NULL || !chan->Loop) if (to != NULL || !(chan->ChanFlags & CHAN_LOOP))
{ {
chan->Pt = topt ? topt : &chan->X; chan->Pt = topt ? topt : &chan->X;
chan->X = frompt[0]; chan->X = frompt[0];
@ -1189,9 +1165,9 @@ void S_UpdateSounds (void *listener_p)
for (FSoundChan *chan = Channels; chan != NULL; chan = chan->NextChan) for (FSoundChan *chan = Channels; chan != NULL; chan = chan->NextChan)
{ {
if (chan->Is3D) if (chan->ChanFlags & CHAN_IS3D)
{ {
CalcPosVel(chan->Pt, chan->Mover, chan->ConstZ, pos, vel); CalcPosVel(chan->Pt, chan->Mover, chan->ChanFlags & CHAN_LISTENERZ, pos, vel);
GSnd->UpdateSoundParams3D(chan, pos, vel); GSnd->UpdateSoundParams3D(chan, pos, vel);
} }
} }

View file

@ -40,9 +40,11 @@ struct sfxinfo_t
int lumpnum; // lump number of sfx int lumpnum; // lump number of sfx
unsigned int next, index; // [RH] For hashing unsigned int next, index; // [RH] For hashing
unsigned int frequency; // [RH] Preferred playback rate // unsigned int frequency; // [RH] Preferred playback rate
float Volume;
BYTE PitchMask; BYTE PitchMask;
BYTE NearLimit; // 0 means unlimited
WORD bRandomHeader:1; WORD bRandomHeader:1;
WORD bPlayerReserve:1; WORD bPlayerReserve:1;
@ -97,9 +99,7 @@ struct FSoundChan
float Volume; float Volume;
float DistanceScale; float DistanceScale;
BYTE EntChannel; // Actor's sound channel. BYTE EntChannel; // Actor's sound channel.
bool Loop; int ChanFlags;
bool Is3D;
bool ConstZ;
}; };
FSoundChan *S_GetChannel(void *syschan); FSoundChan *S_GetChannel(void *syschan);
@ -132,14 +132,10 @@ void S_Sound (int channel, const char *name, float volume, int attenuation);
void S_Sound (AActor *ent, int channel, const char *name, float volume, int attenuation); void S_Sound (AActor *ent, int channel, const char *name, float volume, int attenuation);
void S_Sound (fixed_t *pt, int channel, const char *name, float volume, int attenuation); void S_Sound (fixed_t *pt, int channel, const char *name, float volume, int attenuation);
void S_Sound (fixed_t x, fixed_t y, int channel, const char *name, float volume, int attenuation); void S_Sound (fixed_t x, fixed_t y, int channel, const char *name, float volume, int attenuation);
void S_LoopedSound (AActor *ent, int channel, const char *name, float volume, int attenuation);
void S_LoopedSound (fixed_t *pt, int channel, const char *name, float volume, int attenuation);
void S_SoundID (int channel, int sfxid, float volume, int attenuation); void S_SoundID (int channel, int sfxid, float volume, int attenuation);
void S_SoundID (AActor *ent, int channel, int sfxid, float volume, int attenuation); void S_SoundID (AActor *ent, int channel, int sfxid, float volume, int attenuation);
void S_SoundID (fixed_t *pt, int channel, int sfxid, float volume, int attenuation); void S_SoundID (fixed_t *pt, int channel, int sfxid, float volume, int attenuation);
void S_SoundID (fixed_t x, fixed_t y, fixed_t z, int channel, int sfxid, float volume, int attenuation); void S_SoundID (fixed_t x, fixed_t y, fixed_t z, int channel, int sfxid, float volume, int attenuation);
void S_LoopedSoundID (AActor *ent, int channel, int sfxid, float volume, int attenuation);
void S_LoopedSoundID (fixed_t *pt, int channel, int sfxid, float volume, int attenuation);
// sound channels // sound channels
// channel 0 never willingly overrides // channel 0 never willingly overrides
@ -162,6 +158,10 @@ void S_LoopedSoundID (fixed_t *pt, int channel, int sfxid, float volume, int att
#define CHAN_IMMOBILE 16 #define CHAN_IMMOBILE 16
#define CHAN_MAYBE_LOCAL 32 #define CHAN_MAYBE_LOCAL 32
#define CHAN_NOPAUSE 64 // do not pause this sound in menus #define CHAN_NOPAUSE 64 // do not pause this sound in menus
#define CHAN_AREA 128 // Sound plays from all around within MinDistance
#define CHAN_LOOP 256
#define CHAN_IS3D 1 // internal flag
#define CHAN_PICKUP (CHAN_ITEM|CHAN_MAYBE_LOCAL) #define CHAN_PICKUP (CHAN_ITEM|CHAN_MAYBE_LOCAL)
// sound attenuation values // sound attenuation values

View file

@ -919,7 +919,7 @@ SoundStream *FMODSoundRenderer::OpenStream(const char *filename_or_data, int fla
// //
//========================================================================== //==========================================================================
FSoundChan *FMODSoundRenderer::StartSound(sfxinfo_t *sfx, float vol, int pitch, bool looping, bool pausable) FSoundChan *FMODSoundRenderer::StartSound(sfxinfo_t *sfx, float vol, int pitch, int chanflags)
{ {
int id = int(sfx - &S_sfx[0]); int id = int(sfx - &S_sfx[0]);
FMOD_RESULT result; FMOD_RESULT result;
@ -927,7 +927,14 @@ FSoundChan *FMODSoundRenderer::StartSound(sfxinfo_t *sfx, float vol, int pitch,
FMOD::Channel *chan; FMOD::Channel *chan;
float freq; float freq;
freq = PITCH(sfx->frequency, pitch); if (FMOD_OK == ((FMOD::Sound *)sfx->data)->getDefaults(&freq, NULL, NULL, NULL))
{
freq = PITCH(freq, pitch);
}
else
{
freq = 0;
}
GSfxInfo = sfx; GSfxInfo = sfx;
result = Sys->playSound(FMOD_CHANNEL_FREE, (FMOD::Sound *)sfx->data, true, &chan); result = Sys->playSound(FMOD_CHANNEL_FREE, (FMOD::Sound *)sfx->data, true, &chan);
@ -941,17 +948,19 @@ FSoundChan *FMODSoundRenderer::StartSound(sfxinfo_t *sfx, float vol, int pitch,
mode = FMOD_SOFTWARE; mode = FMOD_SOFTWARE;
} }
mode = (mode & ~FMOD_3D) | FMOD_2D; mode = (mode & ~FMOD_3D) | FMOD_2D;
if (looping) if (chanflags & CHAN_LOOP)
{ {
mode = (mode & ~FMOD_LOOP_OFF) | FMOD_LOOP_NORMAL; mode = (mode & ~FMOD_LOOP_OFF) | FMOD_LOOP_NORMAL;
} }
chan->setMode(mode); chan->setMode(mode);
chan->setChannelGroup((!(chanflags & CHAN_NOPAUSE) && !SFXPaused) ? PausableSfx : SfxGroup);
chan->setChannelGroup((pausable && !SFXPaused) ? PausableSfx : SfxGroup); if (freq != 0)
{
chan->setFrequency(freq); chan->setFrequency(freq);
}
chan->setVolume(vol); chan->setVolume(vol);
chan->setPaused(false); chan->setPaused(false);
return CommonChannelSetup(chan, false); return CommonChannelSetup(chan);
} }
DPrintf ("Sound %s failed to play: %d\n", sfx->name.GetChars(), result); DPrintf ("Sound %s failed to play: %d\n", sfx->name.GetChars(), result);
@ -965,7 +974,7 @@ FSoundChan *FMODSoundRenderer::StartSound(sfxinfo_t *sfx, float vol, int pitch,
//========================================================================== //==========================================================================
FSoundChan *FMODSoundRenderer::StartSound3D(sfxinfo_t *sfx, float vol, float distscale, FSoundChan *FMODSoundRenderer::StartSound3D(sfxinfo_t *sfx, float vol, float distscale,
int pitch, int priority, bool looping, float pos[3], float vel[3], bool pausable) int pitch, int priority, float pos[3], float vel[3], int chanflags)
{ {
int id = int(sfx - &S_sfx[0]); int id = int(sfx - &S_sfx[0]);
FMOD_RESULT result; FMOD_RESULT result;
@ -975,15 +984,15 @@ FSoundChan *FMODSoundRenderer::StartSound3D(sfxinfo_t *sfx, float vol, float dis
float def_freq, def_vol, def_pan; float def_freq, def_vol, def_pan;
int def_priority; int def_priority;
freq = PITCH(sfx->frequency, pitch);
// Change the sound's default priority before playing it.
if (FMOD_OK == ((FMOD::Sound *)sfx->data)->getDefaults(&def_freq, &def_vol, &def_pan, &def_priority)) if (FMOD_OK == ((FMOD::Sound *)sfx->data)->getDefaults(&def_freq, &def_vol, &def_pan, &def_priority))
{ {
freq = PITCH(def_freq, pitch);
// Change the sound's default priority before playing it.
((FMOD::Sound *)sfx->data)->setDefaults(def_freq, def_vol, def_pan, clamp(def_priority - priority, 1, 256)); ((FMOD::Sound *)sfx->data)->setDefaults(def_freq, def_vol, def_pan, clamp(def_priority - priority, 1, 256));
} }
else else
{ {
freq = 0;
def_priority = -1; def_priority = -1;
} }
@ -1005,34 +1014,21 @@ FSoundChan *FMODSoundRenderer::StartSound3D(sfxinfo_t *sfx, float vol, float dis
{ {
mode = FMOD_3D | FMOD_SOFTWARE; mode = FMOD_3D | FMOD_SOFTWARE;
} }
if (looping) if (chanflags & CHAN_LOOP)
{ {
mode = (mode & ~FMOD_LOOP_OFF) | FMOD_LOOP_NORMAL; mode = (mode & ~FMOD_LOOP_OFF) | FMOD_LOOP_NORMAL;
} }
// If this sound is played at the same coordinates as the listener, mode = SetChanHeadSettings(chan, sfx, pos, chanflags, mode);
// make it head relative.
if (players[consoleplayer].camera != NULL)
{
float cpos[3];
cpos[0] = FIXED2FLOAT(players[consoleplayer].camera->x);
cpos[2] = FIXED2FLOAT(players[consoleplayer].camera->y);
cpos[1] = FIXED2FLOAT(players[consoleplayer].camera->z);
if (cpos[0] == pos[0] && cpos[1] == pos[1] && cpos[2] == pos[2])
{
mode = (mode & ~FMOD_3D_WORLDRELATIVE) | FMOD_3D_HEADRELATIVE;
pos[0] = 0;
pos[1] = 0;
pos[2] = 0;
}
}
chan->setMode(mode); chan->setMode(mode);
chan->setChannelGroup((pausable && !SFXPaused) ? PausableSfx : SfxGroup); chan->setChannelGroup((!(chanflags & CHAN_NOPAUSE) && !SFXPaused) ? PausableSfx : SfxGroup);
if (freq != 0)
{
chan->setFrequency(freq); chan->setFrequency(freq);
}
chan->setVolume(vol); chan->setVolume(vol);
chan->set3DAttributes((FMOD_VECTOR *)pos, (FMOD_VECTOR *)vel); chan->set3DAttributes((FMOD_VECTOR *)pos, (FMOD_VECTOR *)vel);
chan->setPaused(false); chan->setPaused(false);
FSoundChan *schan = CommonChannelSetup(chan, true); FSoundChan *schan = CommonChannelSetup(chan);
schan->DistanceScale = distscale; schan->DistanceScale = distscale;
return schan; return schan;
} }
@ -1041,6 +1037,60 @@ FSoundChan *FMODSoundRenderer::StartSound3D(sfxinfo_t *sfx, float vol, float dis
return 0; return 0;
} }
//==========================================================================
//
// FMODSound :: SetChanHeadSettings
//
// If this sound is played at the same coordinates as the listener, make
// it head relative. Also, area sounds should use no 3D panning if close
// enough to the listener.
//
//==========================================================================
FMOD_MODE FMODSoundRenderer::SetChanHeadSettings(FMOD::Channel *chan, sfxinfo_t *sfx, float pos[3], int chanflags, FMOD_MODE oldmode) const
{
if (players[consoleplayer].camera == NULL)
{
return oldmode;
}
double cpos[3];
cpos[0] = FIXED2FLOAT(players[consoleplayer].camera->x);
cpos[2] = FIXED2FLOAT(players[consoleplayer].camera->y);
cpos[1] = FIXED2FLOAT(players[consoleplayer].camera->z);
if (chanflags & CHAN_AREA)
{
const double interp_range = 512.0;
double dx = cpos[0] - pos[0], dy = cpos[1] - pos[1], dz = cpos[2] - pos[2];
double min_dist = sfx->MinDistance == 0 ? (S_MinDistance == 0 ? 200 : S_MinDistance) : sfx->MinDistance;
double dist_sqr = dx*dx + dy*dy + dz*dz;
float level, old_level;
if (dist_sqr <= min_dist*min_dist)
{ // Within min distance: No 3D panning.
level = 0;
}
else if (dist_sqr <= (min_dist + interp_range) * (min_dist + interp_range))
{ // Within interp_range units of min distance: Interpolate between none and full 3D panning.
level = float(1 - (min_dist + interp_range - sqrt(dist_sqr)) / interp_range);
}
else
{ // Beyond 256 units of min distance: Normal 3D panning.
level = 1;
}
if (chan->get3DPanLevel(&old_level) == FMOD_OK && old_level != level)
{ // Only set it if it's different.
chan->set3DPanLevel(level);
}
return oldmode;
}
else if (cpos[0] == pos[0] && cpos[1] == pos[1] && cpos[2] == pos[2])
{
pos[2] = pos[1] = pos[0] = 0;
return (oldmode & ~FMOD_3D_WORLDRELATIVE) | FMOD_3D_HEADRELATIVE;
}
return (oldmode & ~FMOD_3D_HEADRELATIVE) | FMOD_3D_WORLDRELATIVE;
}
//========================================================================== //==========================================================================
// //
// FMODSoundRenderer :: CommonChannelSetup // FMODSoundRenderer :: CommonChannelSetup
@ -1050,12 +1100,11 @@ FSoundChan *FMODSoundRenderer::StartSound3D(sfxinfo_t *sfx, float vol, float dis
// //
//========================================================================== //==========================================================================
FSoundChan *FMODSoundRenderer::CommonChannelSetup(FMOD::Channel *chan, bool is3d) FSoundChan *FMODSoundRenderer::CommonChannelSetup(FMOD::Channel *chan) const
{ {
FSoundChan *schan = S_GetChannel(chan); FSoundChan *schan = S_GetChannel(chan);
chan->setUserData(schan); chan->setUserData(schan);
chan->setCallback(FMOD_CHANNEL_CALLBACKTYPE_END, ChannelEndCallback, 0); chan->setCallback(FMOD_CHANNEL_CALLBACKTYPE_END, ChannelEndCallback, 0);
schan->Is3D = is3d;
GSfxInfo = NULL; GSfxInfo = NULL;
return schan; return schan;
} }
@ -1104,39 +1153,17 @@ void FMODSoundRenderer::UpdateSoundParams3D(FSoundChan *chan, float pos[3], floa
return; return;
FMOD::Channel *fchan = (FMOD::Channel *)chan->SysChannel; FMOD::Channel *fchan = (FMOD::Channel *)chan->SysChannel;
// Sounds at the same location as the listener should be head relative, others
// should be world relative.
if (players[consoleplayer].camera != NULL)
{
FMOD_MODE oldmode, mode; FMOD_MODE oldmode, mode;
float cpos[3];
cpos[0] = FIXED2FLOAT(players[consoleplayer].camera->x); if (fchan->getMode(&oldmode) != FMOD_OK)
cpos[2] = FIXED2FLOAT(players[consoleplayer].camera->y);
cpos[1] = FIXED2FLOAT(players[consoleplayer].camera->z);
if (FMOD_OK != fchan->getMode(&oldmode))
{ {
oldmode = FMOD_3D | FMOD_SOFTWARE; oldmode = FMOD_3D | FMOD_SOFTWARE;
} }
if (cpos[0] == pos[0] && cpos[1] == pos[1] && cpos[2] == pos[2]) mode = SetChanHeadSettings(fchan, chan->SfxInfo, pos, chan->ChanFlags, oldmode);
{ if (mode != oldmode)
mode = (oldmode & ~FMOD_3D_WORLDRELATIVE) | FMOD_3D_HEADRELATIVE; { // Only set the mode if it changed.
pos[0] = 0;
pos[1] = 0;
pos[2] = 0;
}
else
{
mode = (oldmode & ~FMOD_3D_HEADRELATIVE) | FMOD_3D_WORLDRELATIVE;
}
// Only set the mode if it changed.
if (((mode ^ oldmode) & (FMOD_3D_WORLDRELATIVE | FMOD_3D_HEADRELATIVE)) == 0)
{
fchan->setMode(mode); fchan->setMode(mode);
} }
}
fchan->set3DAttributes((FMOD_VECTOR *)pos, (FMOD_VECTOR *)vel); fchan->set3DAttributes((FMOD_VECTOR *)pos, (FMOD_VECTOR *)vel);
} }
@ -1352,24 +1379,26 @@ void FMODSoundRenderer::DoLoad(void **slot, sfxinfo_t *sfx)
if (sfx->bLoadRAW || if (sfx->bLoadRAW ||
(((BYTE *)sfxdata)[0] == 3 && ((BYTE *)sfxdata)[1] == 0 && len <= size - 8)) (((BYTE *)sfxdata)[0] == 3 && ((BYTE *)sfxdata)[1] == 0 && len <= size - 8))
{ {
int frequency;
if (sfx->bLoadRAW) if (sfx->bLoadRAW)
{ {
len = Wads.LumpLength (sfx->lumpnum); len = Wads.LumpLength (sfx->lumpnum);
sfx->frequency = (sfx->bForce22050 ? 22050 : 11025); frequency = (sfx->bForce22050 ? 22050 : 11025);
} }
else else
{ {
sfx->frequency = ((WORD *)sfxdata)[1]; frequency = ((WORD *)sfxdata)[1];
if (sfx->frequency == 0) if (frequency == 0)
{ {
sfx->frequency = 11025; frequency = 11025;
} }
sfxstart = sfxdata + 8; sfxstart = sfxdata + 8;
} }
exinfo.length = len; exinfo.length = len;
exinfo.numchannels = 1; exinfo.numchannels = 1;
exinfo.defaultfrequency = sfx->frequency; exinfo.defaultfrequency = frequency;
exinfo.format = FMOD_SOUND_FORMAT_PCM8; exinfo.format = FMOD_SOUND_FORMAT_PCM8;
samplemode |= FMOD_OPENRAW; samplemode |= FMOD_OPENRAW;
@ -1398,19 +1427,6 @@ void FMODSoundRenderer::DoLoad(void **slot, sfxinfo_t *sfx)
continue; continue;
} }
*slot = sample; *slot = sample;
// Get frequency and length for sounds FMOD handled for us.
if (!(samplemode & FMOD_OPENRAW))
{
float freq;
result = sample->getDefaults(&freq, NULL, NULL, NULL);
if (result != FMOD_OK)
{
DPrintf("Failed getting default sound frequency, assuming 11025Hz\n");
freq = 11025;
}
sfx->frequency = (unsigned int)freq;
}
break; break;
} }

View file

@ -24,8 +24,8 @@ public:
void StopStream (SoundStream *stream); void StopStream (SoundStream *stream);
// Starts a sound. // Starts a sound.
FSoundChan *StartSound (sfxinfo_t *sfx, float vol, int pitch, bool looping, bool pauseable); FSoundChan *StartSound (sfxinfo_t *sfx, float vol, int pitch, int chanflags);
FSoundChan *StartSound3D (sfxinfo_t *sfx, float vol, float distscale, int pitch, int priority, bool looping, float pos[3], float vel[3], bool pauseable); FSoundChan *StartSound3D (sfxinfo_t *sfx, float vol, float distscale, int pitch, int priority, float pos[3], float vel[3], int chanflags);
// Stops a sound channel. // Stops a sound channel.
void StopSound (FSoundChan *chan); void StopSound (FSoundChan *chan);
@ -58,7 +58,8 @@ private:
(FMOD_CHANNEL *channel, FMOD_CHANNEL_CALLBACKTYPE type, int cmd, unsigned int data1, unsigned int data2); (FMOD_CHANNEL *channel, FMOD_CHANNEL_CALLBACKTYPE type, int cmd, unsigned int data1, unsigned int data2);
static float F_CALLBACK RolloffCallback(FMOD_CHANNEL *channel, float distance); static float F_CALLBACK RolloffCallback(FMOD_CHANNEL *channel, float distance);
FSoundChan *CommonChannelSetup(FMOD::Channel *chan, bool is3d); FSoundChan *CommonChannelSetup(FMOD::Channel *chan) const;
FMOD_MODE SetChanHeadSettings(FMOD::Channel *chan, sfxinfo_t *sfx, float pos[3], int chanflags, FMOD_MODE oldmode) const;
void DoLoad (void **slot, sfxinfo_t *sfx); void DoLoad (void **slot, sfxinfo_t *sfx);
void getsfx (sfxinfo_t *sfx); void getsfx (sfxinfo_t *sfx);

View file

@ -78,8 +78,8 @@ public:
virtual SoundStream *OpenStream (const char *filename, int flags, int offset, int length) = 0; virtual SoundStream *OpenStream (const char *filename, int flags, int offset, int length) = 0;
// Starts a sound. // Starts a sound.
virtual FSoundChan *StartSound (sfxinfo_t *sfx, float vol, int pitch, bool looping, bool pauseable) = 0; virtual FSoundChan *StartSound (sfxinfo_t *sfx, float vol, int pitch, int chanflags) = 0;
virtual FSoundChan *StartSound3D (sfxinfo_t *sfx, float vol, float distscale, int pitch, int priority, bool looping, float pos[3], float vel[3], bool pauseable) = 0; virtual FSoundChan *StartSound3D (sfxinfo_t *sfx, float vol, float distscale, int pitch, int priority, float pos[3], float vel[3], int chanflags) = 0;
// Stops a sound channel. // Stops a sound channel.
virtual void StopSound (FSoundChan *chan) = 0; virtual void StopSound (FSoundChan *chan) = 0;

View file

@ -339,7 +339,7 @@ void A_PlaySoundEx (AActor *self)
{ {
if (!S_IsActorPlayingSomething (self, channel - NAME_Auto, soundid)) if (!S_IsActorPlayingSomething (self, channel - NAME_Auto, soundid))
{ {
S_LoopedSoundID (self, channel - NAME_Auto, soundid, 1, attenuation); S_SoundID (self, (channel - NAME_Auto) | CHAN_LOOP, soundid, 1, attenuation);
} }
} }
} }

View file

@ -1,37 +0,0 @@
#define NOP 1
#define OR 2
#define XOR 3
#define AND 4
#define MINUS 5
#define PLUS 6
#define MULTIPLY 7
#define DIVIDE 8
#define NEG 9
#define NUM 10
#define SYMNUM 11
#define LPAREN 12
#define RPAREN 13
#define DEFINE 14
#define SYM 15
#define RBRACE 16
#define ENUM 17
#define LBRACE 18
#define COMMA 19
#define EQUALS 20
#define TAG 21
#define LBRACKET 22
#define RBRACKET 23
#define FLAGS 24
#define ARG2 25
#define ARG3 26
#define ARG4 27
#define ARG5 28
#define OR_EQUAL 29
#define COLON 30
#define SECTOR 31
#define SEMICOLON 32
#define NOBITMASK 33
#define BITMASK 34
#define CLEAR 35
#define LSHASSIGN 36
#define RSHASSIGN 37

View file

@ -202,6 +202,11 @@ weapons/bfgf dsbfg
weapons/bfgx dsrxplod weapons/bfgx dsrxplod
weapons/railgf railgf1 weapons/railgf railgf1
$limit weapons/plasmaf 0
$limit weapons/chngun 0
$limit weapons/rocklf 0 // because normal running is almost as fast as a rocket
$limit weapons/rocklx 0 // and the cyberdemon shoots 3 at once
//=========================================================================== //===========================================================================
// //
// MONSTER SOUNDS // MONSTER SOUNDS
@ -284,6 +289,7 @@ chainguy/death1 dspodth1
chainguy/death2 dspodth2 chainguy/death2 dspodth2
chainguy/death3 dspodth3 chainguy/death3 dspodth3
chainguy/attack dsshotgn chainguy/attack dsshotgn
$limit chainguy/attack 0
// Imp // Imp
@ -367,6 +373,8 @@ baby/walk dsbspwlk
baby/attack dsplasma baby/attack dsplasma
baby/shotx dsfirxpl baby/shotx dsfirxpl
$limit baby/attack 0
// Cyber Demon // Cyber Demon
cyber/sight dscybsit cyber/sight dscybsit
@ -452,6 +460,10 @@ misc/spawn dsitmbk // Item respawn
misc/chat dsradio // Doom 2 chat sound misc/chat dsradio // Doom 2 chat sound
misc/chat2 dstink // Chat sound for everything else misc/chat2 dstink // Chat sound for everything else
$limit misc/i_pkup 1
$limit misc/k_pkup 1
$limit misc/w_pkup 1
$limit misc/p_pkup 1
$pitchshift misc/i_pkup 0 $pitchshift misc/i_pkup 0
$pitchshift misc/k_pkup 0 $pitchshift misc/k_pkup 0
$pitchshift misc/chat2 0 $pitchshift misc/chat2 0
@ -543,6 +555,21 @@ weapons/phoenixshoot phosht
weapons/phoenixhit phohit weapons/phoenixhit phohit
weapons/phoenixpowshoot phopow weapons/phoenixpowshoot phopow
$limit weapons/gauntletson 0
$limit weapons/gauntletshit 0
$limit weapons/gauntletspowhit 0
$limit weapons/gauntletsactivate 0
$limit weapons/gauntletsuse 0
$limit weapons/maceexplode 0
$limit weapons/phoenixhit 0
$limit weapons/phoenixpowshoot 1
// [RH] Heretic didn't have these limitless, but they can sound bad if they're not
$limit weapons/bowhit 0
$limit weapons/hornrodshoot 0
$limit weapons/hornrodhit 0
$limit weapons/maceshoot 0
himp/sight impsit himp/sight impsit
himp/attack impat1 himp/attack impat1
himp/pain imppai himp/pain imppai
@ -552,11 +579,17 @@ himp/leaderattack impat2
misc/invuse artiuse misc/invuse artiuse
$limit misc/invuse 1
world/podexplode podexp world/podexplode podexp
world/podgrow newpod world/podgrow newpod
world/wind wind world/wind wind
world/waterfall waterfl world/waterfall waterfl
$limit world/podexplode 0
$limit world/podgrow 0
$limit world/wind 1
misc/i_pkup itemup misc/i_pkup itemup
misc/k_pkup keyup misc/k_pkup keyup
misc/p_pkup artiup misc/p_pkup artiup
@ -565,6 +598,8 @@ $alias misc/w_pkup *weaponlaugh
misc/rain ramrain misc/rain ramrain
misc/spawn respawn misc/spawn respawn
$limit misc/spawn 1
// //
// Minotaur sounds // Minotaur sounds
// //
@ -633,10 +668,24 @@ world/amb10 amb10
world/amb11 amb11 world/amb11 amb11
world/amb12 bstsit world/amb12 bstsit
$limit world/amb1 1
$limit world/amb2 1
$limit world/amb3 1
$limit world/amb4 1
$limit world/amb5 1
$limit world/amb6 1
$limit world/amb7 1
$limit world/amb8 1
$limit world/amb9 1
$limit world/amb10 1
$limit world/amb11 0
misc/chat chat misc/chat chat
misc/teleport telept misc/teleport telept
misc/ripslop ripslop misc/ripslop ripslop
$limit misc/chat 1
world/drip gloop world/drip gloop
world/watersplash gloop world/watersplash gloop
world/lavasizzle burn world/lavasizzle burn
@ -841,6 +890,31 @@ $alias minotaur/attack2 MaulatorHamSwing
$random BishopActiveSounds { BishopActive BishopSight } $random BishopActiveSounds { BishopActive BishopSight }
$random PigActive { PigActive1 PigActive2 } $random PigActive { PigActive1 PigActive2 }
$limit PlayerFighterFailedUse 1
$limit PlayerClericFailedUse 1
$limit PlayerMageFailedUse 1
$limit SorcererBallWoosh 4
$limit SorcererBallBounce 3
$limit SorcererBallExplode 3
$limit SorcererBallPop 3
$limit SorcererBigBallExplode 3
$limit Ambient1 1
$limit Ambient2 1
$limit Ambient3 1
$limit Ambient4 1
$limit Ambient5 1
$limit Ambient6 1
$limit Ambient7 1
$limit Ambient8 1
$limit Ambient9 1
$limit Ambient10 1
$limit Ambient11 1
$limit Ambient12 1
$limit Ambient13 1
$limit Ambient14 1
$limit Ambient15 1
$limit MysticIncant 4
$pitchshift PlayerMageNormalDeath 0 $pitchshift PlayerMageNormalDeath 0
$pitchshift PlayerMageCrazyDeath 0 $pitchshift PlayerMageCrazyDeath 0
$pitchshift PlayerMageExtreme1Death 0 $pitchshift PlayerMageExtreme1Death 0
@ -869,6 +943,20 @@ $alias menu/clear PlatformStop
// Hexen does not have ripslop sound like Heretic // Hexen does not have ripslop sound like Heretic
misc/ripslop dsempty misc/ripslop dsempty
$limit DoorCloseLight 4
$limit PuppyBeat 0
$limit CeantaurPain 0
$limit BishopPain 0
$limit SerpentPain 0
$limit DemonPain 0
$limit WraithPain 0
$limit MaulatorPain 0
$limit EttinPain 0
$limit FireDemonPain 0
$limit SorcererPain 0
$limit DragonPain 0
$endif // ifhexen $endif // ifhexen
//=========================================================================== //===========================================================================
@ -962,6 +1050,10 @@ world/waterfall dswfall
world/waterdrip dswdrip world/waterdrip dswdrip
world/watersplash dswsplsh world/watersplash dswsplsh
$limit world/river 1
$limit world/waterfall 1
$limit world/waterdrip 1
world/drip dsempty // These four satisfy the Heretic/Hexen terrain definitions world/drip dsempty // These four satisfy the Heretic/Hexen terrain definitions
world/sludgegloop dsempty world/sludgegloop dsempty
world/lavasizzle dsempty world/lavasizzle dsempty

View file

@ -177,15 +177,15 @@
Name="Map Translators" Name="Map Translators"
> >
<File <File
RelativePath=".\xlat\doom.txt" RelativePath=".\xlat\doomxlat.txt"
> >
</File> </File>
<File <File
RelativePath=".\xlat\heretic.txt" RelativePath=".\xlat\hereticxlat.txt"
> >
</File> </File>
<File <File
RelativePath=".\xlat\strife.txt" RelativePath=".\xlat\strifexlat.txt"
> >
</File> </File>
<Filter <Filter

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?> <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject <VisualStudioProject
ProjectType="Visual C++" ProjectType="Visual C++"
Version="8,00" Version="8.00"
Name="zdoom" Name="zdoom"
ProjectGUID="{8049475B-5C87-46F9-9358-635218A4EF18}" ProjectGUID="{8049475B-5C87-46F9-9358-635218A4EF18}"
RootNamespace=" zdoom" RootNamespace=" zdoom"
@ -135,112 +135,6 @@
Name="VCPostBuildEventTool" Name="VCPostBuildEventTool"
/> />
</Configuration> </Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
>
<Tool
Name="VCPreBuildEventTool"
Description="Checking svnrevision.h..."
CommandLine="$(OutDir)\updaterevision.exe src src/svnrevision.h"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Debug/zdoom.tlb"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="src\win32;src\sound;src;zlib;src\g_shared;src\g_doom;src\g_raven;src\g_heretic;src\g_hexen;src\g_strife;jpeg-6b;snes_spc\snes_spc"
PreprocessorDefinitions="WIN32,_DEBUG,_WIN32,_WINDOWS,USEASM,_CRTDBG_MAP_ALLOC,HAVE_STRUPR,HAVE_FILELENGTH"
MinimalRebuild="true"
RuntimeLibrary="1"
EnableFunctionLevelLinking="true"
ForceConformanceInForLoopScope="true"
PrecompiledHeaderFile=""
AssemblerOutput="4"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="true"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
CompileAs="0"
DisableSpecificWarnings="4996"
ForcedIncludeFiles=""
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="gdi32.lib user32.lib comctl32.lib shell32.lib advapi32.lib comdlg32.lib ole32.lib dxguid.lib dsound.lib dinput8.lib strmiids.lib wsock32.lib winmm.lib fmodex_vc.lib setupapi.lib ws2_32.lib"
OutputFile="../zdoomd.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories=""
IgnoreDefaultLibraryNames="libcmt;msvcrtd;msvcrt"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/zdoomd.pdb"
SubSystem="2"
StackReserveSize="0"
TerminalServerAware="2"
SetChecksum="false"
TargetMachine="0"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration <Configuration
Name="Release|x64" Name="Release|x64"
OutputDirectory="$(PlatformName)\$(ConfigurationName)" OutputDirectory="$(PlatformName)\$(ConfigurationName)"
@ -355,6 +249,112 @@
Name="VCPostBuildEventTool" Name="VCPostBuildEventTool"
/> />
</Configuration> </Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
>
<Tool
Name="VCPreBuildEventTool"
Description="Checking svnrevision.h..."
CommandLine="$(OutDir)\updaterevision.exe src src/svnrevision.h"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Debug/zdoom.tlb"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="src\win32;src\sound;src;zlib;src\g_shared;src\g_doom;src\g_raven;src\g_heretic;src\g_hexen;src\g_strife;jpeg-6b;snes_spc\snes_spc"
PreprocessorDefinitions="WIN32,_DEBUG,_WIN32,_WINDOWS,USEASM,_CRTDBG_MAP_ALLOC,HAVE_STRUPR,HAVE_FILELENGTH"
MinimalRebuild="true"
RuntimeLibrary="1"
EnableFunctionLevelLinking="true"
ForceConformanceInForLoopScope="true"
PrecompiledHeaderFile=""
AssemblerOutput="4"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="true"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
CompileAs="0"
DisableSpecificWarnings="4996"
ForcedIncludeFiles=""
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="gdi32.lib user32.lib comctl32.lib shell32.lib advapi32.lib comdlg32.lib ole32.lib dxguid.lib dsound.lib dinput8.lib strmiids.lib wsock32.lib winmm.lib fmodex_vc.lib setupapi.lib ws2_32.lib"
OutputFile="../zdoomd.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories=""
IgnoreDefaultLibraryNames="libcmt;msvcrtd;msvcrt"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/zdoomd.pdb"
SubSystem="2"
StackReserveSize="0"
TerminalServerAware="2"
SetChecksum="false"
TargetMachine="0"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration <Configuration
Name="Debug|x64" Name="Debug|x64"
OutputDirectory="$(PlatformName)\$(ConfigurationName)" OutputDirectory="$(PlatformName)\$(ConfigurationName)"
@ -920,16 +920,6 @@
Outputs="&quot;src/$(InputName).h&quot;" Outputs="&quot;src/$(InputName).h&quot;"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Creating $(InputName).h from src/$(InputFileName)"
CommandLine="tools\re2c\re2c --no-generation-date -s -o &quot;src/$(InputName).h&quot; &quot;src/$(InputFileName)&quot;&#x0D;&#x0A;"
Outputs="&quot;src/$(InputName).h&quot;"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
> >
@ -940,6 +930,16 @@
Outputs="&quot;src/$(InputName).h&quot;" Outputs="&quot;src/$(InputName).h&quot;"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Creating $(InputName).h from src/$(InputFileName)"
CommandLine="tools\re2c\re2c --no-generation-date -s -o &quot;src/$(InputName).h&quot; &quot;src/$(InputFileName)&quot;&#x0D;&#x0A;"
Outputs="&quot;src/$(InputName).h&quot;"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
> >
@ -1530,16 +1530,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
> >
@ -1550,6 +1540,16 @@
Outputs="$(IntDir)/$(InputName).obj" Outputs="$(IntDir)/$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
> >
@ -1574,16 +1574,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
> >
@ -1594,6 +1584,16 @@
Outputs="$(IntDir)/$(InputName).obj" Outputs="$(IntDir)/$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
> >
@ -1618,16 +1618,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
> >
@ -1638,6 +1628,16 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
> >
@ -1662,16 +1662,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
> >
@ -1682,6 +1672,16 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
> >
@ -1706,16 +1706,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
> >
@ -1726,6 +1716,16 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
> >
@ -1886,6 +1886,14 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release|x64"
ExcludedFromBuild="true"
>
<Tool
Name="VCCustomBuildTool"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
> >
@ -1896,14 +1904,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release|x64"
ExcludedFromBuild="true"
>
<Tool
Name="VCCustomBuildTool"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -2753,6 +2753,14 @@
AdditionalIncludeDirectories="src\win32;$(NoInherit)" AdditionalIncludeDirectories="src\win32;$(NoInherit)"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="src\win32;$(NoInherit)"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
> >
@ -2762,14 +2770,6 @@
AdditionalIncludeDirectories="src\win32;$(NoInherit)" AdditionalIncludeDirectories="src\win32;$(NoInherit)"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="src\win32;$(NoInherit)"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
> >
@ -2924,7 +2924,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -2932,7 +2932,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -2960,7 +2960,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -2968,7 +2968,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -2997,7 +2997,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3006,7 +3006,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3036,7 +3036,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3044,7 +3044,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3073,7 +3073,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3082,7 +3082,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3113,7 +3113,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3122,7 +3122,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3152,7 +3152,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3160,7 +3160,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3189,7 +3189,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3198,7 +3198,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3229,7 +3229,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3238,7 +3238,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3269,7 +3269,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3278,7 +3278,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3308,7 +3308,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3316,7 +3316,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3344,7 +3344,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3352,7 +3352,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3380,7 +3380,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3388,7 +3388,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3416,7 +3416,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3424,7 +3424,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3454,7 +3454,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3464,7 +3464,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3540,7 +3540,7 @@
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
Description="Generating xlat_parser.c and xlat_parser.h..." Description="Generating xlat_parser.c and xlat_parser.h..."
CommandLine="tools\lemon\lemon.exe &quot;$(InputPath)&quot;&#x0D;&#x0A;" CommandLine="tools\lemon\lemon.exe &quot;$(InputPath)&quot;&#x0D;&#x0A;"
Outputs="$(InputDir)xlat_parser.c;$(InputDir)xlat_parser.h" Outputs="$(InputDir)xlat_parser.c:$(InputDir)xlat_parser.h"
/> />
</FileConfiguration> </FileConfiguration>
</File> </File>