WinQuake ported to the TI-Nspire calculator
== nQuake Readme ==
TOC:
- Introduction
- Hardware and Software requirements
- Installation
- Keyboard Controls
- How to get the Shareware PAK file
- Source Notes
== Introduction ==
nQuake is a port of WinQuake which sources were released by Id Software under the GNU General Public License version 2. It was ( and for some still is ) very popular because soon after release one could create own content for the full version like maps, new enemies and different game play styles. It also featured mature multiplayer modes like deathmatch where one was able to compete with other players online for fame. Multiplayer is missing from this port.
== Hardware and Software requirements ==
You need a Nspire CX or Nspire CX CAS with Ndless 3.1 or Ndless 3.6 installed. Monochrome models wont work.
== Installation ==
You need at least the PAK0.PAK from the shareware release. If you bought Quake you can add PAK1.PAK and probably any additional content to the game directory.
You need to create a directory structure like this on your Nspire:
quake/nquake.tns ; the nquake executable quake/id1/pak0.pak.tns ; the shareware episode pak file quake/id1/pak1.pak.tns ; the full version pak file [optional]
id1/ is the game directory. Quake will store all game related files like key re-mappings, video options and save games there.
Once you have started Quake by running the nQuake executable you will hopefully be presented by a demo playback. If Quake complains about not finding gfx.wad the pak0.pak was not found at the expected location.
In case you cannot put the pak file(s) in a id1 subdirectory relative to the nquake executable because you cannot put files in subdirectories with your link program AND you cannot upload the pak files to the calculator and then "Cut/Paste" or "Save As" them to an id1 directory you can create a file called nquake.cmd.tns in the directory where the nQuake executable is located. You can specify a commandline in this file which is parsed by nQuake upon startup. With the commandline parameter '-game
' you can set an additional directory in which nQuake will look for pak files. So if you put your pak files in the same directory as the nQuake executable this file should contain '-game ""' ( without the ' ). An example of such a file is provided.== Keyboard Controls ==
The escape key brings up the in-game menu. There you can navigate using the arrow keys and select menu items with Enter. The default key binding is sub-optimal and it is recommended to re-map the keys using the Options menu item customize controls. nQuake allows the mapping of the following keys: Arrow Keys, A-Z, 0-9, SPACE, TAB, CTRL, SHIFT, SPACE,+/-/=, TRIG, ^, X^2, e^x, 10^x, (), .
This enables one to steer with the right hand on the Touchpad and have the left hand free to press, for example, CTRL to shoot, = and TRIG to look up and down, ^ to jump, e^x and 10^x to swim up and down etc.
The Quake console is bound by default to the ?! key.
== How to get the shareware PAK file ==
Get the quake shareware release quake106.zip somewhere of the internet. Unzip this, inside is a file called resource.1. Rename resource.1 to resource.x. Use the LHa compression/ uncompression utility, which you can get from the internet too, to unpack the resource.x like so: "lha x resource.x". This will decompress the whole shareware archive which will create a folder called id1 with the pak0.pak inside it. I suggest to do this in a temporary directory so excessive files do not polute your file system To find quake106.zip and a build of LHa I suggest Google for Windows or, for Linux, the packet manager of your choice.
== Source Notes ==
The system specific stuff is in vid_nspire.c sys_nspire.c and sys_nspires.S. The Video driver is unspectacular, it just sets 320x240 8bit palette mode through the lcd interface and copies the screen buffer to it upon request. The System functions are somewhat more interesting as IO appears to be slow on the Nspire so the routine that reads the keyboard state is of some value. The assembler functions are used to either align the stack to 8 byte as the ARM EABI requires ( which Ndless does not seem to do ) so functions that take 8 byte datatypes work ( printf with doubles and the like ) or redirect the stack to some user allocated area as it seems the normal stack is just some 56k deep ( and Quake requires > 250k ).
More general optimizations are scattered all around the place. Most are marked with #defines and are float to fixed point conversations. The rasterizer optimizations for wall spans and alias models are in d_scan_nspirec.c and d_scan_nspire.S. The way I implemented perspective texture mapping of the wall spans originates from what I did in Delsgolf for the TI-89. To see what I changed in detail I suggest getting the WinQuake sources as released by Id Software and do a diff.
If you want to build the Windows version of nQuake you need to get the libraries of the original release as I have not included them because the license of these is unclear. You can run the Windows version in 800x600 or higher to check for rendering artifacts caused by the fixed point stuff.