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.
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?").
- 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
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
- Airshipper launcher progress
- Erosion system improvements
- First animated UI elements
You can read more about some specific topics:
- Character States Overhaul
- Airshipper Update
- Contributor Spotlight: @AngelOnFira
- Mac Build Predicament
- Unfinished Rust CI Blog
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.
The game is currently under heavy development and it's not yet playable.
The project's roadmap is here.
- 🖼️ art redesign, & new colour palette;
- ✂️ spritesheet and assets packing;
- 🧮 the game finally has a name: "Tennis Academy: Dash";
- ⛱️ logo, splash screen, and UI polish.
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;
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;
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.
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.
- Character selection UI displays the character that the player will use.
- Control settings UI allows players to view the configured control keys.
- User interfaces (UIs) are largely defined through configuration, making development and customization easier.
- Events to control application behaviour can be defined in configuration.
@dave_tucker is reimplementing some classics.
@a5huynh got the rotating map working;
Library & Tooling updates
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.
Check out the full release announcement post.
This crate defines the ComponentGroup trait. This trait is used to make managing a group of
specs::Componentinstances 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.
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.
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.
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.
@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;
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.
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;
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.
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.
cargo run --example hrtf --release
- Reverberation support - basic effect that gives your scene "sound volume".
cargo run --example reverb --release
- Vorbis/ogg support - a compressed format similar to mp3.
@siebencorgie's 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.
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.
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;
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 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;
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!
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:
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.
- "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
- #32 "Selective Enabling/Disabling optimizations at a crate/file/function level";
- #46 "Make sure key crates have
- #69 "Input Handling";
- #71" Proof Of Concept Crate: Simplistic Bump Allocator";
- #75 "Standardised API for sharing thread pools";
- #77 "Can we contribute to OpenXR to get Keyboard/Mouse support to be official?";
- #79 "Polymorph project";
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;
Just an interesting Rust gamedev link from the past. :)
click to see the tutorial video
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.
That's all news for today, thanks for reading!