in Engine, Tools

Rust GameDev: This Month in Rust GameDev #50 – April 2024

From Rust GameDev: link to original post

Welcome to the 50th issue of the Rust GameDev Workgroup’s monthly newsletter. Rust is a systems language pursuing the trifecta: safety, concurrency, and speed. These goals are well-aligned with game development. We hope to build an inviting ecosystem for anyone wishing to use Rust in their development process! Want to get involved? Join the Rust GameDev working group!

You can follow the newsletter creation process by watching the coordination issues. Want something mentioned in the next newsletter? Send us a pull request. Feel free to send PRs about your own projects!

Announcements 

Please fill out this survey before skipping this section! More info below!

Hey everyone, it’s been a while! As you’ve certainly noticed, the newsletter has been on hiatus for a while. The reason was mostly maintainer burnout, which is also why the newsletter of August 2023 was not published until a few days ago.

We’re back now though! A couple of community members, Jan Hohenheim (@janhohenheim) and Thierry Berger (@Vrixyz), have led the revival of the newsletter. This includes making changes requested by the community, and improving sustainability for the long term.

You can read more about the changes being made in this blog post.

Community Survey 

This restructuring is also a good time to improve the content of the newsletter. We’ve got some community feedback on the Rust GameDev Discord already and would like to hear more from you. It would be great if you could fill out this survey to let us know how we can improve the newsletter going forward. The survey closes on the 28th of May. We will be evaluating the survey results in an upcoming blog post, so stay tuned for that.

That’s all for now. Have fun reading!

Game Updates 

Way of Rhea 

Way of Rhea

Way of Rhea just got a release date: it will be coming to Steam on May 20th, 2024!

Way of Rhea (Steam) is a color-based puzzle game with difficult puzzles, but forgiving mechanics being developed by @masonremaley in a custom Rust engine.

You can support development by wishlisting Way of Rhea on Steam, or signing up for the mailing list.

Recently, a closed beta began. All characters now have voices, and various speedrunning features were added. Older CPUs are now supported. Secrets were made harder, and an in-game achievement UI was created.

For the full changelog, see the release notes.

SM64JSARCHIVE 

Super Mario 64 JavaScript

SM64JSARCHIVE is an actively maintained fork of sm64js: a decompilation project of Super Mario 64 to JavaScript. The code is open-sourced on GitHub.

The backend server, which is written in Rust, has finally been able to start after 10 long months and is now live at https://mmo.sm64jsarchive.com

A successful stress test for the MMO feature was run on April 10th.

Open Combat 

OpenCombat: demo available soon Official demo available soon

Open Combat (GitHub, Discord) is a real-time tactical game which takes place during World War II.

The basic game logic and HUD are now complete, and the high-definition map for the demo is finished.

Some things are missing, like high-definition assets for soldiers or minimal AI for opponents. But the demo is playable and the team would love to hear your feedback!

Times of Progress 

Times of Progress: an isometric city builder game set during the industrial revolution

Times of Progress (Steam, Twitter/X, Mastodon) is an upcoming city builder game set during the industrial revolution.

In April, they added lots of UI widgets and improved performance by refactoring the orders system.

The demo is not available yet but interested players can sign up for the upcoming closed beta by joining the newsletter.

Monk Tower 

Monk Tower Screen shot

Monk Tower (itch.io, Google Play, Github) is a tiny coffee-break roguelike game, intended for short runs (ca. 15mins).

The gameplay is quite distilled and revolves mostly around resource management. The player has limited inventory capacity and the weapons get damaged after each use. There are 20 randomly generated levels to beat.

It is available on desktop (Windows / Linux), Android, and Web (mobile friendly). The game’s source code also comes with a custom WGPU-based 2D framework.

Discussions: (/r/roguelikes)

You are Merlin 

You are Merlin screenshot

You are Merlin (Web Game, GitHub - Rust/CLI, GitHub - WASM) by @hseager is a text adventure game that compiles to both CLI and WebAssembly.

This initial version features a main quest, side quests, items, and a boss fight. Players can choose their favourite visual theme such as Zelda, Warcraft, and Fallout. The web version also supports mobile devices.

Although fairly simple, this first version provides a good foundation for building more features in later updates.

Discussions: (/r/rust_gamedev)

Jumpy 

Machine Gun and Periscope Jumpy: Machine gun and Periscope

Jumpy (GitHub, Discord, Twitter) by Spicy Lobster is a pixel-style, tactical 2D shooter with a fishy theme.

This month the base functionalities of round scoring and map transitions have been implemented. New weapons such as the Blunderbuss, Periscope, and Machine Gun are ready for fish-on-fish combat.

Jumpy is now featuring corpse physics and a “ragdoll” button to send your Fish flopping about.

On the treasure map for the near future is improving UX and new player experience, polish and improvements on match scoring / round transitions, and more awesome weapons.

Discussions: GitHub, Twitter

Engine Updates 

Bottomless-Pit 0.3 

The Bottomles-Pit Logo. A small hole in the ground with cat ears and text saying bottomless-pit

Bottomless-Pit is a 2d game engine written with WGPU that has been around for a year, which can be found on crates.io and GitHub. Very recently a 2d camera was added as well as WASM and web support. Current development is being focused on stability and QoL changes like texture sampling options and improved input. You can check out several engine examples on the web. Since the engine is in its infancy, its developer calls for developers to use it and give the engine some feedback.

Current features are:

  • Custom Shader Support
  • Basic rendering
  • Text rendering
  • Input and window event handling

Learning Material Updates 

Building games for Android with Rust 

@maciekglowka has recently shared some thoughts on their blog about building Rust games for Android. Rather than a step-by-step guide, it is a collection of issues one can possibly encounter when targeting Android.

Topics mentioned:

  • ‘Window’ creation (via winit)
  • Android app’s lifecycle vs. the WGPU surface creation
  • User data storage
  • System UI hiding via jni and Android API
  • Building AAB files to meet Google Play requirements

Bevy: A case study in ergonomic Rust 

Chris Biscardi was at RustNation UK recently and gave talk on Bevy’s Rusty ergonomics titled Bevy: A case study in ergonomic Rust. In their own words:

There are at least two, if not three, talks worth of material around how Bevy progressively discloses complexity across multiple “stacks” of APIs; and the work done so far is very impressive in terms of how it all fits together, especially as a large-and-growing OSS project.

Reactivity in Bevy: From the Bottom Up 

Talin wrote a three-part series on “Reactivity in Bevy: From the Bottom Up”, which describes the workings of bevy_reactor, an experimental, work-in-progress framework for doing reactive programming within Bevy.

Library Updates 

Jolt Bindings 

Lucian Greathouse has published their Jolt bindings for Rust. Jolt is a C++ physics engine you might know from its use in Horizon: Forbidden West. Lucian has previously worked on JoltC, a C API for Jolt, which this project uses in the background.

The bindings work can be found on the just-rust GitHub repo GitHub repository and come in two flavors:

  • joltc-sys: Unsafe bindings to the C API
  • rolt: Ergonomic and safe Rust API

Hexx 0.17 

Hexx, the popular crate for hexagonal tools, has released version 0.17. This release has a strong focus on performance:

  • Large performance improvement on various computations like rings and wedges
  • Add support for optimized storage for hexagonal and rhombus-shaped maps
  • Added support for rectiline path

And utility:

  • Added a 13th example showcasing all natively supported shapes
  • Removed confusing items

Lightyear 0.13 

lightyear_website is a comprehensive networking library for bevy to make multiplayer games. It comes with multiple types of transports (WebTransport, WebSocket, UDP, etc.) and supports replication techniques like client-side prediction, server interpolation, interest management, and more! Check out the examples!

The latest release, 0.13, brings two big new features:

  • Steam support: you can now use the Steamworks SDK as your transport layer, which lets you use the Valve network! Note that lightyear supports running multiple transports in parallel, so it’s possible to have cross-play between Steam and non-Steam users.
  • Listen-server mode: it is now possible to run a server and a client in the same process/bevy app. This can be useful to avoid the costs of a dedicated server, or to have a similar codebase between singleplayer and multiplayer.

Example (with 300ms of latency)

Other News 

  • Alice I. Cecile of the Bevy Foundation would like to collect community feedback on game development in Rust. Please fill out her survey!

Discussions 

LogLog games has published a very well-written blog post about their reasons to leave Rust gamedev. It talks about shortcomings in Rust as a language in general and as a game development tool in particular. Some insights into the limitations of ECS are also provided. Some interesting community discussions have been sparked by this post:


That’s all news for today, thanks for reading!

Want something mentioned in the next newsletter? Send us a pull request.

Also, subscribe to @rust_gamedev on Twitter or /r/rust_gamedev subreddit if you want to receive fresh news!