Jazz² Resurrection
Open-source Jazz Jackrabbit 2 reimplementation
Brought to you by @deathkiller

# Introduction

Jazz² Resurrection is reimplementation of the game Jazz Jackrabbit 2 released in 1998. Supports various versions of the game (Shareware Demo, Holiday Hare '98, The Secret Files and Christmas Chronicles). Also, it partially supports some features of JJ2+ extension and MLLE. This project is hosted on GitHub.com/deathkiller/jazz2-native.
Jazz² Resurrection supports various versions of the original game, but it is recommended to use The Secret Files.

Build Status Latest Release All Downloads Code Quality License Discord

# Downloads

Latest version was released on August 22nd, 2026 (10 days ago). Release notes can be found here.
Once you download and install Android version, you will be prompted with some security permissions to install app outside the Play Store.

Play on Windows Linux
macOS Switch Xbox
Play on Android
Android 5.0+ with OpenGL 3.0
Play in Browser
Chrome, Edge, Firefox, …
Experimental builds and other platforms
Experimental builds (created directly from GitHub Actions) contains unreleased features, but may also contain work in progress or bugs. Please report bugs from these versions with exact version number.

# Preview

Preview

# Running the application

Windows

‹Game› denotes path to Jazz² Resurrection. The game requires Windows 7 (or newer) and GPU with OpenGL 3.3 support. Game files should not be copied to Program Files. Cache is recreated during the intro cinematics on the first startup, so it can't be skipped. Also, the sound effects in the intro cinematics require the cache, so they will be missing the first time the game is started up.

Linux

‹Game› denotes path to Jazz² Resurrection. ~ denotes user's home directory. The game requires GPU with OpenGL 3.3 or OpenGL ES 3.0 (ARM) support. Cache is recreated during the intro cinematics on the first startup, so it can't be skipped. Also, the sound effects in the intro cinematics require the cache, so they will be missing the first time the game is started up.

Alternatively, you can use package repository for your Linux distribution:
ArchLinux Debian Flathub Gentoo NixOS OpenSUSE Ubuntu XtraDeb

macOS

~ denotes user's home directory. Cache is recreated during the intro cinematics on the first startup, so it can't be skipped. Also, the sound effects in the intro cinematics require the cache, so they will be missing the first time the game is started up.

Alternatively, you can install it using Homebrew brew trust deathkiller/jazz2 and brew install deathkiller/jazz2/jazz2

Android

‹Storage› usually denotes internal storage on your device. Content directory is included directly in APK file, no action is needed. The game requires Android 5.0 (or newer) and GPU with OpenGL ES 3.0 support. Cache is recreated during the intro cinematics on the first startup. Also, the sound effects in the intro cinematics require the cache, so they will be missing the first time the game is started up.

Nintendo Switch

Cache is recreated during the intro cinematics on the first startup, so it can't be skipped. It may take more time, so white screen could be shown longer than expected. Also, the sound effects in the intro cinematics require the cache, so they will be missing the first time the game is started up.

Nintendo 64

The game runs in 320×240 and the ROM is read-only, so nothing is ever converted or written on the console – the content has to be complete in the image, and the settings are saved to the cartridge EEPROM. The RDP has no programmable shading, so there is no post-processing tier and no rescale filters, there is no module music (sound effects only), and threads are unavailable, so local splitscreen is not available either. This port is experimental: the Nintendo 64 is by far the smallest machine the game runs on, it has not been performance-tuned for it, so the frame rate is well below the other consoles' and varies with what is on screen. The port has not been tested on real hardware yet.

Sega Dreamcast

The game runs in 640×480 and the disc is read-only, so nothing is ever converted or written on the console – the content has to be complete in the image. The PowerVR has no programmable shading, so there is no post-processing tier and no rescale filters. Module music plays through libxmp, which leaves the larger levels enough of the console's small heap to load in – the four .mo3 tracks are silent, everything else plays. The port has not been tested on real hardware yet.

Nintendo Wii

The game reads its content from sd:­/apps/Jazz2/Content/, so the storage device has to stay present – otherwise the game stops at Cannot access the SD card. The Hollywood GPU is fixed-function, so there is no post-processing tier and no rescale filters. Module music plays through libxmp, which costs a fraction of the memory libopenmpt needs on a console of this size – the four .mo3 tracks are silent, everything else plays. The port has not been tested on real hardware yet.

Nintendo GameCube

The game reads its content from carda:­/Jazz2/Content/, which is slot A by definition. The console has 24 MB of memory and no second pool, which makes it the tightest of the two PowerPC targets – and the reason module music plays through libxmp here as well – and only GameCube controllers are read. Everything noted for the Wii applies here as well, including that the port has not been tested on real hardware yet.

PlayStation Portable

The game runs in the native 480×272 and reads its content from ms0:­/PSP/GAME/Jazz2/Content/. Threads are unavailable on this console, so local splitscreen is not available either. Module music plays through libxmp rather than libopenmpt, which is too heavy for this CPU – the four .mo3 tracks are silent, everything else plays. The port has not been tested on real hardware yet.

PlayStation 2

The game runs in NTSC 640×448 and the disc is read-only, so Jazz2.config can't be written and settings aren't preserved. There is no audio backend for this console yet, so the game runs silent, threads are unavailable, so local splitscreen is not available either, and the Graphics Synthesizer is fixed-function, so there are no rescale filters. The port has not been tested on real hardware yet.

PlayStation 3

Cache and save data are written to /dev_­hdd0/game/JAZZ20000/USRDIR/. Unlike the older consoles the RSX is a programmable part, so the whole post-processing chain is available – except three of the heavier rescale filters, which are hidden in the options. Threads are unavailable, so local splitscreen is not available either. The port has not been tested on real hardware yet.

PlayStation Vita

The Content directory is included directly in the VPK file, no action is needed. Cache is recreated in ux0:­/data/jazz2/Cache/ during the intro cinematics on the first startup, so it can't be skipped. Also, the sound effects in the intro cinematics require the cache, so they will be missing the first time the game is started up. The port has not been tested on real hardware yet. See the developer documentation for details.

Amiga

Three systems are supported from three separate builds. AmigaOS 3.x needs a 68040/68060 with an FPU and an RTG graphics card (Picasso96 or CyberGraphX) – PiStorm/Emu68 and Apollo Vampire machines are the practical targets – and picks a performance preset by measuring the machine at startup; it has no usable graphics hardware, so it renders on the CPU. AmigaOS 4.1 and MorphOS are PowerPC builds that reach the display through SDL2, which on MorphOS means sdl2.library has to be installed first. Both render in hardware through the fixed-function OpenGL each system provides – MiniGL over Warp3D on AmigaOS 4, TinyGL on MorphOS – so a 3D driver for the graphics card has to be installed; a build made with -D NCINE_­PREFERRED_­RHI=­Software renders on the CPU instead. There are no graphics shaders on any of these systems, so the post-processing tier and the rescale filters are unavailable. Only the classic Amiga and MorphOS builds have been run so far, both under emulation and both on the CPU renderer; none of the three has been tested on real hardware.

Web (Emscripten)

The game requires browser with WebAssembly and WebGL 2.0 support – usually any modern web browser.

Libretro core (RetroArch)

Settings, progress, highscores and the resumable state are written to ‹Saves›/jazz2/ in the frontend's saves directory. The core exposes the RetroPad as a gamepad (up to 4 players, local splitscreen included) and renders at 720×405, the native logical resolution of the game, which the frontend scales to the screen – so its video shaders and scaling options replace the in-game Rescale Mode. Save states use the game's own level-resume snapshot, so they are not frame-exact – netplay, run-ahead, rewind and reset are not supported. Cache is recreated during the intro cinematics on the first startup, so it can't be skipped.

Xbox (Universal Windows Platform)

Cache is recreated during the intro cinematics on the first startup, so it can't be skipped. It may take more time, so white screen could be shown longer than expected. Also, the sound effects in the intro cinematics require the cache, so they will be missing the first time the game is started up.

Dedicated server (Docker)

The image contains only the headless server, contents of original Jazz Jackrabbit 2 directory are never part of it. Besides latest, every release is tagged also as X.Y and X.Y.Z to pin a particular version, and edge tracks the current state of the master branch. Game files are converted into the jazz2-cache volume on the first start, so the first startup takes longer. docker attach jazz2-server opens the server console, docker stop shuts the server down cleanly, disconnecting the peers and delisting the server from the online server list. ServerAddressOverride has to be set for a public server, because the container sees only its own address on the Docker network. The docker-compose.yml in this repository describes the same setup declaratively, including several servers running on one host, and docker build -t jazz2-server . builds the image from sources instead of pulling it. See the developer documentation for details.

# Building the application

This section contains only a brief explanation of the build process. For a more detailed explanation, including build configuration parameters, please refer to the developer documentation.

Windows

Linux

macOS

Android

Nintendo Switch

Other consoles

The game runs on Nintendo 64, Sega Dreamcast, Nintendo Wii, Nintendo GameCube, PlayStation Portable, PlayStation 2, PlayStation 3 and PlayStation Vita as well. Each of them is cross-compiled with its own SDK and CMake toolchain file, most of them have a bespoke window and rendering backend for their fixed-function graphics hardware, and on most of them the game content has to be prepared in advance with AssetPacker and passed to the build with NCINE_­CONTENT_­DIR option (a few, such as the Wii, PSP, PS3 and Vita, can also convert the original game data directly on the device).

Please refer to the console documentation for the toolchain, build, packaging, deployment and logging steps of each console.

Amiga systems

The game also runs on AmigaOS 3.x (68k), AmigaOS 4.1 and MorphOS (PowerPC). Each is cross-compiled with its own CMake toolchain file in cmake/toolchains/ and stages a ready-to-run directory into build/<target>/dist/; the two PowerPC SDKs come as container images, so only the m68k toolchain has to be installed. The classic Amiga has a window and input backend of its own (Intuition + RTG) and an AHI audio backend; the PowerPC systems use SDL2 and render through the fixed-function OpenGL each of them provides.

Please refer to the Amiga documentation for the toolchains, the hardware each build targets, the system quirks each of them works around, and how they can be run under emulation.

Web (Emscripten)

Libretro core (RetroArch)

Xbox (Universal Windows Platform)

# License

This project is licensed under the terms of the GNU General Public License v3.0 and uses extensively modified nCine game engine.