ZQuest Classic

Screenshot

ZQuest Classic (formerly Zelda Classic) is an open source engine for top-down Zelda-style adventure games, with a library of hundreds of fan-made quests. This port includes the player plus the bundled demo quest The Deep; more quests, including the original classic quests, can be downloaded from PureZC.

Port Details

Genres

adventure
action

Requirements

Porter

Cebion

Downloads

719

Last Updated

2026-10-20

Rating

None

Miscellaneous

Ready to Run

Instructions

Ready to run out of the box. To add quests, drop quest .zip files from purezc.net into the zquestclassic/quests folder.

Additional Information

Notes

Thanks to the ZQuest Classic team for over two decades of keeping Zelda Classic alive and growing it into an engine that has produced hundreds of fan-made quests.

The bundled demo quest The Deep is ready to play. For more quests, including the original classic ones, download them from PureZC and drop the downloaded .zip as-is into zquestclassic/quests/; it's unpacked there on the next launch. Many quests also offer a separate music or support pack: drop that .zip in too, or copy its music folder into zquestclassic/quests/. Without it, those quests fall back to placeholder MIDI music that can sound badly out of tune. Each new save file asks which quest to play through a file browser, and the slot remembers it from then on.

The script JIT is on by default and makes script-heavy quests run faster. If a quest misbehaves, you can turn it off with jit = 0 under [ZSCRIPT] in zquestclassic/zc.cfg.

Controls

Button Action
D-Pad Move
Left Analog Mouse pointer (menus)
A A button (sword)
B B button (selected item)
X Ex1
Y Ex2
L1 L button (item cycling in most quests)
R1 R button (item cycling in most quests) / mouse click in menus
L2 Ex3
R2 Ex4
Start Subscreen / confirm
Select Map
Select + A Open / close the system menu
Start + Select Quit

Menus and the quest file browser can be used with the mouse pointer (Left Analog + R1), or the D-Pad and Start.

Compile

Run from this port's folder, so patches/ sits next to the clone.

ZQuest Classic's own SDL_mixer fork (MIDI/Timidity only) is built first. It adds the beat functions ZC uses for custom MIDI loop points:

git clone --branch zc-fork-1 --depth 1 https://github.com/connorjclark/SDL_mixer.git SDL_mixer-zc
cmake -S SDL_mixer-zc -B SDL_mixer-zc/build -G Ninja -DCMAKE_BUILD_TYPE=Release \
  -DSDL2MIXER_VENDORED=OFF -DSDL2MIXER_SAMPLES=OFF -DSDL2MIXER_INSTALL=OFF -DSDL2MIXER_CMD=OFF \
  -DSDL2MIXER_FLAC=OFF -DSDL2MIXER_MOD=OFF -DSDL2MIXER_MP3=OFF -DSDL2MIXER_OPUS=OFF \
  -DSDL2MIXER_VORBIS=OFF -DSDL2MIXER_WAVE=OFF -DSDL2MIXER_WAVPACK=OFF \
  -DSDL2MIXER_MIDI=ON -DSDL2MIXER_MIDI_TIMIDITY=ON -DSDL2MIXER_MIDI_FLUIDSYNTH=OFF \
  "-DCMAKE_C_FLAGS=-include $PWD/patches/glibc-compat.h"
ninja -C SDL_mixer-zc/build

Then ZQuest Classic itself:

git clone --branch "3.0.0-prerelease.229+2026-10-13" --depth 1 https://github.com/ZQuestClassic/ZQuestClassic.git
cd ZQuestClassic
git apply ../patches/zquestclassic-portmaster.patch
CC=gcc-12 CXX=g++-12 cmake -S . -B build -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DALLEGRO_SDL=ON -DGL_BUILD_TYPE=gles2+ \
  -DWANT_X11=OFF -DWANT_OPENAL=OFF -DWANT_NATIVE_DIALOG=OFF \
  -DWANT_NFD=OFF -DWANT_WEBSOCKETS=OFF -DCMAKE_DISABLE_FIND_PACKAGE_CURL=ON \
  -DWANT_SENTRY=OFF -DWANT_ZUPDATER=OFF -DWANT_GIT_HOOKS=OFF -DWANT_ZC_TESTS=OFF \
  -DWANT_ERROR_CHECKING=FALSE -DCMAKE_DISABLE_FIND_PACKAGE_TBB=ON \
  "-DCMAKE_C_FLAGS=-fsigned-char -include $PWD/../patches/glibc-compat.h" \
  "-DCMAKE_CXX_FLAGS=-fsigned-char -include $PWD/../patches/glibc-compat.h" \
  -DSDL2_MIXER_INCLUDE_DIR=$PWD/../SDL_mixer-zc/include \
  -DSDL2_MIXER_LIBRARY=$PWD/../SDL_mixer-zc/build/libSDL2_mixer-2.0.so.0.700.0
ninja -C build zplayer

Requires SDL2, GLES2/EGL, libuuid, bison and flex development packages, plus CMake 3.27 or newer. The patch lets Allegro run on its SDL2 backend with GLES2 (skipping the vendored SDL2, and backing up textures before a window resize so they don't go blank), plays MIDI music through ZQuest Classic's SDL_mixer fork (Timidity) with upstream's web-player patch set, exactly like ZQuest Classic's own web build, makes Allegro's SDL audio buffer size configurable, and adds an optional software-drawn mouse cursor for displays without a hardware cursor plane. patches/glibc-compat.h pins hypot/hypotf and std::condition_variable::wait to older symbol versions so the build runs on glibc 2.34 and GCC 11-era libstdc++.