roguelike-game/README.md
2022-02-10 11:18:21 -05:00

76 lines
2.5 KiB
Markdown

# 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](https://www.rust-lang.org/learn/get-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`
### 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 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`