2006-02-24 04:48:15 +00:00
|
|
|
// Emacs style mode select -*- C++ -*-
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
|
|
|
//
|
|
|
|
// This source is available for distribution and/or modification
|
|
|
|
// only under the terms of the DOOM Source Code License as
|
|
|
|
// published by id Software. All rights reserved.
|
|
|
|
//
|
|
|
|
// The source is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
|
|
|
|
// for more details.
|
|
|
|
//
|
|
|
|
// DESCRIPTION:
|
|
|
|
// The not so system specific sound interface.
|
|
|
|
//
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __S_SOUND__
|
|
|
|
#define __S_SOUND__
|
|
|
|
|
|
|
|
#include "m_fixed.h"
|
|
|
|
#include "tarray.h"
|
|
|
|
|
|
|
|
class AActor;
|
- Updated lempar.c to v1.31.
- Added .txt files to the list of types (wad, zip, and pk3) that can be
loaded without listing them after -file.
- Fonts that are created by the ACS setfont command to wrap a texture now
support animated textures.
- FON2 fonts can now use their full palette for CR_UNTRANSLATED when drawn
with the hardware 2D path instead of being restricted to the game palette.
- Fixed: Toggling vid_vsync would reset the displayed fullscreen gamma to 1
on a Radeon 9000.
- Added back the off-by-one palette handling, but in a much more limited
scope than before. The skipped entry is assumed to always be at 248, and
it is assumed that all Shader Model 1.4 cards suffer from this. That's
because all SM1.4 cards are based on variants of the ATI R200 core, and the
RV250 in a Radeon 9000 craps up like this. I see no reason to assume that
other flavors of the R200 are any different. (Interesting note: With the
Radeon 9000, D3DTADDRESS_CLAMP is an invalid address mode when using the
debug Direct3D 9 runtime, but it works perfectly fine with the retail
Direct3D 9 runtime.) (Insight: The R200 probably uses bytes for all its
math inside pixel shaders. That would explain perfectly why I can't use
constants greater than 1 with PS1.4 and why it can't do an exact mapping to
every entry in the color palette.
- Fixed: The software shaded drawer did not work for 2D, because its selected
"color"map was replaced with the identitymap before being used.
- Fixed: I cannot use Printf to output messages before the framebuffer was
completely setup, meaning that Shader Model 1.4 cards could not change
resolution.
- I have decided to let remap palettes specify variable alpha values for
their colors. D3DFB no longer forces them to 255.
- Updated re2c to version 0.12.3.
- Fixed: A_Wander used threshold as a timer, when it should have used
reactiontime.
- Fixed: A_CustomRailgun would not fire at all for actors without a target
when the aim parameter was disabled.
- Made the warp command work in multiplayer, again courtesy of Karate Chris.
- Fixed: Trying to spawn a bot while not in a game made for a crashing time.
(Patch courtesy of Karate Chris.)
- Removed some floating point math from hu_scores.cpp that somebody's GCC
gave warnings for (not mine, though).
- Fixed: The SBarInfo drawbar command crashed if the sprite image was
unavailable.
- Fixed: FString::operator=(const char *) did not release its old buffer when
being assigned to the null string.
- The scanner no longer has an upper limit on the length of strings it
accepts, though short strings will be faster than long ones.
- Moved all the text scanning functions into a class. Mainly, this means that
multiple script scanner states can be stored without being forced to do so
recursively. I think I might be taking advantage of that in the near
future. Possibly. Maybe.
- Removed some potential buffer overflows from the decal parser.
- Applied Blzut3's SBARINFO update #9:
* Fixed: When using even length values in drawnumber it would cap to a 98
value instead of a 99 as intended.
* The SBarInfo parser can now accept negatives for coordinates. This
doesn't allow much right now, but later I plan to add better fullscreen
hud support in which the negatives will be more useful. This also cleans
up the source a bit since all calls for (x, y) coordinates are with the
function getCoordinates().
- Added support for stencilling actors.
- Added support for non-black colors specified with DTA_ColorOverlay to the
software renderer.
- Fixed: The inverse, gold, red, and green fixed colormaps each allocated
space for 32 different colormaps, even though each only used the first one.
- Added two new blending flags to make reverse subtract blending more useful:
STYLEF_InvertSource and STYLEF_InvertOverlay. These invert the color that
gets blended with the background, since that seems like a good idea for
reverse subtraction. They also work with the other two blending operations.
- Added subtract and reverse subtract blending operations to the renderer.
Since the ERenderStyle enumeration was getting rather unwieldy, I converted
it into a new FRenderStyle structure that lets each parameter of the
blending equation be set separately. This simplified the set up for the
blend quite a bit, and it means a number of new combinations are available
by setting the parameters properly.
SVN r710 (trunk)
2008-01-25 23:57:44 +00:00
|
|
|
class FScanner;
|
2006-02-24 04:48:15 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// SoundFX struct.
|
|
|
|
//
|
|
|
|
struct sfxinfo_t
|
|
|
|
{
|
2008-03-21 05:13:59 +00:00
|
|
|
// Next field is for use by the system sound interface.
|
|
|
|
// A non-null data means the sound has been loaded.
|
|
|
|
void *data;
|
|
|
|
|
2007-02-04 00:33:17 +00:00
|
|
|
FString name; // [RH] Sound name defined in SNDINFO
|
2008-03-21 05:13:59 +00:00
|
|
|
int lumpnum; // lump number of sfx
|
2006-02-24 04:48:15 +00:00
|
|
|
|
2008-03-21 05:13:59 +00:00
|
|
|
unsigned int next, index; // [RH] For hashing
|
2008-03-25 04:42:26 +00:00
|
|
|
// unsigned int frequency; // [RH] Preferred playback rate
|
|
|
|
float Volume;
|
2006-02-24 04:48:15 +00:00
|
|
|
|
2008-03-21 05:13:59 +00:00
|
|
|
BYTE PitchMask;
|
2008-03-30 08:32:44 +00:00
|
|
|
SWORD NearLimit; // 0 means unlimited
|
2006-02-24 04:48:15 +00:00
|
|
|
|
|
|
|
WORD bRandomHeader:1;
|
|
|
|
WORD bPlayerReserve:1;
|
|
|
|
WORD bForce11025:1;
|
|
|
|
WORD bForce22050:1;
|
|
|
|
WORD bLoadRAW:1;
|
|
|
|
WORD bPlayerCompat:1;
|
|
|
|
WORD b16bit:1;
|
|
|
|
WORD bUsed:1;
|
|
|
|
WORD bSingular:1;
|
2007-02-04 00:22:56 +00:00
|
|
|
WORD bTentative:1;
|
2008-03-22 03:33:41 +00:00
|
|
|
WORD RolloffType:2;
|
2006-02-24 04:48:15 +00:00
|
|
|
|
2008-03-30 08:32:44 +00:00
|
|
|
unsigned int link;
|
|
|
|
enum { NO_LINK = 0xffffffff };
|
2008-03-22 03:33:41 +00:00
|
|
|
|
|
|
|
float MinDistance;
|
|
|
|
union { float MaxDistance, RolloffFactor; };
|
|
|
|
};
|
|
|
|
|
|
|
|
// Rolloff types
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
ROLLOFF_Doom, // Linear rolloff with a logarithmic volume scale
|
|
|
|
ROLLOFF_Linear, // Linear rolloff with a linear volume scale
|
|
|
|
ROLLOFF_Log, // Logarithmic rolloff (standard hardware type)
|
|
|
|
ROLLOFF_Custom // Lookup volume from SNDCURVE
|
2006-02-24 04:48:15 +00:00
|
|
|
};
|
|
|
|
|
2008-06-15 02:25:09 +00:00
|
|
|
int S_FindSound (const char *logicalname);
|
|
|
|
|
2006-02-24 04:48:15 +00:00
|
|
|
// the complete set of sound effects
|
|
|
|
extern TArray<sfxinfo_t> S_sfx;
|
|
|
|
|
2008-06-15 02:25:09 +00:00
|
|
|
// An index into the S_sfx[] array.
|
|
|
|
class FSoundID
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
FSoundID()
|
|
|
|
{
|
|
|
|
ID = 0;
|
|
|
|
}
|
|
|
|
FSoundID(int id)
|
|
|
|
{
|
|
|
|
ID = id;
|
|
|
|
}
|
|
|
|
FSoundID(const char *name)
|
|
|
|
{
|
|
|
|
ID = S_FindSound(name);
|
|
|
|
}
|
|
|
|
FSoundID(const FString &name)
|
|
|
|
{
|
|
|
|
ID = S_FindSound(name);
|
|
|
|
}
|
|
|
|
FSoundID(const FSoundID &other)
|
|
|
|
{
|
|
|
|
ID = other.ID;
|
|
|
|
}
|
|
|
|
FSoundID &operator=(const FSoundID &other)
|
|
|
|
{
|
|
|
|
ID = other.ID;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
FSoundID &operator=(const char *name)
|
|
|
|
{
|
|
|
|
ID = S_FindSound(name);
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
FSoundID &operator=(const FString &name)
|
|
|
|
{
|
|
|
|
ID = S_FindSound(name);
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
operator int() const
|
|
|
|
{
|
|
|
|
return ID;
|
|
|
|
}
|
|
|
|
operator FString() const
|
|
|
|
{
|
|
|
|
return ID ? S_sfx[ID].name : "";
|
|
|
|
}
|
|
|
|
operator const char *() const
|
|
|
|
{
|
|
|
|
return ID ? S_sfx[ID].name.GetChars() : NULL;
|
|
|
|
}
|
|
|
|
private:
|
|
|
|
int ID;
|
|
|
|
protected:
|
|
|
|
enum EDummy { NoInit };
|
|
|
|
FSoundID(EDummy) {}
|
|
|
|
};
|
|
|
|
|
|
|
|
class FSoundIDNoInit : public FSoundID
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
FSoundIDNoInit() : FSoundID(NoInit) {}
|
|
|
|
|
|
|
|
FSoundID &operator=(const FSoundID &other)
|
|
|
|
{
|
|
|
|
return FSoundID::operator=(other);
|
|
|
|
}
|
|
|
|
FSoundID &operator=(const char *name)
|
|
|
|
{
|
|
|
|
return FSoundID::operator=(name);
|
|
|
|
}
|
|
|
|
FSoundID &operator=(const FString &name)
|
|
|
|
{
|
|
|
|
return FSoundID::operator=(name);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
FArchive &operator<<(FArchive &arc, FSoundID &sid);
|
|
|
|
|
2008-03-22 03:33:41 +00:00
|
|
|
// Default rolloff information.
|
|
|
|
extern int S_RolloffType;
|
|
|
|
extern float S_MinDistance;
|
|
|
|
extern float S_MaxDistanceOrRolloffFactor;
|
|
|
|
extern BYTE *S_SoundCurve;
|
|
|
|
extern int S_SoundCurveSize;
|
|
|
|
|
2008-03-21 05:13:59 +00:00
|
|
|
// Information about one playing sound.
|
2008-06-15 02:25:09 +00:00
|
|
|
struct sector_t;
|
2008-03-21 05:13:59 +00:00
|
|
|
struct FSoundChan
|
|
|
|
{
|
|
|
|
void *SysChannel;// Channel information from the system interface.
|
|
|
|
FSoundChan *NextChan; // Next channel in this list.
|
|
|
|
FSoundChan **PrevChan; // Previous channel in this list.
|
|
|
|
AActor *Mover; // Used for velocity.
|
2008-06-15 02:25:09 +00:00
|
|
|
sector_t *Sector; // Sector for area sounds.
|
2008-03-21 05:13:59 +00:00
|
|
|
fixed_t *Pt; // Origin of sound.
|
|
|
|
sfxinfo_t *SfxInfo; // Sound information.
|
|
|
|
fixed_t X,Y,Z; // Origin if Mover is NULL.
|
|
|
|
int SoundID; // Sound ID of playing sound
|
|
|
|
int OrgID; // Sound ID of sound used to start this channel
|
|
|
|
float Volume;
|
2008-03-22 03:33:41 +00:00
|
|
|
float DistanceScale;
|
2008-03-21 05:13:59 +00:00
|
|
|
BYTE EntChannel; // Actor's sound channel.
|
2008-03-25 04:42:26 +00:00
|
|
|
int ChanFlags;
|
2008-03-21 05:13:59 +00:00
|
|
|
};
|
2008-04-19 22:47:54 +00:00
|
|
|
extern FSoundChan *Channels;
|
2008-03-21 05:13:59 +00:00
|
|
|
|
|
|
|
FSoundChan *S_GetChannel(void *syschan);
|
|
|
|
void S_ReturnChannel(FSoundChan *chan);
|
|
|
|
|
|
|
|
void S_LinkChannel(FSoundChan *chan, FSoundChan **head);
|
|
|
|
void S_UnlinkChannel(FSoundChan *chan);
|
|
|
|
|
2006-02-24 04:48:15 +00:00
|
|
|
// Initializes sound stuff, including volume
|
|
|
|
// Sets channels, SFX and music volume,
|
|
|
|
// allocates channel buffer, sets S_sfx lookup.
|
|
|
|
//
|
|
|
|
void S_Init ();
|
2006-12-24 23:08:49 +00:00
|
|
|
void S_InitData ();
|
2006-05-12 03:14:40 +00:00
|
|
|
void S_Shutdown ();
|
2006-02-24 04:48:15 +00:00
|
|
|
|
|
|
|
// Per level startup code.
|
|
|
|
// Kills playing sounds at start of level and starts new music.
|
|
|
|
//
|
|
|
|
void S_Start ();
|
|
|
|
|
|
|
|
// Called after a level is loaded. Ensures that most sounds are loaded.
|
|
|
|
void S_PrecacheLevel ();
|
|
|
|
|
|
|
|
// Loads a sound, including any random sounds it might reference.
|
|
|
|
void S_CacheSound (sfxinfo_t *sfx);
|
|
|
|
|
|
|
|
// Start sound for thing at <ent>
|
2008-06-15 02:25:09 +00:00
|
|
|
void S_Sound (int channel, FSoundID sfxid, float volume, int attenuation);
|
|
|
|
void S_Sound (AActor *ent, int channel, FSoundID sfxid, float volume, int attenuation);
|
|
|
|
void S_Sound (fixed_t *pt, int channel, FSoundID sfxid, float volume, int attenuation);
|
|
|
|
void S_Sound (fixed_t x, fixed_t y, fixed_t z, int channel, FSoundID sfxid, float volume, int attenuation);
|
|
|
|
void S_Sound (sector_t *sec, int channel, FSoundID sfxid, float volume, int attenuation);
|
2006-02-24 04:48:15 +00:00
|
|
|
|
|
|
|
// sound channels
|
|
|
|
// channel 0 never willingly overrides
|
|
|
|
// other channels (1-7) always override a playing sound on that channel
|
|
|
|
//
|
|
|
|
// CHAN_AUTO searches down from channel 7 until it finds a channel not in use
|
|
|
|
// CHAN_WEAPON is for weapons
|
|
|
|
// CHAN_VOICE is for oof, sight, or other voice sounds
|
|
|
|
// CHAN_ITEM is for small things and item pickup
|
|
|
|
// CHAN_BODY is for generic body sounds
|
2008-03-21 05:13:59 +00:00
|
|
|
// CHAN_PICKUP can optionally be set as a local sound only for "compatibility"
|
2006-02-24 04:48:15 +00:00
|
|
|
|
|
|
|
#define CHAN_AUTO 0
|
|
|
|
#define CHAN_WEAPON 1
|
|
|
|
#define CHAN_VOICE 2
|
|
|
|
#define CHAN_ITEM 3
|
|
|
|
#define CHAN_BODY 4
|
|
|
|
// modifier flags
|
|
|
|
#define CHAN_LISTENERZ 8
|
|
|
|
#define CHAN_IMMOBILE 16
|
|
|
|
#define CHAN_MAYBE_LOCAL 32
|
2006-05-23 04:25:49 +00:00
|
|
|
#define CHAN_NOPAUSE 64 // do not pause this sound in menus
|
2008-06-15 02:25:09 +00:00
|
|
|
#define CHAN_AREA 128 // Sound plays from all around. Only valid with sector sounds.
|
2008-03-25 04:42:26 +00:00
|
|
|
#define CHAN_LOOP 256
|
2008-06-15 02:25:09 +00:00
|
|
|
|
|
|
|
// Channel alias for sector sounds. These define how listener height is
|
|
|
|
// used when calculating 3D sound volume.
|
|
|
|
#define CHAN_FLOOR 1 // Sound comes from the floor.
|
|
|
|
#define CHAN_CEILING 2 // Sound comes from the ceiling.
|
|
|
|
#define CHAN_FULLHEIGHT 3 // Sound comes entire height of the sector.
|
|
|
|
|
|
|
|
#define CHAN_IS3D (1<<24) // internal flag
|
2008-03-25 04:42:26 +00:00
|
|
|
|
2006-02-24 04:48:15 +00:00
|
|
|
#define CHAN_PICKUP (CHAN_ITEM|CHAN_MAYBE_LOCAL)
|
|
|
|
|
|
|
|
// sound attenuation values
|
|
|
|
#define ATTN_NONE 0 // full volume the entire level
|
|
|
|
#define ATTN_NORM 1
|
|
|
|
#define ATTN_IDLE 2
|
|
|
|
#define ATTN_STATIC 3 // diminish very rapidly with distance
|
|
|
|
|
|
|
|
int S_PickReplacement (int refid);
|
|
|
|
void S_CacheRandomSound (sfxinfo_t *sfx);
|
|
|
|
|
2008-03-21 05:13:59 +00:00
|
|
|
// Checks if a copy of this sound is already playing.
|
|
|
|
bool S_CheckSingular (int sound_id);
|
2006-02-24 04:48:15 +00:00
|
|
|
|
|
|
|
// Stops a sound emanating from one of an entity's channels
|
|
|
|
void S_StopSound (AActor *ent, int channel);
|
|
|
|
void S_StopSound (fixed_t *pt, int channel);
|
|
|
|
|
|
|
|
// Stop sound for all channels
|
|
|
|
void S_StopAllChannels (void);
|
|
|
|
|
|
|
|
// Is the sound playing on one of the entity's channels?
|
|
|
|
bool S_GetSoundPlayingInfo (AActor *ent, int sound_id);
|
|
|
|
bool S_GetSoundPlayingInfo (fixed_t *pt, int sound_id);
|
2006-08-31 00:16:12 +00:00
|
|
|
bool S_IsActorPlayingSomething (AActor *actor, int channel, int sound_id);
|
2006-02-24 04:48:15 +00:00
|
|
|
|
|
|
|
// Moves all sounds from one mobj to another
|
|
|
|
void S_RelinkSound (AActor *from, AActor *to);
|
|
|
|
|
|
|
|
// Start music using <music_name>
|
|
|
|
bool S_StartMusic (const char *music_name);
|
|
|
|
|
|
|
|
// Start music using <music_name>, and set whether looping
|
|
|
|
bool S_ChangeMusic (const char *music_name, int order=0, bool looping=true, bool force=false);
|
|
|
|
|
|
|
|
// Start playing a cd track as music
|
|
|
|
bool S_ChangeCDMusic (int track, unsigned int id=0, bool looping=true);
|
|
|
|
|
|
|
|
void S_RestartMusic ();
|
|
|
|
|
|
|
|
int S_GetMusic (char **name);
|
|
|
|
|
|
|
|
// Stops the music for sure.
|
|
|
|
void S_StopMusic (bool force);
|
|
|
|
|
|
|
|
// Stop and resume music, during game PAUSE.
|
2006-05-21 02:10:16 +00:00
|
|
|
void S_PauseSound (bool notmusic);
|
2006-02-24 04:48:15 +00:00
|
|
|
void S_ResumeSound ();
|
|
|
|
|
|
|
|
//
|
|
|
|
// Updates music & sounds
|
|
|
|
//
|
|
|
|
void S_UpdateSounds (void *listener);
|
|
|
|
|
|
|
|
// [RH] S_sfx "maintenance" routines
|
|
|
|
void S_ParseSndInfo ();
|
2008-05-20 04:02:49 +00:00
|
|
|
void S_ParseReverbDef ();
|
|
|
|
void S_UnloadReverbDef ();
|
2006-02-24 04:48:15 +00:00
|
|
|
|
|
|
|
void S_HashSounds ();
|
|
|
|
int S_FindSoundNoHash (const char *logicalname);
|
|
|
|
bool S_AreSoundsEquivalent (AActor *actor, int id1, int id2);
|
|
|
|
bool S_AreSoundsEquivalent (AActor *actor, const char *name1, const char *name2);
|
|
|
|
int S_LookupPlayerSound (const char *playerclass, int gender, const char *logicalname);
|
2008-06-15 02:25:09 +00:00
|
|
|
int S_LookupPlayerSound (const char *playerclass, int gender, FSoundID refid);
|
|
|
|
int S_FindSkinnedSound (AActor *actor, FSoundID refid);
|
2007-02-04 00:22:56 +00:00
|
|
|
int S_FindSkinnedSoundEx (AActor *actor, const char *logicalname, const char *extendedname);
|
2006-02-24 04:48:15 +00:00
|
|
|
int S_FindSoundByLump (int lump);
|
- Updated lempar.c to v1.31.
- Added .txt files to the list of types (wad, zip, and pk3) that can be
loaded without listing them after -file.
- Fonts that are created by the ACS setfont command to wrap a texture now
support animated textures.
- FON2 fonts can now use their full palette for CR_UNTRANSLATED when drawn
with the hardware 2D path instead of being restricted to the game palette.
- Fixed: Toggling vid_vsync would reset the displayed fullscreen gamma to 1
on a Radeon 9000.
- Added back the off-by-one palette handling, but in a much more limited
scope than before. The skipped entry is assumed to always be at 248, and
it is assumed that all Shader Model 1.4 cards suffer from this. That's
because all SM1.4 cards are based on variants of the ATI R200 core, and the
RV250 in a Radeon 9000 craps up like this. I see no reason to assume that
other flavors of the R200 are any different. (Interesting note: With the
Radeon 9000, D3DTADDRESS_CLAMP is an invalid address mode when using the
debug Direct3D 9 runtime, but it works perfectly fine with the retail
Direct3D 9 runtime.) (Insight: The R200 probably uses bytes for all its
math inside pixel shaders. That would explain perfectly why I can't use
constants greater than 1 with PS1.4 and why it can't do an exact mapping to
every entry in the color palette.
- Fixed: The software shaded drawer did not work for 2D, because its selected
"color"map was replaced with the identitymap before being used.
- Fixed: I cannot use Printf to output messages before the framebuffer was
completely setup, meaning that Shader Model 1.4 cards could not change
resolution.
- I have decided to let remap palettes specify variable alpha values for
their colors. D3DFB no longer forces them to 255.
- Updated re2c to version 0.12.3.
- Fixed: A_Wander used threshold as a timer, when it should have used
reactiontime.
- Fixed: A_CustomRailgun would not fire at all for actors without a target
when the aim parameter was disabled.
- Made the warp command work in multiplayer, again courtesy of Karate Chris.
- Fixed: Trying to spawn a bot while not in a game made for a crashing time.
(Patch courtesy of Karate Chris.)
- Removed some floating point math from hu_scores.cpp that somebody's GCC
gave warnings for (not mine, though).
- Fixed: The SBarInfo drawbar command crashed if the sprite image was
unavailable.
- Fixed: FString::operator=(const char *) did not release its old buffer when
being assigned to the null string.
- The scanner no longer has an upper limit on the length of strings it
accepts, though short strings will be faster than long ones.
- Moved all the text scanning functions into a class. Mainly, this means that
multiple script scanner states can be stored without being forced to do so
recursively. I think I might be taking advantage of that in the near
future. Possibly. Maybe.
- Removed some potential buffer overflows from the decal parser.
- Applied Blzut3's SBARINFO update #9:
* Fixed: When using even length values in drawnumber it would cap to a 98
value instead of a 99 as intended.
* The SBarInfo parser can now accept negatives for coordinates. This
doesn't allow much right now, but later I plan to add better fullscreen
hud support in which the negatives will be more useful. This also cleans
up the source a bit since all calls for (x, y) coordinates are with the
function getCoordinates().
- Added support for stencilling actors.
- Added support for non-black colors specified with DTA_ColorOverlay to the
software renderer.
- Fixed: The inverse, gold, red, and green fixed colormaps each allocated
space for 32 different colormaps, even though each only used the first one.
- Added two new blending flags to make reverse subtract blending more useful:
STYLEF_InvertSource and STYLEF_InvertOverlay. These invert the color that
gets blended with the background, since that seems like a good idea for
reverse subtraction. They also work with the other two blending operations.
- Added subtract and reverse subtract blending operations to the renderer.
Since the ERenderStyle enumeration was getting rather unwieldy, I converted
it into a new FRenderStyle structure that lets each parameter of the
blending equation be set separately. This simplified the set up for the
blend quite a bit, and it means a number of new combinations are available
by setting the parameters properly.
SVN r710 (trunk)
2008-01-25 23:57:44 +00:00
|
|
|
int S_AddSound (const char *logicalname, const char *lumpname, FScanner *sc=NULL); // Add sound by lumpname
|
2006-02-24 04:48:15 +00:00
|
|
|
int S_AddSoundLump (const char *logicalname, int lump); // Add sound by lump index
|
|
|
|
int S_AddPlayerSound (const char *playerclass, const int gender, int refid, const char *lumpname);
|
2006-06-11 11:28:48 +00:00
|
|
|
int S_AddPlayerSound (const char *playerclass, const int gender, int refid, int lumpnum, bool fromskin=false);
|
|
|
|
int S_AddPlayerSoundExisting (const char *playerclass, const int gender, int refid, int aliasto, bool fromskin=false);
|
2006-02-24 04:48:15 +00:00
|
|
|
void S_ShrinkPlayerSoundLists ();
|
|
|
|
|
|
|
|
// [RH] Prints sound debug info to the screen.
|
|
|
|
// Modelled after Hexen's noise cheat.
|
|
|
|
void S_NoiseDebug ();
|
|
|
|
|
VERY IMPORTANT NOTE FOR ANYBODY BUILDING FROM THE TRUNK: This commit adds support
for FMOD Ex while at the same time removing support for FMOD 3. Be sure to update
your SDKs. GCC users, be sure to do a "make cleandep && make clean" before
building, or you will likely get inexplicable errors.
- Fixed: If you wanted to make cleandep with MinGW, you had to specifically
specify Makefile.mingw as the makefile to use.
- Added a normalizer to the OPL synth. It helped bring up the volume a little,
but not nearly as much as I would have liked.
- Removed MIDI Mapper references. It doesn't work with the stream API, and
it doesn't really exist on NT kernels, either.
- Reworked music volume: Except for MIDI, all music volume is controlled
through GSnd and not at the individual song level.
- Removed the mididevice global variable.
- Removed snd_midivolume. Now that all music uses a linear volume scale,
there's no need for two separate music volume controls.
- Increased snd_samplerate default up to 48000.
- Added snd_format, defaulting to "PCM-16".
- Added snd_speakermode, defaulting to "Auto".
- Replaced snd_fpu with snd_resampler, defaulting to "Linear".
- Bumped the snd_channels default up from a pitiful 12 to 32.
- Changed snd_3d default to true. The new cvar snd_hw3d determines if
hardware 3D support is used and default to false.
- Removed the libFLAC source, since FMOD Ex has native FLAC support.
- Removed the altsound code, since it was terribly gimped in comparison to
the FMOD code. It's original purpose was to have been as a springboard for
writing a non-FMOD sound system for Unix-y systems, but that never
happened.
- Finished preliminary FMOD Ex support.
SVN r789 (trunk)
2008-03-09 03:13:49 +00:00
|
|
|
// For convenience, this structure matches FMOD_REVERB_PROPERTIES.
|
2006-02-24 04:48:15 +00:00
|
|
|
// Since I can't very well #include system-specific stuff in the
|
|
|
|
// main game files, I duplicate it here.
|
|
|
|
struct REVERB_PROPERTIES
|
VERY IMPORTANT NOTE FOR ANYBODY BUILDING FROM THE TRUNK: This commit adds support
for FMOD Ex while at the same time removing support for FMOD 3. Be sure to update
your SDKs. GCC users, be sure to do a "make cleandep && make clean" before
building, or you will likely get inexplicable errors.
- Fixed: If you wanted to make cleandep with MinGW, you had to specifically
specify Makefile.mingw as the makefile to use.
- Added a normalizer to the OPL synth. It helped bring up the volume a little,
but not nearly as much as I would have liked.
- Removed MIDI Mapper references. It doesn't work with the stream API, and
it doesn't really exist on NT kernels, either.
- Reworked music volume: Except for MIDI, all music volume is controlled
through GSnd and not at the individual song level.
- Removed the mididevice global variable.
- Removed snd_midivolume. Now that all music uses a linear volume scale,
there's no need for two separate music volume controls.
- Increased snd_samplerate default up to 48000.
- Added snd_format, defaulting to "PCM-16".
- Added snd_speakermode, defaulting to "Auto".
- Replaced snd_fpu with snd_resampler, defaulting to "Linear".
- Bumped the snd_channels default up from a pitiful 12 to 32.
- Changed snd_3d default to true. The new cvar snd_hw3d determines if
hardware 3D support is used and default to false.
- Removed the libFLAC source, since FMOD Ex has native FLAC support.
- Removed the altsound code, since it was terribly gimped in comparison to
the FMOD code. It's original purpose was to have been as a springboard for
writing a non-FMOD sound system for Unix-y systems, but that never
happened.
- Finished preliminary FMOD Ex support.
SVN r789 (trunk)
2008-03-09 03:13:49 +00:00
|
|
|
{
|
|
|
|
int Instance;
|
|
|
|
int Environment;
|
2006-02-24 04:48:15 +00:00
|
|
|
float EnvSize;
|
|
|
|
float EnvDiffusion;
|
|
|
|
int Room;
|
|
|
|
int RoomHF;
|
|
|
|
int RoomLF;
|
|
|
|
float DecayTime;
|
|
|
|
float DecayHFRatio;
|
|
|
|
float DecayLFRatio;
|
|
|
|
int Reflections;
|
|
|
|
float ReflectionsDelay;
|
|
|
|
float ReflectionsPan0;
|
|
|
|
float ReflectionsPan1;
|
|
|
|
float ReflectionsPan2;
|
|
|
|
int Reverb;
|
|
|
|
float ReverbDelay;
|
|
|
|
float ReverbPan0;
|
|
|
|
float ReverbPan1;
|
|
|
|
float ReverbPan2;
|
|
|
|
float EchoTime;
|
|
|
|
float EchoDepth;
|
|
|
|
float ModulationTime;
|
|
|
|
float ModulationDepth;
|
|
|
|
float AirAbsorptionHF;
|
|
|
|
float HFReference;
|
|
|
|
float LFReference;
|
|
|
|
float RoomRolloffFactor;
|
|
|
|
float Diffusion;
|
|
|
|
float Density;
|
|
|
|
unsigned int Flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define REVERB_FLAGS_DECAYTIMESCALE 0x00000001
|
|
|
|
#define REVERB_FLAGS_REFLECTIONSSCALE 0x00000002
|
|
|
|
#define REVERB_FLAGS_REFLECTIONSDELAYSCALE 0x00000004
|
|
|
|
#define REVERB_FLAGS_REVERBSCALE 0x00000008
|
|
|
|
#define REVERB_FLAGS_REVERBDELAYSCALE 0x00000010
|
|
|
|
#define REVERB_FLAGS_DECAYHFLIMIT 0x00000020
|
|
|
|
#define REVERB_FLAGS_ECHOTIMESCALE 0x00000040
|
|
|
|
#define REVERB_FLAGS_MODULATIONTIMESCALE 0x00000080
|
|
|
|
|
|
|
|
struct ReverbContainer
|
|
|
|
{
|
|
|
|
ReverbContainer *Next;
|
|
|
|
const char *Name;
|
|
|
|
WORD ID;
|
|
|
|
bool Builtin;
|
|
|
|
bool Modified;
|
|
|
|
REVERB_PROPERTIES Properties;
|
2008-06-12 23:47:27 +00:00
|
|
|
bool SoftwareWater;
|
2006-02-24 04:48:15 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern ReverbContainer *Environments;
|
|
|
|
extern ReverbContainer *DefaultEnvironments[26];
|
|
|
|
|
|
|
|
class FArchive;
|
|
|
|
FArchive &operator<< (FArchive &arc, ReverbContainer *&env);
|
|
|
|
|
|
|
|
void S_SetEnvironment (const ReverbContainer *settings);
|
|
|
|
ReverbContainer *S_FindEnvironment (const char *name);
|
|
|
|
ReverbContainer *S_FindEnvironment (int id);
|
|
|
|
void S_AddEnvironment (ReverbContainer *settings);
|
|
|
|
|
2008-03-27 00:05:32 +00:00
|
|
|
enum EMidiDevice
|
|
|
|
{
|
|
|
|
MDEV_DEFAULT = -1,
|
|
|
|
MDEV_MMAPI = 0,
|
|
|
|
MDEV_TIMIDITY = 1,
|
|
|
|
MDEV_OPL = 2,
|
|
|
|
MDEV_FMOD = 3,
|
|
|
|
};
|
|
|
|
|
2007-09-12 00:20:11 +00:00
|
|
|
typedef TMap<FName, int> MidiDeviceMap;
|
|
|
|
|
|
|
|
extern MidiDeviceMap MidiDevices;
|
|
|
|
|
2006-02-24 04:48:15 +00:00
|
|
|
#endif
|