diff --git a/Cargo.lock b/Cargo.lock
index 9d067769..48831b85 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -26,6 +26,17 @@ version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217"
 
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
 [[package]]
 name = "aho-corasick"
 version = "0.7.18"
@@ -263,7 +274,7 @@ name = "chapter-02-helloecs"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.16.1",
  "specs-derive",
 ]
 
@@ -272,7 +283,7 @@ name = "chapter-03-walkmap"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -281,7 +292,7 @@ name = "chapter-04-newmap"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -290,7 +301,7 @@ name = "chapter-05-fov"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -299,7 +310,7 @@ name = "chapter-06-monsters"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -308,7 +319,7 @@ name = "chapter-07-damage"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -317,7 +328,7 @@ name = "chapter-08-ui"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -326,7 +337,7 @@ name = "chapter-09-items"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -335,7 +346,7 @@ name = "chapter-10-ranged"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -346,7 +357,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -357,7 +368,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -368,7 +379,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -379,7 +390,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -390,7 +401,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -401,7 +412,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -412,7 +423,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -423,7 +434,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -434,7 +445,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -445,7 +456,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -456,7 +467,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -467,7 +478,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -478,7 +489,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -489,7 +500,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -500,7 +511,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -511,7 +522,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -522,7 +533,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -533,7 +544,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -544,7 +555,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -555,7 +566,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -566,7 +577,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -577,7 +588,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -588,7 +599,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -599,7 +610,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -610,7 +621,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -621,7 +632,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -632,7 +643,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -643,7 +654,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -654,7 +665,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -665,7 +676,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -677,7 +688,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -689,7 +700,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -701,7 +712,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -713,7 +724,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -725,7 +736,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -737,7 +748,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -750,7 +761,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -763,7 +774,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -776,7 +787,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -789,7 +800,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -802,7 +813,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -815,7 +826,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -828,7 +839,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -841,7 +852,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -854,7 +865,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -867,7 +878,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -880,7 +891,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -893,7 +904,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -906,7 +917,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -919,7 +930,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -932,7 +943,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -945,7 +956,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -958,7 +969,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -971,7 +982,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -984,7 +995,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -997,7 +1008,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -1010,7 +1021,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -1023,7 +1034,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -1036,7 +1047,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -1049,7 +1060,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -1062,7 +1073,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -1075,7 +1086,7 @@ dependencies = [
  "rltk",
  "serde",
  "serde_json",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -1279,6 +1290,16 @@ dependencies = [
  "maybe-uninit",
 ]
 
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils 0.8.9",
+]
+
 [[package]]
 name = "crossbeam-utils"
 version = "0.7.2"
@@ -1583,10 +1604,19 @@ version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "96282e96bfcd3da0d3aa9938bedf1e50df3269b6db08b4876d2da0bb1a0841cf"
 dependencies = [
- "ahash",
+ "ahash 0.3.8",
  "autocfg",
 ]
 
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash 0.7.6",
+]
+
 [[package]]
 name = "hermit-abi"
 version = "0.1.19"
@@ -2292,7 +2322,7 @@ name = "rust_roguelike_tutorial"
 version = "0.1.0"
 dependencies = [
  "rltk",
- "specs",
+ "specs 0.17.0",
  "specs-derive",
 ]
 
@@ -2396,7 +2426,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c5f08237e667ac94ad20f8878b5943d91a93ccb231428446c57c21c57779016d"
 dependencies = [
  "arrayvec",
- "hashbrown",
+ "hashbrown 0.7.2",
+ "mopa",
+ "rayon",
+ "smallvec",
+ "tynm",
+]
+
+[[package]]
+name = "shred"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb0210289d693217926314867c807e0b7b42f7e23c136adb31f8697f5bf242d3"
+dependencies = [
+ "arrayvec",
+ "hashbrown 0.11.2",
  "mopa",
  "rayon",
  "smallvec",
@@ -2455,13 +2499,29 @@ version = "0.16.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fff28a29366aff703d5da8a7e2c8875dc8453ac1118f842cbc0fa70c7db51240"
 dependencies = [
- "crossbeam-queue",
- "hashbrown",
+ "crossbeam-queue 0.2.3",
+ "hashbrown 0.7.2",
+ "hibitset",
+ "log",
+ "rayon",
+ "shred 0.10.2",
+ "shrev",
+ "tuple_utils",
+]
+
+[[package]]
+name = "specs"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dcc1e4ba7ab1f08ecb3d7e2f693defc3907e2c03bb0924f9978be45b364f83f"
+dependencies = [
+ "crossbeam-queue 0.3.5",
+ "hashbrown 0.11.2",
  "hibitset",
  "log",
  "rayon",
  "serde",
- "shred",
+ "shred 0.12.0",
  "shrev",
  "tuple_utils",
 ]
diff --git a/Cargo.toml b/Cargo.toml
index 762c3ad5..d998d46f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0" }
-specs = "0.16.1"
+specs = "0.17"
 specs-derive = "0.4.1"
 
 [workspace]
diff --git a/chapter-03-walkmap/Cargo.toml b/chapter-03-walkmap/Cargo.toml
index 15dcf1a4..34f6c741 100644
--- a/chapter-03-walkmap/Cargo.toml
+++ b/chapter-03-walkmap/Cargo.toml
@@ -8,5 +8,5 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0" }
-specs = "0.16.1"
+specs = "0.17"
 specs-derive = "0.4.1"
diff --git a/chapter-04-newmap/Cargo.toml b/chapter-04-newmap/Cargo.toml
index 7ac824fd..c50db245 100644
--- a/chapter-04-newmap/Cargo.toml
+++ b/chapter-04-newmap/Cargo.toml
@@ -8,5 +8,5 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0" }
-specs = "0.16.1"
+specs = "0.17"
 specs-derive = "0.4.1"
diff --git a/chapter-05-fov/Cargo.toml b/chapter-05-fov/Cargo.toml
index 22bdc262..9e3d27a2 100644
--- a/chapter-05-fov/Cargo.toml
+++ b/chapter-05-fov/Cargo.toml
@@ -8,5 +8,5 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0" }
-specs = "0.16.1"
+specs = "0.17"
 specs-derive = "0.4.1"
diff --git a/chapter-06-monsters/Cargo.toml b/chapter-06-monsters/Cargo.toml
index 86435440..54fd284f 100644
--- a/chapter-06-monsters/Cargo.toml
+++ b/chapter-06-monsters/Cargo.toml
@@ -8,5 +8,5 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0" }
-specs = "0.16.1"
+specs = "0.17"
 specs-derive = "0.4.1"
diff --git a/chapter-07-damage/Cargo.toml b/chapter-07-damage/Cargo.toml
index ffa5c89d..a85d35a9 100644
--- a/chapter-07-damage/Cargo.toml
+++ b/chapter-07-damage/Cargo.toml
@@ -8,5 +8,5 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0" }
-specs = "0.16.1"
+specs = "0.17"
 specs-derive = "0.4.1"
diff --git a/chapter-08-ui/Cargo.toml b/chapter-08-ui/Cargo.toml
index 74aeff07..c0b954ba 100644
--- a/chapter-08-ui/Cargo.toml
+++ b/chapter-08-ui/Cargo.toml
@@ -8,5 +8,5 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0" }
-specs = "0.16.1"
+specs = "0.17"
 specs-derive = "0.4.1"
diff --git a/chapter-09-items/Cargo.toml b/chapter-09-items/Cargo.toml
index 5dde25a6..d579caf7 100644
--- a/chapter-09-items/Cargo.toml
+++ b/chapter-09-items/Cargo.toml
@@ -8,5 +8,5 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0" }
-specs = "0.16.1"
+specs = "0.17"
 specs-derive = "0.4.1"
diff --git a/chapter-10-ranged/Cargo.toml b/chapter-10-ranged/Cargo.toml
index 16320bbf..4bc23f16 100644
--- a/chapter-10-ranged/Cargo.toml
+++ b/chapter-10-ranged/Cargo.toml
@@ -8,5 +8,5 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0" }
-specs = "0.16.1"
+specs = "0.17"
 specs-derive = "0.4.1"
diff --git a/chapter-11-loadsave/Cargo.toml b/chapter-11-loadsave/Cargo.toml
index 65a020a4..b933a155 100644
--- a/chapter-11-loadsave/Cargo.toml
+++ b/chapter-11-loadsave/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-12-delvingdeeper/Cargo.toml b/chapter-12-delvingdeeper/Cargo.toml
index 51393f5f..15cfcb63 100644
--- a/chapter-12-delvingdeeper/Cargo.toml
+++ b/chapter-12-delvingdeeper/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-13-difficulty/Cargo.toml b/chapter-13-difficulty/Cargo.toml
index d15d6dc7..7270632e 100644
--- a/chapter-13-difficulty/Cargo.toml
+++ b/chapter-13-difficulty/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-14-gear/Cargo.toml b/chapter-14-gear/Cargo.toml
index 27c9a7aa..add3b8cd 100644
--- a/chapter-14-gear/Cargo.toml
+++ b/chapter-14-gear/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-16-nicewalls/Cargo.toml b/chapter-16-nicewalls/Cargo.toml
index fb897905..8e2e57a0 100644
--- a/chapter-16-nicewalls/Cargo.toml
+++ b/chapter-16-nicewalls/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-17-blood/Cargo.toml b/chapter-17-blood/Cargo.toml
index 66650b68..85164bbe 100644
--- a/chapter-17-blood/Cargo.toml
+++ b/chapter-17-blood/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-18-particles/Cargo.toml b/chapter-18-particles/Cargo.toml
index 2a80c0e6..e21f2221 100644
--- a/chapter-18-particles/Cargo.toml
+++ b/chapter-18-particles/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-19-food/Cargo.toml b/chapter-19-food/Cargo.toml
index 1b38f2fa..5fd29784 100644
--- a/chapter-19-food/Cargo.toml
+++ b/chapter-19-food/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-20-magicmapping/Cargo.toml b/chapter-20-magicmapping/Cargo.toml
index e9a40bad..957708a8 100644
--- a/chapter-20-magicmapping/Cargo.toml
+++ b/chapter-20-magicmapping/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-21-rexmenu/Cargo.toml b/chapter-21-rexmenu/Cargo.toml
index 3a9cb9ee..48f7092f 100644
--- a/chapter-21-rexmenu/Cargo.toml
+++ b/chapter-21-rexmenu/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-22-simpletraps/Cargo.toml b/chapter-22-simpletraps/Cargo.toml
index efd6c98d..766a4c6a 100644
--- a/chapter-22-simpletraps/Cargo.toml
+++ b/chapter-22-simpletraps/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-23-generic-map/Cargo.toml b/chapter-23-generic-map/Cargo.toml
index a95bde8b..a46b4711 100644
--- a/chapter-23-generic-map/Cargo.toml
+++ b/chapter-23-generic-map/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-24-map-testing/Cargo.toml b/chapter-24-map-testing/Cargo.toml
index e8fad6ac..dea75569 100644
--- a/chapter-24-map-testing/Cargo.toml
+++ b/chapter-24-map-testing/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-25-bsproom-dungeons/Cargo.toml b/chapter-25-bsproom-dungeons/Cargo.toml
index 3954ef6f..cc42c535 100644
--- a/chapter-25-bsproom-dungeons/Cargo.toml
+++ b/chapter-25-bsproom-dungeons/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-26-bsp-interiors/Cargo.toml b/chapter-26-bsp-interiors/Cargo.toml
index 11bfd562..b4e34657 100644
--- a/chapter-26-bsp-interiors/Cargo.toml
+++ b/chapter-26-bsp-interiors/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-27-cellular-automata/Cargo.toml b/chapter-27-cellular-automata/Cargo.toml
index 4b6f441c..209ddaaa 100644
--- a/chapter-27-cellular-automata/Cargo.toml
+++ b/chapter-27-cellular-automata/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-28-drunkards-walk/Cargo.toml b/chapter-28-drunkards-walk/Cargo.toml
index 1a675f01..ccac5562 100644
--- a/chapter-28-drunkards-walk/Cargo.toml
+++ b/chapter-28-drunkards-walk/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-29-mazes/Cargo.toml b/chapter-29-mazes/Cargo.toml
index 05020dad..50106850 100644
--- a/chapter-29-mazes/Cargo.toml
+++ b/chapter-29-mazes/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-30-dla/Cargo.toml b/chapter-30-dla/Cargo.toml
index 3be263d1..1efc91b6 100644
--- a/chapter-30-dla/Cargo.toml
+++ b/chapter-30-dla/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-31-symmetry/Cargo.toml b/chapter-31-symmetry/Cargo.toml
index 98d324d5..8fabceb7 100644
--- a/chapter-31-symmetry/Cargo.toml
+++ b/chapter-31-symmetry/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-32-voronoi/Cargo.toml b/chapter-32-voronoi/Cargo.toml
index e4305f7b..e51f9cba 100644
--- a/chapter-32-voronoi/Cargo.toml
+++ b/chapter-32-voronoi/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-33-wfc/Cargo.toml b/chapter-33-wfc/Cargo.toml
index 4acb3f9f..b5f459db 100644
--- a/chapter-33-wfc/Cargo.toml
+++ b/chapter-33-wfc/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-34-vaults/Cargo.toml b/chapter-34-vaults/Cargo.toml
index a39a8fc9..a1e77b78 100644
--- a/chapter-34-vaults/Cargo.toml
+++ b/chapter-34-vaults/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-35-vaults2/Cargo.toml b/chapter-35-vaults2/Cargo.toml
index 87ab2a77..b3770efe 100644
--- a/chapter-35-vaults2/Cargo.toml
+++ b/chapter-35-vaults2/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-36-layers/Cargo.toml b/chapter-36-layers/Cargo.toml
index 4fba28ae..cefe1317 100644
--- a/chapter-36-layers/Cargo.toml
+++ b/chapter-36-layers/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-37-layers2/Cargo.toml b/chapter-37-layers2/Cargo.toml
index 1deac551..ba9bf664 100644
--- a/chapter-37-layers2/Cargo.toml
+++ b/chapter-37-layers2/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-38-rooms/Cargo.toml b/chapter-38-rooms/Cargo.toml
index fc8cfb92..0f9d0b63 100644
--- a/chapter-38-rooms/Cargo.toml
+++ b/chapter-38-rooms/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-39-halls/Cargo.toml b/chapter-39-halls/Cargo.toml
index 5decc342..8331619d 100644
--- a/chapter-39-halls/Cargo.toml
+++ b/chapter-39-halls/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-40-doors/Cargo.toml b/chapter-40-doors/Cargo.toml
index 45a31388..4d062c46 100644
--- a/chapter-40-doors/Cargo.toml
+++ b/chapter-40-doors/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-41-camera/Cargo.toml b/chapter-41-camera/Cargo.toml
index de1c60f3..c05bcc37 100644
--- a/chapter-41-camera/Cargo.toml
+++ b/chapter-41-camera/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-45-raws1/Cargo.toml b/chapter-45-raws1/Cargo.toml
index 637692df..2191a512 100644
--- a/chapter-45-raws1/Cargo.toml
+++ b/chapter-45-raws1/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-46-raws2/Cargo.toml b/chapter-46-raws2/Cargo.toml
index 8e6af66f..c874e03c 100644
--- a/chapter-46-raws2/Cargo.toml
+++ b/chapter-46-raws2/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-47-town1/Cargo.toml b/chapter-47-town1/Cargo.toml
index 34efb9be..080387d6 100644
--- a/chapter-47-town1/Cargo.toml
+++ b/chapter-47-town1/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-48-town2/Cargo.toml b/chapter-48-town2/Cargo.toml
index eee48438..173eb670 100644
--- a/chapter-48-town2/Cargo.toml
+++ b/chapter-48-town2/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-49-town3/Cargo.toml b/chapter-49-town3/Cargo.toml
index 86132adf..073bfdd3 100644
--- a/chapter-49-town3/Cargo.toml
+++ b/chapter-49-town3/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-50-stats/Cargo.toml b/chapter-50-stats/Cargo.toml
index 99138876..cfa068d1 100644
--- a/chapter-50-stats/Cargo.toml
+++ b/chapter-50-stats/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-51-gear/Cargo.toml b/chapter-51-gear/Cargo.toml
index 2635d6b1..0af32ded 100644
--- a/chapter-51-gear/Cargo.toml
+++ b/chapter-51-gear/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-52-ui/Cargo.toml b/chapter-52-ui/Cargo.toml
index a6eb39ac..e040419b 100644
--- a/chapter-52-ui/Cargo.toml
+++ b/chapter-52-ui/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-53-woods/Cargo.toml b/chapter-53-woods/Cargo.toml
index 6c317cb4..94839c04 100644
--- a/chapter-53-woods/Cargo.toml
+++ b/chapter-53-woods/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-54-xp/Cargo.toml b/chapter-54-xp/Cargo.toml
index 25f1edce..835057d7 100644
--- a/chapter-54-xp/Cargo.toml
+++ b/chapter-54-xp/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-55-backtrack/Cargo.toml b/chapter-55-backtrack/Cargo.toml
index 3ae4a5ba..80ef2cbc 100644
--- a/chapter-55-backtrack/Cargo.toml
+++ b/chapter-55-backtrack/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-56-caverns/Cargo.toml b/chapter-56-caverns/Cargo.toml
index 74041ce4..4ade666b 100644
--- a/chapter-56-caverns/Cargo.toml
+++ b/chapter-56-caverns/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-57-ai/Cargo.toml b/chapter-57-ai/Cargo.toml
index d5ea3c06..ea9400ec 100644
--- a/chapter-57-ai/Cargo.toml
+++ b/chapter-57-ai/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-57a-spatial/Cargo.toml b/chapter-57a-spatial/Cargo.toml
index b95899b1..7d7deaf8 100644
--- a/chapter-57a-spatial/Cargo.toml
+++ b/chapter-57a-spatial/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-58-itemstats/Cargo.toml b/chapter-58-itemstats/Cargo.toml
index da546e0b..b21c5698 100644
--- a/chapter-58-itemstats/Cargo.toml
+++ b/chapter-58-itemstats/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-59-caverns2/Cargo.toml b/chapter-59-caverns2/Cargo.toml
index 62477cbf..f688824b 100644
--- a/chapter-59-caverns2/Cargo.toml
+++ b/chapter-59-caverns2/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-60-caverns3/Cargo.toml b/chapter-60-caverns3/Cargo.toml
index 66ee279c..a29d630c 100644
--- a/chapter-60-caverns3/Cargo.toml
+++ b/chapter-60-caverns3/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-61-townportal/Cargo.toml b/chapter-61-townportal/Cargo.toml
index 6b99a5da..47845173 100644
--- a/chapter-61-townportal/Cargo.toml
+++ b/chapter-61-townportal/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-62-magicitems/Cargo.toml b/chapter-62-magicitems/Cargo.toml
index 1588c662..047cfb78 100644
--- a/chapter-62-magicitems/Cargo.toml
+++ b/chapter-62-magicitems/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-63-effects/Cargo.toml b/chapter-63-effects/Cargo.toml
index fe552852..35108876 100644
--- a/chapter-63-effects/Cargo.toml
+++ b/chapter-63-effects/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-64-curses/Cargo.toml b/chapter-64-curses/Cargo.toml
index f68281e9..85aa21cf 100644
--- a/chapter-64-curses/Cargo.toml
+++ b/chapter-64-curses/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-65-items/Cargo.toml b/chapter-65-items/Cargo.toml
index fef54a5f..d0847390 100644
--- a/chapter-65-items/Cargo.toml
+++ b/chapter-65-items/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-66-spells/Cargo.toml b/chapter-66-spells/Cargo.toml
index e4d14a36..6e5d5cad 100644
--- a/chapter-66-spells/Cargo.toml
+++ b/chapter-66-spells/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-67-dragon/Cargo.toml b/chapter-67-dragon/Cargo.toml
index 553ad226..51ccf934 100644
--- a/chapter-67-dragon/Cargo.toml
+++ b/chapter-67-dragon/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-68-mushrooms/Cargo.toml b/chapter-68-mushrooms/Cargo.toml
index e3b5af2b..e84e4461 100644
--- a/chapter-68-mushrooms/Cargo.toml
+++ b/chapter-68-mushrooms/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-69-mushrooms2/Cargo.toml b/chapter-69-mushrooms2/Cargo.toml
index 673fc725..852713b4 100644
--- a/chapter-69-mushrooms2/Cargo.toml
+++ b/chapter-69-mushrooms2/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-70-missiles/Cargo.toml b/chapter-70-missiles/Cargo.toml
index 6f61ed60..5d4aef14 100644
--- a/chapter-70-missiles/Cargo.toml
+++ b/chapter-70-missiles/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-71-logging/Cargo.toml b/chapter-71-logging/Cargo.toml
index c0844646..6438cdd9 100644
--- a/chapter-71-logging/Cargo.toml
+++ b/chapter-71-logging/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-72-textlayers/Cargo.toml b/chapter-72-textlayers/Cargo.toml
index 8f785540..3ca883b6 100644
--- a/chapter-72-textlayers/Cargo.toml
+++ b/chapter-72-textlayers/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-73-systems/Cargo.toml b/chapter-73-systems/Cargo.toml
index a56db5e5..0b205f99 100644
--- a/chapter-73-systems/Cargo.toml
+++ b/chapter-73-systems/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-74-darkcity/Cargo.toml b/chapter-74-darkcity/Cargo.toml
index a77cfdcc..8ed1efe3 100644
--- a/chapter-74-darkcity/Cargo.toml
+++ b/chapter-74-darkcity/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"
diff --git a/chapter-75-darkplaza/Cargo.toml b/chapter-75-darkplaza/Cargo.toml
index 6467e59a..5fc6e325 100644
--- a/chapter-75-darkplaza/Cargo.toml
+++ b/chapter-75-darkplaza/Cargo.toml
@@ -7,7 +7,7 @@ edition = "2021"
 
 [dependencies]
 rltk = { version = "0.8.0", features = ["serde"] }
-specs = { version = "0.16.1", features = ["serde"] }
+specs = { version = "0.17", features = ["serde"] }
 specs-derive = "0.4.1"
 serde= { version = "^1.0.44", features = ["derive"] }
 serde_json = "^1.0.44"