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

Spreading the Word #

If you're working on a project that heavily relies on some engine/framework, consider informing its authors about your work: as the community is growing it happens more and more that frameworks/engines authors just don't know about users of their libs (this note was requested by Icefox in relation to GGEZ projects).

DynaMaze is an open-source multiplayer puzzle/strategy game written in Rust and compiled to WebAssembly, made by @boringcactus. Adjust the maze to build a path to your target and keep the other players from getting to theirs.

Slime99 by @stevebob is an open-source roguelike made for the 7 Day Roguelike 2020 game jam.

A traditional roguelike where the outcomes of attacking and defending are pre-determined and visible. Gameplay revolves around fighting slimes, adding to your sequence of combat outcomes, and using abilities to modify the order in which combat outcomes occur. It’s set in a neon sewer!

Will is a 2.5D moddable action/adventure game.

Highlights of this month's update include:

Going open-source

Network play (early version)

@oliviff released Tennis Academy: Dash v0.1.7:

👟 blue players are back

🎆 improved particle effects

🖼️ a few art fixes

Also, @oliviff continues to work on their Rust gamedev tutorial.

For The Quest #

For The Quest is the working title for a game in early development by @seratonik. Written entirely in Rust and compiled to WebAssembly, For The Quest is destined to become a MMORPG set in a post-apocalyptic Earth where your goal is to band together into like-minded factions to not only survive in this new world, but to unearth the cause of humanity's downfall.

For The Quest is currently undergoing engine development with a focus on running smoothly in modern browsers using WebGL 2.0 before moving onto native desktop ports.

New developments in March:

Collision and Activation-Based Triggerable Entities (Able to load new areas)

New overworld "sky light" directional lighting shaders in addition to omni-directional point lighting for underground areas

New Ice Cavern models and textures, establishing a hybrid pixel-art in 3D style - mapping tool has been expanded to allow for rotating "tiles" to build extensive environments in a simple text format for rapid prototyping

Specular maps added to the engine and world for that extra shine

Started refactoring the rendering pipeline to allow for screen-space effects such as reflections and ambient occlusion

Follow @seratonik on Twitter for updates.

Urban Gift is part detective game and part superhero simulator. This month a teaser video was released:

Follow development updates on Twitter.

Realm.One is an open-source MMO game written using the Amethyst game engine. This month two videos were posted:

Native Systems is working on "Colony Genesis" - an ant colony sandbox game with ASCII graphics.

This month v0.1.1 and v0.1.2 versions were released. Some of the updates:

Add color palette options to Settings including a modified palette for red-green color blindness

Add lifecycles to more ant castes

Nurse ants give food to larvae

Nurse ants on the surface will return to the colony

Fix for foragers getting stuck in dig state at colony entrance

Updated pathfinding

Ascension 2 by @outkine is a simple gravity-based platformer.

Hop your way through bite-sized levels while dodging spikes and turrets. Then, change the direction of gravity, and do it all again!

The source code is available here.

@Roal_Yr tweeted a bunch of updates about their "pGLOWrpg" project:

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

Some of March's updates:

Full devlogs: #056, #057, #058, #059, #060,

In Sphere Game by Coffé Junk Studio you control a sphere in a bowl-shaped 2D space:

Your goal is to hit the other spheres as hard as possible to shatter them into pieces! But take care; if you get hit too hard too often by other spheres, you will be smashed yourself! Avoiding them is challenging as the bent space keeps dragging you to the center. Can you destroy everything around you until you are the only one left?

The game is a test for the studio's "Sphere Engine" engine that is being implemented using Rust and Vulkan.

Helix Repair is another game by Coffé Junk Studio written using the same engine. Your task is to repair a broken DNA sequence by replacing wrong nucleobases with the right ones. You have 20 seconds: how many nucleobases can you repair within that time?

The game was developed within one weekend during the Global Game Jam 2020, whose theme was "repair".

Garden: March Devlog #

Garden is an upcoming game centered around growing realistic plants.

March devlogs were posted. Some of the updates:

Splashing sweat symbol water diffusion in the new soil;

Herb improved leaf translucency;

Joystickcollision detection, player movement;

Artist palette debug tool for visualizing the forces acting upon a game object and its other vectors.

Zemeroth by @ozkriff is a minimalistic 2D turn-based tactical game. Some of this month's updates:

Some of the text buttons were replaced by icons.

Ability descriptions.

Popup screens and exit confirmation dialogs.

New zgui widgets: ColoredRect, LayersLayout.

widgets: ColoredRect, LayersLayout. Inactive buttons are either hidden or grayed-out now.

The project fully switched to good-web-game as the first step of the migration to miniquad.

Work on Level of Detail

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

Many systems have been worked on in March. Worldsim is making progress through simulation of civilization over time. The map has seen improvements for lighting. Certain parts of the UI have been going through big changes. Many small outstanding issues have been worked on by a few diligent contributors. Networking is also being reworked from the ground up.

Here is the March changelog:

- Added sfx for wielding/unwielding weapons - Fixed NPCs attacking the player forever after killing them - Added sfx for collecting, dropping and using inventory items - New attack animation - weapon control system - Game pauses when in singleplayer and pause menu - Added authentication system (to play on the official server register on https://account.veloren.net) - Added gamepad/controller support - Added player feedback when attempting to pickup an item with a full inventory - Added free look - Added Italian, Portuguese, and Turkish translations

You can read more about some specific topics:

With the Content Update scheduled to come out at the end of April, many systems will be finishing up development. Keep a lookout for the launch party!

March's full weekly devlogs: "This Week In Veloren...": #57, #58, #59, #60, #61.

bracket-lib (previously rltk_rs ) by @blackfuture is a Rust implementation of C++ Roguelike Toolkit.

Some of this month's updates:

Input API.

bracket-color now supports pallets and RGBA.

now supports pallets and RGBA. The graphical (OpenGL, WASM, Amethyst) render targets now support alpha channel.

Arbitrary clipping window on any layer.

New VirtualConsole system.

system. New functions for right-justifying printed text.

Fonts and dimensions in terminal layers can now be switched at run-time.

New layer type that lets you specify glyph position as a float.

New sprite layer.

Updated examples.

Main updates:

simba - a crate that defines a set of traits for writing code that can be generic with regard to the number of lanes of the input numeric value. Those traits are implemented by f32, u32, i16, bool as well as SIMD types like f32x4, u32x8, i16x2, etc.

benchmarks: "SIMD Array-of-Structures-of-Arrays in nalgebra and comparison with ultraviolet".

alga abstract algebra crate is switched to passive maintenance mode.

gfx-rs and wgpu news #

deeper uses wgpu for rendering

gfx-hal-0.5 was released! Improvements done in March:

Debug markers. Users are now able to debug-annotate parts of the rendered frame, so that inspecting it in a GPU debugger is more enjoyable.

The generic range parameters are removed in favor of simple structs. This is a move towards simpler low-level API.

Physical device features for NDC Y-flip and sampler mirror clamp are added.

Physical device performance hints are introduced. The first hint is for "base vertex/instance" support.

SmallVec is removed from the API, it's reshaped to avoid any heap allocations. Previously, it had to touch the heap on multiple descriptor sets or command buffers.

is removed from the API, it's reshaped to avoid any heap allocations. Previously, it had to touch the heap on multiple descriptor sets or command buffers. DX12 got true support for read-only storage bindings. This is one of the opt-in derivations from Vulkan that allow to better map users logic to non-Vulkan backends, also used by WebGPU.

Last but not the least, @zicklag has been fighting with the OpenGL backend to align its API with the rest of the crowd, armed with surfman. The fight is reading conclusion, and we are crossing fingers to add OpenGL support to wgpu-rs as it lands.

wgpu and wgpu-rs changes in March:

@grovesNL reached an epic milestone in the Web target by showing the first triangle. Users will soon be able to seamlessly target the web with their existing wgpu-rs applications. 🚀

applications. 🚀 wgpu-types crate is created to share types between the Web target and the native one.

crate is created to share types between the Web target and the native one. @lachlansneff improved the async story quite a bit, we also converted more methods to be asynchronous.

Debug labels support.

Id management story for browsers with a GPU process has been completely redesigned and now working well.

All the objects are properly destroyed and GPU tracked if needed.

Ability to provide a Surface so that the selected adapter can present to it.

so that the selected adapter can present to it. New "mailbox" present mode.

Satellite projects:

naga - the new in-house shader translator has reached the milestone of successfully loading a WGSL boids example and generating a valid Metal source for it. 🎉

metal-rs has got a lot of contribution by @adamnemecek. Indirect command encoding is particularly exciting!

gfx-extras is a new library that is forked from rendy-memory/descriptor.

gfx-ocean was moved to gfx-rs organization and updated to gfx-hal-0.5.

gfx-portability was also updated.

miniquad by @fedor_games is a safe cross-platform rendering library focused on portability and low-end platforms support. Some of this month's updates:

example project by @PonasKovas, illustrating android and web platform-dependent configuration: mandelbrot.

first prototype for embedded debug frame introspection: introspection.

Daily Sketch 0114 by Mactuitui

Nannou is a creative coding framework that aims to make it easy for artists to express themselves with simple, fast, reliable code.

This month Nannou v0.13 was released. Some of the updates:

Migration to wgpu-rs.

Nicer native macOS experience.

Capturing Frames & Textures.

Also check out lots of cool sketches from the community: #nannou tag on Twitter.

The second part of Nikita Krupitskas' blog series on developing a game engine for the Oculus Quest has been posted.

This part of the series describes how a simple Rust project can be built for Android - useful even if you're not targeting the Oculus hardware!

Thomas Versteeg has released a new crate called const-tweaker , which provides a web UI that can be used to tweak const variables in a running application. This can be used as a simpler alternative to embedded scripting languages or hot-reloading in your games.

Discussions: /r/rust

a1phyr has created a crate called assets_manager , which provides a convenient way to load and cache external resources. It abstracts over the filesystem logic, and provides a variety of built-in loaders for common Serde formats (e.g. TOML, JSON). Hot-reloading support is also planned in the future.

Discussions: /r/rust

netstack is a batteries included networking crate for games. Requiring an exchange of a secret and connection tokens. At the moment, UDP transport, connection management, packet signaling, and packet acknowledgement are features already implemented. Examples for getting started are provided on the crates.io page.

Version 0.3.0 adds basic monitoring functionality along with traits ClientMonitor and ServerMonitor . A work-in-progress prometheus exporter has also been added in this version.

Issues and contributions can be made to Netstack's github repository. Work in progress documentation is available on Netstack's docs.rs.

three-d is a renderer which targets both desktop (OpenGL) and web (WebAssembly + WebGL2) which makes it possible to develop a 3D application on desktop and easily deploy it on web.

This month three-d v0.1 was released. Main features:

Thin and low-level graphics abstraction layer which maps one-to-one with the OpenGL/WebGL2 graphics APIs.

Medium-level modular abstractions of common graphics concepts.

Deferred renderer with high-level components.

Default windows for easy setup.

It is possible to build your own rendering features from low- or medium-level components and combine with other high-level features, so you can already now make some cool stuff. See for example these examples.

This Month in Mun #

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

The Mun Team announced that they have obtained a $15k grant as part of the MOSS Mission Partners track, to further develop hot reloadable data structures.

Their March updates include:

marshalling of value structs;

extern functions;

garbage collector (defaults to mark&sweep);

performance benchmarks;

bugfixes and improved test coverage.

This month Oxygengine creator published plans for the future of the engine, where he explains the long term goal of the project that explains why Oxygen is definitely not a toy or a hobby project and how that will shape its feature towards being a toolset for the professionals. Project progress tracker can be found here.

Also, @PsichiX has started to work on the modular game editor (extendable with user-made plugins) called Ignite, that will ease creating games with the engine.

You can look at the first editor module - Asset Browser:

Check out the demo video and forum discussion.

ash is lightweight wrapper around Vulkan.

The latest version comes with support for Vulkan 1.2 and following extensions:

VK_KHR_timeline_semaphore

VK_KHR_ray_tracing

VK_KHR_external_memory_fd

Rectangle Pack is a Rust crate focused on rectangle packing: Laying out any smaller number of rectangles inside any number of larger rectangles. The developer's use for the library is in packing textures from texture atlases on the GPU, although the library does not have any concept of texture, and can be used in any context where rectangle packing may be needed.

Version 0.1.5 adds implementation for error handling for RectanglePackError.

A getting started guide is available on the project's homepage. Full documentation is available at the rectangle-pack docs.rs section.

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. :)

On 2019.07.16 a puzzle game "Robo Instructus" by Alex Butler was released after two years of development: Steam/itch.io (demo is available).

Salvage Engineer, you have a new assignment on a distant world... Robo Instructus is a puzzle game in which players manoeuvre a robot by issuing instructions via a simple programming language. As players progress through the game they unlock new functions to overcome new puzzles, each of which can be solved in multiple ways. The more you master the robot, the more elegant and powerful your solutions will be. Take the role of a Salvage Engineer sent across space. Use wits and tenacity to uncover the secrets of this isolated, frozen world.

Check out the release trailer.

The game is written using gfx-rs (pre-ll), winit, and opengl. You can read more about its development in the awesome devlog that has lots of cool posts like "Robo Instructus: Behind The Scenes".

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.