roguelike-game/README.md
2022-02-10 11:54:57 -05:00

2.6 KiB

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

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
  • 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