This Month in Rust GameDev #7 - February 2020
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!
Ecosystem Survey Results
The results of the Rust GameDev ecosystem survey were published.
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.
Discussions: /r/rust, /r/rust_gamedev
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!
New Rust GameDev Discord Server
A new Discord server dedicated to Rust GameDev was started by @dasifefe this month: invitation link.
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.
RustTallinn
@logicsoup - one of the developers behind Garden - is planning to organize the first (and hopefully one of many) Rust Hack’n’Learn meetup in Tallinn on March 13.
A Hack’N’Learn is an event where we get together and work on personal (or open-source) projects on our own computers.
If you’re interested, visit tallinn.rs and follow @RustTallinn.
Game Updates
Rusty Shooter
Rusty Shooter is a Quake3-like first-person shooter written in Rust using rg3d engine.
Features:
- 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).
Small gameplay video (work-in-progress):
Colony Genesis
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.
Veloren
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.
February’s full weekly devlogs: “This Week In Veloren…”: #53, #54, #55, #56.
Oxidator
Oxidator by @Ruddle is a real-time strategy game/engine written with Rust and WebGPU. It’s inspired by Total Annihilation, Supreme Commander, Spring Engine, and Zero-k.
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);
Univer City v1.0 and Open Source Release
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 month, v1.0 was released on Steam along with releasing the game’s sources under GPL-3.
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.
Discussions: /r/rust
Everpuzzle
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
Video: Everpuzzle rewrite - Code Walkthrough (code outdated).
Antorum
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”.
Scale
Scale is a recent project about modern day society simulation from the bottom-up by Uriopass.
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.
Discussions: /r/rust_gamedev
Ultimate Scale
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.
A custom 3D rendering pipeline based on glium called Rendology was developed for this project. A blog post talks about its design and relation to Ultimate Scale.
Discussions: /r/rust_gamedev
Tennis Academy Dash
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.
Dwarf World
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.
Lonely Star
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.
It was developed by 17cupsofcoffee, using the Tetra 2D game framework, for Weekly Game Jam #135.
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.
Akigi
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;
February’s full devlogs: #053, #054, #055,
Will
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’s New Trailer
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.
Noodle Cat
@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.
January and February devlogs were posted by @logicsoup. Some of the updates:
- 🌘 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 First Update. Winter Progress
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.
Make China Great Again
Make China Great Again (source) by @PsichiX is a GlobalGameJam game written using Oxygengine.
pGLOWrpg
@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;
Robo Instructus
Alex Butler continues to polish their “Robo Instructus” puzzle game - 1.23 and 1.24 versions were released: dependency updates, bugfixes and performance optimizations.
Recall Singularity: February Progress
Tom Leys is working on a “The Recall Singularity” game about designing autonomous factory ships and stations. This month, they published a devlog post: “Space Factory Building in Feb 2020”.
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.
Discussions: /r/rust
For the Quest
@seratonik tweeted a bunch of updates about their “For the Quest” (working title) game project:
- Switched to the
specs
ECS; - 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
Fix Your Time Step in Rust and GGEZ
joetsoi has written a blog post, demonstrating how the concepts from the well-known ‘Fix Your Timestep’ article can be applied when making games with Rust and GGEZ.
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!
This Month in RustSim #9 (Nov 2019 to Feb 2020)
Main updates:
- 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.
Discussions: /r/rust
savefile 0.6.1
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.
For details, see the github page or the savefile documentation.
specs 0.16
specs is an entity-component system (ECS) library, designed for high
performance. This update increases the MSRV to 1.38 and removes the "nightly"
feature.
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,
and the "nightly"
feature was necessary to discover what resource that is.
In addition, the Send
and Sync
trait constraints are
removed from resources and Component
s when the
"parallel"
feature is disabled – enabling types such as
wasm_bindgen::JsValue
to be used with non-parallel specs
.
For more details, please see the specs
changelog.
Riven
riven is a Riot API library for Rust.
Riven handles rate limits and large requests with ease. Data structs and endpoints are automatically generated from the Riot API Reference (Swagger).
Discussions: /r/rust
weasel
weasel by @Trisfald is a customizable battle system for turn-based games.
- 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 v0.3
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 v0.23
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.
superluminal-perf-rs
Superluminal is a next-generation CPU sampling profiler for C/C++ on Windows that has recently got an official Rust support.
Embark have recently open-sourced superluminal-perf-rs - a small crate that integrates with Superluminal profiler on Windows.
Example usage:
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
@alexpdp7 shared their experience of writing an interactive application in Rust for the retro RG-300 console.
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 v0.3
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”
miniquad by @fedor_games is a safe cross-platform rendering library focused on portability and low-end platforms support.
This month:
- 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.
luminance v0.39
luminance by @phaazon is a type-safe, type-level and stateless graphics framework.
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 v0.26
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.
gfx & wgpu
Here’re some of the gfx/wgpu ecosystem February updates:
-
Check out a new “Lear WGPU” tutorial.
-
@kvark gave a “Building WebGPU with Rust” talk at FOSDEM. You can watch the recorded video here.
-
naga is a new experimental shader translation library for the needs of gfx-rs project and WebGPU. It’s meant to provide a safe and performant way of converting to and from SPIR-V.
-
The abovementioned Oxidator RTS game is based on wgpu.
-
nbodysim is a realtime 3D N-Body-Simulation.
-
nannou in an open-source creative-coding toolkit for Rust. This month its graphics backend was transitioned to wgpu.
-
An extremely helpful
vertex_attr_array
macro was added to wgpu. -
After the support for unstable WebIDL was added to wasm-bindgen the work on integrating web-sys into wgpu-rs has begun.
tikan
tikan by @siebencorgie is a Rust/Vulkan based 3d engine that tries to use high-resolution voxels to real-time ray-trace the final picture.
This month a new video was released to showcase new voxel renderer:
Patchwork
Patchwork is a convenient crate for drawing tiles from a tilesheet
using a ‘SpriteBatch’ with ggez
.
It is an update to the Mosaic
crate by @Repnop,
which is no longer maintained.
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
Pushrod by @KenSuenobu is a Cross Platform UI Widget Library for Rust that uses SDL2 and leans heavily towards the KISS principle.
This month 0.2.27 was released. Some of the updates:
- Improved documentation & examples;
- Tile Widget;
- Tab Bar Widget.
Oxygengine
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.
bracket-lib (RLTK) & Roguelike Tutorial
The Roguelike Tutorial by @blackfuture includes more than 70 chapters now and continues to grow!
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.
bracket-lib (previously rltk_rs) by @blackfuture is a Rust implementation of C++ Roguelike Toolkit.
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.
rltk
crate wraps bracket-lib and re-exports in therltk::
andrltk::prelude
namespace. This preserves compatibility with all existing RLTK projects.bracket-algorithm
-traits exposes the traits required for the various algorithm systems in other crates.bracket-color
is my RGB/HSV color management system.bracket-geometry
exposes various geometric primitives and helpers. Supports other crates.bracket-noise
is a port of Auburn’s FastNoise to Rust.bracket-pathfinding
provides a high-performance A* (A-Star) pathing system, as well as Dijkstra maps.bracket-random
is a dice-oriented random number generator, including parsing of RPG-style dice strings such as 3d6+12.
Read the full announcement post here.
Neovide
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
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;
Bonus
Just an interesting Rust gamedev link from the past. :)
“It’s Not Cool” is a LD42 turn-based strategy game by @Ratysz. It’s based on the GGEZ game engine.
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!
The source code can be found here.
Discussions: /r/rust_gamedev, /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!