About this tutorial

This tutorial is free and open source, and all code uses the MIT license - so you are free to do with it as you like. My hope is that you will enjoy the tutorial, and make great games!

If you enjoy this and would like me to keep writing, please consider supporting my Patreon.

Hands-On Rust

The following people have contributed to this project:

  • Herbert Wolverson, the primary author.
  • Marius Gedminas provided some fixes to the visibility system, and chapter 5. Corrected a typo in chapter 7, fixed a Markdown error in chapter 7, fixed indentation in chapter 13, and a typo in chapter 18. He also fixed some code in my hunger clock to let monsters get hungry too, if we so desire.
  • Ben Morrison fixed an issue in chapter 4, correctly matching room passing-by-reference with the accompanying source code.
  • Tommi Jalkanen helped me remove some Dispatcher code that I'd accidentally left in place. He also found an issue with bounds checking on movement, for which I am eternally grateful!
  • Gabriel Martinez helped me fix the Vi keys.
  • Dominic D found some issues with chapter 7.
  • FlorentKI found some dispatch code that hadn't been properly deleted, and helped fix up some code issues with dog-leg corridors.
  • Zirael07 found numerous typos and missing bits of code.
  • Tyler Vipond found a bunch of issues in chapters 7 and 9.
  • JP Moresmau found a problem with the order in which systems were running, allowing you to run through mobs.
  • toyboot4e found some typos and code improvements in the Wave Function Collapse system.
  • Sebastian N. Kaupe fixed an issue with tool-tip whitespace.
  • adamnemecek helped out with some whitespace issues.
  • Kawzeg helped fix an out-of-bounds error in chapter 4.
  • joguSD reminded me to fix my SSL certificate.
  • Olivia Ifrim helped me fix some broken links to the Specs book.
  • NielsRenard fixed my awful English for dropping items and helped with even more broken Specs book links. He also helped find an awful issue preventing one from suffering damage from more than one source in a turn.
  • ZeroCity fixed a typo in Chapter 2 (Position not Pos).
  • Fuddles from the r/roguelikedev Discord pointed out an issue with structure naming.
  • dethmuffin pointed out an inconsistency in chapter 9, in the new ConvertSaveLoad code.
  • Reddit user u/Koavf asked me to clarify the licensing for the project.
  • Till Arnold fixed a small typo in chapter 5.
  • pk helped remove some unused variable warnings.
  • Vojta7 found a broken module reference and fixed it for me. He also found numerous typos in the WFC section and fixed them, too.
  • skierpage fixed a lot of typos in chapter 2.
  • Mark McCaskey provided a logging system that doesn't suck!
  • Thibaut helped me fix some example code in chapter 7.
  • Matteo Guglielmetti spotted a type error in the chapter 7 code and fixed it for me.
  • Jubilee helped me fix up a bunch of links from RLTK to bracket-lib, and a bunch of typos.
  • Rich Churcher helped me find/fix a few places that forgot to update the initialization code.
  • Matteo Gugliemetti noticed that I was using RunState before I initialized it.
  • Luca Beltrami pointed out that I don't need extern crate and macro_use anymore.
  • HammerAndTongs noticed that the A* implementation also needs to implement get_pathing_distance.
  • mdtro found a problem with the Chapter 7 code.
  • pprobst noticed that tool-tips were revealing hidden monsters.
  • Ben Doerr reminded me to remind you to run the new systems created in chapter 7.
  • Charlie Hornsby helped with some text/code inconsistencies in chapter 1.
  • ddalcino fixed some FOV issues.
  • Remi Marchand helped fix some consistency issues in the text.


I'd also like to take a moment to thank everyone who has sent me kind words, contributed with issue reports, and the following Patrons (from

  • Aslan Magomadov
  • Ben Gamble
  • Boyd Trolinger
  • Brian Bucklew
  • Caleb C.
  • Caleb M.
  • Chad Thorenson
  • Crocodylus Pontifex (great name!)
  • David Hagerty
  • Enrique Garcia
  • Finn G√ľnther
  • Fredrik Holmqvist
  • Galen Palmer
  • George Madrid
  • Jeffrey Lyne
  • Josh Isaak
  • Kenton Hamaluik
  • KnightDave
  • Kris Shamloo
  • Matthew Bradford
  • Mark Rowe
  • Neikos
  • Noah
  • Oliver Uvman
  • Oskar Edgren
  • Pat LaBine
  • Pedro Probst
  • Pete Bevin
  • Rafin de Castro
  • Russel Myers
  • Ryan Orlando
  • Shane Sveller
  • Simon Dickinson
  • Snayff
  • Steve Hyatt
  • Teague Lasser
  • Tom Leys
  • Tommi Sinuvuo
  • Torben Clasen

If I've missed your contribution, please let me know!

Copyright (C) 2019, Herbert Wolverson.