Age | Commit message (Collapse) | Author |
|
|
|
Scripts can have a maximum of three arguments when started
(see ACS_Execute / #80 linedef special type). This means that the
array of arguments passed must be at least three elements in
length. When loading scripts, check the argument count never
exceeds 3, and print a warning message if it does.
Don't pass pointers to structure members implicitly treating them
as elements of an array (as this relies on compiler-dependent
behavior as to how structure members are laid out). Instead, copy
values into a temporary array to make the intended behavior explicit.
This fixes #477. Thanks to Quasar for reporting it.
|
|
The minotaur uses the first four bytes of the mobj_t args[] array to
store its spawn time; after a certain amount of time has passed the
minotaur self-destructs. But the level time was being copied from the
leveltime variable without any endian conversion taking place. For
compatibility with Vanilla Hexen savegames we need to store the start
time in little endian format.
This fixes the first issue noted in #477 (thanks Quasar).
|
|
The size parameter for the destination buffer used for this string
copy was one character too short, the result being that patch lump
names using the maximum length (8 characters) were having the last
character cropped off. This in turn caused problems with custom
WADs that added new textures with names like these: the game would
exit on startup with a message like:
R_InitTextures: Missing patch in texture SKY3GOLD
Amazingly this bug was not noticed because most of the patches in
the Hexen IWAD file have short names of 7 characters or less. The
only exception I noticed was SKYWALL2 which maps to SKYWALL,
another patch, hiding the bug.
Thanks to ETTiNGRiNDER for reporting this bug to me and for
providing me with a private copy of his in-development PWAD that I
could use to find the problem.
|
|
getenv() can return NULL if the environment variable is not set, but
the result of getenv() was always being passed to M_StringDuplicate()
without any check. This could cause crashes on some platforms.
Instead, rework the code into a first stage that gets the player's
name and a second that duplicates it into a mutable form.
This fixes #455.
|
|
Eliminate tab characters and trailing whitespace. Add extra
whitespace around operators in for() expressions.
|
|
opl note limitation and octave overflow fixes
Adjust how the OPL MIDI code behaves at extreme MIDI note values
(high/low octaves) to better match how the Doom DMX library decides
on the OPL register value (thanks Alexey Khokholov / khokh20010.
|
|
opl additive voice volume calculation fix
Adjust how the OPL volume register values are calculated based on the
channel, note and global MIDI volume, to better match how the Doom
DMX library performs these calculations (thanks Alexey Khokholov /
khokh2001).
|
|
|
|
MIDI uses channel 9 for percussion but MUS uses channel 15. As the
channel numbers matter when we run out of free voices (#468),
internally swap channels 9 and 15 so that channel precedence is
decided correctly.
|
|
And yes I double checked the commit target this time.
|
|
* Grid is not supported and gives no such message
* Spot marking is substantially different
|
|
This reverts commit 12ecb4550e46ffdc28248be185738a88be033afd.
|
|
* Grid is not supported and gives no such message
* Spot marking behavior is substantially different
|
|
opl additive voice volume calculation fix
|
|
|
|
Fix voice allocation when there are no more free voices. This fixes a
long-standing (but minor) discrepancy between the OPL code and the DMX
library that was marked in the code with a TODO.
|
|
opl voice allocation fix when there are no free voices
|
|
fixed note drum instrument should be 60
|
|
|
|
opl additive voice volume calculation fix
|
|
With the addition of the Freedoom IWADs, the number of IWADs supported
by chocolate-doom has been raised to 10. However, the iwad_labels[]
array only holds place for up to 8 pointers. Incidently, I have all 10
IWADs installed and trying to warp into a game from
chocolate-doom-setup leads to an out-of-bounds access of this array
and so the application crashes with a segmentation fault.
Instead of increasing the array size to 10, which will bite us next
time, I decided to set its size dynamically as soon as the number of
IWADs of known.
|
|
Resolves #196
|
|
Resolves #433
|
|
Flag to be cleared is MF_SPECIAL, not MF_SOLID (verified against
disassembly). Otherwise you get to spawn an infinite number of rebels
from one beacon. Not to mention, it isn't SOLID to start with.
|
|
Re-examination of assembly reveals use of &line->frontsector->soundorg
instead of buttonlist->soundorg.
|
|
|
|
Thanks to Matt Davis (3nT) for providing a detailed report for this
gamepad.
|
|
Verified against disassembly. Otherwise, other side does not see name
changes as anything other than a message.
|
|
We already have 1280x960, which is the correct aspect ratio. This
means that when running at 1080p the windowboxing borders will be
slightly thicker, but if we're already showing borders anyway, it's
better to at least use the correct aspect ratio.
This fixes #460. Thanks to Doom_user for asking about this on
Doomworld: http://www.doomworld.com/vb/post/1316735
|
|
strdup() can theoretically fail and return NULL. This could lead to
a crash or undesirable behavior. Add M_StringDuplicate() which does
the same thing but exits with an error if a string cannot be
allocated.
This fixes #456. Thanks to Quasar for the suggestion.
|
|
The 'inventory' field in ticcmd structures can refer to inventory
values greater than the 8-bit range, so this needs to be transferred
over the network as at least a 16-bit value in order to avoid network
desyncs.
This fixes #454 (thanks Quasar).
|
|
If there's some discrepancy between clients who are to play a game
together, a warning dialog is displayed. To acknowledge this message
and proceed, make the user press enter, not escape, which is
counter-intuitive.
This fixes #453 (thanks Alexandre-Xavier).
|
|
If LOOP_START and LOOP_END are both set to zero, ignore them. This
is consistent with other source ports.
|
|
If a substitute music track is played in a non-looping configuration
(eg. the title screen music), ignore loop tags in the file to be
consistent with other source ports. This fixes a bug that was discussed
on #245.
|
|
Totally left out one of the two sprintf calls found in HU_Responder
which is responsible for setting the player's name on the consoleplayer
node (other nodes receive it through the chat system).
|
|
Propagation of allegiance from teleport beacons to rebels missing;
verfied positioning of missing assignment against disassembly.
|
|
Incorrect field being used to retrieve player names during deathmatch
for "%s killed %s" msg; changed to match disassembly.
|
|
Same fix applied to wp_torpedo selection in P_PlayerThink must also be
applied to weapon rotation code in g_game
|
|
allow -geometry to specify fullscreen or windowed modes, like PrBoom
|
|
|
|
during the initialization instead of a hard-coded diversion in the
options menu itself
|
|
The main purpose for this parameter is to allow mods made for the Final
Doom IWADs to be played properly with Freedoom. Chocolate Doom detects
mission packs (pack_tnt/pack_plut) based on the file name. However, the
Freedoom: Phase 2 IWAD contains the textures for all three Doom2-format
IWADs, so can be used to play MegaWADs like Plutonia 2 that were
designed to be played with plutonia.wad.
Because mission pack detection is done based on filename, freedoom2.wad
is handled the same as doom2.wad (a sensible default). But this means that
when playing using a mod like Plutonia 2, the wrong level name is shown
on the automap screen (along with eg. intermission text). To fix this we
need a way to manually override the mission pack. -pack allows this to
be done. It's kind of tedious that this has to be done manually but at
least it can be done.
Thanks chungy for the bug report/suggestion. This fixes #449.
|
|
When using the -cdrom command line parameter (does anyone still use
that?), savegames should be written to c:\doomdata to properly
reproduce Vanilla behavior. These were being incorrectly written to
c:\doomdata\savegames\foo.wad instead.
This fixes #175. Thanks Alexandre-Xavier.
|
|
`else if (f == 'w')` doesn't really secure itself against
uninitialized memory, it still needs to test that `s == 3`.
|
|
This allows strings like "640x480w" to cause the engine to run in a
window, while strings like "1280x800f" cause the engine to run in
fullscreen mode. This is inspired by the behavior of the PrBoom
-geometry parameter.
|
|
When playing using one of the Freedoom IWADs, set the gamedescription
string to be the full title of the IWAD being played, rather than
showing "Ultimate Doom" or "Doom II: Hell on Earth" etc.
This fixes #446 (thanks chungy).
|
|
The order in which we load dehacked patches is important. Change the
order so that IWAD dehacked patches are loaded before any others, and
so if, for example, we're playing with Freedoom, the Freedoom string
replacements can be overridden by those from extra mods we're playing
with.
As part of this, ditch DEH_Init() and use DEH_ParseCommandLine()
instead to handle the -deh option. Remove the DEH_Init() message
from startup and show messages about dehacked patches that we load
with the WAD files that we load.
|
|
If loading two dehacked patches and both replace the same string,
the second replacement should override the first. Change the API
function DEH_AddStringReplacement so that the from_text and to_text
are implicitly duplicated, and we can free to_text and replace
it later if we subsequently change it to something else.
|
|
As per suggestions from Fabian Greffrath:
* Change -noiwaddeh to -nodeh for consistency with other source ports
(Boom-derived source ports use this to disable loading of DEHACKED
lumps).
* Extend the parameter so that it also disables loading of the Chex
Quest dehacked patch.
* Refactor the code for loading IWAD dehacked patches to all be in a
single function.
|