Welcome to the seventh 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!
After an unfortunate delay, we can finally present the results. We received a whopping 403 responses! This trove of valuable feedback will inform the WG's roadmap for 2020.
Are We Game Yet? Updates
Are We Game Yet? is a website cataloguing the Rust gamedev ecosystem, with hundreds of links to crates, games and helpful resources.
This month, it received some major updates:
- All of the site's data files have been unified into a consistent TOML schema, making it easier to add new links.
- Categories have been added for games and resources, and you can now add an item to multiple categories without duplicating the data.
- Page load times have been reduced (especially on the homepage).
- The styling has been improved to make the site look better on mobile, and to resolve some accessibility issues.
Ownership was also recently transferred across to the gamedev working group, to allow for more people to help with maintainance.
There's never been a better time to add your projects to the site, so please come and contribute!
Besides talking about Rust, it's a place that could be used to show your work-in-progress, art (visual or audio), discuss game design, etc.
Also, in case you didn't know, there is a quite active "games-and-graphics" channel on the community-run Discord server.
A Hack'N'Learn is an event where we get together and work on personal (or open-source) projects on our own computers.
- Common FPS elements: bots, items, weapons;
- Single game mode - deathmatch;
- More or less modern graphics (shadows, deferred shading, particle systems etc.);
- Fully animated bots using animation blending state machines;
- Single map - something like legendary Q3DM6;
- Path finding using navmesh;
- Save/load functionality;
- GUI: main menu, options, HUD, leader board (using rg3d-ui library);
- Binaural sound (using rg3d-sound library).
Native Systems is working on "Colony Genesis" - an ant colony sandbox game with ASCII graphics.
Establish a new colony and help it grow or let it develop on its own.
This month an alpha version was published on itch: check it out here.
Rolling mountain landscape
Veloren is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World.
At the beginning of the month, the team met for a 0.6 intro meeting. It was decided that 0.6 would focus on things for the player to do, and hence will be called "The Content Update".
Research has been done on multiple areas this month. One domain is level of detail, which is allowing mountains off in the distance to be rendered much faster. Another domain is server persistence. Finding a way for the server to efficiently persist player information is a large part of what is needed for The Content Update.
Here is the February changelog:
- Fixed NPCs attacking the player forever after killing them - Extend run sfx to small animals to prevent sneak attacks by geese - Added sfx for wielding/unwielding weapons - Added new orc hairstyles - Added gamma setting - Configurable fonts - Translation status tracking - Fixed /give_exp ignoring player argument - Allow spawning individual pet species, not just generic body kinds - Added daily Mac builds - Removed highlighting of non-collectible sprites - Added zoomable and rotatable minimap - Added rotating orientation marker to main-map - Brighter / higher contrast main-map - Added music system
You can read more about some specific topics:
In March, there will be a heavy focus on completing level of detail work as well as persistence. Modding support will be explored further. Player achievements will be merged into the game, and we will start looking at where more content can be added.
The project's goal is to provide a modern, carefully crafted, minimal and highly constrained set of tools for players/designers to create mods without programming knowledge.
Some of the current features:
- Simulation: working draft of flock behavior and collision detection, basic health and damage computation, construction and repair;
- Rendering: basic display of a heightmap & 3D models (with instancing), fxaa, screen-space reflections;
- UI: select units (picking and rectangle selection), move & build orders;
- Multiplayer: working PoC localhost tcp client/server;
- Map editor: raise, lower, flatten, blur, noise pencil;
- Unit editor: basic editor with joint & mesh selection and parameter editing (speed, turn rate, health, etc);
UniverCity is an isometric university management game:
Manage your staff, professors and students and try and build the best UniverCity around! Build up your UniverCity solo or against friends and build many different types of classes whilst trying to ensure students get good grades, or maybe just try and build the best looking UniverCity.
This update marks the end of development for now and adds in some basic workshop support.
The license is GPL-3 and the code is the same as the version released on Steam (the Steam version is built with the 'steam' feature enabled). Due to the GPL licensing the steamworks support is disabled by default which breaks things like the 'modding' menu and multiplayer.
The assets are not included with the release and will have to be copied from the game on Steam.
Everpuzzle is a Tetris Attack like action-puzzle game written in Rust.
Everpuzzle aims to become a similar game like Tetris Attack and expand on its concepts. The project was recently rewritten with minimal dependencies to achieve small compile times and gain more control over the underlying engine architecture. In the past Everpuzzle was using Amethyst with ECS, however there were some issues that made development difficult. Everpuzzle's big goals are AI, Multiplayer and different Game modes.
Big changes coming in version 0.2, full list here:
- Gamepad support (singleplayer)
- Multiple grids
- AI Bot
- Better Randomization of blocks
- Combos / Chains - with Highlighting
- Better animations
Antorum is a multiplayer RPG where players build their characters and fight against the growing threats on the isle. The game server is authoritative and written in Rust, while the client is written in Unity/C#.
This month, the focus was on cooking skill. This includes recipes and cookware. Players will need a cooking appliance, such as a stove or campfire to cook some Chonkrat Stew inside a pot. A heavy refactor to the interaction system had to be made, as well as changes to networking.
Check out te full devlog: #18 "Cooking".
In February, the Inspector for specs entities was mostly finished and the traffic simulation made great progress. A second blog post was released about it.
A recent video also shows different traffic features such as traffic lights, stop signs and car AI working together.
Ultimate Scale is a puzzle game in which you build increasingly large machines to solve increasingly difficult problems. The game consists of wind and blips. Wind propagates along pipes and causes blips to move. Blips, in turn, activate blocks.
Leod is currently working on the core design: How to make the game fun and what blocks to add. He posted about their thoughts and progress on a Reddit comment. Regularly, videos are posted on their youtube channel showing different machines made in game such as an extensible counter modulo 10 and a buffer.
Tennis academy dash is a time management game where you are the manager of a tennis academy and you need to coordinate various players to play on your courts.
The game is still a work in progress, but the demo version has been uploaded to itch.io this month, so you can go ahead and check it out! Give it a go (the build is only for mac at the moment but other platforms coming soon) and drop a comment with any feedback on tennis-academy-dash.
Alexandru Ene is working on a dwarf colony management game "Dwarf World".
This month, the project got an official site: dwarf.world.
Also, check out development streams: every Sunday at 19:30 PM GMT on Twitch.
Space is a lonely place, but at least you've got the music to keep you company.
Lonely Star is a side-scrolling infinite runner, with simple generative music. You collect orbs and fly through rings in order to play notes and stay alive.
Tetra itself also received two small updates recently:
- Version 0.3.2 was released, with bugfixes and some tools for simple AABB collision detection.
- The Pong tutorial was updated with a new chapter, showing how to use Tetra's graphics and input APIs.
Sampling a heightmap in the vertex shader and also computing the normal, tangent and bitangent vectors in the vertex shader.
Akigi is a multiplayer online world where most believe that humans are inferior.
This month saw a heavy focus on the web client. An alpha release is slated for April 9th, 2020. Lots of client refactoring was done, and experiments were run in the browser.
Some of February's updates:
- Input Event Processor System;
- Terrain Loading and Rendering;
- User Interface Elements;
- The WebGL Renderer;
- Rendering Meshes;
- Rendering Terrain;
Will is a 2.5D moddable action / adventure game.
This month Azriel wrote a post about how decisions were made when designing network play.
Way of Rhea is an upcoming puzzle platformer that takes place in a world where you can only interact with objects that match your current color.
This month, an updated trailer with new character art was released. Check it out on the game's Steam page.
@Fryer00 tweeted a bunch of updates about their WIP Box2D physics game prototype:
- Day 45: contraction mechanic;
- Day 46: turn/flip/swap-front-and-back movement mechanics;
- Day 48: food.
Garden: January and February Devlogs
Garden is an upcoming game centered around growing realistic plants.
- 🌘 Physically-based shading
- 🕹 3D model loading and texturing for richer environments
- 💦 Soil moisture content
- 🌠 Alpha mipmapping
- and more info regarding some game mechanics as well
Grumpy Visitors is a top-down 2D co-op action/arcade game highly inspired by Evil Invasion. It runs on Amethyst game engine.
This winter Grumpy Visitors received some updates with the focus on graphics and UI:
- Repainting mage sprites with shaders
- New missiles graphics
- Monsters death animations
- Modal windows for menu UI
Check them out in the latest winter devlog.
Turn back planes to the port, by clicking right keys to the virus beat.
@Roal_Yr tweeted a bunch of updates about their "pGLOWrpg" project:
- proper river attractors;
- floodfill and distinguished regions;
- extravagant dev environment;
- optimized pathfinding, unique regions;
- Reworked noise and erosion;
- 37 possible unique biomes;
Harvesting and refining some Gold.
Some of the updates:
- Networking improvements;
- Godot-Rust interaction improvements;
- Players can now control their ships and create new ones;
- Top-down view and flying HUD;
- Asteroids procgen.
Also, the post gives an overview of the project's history, talks about community building, and overcoming personal challenges.
Check out stream highlights on Tom's YouTube channel.
For the Quest
@seratonik tweeted a bunch of updates about their "For the Quest" (working title) game project:
- Switched to the
- Added a few new object models and an 8-direction animated sprite with idle animations;
- The map renderer is now powered by a chunking system to fix clipping issues;
- Added basic collision detection.
Library & Tooling Updates
The examples are very well explained, and can easily be translated to other engines, so it's worth checking out even if you're not a GGEZ user!
- New pressure resolution methods.
- Viscosity, surface tension, and elasticity can now be simulated.
- Ability to remove fluids/boundaries/collider couplings after their addition.
- Ability to add particles to a fluid that has already been created.
Watch a "Salva 0.2: DFSPH, viscosity, surface tension, and elasticity" demo video.
savefile is a serialization crate used to effortlessly serialize rust crates
and enums into a binary format. Anything implementing the
Write trait can
be serialized and deserialized. First-class versioning support and introspection
are some other features available.
Version 0.6.1 includes a fix and should be updated to if compilation using
the savefile-derive crate produces a "
SaveFileError not found" compiler error.
specs is an entity-component system (ECS) library, designed for high
performance. This update increases the MSRV to 1.38 and removes the
In this version, the panic message has been improved to include
the name of the type that is accessed on stable Rust, as well as suggestions for
how to fix the issue. Prior to
specs 0.16, retrieving a resource that had not
been added to the
World panics with an obscure "resource not found" message,
"nightly" feature was necessary to discover what resource that is.
In addition, the
Sync trait constraints are
removed from resources and
Components when the
"parallel" feature is disabled -- enabling types such as
wasm_bindgen::JsValue to be used with non-parallel
For more details, please see the
- Simple way to define the combat's rules, taking advantage of Rust's strong type system.
- Battle events are collected into a timeline to support save and restore, replays, and more.
- Client/server architecture; all battle events are verified by the server.
- Minimal performance overhead.
The idea behind this crate is to provide a structured and safe framework to manage the game state. Users can create a battle and evolve it by applying events. Then, weasel takes care of keeping a historical timeline. It also help with serializing/deserializing save files or sharing and verifying events between clients and server. The game logic is defined through traits, which is nice because it can benefit from Rust's type system and compile time checks.
Check out examples to see how it works in practice.
Shipyard is an ECS library built on top of sparse sets.
Some of the v0.3 updates:
- There's now a User guide to explain what can be done and how;
- No need to register components anymore, storages are now automatically created when they are first accessed;
- !Send and !Sync components;
- Unique components;
- Components sorting;
- no_std support.
image crate provides basic imaging processing functions and methods for converting to and from image formats.
Check out the release blog for 0.23! It comes with improvements to error handling, and the buffer and loading interfaces.
Embark have recently open-sourced superluminal-perf-rs - a small crate that integrates with Superluminal profiler on Windows.
superluminal_perf::begin_event("my-event"); calc(); superluminal_perf::end_event(); superluminal_perf::begin_event("my-event2"); calc2(); superluminal_perf::end_event();
Rust on RG-300 Consoles
The process is complex for a lot of reasons:
- Cross-compiling for MIPS is tough <...>
- Graphics is done through the Linux framebuffer <...>
- Sound uses old-style Linux OSS <...>
It's a bit clunky, but it works! There are quite a few devices with very similar hardware this should work with. It should be possible to make simple games for such devices, which I find particularly motivating :)
You can find a working example that does graphics, sound and controls with some explanations at alexpdp7/retrofw2-rust.
crow is a pixel perfect 2D rendering engine based on OpenGL. It is designed to be easy to use while still allowing for nearly everything one might want while using pixel art.
A showcase game is being developed with crow.
miniquad: "Rust 2D Engine 2020 Roadmap"
mainloop async/await experiment in macroquad
- miniquad and related crates set up yearly goals: "Rust 2D Engine 2020 Roadmap";
- A first try on the higher-level engine design: flappy bird.rs;
- miniquad was successfully built for Android.
This month luminance v0.39 got released. Updates:
- Remove the concept of layering in textures. Textures’ layerings (i.e. either flat or arrayed) is now encoded directly in the dimension of the texture.
- Add support for texture arrays. They can now be passed constructed and passed as uniforms to shader programs.
glium is an elegant and safe OpenGL wrapper.
It's no longer actively developed by its original author, but maintenance is continued by the surrounding community.
This month glium v0.26 was released:
- Updated glutin to version 0.23.0.
- Removal of some unsound code that rustc warns about.
- Report the precise shader stage in which a shader failed compilation.
Check out a new "Lear WGPU" tutorial.
The abovementioned Oxidator RTS game is based on wgpu.
nbodysim is a realtime 3D N-Body-Simulation.
After the support for unstable WebIDL was added to wasm-bindgen the work on integrating web-sys into wgpu-rs has begun.
This month a new video was released to showcase new voxel renderer:
KAS GUI v0.3
KAS, the toolKit Abstraction System, is a general-purpose GUI toolkit.
0.3 is a decent sized release, focussing primarily on drawing, themes and layouts. Highlights include:
- a new FlatTheme,
- many small visual improvements,
- access to medium-level and low-level drawing APIs for custom widgets,
- window size limits,
- and switchable themes and colour schemes.
Pushrod v0.2.27: SDL2-based GUI
This month 0.2.27 was released. Some of the updates:
- Improved documentation & examples;
- Tile Widget;
- Tab Bar Widget.
This month Oxygengine got new version 0.7.0 with Visual Novel and Animation modules that allows users to focus on making VN games easily, with virtually no code needed to be written - it is a groundbreaking start in developing a set of tools for the professional game developers.
As few might notice, Oxygengine is starting to get more complex modules, there is a reason for that - this engine is made with one big goal in mind, which is: to became a tool used by professionals, giving easy way to make complex games easily, therefore the current milestone is about bringing a basic game editor with first game maker module along with blueprints-like visual scripting and animation tool - the most important tools for visual novel game designers!
You can find sources of the project that shows how to use these modules in the engine demo projects.
Another thing that was shipped in last milestone was a module that allows to make and run your game logic designed in Blueprint-like visual scripting. Next milestone is focused on delivering a base for professional modular game editor that will allow users to easily create a complex and animated Visual Novel games using Visual Scripting - game makers for another genres are currently in planning stage.
Some of February's updates:
- C71: adds easy to use, colored, logging and an achievement counter system to track your progress through the dungeon.
- C72: 2nd layer (VGA) for the log, refactors for batched draw calls.
- C73: Systems use Specs dispatch on native, and single-thread on WASM.
This month the project was renamed and split into many crates:
This is RLTK, renamed because it is increasingly finding usage outside of just Roguelikes. It's also been divided into a number of crates, to make it easy to pick-and-choose the features you need.
rltkcrate wraps bracket-lib and re-exports in the
rltk::preludenamespace. This preserves compatibility with all existing RLTK projects.
bracket-algorithm-traits exposes the traits required for the various algorithm systems in other crates.
bracket-coloris my RGB/HSV color management system.
bracket-geometryexposes various geometric primitives and helpers. Supports other crates.
bracket-noiseis a port of Auburn's FastNoise to Rust.
bracket-pathfindingprovides a high-performance A* (A-Star) pathing system, as well as Dijkstra maps.
bracket-randomis a dice-oriented random number generator, including parsing of RPG-style dice strings such as 3d6+12.
Neovide is a frontend for neovim that brings a lot of visual niceties. It uses vulkan and skia for rendering.
Popular Workgroup Issues in Github
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;
Just an interesting Rust gamedev link from the past. :)
Assume role of the mayor of a small coastal city, caught in the middle of hilariously rapid global warming spurt.
Build a freezer for the polar bears!
That's all news for today, thanks for reading!