Closed d10sfan closed 2 years ago
Log file for 45-50 FPS Prey 2006 with sdl12-compat
https://gist.github.com/parkerlreed/09c437bcdd7fa2ed3022d0110224052c
As mentioned launching a few times in a row can make it go to 60. Starting a game and just pausing it can (and usually does) drop it back down to the 45-50 error state.
60 FPS launch https://gist.github.com/parkerlreed/ca77613e0677b600187a46c4adbd5ad7
Wow: this looks like a nasty issue.
I was able to reproduce it, but I also was able to reproduce it under the real SDL 1.2, so I don't think this is an sdl12-compat bug.
I can get a smooth 60fps by setting com_fixedTic 1
and SDL12COMPAT_SYNC_TO_VBLANK=1
, though that's obviously dependent on the system refresh rate, and apparently can cause problems with the game physics (which are supposed to run at ~62 Hz?)
(A quick look over the Doom 3 source and general complaints online suggests the timing code in the game is pretty dodgy anyway. It looks like it's using some combination of gettimeofday()
(in its 32-bit variety which will break in 2038), and rdtsc
for time-related stuff, and doesn't use SDL at all.)
Interesting, it may be because it's a bit sporadic not seeing it on the real sdl 1.2.
I was able to use that as well to get a nice smooth 60 fps when it works, although it'll still launch at 40-50 fps randomly as well.
Source ports like dhewm3 and rbdoom-3-bfg seemed to have fixed these issues, since I haven't seen anything like that with those, although that's easier with the source code.
linux quake4 could not find sdl12-compat is it just me or are the SDLCL patches specific to id
this will just be a note here, if anyone searches quake4
normal quake4
~/quake4 $ cat quake4
#!/bin/sh
# Needed to make symlinks/shortcuts work.
# the binaries must run with correct working directory
cd "/home/games/quake4/"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/games/quake4/:."
exec ./quake4.x86 +disconnect "$@"
~/quake4 $ ldd quake4.x86|grep SDL
libSDL-1.2.so.0 => /usr/lib/i386-linux-gnu/libSDL-1.2.so.0 (0xf7e3a000)
quake4-smp with sdlcl patch
~/quake4 $ cat quake4-smp
#!/bin/sh
# Needed to make symlinks/shortcuts work.
# the binaries must run with correct working directory
cd "/home/games/quake4/"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/games/quake4:."
exec ./quake4smp.x86 +disconnect "$@"
~/quake4 $ ldd quake4smp.x86|grep SDL
libSDL-1.2.id.so.0 => not found
~/quake4 $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/games/quake4:."
~/quake4 $ ldd quake4smp.x86|grep SDL
libSDL-1.2.id.so.0 (0xf7d4d000)
SDL Compatibility Library (SDLCL)
Enables native Alt+Tab ↹ and additional screen resolutions by translating SDL 1.2's calls into modern SDL 2.0 on Linux.
Replace libSDL library of the game[6]
Install libsdl2-2.0-0, libsdl2-2.0-0:i386, libsdl1.2debian, libsdl1.2debian:i386, libudev1, libudev1:i386 packages with your distro's software manager.
Backup and remove libSDL-1.2.id.so.0 library in
copy and rename sdl12-compat to folder = libSDL-1.2.id.so.0
sudo ldconfig
~/quake4 $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/games/quake4:."
ldd quake4smp.x86|grep SDL
libSDL-1.2.id.so.0 => not found
fails to find the sdl12-compat library
-rwxrwxr-x 1 games games 221936 Mar 17 08:05 libSDL-1.2.id.so.0*
-rwxrwxr-x 1 games games 363252 May 14 2018 libSDL-1.2.id.so.0_GOOD*
-rwxr-x--- 1 games games 3368297 Apr 23 2019 OLD_libSDL-1.2.id.so.0*
ah. i see
its i386, it wont find it unless compiled :i386 library
ldd quake4.x86|grep SDL
libSDL-1.2.so.0 => /usr/lib/i386-linux-gnu/libSDL-1.2.so.0 (0xf7e7d000)
With id Tech 4 games (tested with Quake 4 and Prey (2006), using sdl12-compat (this also happened with sdlcl as well), will cause the game to launch with the fps stuck at 40-50 fps. After launching the game a few times, usually three or 4 times, the game will launch normally at 60 fps. Running without sdl12-compat makes the game not have this issue.
I have some log files from launching the game with SDL12COMPAT_DEBUG_LOGGING=1 set.
quake4-40fps.log quake4-60fps.log