Skip to content

About

Public mirror of Arch Rogue source

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Arch Rogue

Arch Rogue is a grim isometric action-RPG roguelike built with Odin and raylib. It combines deterministic procedural dungeons, real-time combat, random loot, permanent consequences, and a seeded dark-fantasy story.

The active game now lives at the repository root. src/, assets/, tests/, android/, and build.sh are the canonical Odin project. The former Python/Pygame implementation is archived under arch-rogue-python/; it remains useful for archaeology and parity checks, but it is not an active development or runtime dependency.

Downloads and platform status

Bleeding-edge prerelease builds are published on the Arch Rogue download site.

Platform Status
Linux Available
Android Available as a native Odin/raylib alpha build
Web (WebAssembly) Play in a browser using the exact audited release archive. Requires a current desktop Chromium-family or Firefox browser with WebGL2
Windows Native x64 ZIP and Steam CI lanes configured; first CI run and hardware acceptance pending
macOS Unsupported
Steam / Steam Deck integration In progress: the game-side Steamworks integration (achievements, offline queue, cloud-ready saves) is built; store release pending
Multiplayer Deferred

The public workflow deploys the same content-addressed web archive attached to each prerelease. The Brotli wire budget and immutable/no-cache policy are self-hosted contracts validated by web-audit and web-serve; GitHub Pages controls its own compression and cache headers, so those delivery claims are not applied to the Pages endpoint.

This is an alpha release. Save formats are versioned and defensive, but gameplay, presentation, and platform contracts can still change before 6.0.

Highlights

  • Deterministic ten-depth runs with procedural rooms, corridors, doors, boss arenas, eight dungeon themes, dark floors, line-of-sight fog of war, and an isometric minimap.
  • Five archetypes: Warden, Rogue, Arcanist, Acolyte, and Ranger.
  • Fixed-step real-time combat with class kits, typed damage and statuses, elites, minibosses, five bosses, familiars, and a full discipline tree.
  • Loot with rarity tiers, affixes, unidentified and cursed equipment, consumables, and thirteen named uniques.
  • Traps, shrines, secrets, Shops, Bars, Gardens, Quest rooms, and the Hall of Unlost Echoes.
  • A deterministic story engine with guests, relic choices, minigames, run consequences, and fifteen endings.
  • Local save/resume, recovery-safe writes, persistent options, and the Chronicle run history.
  • Authored PixelLab actor, world, UI, story, and effect art with point-sampled rendering.
  • Keyboard/mouse and remappable gamepad input on Linux; native multi-touch, lifecycle, and semantic Back handling on Android.

See PARITY.md for the port ledger, ARCHITECTURE.md for design decisions and subsystem boundaries, and ITEM_BALANCE.md for the review tables covering Rare rolls and fixed named Unique stats.

Inventory and menu controls

  • Use the mouse wheel to navigate menus and scroll inventory/shop lists.
  • In inventory (I), hover or tap an equipped weapon/armor to preview it. Tab or controller RB cycles bag → weapon → armor; Up/Down and the D-pad also navigate between equipped slots and bag rows. Equipped previews are read-only.
  • Enter/E or a double-click uses/equips the selected bag item; 1–9 targets a bag item directly. Delete drops the selected bag item; Shift+1–9 drops that numbered bag item.
  • S sorts the bag; Left/Right (including the D-pad), Shift+S, controller X (unless remapped to Character), or the sort buttons choose the sort mode. In shops, Tab/Left/Right switches Buy/Sell.
  • During gameplay, Ctrl+wheel zooms the world; plain wheel over the minimap zooms only the minimap. Open menus take priority over both zoom controls.

Build on Linux

Requirements

  • A Linux development host
  • Bash
  • The exact Odin tag, source commit, and LLVM backend recorded in root toolchain.properties, available as odin
  • The normal Linux graphics, windowing, and audio development libraries required by raylib

build.sh verifies the ambient Odin executable before every compile, check, or test, so local builds cannot silently differ from CI/CD. The native Windows lane uses the same source commit with the source tree's separately pinned Windows LLVM 20.1.0 backend; the following LLVM pin applies to Linux. At the current pin this requires Odin dev-2026-07 at commit 301c287de90393608fb7c5b260210e1e67caf0fd, built with LLVM 21.1.8; a newer distro package is intentionally rejected. CI reads its setup-odin inputs from the same root contract and runs the same verifier.

The raylib 6.0 binding and checksum-pinned static libraries are included under vendor/raylib/; a separate raylib installation is not required. Root toolchain.properties owns project-wide Odin and raylib source pins, while android/toolchain.properties and web/toolchain.properties contain only platform-specific additions.

Run every command from the repository root. The wrapper also relocates itself correctly when invoked from another current directory.

./build.sh toolchain
./build.sh check
./build.sh test
./build.sh build
./build.sh run
./build.sh release
  • toolchain verifies the exact Odin identity/backend and vendored Linux raylib archive without compiling.
  • check runs odin check src -vet.
  • test runs the headless deterministic Odin test package with vetting enabled.
  • build creates a debug executable at build/archrogue.
  • run builds and starts the debug game.
  • release creates an optimized executable at build/archrogue.

Additional Odin arguments may be appended after the command.

Build for Windows

Native Windows x64 CI produces a ZIP for GitHub releases and a separate Steam depot. Use ./build.sh windows-package from Git Bash with the pinned Odin compiler and VS 2022 x64 C++ tools. See Windows build instructions for setup, audits, smoke testing, and outstanding hardware acceptance.

Build for Android

Android is a native NativeActivity package using the same Odin/raylib game loop as Linux. It targets API 35, supports API 28 and newer, and packages arm64-v8a, armeabi-v7a, and x86_64.

The pinned Android toolchain requires JDK 17, Android build-tools 35.0.0, NDK 28.2.13676358, and a populated offline Gradle/AGP cache. Start with preflight; it reports exact missing components.

./build.sh android-preflight
./build.sh android-debug
./build.sh android-install
./build.sh android-audit
./build.sh android-smoke --serial emulator-5554

A signed release APK and AAB require the signing environment documented in android/README.md:

./build.sh android-release

Android outputs are written under build/android/. See android/README.md for toolchain provisioning, application IDs, signing, AVD smoke testing, ABI auditing, and the NativeActivity/Back bridge.

Repository layout

src/                   active Odin package: shared runtime, simulation, UI, and platform entries
assets/                sole canonical game-ready art, audio, shaders, fonts, and manifests
tests/                 headless deterministic Odin tests plus repository/site contract tests
android/               pinned Gradle NativeActivity package and narrow Java platform shell
web/                   pinned Emscripten contract, browser shell, JS bridge, and RAF driver
tools/                 build, audit, asset verification, capture, smoke, and profiling tooling
tools/public-repo/     canonical workflows overlaid into the filtered public repository
vendor/raylib/         raylib 6.0 Odin binding and pinned Linux, Android, and Web archives
website/               GitHub Pages download-site source; CI stages the web build under play/
.github/workflows/     active CI entrypoints: private mirror automation or public release workflow
build/                 generated local artifacts and validation evidence; never canonical source
arch-rogue-python/     archived read-only Python/Pygame implementation for historical reference
build.sh               canonical Linux, Android, and Web command wrapper

The active Odin build must not read code or assets from arch-rogue-python/. assets/ is the only canonical runtime art tree.

Licensed SFX in public source builds

Arch Rogue uses a commercially licensed third-party SFX library. Its runtime WAV derivatives are not Apache-2.0 content and are excluded from the public Git repository. The public tree retains assets/audio/sfx/manifest.json as an integrity lock and assets/audio/sfx/README.md with manual import/injection instructions. The game and source checks degrade safely to silence when these files are absent; full audio tests and release packages require an authorized complete injection.

Before mirroring source, private CI verifies the WAV set and automatically creates or refreshes the arch-rogue-sfx-runtime.tar.gz asset on the private sfx-runtime release. Public Linux, Android, and web jobs resolve the current asset through that stable release tag, inject it independently, validate every WAV against the committed manifest, and delete the downloaded bundle before uploading only integrated game artifacts.

The public repository needs only one Actions secret:

  • ARCH_ROGUE_SFX_BUNDLE_AUTHORIZATION: the complete HTTP Authorization header value, such as Bearer …, for a fine-grained token with read-only access to mattirk/arch-rogue-master.

The release API URL and asset name are stable, non-secret workflow constants. An optional ARCH_ROGUE_SFX_BUNDLE_SHA256 environment value remains supported for manual/custom runners, but public automation does not require it because every extracted WAV is already locked by the manifest's SHA-256 and size.

Never store the bundle, raw source pack, or individual WAVs in the public repository, public workflow artifacts, public caches, or public release assets outside the integrated game distributions.

Development notes

  • Simulation uses a 60 Hz fixed timestep and seeded PCG streams. Rendering must not mutate simulation state.
  • Simulation and content code remain raylib-free so the test package can run headlessly.
  • Linux, native Android, and desktop WebAssembly/WebGL2 are the current release targets. The game-side Steam integration is built and a Steam release is being prepared; Windows now has native CI packaging pending runtime acceptance; multiplayer is coming soon and macOS is unsupported.
  • The project is still awaiting final human side-by-side visual parity signoff and broader physical-device Android retesting noted in PARITY.md.

Licenses and notices

Arch Rogue source and original project content are distributed under the Apache License 2.0. Third-party fonts, raylib, and licensed runtime SFX retain their own terms and are not relicensed under Apache-2.0. Required notices, bundled-dependency attribution, and the AI provenance/liability notice are in NOTICE.

raylib 6.0 is bundled under the zlib/libpng license; its complete text is in vendor/raylib/LICENSE, with Android archive provenance under vendor/raylib/android/PROVENANCE.md. Android packages include exact Arch Rogue and raylib license copies under their packaged assets/licenses/ directory.

The Arch Rogue name and octahedron crest are trademarks of the project author and are not granted for derivative branding by Apache-2.0.

Changelog

See CHANGELOG.md for release history and current unreleased work.

About

Public mirror of Arch Rogue source

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages