Playback features outlined in issue #715 .
Reintroduce activate\deactivate sound backend when window focus in changed.
Added "windowed_pauseonfocuslost" cvar to allowing user control of pause when the window changes focus.
Added "ogg_pausewithgame" cvar to allow user control of ogg playback whenever the game is paused.
Introduced ogg playback command "mute" as an additional playback option for the console, command buffer and key binds.
If the window focus is changed all sound playback will stop and resume as expected.
Setting "window_pauseonfocuslost" to 1 will force the game to pause when the window focus is lost, "cl_paused" is ignored in multiplayer.
Setting "ogg_pausewithgame" to 1 will force ogg playback to pause whenever the game is paused.
Toggling ogg mute through "ogg mute" sets the volume to 0 while playback resumes.
Code around it by using `wcsncpy()` and `wcscat()` combined with a
manual length check. This should be enough to make YQ2 working on Win
XP again. Please note, that we don't support any Windows older than
10. However we still try to avoid breaking them.
Based on an idea by @ carlo-bramini, closes#994.
This fixes a corner case: When the client is in state `ca_disconnected`
and the user presses repeatedly return, there is a chance that a older
line is erroneously printed again. This is caused by spinning through
the console history buffer, when an old line is the current line a the
frame were the console refreshs it's printed. Work around that by
clearing every line as soon as it becomes the current line.
Closes#987.
Ogg file has incorrectly calculated size and samples as
result calculation of volume and timings have used
incorrect test samples for sterio sound.
Checked with compare ogg and wav samples from 25th
Anniversary mod:
```
ffmpeg -i 25acu/sound/world/goreshit.wav 25acu/sound/world/goreshit-ogg.wav
```
Soundlist:
```
]/soundlist
(16b) 1404340(2 ch) world/goreshit.wav -11.7 dB 351.1s:15.0..0.3..1.1..2.0
(16b) 1404340(2 ch) world/goreshit-ogg.wav -11.5 dB 351.1s:15.0..18.4..1.4..2.0
```
Fixes:
* https://github.com/glhrmfrts/q25_game/issues/8
* https://github.com/yquake2/yquake2/issues/991
dkms-hid-nintendo can expose the IMU sensors of a Switch controller
as a "second joystick", which makes possible to use gyro aiming on a
system without SDL 2.0.14 available (the minimum required to read
controller sensors like gyro and accelerometer).
This commit makes both "sensor" and "joystick reading" to coexist.
"Sensor" is still the preferred method when available.
Playback features outlined in issue #729.
Added shuffle playback parameters:
default - Ogg track currently active repeats. This is the quake2 default behaviour.
play once - Ogg track currently active plays once then stops.
sequential - Ogg tracks play in numerical order, from the currently playing track and like default repeats.
random - Ogg tracks play randomly, but never the same track twice.
Ogg tracks can be played from a full-screen console and tracks played will adhere to the shuffle parameter.
Loading a game map the map cd-track takes precedence as the first played track then subsequent playback of tracks will adhere to the shuffle parameter.
Any currently playing track can be overridden from the console with "ogg play <track>" command and subsequent playback of tracks will adhere to the shuffle parameter.
If a sound restart occurs the ogg backend will attempt to save and recover the currently playing track, though some data in the audio queue may be lost in the process.
the HunkAlloc size calculated in calTexinfoAndFacesSize() was too
small because that map has a *massive* water poly.
Unfortunately it's not feasible to calculate the correct size
(it depends on the size of the poly, for which I'd need the vertex
coordinates, but to get them I'd have to load them first, which requires
the allocation...), but allocating 5MB extra (instead of 1) made it work
When running a mod/addon and then switching back to baseq2,
FS_BuildGameSpecificSearchPath() is called and sets fs_gamedir
(amongst other things). Unfortunately it used fs_baseSearchPaths->path
to set it, and in the -portable case, the top base search path is
pak2.pak, i.e. not a normal directory, so fs_baseSearchPaths->path is ""
and fs_gamedir is set to "" => later Sys_Mkdir(fs_gamedir) fails.
Now fs_gamedir is set to the correct directory, based on fs_rawPath
Haptic maximum effect distance value, By default this cvar is `100.0`.
Any positive value is valid. E.g. effect of shot near barrel to barrel
has 58 points.
In Quake I this coould be used to filter messages by priority. id
Software never implemented it for Quake II, it's just a left-over.
Remove it.
The `msg` cvar was exploited in attacks against the client. A malicious
server send a `msg` cvar as stufftext -> it gets saved into the config
-> since it's retrivable over the network through the userinfo stuff
this can be used to track users, etc.
Patchwork from df399576 no longer needed, deleted
Joysticks open with error checking
Slight optimization for gyro aiming
Better console messages in game controller init
`s_info->samples' is very big, even for short wave files. Multiply it by
1000 has a very high chance of flowing over and it is a wonder that so
far no one noticed it. Fix the overflow by working on 64 bit integers.
Closes#931.
I was reported a strange problem were GL3 is crashing with SIGBUS while
enumerating the GL extensions. To me it looks like a problem in Nvidias
FreeBSD driver, which for some reason doesn't reproduce on my machine.
However it' hard to tell what exactly happens without a full backtrace
and the user is unable to provide one... For the future try to handle
SIGBUS to catch those problems.
Sometimes, when half-submerged in opaque water (head/camera still
above water), explosions and similar weren't drawn, because
1. The check whether a client gets a message to draw an explosion (etc)
uses the clients origin, not the camera position
2. Apparently the map compiler was buggy and (only in some places!)
didn't correctly mark areas in the PVS/PHS (PHS is for hearing) as
connected even though they should be (when underwater you should be
able to hear things in the region above the water, even if the water
is opaque and you can't see it).
This is an experimental(!) workaround that does a second check with a
higher origin if the first check fails and the client is currently
(considered) under water.
It's totally possible that this breaks other things, I don't know..
By the way, a good place to test this is the first water area in jail1