# QuakeSpasm

##

Page last edited: December 2015

## 1. About

## 2. Downloads

## 3. Hints

- 3.1 Music Playback

## 4. Compiling and Installation

- 4.1 Linux/Unix
- 4.2 Windows
- 4.3 Mac OS X

## 5. Known Bugs

## 6. Changes

- 6.1 Changes in 0.91.1
- 6.2 Changes in 0.90.1
- 6.3 Changes in 0.90.0
- 6.4 Changes in 0.85.9
- 6.5 Changes in 0.85.8
- 6.6 Changes in 0.85.7
- 6.7 Changes in 0.85.6
- 6.8 Changes in 0.85.5
- 6.9 Changes in 0.85.4
- 6.10 Changes in 0.85.3
- 6.11 Changes in 0.85.2
- 6.12 Changes in 0.85.1

## 7. Todo

## 8. Copyright

## 9. Contact

## 10. Links

## 1. About

QuakeSpasm is a Quake 1 engine based on the SDL port of FitzQuake.

It includes support for 64 bit CPUs and custom music playback, and includes a new sound driver, some graphical niceities, and numerous bug-fixes and other improvements.

## 2. Downloads

- Project Downloads
- Automatic Builds

## 3. Hints

Visit the FitzQuake homepage for a full run-down of the engine's commands and variables.

- To disable some changes, use "quakespasm -fitz"
- Quakespasm's custom data is stored in "quakespasm.pak". Install this file alongside your id1 directory to enable the custom console background and other minor features.
- For different sound drivers use "SDL_AUDIODRIVER=DRIVER ./quakespasm" , where DRIVER may be alsa, dsp, pulse, esd ...
- Shift+Escape draws the Console.
- From the console, use UP to browse the command line history and TAB to autocomplete command and map names.
- There is currently no CD Music volume support and SDL2 doesn't support CD audio. cd_sdl.c needs replacing with cd_linux.c, cd_bsd.c etc..
- In windows, alternative CD drives are accessible by "quakespasm -cddev F" (for example)
- Quakespasm allows loading new games (mods) on the fly with "game GAMENAME {-quoth/hipnotic/rogue}"
- Use "quakespasm -condebug" to save console log to "qconsole.log". SDL2 builds no longer generate stdout.txt/stderr.txt.

## 3.1 Music Playback

Quakespasm can play various external music formats, including MP3, OGG and FLAC.

- Tracks should be named like "track02.ogg", "track03.ogg" ... (there is no track01) and placed into "Quake/id1/music".
- Unix users may need some extra libraries installed: "libmad" or "libmpg123" for MP3, and "libogg" and "libvorbis" for OGG.
- As of 0.90.0, music is played back at 44100 Hz by default with no need to adjust "-sndspeed".
- Use the "-noextmusic" option to disable this feature.
- See Quakespasm-Music.txt for more details.

## 4. Compiling and Installation

Quakespasm's (optional) custom data is now stored in the file quakespasm.pak. This file should be placed alongside your quakespasm binary and id1 directory.

To check-out the latest version of QuakeSpasm, use svn co svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm

## 4.1 Linux/Unix

After extracting the source tarball, browse the Makefile and edit the music streaming options, then

    make
    cp quakespasm /usr/local/games/quake (for example)

Compile time options include

- make DO_USERDIRS=1 to include user directories support
- make DEBUG=1 for debugging
- make SDL_CONFIG=/PATH/TO/SDL-CONFIG for unusual SDL installations
- make USE_SDL2=1 to compile against SDL2 instead of SDL-1.2

Streaming music playback requires "libmad" or "libmpg123" for MP3, and "libogg" and "libvorbis" for OGG files.

The project can also be built with Codeblocks (project files included).

## 4.2 Windows

The QuakeSpasm developers cross-compile windows binaries using MinGW and Mingw-w64.

The project can also be built using Visual Studio 2005 (or newer).

## 4.3 Mac OS X

A Quakespasm App (including program launcher and update framework) can be made using the Xcode template found in the MacOSX directory.

Alternatively, have a look at Makefile.darwin for more instructions on building from a console.

## 5. Known Bugs

Brightness issues should be fixed with GLSL gamma in 0.90.1, if your system supports OpenGL 2. For reference on older systems:
Some versions of Xorg and SDL have brightness issues.
Try setting "export SDL_VIDEO_X11_NODIRECTCOLOR=1", or if you have Xorg >= 7.5 and broken brightness, these patched libSDL binaries may help.

- Gamma patched libSDL (i686-linux)
- Gamma patched libSDL (x86_64-linux)

The "game" command doesn't execute quake.rc in the new game directory being switched to. This means any custom key bindings in a mod's config.cfg or special settings in a quake.rc won't be loaded. The only workaround is launching the engine with the -game command-line switch instead of using the game console command. Or, after running the game command, you can run "exec quake.rc" by yourself (YMMV).

## 6. Changes

## 6.1 Changes in 0.91.1

### Bugfixes

- Fix unwanted fog mode change upon video restart.
- Work around Intel 855 bug in status bar drawing with "r_oldwater 0" and "scr_sbaralpha 0".
- Fix an obscure GLSL bug where changing gamma would result in the screen turning to noise.
- Fix GLSL gamma causing the tiled screen border to turn white when "sizedown" is used.
- Fix an alias model VBO renderer bug where a model not precached during map start wouldn't be drawn.
- Fix the order of OpenGL context creation and window creation in SDL2 video.
- Fix a calling convention issue in windows DPI awareness function pointers.
- Fix a random texture recoloring after video mode change.
- Fix a liquid turning to garbage after several video mode changes and "r_oldwater 0".
- Fix a wrong alpha-sorting bug introduced in 0.90.1.
- Fix "flush" command not reloading mdl's from disk (bug introduced in 0.90.1).
- Prevent a possible buffer overflow in Cbuf_Execute (old Q1/Q2 bug).
- Prevent a possible vulnerability in MSG_ReadString (old Q1/Q2 bug).

### Visual improvements

- New cvars r_lavaalpha, r_slimealpha, r_telealpha for fine-tuning specific liquid opacities (from DirectQ/RMQEngine, non-archived, default to 0), and new worldspawn keys _wateralpha, _lavaalpha, _slimealpha, _telealpha, _skyfog (unique to Quakespasm, similar to the behaviour of the "fog" worldspawn key).
- GLSL gamma is now supported on older hardware without NPOT extension.

### Interface improvements

- New r_pos command to show player position.
- NaN detection in traceline with "developer 1" set now warns instead of errors.

### Code cleanup / Other

- Update third-party libraries.

### Raised limits

- Default max_edicts 8192 (was 2048) and no longer saved to config.cfg.
- Default heapsize 256 MB (was 64 MB).
- Default zone 4 MB (was 384 KB).
- Raised MAX_SFX to 1024 (was 512).

## 6.2 Changes in 0.90.1

### Bugfixes

- Fix dynamic light artifact where changing lightmap are rendered one frame late (bug introduced in 0.90.0).
- Fix texture memory leak when changing video modes with SDL2.
- Fix rare incorrect mdl lighting on 64-bit builds. (details here.)
- Fix fullbrights turning black after "kill" command (bug introduced in 0.90.0).
- Clear all fog values on map change to prevent colored fog carrying over to jam3_tronyn.bsp.
- Allow loading saves with } character in quoted strings, fixes issue with retrojam1_skacky.bsp.
- Fix viewmodel not lerping on extended-limit maps.
- Fix crash on out-of-bounds skin number.

### Performance

- Use multithreaded OpenGL on OS X for better performance.
- New, faster mdl renderer using GLSL. Disable with "-noglslalias".

### Visual improvements

- New gamma correction implementation using GLSL. Fixes all known gamma issues (affecting the full display, persisting after quitting, or darkening the screen on OS X). Disable with "-noglslgamma".
- Use high-quality water by default (r_oldwater 0).
- Shadows use stencil buffer to avoid overlapping artifacts (from MarkV.)
- r_noshadow_list cvar added (from MarkV.)

### Interface improvements

- Support pausing demo playback with the "pause" command.
- Autocompletion for "game", "record", "playdemo".
- Experimental windowed fullscreen mode available with vid_desktopfullscreen 1 (only in SDL2 builds, takes effect upon entering fullscreen mode the next time.)
- Silence "exceeded standard limit" messages unless developer cvar is >= 1.
- Some spam moved from developer 1 to 2: "can't find tga/lit/ent", "trying to load ent", "bad chunk length", "meshing", "PR_AlocStringSlots: realloc'ing"

### Code cleanup

- Clean up IDE project files to build on fresh systems.
- Update 3rd-party libraries.

## 6.3 Changes in 0.90.0

- Fix issues on Windows systems with DPI scaling.
- Unix/Mac user directories support. Disabled by default, 'make DO_USERDIRS=1' to enable it.
- SDL2 support. Disabled by default, 'make USE_SDL2=1' to enable it.
- Revised keyboard input code.
- Revised/improved the 'game' command, i.e. on-the-fly mod changing. It now accepts an optional second argument for mission packs or quoth support i.e. -hipnotic, -rogue, or -quoth. For example, for WarpSpasm: "game warp -quoth"
- Command line: "-game {quoth/hipnotic/rogue}" is now treated the same as -quoth, -hipnotic, or -rogue.
- Console speed now resolution-independent.
- Disabled gl_zfix, which caused glitches and is undesirable for new maps. Replacement .ent files to fix z-fighting for several id1 maps added to quakespasm.pak.
- PF_VarString buffer bumped to 1024, avoids truncated centerprints from the 'In The Shadows' mod.
- Support for opengl non-power-of-two-textures extension (disable with command line: "-notexturenpot".)
- Support for OpenGL vertex buffer objects (VBO, OpenGL 1.5 or newer) for world and brush models (disable with command line: "-novbo".)
- Antialiasing (FSAA) support (command line: -fsaa x, where x can be 0, 2, 4, 8).
- Fence textures support.
- Dynamic light speedup. Speedup loading of tga and pcx external images.
- Brush model drawing speedup.
- Support for BSP2 and 2PSB map formats.
- Support for Opus, FLAC, and tracker music (S3M, IT, UMX, etc.), as compile-time options.
- Music and sfx now mixed at 44100 Hz to avoid downsampling music. Low-pass filter applied to the sfx if -sndspeed is 11025 (the default), to preserve the same sound quality as 0.85.9. New -mixspeed option sets the rate for mixing sfx and music, and output to the OS (default 44100), setting it to 11025 reverts to 0.85.9 behaviour. New snd_filterquality cvar, value can be between 1 (emulate OS X resampler) and 5 (emulate Windows resampler), controls the sound of the low-pass filter.
- Better Hor+ field of view (FOV) scaling behavior.
- Better cross-map demo playback support.
- Fix screenshots when screen width isn't a multiple of 4.
- Fix a lighting glitch due to floating point precision.
- Fix a looping sounds glitch.
- Fix a vulnerability in file extension handling. Tighten path handling safety.
- Initialize opengl with 24-bit depth buffer at 32 bpp.
- Reset all models upon gamedir changes. (Fixes failures with mods using custom content.)
- Fix broken behavior upon gamedir changes if -basedir is specified on the command line.
- NET_MAXMESSAGE and MAX_MSGLEN limits bumped to 64000.
- MAX_EFRAGS bumped to 4096, and MAX_CHANNELS to 1024.
- MAX_ENT_LEAFS bumped from 16 to 32 to work around disappearing or flickering brush models in some situations. Also, if an entity is visible from MAX_ENT_LEAFS or more leafs, we now always send it to the client.
- Fix cvar cycle command not working sometimes.
- Host_Error upon missing models. (Prevents segmentation faults.)
- Change sv_aim default value to 1 (i.e. turn off autoaim)
- Add 'prev' and 'next' keywords to the 'cd' command.
- Work around a linux cdrom issue (playback might not start for a while after a stop).
- Quakespasm content customization moved from engine-embedded into a new optional quakespasm.pak file.
- Version bumped to 0.90.0 (because Quakespasm has a decent life of it's own)
- Other fixes and clean-ups.

## 6.4 Changes in 0.85.9

- Fixes for several undefined behaviors in C code (gcc-4.8 support.)
- Implemented Hor+ style field of view (FOV) scaling, useful for widescreen resolutions. Configured by new cvar fov_adapt: set it to 1 and your fov will be scaled automatically according to the resolution. Enabled by default.
- Adjusted string buffers for PR_ValueString and friends to fix crashes with excessively long global strings seen in some rude mods.
- Toned down warning messages from PF_VarString() a bit.
- Fixed Fitzquake's map existence check in changelevel (used to leak file handles which would end up in a Sys_Error() due to consuming all free handles if many maps reside not in pak files.)
- Fixes/cleanups in chat mode handling. Client no longer gets stuck in chat mode upon disconnect.
- Mouse grab/key_dest fixes and key cleanups.
- The "speedkey" now acts as "slowkey" when "always run" is on.
- Support for demo recording after connection to server. (thanks to Baker for a patch)
- Corner case fixes in COM_Parse() for quoted strings and support for C-style /*..*/ comments.
- Changed lightmaps to GL_RGBA instead of GL_RGB.
- Better parse for opengl extensions list (from quakeforge.)
- Vsync saving/loading fixes.
- Fixed pointfile loading.
- Multiple cleanups in gl_vidsdl.c.
- Opus music decoding support (as an optional patch only.)
- Several other minor fixes/cleanups.

## 6.5 Changes in 0.85.8

- Made Quake shareware 1.00 and 1.01 versions to be recognized properly.
- Fixed control-character handling in unicode mode. Keyboard input tweaks.
- Made the keypad keys to send separate key events in game mode.
- Text pasting support from OS clipboard to console. (windows and macosx.)
- Support for the Apple (Command) key on macosx.
- Fixed increased (more than 32) dynamic lights.
- Music playback: Made sure that the file's channels count is supported.
- Support for Solaris.
- Switched to using libmad instead of libmpg123 for MP3 playback on Mac OS X.
- Better support for building the Mac OS X version using a makefile, support for cross-compiling on Linux.
- Fixed a minor intermissions glitch.
- Increased string buffer size from 256 to 384 for PF_VarString to work around broken mods such as UQC.
- Restored original behavior for Quake registered version detection.
- Minor demo recording/playback tweaks.
- Minor tweaks to the scale menu option.
- unbindall before loading stored bindings (configurable by new cvar cfg_unbindall, enabled by default.)
- New icon.
- Miscellaneous source code cleanups.

## 6.6 Changes in 0.85.7

- Added support for cross-level demo playback
- gl_texturemode is reimplemented as a cvar with a callback and the setting is automatically saved to the config
- Fixed execution of external files without a newline at the end
- Reduced memory usage during reloading of textures
- Fixed compilation on GNU/kFreeBSD (Debian bug #657793)
- Fixed backspace key on Mac OS X
- Disable mouse acceleration in Mac OS X
- Worked around recursive calling of the anisotropic filter callback
- Console word wrap and long input line fixes
- Verified correct compilation by clang (using v3.0)
- Several other small changes mostly invisible to the end-user

## 6.7 Changes in 0.85.6

- More work for string buffer safety
- Reverted v0.85.5 change of not allowing deathmatch and coop cvars to be set at the same time (was reported for possibility of causing compatibility issues with mods)
- Several cleanups/changes in the cvar layer
- Minor SDL video fixes.

## 6.8 Changes in 0.85.5

- SDL input driver updated adding native keymap and dead key support to the console
- Fixed a crash in net play in maps with extended limits
- Verified successful compilation using gcc-4.6.x
- Added workaround against GL texture flicker (z fighting), controlled by new cvar 'gl_zfix'
- Read video variables early so that a vid_restart isn't necessary after init
- mlook and lookspring fixes
- Added support for loading external entity files, controlled by new cvar 'external_ents'
- Made mp3 playback to allocate system memory instead of zone
- Some updates to the progs interpreter code
- Fixed r_nolerp_list parsing code of fitzquake
- Made sure that deathmatch and coop are not set at the same time
- Several code updates from uHexen2 project, several code cleanups.

## 6.9 Changes in 0.85.4

- Implement music (OGG, MP3, WAV) playback
- A better fix for the infamous SV_TouchLinks problem, no more hard lockups with maps such as "whiteroom"
- Add support for mouse buttons 4 and 5
- Fix the "unalias" console command
- Restore the "screen size" menu item
- Fixed an erroneous protocol check in the server code
- Raised the default zone memory size to 384 kb
- Raised the default max_edicts from 1024 to 2048
- Revised lit file loading, the lit file must be from the same game directory as the map itself or from a searchpath with a higher priority
- Fixed rest of the compiler warnings
- Other minor sound and cdaudio updates

## 6.10 Changes in 0.85.3

- Fix the "-dedicated" option (thanks Oz) and add platform specific networking code (default) rather than SDL_net
- Much needed OSX framework stuff from Kristian
- Add a persistent history feature (thanks Baker)
- Add a slider for scr_sbaralpha, which now defaults to 0.95 (slightly transparent, allowing for a nicer status bar)
- Allow player messages longer than 32 characters
- Sockaddr fix for FreeBSD/OSX/etc networking
- Connect status bar size to the scale slider
- Include an ISNAN (is not-a-number) fix to catch the occassional quake C bug giving traceline problems
- Enumerate options menus
- Add a "prev weapon" menu item (from Sander)
- Small fix to Sound Block/Unblock on win32
- Lots of code fixes (some from uhexen2)
- Sys_Error calls Host_Shutdown
- Added MS Visual Studio support
- Add a "-cd" option to let the CD Player work in dedicated mode, and some other CD tweaks.

## 6.11 Changes in 0.85.2

- Replace the old "Screen size" slider with a "Scale" slider
- Don't constantly open and close condebug log
- Heap of C clean-ups
- Fix mapname sorting
- Alias the "mods" command to "games"
- Block/Unblock sound upon focus loss/gain
- NAT fix (networking protocol fix)
- SDLNet_ResolveHost bug-fix allowing connection to ports other than 26000
- Bumped array size of sv_main.c::localmodels from 5 to 6 fixing an old fitzquake-0.85 bug which used to cause segfaults depending on the compiler.
- Accept commandline options like "+connect ip:port"
- Add OSX Makefile (tested?)

## 6.12 Changes in 0.85.1

- 64 bit CPU support
- Restructured SDL sound driver
- Custom conback
- Tweaked the command line completion and added a map/changelevel autocompletion function
- Alt+Enter toggles fullscreen
- Disable Draw_BeginDisc which causes core dumps when called excessively
- Show helpful info on start-up
- Include real map name (sv.name) and skill in the status bar
- Remove confirm quit dialog
- Don't spam the console with PackFile seek requests
- Default to window mode
- Withdraw console when playing demos
- Don't play demos on program init
- Default Heapsize is 64meg
- Changes to default console alpha, speed
- Changes to cvar persistence gl_flashblend (default 0), r_shadow, r_wateralpha, r_dynamic, r_novis

## 7. Todo

- Add uHexen2's first person camera (and menu item)
- Native CD audio support (if desired). cd_sdl.c doesn't have proper volume controls and SDL2 doesn't support CD audio

## 8. Copyright

- Quake and Quakespasm are released under the GNU GENERAL PUBLIC LICENSE Version 2
- Quakespasm console background image by AAS, released under the CREATIVE COMMONS PUBLIC LICENSE

## 9. Contact

- QuakeSpasm Project page
- Bug reports
- Ozkan (project leader), Eric, Sander, Stevenaaus

## 10. Links

- QuakeSpasm Homepage
- Downloads
- FitzQuake Homepage
- Func Quakespasm forum
- Inside3D forums