Welcome to the 52th 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 

For years, our readers have asked for a way to subscribe to this newsletter by email. This again came up in our recent survey. We’re happy to announce that this feature is now available! When you visit our homepage, you can now scroll down and find an email subscription form. We’ll send you an email whenever a new post is published, which currently is once per month.

The emails are currently sent from gamedev-rs@proton.me. We will switch this to an actual @gamedev.rs address in the future. Please tell us if you encounter any issues with the emails.

Game Updates 

Untitled Pixel Wizards Game 

Enemies now perceive, pursue, and attack… and occasionally get burned to death.

Untitled Pixel Wizards Game is a local-multiplayer Noita-like platformer about killing baddies using spells powered by pixel physics. This month was focused on juicing up said baddies:

  • Pew Pew Pew: baddies learned to shoot at players.
  • Hot Pursuit: baddies also learned to chase players! (They’re real smart.)
  • Status Update: physically-simulated pixels learn to burn & poison players & baddies.
  • Ragdolls: corpses of dead baddies learn to tumble around all realistic-like.
  • Fiddling with Fire: the fire mechanic figures out how to better burn baddies.

Way of Rhea 

Way of Rhea Way of Rhea: a puzzle game. Available on Steam and 20% off for the Steam Summer Sale!

Way of Rhea (Steam, Newsletter) is a color-based puzzle game with difficult puzzles, but forgiving mechanics developed by Mason Remaley in a custom Rust engine. Since its release in May, Mason has fixed many bugs and implemented quality-of-life improvements.

They recently conducted an AMA on /r/rust_gamedev about their experience developing and shipping a game after six years in Rust. They then curated the questions and answers into a blog post. It includes questions about Rust, libraries, experiences writing a custom game engine, and game development in general.

Gunbug 

Gunbugs shooting at a bunch of eggplants Gunbugs shooting at a bunch of eggplants

Gunbug is a 2D online co-op horde survival shoot’em up game.

It focuses on shooting lots of enemies with lots of guns. It can be played solo or with up to 10 players.

It is built with Bevy and uses bevy_rapier for ray casting, bevy_kira_audio for audio, and renet for networking. The iOS and macOS versions are built with xbuild.

You can wishlist the game on Steam. Playtests start in the upcoming months. iOS and Android builds already work, but store pages don’t exist yet.

Engine Updates 

godot-rust 

godot-rust logo

godot-rust (GitHub, Discord, Mastodon, Twitter) by @Bromeon provides Rust bindings for the Godot engine.

After quite a bit of development on GitHub, the Godot 4 bindings are now available on crates.io – you can immediately get started using cargo add godot. Furthermore, the GDExtension API level can now be specified with a Cargo feature, e.g. api-4-1.

The ScriptInstance API has matured a lot over the past months. This feature allows users to write Godot scripts in Rust, which can be attached to nodes (just like GDScript). Scripts allow for quickly attaching/detaching functionality in a scene.

The overall API has seen several consistency improvements: reorganized modules, self/&self receivers on geometric types, easier element access for Array/Dictionary/Packed*Array. The library has also benefited from Rust’s #[diagnostic::on_unimplemented] to improve user-facing error messages.

Discussions: /r/rust, Mastodon, X

See also the devlog article.

Bevy 0.14 Release Candidate 

Sharp Screen-Space Reflections in Bevy 0.14 Sharp Screen-Space Reflections in Bevy 0.14

The Bevy game engine is gearing up to release version 0.14. The (probably) last release candidate is out now and ready for testing. If you want to help out, check out the draft release notes and the draft migration guide and report any issues you find.

Learning Material Updates 

Bevy Cheatbook 

The community-beloved unofficial Bevy Cheatbook by Ida “Iyes” is a collection of Bevy tutorials, recipes and advanced documentation. The cheatbook is currently in the process of being updated to Bevy 0.14 and now features the following new chapters:

Game development in Rust with Macroquad 

Olle Wreede of Agical published a complete guide on how to develop a classic 2D shoot ’em up game using the game library Macroquad and the Rust programming language.

It covers everything from a simple Hello World Macroquad application to adding graphics, audio, a shader, a graphical menu, and how to release the game on multiple platforms.

Other learning materials 

Tooling Updates 

Rusty Playdate 0.5 

The Playdate console The Playdate console

Rusty Playdate (GitHub, Mastodon) by @boozook is a large set of crates and tools for the full cycle of creating games for the Playdate handheld console.

A big part of the Rusty Playdate project is the cargo-playdate tool that functions as a build system. It works as a cargo-plugin as well as a standalone, and does several things:

  • It manages the compilation of your program,
  • builds assets for the crate and its dependencies,
  • generates a manifest,
  • and assembles it all into a bundle that runs on the device or a simulator.

In this month cargo-playdate v0.5 has been released and received massive refactoring, bugfixes and new features:

  • support for cargo’s auto-targets, i.e. targets such as bin or example that aren’t declared in the Cargo.toml
  • target-specific package-info is inherited from the main package-info
  • package.metadata.playdate.options is inherited from the workspace.metadata
  • incremental builds now work as expected

The register decoder in the pd-symbolize-crashlog was also updated. It now properly decodes all available registers such as PSR, CFSR, and HSFR.

Discussions: GitHub, Matrix.

Library Updates 

egui_ratatui 

egui_ratatui running in Bevy egui_ratatui running in Bevy

egui_ratatui by gold-silver-copper is an egui widget that is also a ratatui backend. It allows you to create Terminal User Interfaces (TUIs) inside egui. You can try out the web demo to see it in action.

The current release is the product of months of iteration, and is now “stable”. It is Wasm compatible and engine agnostic: use it in Bevy, *Quad, eframe, pixels, etc.

egui_ratatui is currently being used for the development of a game and educational software at a startup with no issues so far.

FMOD-oxide 

FMOD-oxide brings safe rust bindings to the FMOD sound engine. This crate tries to be as rusty and low-cost as possible, without comprimising on any APIs. Certain APIs, such as loading banks from a pointer, are marked as unsafe, but are still available for use.

Bevy Lunex 

Bevypunk: a recreation of Cyberpunk 2077’s UI made with Lunex Bevypunk: a recreation of Cyberpunk 2077’s UI made with Lunex

Lunex is a path based retained layout engine for Bevy entities, built around vanilla Bevy ECS. It gives you the ability to make your own custom UI using regular ECS like every other part of your app. Notably, this includes world-space 3D UI!

The above screenshot is from the Bevypunk UI Web Demo, which includes a main menu and a character creation screen.

You can get started by reading the bevy_lunex book.

haalka 

A Minecraft-like UI made with haalka

হালকা: in bengali, haalka means “light” (e.g. not heavy) and can also be used to mean “easy”

Haalka is an ergonomic reactivity library powered by the FRP signals of futures-signals. It is a port of the web UI libraries MoonZoon and Dominator and offers the same signal semantics as a thin layer on top of bevy_ui.

While haalka is primarily targeted at UI and provides high level UI abstractions as such, its core abstraction can be used to manage signals-powered reactivity for any entity, not just bevy_ui nodes.

bevy_light_2d 

A candle shining 2D light A candle shining 2D light

bevy_light_2d is a new general purpose 2D lighting for the Bevy game engine. Designed to be simple to use, yet expressive enough to fit a variety of needs. Features include:

  • Component driven design
  • Configurable point lights
  • Camera-specific ambient light
  • Single-camera rendering

bevy_hanabi 0.11 

Trails in Hanabi Trails in Hanabi

Hanabi is a GPU particle system plugin for the Bevy game engine. The most notable new feature in bevy_hanabi 0.11 is support for trails and ribbons.

berdicles 

A fountain of particles A fountain of particles

berdicles is an expressive CPU particle system for the Bevy engine. Features include:

  • Instancing based CPU particles.
  • Expressive non-physics based particle traits.
  • Familiar setup with Bevy’s native Material and Mesh.
  • Particles as emitters.
  • Mesh based particle trails.
  • Particle events that spawn other particles.
  • Billboard particles.

Other Library Updates and Releases 

  • glam 0.28: glam is a foundational crate when it comes to math in general in Rust. For example, its types are directly visible in the Vec types Bevy consumes and re-exports, like Vec3. v0.28 brings AArch64 NEON SIMD support as well as a couple smaller breaking changes.
  • gdext-coroutines: Run Rust coroutines in Godot 4.2+ (through GDExtension), inspired on Unity’s Coroutines design.
  • FunDSP 0.18: FunDSP is an audio DSP (digital signal processing) library for audio processing and synthesis. This release is a rewrite that adds no_std and SIMD support.

Interviews 

Metalmancy @ OpenSauce 

image/GIF description Arcade cabinet close up

Metalmancy are creating custom and configurable arcade machines. Their flagship game Thetawave is coded in Rust.

Hyelim of Framework interviewed Carlo and Joanna on their games and arcade machines at OpenSauce.

Tiny Glade Developers Discuss Bevy, Proceduralism, Publishers & Cozy Games 

An idyllic scenery made in Tidy Glade An idyllic scenery made in Tidy Glade

To celebrate the release of Tiny Glade’s demo version, Pounce Light’s Anastasia Opara and Tomasz Stachowiak have joined 80 Level in an interview to discuss the game’s history, proceduralism, Bevy, Rust, self-publishing, and the “cozy games” genre.

Blog Posts 

Dioxus Labs + “High-level Rust” 

This post by the founder of Dioxus Labs is a direct response to the recently published “Leaving Rust gamedev after 3 years” by LogLogGames. If you’ve missed the original post, it has made its rounds as a well-written critique of Rust’s gamedev ecosystem and shortcomings inherent to the language itself.

Dioxus Labs + “High-level Rust” is a detailed response to the original post, outlining concrete steps to improve the situation and signaling the author’s readiness to fund the development of features they see as necessary for the ecosystem to thrive.

Discussions: lobste.rs, /r/rust, Hacker News

Virtual Geometry in Bevy 0.14 

The Stanford bunny split into meshlets The Stanford bunny split into meshlets

Ever wondered how Unreal 5’s Nanite works under the hood? Jasmine, who reimplemented the virtual geometry technology for Bevy’s upcoming 0.14 release, wrote a post explaining the concepts and the nitty-gritty details of the implementation. The post is very technical in nature, so if you’ve never heard of this technology before, they recommend you first watch Brian Karis’ SIGGRAPH 2021 lecture A Deep Dive into Nanite Virtualized Geometry (slides).

Jobs 

Ubisoft Montreal is searching for an online Rust programmer for an unannounced project.

Engine Newsletters 

Future News 

Editing this newsletter wouldn’t be possible without your contributions. Thanks to everyone who helped us this month!

If you want something mentioned in the next newsletter, send us a pull request.

You can also get an early look at pending issues for the next newsletter.


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

Also, subscribe to our socials if you want to receive fresh news!

Discuss this post on: /r/rust_gamedev, Lemmy, Mastodon, X/Twitter, Hacker News, Discord.