JFTekWar is based on code published by Les Bird, programmer at Capstone in 1996. That code was made available under no particular license, so JFTekWar is made available under similar terms. Visit the JFTekWar website for the latest information. The source code for JFTekWar can be found in this Git repository.

# System Requirements

At minimum, you need:

- 64-bit Intel, AMD, or compatible CPU
- OpenGL 2.1 capable GPU
- (Windows) Vista or newer (7, 8, 10+)
- (Mac) macOS 10.15 (Catalina) or newer

Additionally, these platforms and architectures are supported when building from source code:

- 32-bit Intel/AMD, and 32 or 64-bit ARM CPUs
- OpenGL ES 2.0 capable GPUs, e.g. Broadcom VideoCore IV (tested with Raspberry Pi 3 B+)

# Installation and Setup

After unzipping the JFTekWar package somewhere on your computer, run the main executable: `JFTekWar.app` on macOS, `tekwar.exe` on Windows. You ought to see the startup window open at the Configuration tab.

Windows, Linux and BSD (if built with GTK support) have similar startup windows with the same options.

You will now need to import the game data from a commercial release of Witchaven as the game will not work without it.

1. Click the "Choose a location..." button, then navigate to a location where Witchaven data can be found.
2. Choose a folder and JFTekWar will then scan the location you've selected, copying any compatible game data it finds.

Where game data files are stored by JFTekWar depends on the operating system you are using:

- (Linux, shared with all users) `/usr/local/share/games/jftekwar`
- (Linux, single user) `~/.jftekwar`
- (macOS, single user) `~/Library/Application Support/JFTekWar`
- (Windows) wherever you've put tekwar.exe

## "Portable" Installation

Typically the game will store its configuration information and saved games in a private location for your user account:

- (Linux) `~/.jftekwar`
- (macOS) `~/Library/Application Support/JFTekWar`
- (Windows) `C:\Users\your-name\AppData\JFTekWar`

To have the game instead store these files in the working directory where the game was started, create an empty file named `user_profiles_disabled` (no extension) beside the executable. You can put the game data files in the same location, thus making everything self-contained and 'portable'.

# Console Commands

This is a list of more useful console commands and settings and their purpose:

mousebutton <1–2> <action>
mousebutton list
  Set a mouse button action. The 'list' parameter will show current action mappings.
joystickbutton <1–4> <action>
joystickbutton list
  Set a joystick button action. The 'list' parameter will show current action mappings.
keybutton <hex scancode> <action>
keybutton list
  Set a keyboard button action. The 'list' parameter will show current action mappings.
clear
  Clear the console.
glinfo
  Displays some information about the OpenGL driver. Use "glinfo exts" to display supported OpenGL extensions.
glmultisample <0, 1, 2, …>
  Enable OpenGL multisample antialiasing. 0 disables it. You need to use "restartvid" to apply any changes to this value.
gltextureanisotropy <level>
  Sets the OpenGL anisotropic filtering level. The default is the highest level supported by the hardware.
gltexturemode <mode-number>
  Sets the OpenGL texturing mode. Valid values are:

  0 | GL_NEAREST
  1 | GL_LINEAR
  2 | GL_NEAREST_MIPMAP_NEAREST
  3 | GL_LINEAR_MIPMAP_NEAREST (bilinear)
  4 | GL_NEAREST_MIPMAP_LINEAR (gives an unfiltered appearance like the original software renderer)
  5 | GL_LINEAR_MIPMAP_LINEAR (trilinear, the default)

glusetexcompr <0 or 1>
  Enables or disables the use of OpenGL texture compression for replacement textures. You need to use "restartvid" to apply any changes to this value.
help <name>
  Displays a help message for a particular console variable or command.
listsymbols
  Displays the names of all commands and variables available in the console.
osdrows <num>
  Sets the number of visible lines of the console when it is open.
restartvid
  Reinitialise video to apply settings changes.
screencaptureformat <0 or 1 or 2>
  0 = Targa, 1 = PCX, 2 = PNG (default)
usegammabrightness <0 or 1 or 2>
  Set brightness in one of several ways. 0 = palette-based, 1 = shader-based (default), 2 = system gamma. System gamma will brighten the whole display when in windowed mode.
usegoodalpha <0 or 1>
  If 1, a lower alpha cutoff value is used when rendering textures with transparency, which gives better looking transparent textures at the expense of some sprites behind the transparent item potentially being invisible in certain circumstances. 0 is a more compatible value (and is the default) for this option but slight visual degradation will result.
vidmode <bpp>
vidmode <xdim> <ydim> [bpp [fs [display]]]
  Change the video mode. xdim ydim are the resolution. bpp is the colour depth (8, 16, 24, 32). fs is 0 for windowed, 1 for fullscreen. display is a display number for fullscreen mode, with 0 being the primary display.
maxrefreshfreq <0 or freq>
  Set the highest display refresh frequency for fullscreen OpenGL modes. 0 is the default representing 'no maximum'.

# License

JFTekWar is not licensed under any discernable terms. Let's all just hope no spectre of Capstone or Intracorp one day rises to stomp on it.

The JFBuild engine used in JFTekWar is used under the terms of the BUILD Source Code License.