Age | Commit message (Collapse) | Author |
|
1bcff874c52a changed the behavior of P_RunThinkers() to avoid
dereferencing thinker pointers after they had been freed, but the
modified version of the function was not logically equivalent to
Vanilla version, because the 'next' pointer can be changed by the
thinker function if one is invoked.
This fixes a desync in tnt-speed-movie-0443131.lmp. Thanks to Zvonimir
Bužanić for the bug report and Fabian Greffrath for reporting.
Fixes #547.
|
|
Older DMX's OPL voice allocation algorithm
|
|
These were caused by loops which caused overflow of variables of type
angle_t (= unsigned) by multiplication with iterators of typed int in
angle calculations. Changing the type of the iterator variables to
"unsigned int" prevents the undefined behavior.
|
|
When using the -playdemo parameter, we support a convenience feature
where the .lmp extension is not appended if it is already part of the
filename. This makes tab completion much nicer. But if the .lmp file
has a filename that is in all-caps (.LMP) we were still appending the
extension because the check was case sensitive. Change the check to
be case insensitive.
This fixes #501 (thanks Ioan Chera).
|
|
Save the next pointer in the P_RunThinkers() loop when iterating through
thinkers, so that if the current thinker is freed we can still advance
to the next thinker without dereferencing freed memory.
|
|
|
|
These are leftover files that were kept around for posterity in the
heretic/ and hexen/ directories, that contained system-specific DOS
code used in the DOS versions of the games. There's no real reason
to keep these files around any more and it's confusing having them
around: some people who have tried to compile the code have
mistakenly tried to include these files in compilation.
|
|
differ. This commit adds old DMX's voice allocating alogrithm for Hexen and Heretic.
|
|
The config file API previously relied on binding config variables
using M_BindVariable() which took a void pointer. It occurred to me
that if used on a boolean variable, this would be erroneous, but the
void pointer would make it impossible to tell. Split this into
separate M_Bind{Foo}Variable() functions based on type, which allows
for proper type checking on the pointers that are passed.
Vaguely related to #509.
|
|
Various bits of code assume that booleans are represented as 32-bit
ints and that they can be assigned to from 32-bit values. This isn't
true on all systems; fix code that does this to convert to boolean
values properly.
This is more progress towards fixing #509.
|
|
Ensure that the loops to find the next weapon always terminate -
even if there are somehow no weapons equipped. Also, only ever do
weapon cycling when in the GS_LEVEL gamestate. This fixes #503 -
thanks to Fabian and raithe on Doomworld.
|
|
fixes #497
|
|
No. 2: even more endianness fixes by myself (Ronald Lasmanowicz)
|
|
No. 1: even more endianness fixes by myself (Ronald Lasmanowicz)
|
|
|
|
I figured this out while porting Chocolate to the Nintendo Wii and also had to change these lines of code.
|
|
I figured this out while porting Chocolate to the Nintendo Wii and also had to change these lines of code.
|
|
as pointed out necessary by Ronald Lasmanowicz for his Wii ports
|
|
when walking inside liquids like water -- on big-endian systems
Originally reported by Ronald Lasmanowicz and fixed in his
wii-hexen port: https://code.google.com/p/wii-hexen/source/detail?r=17
|
|
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 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.
|
|
It was pointed out to me recently that vldoor_e has enum values
named 'open' and 'close'. These can potentially conflict with POSIX
standard functions that have the same names, if the right header
files are included.
This doesn't currently cause any problems. However, to avoid any
possibility of a conflict occurring if a different compiler is used,
add a vld_ prefix to all the enum values, to namespace them.
|
|
This change rewrites and simplifies the copyright headers at the top
of all source files:
* Remove "Emacs style mode select" line; this line was included in
the headers for the originally released source files and appears
to be to set the file type for old versions of Emacs. I'm not sure
entirely why it was required but I don't think it is any more.
* Remove "You should have received a copy of..." text from copyright
header. This refers to the old 59 Temple Place address where the
FSF headquarters used to be located and is no longer correct.
Rather than change to the new address, just remove the paragraph
as it is superfluous anyway. This fixes #311.
* Remove ---- separator lines so that the file headers are barer
and more simplified.
|
|
ZDoom has defined a format for Vorbis metadata comments named
LOOP_START and LOOP_END that allow the start and end points to be
defined in .ogg and .flac files for looping music. Add support for
these (they are used in Brandon Blume's SC-55 recordings).
|
|
Having multiple binaries can cause some confusion - some users try to
run chocolate-doom with hexen.wad, thinking it is supported. Add a
startup check that makes sure the user is not trying to start the game
using the wrong IWAD file for the binary being run.
This fixes #382.
|
|
When using a joystick or gamepad it's nice to be able to bring up the
menu without having to reach for the keyboard. This makes modern
gamepads more useful/usable.
|
|
Modern gamepads typically have 2-3 D-pads and joysticks. This means
that it's desirable to be able to use one joystick for turning and
another for strafing. Add another axis in addition to the current X
and y axes that performs strafe movement.
|
|
The Windows API has an _snprintf function that is not the same as
Unix's snprintf(): if the string is truncated then no trailing NUL
character is appended. This makes the function unsafe. Define a
replacement/wrapper called M_snprintf that works the same but always
appends a trailing NUL, for safety on Windows and other OSes that
behave like this.
Do the same thing for vsnprintf(), and update HACKING to list
snprintf/vsnprintf as forbidden functions. This fixes #375;
thanks to Quasar for pointing out the different behavior of these
functions.
|
|
Use snprintf() in place of sprintf(). This is part of fixing #371.
|
|
Vanilla Hexen makes you specify the demo name to play by giving
the plain lump name, eg. heretic -playdemo mydemo to load mydemo.lmp.
It doesn't work if you specify the extension or the full file path.
As a convenience and to match the behavior of Chocolate Doom, allow
paths and extensions.
Also rework the code for other games so that they're slightly more
consistent. This fixes #301.
|
|
Vanilla Heretic makes you specify the demo name to play by giving
the plain lump name, eg. heretic -playdemo mydemo to load mydemo.lmp.
It doesn't work if you specify the extension or the full file path.
As a convenience and to match the behavior of Chocolate Doom, allow
paths and extensions.
This fixes half of #301.
|
|
Eliminate use of strcpy, strcat, strncpy, and use the new safe
alternatives.
|
|
|
|
Initialize low-level sound startup (calls to I_InitSound) separately
from the high-level sound startup (S_Init). In particular, make sure
that SDL sound is initialized before the textscreen multiplayer
waiting screen is shown. This is an attempt to fix a bug with sound in
multiplayer games on Windows; calling SDL_QuitSubSystem(SDL_INIT_VIDEO)
(on closedown of the textscreen library) causes subsequent attempts to
initialize audio to fail.
Big thanks go to Alexandre-Xavier (AXDOOMER) for working out a fix for
this bug and James Haley (Quasar) for giving some technical background
about the lack of separation between SDL subsystems. This (hopefully)
fixes #270.
|
|
In #364 I recommended -1 as the default to avoid taking screenshots in
some situations where a key event is posted for key 0. It turns out
that wasn't such a great idea, as -1 is not parsed properly by the
config parser, and is shown as ??-1 in the setup tool. Default to zero
instead, and add guards to prevent screenshots being taken by mistake.
Thanks to Alexandre-Xavier for pointing this out.
|
|
The -timedemo flag is broken in Vanilla Heretic/Hexen, as not all
fields are read from the demo headers. Fix it, as there's no utility
in having it nonfunctional and plenty of utility in having it
functional. This fixes #300.
|
|
There was a bug where it was possible to keep moving the background
when the boundaries of the map were reached. This is because the code
to move the background was done in calls to AM_Drawer(), which is
fundamentally a bad idea. Some old commented-out code shows that this
was previously done in AM_Drawer (same location that scrolls the map
itself), but it was moved. Move it back.
Thanks to Chris Fielder for the bug report; this fixes #321.
|
|
|
|
|
|
Heretic and Hexen had the pause key hard-coded to KEY_PAUSE when they
should actually use key_pause so that they can be remapped by the
user. Thanks to Fabian Greffrath for the bug report (fixes #337).
|
|
The fix-up of the thinker function was (unnecessarily) guarded by an
if() condition that meant it was not being reset properly on load.
This caused moving platforms to be not restored properly when loading
savegames.
Fixes #343. Thanks to romeroyakovlev for the bug report.
|
|
When follow mode is off, hitting left would cause it to scroll all the way to the west of the map without stopping.
|
|
Implement this the same way it is implemented for doom and strife.
|
|
Subversion-branch: /branches/v2-branch
Subversion-revision: 2755
|
|
crashes when pressing shift while entering save game names (thanks
chungy).
Subversion-branch: /branches/v2-branch
Subversion-revision: 2750
|
|
before the head separates from the body (thanks Tumlee).
Subversion-branch: /branches/v2-branch
Subversion-revision: 2720
|
|
hold pointers to other mobj_t objects that will no longer be valid.
Subversion-branch: /branches/v2-branch
Subversion-revision: 2718
|
|
appropriate values.
Subversion-branch: /branches/v2-branch
Subversion-revision: 2708
|
|
startup.
Subversion-branch: /branches/v2-branch
Subversion-revision: 2699
|