/oxid

Primary LanguageZigMIT LicenseMIT

Oxid

Oxid is an arcade-style game where you fight waves of monsters in a fixed-screen maze. This is more or less a clone of Verminian Trap (2013, Locomalito). Verminian Trap was originally inspired by Wizard of Wor (1980, Midway).

Oxid is written in the Zig programming language (requires version 0.7.x).

Play online here!

Screenshot

Building

Note: After cloning the oxid repository, make sure to update the submodules (git submodule init followed by git submodule update).

Oxid can be built into a native executable or a WebAssembly binary.

Native (OpenGL) build

The native build requires SDL2 and should work on Linux, Mac and Windows (untested).

To build and run the debug build:

zig build play

# or, equivalently:
zig build
zig-cache/oxid

To build and run the release build:

zig build -Drelease-safe=true
zig-cache/oxid

Oxid supports a few command-line options for things like refresh rate and audio sample rate. Run zig-cache/oxid --help for a listing.

WebAssembly build

The WebAssembly build has no third-party requirements.

To build and serve:

sh build_web.sh www  # choose any destination directory
cd www
python3 -m http.server  # or any other web server of your choice

How to play

Game controls (these can be rebound in the menu):

  • arrow keys: move
  • space: shoot
  • esc: open menu

Menu controls:

  • arrow keys: move cursor
  • enter: select
  • esc: go back

Debug/cheat controls:

  • backquote: fast forward (4x speed)
  • shift-backquote: super fast forward (16x speed)
  • backspace: skip to next wave
  • F2: toggle rendering of move boxes
  • F4: toggle profiling spam (not available in web version or in ReleaseSmall)

Code organization

See doc/Code organization.md

Version history

See doc/Version history.md

Notes

Low-level graphics code was originally based on andrewrk's Tetris demo for Zig. WebAssembly code was based on raulgrell's fork of the same project.

Some sound effects from https://opengameart.org/content/512-sound-effects-8-bit-style

Uses Dawnbringer's 16-color palette.

Uses Hejsil's zig-clap, my zig-hunk, zig-pcx and zig-wav one-file libraries, as well as zang for audio.