A terminal-based roguelike game written in C++17, rendered with ncurses. Navigate a procedurally-populated dungeon of hand-authored rooms, fight enemies that path toward you once spotted, and fire ranged weapons. Enemy positions persist when you leave a room and are restored when you return.
| Dependency | Minimum Version | Notes |
|---|---|---|
| C++ compiler (GCC or Clang) | C++17 support | GCC 7+ or Clang 5+ |
| CMake | 3.16 | Build system |
| ncurses (wide-char) | Any recent version | Terminal rendering library (needs the wide/ncursesw variant) |
Installing ncurses (Debian/Ubuntu/WSL):
sudo apt install libncurses-devInstalling ncurses (macOS):
brew install ncursesPrebuilt binaries for Linux (x86_64) and macOS (Apple Silicon) are published on the Releases page by the Release workflow.
# example: replace <version> and pick the asset for your platform
tar -xzf roguelike-<version>-linux-x86_64.tar.gz -C roguelike-<version>
cd roguelike-<version>
./bin/roguelikeEach release includes a .sha256 checksum file alongside the archive — verify with sha256sum -c roguelike-<version>-linux-x86_64.sha256 before extracting if you want to confirm integrity.
Using the helper scripts (recommended):
# release build -> .build/release/roguelike
./scripts/build-release.sh
# debug build (enables the FPS/position debug overlay) -> .build/debug/roguelike
./scripts/build-debug.shBoth scripts cd to the repository root automatically, so they can be run from anywhere inside the repo.
Manual CMake invocation:
# release
cmake -B .build/release -S .
cmake --build .build/release
# debug
cmake -B .build/debug -S . -DCMAKE_BUILD_TYPE=Debug
cmake --build .build/debugThe debug build enables the debug overlay (bottom-left of screen) showing live FPS and player coordinates.
# built from source
./.build/release/roguelike
# or, for a debug build
./.build/debug/roguelike
# extracted from a release archive
./bin/roguelikeMust be run from the directory containing assets/ (the project root, or the root of an extracted release archive).
| Key | Action |
|---|---|
W or ↑ |
Move up |
S or ↓ |
Move down |
A or ← |
Move left |
D or → |
Move right |
SPACE |
Start the game (from the title prompt) |
SPACE |
(in-game) Fire your equipped weapon in the direction you last moved |
Q |
Quit the game |
Moving onto a + door tile that is linked to another room will teleport you to that room. Not all doors are linked — unlinked doors are cosmetic.
- You start in Room 1 of 5. The HUD in the middle shows
Room X/5, your HP, and your equipped weapon's name/damage/speed/range stats. - Each room is randomly picked from the hand-authored templates under
assets/rooms/(currently: chambered, cross hall, L-shape, maze, rectangular pillar hall, plain rectangular, ruins, and twin halls) and connected to the next in a chain via doors. - You carry a ranged weapon (Basic by default) and fire projectiles with
SPACEtoward whichever direction you last moved. Projectiles travel until they hit an enemy, hit a wall, or run out of range. - Enemies (
G,O) wander until they spot you in their attack field of view, then actively path toward you. If you break line of sight, they'll keep heading toward your last known position for a few turns before giving up and going back to wandering. - Taking damage from an enemy reduces your HP shown in the HUD above your character (
@). - The game ends when your HP reaches zero.