shithub: qk1

ref: 91c079724e36fdcf6a8a00262ff12f678ee50a22
dir: /README/

View raw version
qk1 - (9) quake
===============
Port of linux/x11 quake to plan9front.
- Works on amd64 and 386, broken on arm and probably other arches
- Lacks networking


Installation
------------
Besides building and installing qk1, you still need .pak files to play. Both
shareware and registered versions (should) work, as well as the official
expansions, and mods.
The data files are to be installed in $home/lib/quake/$gamename, where $gamename
is 'id1' for plain old quake.

% mk install
% mkdir -p $home/lib/quake/id1
% cp /n/quakecd/id1/*.pak $home/lib/quake/id1

% quake

By default, qk1 allocates 8 MB of memory for its internal heap. This amount can
be controlled via the -mem command line parameter like so:

% quake -mem 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'.

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.

On lower framerates, devaudio's delay must be increased appropriately, up to
4410, or sound will cut up.

Installing an expansion or mod, for example rogue:

% mkdir $home/lib/quake/rogue
% cp /n/roguecd/*.pak $home/lib/quake/rogue

Then start with:

% quake -game rogue


Todo/bugs
---------
- don't use #pragma pack and do not read in structs directly
- fix arm graphics issues
- cd: buffer reading from actual cdroms
- do away with PR_Str shit
- input: don't recenter mouse all the time, refactor and remove cargocult
  bullshit, handle mousewheel events, fix grab issues, reimplement dedicated
  server async input, add keyboard autorepeat for prompts
- udp/ip, plan9 style
- manpages
- port quakeworld: mkmany, merging common code
- random crashes in d_sprite.c:D_SpriteDrawSpans
- (amd64) entities visible through walls right when emerging from/immerging into
  water
- fix stdio console color print
- resolutions other than 4:3: some vertical and horizontal strips on the edge
  of the screen aren't drawn
- #define PARANOID reveals several points of failure that are otherwise ignored
- (?) sprites not scaled correctly on higher resolutions
- more testing, cleanups and bug fixes (g '/\* FIXME')


Differences with x11/linux original release
-------------------------------------------
- removed args/cvars:
	-winsize, -height, -width
	-condebug, -nostdout: useless
	-record, -playback: broken and unused
	-sndbits, -sndspeed, -sndmono
	-cddev, -nocdaudio
	-developer
- no fullscreen; screen resolution is just the window's dimensions; any
  resolution (under the r_shared.h limits) is allowed; resize by dragging window
  edges
- some stupid kbd/mouse bugs fixed; mouse grabbing actually grabs the mouse
- added m_windowed cvar (replacing _windowed_mouse), for mouse grabbing
- ungrabs the mouse when main menu or console is accessed
- removed cd [on|off|reset|remap|eject] commands: not quake's problem


Shitty workarounds and other bullshit
-------------------------------------
- #pragma pack for stuff (structs) loaded from files
- pr_strings assumed 32bit pointer arithmetic, so enter PR_GetStr(), which
  completely sucks
- text and code seen as useless for plan9 nuked from orbit (cpp defs, etc.)
- arbitrary resolution limit (r_shared.h): 2048x2048 (was 1280x1024), which
  inflates e.g. a bunch of arrays in the code
- mouse handling is too heavy, all for the purpose of not letting the mouse
  escape the window too easily (and the kludged up shit could probably be
  done better)
- removal of stdio stuff probably not really warranted and possibly introduced
  bugs
- pcx screenshots: the only reason to keep this code around is to be able to do
  screenshots without tearing. that's it.


Legal
-----
Quake, hence qk1, is licensed under the GPLv2. see COPYING for details.