Rust rogue-like game tutorial: https://bfnightly.bracketproductions.com/
raws | ||
resources | ||
src | ||
wasm | ||
.gitignore | ||
Cargo.toml | ||
help-system.mk | ||
Makefile | ||
README.md | ||
rustfmt.toml |
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
ormake run
. - For the Raspberry Pi:
make run-pi
Controls
Movement
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)
Makefile
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 insrc/colors.rs
, to cut down on boilerplate and numbers of ways of generating color values. - All references to
rltk
have been converted tobracket_lib
, asrltk
was a facade inbracket_lib