+++ title = "This Month in Rust GameDev #15 - October 2020" date = 2020-11-03 transparent = true draft = true +++
Welcome to the 15th 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
- Learning Material Updates
- Library & Tooling Updates
- Popular Workgroup Issues in Github
- Meeting Minutes
- Requests for Contribution
- Jobs
- Bonus
Veloren is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World.
In October, lots of work was done on the UI, and a buff system. There was an overhaul done to the staff item that gives it new primary and secondary attacks. There has also been work done on the axe and bow. The cloud system was overhauled and brought a cheaper way to compute the 3D noise that the system uses. The skill bar was overhauled to implement a new design that could handle the new buff system. This was also the first overhaul in over a year. A SFX system is in the works to allow effects to be mapped to blocks, for sounds like crickets or birds.
You can read more about some specific topics from October:
- Modelling Process
- Staff Overhaul
- New Skillbar and Buffs Visuals
- Cloud Improvements
- Buffs
- Alignment and Hostility
- Fixing CI
October's full weekly devlogs: "This Week In Veloren...": #88, #89, #90, #91.
In November, Veloren will release 0.8. Veloren will also be speaking at MiniDebConf on November 22nd.
Crate Before Attack by koalefant (@CrateAttack) is a skill-based multiplayer game where frogs fight and race using their sticky tongues as grappling hooks.
A browser build can be played online.
Changes since last update:
- Added a global leaderboard that visualizes Race and Training results in an interactive histogram.
- Tweaked frogs physics to make them more bouncy, added an option that would keep tongue connected as long as a key is being pressed.
- Online Ghosts were added. One can now compete with real players instead of AI when playing Race mode.
- Improved load-times: level graphics is now quantized with an 8-bit palette, signed distance fields that are used for collisions are now generated offline. Downloads are cached in an IndexedDB, so subsequent starts are even faster.
- Multiple bugs were fixed.
More details are in September and October DevLog entries and in YouTube-channel.
Egregoria's objective is to become a granular society simulation, filled with fully autonomous agents interacting with their world in real time.
The 6th devlog was published. Updates include:
- Island generation.
- Day/night cycle.
- Human AI via utilitary systems.
- Specs to legion 0.3 port.
See also the recent video showcasing very basic AI.
Join Egregoria's Discord server.
Discussions: /r/rust_gamedev
A/B Street is a traffic simulation game exploring how small changes to roads affect cyclists, transit users, pedestrians, and drivers. Any city with OpenStreetMap coverage can be used!
Some of this month's updates:
- web version launched, powered by
winit
,glow
, and other dependencies having support for WebAssembly; - an OpenStreetMap viewer with 100 cities imported;
- "thought bubbles" for cars looking for parking, by Michael;
- slow portions of a trip highlighted in the info panel, by Sam;
One of the many unique and confounding puzzles in the game
Worship The Sun is a dark, mysterious 2D puzzle-platform game with computer science themes. It introduces the player to a rich language of puzzle elements and challenges them to solve difficult puzzles that require experimentation, comprehension and internalisation of the game's mechanics.
The game is built using a custom engine that sits on top of legion, wgpu and a handful of other crates. It features dynamic lighting, a flexible particle system, bespoke collision behaviour and a Vim-inspired level editor. The majority of game assets are hand drawn in Procreate and painstakingly animated.
The game is a few months into development with a release target of late 2021. You can read about how swimming was added to the game in GameDev Note 1: Taking the Plunge which contains a sneak peek at some of the levels. For updates and possible playtesting opportunities, follow @chrispatuzzo and a /r/WorshipTheSunGame subreddit.
Akigi is a WIP online multiplayer game.
In October, more progress was made on the editor tool for placing entity spawn points. Work was started on prototyping the hunting skill. Functionality was added to allow focusing for TextAreas in the user interface. Improvements were made to the engine's asset management code to make it more generalized.
Full devlogs: #087, #088, #089, #090.
Sun Prison by Dima Lazarev is a WIP turn-based meditation on Rubik's cube, Sokoban, and roguelikes, being implemented with Bevy engine. The game is in the very early stages of development, but it is already possible to get lost in the dark or to be eaten by zombies.
Follow @dmitrywithouti on Twitter for updates.
Camp Misty is an asymmetric multiplayer game played on the command line. The game is played with two people. One of the players is a helpless victim searching for car parts. If they find all of the parts, they can repair their car and escape the camp. The other player is a ruthless killer who is trying to hunt down the victim.
The game was created as a learning exercise in about two weeks by @ReeCocho, with contributions from the many helpful members of /r/rust.
Antorum Online is a micro-multiplayer online role-playing game by @dooskington. The game server is written in Rust, and the current "official" client is being developed in Unity. The server can be self-hosted, and the network protocol is open, so even custom clients that adhere to the protocol can connect and play.
Two more devlogs were published this month, regarding work done to implement shops, character creation, and a few other features:
The Honor Sagas is an early-in-development 2d MMORPG project. October was the first month of development, and @ectonDev wrote a postmortem of the progress made while participating in #Devtober.
Project YAWC is a turn-based strategy game in the style of Advance Wars in development by junkmail. October saw the release of Alpha 3, including dynamically generated info cards and minor networking changes. For inquiries or if you are interested in playtesting, contact projectyawc(at)gmail.com.
Power Kick is an one screen platform game inspired by similar old arcade games like Bubble Bobble and SnowBros. Your task is to hit the enemies till they get dizzy and then kick them out of their misery to proceed to the next stage. The kicked enemies will hit the colliding enemies with a possibility to create a chain reaction (similar to the pushed snowball in SnowBros).
The game have 20 stages and in stage 10 and 20 you will face a helicopter boss.
Can be played solo on the web through WebAssembly or up to two players in the downloadable version: first player with the keyboard and the second one with a joypad.
The development took around two weeks thanks to macroquad and hecs.
rymd by @_profan is a space shooter prototype made with macroquad. Intended as a test platform for trying out rust for prototyping games and particularly for game AI programming purposes.
Development started at the end of October, recent additions include:
- Basic enemy AI behaviour mostly based on steering behaviours.
- Possibly the world's most nauseating physics driven camera.
- Too many particles.
The @pGLOWrpg (Procedurally Generated Living Open World RPG) is a long-term project in development by @Roal_Yr, which aims to be a text-based game with maximum portability and accessibility and focus on replayability, interactions, and emergent narrative.
For the past month the main focus of the development was on:
- Improving the UI.
- Implementing the input autocomplete system.
- Implementing save data import and parsing.
- Implementing world navigation system.
- Implementing rudimentary CLI graphics (for debugging and some future use).
Main features of reported (pre-alpha) version are:
- Ability to generate and explore one or many worlds (see previous news).
For main feature reports and dev blogs follow @pGLOWrpg on Twitter.
The Space Shooter project is a game in development by Carlo Supina and Micah Tigley. It is a 2D "shoot-em-up" game that takes place in space and is inspired by games like Raiden and Binding of Isaac.
Recent development has been focused on creating an online book for documentation for the game. While still a work in progress, the following content is now available:
If you're interested in hearing about planning an effective code refactor for a project using ECS, make sure to check out How to Revive a Dead Rust Project at RustFest Global 2020.
Click to see a demo video
Weegames (source code) is a fast-paced minigame collection.
There are now 40 minigames in the collection. New features in the latest release include boss games and high scores.
Canon Collision by @rukai is an Undertale + Homestuck fan-made platform fighter with powerful tools for modding.
This month, he completed the abstractions needed for character specific logic. Notable changes:
- toriel's fireball
- wobbly fireball shaders
- items that can be picked up and thrown
- character specific logic
@nyxtom published several articles on game development for Entity-Component-Systems, Windowing and Event Loops, and WGPU.
- ECS in Rust - written as a high level introduction to entity component systems and using the hecs crate.
- Winit and Pixels - introduces cross platform window management/event loops and provides a tutorial for writing simple pixel graphics and 2d game development using the pixels crate (based on WGPU).
- Framebuffers, WGPU and Rust - an in depth analysis of high level graphics terminology and a full length tutorial for setting up the api and clearing the screen with WGPU.
Bevy is a rapidly growing game engine written in Rust. This tutorial walks through creating a snake clone, introducing Bevy concepts on the way. The tutorial covers resources, systems, timers, entities, components, materials, creating a grid system, and spawning/despawning entities.
@Therocode published an article that explains how to port games to the web using Emscripten. It is not only useful if you have an existing game to port, but also if you are looking for a starting point for a new application.
Discussions: /r/rust
Move over Tetris Effect and Tetris 99, the first game has been created with
rust-psp, and it's Tetris! This was a big step because it proves that
rust-psp is ready for game development, even though it's still #![no_std]
.
std
support is a work in progress, and the project is always open to new
contributors to the library, the tooling, or people who want to make PSP games
in Rust.
Another development for rust-psp this month is reverse engineering of the Sony library for the hardware vector floating point unit of the PSP. All the vector and matrix operations provided by the Sony library have been PR'ed to rust-psp's main repo, and there are still more functions to come.
To stay up to date on rust-psp development, you can join the project's Discord or follow @sajattack on Twitter.
skyline-rs by @jam1garner is a project seeking to allow Rust code to unofficially use the Nintendo Switch SDK focused on modding.
This month, @jam1garner made a blog post, Rust for Modding Smash Ultimate, focused on detailing why Rust was such a good fit for modding games on the Switch and his experience porting Rust to the Nintendo Switch. It also features updates regarding:
- Crates for working with Nintendo and Namco textures formats (bntx and nutexb).
- An auto-updater client and server for Rustaceans writing Switch mods.
- The introduction of skyline-web, a new library for working with the Switch's web browser.
- Additions to the skyline fork of the Rust standard library.
glam v0.10.0
glam is a simple and fast linear algebra crate for games and graphics.
This month v0.10.0 was released. There were a lot of additions in this update and a small breaking change.
-
The return type of
Vec4::truncate()
was changed fromVec3A
toVec3
which is a breaking change and thus the version jumped from 0.9 to 0.10. -
Vector swizzle functions similar to those found in GLSL were added. Swizzle functions allow a vectors elements to be reordered. The result can be a vector of a different size to the input. Swizzles are implemented with SIMD instructions where possible, e.g. for the
Vec4
type.let v = vec4(1.0, 2.0, 3.0, 4.0); // Reverse elements of `v`. // If SIMD is supported this will use a vector shuffle. let wzyx = v.wzyx(); let yzw = v.yzw(); // Swizzle the yzw elements of `v` into a `Vec3` let xy = v.xy(); // You can swizzle from a `Vec4` to a `Vec2` let yyxx = xy.yyxx(); // And back again
-
no_std support was added, using libm for math functions that are not implemented in
core
. -
Optional support for the bytemuck crate was added, this allows appropriate glam types to be cast into
&[u8]
.
For a full list of changes see the glam changelog.
Rapier is a set of 2D and 3D physics engines for games, animation and robotics written in Rust.
This month the version 0.3.0 has been released with exciting new features:
- cylinders and cones as collider shapes;
- collision groups (with bit masks) and collision filters (with callbacks) for deciding what pairs of colliders can touch;
- the ability to set the mass of rigid-bodies explicitly;
- linear and angular damping, to progressively slow down rigid-bodies;
- the ability so attach some user-defined data (of type
u128
) to any collider or rigid-body.
The bevy_rapier plugin for the Bevy game engine has been updated to support all the aforementioned features.
Finally, a continuous benchmarking infrastructure has been set up to make sure performances regressions can be detected early.
Physme is not your typical physics engine. It doesn't exactly simulate real world physics and it never will. Instead it has only two goals:
- To provide satisfying real-time dynamics for 2D and 3D games
- To have a simple to use API
Physme will only work with bevy and is not made to support other game engines.
The current release supports bevy 0.2, but work is being done to support bevy 0.3.
The current feature set includes:
- Rigid bodies
- Multiple colliders per body
- Static and semikinematic bodies
- Sensor bodies
- Oriented bounding boxes
- Fixed, mechanical and spring joints
- Broad phase
All of the above listed features are supported in both 2D and 3D.
Mun is a scripting language for gamedev focused on quick iteration times that is written in Rust.
October updates include:
- a plugin for mdbook to test Mun code;
- support for modules and visibility;
- the ability to generate enum ABI types;
- bug fixes and other improvements.
gfx-rs support for D3D has been improved. @kvark landed a few critical fixes in the DX12 backend, including the proper handle freeing, compressed textures support, blend factors, and debug markers.
@cwfitzerald brought DX11 backend practically to the 1st tier with titanic work spread over a dozen of pull requests. It is now able to run bve-reborn correctly:
ggez 0.6 Call for Contributions
The ggez
game library traditionally tries to make at least one release
at the end of each year, and that is fast approaching. While the
graphics engine rewrite is still a work in progress, there's plenty of
other useful updates to be made. Bugfixes, dependency updates and other
ergonomic fixes are all on the table. A lot of work has already been
done: removing nalgebra
from the public API in favor of just using
mint
, re-working some dependencies to improve build times, and
updating and cleaning up a pile of minor issues. However, there's still
about a hundred accumulated bugs and PR's to triage and figure out, and
a lot of testing to do. Please help! The release checklist is
available here.
miniquad is cross-platform windowing and rendering library.
This month two big PRs got into the final review stage:
- Native Wayland support: as usual, no third-party dependencies or C code involved; Clean build time for Wayland examples are about 3s.
- The Metal backend PR showed good signs of life, quad and offscreen examples got successefully run on Metal.
macroquad is a cross-platform (Windows/Linux/macOS/Android/iOS/WASM) game framework built on top of miniquad.
This month was about polishing 0.3-alpha version. Important things that got fixed:
- Text rendering was reimplemented with fontdue: example, web demo.
- A long-term issue with Android resources system got fixed.
- Particle system was released: example, [web demo][particles-web-demo].
And special shutout goes to donuts game by @cedric-h - a simple game made in couple of days, like a jam game. It's a really good showcase of macroquad's approach on simple game code that allows hardcoding and hacks for empowering gameplay experiments.
rg3d is a game engine that aims to be easy to use and provide large set of out-of-box features. Some of the recent updates:
- Implemented fully asynchronous resource loading.
- Added compressed textures support (DXT1, DTX3, DTX5).
- Added filtering and wrapping options for textures.
- Added sky box.
- Added texture import options for resource manager.
- All dependencies were moved to rg3d workspace, so there is no need to manually download them when working with the latest version of the engine.
- Extracted HRTF code in the separate crate, so it could be used without rg3d.
- Lots of other bugfixes and improvements.
Join the rg3d's Discord channel or follow Dmitry Stepanov on twitter.
Bevy is a refreshingly simple data-driven game engine built in Rust. It is free and open source forever!
This month, thanks to 59 contributors, 122 pull requests, and their generous sponsors, Bevy 0.3 was released. You can view the full Bevy 0.3 announcement here. Here are some highlights:
- Initial Android and iOS support
- Asset system improvements:
- Asset handle eeference counting
- Asset loaders can now load multiple assets
- Sub asset loading
- Asset dependencies
- GLTF scene loader
- Bevy ECS improvements
- Query ergonomics: query.iter() returns a real iterator now!
- 100% lockless parallel ECS
- Performance improvements
- Thread local resources
- Flexible mesh vertex attributes and index buffer specialization
- WASM asset loading, touch input, transform re-rewrite, gamepad settings, plugin Groups, dynamic Window Settings, documentation search-ability.
Discussions: /r/rust, hacker news, twitter
Community updates:
- bevy_rapier 0.5: The Rapier Physics project released updates to their official Bevy plugins, which add support for Bevy 0.3 as well as the latest Rapier features announced here.
- bevy_easings: A plugin for easing a component value to another value, mainly used to animate transition between two transforms, but usable for other components.
- bevy_miniquad: A plugin replacing winit windowing and render pipeline with miniquad library.
- physme: A simplistic physics engine for both 2D and 3D simulation. Physically inaccurate, but feels satisfying and is easy to use.
- bevy_networking_turbulence: Networking plugin running on naia-socket and turbulence libraries.
- Making a Snake Clone: Walkthrough on how to make a snake clone.
- bevy_tilemap: A plugin with generic types for rendering multi-threaded chunk-based tile maps.
- Keep Inside: A solo pong on a circle (made for Ludum Dare 47)
- Keep Moving and Nobody Burns: A bomberman against time (made for Ludum Dare 47)
Join the Bevy's Discord, /r/bevy subreddit, and follow @BevyEngine on Twitter.
Tetra is a simple 2D game framework, inspired by XNA and Raylib. This month, versions 0.5.1 and 0.5.2 were released, fulfilling some long-standing feature requests:
- Custom error types can now be used in your game loop
- Custom shaders gained support for multiple texture samplers and color uniforms
- Methods were added to
Texture
andCanvas
for writing pixel data at runtime - Various helpful
std
traits were implemented forColor
For full details and a list of breaking changes, see the changelog.
ogmo3 is a Rust crate for parsing projects and levels created with
Ogmo Editor 3. It is loosely modeled after ogmo-3-lib
, the Haxe reference
implementation of an Ogmo level parser.
This month, it was released onto crates.io for the first time, and a full example was added, showing how a simple project can be loadedinto a game engine.
Wilds is very early in development game engine.
It features a renderer that uses Vulkan ray-tracing extension supported by NVidia RTX cards and future AMD cards.
Screenshot above is rendered using DDGI technique implemented exclusively with Rust and GLSL for shaders. In the whole scene there is only one directional light source - "sun" - and no "ambient" light. All geometry in viewport is shadowed from "sun" and is lit with diffuse illumination.
To keep things as simple as possible the engine uses Hecs - minimalistic ECS library. Assets are loaded asynchronously using Goods asset manager.
Traditional rasteriazation rendering pipeline and support wgpu backend are planned to support wider range of platforms/hardware.
Implementing GUI system and basic editor is also a priority goal.
Follow progress on Twitter. Contributions and feedback are always welcome.
Arsenal is a Blender game engine built on Rust and the Bevy game engine. Arsenal's goal is to bring the ability to makes games of any scale to game developers and artists of any experience level.
In the last month Arsenal has gotten back into full steam development with the goal to produce an Arsenal 0.2 release that you can make simple games with. Development has focused thus far on the all-important scripting interface necessary to be able to make games without re-compiling the engine. Great progress has been made on a Bevy pull request to facilitate dynamic components and systems, and the first efforts have been started to leverage that functionality to enable scripting with Python.
Weekly Arsenal development updates are made in the Arsenal channel on Katharostech.com, including the updates for this month:
- Arsenal Development: Week 1 of Full Time Dev
- Arsenal Development: Week 2 - Bevy Benchmarks
- Arsenal Development: Week 3 - Nailing Down Dynamic ECS
- Arsenal Development: Week 4 - Lock Free Dynamic Queries
You can check the project's workboard, provide feedback on the issues, and support the authors at Github Sponsors page.
Ajour is a World of Warcraft addon manager written in Rust using Iced as GUI library. The project is completely advertisement free, privacy respecting and open source.
October updates include:
- Catalog support for installing addons.
- Beta, PTR support.
- Release channels on addons.
- CLI options to run Ajour headless.
- Community driven API.
Join the Discord server and say hi.
Proton 5.13-1
In addition to adding Linux Support for more Windows-exclusive games, Valve Software's wine-based translation layer for Linux: Proton now includes Rust as part of its build system. Media Converter, is a Proton module written in Rust as a gstreamer plugin to convert certain media encodings from one format to another.
Doucmentation for building Proton is available on Github. Further documentation on Media Converter and its source code is available on the module's repository
See all meeting issues including full text notes or join the next meeting.
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!