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!
- Game Updates
- Engine Updates
- Learning Material Updates
- Tooling Updates
- Library Updates
- Other News
- Requests for Contribution
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:
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!
The 27th Rust Gamedev Meetup took place in May. You can watch the recording of the meetup here on Youtube.
Building Placement in Digital Extinction
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.
Connecting the DJ set to the network
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.
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.
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.
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.
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.
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 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.
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.
Alexi released two introductory videos about the project:
You can also try out the WASM version of the simulation here.
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.
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
@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.
Game Development In Rust: Making A Strategy Game
- 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.
@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.
Planned features include auto updating games and mods management.
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 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 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.
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 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 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
- 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 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.
- Other game updates:
- Other engine updates:
- Other learning material updates:
- 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.
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.