# 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`