# Installation

This guide shows how to install Yamagi Quake II from scratch. All fully
supported platforms, both the full and the demo version are covered.


## The Full Version

Over the years Quake II was distributed in a myriad of ways:

* As retail release on CD.
* As part of Quake IV.
* Through Steam.
* Through GOG.com.
* etc.

Yamagi Quake II is compatible with all of these versions. While some of
these versions come with all patches applied, it's highly recommended to
follow this guide step by step and to reapply the patch by hand. Not all
distributors patched the game correctly, leading to severe problems like
missing assets or even crashes.


### Game Data Setup

The easiest way to install Yamagi Quake II is to start with the patch.
Please note that the patch is **required** for all full versions of the
game. Without the patch the game will not work correctly!

1. Download the patch from our mirror or somewhere else. The MD5
   checksum is `490557d4a90ff346a175d865a2bade87`:
   https://deponie.yamagi.org/quake2/idstuff/q2-3.20-x86-full-ctf.exe
2. Extract the patch into an empty directory. The patch comes as a
   self-extracting ZIP file. On Windows it can be extracted by double
   clicking on it, on other systems an archiver or the *unzip* command
   can be used.

Now remove the following files from the extracted patch. They're the
original executables, documentation and so on. They aren't needed for
Yamagi Quake II and just waste space:

* *3.20_Changes.txt*
* *quake2.exe*
* *ref_gl.dll*
* *ref_soft.dll*
* *baseq2/gamex86.dll*
* *ctf/ctf2.ico*
* *ctf/gamex86.dll*
* *ctf/readme.txt*
* *ctf/server.cfg*
* *xatrix/gamex86.dll*
* *rogue/gamex86.dll*

Copy the *pak0.pak* file and the *video/* subdirectory from the Quake
II distribution (CD, Steam or GOG download, etc) into the *baseq2/*
subdirectory of the extracted patch.

If the optional addons are available their gamedata must be copied too:

* For The Reckoning (also know as "xatrix") copy the *pak0.pak* and the
  *video/* subdirectory from the addon distribution into the *xatrix/*
  subdirectory.
* For Ground Zero (also known as "rogue") copy the *pak0.pak* and the
  *video/* subdirectory from the addon distribution into the *rogue/*
  subdirectory.

The MD5 checksums of the pakfiles are:

* *baseq2/pak0.pak*: `1ec55a724dc3109fd50dde71ab581d70`
* *baseq2/pak1.pak*: `42663ea709b7cd3eb9b634b36cfecb1a`
* *baseq2/pak2.pak*: `c8217cc5557b672a87fc210c2347d98d`
* *ctf/pak0.pak*: `1f6bd3d4c08f7ed8c037b12fcffd2eb5`
* *rogue/pak0.pak*: `5e2ecbe9287152a1e6e0d77b3f47dcb2`
* *xatrix/pak0.pak*: `f5e7b04f7d6b9530c59c5e1daa873b51`


### Music Extraction

The retail releases of Quake II and both addons contain up to 11 Audio
CD tracks as soundtrack. Since modern computers lack the ability for
direct CD playback, Yamagi Quake II reads the music from OGG/Vorbis
files.

Later Quake II releases, for example the one included with Quake IV and
the one available through Steam, lack the soundtrack. Nevertheless
Yamagi Quake II can play it if the files are copied into the directories
mentioned below.

Some digital distributed versions are special, they includes the
soundtrack as OGG/Vorbis files, but in a non standard format. Yamagi
Quake II can read this format for the GOG.com release. Other releases
may be supported in the future.


#### Using a Generic CD Extractor

1. Install a CD extractor (for example CDex) and set it to OGG/Vorbis
   files. Quality factor 6 (192 kbit/s) is usually more than enough.
2. Put the Quake II CD into the CD drive and extract the files.
3. The files must be named after the corresponding CD track: CD track 02
   becomes the file *02.ogg*, CD track 03 becomes the file *03.ogg* and
   so on. On both the Quake II and the Addon CDs track 01 is the data
   track and thus can't be ripped.
4. Put these files into the corresponding subdirectory:
	* *baseq2/music* for Quake II.
	* *xatrix/music* for The Reckoning.
	* *rogue/music* for Ground Zero.


#### Using a Shell Script

An easy way to extract the music on unixoid platforms (BSD, Linux and
MacOS) is to use *stuff/cdripper.sh*, a simple shellscript. It needs
*cdparanoia* and *oggenc* (from the *vorbis-tools* package) installed.
Use the package manager (apt, dnf, homebrew, pacman, pkg, ...) to
install them.  Just execute the script and copy the resulting *music/*
directory to:
  * *baseq2/* for Quake II.
  * *xatrix/* for The Reckoning.
  * *rogue/* for Ground Zero.


#### The GOG.com Release

The Quake II distributed by GOG.com contains the soundtrack, it just
needs to be copied into the game data directory. The target directory is
just *music/*, next to *baseq2/*. **Not** inside *baseq2/*.

Unixoid systems are case sensitive. On them the files should be named
*TrackXX.ogg* with a capital T. Otherwise the game won't find them.


### Alternate Startup Configuration

Yamagi Quake II ships with an alternative startup config that overrides
some global settings to saner defaults. To use it copy *stuff/yq2.cfg*
into the *baseq2/* directory.


### Fixed Map Data Files

As an optional feature, Yamagi Quake II provides fixed map data files
(.ent files). These files provide a replacement entity list in order
to fix some map bugs that have been discovered by players over the
years.

These fixes include fixes for bad monster counts in some maps /
difficulty settings, fixing broken spawn chains that made it impossible
to spawn some monsters, removing DM-only items that spawn in unreachable
areas in single player /co-op, and so on. You can find detailed
changelogs for each map by opening the .ent files with a text editor and
reading the comment section at the top (lines starting with "//").


#### Download And Setup

1. Download the .ent files from the yquake2 repositories on GitHub.
   * **baseq2**: yquake2/yquake2/stuff/mapfixes/baseq2/
   * **juggernaut**: yquake2/yquake2/stuff/mapfixes/juggernaut/
   * **xatrix**: yquake2/xatrix/stuff/mapfixes/
   * **rogue**: yquake2/rogue/stuff/mapfixes/
   * **zaero**: yquake2/zaero/stuff/mapfixes/
2. Once you have the .ent files you want, put them in the respective
   *maps/* sub-folder. So *xatrix* .ent files should go into your local
   *xatrix/maps/* folder (create this folder if it does not exist).
3. You will see a notification message in the console if an .ent file
   was loaded. If you see this message, you know the map fixes are in
   effect.


#### Reporting Map Bugs

If you know of any map bugs that are not addressed here, by all means
report them to us through our GitHub repositories.


### Monster Footstep Sounds

Yamagi Quake II has optional support for monster footstep sounds. These
require some custom audio files. Download the pak file with the sounds
from https://deponie.yamagi.org/quake2/assets/footsteps.pkz and copy
the file into the *baseq2/* directory.

The footstep sounds are included with the official Windows release.


## The Demo Version

A free demo version of Quake II is available and supported by Yamagi
Quake II. This demo contains the first few levels, but no videos and
no soundtrack.


### Game Data Setup

1. Download the demo from our mirror or somewhere else. Its MD5
   checksum is `4d1cd4618e80a38db59304132ea0856c`:
   https://deponie.yamagi.org/quake2/idstuff/q2-314-demo-x86.exe
2. Extract the downloaded file. It's a self-extract ZIP archive.
   On Windows it can be extracted by double clicking on it, on
   other system an archiver or the *unzip* command can be used.
3. Create a new directory and a subdirectory *baseq2/* in it.
4. Copy the *pak0.pak* and the *players/* subdirectory from the
   extracted archive into the newly created *baseq2/* subdirectory.

The demo **must not** be patched! Patching the demo will break it!

The MD5 checksums of the pakfiles are:

* *baseq2/pak0.pak*: `27d77240466ec4f3253256832b54db8a`


## Download and Extract the Executables

How the Yamagi Quake II executables are installed depends on the
platform:

- For Windows a prebuild package with all Yamagi Quake II executables
  and the required libraries is provided.
- Most Linux distributions and BSD systems provide Yamagi Quake II
  packages. Theses packages may be outdated, see below for compiling
  the executables.

**Please note:** The addons needs their own game library. The libraries
are included with the official Windows release. Linux distributions
often package them in a distinced package. If you want to compile from
source, have a look at the README files supplied with the addons.


### Windows

1. Get the latest release from https://www.yamagi.org/quake2
2. Extract it into the gamedata directory created above. *quake2.exe*
   must be placed next to the *baseq2/* subdirectory.

On Windows the Yamagi Quake II installation is fully portable, the
installation directory can be moved the installation directory wherever
and whenever it's necessary. To update Yamagi Quake II just overwrite
the old files with the new ones.

There're two executables:

* *yquake2.exe*: This is main executable and should be preferred.
* *quake.exe*: This is just a wrapper to stay compatible with existing
  setups. For technical reasons *quake.exe* may not start in foreground,
  but in background!

If Windows Defender is activated, that's the default on Windows 8 and
Windows 10, it may complain that Yamagi Quake II is untrusted and should
not be started. That's because we're shipping unsigned binaries. You can
force Windows to start it anyways.


### Binary Package from Linux distributions or BSD systems

Most Linux distributions and BSD systems provide Yamagi Quake II
packages. Please refer to the documentation of the distribution or
system. The gamedata is searched at:

- A global directory specified by the package.
- The same directory as the quake2 executable.
- A directory given with the *-datadir /path/to/quake2_installation/*
  commandline argument.
- In *$HOME/.yq2*

If you're a package maintainer, please look at our packaging guide at
the [Packaging Guide](070_packaging.md).


## Compiling from source

To compile Yamagi Quake II from source the following dependencies
(including development headers) are needed:

* *MinGW-w64* or *Visual Studio (2015 or newer)* for Windows or a
  GCC compatible compiler like *gcc* or *clang* for other platforms.
* A LibGL implementation with system headers.
* An OpenAL implementation, *openal-soft* is highly recommended.
* libcurl.
* SDL 2.0.
* FFmpeg-6.x.


### Prerequisites on Windows when using MinGW

To compile Yamagi Quake II under Windows, using a MinGW environment is
recommended. A preconfigured environment based upon MSYS2 with all necessary
dependencies and compatibles compilers can be found at:
https://deponie.yamagi.org/quake2/windows/buildenv/

The environment can be extracted anywhere. Either the 32 bit version can
be started through *C:\MSYS2\msys32.exe* or the 64 bit version through
*C:\MSYS2\msys64.exe*.

Additionally should be installed/updated:
 * for msys32:
   * git
   * make
   * mingw-w64-i686-curl
   * mingw-w64-i686-ffmpeg
   * mingw-w64-i686-gcc
   * mingw-w64-i686-make
   * mingw-w64-i686-openal
   * mingw-w64-i686-SDL2
   * mingw-w64-i686-vulkan-headers
 * for msys64:
   * git
   * make
   * mingw-w64-x86_64-curl
   * mingw-w64-x86_64-ffmpeg
   * mingw-w64-x86_64-gcc
   * mingw-w64-x86_64-make
   * mingw-w64-x86_64-openal
   * mingw-w64-x86_64-SDL2
   * mingw-w64-x86_64-vulkan-headers

### Prerequisites on Unixoid Platforms

The build dependencies can be installed with:

* On Arch Linux based distributions: `pacman -S base-devel mesa openal
  curl sdl2`
* On Debian based distributions: `apt install build-essential
  libgl1-mesa-dev libsdl2-dev libopenal-dev libcurl4-openssl-dev
  libavformat-dev libswscale-dev libvulkan-dev`
* On FreeBSD: `pkg install gmake libGL sdl2 openal-soft curl`
* On NetBSD: `pkgin install gmake SDL2 openal-soft curl`
* On OpenBSD: `pkg_add gmake sdl2 openal curl`
* On Solaris/Illumos: `pkg install sdl2 openal curl`
* On Haiku: `pkgman libsdl2_devel openal_devel curl_devel`
* On MacOS the dependencies can be installed with Homebrew (from
  https://brew.sh): `brew install sdl2 openal-soft make ffmpeg molten-vk`

Other distributions or platforms often have package named similar to the
Debian or FreeBSD packages.


### Compiling with GCC, Clang or MinGW

Download the latest release from https://www.yamagi.org/quake2 or clone
the source from https://github.com/yquake2/yquake2.git, change into the
*yquake2/* source directory and type *make* (Linux, MacOS, Haiku and Windows)
or *gmake* (FreeBSD, NetBSD, OpenBSD). Note on Solaris systems, *make*
 or *gmake* can be used, the latter provides in addition parallel build.
After the build finished, copy everything from the *release/* directory
to the Yamagi Quake II installation directory.

If you want to generate the OpenGL ES 1.0 renderer, which may be the only
graphics API available on some SoCs (like Raspberry Pi 3 or older), type
*make with_gles1*.

For the addons download or clone their source, change into the source
directory and type *make* (Linux, MacOS and Windows) or *gmake*
(FreeBSD, NetBSD, OpenBSD). After the compilation finishes the *release/game.so*
is copied to the corresponding directory in the Quake II installation.


### Compiling on Windows with Visual Studio (2015 and newer)

To compile with Visual Studio, CMake is required.
We only support VS2015 and newer, though VS2019 version 16.8 or newer is recommended.

Furthermore you'll need **SDL2**, **openal-soft** and **libcurl** to link against.
The easiest way to get those dependencies is using the
[dhewm3-libs](https://github.com/dhewm/dhewm3-libs/) together with the
`YQUAKE2LIBS` CMake variable.
It might also be possible to manually install the dependencies or to use
[vcpkg](https://vcpkg.io) or similar to install them, but that's untested.

Create a build directory outside the yquake2 directory, open a terminal,
change to that directory and use CMake to generate a Visual Studio solution.

For Win32 (32bit x86) and VS2019 the commandline should look like:
`cmake -G "Visual Studio 16 2019" -A Win32 -DYQUAKE2LIBS="C:/dev/dhewm3-libs/i686-w64-mingw32" path/to/yquake2`
Of course you need to adjust `C:/dev/dhewm3-libs/` to the directory you
put the *dhewm3-libs* in, and `path/to/yquake2` to your Yamagi Quake II
source checkout (the directory the `CMakeLists.txt` is in).

For x64/Win64 (64bit x86) it should look like:
`cmake -G "Visual Studio 16 2019" -A x64 -DYQUAKE2LIBS="C:/dev/dhewm3-libs/x86_64-w64-mingw32" path/to/yquake2`

After successfully running this command, there should be a `yquake2.sln`
in your build directory, you can open it with Visual Studio to compile.

If you prefer using `cmake-gui`, you can specify the `YQUAKE2LIBS` with the
`Add Entry` option (Name: `YQUAKE2LIBS`, Type: `PATH`, Value: *see examples above*).
