git: bd1dbb9b69e5 - 2023Q2 - games/veloren-weekly: update to s20230510

From: Jan Beich <jbeich_at_FreeBSD.org>
Date: Thu, 11 May 2023 00:49:20 UTC
The branch 2023Q2 has been updated by jbeich:

URL: https://cgit.FreeBSD.org/ports/commit/?id=bd1dbb9b69e551c9b5c396a274e88b7087720db9

commit bd1dbb9b69e551c9b5c396a274e88b7087720db9
Author:     Jan Beich <jbeich@FreeBSD.org>
AuthorDate: 2023-05-10 10:31:17 +0000
Commit:     Jan Beich <jbeich@FreeBSD.org>
CommitDate: 2023-05-11 00:47:53 +0000

    games/veloren-weekly: update to s20230510
    
    Changes:        https://gitlab.com/veloren/veloren/-/compare/95a38ff8f...db860de51
    (cherry picked from commit 67be379c96cebf8ba57d89275e4bd04a94dc44b3)
---
 games/veloren-weekly/Makefile              |  11 +-
 games/veloren-weekly/Makefile.crates       |  32 +-
 games/veloren-weekly/distinfo              |  70 ++---
 games/veloren-weekly/files/patch-rust-1.69 | 475 +++++++++++++++++++++++++++++
 4 files changed, 511 insertions(+), 77 deletions(-)

diff --git a/games/veloren-weekly/Makefile b/games/veloren-weekly/Makefile
index b664a91c7169..81418cce6d90 100644
--- a/games/veloren-weekly/Makefile
+++ b/games/veloren-weekly/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	veloren
-PORTVERSION=	s20230506
+PORTVERSION=	s20230510
 CATEGORIES=	games wayland
 PKGNAMESUFFIX=	-weekly
 
@@ -24,7 +24,7 @@ RUN_DEPENDS=	${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-pl
 USES=		cargo xorg
 USE_XORG=	xcb
 USE_GITLAB=	yes
-GL_COMMIT=	95a38ff8f60d8895461971eb1266a5530cca8cce
+GL_COMMIT=	db860de51760d94e1f501390c5e1f472d89a8db7
 CARGO_ENV=	VELOREN_USERDATA_STRATEGY=system SHADERC_LIB_DIR="${LOCALBASE}/lib"
 PLIST_FILES=	bin/${PORTNAME}-server-cli \
 		bin/${PORTNAME}-voxygen \
@@ -60,6 +60,13 @@ post-patch:
 	@${REINPLACE_CMD} -e 's,/usr/share,${DATADIR:H},' \
 		${WRKSRC}/common/assets/src/lib.rs
 
+do-install:
+# XXX [workspace.dependencies] breaks rebuild in subdirs
+.for f in ${CARGO_INSTALL_PATH}
+	${INSTALL_PROGRAM} ${CARGO_TARGET_DIR}/*/*/${PORTNAME}-$f \
+		${STAGEDIR}${PREFIX}/bin
+.endfor
+
 post-install:
 	${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/*
 	(cd ${WRKSRC} && ${COPYTREE_SHARE} assets ${STAGEDIR}${DATADIR})
diff --git a/games/veloren-weekly/Makefile.crates b/games/veloren-weekly/Makefile.crates
index 79ea1bda2740..e174d26989ce 100644
--- a/games/veloren-weekly/Makefile.crates
+++ b/games/veloren-weekly/Makefile.crates
@@ -188,7 +188,6 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		enumset_derive-0.7.0 \
 		epaint-0.12.0 \
 		epi-0.12.0 \
-		errno-0.2.8 \
 		errno-0.3.1 \
 		errno-dragonfly-0.1.2 \
 		error-code-2.3.1 \
@@ -199,7 +198,7 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		fallible-iterator-0.2.0 \
 		fallible-streaming-iterator-0.1.9 \
 		fastrand-1.9.0 \
-		fd-lock-3.0.4 \
+		fd-lock-3.0.12 \
 		fdeflate-0.3.0 \
 		fehler-1.0.0 \
 		fehler-macros-1.0.0 \
@@ -283,7 +282,6 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		instant-0.1.12 \
 		intl_pluralrules-7.0.2 \
 		io-kit-sys-0.3.0 \
-		io-lifetimes-0.5.3 \
 		io-lifetimes-1.0.10 \
 		is-terminal-0.4.7 \
 		itertools-0.10.5 \
@@ -317,7 +315,6 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		libudev-sys-0.1.4 \
 		link-cplusplus-1.0.8 \
 		linked-hash-map-0.5.6 \
-		linux-raw-sys-0.0.42 \
 		linux-raw-sys-0.3.7 \
 		lock_api-0.3.4 \
 		lock_api-0.4.9 \
@@ -344,7 +341,7 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		miniz_oxide-0.6.2 \
 		miniz_oxide-0.7.1 \
 		mio-0.7.14 \
-		mio-0.8.2 \
+		mio-0.8.6 \
 		mio-misc-1.2.2 \
 		miow-0.3.7 \
 		mopa-0.2.2 \
@@ -372,7 +369,6 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		noise-0.7.0 \
 		nom-7.1.3 \
 		notify-5.1.0 \
-		ntapi-0.3.7 \
 		nu-ansi-term-0.46.0 \
 		num-0.2.1 \
 		num-0.4.0 \
@@ -412,10 +408,10 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		packed_simd_2-0.3.8 \
 		parking_lot-0.10.2 \
 		parking_lot-0.11.2 \
-		parking_lot-0.12.0 \
+		parking_lot-0.12.1 \
 		parking_lot_core-0.7.3 \
 		parking_lot_core-0.8.6 \
-		parking_lot_core-0.9.2 \
+		parking_lot_core-0.9.7 \
 		parse-zoneinfo-0.3.0 \
 		paste-1.0.12 \
 		peeking_take_while-0.1.2 \
@@ -499,7 +495,6 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		rmp-serde-1.1.1 \
 		rodio-0.15.0 \
 		ron-0.6.6 \
-		ron-0.7.1 \
 		ron-0.8.0 \
 		roots-0.0.6 \
 		rose_tree-0.2.0 \
@@ -511,7 +506,6 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		rustc-hash-1.1.0 \
 		rustc_version-0.2.3 \
 		rustc_version-0.4.0 \
-		rustix-0.33.7 \
 		rustix-0.37.19 \
 		rustls-0.19.1 \
 		rustls-0.20.8 \
@@ -527,6 +521,7 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		ryu-1.0.13 \
 		same-file-1.0.6 \
 		schannel-0.1.19 \
+		schnellru-0.2.1 \
 		scoped-tls-1.0.1 \
 		scopeguard-1.1.0 \
 		scratch-1.0.5 \
@@ -621,8 +616,8 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		tinytemplate-1.2.1 \
 		tinyvec-1.6.0 \
 		tinyvec_macros-0.1.1 \
-		tokio-1.20.0 \
-		tokio-macros-1.8.2 \
+		tokio-1.28.0 \
+		tokio-macros-2.1.0 \
 		tokio-rustls-0.22.0 \
 		tokio-stream-0.1.14 \
 		tokio-util-0.7.1 \
@@ -723,9 +718,7 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		window_clipboard-0.2.4 \
 		windows-0.37.0 \
 		windows-0.48.0 \
-		windows-sys-0.30.0 \
 		windows-sys-0.33.0 \
-		windows-sys-0.34.0 \
 		windows-sys-0.42.0 \
 		windows-sys-0.45.0 \
 		windows-sys-0.48.0 \
@@ -733,35 +726,25 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		windows-targets-0.48.0 \
 		windows_aarch64_gnullvm-0.42.2 \
 		windows_aarch64_gnullvm-0.48.0 \
-		windows_aarch64_msvc-0.30.0 \
 		windows_aarch64_msvc-0.33.0 \
-		windows_aarch64_msvc-0.34.0 \
 		windows_aarch64_msvc-0.37.0 \
 		windows_aarch64_msvc-0.42.2 \
 		windows_aarch64_msvc-0.48.0 \
-		windows_i686_gnu-0.30.0 \
 		windows_i686_gnu-0.33.0 \
-		windows_i686_gnu-0.34.0 \
 		windows_i686_gnu-0.37.0 \
 		windows_i686_gnu-0.42.2 \
 		windows_i686_gnu-0.48.0 \
-		windows_i686_msvc-0.30.0 \
 		windows_i686_msvc-0.33.0 \
-		windows_i686_msvc-0.34.0 \
 		windows_i686_msvc-0.37.0 \
 		windows_i686_msvc-0.42.2 \
 		windows_i686_msvc-0.48.0 \
-		windows_x86_64_gnu-0.30.0 \
 		windows_x86_64_gnu-0.33.0 \
-		windows_x86_64_gnu-0.34.0 \
 		windows_x86_64_gnu-0.37.0 \
 		windows_x86_64_gnu-0.42.2 \
 		windows_x86_64_gnu-0.48.0 \
 		windows_x86_64_gnullvm-0.42.2 \
 		windows_x86_64_gnullvm-0.48.0 \
-		windows_x86_64_msvc-0.30.0 \
 		windows_x86_64_msvc-0.33.0 \
-		windows_x86_64_msvc-0.34.0 \
 		windows_x86_64_msvc-0.37.0 \
 		windows_x86_64_msvc-0.42.2 \
 		windows_x86_64_msvc-0.48.0 \
@@ -787,6 +770,7 @@ CARGO_CRATES=	ab_glyph-0.2.21 \
 		yasna-0.5.2 \
 		wgpu-profiler@git+https://github.com/Imberflur/wgpu-profiler?tag=wgpu-0.8\#b156eb145bc223386ef344860d9b33b3c181650c \
 		tui@git+https://github.com/fdehau/tui-rs.git?branch=paragraph-scroll\#54b841fab6cfdb38e8dc1382176e965787964b4c \
+		ntapi@git+https://github.com/MSxDOS/ntapi.git?rev=9f56b149c9e25796739157c0fce3e0007a7de6eb\#9f56b149c9e25796739157c0fce3e0007a7de6eb \
 		fluent,fluent-bundle,fluent-syntax,intl-memoizer@git+https://github.com/juliancoffee/fluent-rs.git?branch=patched\#929cf9512de121cce9b4cbf1cb860cd3294a1cd9 \
 		auth-common,authc@git+https://gitlab.com/veloren/auth.git?rev=fb3dcbc4962b367253f8f2f92760ef44d2679c9a\#fb3dcbc4962b367253f8f2f92760ef44d2679c9a \
 		iced_core,iced_futures,iced_graphics,iced_native,iced_style,iced_winit@git+https://github.com/Imberflur/iced?tag=winit-0.25\#18a48a5eeefd2aa6e50f5dd0751ac2e94c88a9eb \
diff --git a/games/veloren-weekly/distinfo b/games/veloren-weekly/distinfo
index 4ee4c370400b..c6728814c361 100644
--- a/games/veloren-weekly/distinfo
+++ b/games/veloren-weekly/distinfo
@@ -1,4 +1,4 @@
-TIMESTAMP = 1683349940
+TIMESTAMP = 1683755570
 SHA256 (rust/crates/ab_glyph-0.2.21.crate) = 5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39
 SIZE (rust/crates/ab_glyph-0.2.21.crate) = 17764
 SHA256 (rust/crates/ab_glyph_rasterizer-0.1.8.crate) = c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046
@@ -379,8 +379,6 @@ SHA256 (rust/crates/epaint-0.12.0.crate) = 80e2db640801230bdda80629bc3a063927a46
 SIZE (rust/crates/epaint-0.12.0.crate) = 672262
 SHA256 (rust/crates/epi-0.12.0.crate) = 59c4f6cbede1fc8f836384f85295a59199a4825940abcc3a8a29cfe2e3c37583
 SIZE (rust/crates/epi-0.12.0.crate) = 6678
-SHA256 (rust/crates/errno-0.2.8.crate) = f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1
-SIZE (rust/crates/errno-0.2.8.crate) = 9276
 SHA256 (rust/crates/errno-0.3.1.crate) = 4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a
 SIZE (rust/crates/errno-0.3.1.crate) = 10348
 SHA256 (rust/crates/errno-dragonfly-0.1.2.crate) = aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf
@@ -401,8 +399,8 @@ SHA256 (rust/crates/fallible-streaming-iterator-0.1.9.crate) = 7360491ce676a36bf
 SIZE (rust/crates/fallible-streaming-iterator-0.1.9.crate) = 9249
 SHA256 (rust/crates/fastrand-1.9.0.crate) = e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be
 SIZE (rust/crates/fastrand-1.9.0.crate) = 11910
-SHA256 (rust/crates/fd-lock-3.0.4.crate) = 02ecad9808e0596f8956d14f7fa868f996290bd01c8d7329d6e5bc2bb76adf8f
-SIZE (rust/crates/fd-lock-3.0.4.crate) = 13381
+SHA256 (rust/crates/fd-lock-3.0.12.crate) = 39ae6b3d9530211fb3b12a95374b8b0823be812f53d09e18c5675c0146b09642
+SIZE (rust/crates/fd-lock-3.0.12.crate) = 13692
 SHA256 (rust/crates/fdeflate-0.3.0.crate) = d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10
 SIZE (rust/crates/fdeflate-0.3.0.crate) = 21790
 SHA256 (rust/crates/fehler-1.0.0.crate) = d5729fe49ba028cd550747b6e62cd3d841beccab5390aa398538c31a2d983635
@@ -569,8 +567,6 @@ SHA256 (rust/crates/intl_pluralrules-7.0.2.crate) = 078ea7b7c29a2b4df841a7f6ac87
 SIZE (rust/crates/intl_pluralrules-7.0.2.crate) = 9201
 SHA256 (rust/crates/io-kit-sys-0.3.0.crate) = 9b2d4429acc1deff0fbdece0325b4997bdb02b2c245ab7023fd5deca0f6348de
 SIZE (rust/crates/io-kit-sys-0.3.0.crate) = 38799
-SHA256 (rust/crates/io-lifetimes-0.5.3.crate) = ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6
-SIZE (rust/crates/io-lifetimes-0.5.3.crate) = 37540
 SHA256 (rust/crates/io-lifetimes-1.0.10.crate) = 9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220
 SIZE (rust/crates/io-lifetimes-1.0.10.crate) = 37294
 SHA256 (rust/crates/is-terminal-0.4.7.crate) = adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f
@@ -637,8 +633,6 @@ SHA256 (rust/crates/link-cplusplus-1.0.8.crate) = ecd207c9c713c34f95a097a5b029ac
 SIZE (rust/crates/link-cplusplus-1.0.8.crate) = 7674
 SHA256 (rust/crates/linked-hash-map-0.5.6.crate) = 0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f
 SIZE (rust/crates/linked-hash-map-0.5.6.crate) = 15049
-SHA256 (rust/crates/linux-raw-sys-0.0.42.crate) = 5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7
-SIZE (rust/crates/linux-raw-sys-0.0.42.crate) = 756837
 SHA256 (rust/crates/linux-raw-sys-0.3.7.crate) = ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f
 SIZE (rust/crates/linux-raw-sys-0.3.7.crate) = 1013423
 SHA256 (rust/crates/lock_api-0.3.4.crate) = c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75
@@ -691,8 +685,8 @@ SHA256 (rust/crates/miniz_oxide-0.7.1.crate) = e7810e0be55b428ada41041c41f32c9f1
 SIZE (rust/crates/miniz_oxide-0.7.1.crate) = 55194
 SHA256 (rust/crates/mio-0.7.14.crate) = 8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc
 SIZE (rust/crates/mio-0.7.14.crate) = 87429
-SHA256 (rust/crates/mio-0.8.2.crate) = 52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9
-SIZE (rust/crates/mio-0.8.2.crate) = 88272
+SHA256 (rust/crates/mio-0.8.6.crate) = 5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9
+SIZE (rust/crates/mio-0.8.6.crate) = 93658
 SHA256 (rust/crates/mio-misc-1.2.2.crate) = b47412f3a52115b936ff2a229b803498c7b4d332adeb87c2f1498c9da54c398c
 SIZE (rust/crates/mio-misc-1.2.2.crate) = 11898
 SHA256 (rust/crates/miow-0.3.7.crate) = b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21
@@ -747,8 +741,6 @@ SHA256 (rust/crates/nom-7.1.3.crate) = d273983c5a657a70a3e8f2a01329822f3b8c8172b
 SIZE (rust/crates/nom-7.1.3.crate) = 117570
 SHA256 (rust/crates/notify-5.1.0.crate) = 58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9
 SIZE (rust/crates/notify-5.1.0.crate) = 37269
-SHA256 (rust/crates/ntapi-0.3.7.crate) = c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f
-SIZE (rust/crates/ntapi-0.3.7.crate) = 126994
 SHA256 (rust/crates/nu-ansi-term-0.46.0.crate) = 77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84
 SIZE (rust/crates/nu-ansi-term-0.46.0.crate) = 24311
 SHA256 (rust/crates/num-0.2.1.crate) = b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36
@@ -827,14 +819,14 @@ SHA256 (rust/crates/parking_lot-0.10.2.crate) = d3a704eb390aafdc107b0e392f56a82b
 SIZE (rust/crates/parking_lot-0.10.2.crate) = 39536
 SHA256 (rust/crates/parking_lot-0.11.2.crate) = 7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99
 SIZE (rust/crates/parking_lot-0.11.2.crate) = 39869
-SHA256 (rust/crates/parking_lot-0.12.0.crate) = 87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58
-SIZE (rust/crates/parking_lot-0.12.0.crate) = 39761
+SHA256 (rust/crates/parking_lot-0.12.1.crate) = 3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f
+SIZE (rust/crates/parking_lot-0.12.1.crate) = 40967
 SHA256 (rust/crates/parking_lot_core-0.7.3.crate) = b93f386bb233083c799e6e642a9d73db98c24a5deeb95ffc85bf281255dffc98
 SIZE (rust/crates/parking_lot_core-0.7.3.crate) = 33855
 SHA256 (rust/crates/parking_lot_core-0.8.6.crate) = 60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc
 SIZE (rust/crates/parking_lot_core-0.8.6.crate) = 32567
-SHA256 (rust/crates/parking_lot_core-0.9.2.crate) = 995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37
-SIZE (rust/crates/parking_lot_core-0.9.2.crate) = 32254
+SHA256 (rust/crates/parking_lot_core-0.9.7.crate) = 9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521
+SIZE (rust/crates/parking_lot_core-0.9.7.crate) = 32412
 SHA256 (rust/crates/parse-zoneinfo-0.3.0.crate) = c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41
 SIZE (rust/crates/parse-zoneinfo-0.3.0.crate) = 76590
 SHA256 (rust/crates/paste-1.0.12.crate) = 9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79
@@ -1001,8 +993,6 @@ SHA256 (rust/crates/rodio-0.15.0.crate) = ec0939e9f626e6c6f1989adb6226a039c855ca
 SIZE (rust/crates/rodio-0.15.0.crate) = 7414161
 SHA256 (rust/crates/ron-0.6.6.crate) = 86018df177b1beef6c7c8ef949969c4f7cb9a9344181b92486b23c79995bdaa4
 SIZE (rust/crates/ron-0.6.6.crate) = 45107
-SHA256 (rust/crates/ron-0.7.1.crate) = 88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a
-SIZE (rust/crates/ron-0.7.1.crate) = 53572
 SHA256 (rust/crates/ron-0.8.0.crate) = 300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff
 SIZE (rust/crates/ron-0.8.0.crate) = 57013
 SHA256 (rust/crates/roots-0.0.6.crate) = 84348444bd7ad45729d0c49a4240d7cdc11c9d512c06c5ad1835c1ad4acda6db
@@ -1025,8 +1015,6 @@ SHA256 (rust/crates/rustc_version-0.2.3.crate) = 138e3e0acb6c9fb258b19b67cb8abd6
 SIZE (rust/crates/rustc_version-0.2.3.crate) = 10210
 SHA256 (rust/crates/rustc_version-0.4.0.crate) = bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366
 SIZE (rust/crates/rustc_version-0.4.0.crate) = 12175
-SHA256 (rust/crates/rustix-0.33.7.crate) = 938a344304321a9da4973b9ff4f9f8db9caf4597dfd9dda6a60b523340a0fff0
-SIZE (rust/crates/rustix-0.33.7.crate) = 268622
 SHA256 (rust/crates/rustix-0.37.19.crate) = acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d
 SIZE (rust/crates/rustix-0.37.19.crate) = 323809
 SHA256 (rust/crates/rustls-0.19.1.crate) = 35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7
@@ -1057,6 +1045,8 @@ SHA256 (rust/crates/same-file-1.0.6.crate) = 93fc1dc3aaa9bfed95e02e6eadabb4baf7e
 SIZE (rust/crates/same-file-1.0.6.crate) = 10183
 SHA256 (rust/crates/schannel-0.1.19.crate) = 8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75
 SIZE (rust/crates/schannel-0.1.19.crate) = 42755
+SHA256 (rust/crates/schnellru-0.2.1.crate) = 772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d
+SIZE (rust/crates/schnellru-0.2.1.crate) = 22458
 SHA256 (rust/crates/scoped-tls-1.0.1.crate) = e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294
 SIZE (rust/crates/scoped-tls-1.0.1.crate) = 8202
 SHA256 (rust/crates/scopeguard-1.1.0.crate) = d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd
@@ -1245,10 +1235,10 @@ SHA256 (rust/crates/tinyvec-1.6.0.crate) = 87cc5ceb3875bb20c2890005a4e226a465126
 SIZE (rust/crates/tinyvec-1.6.0.crate) = 45991
 SHA256 (rust/crates/tinyvec_macros-0.1.1.crate) = 1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20
 SIZE (rust/crates/tinyvec_macros-0.1.1.crate) = 5865
-SHA256 (rust/crates/tokio-1.20.0.crate) = 57aec3cfa4c296db7255446efb4928a6be304b431a806216105542a67b6ca82e
-SIZE (rust/crates/tokio-1.20.0.crate) = 589938
-SHA256 (rust/crates/tokio-macros-1.8.2.crate) = d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8
-SIZE (rust/crates/tokio-macros-1.8.2.crate) = 10071
+SHA256 (rust/crates/tokio-1.28.0.crate) = c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f
+SIZE (rust/crates/tokio-1.28.0.crate) = 660469
+SHA256 (rust/crates/tokio-macros-2.1.0.crate) = 630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e
+SIZE (rust/crates/tokio-macros-2.1.0.crate) = 11472
 SHA256 (rust/crates/tokio-rustls-0.22.0.crate) = bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6
 SIZE (rust/crates/tokio-rustls-0.22.0.crate) = 22706
 SHA256 (rust/crates/tokio-stream-0.1.14.crate) = 397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842
@@ -1449,12 +1439,8 @@ SHA256 (rust/crates/windows-0.37.0.crate) = 57b543186b344cc61c85b5aab0d2e3adf4e0
 SIZE (rust/crates/windows-0.37.0.crate) = 14060820
 SHA256 (rust/crates/windows-0.48.0.crate) = e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f
 SIZE (rust/crates/windows-0.48.0.crate) = 11864177
-SHA256 (rust/crates/windows-sys-0.30.0.crate) = 030b7ff91626e57a05ca64a07c481973cbb2db774e4852c9c7ca342408c6a99a
-SIZE (rust/crates/windows-sys-0.30.0.crate) = 3256610
 SHA256 (rust/crates/windows-sys-0.33.0.crate) = 43dbb096663629518eb1dfa72d80243ca5a6aca764cae62a2df70af760a9be75
 SIZE (rust/crates/windows-sys-0.33.0.crate) = 3355291
-SHA256 (rust/crates/windows-sys-0.34.0.crate) = 5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825
-SIZE (rust/crates/windows-sys-0.34.0.crate) = 3369228
 SHA256 (rust/crates/windows-sys-0.42.0.crate) = 5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7
 SIZE (rust/crates/windows-sys-0.42.0.crate) = 3006791
 SHA256 (rust/crates/windows-sys-0.45.0.crate) = 75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0
@@ -1469,48 +1455,32 @@ SHA256 (rust/crates/windows_aarch64_gnullvm-0.42.2.crate) = 597a5118570b68bc08d8
 SIZE (rust/crates/windows_aarch64_gnullvm-0.42.2.crate) = 364071
 SHA256 (rust/crates/windows_aarch64_gnullvm-0.48.0.crate) = 91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc
 SIZE (rust/crates/windows_aarch64_gnullvm-0.48.0.crate) = 366543
-SHA256 (rust/crates/windows_aarch64_msvc-0.30.0.crate) = 29277a4435d642f775f63c7d1faeb927adba532886ce0287bd985bffb16b6bca
-SIZE (rust/crates/windows_aarch64_msvc-0.30.0.crate) = 669666
 SHA256 (rust/crates/windows_aarch64_msvc-0.33.0.crate) = cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807
 SIZE (rust/crates/windows_aarch64_msvc-0.33.0.crate) = 674447
-SHA256 (rust/crates/windows_aarch64_msvc-0.34.0.crate) = 17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d
-SIZE (rust/crates/windows_aarch64_msvc-0.34.0.crate) = 674445
 SHA256 (rust/crates/windows_aarch64_msvc-0.37.0.crate) = 2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a
 SIZE (rust/crates/windows_aarch64_msvc-0.37.0.crate) = 661960
 SHA256 (rust/crates/windows_aarch64_msvc-0.42.2.crate) = e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43
 SIZE (rust/crates/windows_aarch64_msvc-0.42.2.crate) = 666981
 SHA256 (rust/crates/windows_aarch64_msvc-0.48.0.crate) = b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3
 SIZE (rust/crates/windows_aarch64_msvc-0.48.0.crate) = 671479
-SHA256 (rust/crates/windows_i686_gnu-0.30.0.crate) = 1145e1989da93956c68d1864f32fb97c8f561a8f89a5125f6a2b7ea75524e4b8
-SIZE (rust/crates/windows_i686_gnu-0.30.0.crate) = 774464
 SHA256 (rust/crates/windows_i686_gnu-0.33.0.crate) = cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e
 SIZE (rust/crates/windows_i686_gnu-0.33.0.crate) = 772346
-SHA256 (rust/crates/windows_i686_gnu-0.34.0.crate) = 2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed
-SIZE (rust/crates/windows_i686_gnu-0.34.0.crate) = 772343
 SHA256 (rust/crates/windows_i686_gnu-0.37.0.crate) = d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1
 SIZE (rust/crates/windows_i686_gnu-0.37.0.crate) = 818111
 SHA256 (rust/crates/windows_i686_gnu-0.42.2.crate) = c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f
 SIZE (rust/crates/windows_i686_gnu-0.42.2.crate) = 736236
 SHA256 (rust/crates/windows_i686_gnu-0.48.0.crate) = 622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241
 SIZE (rust/crates/windows_i686_gnu-0.48.0.crate) = 741490
-SHA256 (rust/crates/windows_i686_msvc-0.30.0.crate) = d4a09e3a0d4753b73019db171c1339cd4362c8c44baf1bcea336235e955954a6
-SIZE (rust/crates/windows_i686_msvc-0.30.0.crate) = 732295
 SHA256 (rust/crates/windows_i686_msvc-0.33.0.crate) = 8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0
 SIZE (rust/crates/windows_i686_msvc-0.33.0.crate) = 733499
-SHA256 (rust/crates/windows_i686_msvc-0.34.0.crate) = 9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956
-SIZE (rust/crates/windows_i686_msvc-0.34.0.crate) = 733497
 SHA256 (rust/crates/windows_i686_msvc-0.37.0.crate) = ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c
 SIZE (rust/crates/windows_i686_msvc-0.37.0.crate) = 724577
 SHA256 (rust/crates/windows_i686_msvc-0.42.2.crate) = 44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060
 SIZE (rust/crates/windows_i686_msvc-0.42.2.crate) = 724951
 SHA256 (rust/crates/windows_i686_msvc-0.48.0.crate) = 4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00
 SIZE (rust/crates/windows_i686_msvc-0.48.0.crate) = 730056
-SHA256 (rust/crates/windows_x86_64_gnu-0.30.0.crate) = 8ca64fcb0220d58db4c119e050e7af03c69e6f4f415ef69ec1773d9aab422d5a
-SIZE (rust/crates/windows_x86_64_gnu-0.30.0.crate) = 743236
 SHA256 (rust/crates/windows_x86_64_gnu-0.33.0.crate) = b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784
 SIZE (rust/crates/windows_x86_64_gnu-0.33.0.crate) = 744302
-SHA256 (rust/crates/windows_x86_64_gnu-0.34.0.crate) = cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4
-SIZE (rust/crates/windows_x86_64_gnu-0.34.0.crate) = 744301
 SHA256 (rust/crates/windows_x86_64_gnu-0.37.0.crate) = 2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d
 SIZE (rust/crates/windows_x86_64_gnu-0.37.0.crate) = 790933
 SHA256 (rust/crates/windows_x86_64_gnu-0.42.2.crate) = 8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36
@@ -1521,12 +1491,8 @@ SHA256 (rust/crates/windows_x86_64_gnullvm-0.42.2.crate) = 26d41b46a36d453748aed
 SIZE (rust/crates/windows_x86_64_gnullvm-0.42.2.crate) = 364068
 SHA256 (rust/crates/windows_x86_64_gnullvm-0.48.0.crate) = 7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953
 SIZE (rust/crates/windows_x86_64_gnullvm-0.48.0.crate) = 366536
-SHA256 (rust/crates/windows_x86_64_msvc-0.30.0.crate) = 08cabc9f0066848fef4bc6a1c1668e6efce38b661d2aeec75d18d8617eebb5f1
-SIZE (rust/crates/windows_x86_64_msvc-0.30.0.crate) = 668972
 SHA256 (rust/crates/windows_x86_64_msvc-0.33.0.crate) = ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa
 SIZE (rust/crates/windows_x86_64_msvc-0.33.0.crate) = 669901
-SHA256 (rust/crates/windows_x86_64_msvc-0.34.0.crate) = d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9
-SIZE (rust/crates/windows_x86_64_msvc-0.34.0.crate) = 669900
 SHA256 (rust/crates/windows_x86_64_msvc-0.37.0.crate) = f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d
 SIZE (rust/crates/windows_x86_64_msvc-0.37.0.crate) = 661993
 SHA256 (rust/crates/windows_x86_64_msvc-0.42.2.crate) = 9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0
@@ -1577,6 +1543,8 @@ SHA256 (Imberflur-wgpu-profiler-wgpu-0.8_GH0.tar.gz) = e30fa6d177db9c77c8f938a0b
 SIZE (Imberflur-wgpu-profiler-wgpu-0.8_GH0.tar.gz) = 14759
 SHA256 (fdehau-tui-rs-54b841fab6cfdb38e8dc1382176e965787964b4c_GH0.tar.gz) = 920e26b3816975b77f9111206aec5859560141e222bef2d539c05894798ac4ba
 SIZE (fdehau-tui-rs-54b841fab6cfdb38e8dc1382176e965787964b4c_GH0.tar.gz) = 1531288
+SHA256 (MSxDOS-ntapi-9f56b149c9e25796739157c0fce3e0007a7de6eb_GH0.tar.gz) = 8fb5cffa8c7196189f5cf4483275c803598620cc6e03fdc875102f7fa3986767
+SIZE (MSxDOS-ntapi-9f56b149c9e25796739157c0fce3e0007a7de6eb_GH0.tar.gz) = 186924
 SHA256 (juliancoffee-fluent-rs-929cf9512de121cce9b4cbf1cb860cd3294a1cd9_GH0.tar.gz) = b1666caeb396b844788a732346e8ab6e555190978efe7a6386469040959acebf
 SIZE (juliancoffee-fluent-rs-929cf9512de121cce9b4cbf1cb860cd3294a1cd9_GH0.tar.gz) = 351345
 SHA256 (veloren-auth-fb3dcbc4962b367253f8f2f92760ef44d2679c9a_GL0.tar.gz) = b2d4945ddb39ad719985b189fb720350ab86df94332f362a0e4477d7a2a774a3
@@ -1597,5 +1565,5 @@ SHA256 (hasenbanck-egui_wgpu_backend-63a002c6a9b6c016e45806dd065864431caab621_GH
 SIZE (hasenbanck-egui_wgpu_backend-63a002c6a9b6c016e45806dd065864431caab621_GH0.tar.gz) = 11500
 SHA256 (yoanlcq-vek-84d5cb65841d46599a986c5477341bea4456be26_GH0.tar.gz) = f6fc0b8e9b1290729ea94865be84a8c47846e49e3c193dab700940e1452d2fed
 SIZE (yoanlcq-vek-84d5cb65841d46599a986c5477341bea4456be26_GH0.tar.gz) = 90485
-SHA256 (veloren-veloren-95a38ff8f60d8895461971eb1266a5530cca8cce_GL0.tar.gz) = 37a2cd42a300c8c0f3fe4a794cb18d2c3c86114c53d0f3a0c50ae038092c59ba
-SIZE (veloren-veloren-95a38ff8f60d8895461971eb1266a5530cca8cce_GL0.tar.gz) = 263353066
+SHA256 (veloren-veloren-db860de51760d94e1f501390c5e1f472d89a8db7_GL0.tar.gz) = f26615339514f26bdd85d643266a3f4eb5f627d1c15931f70fe3f4d053a86b6f
+SIZE (veloren-veloren-db860de51760d94e1f501390c5e1f472d89a8db7_GL0.tar.gz) = 263372562
diff --git a/games/veloren-weekly/files/patch-rust-1.69 b/games/veloren-weekly/files/patch-rust-1.69
new file mode 100644
index 000000000000..a1778a37bea3
--- /dev/null
+++ b/games/veloren-weekly/files/patch-rust-1.69
@@ -0,0 +1,475 @@
+Revert https://gitlab.com/veloren/veloren/-/commit/95bca5418af7
+until lang/rust >= 1.70 update e.g.,
+
+https://github.com/rust-lang/rust/commit/8a7ca936e61d
+
+error[E0658]: use of unstable library feature 'once_cell'
+   --> voxygen/src/scene/terrain.rs:620:20
+    |
+620 |         let init = core::cell::OnceCell::new();
+    |                    ^^^^^^^^^^^^^^^^^^^^
+    |
+    = note: see issue #74465 <https://github.com/rust-lang/rust/issues/74465> for more information
+    = help: add `#![feature(once_cell)]` to the crate attributes to enable
+
+error[E0658]: use of unstable library feature 'once_cell'
+   --> voxygen/src/scene/terrain.rs:620:20
+    |
+620 |         let init = core::cell::OnceCell::new();
+    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^
+    |
+    = note: see issue #74465 <https://github.com/rust-lang/rust/issues/74465> for more information
+    = help: add `#![feature(once_cell)]` to the crate attributes to enable
+
+error[E0658]: use of unstable library feature 'once_cell'
+   --> voxygen/src/scene/terrain.rs:656:39
+    |
+656 |         Box::new(move |renderer| init.get_or_init(|| closure(renderer)).clone())
+    |                                       ^^^^^^^^^^^
+    |
+    = note: see issue #74465 <https://github.com/rust-lang/rust/issues/74465> for more information
+    = help: add `#![feature(once_cell)]` to the crate attributes to enable
+
+diff --git client/src/bin/bot/main.rs client/src/bin/bot/main.rs
+index ca7298d81b7e..f1c31e449b71 100644
+--- client/src/bin/bot/main.rs
++++ client/src/bin/bot/main.rs
+@@ -117,6 +117,7 @@ impl BotClient {
+     pub fn handle_register(&mut self, prefix: &str, password: &str, count: Option<usize>) {
+         let usernames = match count {
+             Some(n) => (0..n)
++                .into_iter()
+                 .map(|i| format!("{}{:03}", prefix, i))
+                 .collect::<Vec<String>>(),
+             None => vec![prefix.to_string()],
+diff --git common/src/comp/agent.rs common/src/comp/agent.rs
+index 6fd73d380dae..39f9d232052e 100644
+--- common/src/comp/agent.rs
++++ common/src/comp/agent.rs
+@@ -503,7 +503,7 @@ impl Timer {
+     /// Reset the timer for the given action, returning true if the timer was
+     /// not already reset.
+     pub fn reset(&mut self, action: TimerAction) -> bool {
+-        self.action_starts[Self::idx_for(action)].take().is_some()
++        std::mem::replace(&mut self.action_starts[Self::idx_for(action)], None).is_some()
+     }
+ 
+     /// Start the timer for the given action, even if it was already started.
+diff --git common/src/comp/inventory/item/mod.rs common/src/comp/inventory/item/mod.rs
+index 2716aac923e3..06c9a49a21bf 100644
+--- common/src/comp/inventory/item/mod.rs
++++ common/src/comp/inventory/item/mod.rs
+@@ -330,7 +330,7 @@ impl ItemKind {
+     // Used for inventory sorting, what comes before the first colon (:) is used as
+     // a broader category
+     pub fn get_itemkind_string(&self) -> String {
+-        match self {
++        let result = match self {
+             // Using tool and toolkind to sort tools by kind
+             ItemKind::Tool(tool) => format!("Tool: {:?}", tool.kind),
+             ItemKind::ModularComponent(modular_component) => {
+@@ -346,7 +346,8 @@ impl ItemKind {
+             ItemKind::Utility { kind } => format!("Utility: {:?}", kind),
+             ItemKind::Ingredient { descriptor } => format!("Ingredient: {}", descriptor),
+             ItemKind::TagExamples { item_ids } => format!("TagExamples: {:?}", item_ids),
+-        }
++        };
++        result
+     }
+ 
+     pub fn has_durability(&self) -> bool {
+diff --git common/src/comp/skillset/mod.rs common/src/comp/skillset/mod.rs
+index 6b14321b5e65..21bb5ebda3fd 100644
+--- common/src/comp/skillset/mod.rs
++++ common/src/comp/skillset/mod.rs
+@@ -81,6 +81,7 @@ lazy_static! {
+                     .map(|skill| {
+                         let max_level = skill.max_level();
+                         (1..=max_level)
++                            .into_iter()
+                             .map(|level| skill.skill_cost(level))
+                             .sum::<u16>()
+                     })
+diff --git common/src/skillset_builder.rs common/src/skillset_builder.rs
+index d330f2c834b7..f3df4511f1aa 100644
+--- common/src/skillset_builder.rs
++++ common/src/skillset_builder.rs
+@@ -112,7 +112,8 @@ impl SkillSetBuilder {
+     pub fn with_skill(mut self, skill: Skill, level: u16) -> Self {
+         let Some(group) = skill.skill_group_kind() else {
+             let err = format!(
+-                "Tried to add skill: {skill:?} which does not have an associated skill group."
++                "Tried to add skill: {:?} which does not have an associated skill group.",
++                skill
+             );
+             common_base::dev_panic!(err, or return self);
+         };
+@@ -120,7 +121,8 @@ impl SkillSetBuilder {
+         let SkillSetBuilder(ref mut skill_set) = self;
+         if skill_is_applied(skill_set, skill, level) {
+             let err = format!(
+-                "Tried to add skill: {skill:?} with level {level:?} which is already applied"
++                "Tried to add skill: {:?} with level {:?} which is already applied",
++                skill, level,
+             );
+             common_base::dev_panic!(err, or return self);
+         }
+@@ -133,8 +135,9 @@ impl SkillSetBuilder {
+         }
+         if !skill_is_applied(skill_set, skill, level) {
+             let err = format!(
+-                "Failed to add skill: {skill:?}. Verify that it has the appropriate skill group \
+-                 available and meets all prerequisite skills."
++                "Failed to add skill: {:?}. Verify that it has the appropriate skill group \
++                 available and meets all prerequisite skills.",
++                skill
+             );
+             common_base::dev_panic!(err);
+         }
+diff --git common/src/terrain/biome.rs common/src/terrain/biome.rs
+index c40956863fb0..8b6c83c8b4b3 100644
+--- common/src/terrain/biome.rs
++++ common/src/terrain/biome.rs
+@@ -1,9 +1,8 @@
+ use serde::{Deserialize, Serialize};
+ use strum::EnumIter;
+ 
+-#[derive(Default, Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, EnumIter)]
++#[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, EnumIter)]
+ pub enum BiomeKind {
+-    #[default]
+     Void,
+     Lake,
+     Grassland,
+@@ -17,3 +16,7 @@ pub enum BiomeKind {
+     Savannah,
+     Taiga,
+ }
++
++impl Default for BiomeKind {
++    fn default() -> BiomeKind { BiomeKind::Void }
++}
+diff --git common/src/terrain/site.rs common/src/terrain/site.rs
+index 8358daaf2d24..fdcee627fd8c 100644
+--- common/src/terrain/site.rs
++++ common/src/terrain/site.rs
+@@ -1,12 +1,11 @@
+ use serde::{Deserialize, Serialize};
+ 
+-#[derive(Default, Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq)]
++#[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq)]
+ pub enum SiteKindMeta {
+     Dungeon(DungeonKindMeta),
+     Cave,
+     Settlement(SettlementKindMeta),
+     Castle,
+-    #[default]
+     Void,
+ }
+ 
+@@ -23,3 +22,7 @@ pub enum SettlementKindMeta {
+     DesertCity,
+     SavannahPit,
+ }
++
++impl Default for SiteKindMeta {
++    fn default() -> SiteKindMeta { SiteKindMeta::Void }
++}
+diff --git common/src/typed.rs common/src/typed.rs
+index 752c8d908dcf..ea7d97f66a19 100644
+--- common/src/typed.rs
++++ common/src/typed.rs
+@@ -321,7 +321,7 @@ macro_rules! make_case_elim {
+                 elim.reduce(((self,), context))
+             }
+ 
+-            pub fn elim_case_pure<'a, Type>(&self, cases: &'a $mod::PureCases<Type>) -> &'a Type
++            pub fn elim_case_pure<'a, 'b, Type>(&'a self, cases: &'b $mod::PureCases<Type>) -> &'b Type
+             {
+                 let (expr, ()) = self.elim(cases, ());
+                 expr
+@@ -425,7 +425,7 @@ macro_rules! make_proj_elim {
+                 elim.reduce(((self,), context))
+             }
+ 
+-            pub fn elim_proj_pure<'a, Type>(&self, cases: &'a $mod::PureProj<Type>) -> &'a Type
++            pub fn elim_proj_pure<'a, 'b, Type>(&'a self, cases: &'b $mod::PureProj<Type>) -> &'b Type
+             {
+                 let (expr, ()) = self.elim(cases, ());
+                 expr
+diff --git rust-toolchain rust-toolchain
+index b27a258d1a80..c7c621708744 100644
+--- rust-toolchain
++++ rust-toolchain
+@@ -1 +1 @@
+-nightly-2023-04-20
++nightly-2022-11-28
+diff --git server/src/events/inventory_manip.rs server/src/events/inventory_manip.rs
+index f86f23d31fba..bb62a7ba0305 100644
+--- server/src/events/inventory_manip.rs
++++ server/src/events/inventory_manip.rs
+@@ -786,6 +786,7 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv
+                     })
+                     .and_then(|r| {
+                         let items = (0..amount)
++                            .into_iter()
+                             .filter_map(|_| {
+                                 r.craft_simple(
+                                     &mut inventory,
+diff --git server/src/sys/chunk_serialize.rs server/src/sys/chunk_serialize.rs
+index 4226ea0429f3..0810aa9951a9 100644
+--- server/src/sys/chunk_serialize.rs
++++ server/src/sys/chunk_serialize.rs
+@@ -110,6 +110,7 @@ impl<'a> System<'a> for Sys {
+                     .get_key_arc_real(chunk_key)
+                     .map(|chunk| (Arc::clone(chunk), chunk_key, meta))
+             })
++            .into_iter()
+             .peekable();
+ 
+         while chunks_iter.peek().is_some() {
+diff --git voxygen/src/lib.rs voxygen/src/lib.rs
+index bee0a875709e..ccb5eb34d3e5 100644
+--- voxygen/src/lib.rs
++++ voxygen/src/lib.rs
+@@ -6,6 +6,7 @@
+     array_methods,
+     array_zip,
+     drain_filter,
++    once_cell,
+     trait_alias,
+     option_get_or_insert_default,
+     map_try_insert,
+diff --git voxygen/src/render/mod.rs voxygen/src/render/mod.rs
+index 9764930c0cc2..d77cf8806a5b 100644
+--- voxygen/src/render/mod.rs
++++ voxygen/src/render/mod.rs
+@@ -70,13 +70,12 @@ pub trait Vertex: Clone + bytemuck::Pod {
+ 
+ use serde::{Deserialize, Serialize};
+ /// Anti-aliasing modes
+-#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
++#[derive(PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
+ pub enum AaMode {
+     /// Fast approximate antialiasing.
+     ///
+     /// This is a screen-space technique, and therefore works fine with greedy
+     /// meshing.
+-    #[default]
+     Fxaa,
+     /// Multisampling AA, up to 4 samples per pixel.
+     ///
+@@ -122,8 +121,12 @@ impl AaMode {
+     }
+ }
+ 
++impl Default for AaMode {
++    fn default() -> Self { AaMode::Fxaa }
++}
++
+ /// Cloud modes
+-#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
++#[derive(PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
+ pub enum CloudMode {
+     /// No clouds. As cheap as it gets.
+     None,
+@@ -141,7 +144,6 @@ pub enum CloudMode {
+     Ultra,
+     /// Lots of detail with good-but-costly derivation of parameters.
+     #[serde(other)]
+-    #[default]
+     High,
+ }
+ 
+@@ -149,8 +151,12 @@ impl CloudMode {
+     pub fn is_enabled(&self) -> bool { *self != CloudMode::None }
+ }
+ 
++impl Default for CloudMode {
++    fn default() -> Self { CloudMode::High }
++}
++
+ /// Fluid modes
+-#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
++#[derive(PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
+ pub enum FluidMode {
+     /// "Low" water.  This water implements no waves, no reflections, no
+     /// diffraction, and no light attenuation through water.  As a result,
+@@ -174,26 +180,32 @@ pub enum FluidMode {
+     /// which causes attenuation to be computed incorrectly; this can be
+     /// addressed by using shadow maps (at least for terrain).
+     #[serde(other)]
+-    #[default]
+     Medium,
+ }
+ 
++impl Default for FluidMode {
++    fn default() -> Self { FluidMode::Medium }
++}
++
+ /// Reflection modes
+-#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
++#[derive(PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
+ pub enum ReflectionMode {
+     /// No or minimal reflections.
+     Low,
+     /// High quality reflections with screen-space raycasting and
+     /// all the bells & whistles.
+-    #[default]
+     High,
+     // Medium quality screen-space reflections.
+     #[serde(other)]
+     Medium,
+ }
+ 
++impl Default for ReflectionMode {
++    fn default() -> Self { ReflectionMode::High }
++}
++
+ /// Lighting modes
+-#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
++#[derive(PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
+ pub enum LightingMode {
+     /// Ashikhmin-Shirley BRDF lighting model.  Attempts to generate a
+     /// physically plausible (to some extent) lighting distribution.
+@@ -210,10 +222,13 @@ pub enum LightingMode {
+     /// Standard Blinn-Phong shading, combing Lambertian diffuse reflections and
+     /// specular highlights.
+     #[serde(other)]
+-    #[default]
+     BlinnPhong,
+ }
+ 
++impl Default for LightingMode {
++    fn default() -> Self { LightingMode::BlinnPhong }
++}
++
+ /// Shadow map settings.
+ #[derive(PartialEq, Clone, Copy, Debug, Serialize, Deserialize)]
+ pub struct ShadowMapMode {
+@@ -299,7 +314,7 @@ impl From<PresentMode> for wgpu::PresentMode {
+ 
+ /// Bloom factor
+ /// Controls fraction of output image luminosity that is blurred bloom
+-#[derive(Default, PartialEq, Clone, Copy, Debug, Serialize, Deserialize)]
++#[derive(PartialEq, Clone, Copy, Debug, Serialize, Deserialize)]
+ pub enum BloomFactor {
+     Low,
+     High,
+@@ -307,10 +322,13 @@ pub enum BloomFactor {
+     Custom(f32),
+     // other variant has to be placed last
+     #[serde(other)]
+-    #[default]
+     Medium,
+ }
+ 
++impl Default for BloomFactor {
++    fn default() -> Self { Self::Medium }
++}
++
+ impl BloomFactor {
+     /// Fraction of output image luminosity that is blurred bloom
+     pub fn fraction(self) -> f32 {
+diff --git voxygen/src/window.rs voxygen/src/window.rs
+index 0713ad4a0eaf..fd1e62ae04fe 100644
+--- voxygen/src/window.rs
++++ voxygen/src/window.rs
+@@ -1359,14 +1359,16 @@ impl Window {
+     pub fn scale_factor(&self) -> f64 { self.scale_factor }
+ }
+ 
+-#[derive(Default, Copy, Clone, Hash, Eq, PartialEq, Debug, Serialize, Deserialize)]
++#[derive(Copy, Clone, Hash, Eq, PartialEq, Debug, Serialize, Deserialize)]
+ pub enum FullscreenMode {
+     Exclusive,
+     #[serde(other)]
+-    #[default]
+     Borderless,
+ }
+ 
++impl Default for FullscreenMode {
++    fn default() -> Self { FullscreenMode::Borderless }
++}
+ #[derive(PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)]
+ #[serde(default)]
+ pub struct FullScreenSettings {
+diff --git world/examples/chunk_compression_benchmarks.rs world/examples/chunk_compression_benchmarks.rs
+index 46727195b953..5cf915701c89 100644
+--- world/examples/chunk_compression_benchmarks.rs
++++ world/examples/chunk_compression_benchmarks.rs
+@@ -1190,7 +1190,10 @@ fn main() {
+                 if !SKIP_VOLGRID {
+                     let _ = volgrid.insert(spiralpos, Arc::new(chunk));
+ 
+-                    if (1usize..20).any(|i| (2 * i + 1) * (2 * i + 1) == count) {
++                    if (1usize..20)
++                        .into_iter()
++                        .any(|i| (2 * i + 1) * (2 * i + 1) == count)
++                    {
+                         use std::fs::File;
+                         let mut f = File::create(&format!("chonkjpegs/{}_{}.jpg", sitename, count))
+                             .unwrap();
+diff --git world/examples/world_block_statistics.rs world/examples/world_block_statistics.rs
+index a0bf81309fbe..bd478b75dd82 100644
+--- world/examples/world_block_statistics.rs
++++ world/examples/world_block_statistics.rs
+@@ -85,9 +85,12 @@ fn generate(db_path: &str, ymin: Option<i32>, ymax: Option<i32>) -> Result<(), B
+     let (tx, rx) = mpsc::channel();
+     rayon::spawn(move || {
+         let coords: Vec<_> = (ymin.unwrap_or(1)..ymax.unwrap_or(sz.y as i32))
++            .into_iter()
+             .flat_map(move |y| {
+                 let tx = tx.clone();
+-                (1..sz.x as i32).map(move |x| (tx.clone(), x, y))
++                (1..sz.x as i32)
++                    .into_iter()
++                    .map(move |x| (tx.clone(), x, y))
+             })
+             .collect();
+         coords.into_par_iter().for_each(|(tx, x, y)| {
+diff --git world/src/sim/util.rs world/src/sim/util.rs
+index f94d584b2f0c..bc7d49a4a684 100644
+--- world/src/sim/util.rs
++++ world/src/sim/util.rs
+@@ -218,6 +218,7 @@ pub fn local_cells(map_size_lg: MapSizeLg, posi: usize) -> impl Clone + Iterator
+     let grid_size = 3i32;
+     let grid_bounds = 2 * grid_size + 1;
+     (0..grid_bounds * grid_bounds)
++        .into_iter()
+         .map(move |index| {
+             Vec2::new(
+                 pos.x + (index % grid_bounds) - grid_size,
+diff --git world/src/site2/plot/dungeon.rs world/src/site2/plot/dungeon.rs
+index 1b092edcc926..b44b9df3f89f 100644
+--- world/src/site2/plot/dungeon.rs
++++ world/src/site2/plot/dungeon.rs
+@@ -948,7 +948,7 @@ pub fn inscribed_polystar(
+         use std::f32::consts::TAU;
+         let rpos: Vec2<f32> = pos.xy().as_() - origin.as_();
+         let is_border = rpos.magnitude_squared() > (radius - 2.0).powi(2);
+-        let is_line = (0..sides).any(|i| {
++        let is_line = (0..sides).into_iter().any(|i| {
+             let f = |j: f32| {
+                 let t = j * TAU / sides as f32;
+                 radius * Vec2::new(t.cos(), t.sin())
+diff --git world/src/site2/plot/gnarling.rs world/src/site2/plot/gnarling.rs
+index 837390d8c6d5..9606622410ab 100644
+--- world/src/site2/plot/gnarling.rs
++++ world/src/site2/plot/gnarling.rs
+@@ -112,6 +112,7 @@ impl GnarlingFortification {
+ 
+         let num_points = (wall_radius / 15).max(5);
+         let outer_wall_corners = (0..num_points)
++            .into_iter()
+             .map(|a| {
+                 let angle = a as f32 / num_points as f32 * core::f32::consts::TAU;
+                 Vec2::new(angle.cos(), angle.sin()).map(|a| (a * wall_radius as f32) as i32)
+@@ -447,6 +448,7 @@ impl Structure for GnarlingFortification {
+             const SECTIONS_PER_WALL_SEGMENT: usize = 8;
+ 
+             (0..(SECTIONS_PER_WALL_SEGMENT as i32))
++                .into_iter()
+                 .map(move |a| {
+                     let get_point =
+                         |a| point + (next_point - point) * a / (SECTIONS_PER_WALL_SEGMENT as i32);