Welcome to the fifth 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!

Want something mentioned in the next newsletter? Send us a pull request. Feel free to send PRs about your own projects!

I'm the community lead for Rust London and I just wanted to put out the feelers for anybody who is London based and would like to give a talk at our Rust London Meetup. We want to hold a special LDN Talks event solely focused on GameDev.

See the details here.

A/B Street - Adjust Traffic Patterns in Real Cities #

Ever been on a bus stuck in traffic, wondering why there are cars parked on the road instead of a bus lane? A/B Street is a game exploring how small changes to road space and traffic signals affect the movement of drivers, cyclists, transit users, and pedestrians. The game models Seattle as accurately as possible using OpenStreetMap and other public datasets, lets the player adjust existing infrastructure, and then does a detailed comparison to see who the changes help and hurt.

A/B Street is written in Rust, using a custom GUI library on top of glium.

Play it now and start contributing to expand the game to more cities, model light rail and shared foot/bike paths, and work on gameplay modes (like "make everything as slow as possible" and "what if nobody owned and parked personal vehicles?").

December highlights:

Preview traffic signal changes "live" without resetting the simulation

UI: new minimap, popup info panels with graphs, better shapes, and colors for cars

Data viz: histogram showing count of faster/slower trips, visualizing which road has the longest backup at a traffic signal, breaking down the timeline of a trip (walk to a car, drive somewhere, look for parking, walk to destination...)

Improved pedestrian pathfinding and decisions to use a bus or not

Discussions: /r/rust

vange-rs is the project of re-implementing the Vangers game (from 1998) in Rust using modern development practices, parallel computations, and GPU.

This month, the project has gained a few major features. The biggest one is an implementation of the physics engine completely on GPU in a closed loop. At the same time, the CPU code path was fixed to allow for a smooth ride (video).

Another pack of changes has landed to allow many NPC cars to be riding the world alongside the user. The renderer has shifted towards being completely instanced, and CPU physics computations were parallelized. The game can now host up to 50000 total cars on the level, all simulated at once, with up to 5000 on screen at a time (video).

In minor features, it became possible to jump in the game as well as change the car color.

The project has also started the development blog, describing both new and old technology, such as:

Data formats used in the original game.

Collision model of the original game.

Pure-GPU implementation of the collision model.

Veloren is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World.

Some of December's updates:

A formal changelog

Pathfinding

Airshipper launcher progress

Erosion system improvements

First animated UI elements

You can read more about some specific topics:

In the works for January include player account authentication, preliminary modding work, and character state systems. There are ongoing talks that are also looking into the networking system and optimizations.

December's full weekly devlogs: "This Week In Veloren...": #44, #45, #46, #47, #48.

voxel-rs is a new multiplayer Minecraft-like sandbox game engine written in Rust using wgpu-rs.

The game is currently under heavy development and it's not yet playable.

The project's roadmap is here.

Discussion: /r/rust

@oliviff released v0.1.2..v0.1.4 versions of "Tennis Academy: Dash":

🖼️ art redesign, & new colour palette;

✂️ spritesheet and assets packing;

🧮 the game finally has a name: "Tennis Academy: Dash";

⛱️ logo, splash screen, and UI polish.

Dank Defense by Elijah Lucian is a fun little missle defense game made in Rust using ggez.

Akigi is a multiplayer online world where most believe that humans are inferior.

Some of December's updates:

The game server was ported to specs;

The spawning system was rewritten and simplified;

Initial scenery setup using YAML config files;

Pathfinding now works between arbitrarily sized sets of tiles;

Better test coverage;

Full December's devlogs: #046, #047, #048.

Discussions: /r/rust_gamedev

new smooth soil editing demo

Garden is an upcoming game centered around growing realistic plants.

Some of December's updates:

a new terrain system that doesn't use voxels with surface nets anymore, but regular cubic voxels with heightmaps (video);

new building materials;

improved rendering performance and compilation time;

Slavic Castles is a card game inspired by Arcomage.

The following changes were made since the last devlog:

real cards that are loaded from JSON file;

the project migrated to quicksilver;

menu, simple animations and visual & audio feedback;

ability to save the game state.

Discussions: /r/rust_gamedev

Alex Butler continues to polish their "Robo Instructus" puzzle game - 1.18, 1.19, and 1.20 versions were released: UI tweaks, better translations (including full Russian translation!), bugfixes, and performance optimizations.

ultraviolet is a crate for computer-graphics and games-related linear algebra, but fast, both in terms of productivity and in terms of runtime performance.

This month ultraviolet v0.4 was released by @fu5ha. It brings transform & projection modules and many smaller improvements.

Check out the full release announcement post.

component_group is a crate for working with a group of specs::Components.

This crate defines the ComponentGroup trait. This trait is used to make managing a group of specs::Component instances easier. This is useful when you have several components that are often created, read, and updated together. You can use this trait to easily move an entire group of components between instances of specs::World.

This article by Michael Bryan discusses the usage of the ECS pattern in a CAD library. It's obviously not about games, but it still can be interesting for some game developers.

Discussions: /r/rust

Lyon a rust crate to tessellate arbitrary 2D shapes into triangle meshes that can be easily rendered on the GPU.

This month @nical released Lyon 0.15. The fill tessellator was rewritten from scratch (it took two years), it should solve robustness issues the previous implementation had and also has a bunch of new features.

Check out the full release announcement post.

Discussions: /r/rust

winit is a pure-Rust library for creating and managing windows.

A new alpha release of winit brings the web support. The web version expectedly has some API limitations (like window decorations, resizing, fullscreen, etc).

Web support is very much in alpha, and we'd like to encourage you to try it out and stress-test it so we can see where the issues are and improve where necessary.

Check out the announcement post.

Discussions: /r/rust

ggez is a lightweight game framework for making 2D games with minimum friction, inspired by love2D.

Icefox published "The State Of GGEZ 2020" blog post with an overview of what happened in ggez's development this year, what is the current ggez 0.6 development status, what's in the roadmap, and thoughts about the Rust ecosystem.

Discussions: /r/rust

miniquad by @fedor_games is a safe cross-platform rendering library focused on portability and low-end platforms support.

Web demos: quad, offscreen, astroblasto, arkanoid, zemeroth.

@fedor_games also posted a few Patreon updates this month:

Godot and Rust #

After a year of work godot-rust 0.7 bindings were released. Some of the updates:

Rust 2018;

The API description of Godot classes was updated to the stable Godot version 3.1.1;

More helper traits and derive/procedural macroses to reduce the boilerplate;

Iterators for Godot collection types;

New example projects;

Also, check out a Godot-Specs example project by @RecallSingularity.

raylib is a simple C 2D/3D game engine with virtually no dependencies. This month, raylib-rs 1.0 was released - mostly idiomatic and thread-safe Rust raylib bindings.

Check out an example of a roguelike game here.

Discussions: /r/rust_gamedev

Makepad is a creative software development platform for Rust that compiles to WASM/WebGL, macOS/Metal, Windows/DX11, Linux/OpenGL.

An early alpha version of Makepad Basic was launched. This version shows off the development platform, but does not include the visual design tools or library ecosystem yet.

Play with Rust+Wasm live at makepad.nl.

Discussions: /r/rust

Tetra is a simple 2D game framework that uses SDL2 for event handling and OpenGL 3.2+ for rendering.

This month, @17cupsofcoffee has released Tetra v0.3. Main changes are:

nalgebra linalg library was replaced with vek;

Improved window/input events;

Improved cameras/transform matrices;

More flexible screen scaling;

Better error handling;

Read the full changelog here.

@17cupsofcoffee also posted a little example of how you can implement pooling for sound effects

This is handy for situations where you don't want more than X instances of the same sound playing at once (e.g. if the player is able to fire a weapon as fast as they can hit a button), etc...

@puppetmaster updated their "Compact Space" game to Tetra 0.3, added some sound effects and a little x-max surprise.

@JohanLindfors updated their Snake and Flappy Bird sample games to Tetra 0.3.

Also, the Snake sample now has a ten step tutorial on how to build it from scratch.

rg3d-sound is a new sound library in active development.

This month it has gained three major features:

Head-related transfer function support - it provides perfect binaural sound. Try it: cargo run --example hrtf --release

Reverberation support - basic effect that gives your scene "sound volume". Try it: cargo run --example reverb --release

Vorbis/ogg support - a compressed format similar to mp3.

rg3d-sound is a component of the rg3d game engine.

@siebencorgie's Voxel Engine #

@siebencorgie got voxel global illumination and voxel cone traced reflections working in their voxel engine.

Rendology is a 3D rendering pipeline based on Glium and written in Rust. It features basic implementations of shadow mapping, deferred shading, a glow effect, FXAA and instanced rendering.

An "Introduction to Rendology" article outlines some of the concepts of Rendology and describes how they came to be this way.

Discussions: /r/rust

Oxygengine is "the hottest HTML5 + WASM game engine for games written in Rust with web-sys".

Main updates of v0.5 version:

Automated asset packs generation on build phase;

Loading assets from asset packs;

Support for audio: sound effects (buffered) and background music > (streaming);

Support for 2D physics (rigid bodies and colliders) via nphysics2d;

A new example: a basic web game.

Discussions: /r/rust

Mun is a scripting language for gamedev focused on quick iteration times that is written in Rust.

December updates include:

Parsing of tuple data structures;

Parsing and type inferencing of data structure literals;

Indexing of data structure fields;

Improved handling of data structure information;

Type checking of binary operations;

A community member made a PoC of Mun-powered hot reloading in Veloren;

The Roguelike Tutorial by @blackfuture includes almost 70 chapters now and continues to grow!

Some of the December's updates:

item identification and magical weapons;

a generic "effects" system;

cursed items, scrolls of remove curse, and item identification scrolls;

items that affect your attributes, generic statuses;

spells, spellbooks, weapon proc fx, mob special abilities, DoT, initiative +/- effects;

a dragon lair in a ruined fort;

multi-tile entities including pathfinding;

parameterized procgen of magic weaponry/armor;

Also, check out @blackfuture's 2019 Roguelike Development Retrospective post.

doryen-rs is an ASCII roguelike library with native and WASM support. Uses the uni-gl and uni-app crates from the unrust game engine.

doryen-rs v1.2.1 was released this month. Some of the new features:

added InputApi.keys_released() and InputApi.keys_pressed() that return iterators on key events since last update;

added alpha example showcasing framebuffer overdrawing;

added text input support through InputApi.text();

added a visual demo showcasing subcell resolution + dynamic lighting in a real time roguelike;

nes-rust by @superhoge - NES (Famicom) emulator in Rust on the Web, compiled to WASM.

This month nes-rust got remote multiplay:

Once you enter a room, share the URL with someone and start the game you want to play with them. Enjoy!

Try it!

rx is an extensible, modern and minimalist pixel editor, designed with great care and love for artists and hackers. It was conceived to have as little UI as possible, and instead focus on the work.

The 0.3 release comes with:

Discussions: /r/rust

Texel - ASCII Art Editor #

Texel is an ASCII art and landscape editor with VIM-like controls. It aims to make editing ASCII art easy especially for use in games.

Discussions: /r/rust

Embark posted the second issue of their newsletter. Here're some of the Rust news from it:

"Inside Rust at Embark 🦀" - a peek inside Embark's day-to-day work with Rust and open source gamedev (/r/rust);

cargo-about - a cargo plugin to generate list of all licenses for a crate (/r/rust)

Popular Workgroup Issues in Github #

Meeting Minutes #

See all meeting issues including full text notes or join the next meeting.

Requests for Contribution #

Just an interesting Rust gamedev link from the past. :)

click to see the tutorial video

In the November of 2018, @AndreaPessino (Founder/CTO of Ready At Dawn Studios) released a Modulator crate and an awesome "Modulator (Rust conding series)" tutorial video about it.

Modulator is a Rust crate for abstracted, decoupled modulation sources.

Modulators are sources of change over time which exist independently of the parameters they affect, their destinations.

Modulator comes with playground/testbed application Modulator Play:

An environment to visualize and test the modulator crate and to experiment with expressive 2d primitive rendering. Based on Piston Window, this application is meant to be both a test bed for the Modulator crate and its included source types, and a minimal friction environment to experiment with Rust coding.

Discussions: /r/rust

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

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

Discussions of this post: /r/rust, twitter.