Joystick questions for WC games in DOSBox

IamFODI

Veteran Spaceman
Hi, All!

Can't believe it took me this long to register here! This seems like a great community. Really looking forward to poking around and getting involved!

The Wing Commander series was a very important part of my childhood, and DOSBox now seems good enough that I can start getting back to my roots. :] I recently started playing Privateer 1 on DOSBox, and will be digging up and installing a bunch of other WC games soon. I was hoping to get some guidance on a few things joystick-related.


First: In Privateer under DOSBox, it’s like the game imposes a large deadzone that makes fine maneuvers and aiming difficult-to-impossible. I know it’s not the stick because the joystick software registers nice and clean response as soon as either axis comes off center. But in Privateer under DOSBox, the joystick does nothing just off center and then responds way too quickly beyond that. I’ve done a few searches and seen the problem mentioned a few times, but never seen a resolution. Any thoughts, or maybe obvious solutions I’ve missed?


Second: Joystick choice. I'm currently using a Thrustmaster HOTAS Cougar. Love the feel, pots are all great, buttons are good -- but the lower gimbal is worn (lots of X-axis play), so I’m trying to figure out whether to fix or replace. So, two questions:

1. Am I right to suspect that the Cougar’s lower gimbal is particularly likely to wear out in games that require a lot of stick movement? I know it was designed as a flight sim stick, so I wonder if it just wasn’t made for more intense usage.

2. I could get a brand new CH Fighterstick for not much more money than the expected cost of repairing the Cougar. Could I count on that to hold up better than the Cougar did? I’ve always MUCH preferred the feel of Thrustmaster sticks, but I might spring for the CH if there’s a good chance of better longevity.


Would love to hear some input. Thanks, everyone!
 
Hi and welcome!

One possible solution is to see if your stick has configuration software that allows you to tweak deadzones and sensitivity. Profiles made in this way should work even for games that don't support such settings natively.

You should also be able to apply a profile globally for all games, or create game specific settings. This option is great for keybinds. Most sticks back in the day only had two or three buttons, but now you can tie lots of keyboard actions to your stick instead.

Don't forget to check out GOG.com if you want to add to your Wing Commander collection.
 
Hi and welcome!
Thanks!

One possible solution is to see if your stick has configuration software that allows you to tweak deadzones and sensitivity. Profiles made in this way should work even for games that don't support such settings natively.
Yup, done. The deadzone problem persists even with deadzones on both axes zeroed out in the joystick software. I also tweaked the response curves to be flatter in the middle so the response just off-center wouldn't be as wild; that helped a bit.


You should also be able to apply a profile globally for all games, or create game specific settings. This option is great for keybinds. Most sticks back in the day only had two or three buttons, but now you can tie lots of keyboard actions to your stick instead.
Did that as well. Best part is having a persistent switch for the afterburner so you don't have to hold the tab key. :]
 
Not much else to be done then. I managed to get my Logitech working quite nicely with the GOG releases, as well the Kilrathi Saga. YMMV, I suppose.
 
There's gotta be something! The deadzone issue seems to be specific to Privateer under DOSBox -- Wing Commander 1, for example, doesn't have that problem (though it does have other problems). Switching the CPU type from "pentium_slow" to "486_slow" even reduced the deadzone somewhat.
 
Have you progressed to any ship besides the Tarsus? It's not known for handling well.

As for CPU type, leaving it on Auto always produces the best results for me.
 
I'm deep into Righteous Fire with a Centurion now.

This isn't a ship problem. I've beaten the game several times on my old DOS machines so I know how it should play. Bad maneuverability means a slow turning rate for a given amount of joystick deflection. What I'm experiencing in Privateer is literally ZERO response off-center until maybe 1/4 of the total stick deflection, followed by a very fast ramp up to maximum response. In other applications, there is no such zone of zero response (neglecting the play in the worn gimbal), and the ramp up to maximum response is smoother.
 
Good call. Here it is:


[sdl]
fullscreen=false
fulldouble=true
fullresolution=original
windowresolution=original
output=overlay
autolock=true
sensitivity=100
waitonerror=true
usescancodes=true
priority=higher,normal
mapperfile=C:\Users\xxxx\D-Fend Reloaded\mapper.map

[dosbox]
machine=svga_s3
captures=C:\Users\xxxx\D-Fend Reloaded\Capture\DOSBox DOS
memsize=16

[render]
frameskip=0
aspect=true
scaler=normal3x

[cpu]
core=auto
cputype=486_slow
cycles=max
cycleup=10
cycledown=20

[mixer]
nosound=false
rate=44100
blocksize=1024
prebuffer=10

[midi]
mpu401=intelligent
mididevice=default
midiconfig=

[sblaster]
sbtype=sb16
sbbase=220
irq=7
dma=1
hdma=5
sbmixer=true
oplmode=auto
oplrate=44100
oplemu=default

[gus]
gus=false
gusrate=44100
gusbase=240
gusirq=5
gusdma=1
ultradir=C:\ULTRASND

[speaker]
pcspeaker=true
pcrate=44100
tandy=auto
tandyrate=44100
disney=true

[dos]
xms=true
ems=true
umb=true
keyboardlayout=US

[joystick]
joysticktype=2axis
timed=false
autofire=false
swap34=false
buttonwrap=false

[serial]
serial1=dummy
serial2=dummy
serial3=disabled
serial4=disabled

[autoexec]
@Echo off
SET PATH=Z:\
keyb US 437
mount C "C:\Users\xxxx\D-FEND~1\VIRTUA~1\"
mount D "D:\" -t cdrom -label CDROM
C:
echo.

If exist C:\FREEDOS\COMMAND.COM goto AddFreeDos
Goto Next1
:AddFreeDos
set path=%PATH%;C:\FREEDOS
:Next1

If exist C:\NC55\NC.EXE goto AddNC55
Goto Next2
:AddNC55
set path=%PATH%;C:\NC55
echo You can start Norton Commander (file manager) by typing "NC".
Goto Next3
:Next2

If exist C:\NC551\NC.EXE goto AddNC551
Goto Next3
:AddNC551
set path=%PATH%;C:\NC551
echo You can start Norton Commander (file manager) by typing "NC".
:Next3

If exist C:\NDN\NDN.COM goto AddNDN
Goto Next4
:AddNDN
set path=%PATH%;C:\NDN
echo You can start Necromancer's Dos Navigator (file manager) by typing "NDN".
:Next4

If exist C:\DOSZIP\DZ.EXE goto AddDZ
Goto Next5
:AddDZ
set path=%PATH%;C:\DOSZIP
echo You can start Doszip Commander (file manager) by typing "DZ".
:Next5

If exist C:\FREEDOS\DOSSHELL.EXE goto AddDosshell
Goto Next6
:AddDosshell
echo You can start FreeDOS Shell (file manager) by typing "DOSSHELL".
:Next6
 
I would start with:

core=auto
cputype=auto
cycles=auto

I will dig around to see what joystick options are available. The DOSBox wiki has very little info in that regard.
 
For your reference, here is the .conf for the GOG version of Privateer. You can try changing some settings to see if it has any effect.

# Lines starting with a # are commentlines.
# They are used to (briefly) document the effect of each option.

[sdl]
# fullscreen -- Start dosbox directly in fullscreen.
# fulldouble -- Use double buffering in fullscreen.
# fullresolution -- What resolution to use for fullscreen: original or fixed size (e.g. 1024x768).
# windowresolution -- Scale the window to this size IF the output device supports hardware scaling.
# output -- What to use for output: surface,overlay,opengl,openglnb,ddraw.
# autolock -- Mouse will automatically lock, if you click on the screen.
# sensitiviy -- Mouse sensitivity.
# waitonerror -- Wait before closing the console if dosbox has an error.
# priority -- Priority levels for dosbox: lowest,lower,normal,higher,highest,pause (when not focussed).
# Second entry behind the comma is for when dosbox is not focused/minimized.
# mapperfile -- File used to load/save the key/event mappings from.
# usescancodes -- Avoid usage of symkeys, might not work on all operating systems.

fullscreen=true
fulldouble=false
fullresolution=original
windowresolution=original
output=overlay
autolock=true
sensitivity=100
waitonerror=true
priority=higher,normal
mapperfile=mapper.txt
usescancodes=true

[dosbox]
# language -- Select another language file.
# memsize -- Amount of memory DOSBox has in megabytes.
# machine -- The type of machine tries to emulate:hercules,cga,tandy,pcjr,vga.
# captures -- Directory where things like wave,midi,screenshot get captured.

language=
machine=svga_s3
captures=capture
memsize=16

[render]
# frameskip -- How many frames DOSBox skips before drawing one.
# aspect -- Do aspect correction, if your output method doesn't support scaling this can slow things down!.
# scaler -- Scaler used to enlarge/enhance low resolution modes.
# Supported are none,normal2x,normal3x,advmame2x,advmame3x,hq2x,hq3x,
# 2xsai,super2xsai,supereagle,advinterp2x,advinterp3x,
# tv2x,tv3x,rgb2x,rgb3x,scan2x,scan3x.
# If forced is appended (like scaler=hq2x forced), the scaler will be used
# even if the result might not be desired.

frameskip=0
aspect=false
scaler=normal2x

[cpu]
# core -- CPU Core used in emulation: normal,simple,dynamic,auto.
# auto switches from normal to dynamic if appropriate.
# cycles -- Amount of instructions DOSBox tries to emulate each millisecond.
# Setting this value too high results in sound dropouts and lags.
# You can also let DOSBox guess the correct value by setting it to max.
# The default setting (auto) switches to max if appropriate.
# cycleup -- Amount of cycles to increase/decrease with keycombo.
# cycledown Setting it lower than 100 will be a percentage.

core=auto
cycles=max
cycleup=1000
cycledown=1000

[mixer]
# nosound -- Enable silent mode, sound is still emulated though.
# rate -- Mixer sample rate, setting any devices higher than this will
# probably lower their sound quality.
# blocksize -- Mixer block size, larger blocks might help sound stuttering
# but sound will also be more lagged.
# prebuffer -- How many milliseconds of data to keep on top of the blocksize.

nosound=false
rate=22050
blocksize=2048
prebuffer=240

[midi]
# mpu401 -- Type of MPU-401 to emulate: none, uart or intelligent.
# device -- Device that will receive the MIDI data from MPU-401.
# This can be default,alsa,oss,win32,coreaudio,none.
# config -- Special configuration options for the device. In Windows put
# the id of the device you want to use. See README for details.

mpu401=intelligent
device=default
config=

[sblaster]
# sbtype -- Type of sblaster to emulate:none,sb1,sb2,sbpro1,sbpro2,sb16.
# sbbase,irq,dma,hdma -- The IO/IRQ/DMA/High DMA address of the soundblaster.
# mixer -- Allow the soundblaster mixer to modify the DOSBox mixer.
# oplmode -- Type of OPL emulation: auto,cms,opl2,dualopl2,opl3.
# On auto the mode is determined by sblaster type.
# All OPL modes are 'Adlib', except for CMS.
# oplrate -- Sample rate of OPL music emulation.

sbtype=sb16
sbbase=220
irq=5
dma=1
hdma=5
mixer=true
oplmode=auto
oplrate=22050

[gus]
# gus -- Enable the Gravis Ultrasound emulation.
# gusbase,irq1,irq2,dma1,dma2 -- The IO/IRQ/DMA addresses of the
# Gravis Ultrasound. (Same IRQ's and DMA's are OK.)
# gusrate -- Sample rate of Ultrasound emulation.
# ultradir -- Path to Ultrasound directory. In this directory
# there should be a MIDI directory that contains
# the patch files for GUS playback. Patch sets used
# with Timidity should work fine.

gus=false

[speaker]
# pcspeaker -- Enable PC-Speaker emulation.
# pcrate -- Sample rate of the PC-Speaker sound generation.
# tandy -- Enable Tandy Sound System emulation (off,on,auto).
# For auto Tandysound emulation is present only if machine is set to tandy.
# tandyrate -- Sample rate of the Tandy 3-Voice generation.
# disney -- Enable Disney Sound Source emulation. Covox Voice Master and Speech Thing compatible.

pcspeaker=true
pcrate=22050
tandy=auto
tandyrate=22050
disney=true

[joystick]
# joysticktype -- Type of joystick to emulate: auto (default), none,
# 2axis (supports two joysticks,
# 4axis (supports one joystick, first joystick used),
# 4axis_2 (supports one joystick, second joystick used),
# fcs (Thrustmaster), ch (CH Flightstick).
# none disables joystick emulation.
# auto chooses emulation depending on real joystick(s).
# timed -- enable timed intervals for axis. (false is old style behaviour).
# autofire -- continuously fires as long as you keep the button pressed.
# swap34 -- swap the 3rd and the 4th axis. can be useful for certain joysticks.
# buttonwrap -- enable button wrapping at the number of emulated buttons.

joysticktype=auto
timed=false
autofire=false
swap34=false
buttonwrap=true

[serial]
# serial1-4 -- set type of device connected to com port.
# Can be disabled, dummy, modem, nullmodem, directserial.
# Additional parameters must be in the same line in the form of
# parameter:value. Parameter for all types is irq.
# for directserial: realport (required), rxdelay (optional).
# for modem: listenport (optional).
# for nullmodem: server, rxdelay, txdelay, telnet, usedtr,
# transparent, port, inhsocket (all optional).
# Example: serial1=modem listenport:5000

serial1=dummy
serial2=dummy
serial3=disabled
serial4=disabled

[dos]
# xms -- Enable XMS support.
# ems -- Enable EMS support.
# umb -- Enable UMB support.
# keyboardlayout -- Language code of the keyboard layout (or none).

xms=true
ems=true
umb=true
keyboardlayout=none

[ipx]
# ipx -- Enable ipx over UDP/IP emulation.

ipx=false
 
Thanks for digging that up.

No dice with either config, unfortunately. The rest of the game continues to work fine, but the deadspot persists.

It really seems like the game is simply neglecting joystick input below a certain threshold. If I set the axis curves to ramp up more quickly, the deadzone seems to go away but the response is too fast.
 
By the way, found this thread that seems tantalizing, but I have no way to make the change it suggests -- I think they're talking about the source code:

http://www.vogons.org/viewtopic.php?t=29753

I've seen a lot of complaints about a large deadzone when playing some games, such as Privateer and Wing Commander. Those complaints tend to be worse when using some of the Saitek (e.g. x52) sticks and better when they're using a Sidewinder Force Feedback. That is, the actual joystick seems to affect it.

After a lot of playing around, I've discovered a number of things. In no particular order:

Doubling the OHMS value in the Joystick code eliminates the deadzone and seems to make Wing Commander quite playable on my machine. I suspect it has to do with the relative speed of how fast my system is vs. what I force DosBox to run at. I think, perhaps, providing a sensitivity setting on the joystick will allow people to tweak it. Or, perhaps, there is a simulated I/O delay for reading port 201 which isn't present in real life which makes reading the joystick loop take fewer iterations.
 
Interesting find; pity they don't explain what they are actually editing.

Final roll of the dice would be to try a different stick, or see if the GOG version works better. I just tested it myself, and there is no detectable dead-zone with my current setup.
 
Last edited:
Final roll of the dice would be to try a different stick, or see if the GOG version works better. I just tested it myself, and there is no detectable dead-zone with my current setup.
Are you able to have smooth and fine control just off-center? How easy is it to make small adjustments to your course or aim?
 
Are you able to have smooth and fine control just off-center? How easy is it to make small adjustments to your course or aim?

At least as easy as any of my other old WC games. Truth be told though, the controls don't feel that great now that I'm used to newer titles.
 
I'm starting to suspect that when people say they don't perceive any deadzone, that's because of some combination of two things:

1. The joystick's response ramps up quickly near the center (as opposed to other joysticks that have more linear response curves). This would reduce or eliminate the deadzone -- but, because the response curve isn't linear, it still wouldn't be much easier to fine-tune aim.

2. The user simply expects the joystick response to be clunky, and so doesn't even notice the clunkiness.

Seem accurate?
 
I can't speak for anyone else... I tested the behaviour on a clean install of Privateer, with my stick using the default control settings. Not editing of response curves whatsoever. Subjectively, it felt the same as always. It's hard to quantify responsiveness without some means of comparison.
 
To be clear, I'm saying it seems that some joysticks apparently come out of the box with nonlinear response curves that are sharper just off-center, whereas others are more linear out-of-the-box.

Good call on needing a point of comparison for responsiveness. How about this: If you try to put your reticle on target, and it's just a few pixels off, can you reliably get it on-target quickly, or are you likely to overshoot and have to correct back?
 
Back
Top