Age | Commit message (Collapse) | Author |
|
|
|
When an mobj_t is freed, any currently-playing sounds attached to that
object are stopped, but the sound code was leaving a dangling pointer
to the freed mobj_t that was flagged by the -zonescan checks.
|
|
As further tooling to help debug bugs like #530, add a command line
parameter that will scan the zone heap every time a block of memory
is freed with Z_Free(), to detect dangling pointers to the freed
block.
|
|
As seen in bug #530, some of the game code can in some situations hold
pointers to, and dereference, freed sections of the zone heap. Add a
new command line parameter that zeroes out memory of blocks when they
are freed with Z_Free(), hopefully exposing code that depends on
reading freed memory.
|
|
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.
|
|
|
|
This file is empty and contains no code, as it was factored out into
the common m_misc.c during raven-branch development. The Heretic
version got removed once it was empty but the Hexen one wasn't, for
some reason.
|
|
Chocolate Doom fails to properly parse the last line in DEHACKED files
that are missing a newline character at the end of the file (which
might have been a common sickness to DOS editors).
This is, because DEH_GetChar() returns -1 at EOF and DEH_ReadLine() in
turn immediately returns NULL if the result of (DEH_GetChar() < 0),
regardless of the content of the readbuffer. It only returns a pointer
to the content of the readbuffer if DEH_GetChar() returns '\n' which
is, however, impossible if there is no such character before the file
ends.
Now DEH_ReadLine() only returns NULL if the readbuffer is empty at the
end of the file and returns a valid pointer else.
Fixes #531
|
|
This control seemed redundant, as we have the control below it that
selects the gamepad to use. So remove it and set the usejoystick
variable automatically based on whether joystick_index has been
configured to point to a valid device.
|
|
When applying defaults for a particular gamepad, we must clear all
the current buttons, and the jump binding wasn't on this list for
some reason.
|
|
This reverts my last change. I was testing with the Gravis Gamepad and
had the switch for left-handed mode turned on and didn't realise
(embarrassing!)
|
|
|
|
Directions were backwards for both X and Y axes when testing with an
original Gravis Gamepad.
|
|
|
|
SDL_WarpMouse() can create mouse events that are later interpreted
as user mouse input. Thanks Super6-4 for this fix.
|
|
|
|
setup: add support for the Xbox One controller on Linux
|
|
The identified name/signature for this adapter is different under OS X.
Also fix a mistake in the last commit.
|
|
|
|
This configuration supports the "Super Joy Box 7" USB gameport adapter,
for people using old PC gameport joysticks / gamepads. The button
configuration matches the original Vanilla configuration, for
authenticity.
|
|
These were added ages ago as hacks to make the code compile with SDL2,
back when SDL2 was still in development. They aren't relevant any more
and aren't useful - the actual SDL2 port is proceeding on sdl2-branch.
|
|
|
|
The wiki now has documentation pages for most of the windows in the
setup tool. Add help URLs that link to these.
One other minor change here is that the warp button on the main menu
had to change to F2 instead of F1, which is now the help key.
|
|
Add support for the Hexen 4 Level Demo Version
|
|
|
|
... and decrease its value from MAXPLAYERS (i.e. 8) to 4 if
(gamemode == shareware). It seems that it was hard-coded to this value
until some time between the releases of the Demo and the Full version.
Arrays are still declared with their full width of 8, though, they are
just not iterated over the whole range anymore. This fixes playback of
the IWAD demos.
|
|
When generating string representations of network addresses, include
the UDP port number if it isn't the standard port number. This is
necessary because the string version of the address is used by the
setup tool when filling in the address field; if a non-standard port
is used then it needs to be included.
Also fix byte swapping on the address portion in the same function.
Thanks to Alexandre-Xavier for the bug report on #469.
|
|
M_StringCopy() must always be provided a buffer of at least one
character long, so that a NUL character can be written. If this is
not the case, return immediately and indicate that the buffer was
truncated.
|
|
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.
|
|
The src string may be unterminated and the call to strncpy() be
terminated by reaching dest_size. Instead of calling strlen() on the
src string, check if it has a NUL byte at the same position as the
dest string -- if not, the string was truncated.
Valgrind now gives thumbs up!
|
|
This is meant to be passed over to I_AtExit() which expects an
argument of void type. It thus prevents undefined behaviour because
of the different signature of G_CheckDemoStatus() which is of boolean
type.
Fixes #519
|
|
I think it fits better there and in case further inline fuctions are
introduced in files other than i_scale.c, it should not be necessary
to copy this definition around.
|
|
into hexndemo
|
|
Effectively it's a slightly re-arranged Xbox 360 controller, no major
changes, so we can just use the same config as that one.
|
|
|
|
instead of interating through the list for the full version
and letting missing texture lumps slip through.
|
|
The floor->type and floor->crush fields of the floor thinkers added in
EV_BuildStairs() were originally left uninitialized and thus contained
random memory content.
Initialize them to make sure the floor->type field does not trigger
propagation of random content into the special and texture fields of
the adjacent sector in T_MoveFloor(). That is, make sure its value
is neither donutRaise, i.e. 11, nor lowerAndChange, i.e. 6.
Also, the chances of 32 bit of random memory being "true", i.e. 0, are
negligible.
This is functionally equivalent to what PrBoom+ is doing.
Fixes desync of mm09-512.lmp.
Fixes #368.
|
|
For bug compatibility with the original 4-level Demo. Confirmed on
map04 with the Demo version with the following md5sums:
458d3ff08d32fc50abb55a5b68660b6b HEXEN.EXE
876a5a44c7b68f04b3bb9bc7a5bd69d6 HEXEN.WAD
|
|
|
|
The source and destination arguments to memcpy() cannot be overlapping
as this is undefined behavior. In these situations memmove() must be
used instead, and OpenBSD actually throws an error if this is done.
Thanks to ryan-sg for reporting this. This fixes #510.
|
|
The Strife binary has another priority check in the first loop inside
S_GetChannel. TODO: Does DOS Doom have this as well? Find out.
Resolves issue #506.
|
|
Signed/unsigned comparison mismatches
|
|
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.
|
|
The st_stuff.c status bar code passes pointer to an entry in
weaponowned[] as an int pointer, but weaponowned[] is an array
of booleans and booleans are not always represented as 32-bit ints.
Remove the (int *) cast and ensure correct behavior.
This fixes the immediate issue in #509 (thanks floppes).
|
|
|
|
Actually, it is impossible to reach the end of these two functions
without return()ing earlier from one of the switch() statements'
branches. But since the compiler cannot know this and warns about it,
and since this warning can be escalated into an error in later
compiler versions, silence it by return()ing a dummy value at the end
of each function.
Fixes #508
|
|
Following the concept of Chocolate Doom, D_IdentifyVersion and
D_SetGameDescription are introduced and called right after loading the
IWAD. The first one checks for the characteristics of the "shareware"
IWAD and sets gamemode accordingly, whereas the latter sets the
gamedescription string according to gamemode. This string is then used
in I_PrintStartupBanner() and I_SetWindowTitle(). So, the "shareware"
version identifies itself properly now.
I consider support for the 4 Level Hexen Demo pretty complete by now.
|
|
|
|
|