+++ 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.
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.
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:
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.
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.
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.
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.
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.
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!