Skip to content

libretro/tyrquake

Repository files navigation

--------------------
 TyrQuake (libretro)
--------------------

A libretro core for Quake and its mission packs, based on TyrQuake 0.62
by Kevin Shanahan (aka. Tyrann) -- http://disenchant.net

TyrQuake is a conservative branch of the original Quake source code:
it keeps the look and feel of the id Software originals while fixing
bugs and adding carefully-scoped enhancements. This libretro port turns
it into a core that runs inside RetroArch and other libretro frontends,
with renderer, video, audio and input features layered on top of the
faithful base engine.


Loading content
---------------
- Load a .pak file (e.g. id1/pak0.pak) from a Quake data directory.
  The full directory layout around the pak is used, so custom content
  in the same game directory is picked up as usual.
- Mission packs are detected automatically from the content path:
    * "hipnotic" -> Scourge of Armagon  (-hipnotic)
    * "rogue"    -> Dissolution of Eternity (-rogue)
    * "quoth"    -> Quoth (-quoth)
- Any other (non-id1) game directory is launched as a mod via -game,
  so total conversions and standalone mods work by loading their pak
  from inside their own directory.
- Shareware, registered and mod paks are all supported.


Renderer backends
-----------------
- Software renderer: the classic 8-bit palettized span rasterizer,
  extended well beyond the original (see "Rendering features" below).
  Output is RGB565.
- Vulkan hardware renderer (optional, RHI_HAVE_VULKAN=1 builds): uses
  the libretro Vulkan HW context. Presentation runs as a GPU compute
  dispatch (palette LUT expansion on the GPU) rather than a classic
  graphics pipeline.
- Compute rendering option: on HW backends with compute support, the
  3D view is rendered by a GPU port of Quake's software rasterizer
  (spans, affine texturing, surface cache, alias edge stepping) --
  pixel-identical to the software renderer but offloaded to the GPU,
  which is much faster at high internal resolutions. When disabled,
  the HW backend uses traditional hardware rasterization instead.
- "Auto" renderer selection picks the best hardware backend the
  frontend offers and falls back to software when no HW context is
  available.


Rendering features
------------------
All of these are available in the software renderer and exposed in the
in-game Options -> Video menu (as well as via console cvars):

- Internal resolutions from 320x200 up to 1920x1200 (45 presets),
  with sensible per-platform defaults (e.g. 400x240 on 3DS).
- Dither filtering (ordered-dither texture sampling for a smoothed
  look without leaving the palette pipeline).
- Colored lighting: Half-Life / Quake II-style RGB lighting in the
  software renderer, including support for .lit sidecar files
  (with header and size validation), plus a light-dither option.
- Phong shading on models, tri-state: Off / Phong / Phong + specular.
- Transparent liquids: independent alpha controls for water, lava,
  slime and teleporters, plus an underwater liquid-blend overlay.
- Polygon subdivision: runtime tessellation of alias (model) meshes,
  up to 3 passes, to smooth out low-poly silhouettes.
- Smooth animation and smooth movement: keyframe (r_lerpmodels) and
  transform (r_lerpmove) interpolation for fluid entity motion at
  high framerates.
- Entity shadows.
- Water warp with adjustable intensity (r_waterwarp_scale).
- Level-of-detail (mip) control.
- Aspect-ratio correction.
- UI scaling (scr_uiscale): integer scaling of the 320x200-native
  HUD, menus and console at high resolutions.
- Gamma, brightness and contrast controls.
- Crosshair options.
- Persistent gibs option (Options -> Game).
- Chase camera / third-person view with camera-type selection and a
  first-person toggle in the menu.


Timing
------
- Runs at fixed frametimes for consistent physics and demo playback.
- Framerate is selectable from 10 to 600 fps, or "Auto", which
  queries the frontend's target refresh rate and matches it.
  (Values above 72 fps can expose original-engine timing quirks.)


Audio
-----
- Sound mixed at a selectable output rate: 32 / 44.1 / 48 / 96 kHz,
  or "Auto", which matches the frontend's reported target sample rate
  to bypass the frontend resampler entirely (lower latency, no extra
  filtering).
- Float PCM output is negotiated with frontends that support it, with
  a transparent fallback to the standard 16-bit integer batch path.
- Music-stream decode is float-based with bit-identical int16 results
  across platforms and FPUs.


Soundtrack / background music
-----------------------------
- CD-audio replacement: rips placed in a "music" directory inside the
  game directory (music/track02.<ext>, etc.) play automatically as the
  level soundtrack.
- WAV, FLAC and Ogg Vorbis are enabled by default; MP3, Opus, and
  tracker formats (MikMod, ModPlug, UMX) are available as build-time
  options.
- Mod-supplied tracks take priority over id1 tracks of the same
  number, and file format is resolved per-track.
- "music" console command for playing tracks manually.


Input
-----
Four selectable input device types:

- Gamepad Classic: original-style layout with a run-mode toggle.
- Gamepad Classic Alt: alternative classic layout.
- Gamepad Modern: dual-analog FPS layout (move + look on sticks).
- Keyboard + Mouse: full keyboard support via the libretro keyboard
  callback plus relative mouse look with five mouse buttons
  (including wheel up/down). The console is reachable on ` / ~ / '.

Additional input features:

- Configurable analog stick deadzone (0-30%).
- Invert Y axis option.
- Rumble support: strong motor feedback scaled by damage taken, weak
  motor pulses on item pickup.
- Fully rebindable controls through the in-game Customize Controls
  menu.


Multiplayer
-----------
- NetQuake UDP networking on platforms built with HAVE_NETWORKING=1:
  LAN games, server search and direct connect through the in-game
  Multiplayer menu, with cooperative and deathmatch game options
  (frag limits, time limits, skill, episode selection, including the
  mission-pack episode lists).
- Local (loopback) games on all platforms.


Saves and memory
----------------
- Native Quake save/load system; savegames are written to the
  frontend's save directory. (Libretro savestates are not currently
  implemented.)
- The engine heap (hunk) is sized automatically from the memory the
  frontend reports as available (a quarter of free RAM, capped at
  256 MB and never below the tuned per-platform default), so large
  modern maps and mods load on capable systems while low-memory
  platforms keep a conservative footprint.


Platforms
---------
Builds for a wide range of libretro targets, including Windows
(MinGW and MSVC toolchains as old as 2003), Linux, macOS, iOS/tvOS,
Android, Emscripten (web), Nintendo Switch, Wii, Wii U, GameCube,
3DS, PlayStation Vita, PSP, PS3, Xbox / Xbox 360, Raspberry Pi and
various embedded handhelds (GCW-Zero, Miyoo, RetroFW/Dingux).


Building
--------
    make

produces tyrquake_libretro for the host platform. Cross builds use
the usual libretro conventions, e.g.:

    make platform=vita
    make platform=libnx

Optional build flags:

    RHI_HAVE_VULKAN=1     enable the Vulkan renderer backend
                          (requires vendored Vulkan headers, see
                          deps/vulkan/README.md)
    HAVE_NETWORKING=0/1   toggle UDP multiplayer support
    USE_CODEC_MP3=1       enable MP3 soundtrack support
    USE_CODEC_OPUS=1      enable Opus soundtrack support
    USE_CODEC_MIKMOD=1    enable MikMod tracker music
    USE_CODEC_MODPLUG=1   enable ModPlug tracker music
    USE_CODEC_UMX=1       enable UMX tracker music


Credits and license
-------------------
- Quake is Copyright (C) 1996-1997 Id Software, Inc.
- TyrQuake is developed by Kevin Shanahan (aka. Tyrann),
  http://disenchant.net
- libretro port by the libretro team and contributors.

Distributed under the GNU General Public License, version 2 or later;
see LICENSE.txt. The original id Software readme is preserved as
readme-id.txt.

About

Libretro port of Tyrquake (Quake 1 engine)

Topics

Resources

License

Stars

47 stars

Watchers

10 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors