This Month in Rust GameDev #8 - March 2020
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).
Game Updates
DynaMaze
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
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
Will is a 2.5D moddable action/adventure game.
Highlights of this month’s update include:
- Going open-source
- Network play (early version)
Tennis Academy: Dash
@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: Teaser Video
Urban Gift is part detective game and part superhero simulator. This month a teaser video was released:
Follow development updates on Twitter.
Realm.One
Realm.One is an open-source MMO game written using the Amethyst game engine. This month two videos were posted:
- “GameDev in Rust (Episode 0)” - ECS-based design with Amethyst, networking and tiled 2d based design.
- “GameDev in Rust (Episode 1): Monsters and AI!” - how the monsters are managed on server-side and integration with Tiled map editor.
Colony Genesis
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
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.
pGLOWrpg
@Roal_Yr tweeted a bunch of updates about their “pGLOWrpg” project:
- Rivers erosion: this will ensure no rivers flow upwards and the canyons through the landmass are more smooth.
- River segmentation and width increment.
- Improved the temperature map generation.
- Improved topography map rendering.
Akigi
Akigi is a multiplayer online world where most believe that humans are inferior.
Some of March’s updates:
- Migration to specs is finished.
- Asset compilation rewrite.
- Deploying process update.
- Preparations for the initial alpha release is being done.
Full devlogs: #056, #057, #058, #059, #060,
Sphere Game
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
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
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. - 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.
Veloren
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:
- New Networking Protocol
- External Work
- Winit Issues
- UI Improvements
- Map Improvements
- World Simulation Process
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.
Library & Tooling Updates
bracket-lib
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.- The graphical (OpenGL, WASM, Amethyst) render targets now support alpha channel.
- Arbitrary clipping window on any layer.
- New
VirtualConsole
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.
This month in rustsim #10 (March 2020)
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
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.- 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. 🚀 wgpu-types
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. - 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
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.
Nannou v0.13
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.
Quest Engine Part 2: Deploying a Rust App On Android
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!
const-tweaker
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
assets_manager
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 v0.3.0
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 v0.1
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.
Oxygengine
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:
Amethyst
-
- Better panic messages on
stable
Rust. - Support for setting log levels from configuration.
- Text field rendering corrections.
- Target multiple overlapping UI entities with events.
- Better panic messages on
-
specs
is the underlying ECS that powers Amethyst but there’s an ongoing prospect of moving tolegion
. @csherratt wrote an excellent post comparing both libraries. Also an in-depth discussion about archetypal and grouped ECS design took place on the forum. -
Atelier is an asset management and processing framework for games. Coupled with
legion
, @aclysma and @kabergstrom built an editor prototype demonstrating the following capabilities:- Prefab loading, saving, and hot-reloading
- Entity creation / deletion
- Component addition / removal
- Undo and Redo
Check out the demo video and forum discussion.
-
There is an ongoing effort to bring WASM support to Amethyst. Check out the contribution guide and project board for current status.
-
@ToferC reviewed their experience using Amethyst to build a space combat game, Paladin. Check out the review on youtube.
ash v0.30
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 v0.1.5
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
- Embark’s open issues (embark.rs);
- winit’s “Good first issue” and “help wanted” issues;
- gfx-rs’s “contributor-friendly” issues;
- wgpu’s “help wanted” issues;
- luminance’s “low hanging fruit” issues;
- ggez’s “good first issue” issues;
- Veloren’s “beginner” issues;
- Amethyst’s “good first issue” issues;
- A/B Street’s “good first issue” issues;
- Mun’s “good first issue” issues;
- @kvark: Anybody wants to work on the GLSL front-end in Naga? One day, we’ll be able to finally replace glsl-to-spirv, which is used by a lot of graphics applications and is prone to issues.
Bonus
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!