Commit graph

808 commits

Author SHA1 Message Date
Randy Heit
4850a98c13 - Consolidated the mug shot code shared by DSBarInfo and DDoomStatusBar
into a single place.
- Fixed: Setting an invalid mug shot state crashed the game.
- Fixed my attempts to be clever with strings yesterday.


SVN r1009 (trunk)
2008-06-01 03:35:47 +00:00
Randy Heit
6a264daa04 - Fixed: DDoomStatusBar::UpdateState() needed the same fix as DSBarInfo::updateState(), since it
received a code infusion from there.

SVN r1007 (trunk)
2008-05-31 03:49:56 +00:00
Randy Heit
ded428230d - If an actor's current target temporarily goes unshootable, its threshold
is now reset to 0, so it will more readily switch back to it.


SVN r1006 (trunk)
2008-05-31 03:39:57 +00:00
Randy Heit
d657e31a8c - Fixed: Deactivating the game no longer allows reverb effects to continue
playing while the sound is paused.


SVN r1005 (trunk)
2008-05-31 02:18:09 +00:00
Randy Heit
0395b26d23 - Fixed: S_StartNamedSound() looked for SECF_SILENT in MoreFlags instead of Flags.
SVN r1004 (trunk)
2008-05-31 01:44:11 +00:00
Randy Heit
496e28aa7a - Fixed: DSBarInfo::updateState() sprung leaks and didn't allocate enough
space for the fullStateName string.


SVN r1003 (trunk)
2008-05-31 01:30:53 +00:00
Randy Heit
3839ef14d5 - Disabled DUMB's mono destination mixers. It's not like I'm ever going to
target an original SoundBlaster, so they're a waste of space to have around.
  This trims resample.obj down to ~60k now.


SVN r1002 (trunk)
2008-05-30 22:52:58 +00:00
Christoph Oelckers
77b9c162e2 - Changed: The texture loader now looks for a TEXTURES lump for text based
texture definitions. HIRESTEX is still supported but deprecated.
- Removed all 16 bit values from texture manager.
- Changed: The texture manager now sorts all textures for a WAD by type
  to avoid priority issues with HIRESTEX defined textures.
- Changed sidedef flag WALLF_ADDTRANS into a linedef flag because it is
  always the same for both sides of a linedef. This also makes handling
  this in the UDMF parser easier because the linedef parsing function does
  not need to access the sidedef data.
- Added new ZDoom specific UDMF linedef and sidedef properties to map parser.
- Added new ZDoom specific UDMF sector properties to map parser.
- Added class definitions for new interpolators that are better 
  equipped to interact with the interpolated objects.
- Separated interpolation code into its own file r_interpolate.cpp.
- Added some simple customization options to the end game screens.
- Fixed: Polyobject detection in the internal node builder did not work 
  anymore due to some code rearrangement for UDMF map loading. To keep
  it compatible between all map formats the THINGS lump of binary format
  maps must be loaded before building the nodes. This also means that
  the spawning itself can be done in the same function for all map types
  (except Build) now.
- Changed 'Smooth mouse movement' menu option from m_filter to smooth_mouse
  which is more what would be expected from this option.
- Fixed: Weapons and ammo items that were modified by Dehacked gave full
  ammo when being dropped by monsters. To properly handle this the
  handling of spawning Dehacked modified pickups was changed to use
  the DECORATE replacement feature instead of hacking the spawn state
  of the original item and calling a spawn function from there.



SVN r1001 (trunk)
2008-05-30 06:56:50 +00:00
Randy Heit
0d400522e4 - Fixed: PrtScn/SysRq key did not work on Linux.
SVN r999 (trunk)
2008-05-30 01:50:41 +00:00
Randy Heit
01f59fa85f - Added an alternate module replay engine that uses foo_dumb's replayer, a
heavily customized version of DUMB (Dynamic Universal Music Bibliotheque).
  It has been slightly modified by me:
  * Added support for Ogg Vorbis-compressed samples in XM files ala FMOD.
  * Removed excessive mallocs from the replay core.
  * Rerolled the loops in resample.c. Unrolling them made the object file
    ~250k large while providing little benefit. Even at ~100k, I think it's
    still larger than it ought to be, but I'll live with it for now.
  Other than that, it's essentially the same thing you'd hear in foobar2000,
  minus some subsong detection features. Release builds of the library look
  like they might even be slightly faster than FMOD, which is a plus.
- Fixed: Timidity::font_add() did not release the file reader it created.
- Fixed: The SF2 loader did not free the sample headers in its destructor.


SVN r995 (trunk)
2008-05-29 23:33:07 +00:00
Christoph Oelckers
1dc9528b43 - Fixed: The compatibility searches for teleport destinations did not work
properly when the teleporter had both a tid and a tag. Now, if a teleporter
  has a tag these are skipped because they are only present for Hexen
  compatibility.


SVN r994 (trunk)
2008-05-23 17:50:28 +00:00
Christoph Oelckers
4434e322e2 - Fixed: The first texture in a TEXTURE1 lump, although invalid when used
elsewhere, must be usable as sky (see Requiem.wad's SKY3.)


SVN r993 (trunk)
2008-05-23 14:04:16 +00:00
Christoph Oelckers
5574aaca15 - Fixed: side_t::GetLightLevel relied on the global 'linedef' variable for
automatic fake contrast.
- Changed: Fake contrast now uses the WALLF_AUTOCONTRAST globally instead
  of manipulating the sides' light values individually. This allows changing
  the fake contrast at run time and also allows adding individual relative
  lighting on top of it which is a planned UDMF feature.


SVN r991 (trunk)
2008-05-23 07:54:09 +00:00
Randy Heit
4649d011c6 - Fixed: ActorStencilColor() did not set the palette part of the actor's
fill color, so it would always produce black for STYLE_Shaded.


SVN r990 (trunk)
2008-05-23 02:13:31 +00:00
Randy Heit
317710e9c4 - Added volume reduction for stereo sounds played in 3D to obtain levels
closer to FMOD 3, which downmixed all stereo sounds to mono before
  playing them in 3D. Also added experimental 3D spread for stereo sounds
  so that you can actually hear them in stereo.


SVN r989 (trunk)
2008-05-23 01:45:47 +00:00
Christoph Oelckers
ab6b5e337e - Reworked a few options that previously depended on LEVEL_HEXENFORMAT
(actors being forced to the ground by instantly moving sectors, strife
  railing handling and shooting lines with a non-zero but unassigned tag.)
  With UDMF such semantics have to be handled diffently. 
- finalized UDMF 1.0 implementation.
- Added Martin Howe's latest morph update.


SVN r987 (trunk)
2008-05-22 19:35:38 +00:00
Randy Heit
7160e09b04 - Fixed: When R_DrawTiltedPlane() calculates the p vector, it can overflow
if the view is near the bounds of the fixed point coordinate system. This
  happens because it rotates the view position around (0,0) according to
  the current viewangle, so the resultant coordinate may be outside the
  bounds of fixed point. All important math in this function is now done
  entirely in floating point.
- Fixed: Slopes didn't draw right on 64-bit platforms.


SVN r986 (trunk)
2008-05-22 05:17:21 +00:00
Randy Heit
befdd0b41f - Fixed: With hardware 2D, the console and menu need not reimplement palette
flashes to ensure their visibility.
- Fixed: DFlashFader::Destroy() did not call its super method.


SVN r985 (trunk)
2008-05-21 01:47:34 +00:00
Randy Heit
34f6aa8ad3 - Fixed: If a player was morphed into a class with a taller view height,
their perceived view height would not change until they walked up a step.


SVN r984 (trunk)
2008-05-21 01:30:00 +00:00
Randy Heit
5b8055bfc7 - Since KDIZD is the only mapset I know of that used reverb, and it didn't
define any new ones of its own, I'm pre-emptively renaming the SNDEAX lump
  to REVERBS to remove any possible misunderstanding that this is something
  that requires EAX hardware support. (Ideally, it would have been REVERBDEF,
  but that's 10 characters long.) The eaxedit console command has also been
  renamed to reverbedit for the same reason.
- Fixed: The Palette part of FRemapTable was not initialized with alpha values
  other than 0. I'm not sure if it would be better to fix this in the game
  palette that it copies from or not, but right now, they get set
  unconditionally to 255.

SVN r983 (trunk)
2008-05-20 04:02:49 +00:00
Randy Heit
2878e1870a - Fixed: M_DrawSave() and M_DrawLoad() need to use GetScaledWidth(), in case
the texture is high-res.


SVN r982 (trunk)
2008-05-19 23:20:41 +00:00
Randy Heit
01e1295c50 - Replaced all instances of "flags +=" in sbarinfo_parser.cpp with "flags |="
so that using the same flag multiple times will not have unexpected results.
- sbarinfo update #21
  * Added: sigil image type to correctly draw the sigil's icon.
  * Added: Strife inventory bar style.  This is the only style that is radically
    different from the others.  First of all it changes the SELECTBO to be
    INVCURS and draws it before the icons.  Each box is changed to have a width
    of 35 pixels instead of 31 pixels.  And the INVCURS graphic is drawn at
    (x-6, y-2).
  * Added: whennnotzero flag to drawnumber which will cause it to draw nothing if
    the value is 0.
  * Fixed: New mugshot code would not leave the god state when it was supposed to
    enter the rampage state.
  * Fixed: The ouch state was mostly broken.


SVN r981 (trunk)
2008-05-19 23:07:08 +00:00
Christoph Oelckers
35ea94c014 May 18, 2008 (SBarInfo Update #20)
- Added: hasweaponpiece command to check for custom weapon pieces.
- Added: usessecondaryammo command to check if the current weapon has a second
  ammo type.
- Most of SBarInfo's mugshot scripting can be used with the default Doom status
  bar.
- Fixed: By default drawmugshot would never come out of normal god mode state.
  In addition the state change to and from god mode was not quite as responsive
  as the original code.

SVN r980 (trunk)
2008-05-18 15:48:03 +00:00
Christoph Oelckers
b8c21495d5 - Fixed: When FTextureManager::CheckForTexture finds a matching NULL texture
it should always return 0, not the actual texture's index.


SVN r979 (trunk)
2008-05-17 23:41:51 +00:00
Christoph Oelckers
7949f6d35f - Fixed coordinate checks for objects on 3DMidtex lines.
SVN r978 (trunk)
2008-05-17 17:57:50 +00:00
Christoph Oelckers
9fcb85d3e9 - Fixed: All translucent blending operations for CopyColors must treat an
alpha of 0 so that the pixel is not modified or texture composition as 
  intended will not work.


SVN r977 (trunk)
2008-05-17 08:18:31 +00:00
Randy Heit
32557c4a28 - Fixed: 3D hardware texture filling did not copy pixels with 0 alpha,
preserving whatever was underneath in the texture box previously.


SVN r976 (trunk)
2008-05-16 23:36:47 +00:00
Randy Heit
a4da6f1ac1 - Fixed: s_sound.cpp had its own idea of whether or not sounds were paused
and did not entirely keep it in sync with the sound system's. This meant
  that when starting a new game from the menu, all sounds were played as
  menu sounds until you did something to pause the game, because s_sound.cpp
  thought sounds were unpaused, while the FMOD system thought they were.


SVN r975 (trunk)
2008-05-16 22:31:26 +00:00
Christoph Oelckers
4de3741a05 - I finally managed to test the translucency options for composite texture
definitions in HIRESTEX. The feature should be complete now.
- Fixed: A_CheckTargetInLOS used BAM angles instead of degrees which is the
  DECORATE convention.
- Added Snowkate709's A_CheckTargetInLOS addition.
- Added listmaps CCMD.


SVN r974 (trunk)
2008-05-15 17:16:32 +00:00
Randy Heit
5a066788b5 - Revised underwater effect now uses a lowpass filter in combination with an
optional freeverb unit.
- Removed ResetEnvironment hack, since with software reverb, losing the
  existing reverb when focus is lost isn't a problem.
- Commented out the TiMidity FIXME messages.


SVN r973 (trunk)
2008-05-15 04:51:57 +00:00
Randy Heit
ff4446a3a0 - Fixed: FBarShader::GetColumn() passed incorrect information to the software
renderer for horizontal bars.


SVN r972 (trunk)
2008-05-14 23:39:40 +00:00
Christoph Oelckers
6dbdcf5f60 - Changed: For actors not being spawned on the floor P_FindFloorCeiling should
be used to prevent them from dropping through 3DMIDTEX textures.
- Fixed: AMageStaffFX2::IsOkayToAttack overwrote the projectile's angle variable. 

SVN r970 (trunk)
2008-05-14 07:45:40 +00:00
Randy Heit
c4cbef9e58 - Changed the types of object hash indices in FArchive from size_t to DWORD.
This seems to fix crashes on GCC 64-bit builds when saving games. Not sure
  if it was a GCC bug or my bug, since it worked fine with VC++, but since the
  code that calculates the index only returns a DWORD, storing it as a size_t
  was rather pointless.



SVN r969 (trunk)
2008-05-14 03:54:04 +00:00
Randy Heit
a0d5463b49 - Added the C99 printf size specifiers 't' (ptrdiff_t) and 'z' (size_t) to
FString::Format() so that I can fix all the problem printf strings that a
  64-bit GCC compile finds.



SVN r968 (trunk)
2008-05-14 03:39:30 +00:00
Christoph Oelckers
99f55e8b8f - Added Skulltag's PUFFGETSOWNER flag.
SVN r967 (trunk)
2008-05-12 22:52:13 +00:00
Christoph Oelckers
0869b51928 - Fixed: Parsing sector special bit masks must be done backwards so that later
definitions take precedence.
- Added base translation tables for UDMF compatibility maps which only should
  handle the native line and sector types of each game.
- Turned the inactive SILENT_INSTANT_FLOORS define into a compatibility option
  so that it can be (un)set in a map definition and the menu. 

SVN r966 (trunk)
2008-05-12 17:14:38 +00:00
Christoph Oelckers
b2176a4a33 - Fixed: SPAC_AnyCross didn't work.
- Fixed: Pushable doors must also check for SPAC_MPush.
- Fixed: P_LoadThings2 did not adjust the byte order for the thingid field.


SVN r965 (trunk)
2008-05-12 08:31:29 +00:00
Christoph Oelckers
6c21616c85 - Changed: HIRESTEX 'define' textures now replace existing textures
of type MiscPatch with the same name.
- Added UDMF line trigger types MonsterUse and MonsterPush.
- Separated skill and class filter bits from FMapThing::flags so that
  UDMF can define up to 16 of each. Also separated easy/baby and
  hard/nightmare and changed default MAPINFO definitions.
- Changed: Crosshair drawing uses the current player class's default health instead
  of 100 to calculate the color for the crosshair.
- Added SECF_NOFALLINGDAMAGE flag plus Sector_ChangeFlags to set it. Also separated
  all user settable flags from MoreFlags into their own Flags variable.


SVN r964 (trunk)
2008-05-11 21:16:32 +00:00
Randy Heit
8ffd79eeca - Fixed: FWadCollection::MergeLumps() did not initialize the flags for any
marker lumps it inserted.
- Fixes to placate GCC.



SVN r963 (trunk)
2008-05-11 03:02:33 +00:00
Randy Heit
6f7c6e4dac - Fixed: Need write barriers when modifying SequenceListHead.
SVN r962 (trunk)
2008-05-11 01:26:28 +00:00
Randy Heit
d4563767ee - Added a new cvar: midi_timiditylike. This re-enables TiMidity handling of
GUS patch flags, envelopes, and volume levels, while trying to be closer
  to TiMidity++ than original TiMidity.
- Renamed timidity_config and timidity_voices to midi_config and midi_voices
  respectively.


SVN r959 (trunk)
2008-05-10 01:35:50 +00:00
Randy Heit
e64586d86f - Reduced volume, expression, and panning controllers back to 7 bits.
- Added very basic Soundfont support to the internal TiMidity. Things missing:
  filter, LFOs, modulation envelope, chorus, reverb, and modulators. May or
  may not be compatible with TiMidity++'s soundfont extensions.
- Added support for quoted strings to the TiMidity config parser.


SVN r957 (trunk)
2008-05-09 03:54:06 +00:00
Christoph Oelckers
d5563fe478 - Changed all thing coordinates that were stored as shorts into fixed_t.
- Separated mapthing2_t into mapthinghexen_t and the internal FMapThing so
  that it is easier to add new features in the UDMF map format.
- Added some initial code to read UDMF maps.


SVN r956 (trunk)
2008-05-08 08:06:26 +00:00
Christoph Oelckers
80aebe9044 - Split off the slope creation code from p_Setup.cpp into its own file.
SVN r955 (trunk)
2008-05-02 16:59:38 +00:00
Christoph Oelckers
9a410f864f - Separated the linedef activation types into a bit mask that allows combination
of all types on the same linedef. Also added a 'first side only' flag. This
  is not usable from Hexen or Doom format maps though but in preparation of
  the UDMF format discussed here:
  http://www.doomworld.com/vb/source-ports/43145-udmf-v0-99-specification-draft-aka-textmap/
- Changed linedef's alpha property from a byte to fixed point after seeing that
  255 wasn't handled to be fully opaque.
- fixed a GCC warning in fmodsound.cpp 

SVN r954 (trunk)
2008-05-02 10:55:48 +00:00
Christoph Oelckers
c95a7b7db1 - Fixed: Warped textures didn't work anymore because the default speed was 0.
SVN r953 (trunk)
2008-05-01 23:52:57 +00:00
Randy Heit
684b671428 - Fixed: I had instrument vibrato setting the tremolo_sweep_increment value
in the instrument loader, effectively disabling vibrato.


SVN r952 (trunk)
2008-05-01 02:04:47 +00:00
Randy Heit
c86d7e0afd - Fixed: FString::StripRight() stripped the final character of the string if
there were no designated characters to strip at the end of it.
- Added support for Shoutcast/Icecast playlists.
- Added an error message when a playlist could not be opened.
- Added support for PLS format playlists, in addition to M3U.
- Changed FPlayList to use an array of FStrings.
- Fixed: Playlists required every song to be specified by an absolute path.


SVN r951 (trunk)
2008-04-30 05:36:24 +00:00
Randy Heit
8040cdd4ff - Fixed a copy-and-paste error in win32/i_main.cpp for 64-bit mode.
- Tweaked OPL centering a little.


SVN r950 (trunk)
2008-04-30 00:44:45 +00:00
Randy Heit
de85314234 - Added dynamic recentering for the OPL synth. The chip has four basic
waveforms, and three of them are non-negative. This can cause a tendency
  for the resulting output waveform to go into very high ranges depending on
  the timbres used, and Heretic's exemplify this problem.
- Reduced the OPL volume level slightly.
- Fixed: The waveform view from snd_drawoutput was upside-down.


SVN r949 (trunk)
2008-04-29 04:33:43 +00:00
Randy Heit
bc5f49dd49 - Various fixes for compiling working 64-bit binaries with Visual C++. The
number of changes was pleasantly small, and a cursory check seems to show
  everything working alright.


SVN r948 (trunk)
2008-04-29 02:43:42 +00:00
Randy Heit
1f8e471eba - Separated the skin scale values into separate X and Y values so that skins
automatically generated for different player classes can use both the
  scaling values that can be set for the actor.


SVN r947 (trunk)
2008-04-27 22:33:19 +00:00
Randy Heit
0bb92662d3 - Fixed: Any MIDI ticks that contain only events that are interpreted by
the MIDI parser and not passed on to the MIDI device would mess up timing
  for future events.


SVN r945 (trunk)
2008-04-26 17:12:37 +00:00
Randy Heit
ab5c981b10 - Changed EMIDI controller 110-113 handling to more accurately match the
EMIDI specs: Track designations and exclusions should be ignored past
  the initial beat, and EMIDI program change and volume events should be
  ignored unless they were used in the initial beat.


SVN r944 (trunk)
2008-04-26 17:03:53 +00:00
Randy Heit
b192762bc1 - Fixed: When FMOD::System::init() returns FMOD_ERR_OUTPUT_CREATEBUFFER, it
could also be because the user selected PCM-Float output, but the driver
  doesn't support it (even if it claims to *cough*Audigy XP drivers*cough*).


SVN r943 (trunk)
2008-04-26 16:20:26 +00:00
Christoph Oelckers
dbf4677da9 - Added speed factors for texture warp commands.
- Added damage type parameter to A_Die.

SVN r942 (trunk)
2008-04-26 08:46:55 +00:00
Randy Heit
8de6217f66 - Re-enabled TiMidity's loop and envelope stripping for instruments that look
like they weren't really meant to be played by the GUS MIDI library.


SVN r941 (trunk)
2008-04-26 04:01:44 +00:00
Christoph Oelckers
0d29164522 SBarinfo Update #18
- Simplified the DrawGraphic function in sbarinfo_display.cpp
- Added xOffset, yOffset, and alpha to every drawing function in
  sbarinfo_display.cpp.  So Strife popups can be handeled better and allow for
  other effects (translucent bars?).  I'm thinking about making a struct for
  these five (also x and y) arguments so that the argument lists don't become a
  mess.
- Changed DRAWIMAGE in sbarinfo_display.cpp to not use so many calls to
  DrawGraphic.
- DrawKeyBar wasn't using screen->DrawTexture.
- Added a Fade transition for popups.  It takes two args fade in rate and fade
  out rate.  Both are floats (1.0 = 1 tic to complete 0.5 = 2 tics to complete
  and so on).
- Added a translucency arg to statusbars.  1.0 = opaque and 0.0 = invisible.

SVN r939 (trunk)
2008-04-25 09:40:08 +00:00
Randy Heit
6ce25fe6c3 - Fixed: When an instrument's envelope runs out, it does not immediately ramp
to zero. Rather, it lets the remainder of the sample finish playing.


SVN r938 (trunk)
2008-04-25 01:28:06 +00:00
Randy Heit
52f6549aa0 - Fixed: When playing a MIDI file with EMIDI track designations to turn a
track off, any ticks that had only events on the disabled track would cause
  the delay for that track to be thrown away, and the following notes on
  enabled tracks would play too soon. This could be heard quite clearly in
  xplasma.mid, where track 4 (FMGlass Drone 1) would interfere with the timing
  of tracks 13 and 14 (EP1 Melody and EP1 Echo).

SVN r937 (trunk)
2008-04-24 23:00:25 +00:00
Christoph Oelckers
29c6615e50 - Fixed: DFlashFader did some operations in its destructor that had to be moved
to its Destroy method.
- Fixed: Dropped weapons from dying players should not double ammo. 

SVN r935 (trunk)
2008-04-24 17:17:46 +00:00
Randy Heit
16d18c707a - Fixed: When note_on() is called and another copy of the same note is
already playing on the channel, it should stop it with finish_note(), not
  kill_note(). This can be clearly heard in the final cymbal crashes of
  D_DM2TTL where TiMidity cuts them off because the final cymbals are played
  with a velocity of 1 before the preceding cymbals have finished. (I wonder
  if I should be setting the self_nonexclusive flag for GUS patches to
  disable even this behavior, though, since gf1note.c doesn't turn off
  duplicate notes.)
- Changed envelope handling to hopefully match the GUS player's. The most
  egregious mistake TiMidity makes is to treat bit 6 as an envelope enable
  bit. This is not what it does; every sample has an envelope. Rather, this
  is a "no sampled release" flag. Also, despite fiddling with the
  PATCH_SUSTAIN flag during instrument loading, TiMidity never actually
  used it. Nor did it do anything at all with the PATCH_FAST_REL flag.


SVN r934 (trunk)
2008-04-24 04:18:49 +00:00
Christoph Oelckers
b129ed3948 - Fixed: wbstartstruct's lump name fields were only 8 characters long
and not properly zero-terminated when all 8 characters were used.
- Fixed: Local sound sequence definitions caused a crash because a proper
  NULL check was missing. 

SVN r933 (trunk)
2008-04-23 23:04:00 +00:00
Christoph Oelckers
4667bfe46f - Added translucent blending modes to FMultipatchTexture (not tested yet!)
- Also changed all true color texture creation functions to use proper alpha
  values instead of inverted ones.
- Changed FRemapTable so that all palette entries must contain proper alpha
  values. 
- Fixed: The F1 screen check in m_menu.cpp was missing a NULL pointer check.
- Changed: The boss brain's explosions play weapons/rocklx which is an 
  unlimited sound. This can become extremely loud. Replaced with a new
  sound which is just an alias to weapons/rocklx but has a limit of 4.


SVN r932 (trunk)
2008-04-22 18:48:30 +00:00
Randy Heit
d8166e0e5e - Fixed: MugShotFrame::getTexture() allocated space for the sprite name that
it never freed. I'm not sure it's a good assumption that 9 characters is
  always long enough, either, since you can have longer file names than that
  inside a zip.
- Fixed: DSBarInfo::DrawGem() crashed if chain or gem was NULL.


SVN r929 (trunk)
2008-04-20 00:23:07 +00:00
Randy Heit
03b4f71edf - Reduced the range that area sounds require to interpolate between 2D and
3D panning.
- The listener's velocity is now set at 0 for the sound engine. The player
  moves so fast that you can hear the doppler shift just by running around,
  otherwise.
- Changed the sound code so that all sounds that start playing on a single
  tic actually start playing at the exact same sample position.


SVN r927 (trunk)
2008-04-19 22:47:54 +00:00
Randy Heit
effe9427fd - Added the writewave command to write the internal TiMidity's output to a
wave file.
- Changed the default channel velocity for MUS files from 64 to 100 to
  better match apparent MIDI practice. (Would like to know what this is
  supposed to be.)
- Changed the mus2midi channel assignments to match the internal player's.
- Fixed: apply_envelope_to_amp() should clamp the mix levels to 0.


SVN r926 (trunk)
2008-04-19 21:36:53 +00:00
Randy Heit
f6866df0e6 - Made the maximum number of TiMidity voices configurable through the
timidity_voices cvar.
- Added stats lines for the OPL and Timidity MIDI devices.
- Completely changed the way TiMidity volume calculations are done. It
  should now be extremely close to the output a real GUS would produce with
  its official MIDI player (excepting where TiMidity normalizes sample
  volumes). The new equations more closely match what is specified by the DLS
  and SF2 specs (but not quite), so I presume it's also more musically
  correct than what TiMidity (and TiMidity++) do.


SVN r925 (trunk)
2008-04-19 05:57:09 +00:00
Christoph Oelckers
48d8881065 - Fixed: FBlockThingsIterator didn't set the current block coordinates if
they were outside the blockmap. This could cause extreme delays if an
  iteration started outside the valid boundaries.
- added nextmap and nextsecret CCMDs.


SVN r924 (trunk)
2008-04-19 00:55:55 +00:00
Randy Heit
eb1e17db06 - Fixed: The music stream needs to zero the FMOD_REVERB_CHANNELPROPERTIES
before sending it to Channel::getReverbProperties().
- Fixed: The earthquake effect did not play its sound as an actual looping
  sound. I'm a bit surprised this only recently started causing problems.


SVN r923 (trunk)
2008-04-18 03:26:48 +00:00
Christoph Oelckers
5d0dc65044 - Added Martin Howe's fixes for morphing and DECORATE function prototypes.
- Minor fixes in texture code.


SVN r922 (trunk)
2008-04-17 20:34:58 +00:00
Randy Heit
87a480041c - Fixed: The FMOD::System object was never released, only closed, so
snd_reset would eventually run into the hard limit on the total number
  of FMOD::System objects that can be created concurrently (currently 15).
- Added proper error checks to the FMOD initialization process.


SVN r921 (trunk)
2008-04-16 20:56:46 +00:00
Randy Heit
42c80b3ee5 - Updated fmod_wrap.h for FMOD 4.14.
- Set note velocity back to using a linear sounding volume curve, although
  it's now used to scale channel volume and expression, so recompute_amp()
  is still only doing one volume curve lookup.
- Fixed: TimidityMIDIDevice caused a crash at the end of a non-looping song.


SVN r920 (trunk)
2008-04-16 20:02:16 +00:00
Christoph Oelckers
d5738e3876 - Made translation support for multipatch textures operational.
SVN r919 (trunk)
2008-04-16 18:17:20 +00:00
Randy Heit
9450db3cec parameters. These seem to be used primarily to restrict percussion
instruments to specific notes.
- Changed note velocity to not use the volume curve in recompute_amp(), since
  this sounds closer to TiMidity++, although I don't believe it's correct
  MIDI behavior. Also changed expression so that it scales the channel volume
  before going through the curve.
- Reworked load_instrument to be less opaque.
- Went through the TiMidity code and removed pretty much all of the SDL_mixer
  extensions. The only exception would be kill_others(), which I reworked
  into a kill_key_group() function, which should be useful for DLS
  instruments in the future.


SVN r918 (trunk)
2008-04-16 05:41:03 +00:00
Christoph Oelckers
b2bfad0c50 - Added translation support to multipatch textures. Incomplete and not tested yet!
- Added Martin Howe's morph weapon update.


SVN r916 (trunk)
2008-04-15 22:17:30 +00:00
Christoph Oelckers
ce5d4dba02 - Changed true color texture creation to use a newly defined Bitmap class
instead of having the copy functions in the frame buffer class.
- Fixed: The WolfSS didn't have its obituary defined.


SVN r915 (trunk)
2008-04-15 18:05:39 +00:00
Christoph Oelckers
99b2fab410 - Added submission for ACS CheckPlayerCamera ACS function.
- Removed FRadiusThingsIterator after discovering that VC++ misoptimized
  it in P_CheckPosition. Now FBlockThingsIterator is used with the distance
  check being done manually. 

SVN r914 (trunk)
2008-04-15 10:04:41 +00:00
Christoph Oelckers
adc9f090ef - Added rotation 90° angles only) and mirroring to the Multipatch texture
composition code.
- Fixed: The game crashed when a level was ended while a player was morphed
  by a powerup. 

SVN r912 (trunk)
2008-04-14 18:51:05 +00:00
Christoph Oelckers
b54b9bad7a - Fixed: A_VileAttack positioned the fire on the wrong side of the target.
- Reorganized the HackHack code so that the image creation was moved into
  MakeTexture. This was necessary because Unload deleted the pixel data
  and broke the whole thing.
- Fixed: FPatchTexture::HackHack and FDoomStatusbarTexture::DrawToBar used the
  obsolete and uninitialized variable Near255. 
- Removed the span creation code specific to FPatchTexture. It only has an
  advantage when the lump has already been loaded in memory but since that
  is no longer the case now the generic version in FTexture is actually better.
- Changed: FTexture::CopyToBlock no longer uses the spans but the pixel buffer
  directly. Since most patches in multipatch textures are non transparent
  the added overhead from creating the spans far outweighs any savings they
  might provide. It is also simpler to handle for mirrored or rotated patches now.
- Changed: Textures only create the spans when really needed. Flats and native
  textures, for example, do not and it only created needless overhead that they
  were always created along with the pixel buffer.
- Made use of player and actor variables consistent in a_hereticweaps.cpp.
- Fixed: A few calls to P_SpawnPlayerMissile passed 0 as angle



SVN r911 (trunk)
2008-04-14 12:10:45 +00:00
Christoph Oelckers
a53bfa7113 - Fixed a few bufs in the parser for composite textures.
- Changed: When loading Zips all patches in the patches/ directory should
  be loaded, not only those used by a texture in TEXTUREx. 
- Disabled timidity_mastervolume for the internal Timidity again because
  with the altered volume calculation it is no longer needed and the default
  volume is on the same level as OPL and FMOD.


SVN r909 (trunk)
2008-04-13 11:40:53 +00:00
Randy Heit
e7ff22457e - Changed FMOD_INIT_ENABLE_DSPNET use to its replacement from 4.14.00,
FMOD_INIT_ENABLE_PROFILE. Renamed the corresponding cvar to snd_profile.
- Removed the normalize parameter from SoundStream::Play().
- Disabled the chorus and reverb effects added to SDL_mixer's Timidity,
  because they were probably never tested well, either. Thanks to the bug
  in vc_alloc(), they were never even activated.
- Restored the exact frequency range search that was missing from SDL_mixer's
  verion of select_sample().
- Fixed: vc_alloc(), kill_others(), and note_on() treated Voice::status as a
  bit mask, when it's not. These were changes made to SDL_mixer's Timidity.
- Restored the original Timidity volume equation. The other louder one was
  put in when I didn't realize all channels were mono and many notes sounded
  too quiet because they never completed their attack phase.
- Fixed: FileReader::Gets() acted as if fgets() always read the maximum
  number of characters.
- Fixed: FileReader::Open() did not set FilePos and StartPos to 0.


SVN r908 (trunk)
2008-04-13 03:23:33 +00:00
Christoph Oelckers
96b72f2e33 - Changed the internal Timidity player so that it uses timidity_mastervolume
because it has the same sound volume issues as the external one.
- Replaced use of stdio in Timidity with FileReader and added the option to read
  from the lump directory. If the main config file is inside the lump directory
  it will assume that everything else is as well. If it is a real file it will be
  assumed that the rest is real files as well.
- Fixed: None of the error returns in Timidity::read_config_file closed the file being read.


SVN r906 (trunk)
2008-04-12 21:36:10 +00:00
Christoph Oelckers
6b2a7b8b03 - Added Martin Howe's morph system update.
- Added support for defining composite textures in HIRESTEX. It is not fully tested
  and right now can't do much more than the old TEXTUREx method.
- Added a few NULL pointer checks to the texture code.
- Made duplicate class names in DECORATE non-fatal. There is really no stability
  concern here and the worst that can happen is that the wrong actor is spawned.
  This was a constant hassle when testing with WADs that contain duplicate resources.


SVN r905 (trunk)
2008-04-12 15:31:18 +00:00
Randy Heit
b340f9c762 - Removed some GCC warnings.
- Fixed: MinGW doesn't have _get_pgmptr(), so it couldn't compile i_main.cpp.
- Fixed: MOD_WAVETABLE and MOD_SWSYNTH are not defined by w32api, so MinGW
  failed compiling the new MIDI code.
- Fixed: LocalSndInfo and LocalSndSeq in S_Start() need to be const char
  pointers, since "" is a constant.
- Fixed: parsecontext.h was missing a newline at the end of the file.


SVN r904 (trunk)
2008-04-12 05:33:20 +00:00
Randy Heit
0d18580ff0 - Fixed: Timidity::Channel::mono, rpn, and nrpn were not initialized. In
particular, this meant that every channel was almost certainly in mono mode,
  which can sound pretty bad if the song isn't meant to be played that way.
- Added bank numbers to the MIDI precaching for Timidity, since I guess I do
  need to care about banks, if even the Duke MIDIs use various banks.
- Fixed: snd_midiprecache only exists in Win32 builds, so gameconfigfile.cpp
  shouldn't unconditionally link against it.
- Fixed: pre_resample() was still disabled, and it left two samples at the end
  of the new wave data uninitialized.


SVN r903 (trunk)
2008-04-12 05:04:37 +00:00
Randy Heit
1809870824 - Moved the xmap table from timidity/tables.cpp to playmidi.cpp. Now I can get
rid of timidity/tables.cpp, which conflicts in name with the main Doom
  tables.cpp. (And interestingly, VC++ automatically renamed the object file,
  so I wasn't aware of the problem with GCC.)


SVN r902 (trunk)
2008-04-12 00:32:26 +00:00
Randy Heit
10c0d67b78 - Changed the MIDIStreamer to send the all notes off controller to each
channel when restarting the song, rather than emitting a single note off
  event which only has a 1 in 127 chance of being for a note that's playing
  on that channel. Then I decided it would probably be a good idea to reset
  all the controllers as well.
- Increasing the size of the internal Timidity stream buffer from 1/14 sec
  (copied from the OPL player) improved its sound dramatically, so apparently
  Timidity has issues with short stream buffers. It's now at 1/2 sec in
  length. However, there seems to be something weird going on with
  corazonazul_ff6boss.mid near the beginning where it stops and immediately
  restarts a guitar on the exact same note.
- Added a new sound debugging cvar: snd_drawoutput, which can show various
  oscilloscopes and spectrums.
- Internal TiMidity now plays music.
- Changed the progdir global variable into an FString.

SVN r900 (trunk)
2008-04-11 04:59:23 +00:00
Christoph Oelckers
3f497fe8e5 - Eliminated some more global variables (onmobj, DoRipping, LastRipped,
MissileActor, bulletpitch and linetarget.) 

SVN r899 (trunk)
2008-04-10 14:38:43 +00:00
Christoph Oelckers
a390ea6a61 - Replaced P_PathTraverse with an FPathTraverse class, rewrote all code using
P_PathTraverse and got rid of a lot of global variables in the process. 

SVN r898 (trunk)
2008-04-09 18:35:21 +00:00
Christoph Oelckers
a0356a45cd SBarInfo Update #17:
- Fixed: SBarInfo tried to calculate scaled offsets on unscaled status bars.
- Added: createpopup to SBarInfo.  No we don't have custom popups yet.  It only
  defines the transition effect.  Currently none or slideinbottom.
- Made the first argument of DrawMugShot optional (think of it as an overloaded
  function).  The use of the first argument is deprecated due to the event of
  per player class faces.
- More changes from DrawImage to screen->DrawTexture().  I guess I didn't get
  them all just yet.


SVN r897 (trunk)
2008-04-09 07:32:33 +00:00
Randy Heit
6535283ff1 - Added the FCriticalSection class in critsec.h to make it easier to
use critical sections in other places besides the OPL player.


SVN r896 (trunk)
2008-04-09 04:17:13 +00:00
Randy Heit
68e4b3d946 - Reimplemented snd_midiprecache, now for MIDI as well as MUS, and
defaulting to false.


SVN r895 (trunk)
2008-04-09 03:55:04 +00:00
Christoph Oelckers
894b663877 - Eliminated all use of global variables used as output for P_CheckPosition
and P_TryMove. Moved BlockingLine and BlockingMobj into AActor because 
  the global variables can be easily overwritten with certain DECORATE 
  constructs.


SVN r894 (trunk)
2008-04-08 20:52:49 +00:00
Christoph Oelckers
f7a1fb3978 - Removed some unnecessary morphing code.
- Fixed some bugs in the HIRESTEX parser.
- Added floating point support and #include and #define tokens to 
  FParseContext  Not used yet.
- replaced the value scanning code in FParseContext::GetToken with
  calls to strtol.


SVN r893 (trunk)
2008-04-08 17:25:19 +00:00
Christoph Oelckers
3a14dab2e8 - Fixed: The check arrays for BlockThingsIterators were not properly
freed and each iterator allocated a new one as a result.
- Split the Xlat parser context class into a generic part that can be 
  used for other Lemon-based parsers in the future and a smaller
  Xlat-specific part. 


SVN r892 (trunk)
2008-04-08 15:07:09 +00:00
Christoph Oelckers
17816dcadd - Changed: P_TeleportMove now always sets BlockingLine to NULL and
P_FindFloorCeiling doesn't set it at all. The way it was set in 
  PIT_FindFloorCeiling didn't look correct.
- Changed P_FindFloorCeiling so that it doesn't need global variables 
  anymore. I also moved the code to set the calling actor's information
  into this function because that's all it is used for. This also fixes
  another bug:
- AInventory::BecomePickup called P_FindFloorCeiling to get
  proper position values for the item but never set the item's information
  to the return value of this call.


SVN r891 (trunk)
2008-04-08 10:47:28 +00:00
Christoph Oelckers
4dc1b9579e - Removed the check for Heretic when playing *evillaugh when using the
Chaos Device. This sound is not defined by the other games so it won't
  play by default.
- Added MORPH_UNDOBYTOMEOFPOWER and MORPH_UNDOBYCHAOSDEVICE flags
  for the morph style so that the special behavior of these two items
  can be switched on and off. 

SVN r890 (trunk)
2008-04-08 09:52:50 +00:00
Christoph Oelckers
a424a2f2a9 - Added Martin Howe's morph system enhancement.
SVN r889 (trunk)
2008-04-08 08:53:42 +00:00
Christoph Oelckers
0b26377624 - Removed PT_EARLYOUT from P_PathTraverse because it wasn't used anywhere.
- Rewrote BlockThingsIterator code not to use callbacks anymore.


SVN r888 (trunk)
2008-04-07 21:14:28 +00:00