Fork 0
Rust rogue-like game tutorial: https://bfnightly.bracketproductions.com/
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Timothy Warren db5c219599 Only show welcome message on first level 1 year ago
raws Add a big bad boss 1 year ago
resources Update tutorial resource files 2 years ago
src Only show welcome message on first level 1 year ago
wasm Some various tweaks and fixes 1 year ago
.gitignore Add FPS display, get webassembly build working 1 year ago
Cargo.toml Separate binary from game engine 1 year ago
Makefile Separate binary from game engine 1 year ago
README.md Separate binary from game engine 1 year ago
help-system.mk Finish implmentation of ranged weapons, completing section 5.28 1 year ago
rustfmt.toml Finish refactoring of map builders 1 year ago


Rust Roguelike

A rogue-like game, implemented in Rust, with the specs ECS library, and rltk roguelike toolkit.

Rust Setup

Follow the instructions on the Getting Started page of the Rust language website.You should then have rustup and cargo available in your terminal. If you want to run on a Raspberry Pi, or via WebAssembly, you will also need make.

Running the game

  • For most setups, cargo run or make run.
  • For the Raspberry Pi: make run-pi



Any movement commands with numbers can use the top row or numpad.

Direction Keys
↑, 8, k
↓, 2, j
←, 4, h
→, 6, l
7, u, q, Home
9, y, w, Page Up
1, b, a, End
3, n, s, Page Down

Item management

Key Action
g Grab an item
i Inventory menu
d Item drop menu
r Remove item menu

Ranged weapons (Not magic or scrolls)

Key Action
v Cycle potential targets
f Fire at selected target

Other actions

Key(s) Action
5, Space Skip a turn
Escape Save and quit

Mouse controls

By hovering over tiles, the name of item(s) on that tile will appear. For ranged scroll attacks, the left mouse button is used to select a target.

WebAssembly Build

  • Install the WebAssembly target via rustup: rustup target add wasm32-unknown-unknown
  • Install wasm-bindgen: cargo install wasm-bindgen-cli
  • Run make build-wasm
  • Serve the wasm folder with a web server (wasm will not work straight from the html file)


If you want to see what else you can run with Makefile, run make help. This will list commands and what they do.

Changes from tutorial

  • Added a macro to register components for specs, like was in the tutorial for saving/loading.
  • Game state machine is moved to src/state.rs
  • Colors (Bracket-lib RGB struct) have been converted to static values in src/colors.rs, to cut down on boilerplate and numbers of ways of generating color values.
  • All references to rltk have been converted to bracket_lib, as rltk was a facade in bracket_lib
  • Made the crate a library and binary, with the binary just starting and running the game engine
  • Submodules use named files as the module base, rather than mod.rs