summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
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.
2015-04-15setup: Undo axis reversal for Gameport adapter.Simon Howard
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!)
2015-04-13Merge branch 'master' of github.com:chocolate-doom/chocolate-doomSimon Howard
2015-04-13setup: Invert both axes for Gameport adapter.Simon Howard
Directions were backwards for both X and Y axes when testing with an original Gravis Gamepad.
2015-04-13Fix assigning structs not compiling on Visual StudioFabian Greffrath
2015-04-11Clear mouse events caused by mouse warp.Simon Howard
SDL_WarpMouse() can create mouse events that are later interpreted as user mouse input. Thanks Super6-4 for this fix.
2015-04-11Merge branch 'master' of github.com:chocolate-doom/chocolate-doomSimon Howard
2015-04-11Merge pull request #521 from chungy/xbone-padSimon Howard
setup: add support for the Xbox One controller on Linux
2015-04-11setup: Add OS X config for Gameport adapter.Simon Howard
The identified name/signature for this adapter is different under OS X. Also fix a mistake in the last commit.
2015-04-12Merge branch 'master' of https://github.com/chocolate-doom/chocolate-doomSimon Howard
2015-04-12setup: Add config for USB Gameport adapter.Simon Howard
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.
2015-04-10Strip out SDL_VERSION_ATLEAST #ifdef conditionals.Simon Howard
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.