ref: 979562faeac7f9e557510f24f3e5df9acc830a6d
dir: /README/
qk1 - (9) quake =============== Port of linux/x11 quake and quakeworld to plan9front. Tested and known to work on amd64, 386 and arm, but currently broken on zynq. For details, see: http://nopenopenope.net/posts/quake Hereafter `qk1' refers to the project as a whole, and `quake' and `quakeworld' refer to the actual games. Installation and start up ------------------------- Besides building and installing qk1, you still need .pak files to play. Both shareware and registered versions work, as well as the official expansions, and mods. The data files are to be installed in /sys/games/lib/quake/$gamename, where $gamename is 'id1' for plain old quake. Savegames, configuration files and other user-specific data is saved in $home/lib/quake/$gamename, if it exists. To install quake: ; mk install ; mkdir -p $home/lib/quake/id1 ; cp /n/quakecd/id1/*.pak $home/lib/quake/id1 ; games/quake >/dev/null To install quakeworld: ; cd qw ; mk install To install an expansion or mod, for example rogue: ; mkdir /sys/games/lib/quake/rogue ; cp /n/roguecd/*.pak /sys/games/lib/quake/rogue ; mkdir $home/lib/quake/rogue To start quake: ; games/quake >/dev/null Mods: ; games/quake -g rogue >/dev/null quakeworld's client: ; games/qwcl >/dev/null quakeworld's server: ; games/qwsv Memory limit ------------ By default, qk1 allocates 12 MB of memory for its internal heap. This amount can be controlled via the -m command line parameter like so: ; quake -m 16 It is necessary to increase it when playing on larger resolutions, else qk1 might crash with errors such as 'Hunk_Alloc: failed on 548512 bytes'. Mouse usage ----------- Both quake and quakeworld now grab the mouse and have free mouse look by default. Mouse grabbing is controled via a console variable at runtime: ] m_windowed 1 Mouse look on the other hand is enabled with a command: ] +mlook To disable mouse look, use `-mlook'. Screen resolution ----------------- The rio(1) window running qk1 can be resized at will and at runtime, but must the drawing area's size must be between 328x160 and 2047x2048. To help with drawing speed, scaling up from a fixed resolution has been implemented. When enabled, qk1 will behave like doom(1), where window size determines at runtime a scaling factor. Currently, the way to enable this is different between quake and quakeworld. quake: ; games/quake -s 320 200 quakeworld: ; games/qwcl -scale 320 200 Framerate and performance ------------------------- To play the games comfortably the framerate should be above 72. There are several things to note: - lowering the resolution (window size) improves performance - scaling up graphics from a lower resolution improves performance - performance influences sound output and can cause underflows (see below) In quakeworld, the framerate is controlled by one of two console variables, `cl_maxfps' and `rate' and can be between 30 and 72. If `cl_maxfps' is not set, framerate is set to `rate' / 80. `cl_maxfps' is now set to 72 by default. A simple way to benchmark is to play a demo with an uncapped framerate (one must be provided for quakeworld beforehand): ] timedemo demo2 Audio and music --------------- On low framerates, devaudio's delay must be increased appropriately, up to 4410 (for a rate of 44.1 kHz), or sound will cut up. This applies to quakeworld as well, for which the framerate can also be capped lower. qk1 reads /mnt/cd/[au]NNN files as in cdfs(1) to play music. The directory needn't be populated by cdfs(1), so long as the files are in the format described by audio(3). Reading from actual cdroms is currently broken. Known bugs ---------- - rendering broken on zynq - regression: cd audio with actual cd's broken - a rare crash at d_sprite.c:/D_SpriteDrawSpansd can occur when running for a long time - an infinite loop in world.c:/SV_TouchLinks can sometimes occur - (amd64) entities visible through walls right when emerging from/immerging into water - resolutions other than 4:3: some vertical and horizontal strips on the edge of the screen aren't drawn - sprites are not scaled correctly on higher resolutions and become= disproportionate - #define PARANOID reveals several points of failure that are otherwise ignored - both stdio(2) and print(2) are used due to the way colored strings are, how to handle this gracefully is unknown - questionable pr_edict.c:/PR_Str hack may cause problems - refactoring: manpages, command line args, merge quakeworld, FIXME's in code Legal ----- Quake, hence qk1, is licensed under the GPLv2. see COPYING for details.