This Month in Rust GameDev #46 - May 2023
Welcome to the 46th 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
- Game Updates
- Engine Updates
- Learning Material Updates
- Tooling Updates
- Library Updates
- Other News
- Discussions
- Requests for Contribution
Announcements
Rusty Jam #3
Find Ferris
Rusty Jam #3 ran from May 21st 2023 to May 29th 2023 and the theme was "Hidden in plain sight". The jam had a few but high-quality and awesome games.
Here're the winners:
- 🥇 Find Ferris by kuviman.
- 🥈 Tug of Orb by anders429.
- 🥉 The Veiled Path by Jebik.
We wish all the participants good luck in their future endeavors! The RustyJam will be back, so stay tuned on the Rusty Jam Discord for future updates!
Rust GameDev Meetup #27
The 27th Rust Gamedev Meetup took place in March. You can watch the recording of the meetup here on Youtube.
The schedule:
- Rusty Jam 3 by @ElhamAryanpur
- Blue Engine by @ElhamAryanpur
- Rerun by @wumpf
- Graphite by @Keavon
The meetups take place on the second Saturday of every month via the Rust Gamedev Discord server and are also streamed on Twitch.
Game Updates
Digital Extinction
Building Placement in Digital Extinction
Digital Extinction (GitHub, Discord, Reddit) by @Indy2222 is a 3D real-time strategy game made with Bevy.
The most notable updates are:
- poles at unit manufacturing delivery locations for selected factories,
- pausing unit manufacturing when the spawn location is occupied,
- IME support for text boxes,
- a lot of progress on multiplayer networking,
- logging to file and other logging improvements.
Support for multiplayer is a technologically complex problem to solve and it is the last major missing feature before the proof-of-concept version can be released. Therefore, a lot of effort currently goes in this direction.
The game is slowly gaining traction in the development community. Check out our new contributors here.
See gameplay screen recordings on YouTube.
More detailed monthly updates are available here (May) and here (June).
Tunnet
Connecting the DJ set to the network
Tunnet (Steam, Itch.io) is a short puzzle/exploration game where the player digs tunnels and connects computers together.
As a network engineer, the player will also have to respond to security incidents. In May, this game mechanic has been illustrated in a devlog and a preview of the new basic water simulation has been posted.
Fish Folk's Kickstarter
This month Fish Folk (itch.io, Discord) has launched their Kickstarter campaign that has already reached its funding goal!
Even though the basic sum is collected, the campaign still continues to get more funds for the stretch goals:
The plan for how to allocate funds that exceed our €15k goal is very simple: For every additional €1,000 pledged to our campaign, we will prototype another fishy game archetype for our evergrowing bundle. Once our funding run concludes we will poll our backers on which game(s) you would like us to prioritize.
Discussions: /r/rust
Escape Room AI
AI trying to escape a room
escape-ai by @bones-ai is a Rust-based implementation of a genetic algorithm and reinforcement learning simulation. Its purpose is to train an AI named Zoe to escape a room it's enclosed in. The simulation is built using the Macroquad library.
The YouTube video demonstrates 1000 AI bots learning how to escape five rooms of increasing difficulty.
Discussions: /r/rust_gamedev
MEANWHILE IN SECTOR 80
MEANWHILE IN SECTOR 80 (Discord, mailing list) by Second Half Games is an upcoming third person action-engineering space game.
Second Half Games released the first update video for the game. It includes an introduction to the studio, an overview of the game, and some of the recent progress towards the first public demo.
Tiny Glade
Tiny Glade (Twitter) is a small relaxing game about doodling castles.
This month was all about turning previous experiments into reality. The coloring and window prototypes are now proper features, have dedicated UI, and play well with other building tools.
The devs have also been toying with real-time global illumination that could run on potato graphics cards.
Turtle Time
Turtle Time by @mikeder is a WIP p2p multiplayer turtle game being made using Bevy, ggrs, and matchbox.
This month the first devlog was released:
- Quickly starting a project using bevy_game_template.
- Converting single player systems to multiplayer ones.
- Determinism, random spawns, and timers.
DAshmoRE
DAshmoRE is a fast-paced arcade mobile game written using Bevy.
Get ready for a fast-paced and challenging arcade game where the only way to move is by skillfully dashing past enemies. With a single tap, you must navigate through a maze of enemies that move at different speeds and patterns. Can you master the art of dashing and achieve the highest score? Test your skills and reflexes in this thrilling arcade game.
The game's features include:
- Single-tap controls and WASM build suited for playing on mobile phones.
- Power-ups like player repellent forcefields and slow-motion abilities.
- Integrated highscore system.
Discussions: /r/rust_gamedev
NANOVOID
Missiles targeting individual parts on enemy ships
NANOVOID by LogLogGames is a WIP 2D tactical space shooter that puts you in command of your own modular spaceship: engage in intense, physics-driven battles, strategize with ship customization, and outsmart your enemies.
This month the first devlog was released and it mostly was dedicated to experiments with Lua scripting.
Other updates include:
- A simple PID controller for rotating the ship.
- The SFX for thrusters is now filtered based on the desired force.
- On-hit SFX and explosions are starting to feel satisfying.
- Parts of the ship can now be individually inspected with pinnable UI.
- Missiles targeting individual parts on enemy ships with some more UI tweaks.
Discussions: /r/rust_gamedev
Bevy Garage
Bevy Garage by @alexichepura is a game-like car simulation playground built with Bevy, rapier, and dfdx neural network.
Alexi released two introductory videos about the project:
- The main video that walks through the project.
- Deep Q-Learning car training for 1 hour.
You can also try out the WASM version of the simulation here.
Engine Updates
stereokit-rs
stereokit-rs (Discord) are bindings to StereoKit - an easy-to-use Mixed Realty engine, designed for creating VR, AR, and XR experiences. While StereoKit is primarily intended to be used from C#, all core functionality is implemented in native code, and a C compatible header file is also available and was used to create Rust bindings.
StereoKit's features include:
- Wide platform support: HoloLens 2, Oculus Quest, Windows Mixed Reality, Oculus Desktop, SteamVR, Varjo, Monado (Linux), and eventually everywhere OpenXR is.
- Mixed Reality inputs like hands and eyes are trivial to access.
- Easy and powerful UI and interactions.
- Lots of model and texture formats are supported out of the box.
- Flexible shader/material system with built-in PBR.
- Performance-by-default instanced render pipeline.
- Flat screen MR simulator with input emulation for easy development.
- Runtime asset loading and cross-platform file picking.
- Physics.
You can use a cargo-generate template for a quick start and the devs invite to join their Discord server if you have any questions.
Discussions: /r/rust
hotline
hotline (Blog, Twitter, Twitch) is a modern, high-performance, hot-reload graphics engine that aims to provide low-level access to modern graphics API features, while at the same time providing high-level ergonomic optimizations.
The recent updates include:
- Tests of graphics functionality and lots of new examples,
- GPU Resources cleanup improvements,
- explicit API fore resource heaps,
- better bindless and bindful rendering models,
- GPU-driven ECS experiments.
Learning Material Updates
Building a Platformer with Bevy #1
@affanshahid published the first part of a new tutorial series on building a simple 2D platformer using Bevy. The series is aimed at newcomers to the world of game development and explores common game development concepts.
Discussions: /r/rust
Game Development In Rust: Making A Strategy Game
Game Development In Rust: Making A Strategy Game
@srodrigo published the first three parts of a strategy game in Bevy series. The series is aimed at developers with some experience in Rust who want to dive into game development.
- The first part focuses on the basic concepts to create a battlefield for the battles to come.
- The second part adds the first unit type.
- The third part adds more unit types to create more compelling teams.
How to Migrate Your Bevy Projects with (Semi-)Automation
@HerringtonDarkholme published an article about how to make Bevy migration easier by using git, cargo and ast-grep. The article uses the utility AI library big-brain as an example to illustrate bumping the Bevy version from 0.9 to 0.10 and covers four big steps: making a clean git branch, updating the dependencies, running fix commands, and fixing failing tests. By using semi-automation tools, you can migrate your Bevy projects with less hassle and more confidence.
Discussions: /r/rust
Tooling Updates
Spicy Launcher
Spicy Launcher by @orhun is a cross-platform launcher for playing Spicy Lobster games. Supports both command-line and Tauri-based graphical interface.
Currently supported games: Fish Folk: Jumpy, Fish Folk: Punchy, and recently added Thetawave.
Planned features include auto updating games and mods management.
Rerun
Rerun (Discord, Github) is an open-source SDK for logging complex visual data paired with a visualizer for exploring that data over time. While its primary focus is on robotics and computer vision, it can be useful for all kinds of rapid prototyping & algorithm development.
Rerun was shown at the Rust GameDev meetup, watch the recording here.
v0.6.0 is out now! A few of the biggest highlights:
- You can now show 3D objects in 2D views connected by Pinhole transforms.
- You can quickly view images and meshes with
rerun mesh.obj image.png
. - The correct to install the rerun binary is now
cargo install rerun-cli
. - native_viewer is now an opt-in feature of the rerun library, leading to faster compilation times.
- SDK log calls are now batched on the wire, saving CPU time and bandwidth.
- Experimental WebGPU support.
There's a growing community on Discord waiting for you to join in case you have any questions, comments or just want to follow the latest development. The Github project is MIT/Apache licensed and open to contribute for everyone, be it with suggestions, bugs or PRs.
Smashline
Smashline is plugin and a Rust crate aimed at enhancing Smash modding, more specifically focusing on script mods. Its main purpose is to enable the replacement of different types of scripts found in Super Smash Bros. Ultimate, while also offering additional utilities for creating what is known as "code mods" within the modding community.
The Smashline wiki provides comprehensive explanations of its core features.
Ruffle
Ruffle is an open-source Flash Player emulator written in Rust. It brings Flash Player back to life, running smoothly on all modern systems and web browsers.
This month's updates include:
- Bunch of new fan-favorite AS3 (ActionScript 3)games are now playable.
- Many graphics drawing methods have been fixed and implemented.
- XML support has progressed.
- AS2 (ActionScript 2) has seen progress as well: Additional XML methods have been implemented.
- The Ruffle desktop app now has an interface.
- Built-in save manager has been added.
- FLV support in progress, Flash content with external video files will be supported soon.
Library Updates
blit
blit is a GPL licensed library for quickly blitting 2D images on a pixel buffer. After a long stale period development has resumed quite a bit in the last couple of months.
The previous big release, v0.7.0, saw a big improvement in performance and API ergonomics. It also introduced interactive WebAssembly examples which can be seen here.
The latest big release, v0.8.0, is a complete rewrite of the quite old and admittendly outdated API. A focus has been put on both ergonomics and performance. There's now many ways of drawing a subsection, tiling, masking and creating repeating slices of an image on a pixel buffer.
seldom_state
seldom_state is a Bevy plugin that adds a StateMachine
component that you
can add to your entities. The state machine will change the entity's components
based on states, triggers, and transitions that you define. It's useful
for player controllers, animations, simple AI, etc.
This month, seldom_state 0.6 was released:
- Triggers don't need to be registered!
- MachineState and Trigger no longer require Reflect.
- StateMachine's trans_builder accepts the current state in the closure, so you have dataflow between states!
- You may add and remove state components manually.
- More versatile on_enter and on_exit events.
- Trigger combinators
not
,and
, andor
. - Transitions have priority in the order they are added.
- You can use EventReader, Local, etc in your triggers!
- Added an
EventTrigger<E>
that triggers on an event. - StateMachine's set_trans_logging sets whether to log state transitions
- And more!
Thanks to Sera for coauthoring this update!
Kira
Kira (GitHub) by @tesselode is a backend-agnostic library to create expressive audio for games.
Kira v0.8 adds support for spatial audio, global modulation sources for easier and more powerful parameter tweening, compressor and EQ effects, and more powerful playback and loop region settings.
Discussions: /r/rust
Other News
- Other game updates:
- Maginet will soon get a level editor with in-editor play support.
- @NullableEngineer released a vlog about implementing the first iteration of the network server for their WIP MMO.
- Idu got a new water system that is a lot faster to and easier to render.
- Other engine updates:
- godot-rust got a new website with latest API docs and direct links to learning resources and community platforms.
- Bevy will get WebGPU support in the next - v0.11 - release.
- Other learning material updates:
- @PhaestusFox has posted Bevy-related tutorial videos: Herbal-Alchemy 1.4 Update and "How to make a view cube in Bevy".
- Other library updates:
- grid is a simple library that provides an easy to use and fast 2D grid data structure.
- hexx v0.6 brings a bunch of new algorithms for hexagonal maps and overall API improvements.
- faer 0.9 brings the non hermitian eigenvalue decomposition for real and complex matrices and also comes with the release of qd, a library for extended precision floating point arithmetic with faer compatibility.
- quinn v0.10 introduces MTU discovery, updates to the latest version of rustls, improves platform support, and introduces a variety of new features, performance improvements, and bugfixes
- funutd is a 3D procedural texture library running on the CPU that features different tiling modes, an endless supply of proc-generated self-describing volumetric textures, Palette generation with Okhsv and Okhsl color spaces, and an interactive texture explorer.
- bevy_diagnostics_explorer is a plugin allowing to visualize diagnostics (tracing spans) in VSCode.
- pxo is a library for working with Pixelorama files.
- frug is a simple graphics library that was announced this month along with some docs.
- egui v0.22 brings support for application icons on Windows and Mac, better dark/light mode detection, and error reporting on the web.
- egui_tiles is a tiling layout engine for egui with drag-and-drop and resizing.
Discussions
- /r/rust:
- /r/rust_gamedev:
Requests for Contribution
- bevy_mod_scripting is looking for maintainers.
- 'Are We Game Yet?' wants to know about projects/games/resources that aren't listed yet.
- Graphite is looking for contributors to help build the new node graph and 2D rendering systems.
- winit's "difficulty: easy" issues.
- Backroll-rs, a new networking library.
- Embark's open issues (embark.rs).
- wgpu's "help wanted" issues.
- luminance's "low hanging fruit" issues.
- ggez's "good first issue" issues.
- Veloren's "beginner" issues.
- A/B Street's "good first issue" issues.
- Mun's "good first issue" issues.
- SIMple Mechanic's good first issues.
- Bevy's "good first issue" issues.
- Ambient's "good first issue" issues.
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!