Age | Commit message (Collapse) | Author |
|
|
|
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.
|
|
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.
|
|
Thanks to Matt Davis (3nT) for providing a detailed report for this
gamepad.
|
|
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 Buffalo Classic USB Gamepad is a USB gamepad that resembles the
classic SNES controller. Thansk to Fabian Greffrath for sending in
the report.
|
|
Thanks to "Absolute Zero" for the report with the gamepad settings.
|
|
The XBOX One controller apparently appears identical to the Xbox
360 controller. Thanks Brad Harding.
|
|
|
|
The same icon is used for all four games, even though it's designed to
resemble Doom's logo and looks a bit silly with all of them lined up.
Also the Setup Desktop Entry now only launches chocolate-setup, which
then prompts for the game to configure. This avoids cluttering up a
DE's Preferences menu, control panel, or however it will be displayed.
|
|
The Xbox360 controller is handled differently by different
operating systems, and the layout is different on Linux to Windows.
Detect the Linux layout and set some appropriate defaults.
|
|
Reduce the width slightly (the previous size was excessively wide) and
tweak "none" string to match the joystick button widget.
|
|
Only init the joystick subsystem when we need to call the joystick
API functions, and quit the subsystem when we are finished. This avoids
conflicts with the joystick widgets that quit the subsystem while the
main code relies on it running.
This fixes a bug where trying to calibrate the joystick twice would
fail on the second attempt.
|
|
Move code for configuring joystick axes into a separate widget, and
add axis widgets to the configuration window for all possible movement.
|
|
|
|
Recognise the Xbox360 controller and Logitech Dual Action controllers
and set defaults as appropriate. Thanks to Brad Harding for the
information about these controllers.
|
|
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.
|
|
The Wii remote is not a HID device, meaning it cannot be supported in
a proper cross-platform way. However, it can be supported for
individual platforms. Add a fingerprint and configuration for a Wii
remote under OS X using the WJoy tool.
|
|
When setting a joystick button binding to -1 to disable it, set it
directly; do not go through to the physical button mapping layer.
Also add a quick note to encourage users to send in details of their
gamepads.
|
|
Detect certain gamepads by name and automatically configure defaults
for buttons and axes, to minimize setup time. Supported so far are
the PS3 controller and AIRFLO gamepad.
|
|
|
|
If the user has just successfully calibrated the joystick, then
turn on use_joystick as a convenience feature.
|
|
The code is already in place for this but there was no control in
the setup tool to configure it.
|
|
Refactor how joystick buttons are reassigned. Define a fixed
mapping from joyb* variables to virtual buttons, and change the
button assignments at the virtual->physical mapping level.
|
|
The solution to solving #386 is to add a layer of indirection: the
game code can only support up to ~20 joystick buttons, but this
doesn't matter as long as we never want to bind more than 20 buttons
to actions anyway. Redefine the game's notion of buttons to be based
on "virtual" joystick buttons, and map these buttons to physical
(SDL) buttons based on configuration file variables.
|
|
In some cases a joystick axis can be "stuck" and have a large
uncentered value. These must be detected and ignored, otherwise the
axis can be chosen during calibration instead of the user's actual
desired axis.
|
|
Backspace or delete clears other input boxes; make it do the same for
keyboard, mouse and joystick inputs.
|
|
As a second fallback, if all joysticks are centered and no buttons
are pressed, look at the hats on the joystick to see if one of those
is uncentered. Bizarre as it seems, some gamepads actually present the
D-pad as a hat.
|
|
Detect when we need to configure a "button axis" by falling back to
buttons when none of the joystick axes are significantly outside of
the centered range. Add extra calibration stages to get the D-pad
buttons for right and down in these cases.
|
|
The table of IWAD data is stored in const memory, so make all iwad_t
pointers const to fix compiler warnings.
|
|
Vanilla Doom's setup.exe only made reference to "joysticks" as back
then gamepads were relatively uncommon for PCs and ports for game
controllers canonically known as "joystick ports". Nowadays it's far
more likely (and ergonomic) that the player will be using a gamepad
than a joystick. Change the labelling to refer to "Gamepad/Joystick"
or "controller" instead.
|
|
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.
|
|
Some systems (fbcon SDL driver) get messed up if not cleanly shut
down. Make sure that we call SDL_QuitSubsystem on shutdown.
|
|
Some machines don't work well with 8-bit screen depths any more. It's
better to default to just using the machine's native color depth
instead. Change the default to 0 (for SDL_SetVideoMode this means "use
native color depth"), auto-adjust to native color depth on startup if
screen_bpp=0 (so that debug messages at least make sense) and document
for the config file value that a value of zero means "use native".
|
|
Once a game type (IWAD) has been selected, remember that selection
rather than resetting to the first item in the list when the window is
closed and reopened. This fixes #169 (thanks Alexandre Xavier).
|
|
Don't launch the game if a server address has not been entered; show a
message to the user instead. This fixes #121.
|
|
Last argument to M_StringJoin needs to be NULL.
|
|
When configuring Chocolate Strife the sound dialog can become quite
tall, and the dialog is visibly uncentered vertically. Move it up
slightly to counterbalance it.
|
|
Define TXT_{StringCopy,StringConcat,snprintf,vsnprintf} as analogs of
the m_misc.c versions so that the textscreen library does not need a
dependency on the Doom code, and change all textscreen code to use
these instead of unsafe functions. This fixes #372.
|
|
Use M_snprintf() or M_StringJoin() instead where appropriate.
This fixes #371.
|
|
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.
|
|
Eliminate use of strcpy, strcat, strncpy, and use the new safe
alternatives.
|
|
It's more readable to write "M_StringEndsWith(..." than doing a bunch of
pointer arithmetic, and this is a common pattern. Also add
M_StringStartsWith, M_StringJoin and M_StringCopy. The latter is a
safe alternative for strcpy() that works the same as OpenBSD's
strlcpy(). Use these functions in a few places where it makes sense.
|
|
Doom, Heretic, Hexen and Strife have different default SFX and music
volumes. Make sure the setup tool sets the appropriate default when
creating a new configuration file.
Thanks to Alexandre-Xavier for reporting this and providing the
correct defaults. This fixes #347.
|
|
Preserve the snd_maxslicetime_ms variable when loading/saving configs
in the setup tool.
|
|
Mix_SetMusicCMD() allows a program to be specified to configure an
external program to be invoked for music playback. Add a config
variable (snd_musiccmd) to allow this to be set from a configuration
file. Thanks to Holering for his comments on Doomworld about how to do
this.
|
|
|
|
|