summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2015-08-29Adjust PACKEDATTR for ClangJonathan Dowland
Clang defines __GNUC__ but does not support the gnustruct packing attribute, so add some extra #ifdef checks to catch Clang.
2015-08-24Make IWAD search paths compliant with XDG spec.Simon Howard
The XDG Base Directory Specification defines standard directories that are searched for data files via the XDG_DATA_HOME and XDG_DATA_DIRS environment variables: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html To make Chocolate Doom a good citizen, use these directories to determine some of the locations in which to look for IWAD files. This includes /usr/share/games/doom, which is absorbed under the default value of the XDG_DATA_DIRS variable. We also now support the alternative ~/.local/share/games/doom as a user-writeable path in the user's home directory that doesn't require root privileges. This is part of #597 (thanks to @chungy for the suggestion).
2015-08-24Apply gcc_struct tag to packed structsFabian Greffrath
GCC fails to properly pack structs although they are tagged with __attribute__((__packed__)) if called with -mms-bitfields which has become the default on Windows at some point: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
2015-08-24setup-manifest: Add compatibility GUID for Windows 10Mike Swanson
2015-08-24Remove duplicate variable definitions.Simon Howard
gametic and singletics are defined in d_loop.c, but there were still some duplicate definitions of these variables left over from before the game code was factored out. This fixed #561 (thanks edward-san).
2015-08-24doom: Avoid overflow for spawn angle calculation.Simon Howard
Integer overflow is undefined and this breaks when using Clang with -O2 optimization turned on. This fixes #572 (thanks to David Majnemer for insight into fixing this bug).
2015-08-24Add Keywords to the setup.desktop fileFabian Greffrath
2015-08-24setup.desktop: Add a missing semicolon to CategoriesMike Swanson
2015-06-11setup: Fix help URL for level warp menu.Simon Howard
The help URL for the warp menu was linking to the multiplayer start game menu.
2015-06-08hexen: Replace v1.0 warning with an error.Simon Howard
The warning message would have been missed by anyone not running from the console (ie. a good portion of all Windows and Mac users), so replace the warning message with an error instead (I_Error calls produce a GUI message popup). Allow this behavior to be overridden by using a special command line flag.
2015-06-08opl: Change result from OPL_Init() to an enum.Simon Howard
This no longer returns a boolean value, but actually returns an integer indicating the type of OPL chip that was detected. Change the return value to have a more meaningful value.
2015-06-08Replace "opl_type" config variable with DMXOPTION.Simon Howard
Vanilla Doom used the DMXOPTION environment variable to control whether OPL3 output was generated. Emulate this, and use a config file variable that can set DMXOPTION without needing to configure it via an environment variable.
2015-06-03Fix demo desyncs caused by P_RunThinkers() change.Simon Howard
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.
2015-05-31Fix bug with frames being rendered twice.Simon Howard
This actually (I believe) fixes three separate issues that are all aspects of the same bug: * Alexandre-Xavier reported that when running at full framerate, the single -devparm dot would flash (#374); * Linguica reported on Doomworld that Chocolate Doom appeared to be rendering each tic twice (see: http://www.doomworld.com/vb/post/1340374 ). * Harha reported performance problems when running in a VM, which may be related (http://www.doomworld.com/vb/post/1374315 ). Chocolate Doom long ago (41cdd5785305a) changed the main loop code so that it does not freeze in network games when tics stop being received; the idea is that it should always be possible to activate the menu to quit. Vanilla Doom allows this too, but only after 20 tics of waiting in TryRunTics() for network data to be received; the menu can be used but is deathly slow. So the loop was changed to wait for only 1 tic instead. However, there was an error in the logic for the check. In a single player game, when time has advanced to the point of being ready to execute another tic, NetUpdate() will build the new ticcmd_t; TryRunTics() was returning immediately; according to the timer, at the exact same time as tic generation, we had also been spinning in the loop for a whole tic and it was time to render a new frame. The end result was that each tic transition would trigger two frames to be rendered: the previous frame, and the new frame. Clearly this is not what is intended. To fix the problem: * Refactor the blocking loop in TryRunTics() so that we only bail out of the function after checking that the loop's exit condition has not just been satisfied (also to eliminate an unnecessary call to I_Sleep() between ticcmd_t generation and execution). * Increase the delay before we bail out to 5 tics rather than just 1. This is still much less than the 20 used in Vanilla Doom but is low enough to keep the menu responsive. A higher bar should ensure that this bug can't reoccur, even in multiplayer where the clocks can be adjusted for sync. This fixes #374. Thanks to everyone involved in reporting the different aspects of it.
2015-05-31setup: Add help links for Multiplayer windows.Simon Howard
The other windows all have help links now and the multiplayer windows were the only ones left without them, so this adds links for them. For now these just link to the wiki's Multiplayer page but this is something we can change in the future. This is part of #520.
2015-05-29Text formatting.Nuke.YKT
2015-05-29Added OPL3 mode support.Nuke.YKT
2015-05-28Rollback of 4f8f8a43e174f1e82dc0160c0ea96070e1cf6ef9.Simon Howard
I previously tweaked the voice replacement algorithm, but after listening to the MAP01 music in DOSbox, this does indeed seem to be how the music sounds in Vanilla Doom.
2015-05-27opl: Some minor tweaks to the last merge.Simon Howard
Formatting, variable names, don't pollute global variable namespace.
2015-05-27Merge pull request #516 from khokh2001/oldoplSimon Howard
Older DMX's OPL voice allocation algorithm
2015-05-27opl: Tweak voice replacement algorithm.Simon Howard
Prefer replacing a second voice before a voice from a higher- numbered channel. This resolves some issues with the MAP01 music, as noted in comments on #468; it may not be Vanilla behavior in terms of code but seems to better match it based on observation, and makes logical sense. Also adjust code to fit to the 80 column limit.
2015-05-27Oops, revert debug changesFabian Greffrath
2015-05-27Merge branch 'master' of https://github.com/chocolate-doom/chocolate-doomFabian Greffrath
2015-05-27desktop: Add some additional keywords to *.desktop filesFabian Greffrath
fixes #511
2015-05-25Change license statement on sha1.c to GPLv2.Simon Howard
This might seem presumptuous but is actually legitimate. The version of sha1.c here is derived from cipher/sha1.c from the GnuPG 1.4 stable branch in 2012. Since October 2007, all GnuPG releases have been made under the GPLv3, but the earlier releases were under GPLv2 and there do not appear to have been any changes to sha1.c between 2007 and 2012. So the same file was previously released under the GPLv2. The relevant commit from the GnuPG Git repository is 9a2a818887b4d36c; this commit is essentially a revert of the part of that commit that applies to cipher/sha1.c. This fixes #479.
2015-05-12doom: the sky changes in final2 map11->12 and map20->21 transitions.Mike Swanson
The id Anthology version of doom2.exe with Final Doom fixed the "Sky never changes in Doom II" bug. The original Doom source release included the repaired code, but it was re-bugged in an early Chocolate Doom version to emulate the behavior of the better-known versions of vanilla. Thanks to @fabiangreffrath for demonstrating how he (more-generically) fixed the bug in Crispy Doom. Closes #533
2015-05-12Replace AES implementation with the Linux one.Simon Howard
The old AES implementation was from GnuPG, which is GPLv3 and not compatible with Chocolate Doom's GPLv2 license. Switch to the implementation of AES found inside the Linux kernel instead. This fixes #479, #507.
2015-05-10Merge branch 'master' of github.com:chocolate-doom/chocolate-doomSimon Howard
2015-05-10Add back the Doom PWAD reload hack.Simon Howard
This was removed back in d190b596c566394717324296cbf6b46e67c64f5c; at the time I didn't understand what it was or how it was supposed to be used - it seemed like cruft left over from Doom's development. It is actually a potentially useful feature for level authors when developing their maps. See here: http://doomwiki.org/wiki/Reload_hack The reload hack is a relatively obscure feature of limited usefulness nowadays, but nonetheless a technical curiosity that ought to be preserved in Chocolate Doom. The reimplementation here is a lot cleaner than the original version from the source release: W_Reload() is based on a call to W_AddFile(), we don't reopen the reload file every time we want to read a lump, and we include a check in W_AddFile() that we are not trying to use the hack on more than one PWAD file. This fixes #539.
2015-05-08warnings: fix "variable ‘..’ set but not used" warningsFabian Greffrath
Fixed by commenting out the reported variables and their settings instead of removing them. Since I am not sure if they were added by mistake or by purpose and then overseen, I think it's better to keep them in the code but not compile them in for now.
2015-05-08warnings: fix "redundant redeclaration of ‘player_names’"Fabian Greffrath
The "extern char player_names[8][16]" array is already declared in hu_stuff.h:59.
2015-05-08warnings: fix "iteration XY invokes undefined behavior" warningsFabian Greffrath
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.
2015-05-08warnings: fix ".. may be used uninitialized in this function" warningsFabian Greffrath
Actually, it was already impossible for the reported variables to be used uninitialized, because they were all assigned a value by calling ReadByte() and the function would return if that failed. However, the compiler couldn't know about this fact, so we do him the favor and initialized them to 0.
2015-05-05hexen: Don't show v1.0 message for demo version.Simon Howard
The Hexen demo IWAD is "detected" as v1.0 because it's missing the same lumps that the commercial v1.0 IWAD is missing, but we don't want to show the warning message if we're playing the demo; it is supported.
2015-05-05hexen: Show a startup warning if using v1.0 IWAD.Simon Howard
The Hexen v1.0 IWAD file differs too much from the v1.1 IWAD file and can't be reasonably supported by us. Show a warning message on startup if the user appears to be trying to play using the v1.0 IWAD file. This fixes #537.
2015-05-05warnings: fix "address of array .. will always evaluate to 'true'"Fabian Greffrath
Remove a redundant check from an ORer condition. Unlike in Doom, in Hexen the player->message element is not a pointer, but a char[80] array. Its address will never be NULL and thus will never get interpreted as "false". Hence, the check for "!player->message" will never be "true" and a check for "|| false)" is a no-op. Thanks to @edward-san for finding this with clang-3.6!
2015-05-05warnings: fix "value computed is not used" warningsFabian Greffrath
This fixes warnings that are caused by calling GET_LONG without using its return value, e.g.: sv_save.c: In function ‘StreamIn_player_t’: ../../src/i_swap.h:34:20: warning: value computed is not used [-Wunused-value] #define LONG(x) ((signed int) SDL_SwapLE32(x)) ^ sv_save.c:33:18: note: in expansion of macro ‘LONG’ #define GET_LONG LONG(*SavePtr.l++) ^ sv_save.c:349:5: note: in expansion of macro ‘GET_LONG’ GET_LONG; ^ Introducing a "long dummy" variable and calling "dummy = GET_LONG" does not help, because this provokes another warning, rightfully so: sv_save.c: In function ‘StreamIn_player_t’: sv_save.c:346:10: warning: variable ‘dummy’ set but not used [-Wunused-but-set-variable] long dummy; Assigning the return value directly to the struct field results in: sv_save.c: In function ‘StreamIn_player_t’: sv_save.c:349:13: warning: assignment makes pointer from integer without a cast [-Wint-conversion] str->mo = GET_LONG; Adding the cast to "(void *)" results in: sv_save.c: In function ‘StreamIn_player_t’: sv_save.c:349:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] str->mo = (void *) GET_LONG; Adding the intermediate cast to "(intptr_t)" finally silences the compiler. Phew!
2015-05-04remove duplicate src/doom/doom.desktop.in templateFabian Greffrath
2015-05-04warnings: fix some cast to/from pointer from/to int warningsFabian Greffrath
This fixes the following two warnings cast from pointer to integer of different size cast to pointer from integer of different size by either changing some ints that are supposed to hold pointers to intptr_t type or by intermediate casting to (intptr_t).
2015-05-01Perform case-insensitive check for .lmp extension.Simon Howard
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).
2015-04-28include <string.h> in z_zone.c for memset()Fabian Greffrath
2015-04-26doom: Clear origin pointer when stopping sound.Simon Howard
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.
2015-04-26zone: Add -zonescan parameter.Simon Howard
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.
2015-04-26zone: Add -zonezero parameter.Simon Howard
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.
2015-04-26Don't read currentthinker->next after Z_Free().Simon Howard
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.
2015-04-26Merge branch 'master' of github.com:chocolate-doom/chocolate-doomSimon Howard
2015-04-26hexen: Remove m_misc.c.Simon Howard
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.
2015-04-21deh: fix parsing of last lines in files without newline at EOFFabian Greffrath
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
2015-04-15setup: Remove "enable gamepad" checkbox.Simon Howard
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.
2015-04-15setup: Add joyb_jump to empty defaults.Simon Howard
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.