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 

Thanks cloud: Amethyst, ggez, gfx-rs, specs, serde and many other projects

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.

Are We Game Yet? homepage

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 

Invitation widget: 243 members total, 98 online

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 

Tallin's old town

@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 in-game screenshot

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): Rusty Shooter game

Colony Genesis 

itch.io page: ASCII art logo with an ant, game features, video and screenshots

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 

Rolling mountain landscape 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

veloren development 1 year of Veloren development. Click for the full video!

You can read more about some specific topics:

Hanging out

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 

Gameplay demo: two giant tank armies clashing gameplay demo (35000 units)

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);

Unit editor demo: move agent's parts Demo of the unit editor

Map editor demo: use pencil tool to instantly create a lake and mountains Demo of the map editor

Univer City v1.0 and Open Source Release 

logo

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.

Demo: builing a classroom

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 preview

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

Latest releases.

Video: Everpuzzle rewrite - Code Walkthrough (code outdated).

Antorum 

Spider NPCs

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 

Traffic lights

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 screenshot showing winds and blips

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 

release

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 

New site with links to Twitter, Discord, and Twich

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 

Lonely Star screenshot

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:

Akigi 

High detail terrain chunk with PRR 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:

February's full devlogs: #053, #054, #055,

Will 

Will Network Play Screenshot

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 

logo

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 

Noodle game physics demo

@Fryer00 tweeted a bunch of updates about their WIP Box2D physics game prototype:

Garden: January and February Devlogs 

pyramid generation demo

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 

Magic missiles in Grumpy Visitors

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 

cities, planes and keys Turn back planes to the port, by clicking right keys to the virus beat.

Make China Great Again (source) by @PsichiX is a GlobalGameJam game written using Oxygengine.

Try it online.

pGLOWrpg 

37 possible unique biomes

@Roal_Yr tweeted a bunch of updates about their "pGLOWrpg" project:

Robo Instructus 

logo

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 

Harvesting and refining some Gold Harvesting and refining some Gold.

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 

walking demo

@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 

Demonstration of interpolation

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) 

Salva logo

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.

Read the full devlog here.

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 Components 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 

Riot Games API logo: steampunk

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 

Logo

Superluminal is a next-generation CPU sampling profiler for C/C++ on Windows that has recently got an official Rust support.

UI example


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 

Real-world demo of using Rust on RG-300

@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.

See it in action here.

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.

Akari WIP screenshot

miniquad: "Rust 2D Engine 2020 Roadmap" 

mainloop async/await experiment in macroquad mainloop async/await experiment in macroquad

miniquad by @fedor_games is a safe cross-platform rendering library focused on portability and low-end platforms support.

This month:

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 

wgpu-rs logo

Here're some of the gfx/wgpu ecosystem February updates:

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:

youtube screenshot: glowing spheres

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 widgets example

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 

Layout example

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 

Oxygengine logo

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!

Oxygengine Visual Novel Teaser

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 

Different font makes the log easier to read

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 the rltk:: and rltk::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 Animated Cursor Example

Neovide is a frontend for neovim that brings a lot of visual niceties. It uses vulkan and skia for rendering.

Meeting Minutes 

See all meeting issues including full text notes or join the next meeting.

Requests for Contribution 

Bonus 

Just an interesting Rust gamedev link from the past. :)

A screenshot of the beginning of the game

"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!

Discussions of this post: /r/rust, twitter.