- 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)
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)
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)
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)
- 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)
and P_TryMove. Moved BlockingLine and BlockingMobj into AActor because
the global variables can be easily overwritten with certain DECORATE
constructs.
SVN r894 (trunk)
- 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)
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)
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)
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)
P_FindFloorCeiling never did that.
- Merged Check_Sides and PIT_CrossLine into A_PainShootSkull.
- Replaced P_BlockLinesIterator with FBlockLinesIterator in all places it was
used. This also allowed to remove all the global variable saving in
P_CreateSecNodeList.
- Added a new FBlockLinesIterator class that doesn't need a callback
function because debugging the previous bug proved to be a bit annoying
because it involved a P_BlockLinesIterator loop.
- Fixed: The MBF code to move monsters away from dropoffs did not work as
intended due to some random decisions in P_DoNewChaseDir. When in the
avoiding dropoff mode these are ignored now. This should cure the problem
that monsters hanging over a dropoff tended to drop down.
SVN r887 (trunk)
flag are only drawn as part of a secret sector if that secret has already
been found, even if the option is set to always show secret sectors.
- Added a NULL pointer check to WI_LoadBackground.
SVN r885 (trunk)
MAPINFO where 'lookup' could be specified so that there is one consistent
way to do it.
- Added a missing NULL pointer check to S_Start.
SVN r884 (trunk)
to handle M4 and 5 in Doom and Heretic.
- Added P_CheckMapData functions and replaced all calls to P_OpenMapData that
only checked for a map's presence with it.
- Added Martin Howe's player statusbar face submission.
- Added an 'adddefaultmap' option for MAPINFO. This is the same as 'defaultmap'
but keeps all existing information in the default and just adds to it. This
is needed because Hexen and Strife set some information in their base
MAPINFO and using 'defaultmap' in a PWAD would override that.
- Fixed: Using MAPINFO's f1 option could cause memory leaks.
- Added option to load lumps by full name to several places:
* Finale texts loaded from a text lump
* Demos
* Local SNDINFOs
* Local SNDSEQs
* Image names in FONTDEFS
* intermission script names
- Changed the STCFN121 handling. The character is not an 'I' but a '|' so
instead of discarding it it should be inserted at position 124.
- Renamed indexfont.fon to indexfont so that I could remove a special case
from V_GetFont that was just added for this one font.
- Added a 'dumpspawnedthings' CVAR that enables a listing of all things in
the map and the actor type they spawned.
SVN r882 (trunk)
- Added: fillzeros flag for drawnumber. When set the string will always have
a length of the specified size and zeros will fill in for the missing places.
If the number is negative the negative sign will take the place of the last
digit.
- Added: globalarray type to drawnumber which will display the value in a
global array with the index set to the player's number. Untested.
- Added: isselected command to SBarInfo.
- Fixed: Bi and Tri colored numbers didn't work.
- Fixed: Crash when using nullimage as the last image in drawswitchableimage.
- Applied Graf suggestion to include the y coord when calulating heights to fix
most of the gaps caused by round off errors. At least for now anyways and it
is only applied for drawimage.
- SBarInfo inventory bars have been converted to use screen->DrawTexture()
SVN r881 (trunk)
line.
- Fixed: P_SpawnPuff assumed that all melee attacks have the same range
(MELEERANGE) and didn't set the puff to its melee state if the range
was different. Even worse, it checked a global variable for this so
the behavior was undefined when P_SpawnPuff was called from anywhere
else but P_LineAttack. To reduce the amount of parameters I combined
this information with the hitthing and temporary parameters into one
flags parameter. Also changed P_LineAttack so that it gets passed
an additional parameter that specifies whether the attack is a melee
attack or not and set this to true in all calls that are to be considered
melee attacks. I couldn't use the damage type because A_CustomPunch
and A_CustomMeleeAttack allow passing any damage type they want.
- Added a sprite option as an alternative of particles for FX_ROCKET
and FX_GRENADE.
SVN r879 (trunk)
DECORATE was wrong (2 instead of 1.)
- Changed: Hexen set every cluster to be a hub if it hadn't been defined before
a level using this cluster. Now it will only do that if HexenHack is true,
i.e. when original Hexen format MAPINFOs are parsed. For ZDoom format
MAPINFOs it will now be the same as for the other games which means that
'hub' has to be declared explicitly.
- Added an Idle state that is entered in place of the spawn state if a monster
has to return to its inactive state if it can't find any more targets.
- Added MF5_NOINTERACTION flag which completely disables all physics related
code for any actor with this flag. Mostly useful for particle effects where
the actors just move a certain distance and then disappear.
- Removed the last remains of the antialias precalculation code from
am_map.cpp because it was no longer used.
- Fixed: Two-sided lines bordering a secret sector were not drawn in the
proper color
- Fixed: The automap didn't check ACS_LockedExecuteDoor for its lock color.
SVN r876 (trunk)
rather than a generic one, so identifying errors among files that all have
the same lump name no longer involves any degree of guesswork in
determining exactly which file the error occurred in.
- Added a check to S_ParseSndSeq() for SNDSEQ lumps with unterminated final
sequences.
- Fixed: Parts of s_sndseq.cpp that scan the Sequences array need NULL
pointer checks, in case an improper sequence was encountered during
parsing but not early enough to avoid creating a slot for it in the array.
SVN r874 (trunk)
can be played as OPL can also be dumped.
- Removed the opl_enable cvar, since OPL playback is now selectable as just
another MIDI device.
- Added support for DRO playback and dual-chip RAW playback.
- Removed MUS support from OPLMUSSong, since using the OPLMIDIDevice with
MUSSong2 works just as well. There are still lots of leftover bits in
the class that should probably be removed at some point, too.
- Added dual-chip dumping support for the RAW format.
- Added DosBox Raw OPL (.DRO) dumping support. For whatever reason,
in_adlib calculates the song length for this format wrong, even though
the exact length is stored right in the header. (But in_adlib seems buggy
in general; too bad it's the only Windows version of Adplug that seems to
exist.)
- Rewrote the OPL dumper to work with MIDI as well as MUS.
SVN r872 (trunk)
set to NULL before performing the delete. Otherwise, in some abnormal
situations, it could happen that the destroyed screen object is still
being accessed.
- Fixed: V_Shutdown didn't set OF_YesReallyDelete before deleting screen.
SVN r870 (trunk)
command actually existed.
- Fixed: My $Limit fix from yesterday didn't work because NearLimit was
an unsigned byte and the comparisons with -1 didn't work. Made it a
signed word instead.
- Made sfxinfo_t::Link an unsigned int because it limited the amount of
usable sounds to 65535.
SVN r869 (trunk)
Missimp.mid sounds a lot better now, though still a little off.
- Fixed: MIDI files that had ticks with nothing but meta-events did not play
properly. (fixes sonic3_finalboss.mid)
SVN r868 (trunk)
- Added a SFX_TRANSFERAMBUSHFLAG for A_SpawnItemEx.
- Added "Shaded" as a valid parameter for DECORATE's RenderStyle.
- Added Karate Chris's patch for a MAPINFO option making Strife conversations
not halt the game.
- Extended the $limit fix that $alias and $random definitions can have their
own $limit now.
- Fixed: When resolving a linked sound the limit of the current sound was
ignored and the one of the referenced sound being used. This was particularly
noticable when using the chaingun in a group of Zombiemen.
- Added a namespc parameter to FWadCollection::CheckNumForFullName which is
used when a normal lump name has to be looked up and changed all
CheckNumForFullName/CheckNumForName combinations in the source to use
the extended version of CheckNumForFullName only to have consistent
behavior for lump name lookup.
SVN r865 (trunk)
advanced sound options menu. Removed opl_enable from the menu.
- Added OPL synth as MIDI device -3. Since this is based on the MUS player
code, it only supports those events and controllers supported by MUS.
Some of Duke's MIDIs sound awful, but I think that may be more because
it's using different instruments... There's a thread in the MIDI streamer
class that could be taken out for Linux, since it doesn't need to deal
with the Windows Multimedia API, but for now, this is still Windows-only.
SVN r864 (trunk)
into a general MIDI player.
- Fixed: Passing false for a stream callback did not stop the stream.
- Removed opl_frequency, since the only time the emulation sounds good is
when it plays at the exact frequency of a real chip.
- Music no longer plays at all when snd_musicvolume is 0.
- Bumped up snd_sfxvolume and snd_musicvolume default values.
SVN r862 (trunk)
that the drivers will treat a BackBufferCount of 0 as a request for
double buffering.
- Fixed: Unsetting a cvar did not remove it from the list of tab
completions.
- Added "" as a synonym for "nullimage" in SBARINFO.
- Fixed: MAKESAVESIG's stringifier in version.h did not work as expected.
It stringified the passed macro name, not the value of the macro.
- Moved DCajunMaster off the DObject hierarchy.
- Changed DCajunMaster::getspawned into a TArray of FStrings. It was
mysteriously being left pointing to uninitialized memory during the
final GC at exit and crashing.
- Fixed: The code that removed hexdd.wad from the list of IWADs when
hexen.wad was not present did not work.
SVN r861 (trunk)
from doing prebuffering of the song. This was causing the Linux version to
hang while waiting for input from the pipe, since Timidity hadn't been
started yet. I tried using a select call in the FillStream() method, but it
always seems to return the pipe as having nothing available. Unfortunately,
the game still falls all over itself if Timidity isn't available. Instead
of execvp failing nicely, X errors kill the game. I don't know why it's
doing that. My advice for Linux music: Skip Timidity++ and get a DLS patch
set (/WINDOWS/system32/drivers/gm.dls is probably the most common by far)
and set the snd_midipatchset cvar to point to it. It's faster and also
sounds a whole lot better than the crappy freepats Ubuntu wants to install
with Timidity++.
- GCC fixes.
SVN r858 (trunk)
the song's relative volume takes effect.
- Removed the arbitrary 1024 bytes limit when the file being played is a MIDI
file. I had a D_DM2TTL that's only 990 bytes.
- Restructured I_RegisterSong so that $mididevice works again and also supports
selecting FMOD.
SVN r857 (trunk)
- Removed movie volume from the sound menu and renamed some of the other
options to give the MIDI device name more room to display itself.
- Moved the midi device selection into the main sound menu.
- Added FMOD as MIDI device -1, to replace the MIDI mapper. This is still the
default device. By default, it uses exactly the same DLS instruments as the
Microsoft GS Wavetable Synth. If you have another set DLS level 1 patch set
you want to use, set the snd_midipatchfile cvar to specify where it should
load the instruments from.
- Changed the ProduceMIDI function to store its output into a TArray<BYTE>.
An overloaded version wraps around it to continue to supply file-writing
support for external Timidity++ usage.
- Added an FMOD credits banner to comply with their non-commercial license.
- Reimplemented the snd_buffersize cvar for the FMOD Ex sound system. Rather
than a time in ms, this is now the length in samples of the DSP buffer.
Also added the snd_buffercount cvar to offer complete control over the
call to FMOD::System::setDSPBufferSize(). Note that with any snd_samplerate
below about 44kHz, you will need to set snd_buffersize to avoid long
latencies.
- Reimplemented the snd_output cvar for the FMOD Ex sound system.
- Changed snd_samplerate default to 0. This now means to use the default
sample rate.
- Made snd_output, snd_output_format, snd_speakermode, snd_resampler, and
snd_hrtf available through the menu.
- Split the HRTF effect selection into its own cvar: snd_hrtf.
- Removed 96000 Hz option from the menu. It's still available through the
cvar, if desired.
- Fixed: If Windows sound init failed, retry with DirectSound. (Apparently,
WASAPI doesn't work with more than two speakers and PCM-Float output at the
same time.)
- Fixed: Area sounds only played from the front speakers once you got within
the 2D panning area.
SVN r854 (trunk)
from a higher limit.
- Fixed: $limit should not apply to sounds played from the menu.
- Fixed: The SNDSEQ parser tried to set bDoorSound before actually creating
the sound sequence data.
SVN r852 (trunk)
- Added a debuganimated CCMD that can be used to output some information
if a WAD shows broken animations.
- Fixed: The handling for enum values in Xlat was incorrect. The rule with
value assignment must set the counter one higher than the current value.
- Fixed: The definition of enums in the Xlat grammar was right-recursive
which could create stack overflows in the parser. Made it left-recursive as
recommended in Lemon's docs.
SVN r850 (trunk)
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)
of status bar face graphics belonging to skins.
SBARINFO update #15
- Fixed: Monospacing fonts wasn't quite correct.
- Fixed: The new mug shot code forgot to use the first arg of drawmugshot (the
one that picks the default sprite prefix).
- Added: lowerHealthCap variable to SBarInfo, which is set to true by default.
- Added: ininventory event to SBarInfo to detect if one or two items are in (or
not in) the player's inventory.
- Added: The ability to print global vars using drawnumber. I need someone to
test it though.
- Added: aspectratio command to detect what the user's aspect ratio is.
- Added: missing spacing argument to drawstring.
- Changed the sbarinfo display routine for drawnumber to not use cmd.value to
store what it is about to display. Now it uses a new variable.
- More conversions from DrawImage to screen->DrawTexture. I think only the
inventory bar drawing functions have to be changed now.
SVN r846 (trunk)