Welcome to the fourth 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!

Game Updates 

Le Train Dispatcher - Route Trains in Simulated Rail Network 

Demo of Le Train Dispatcher

Le Train Dispatcher (itch.io, Patreon) allows you to route trains in a fully simulated rail network. Particular care has been taken on the realistic management of light signals (block systems, switch protection), train physics and curve tracing.

The game is programmed in Rust and the main crates used are: ggez, imgui and serde.

This first version is fully playable, but if you want to comment, bring your ideas or contribute to the development of the game, in any way, do not hesitate to post a message.

Unique characteristics:

  • Realistic light signals simulation: Huge engineering work has been done to have realistic management of railway signaling.
  • No collision: Yes it's fun to watch many trains running automatically without getting in. All your actions are checked: you cannot put the trains in danger.
  • True physics
    • Each locomotive or wagon has its own weight, its driving or braking force, its coefficient of adhesion.
    • The curves are not simple circles, they are calculated with the same equations as those used in real road or rail networks.

Veloren 

Character creation screen

Veloren is an open-world, open-source multiplayer voxel RPG. The game is in an early stage of development, but is playable.

Some of November's updates:

  • The main repository reached 50,000 lines of code (according to Tokei);
  • Airshipper launcher was significantly improved;
  • game design working group was started;
  • improved auth, player creation screen, asset compression, lore, and soundtrack;
  • CI upgrades, lots of bugfixes and content upgrades.

The full weekly devlogs "This Week In Veloren...": #40, #41, #42, #43.


Check out a new video "What is Veloren?" by @DoNeo and @RonVal4 (it's in Russian but has English subtitles):

Youtube preview img

Also, they've written an article in Russian about Veloren for dtf.ru.

Math Defense 

Math Defense screenshot

Math Defense by @512Avx is a math game for kids.

Progress through addition, subtraction, multiplication, and division by solving the math problems to shoot down enemy space ships. Multiple difficulty levels and fully customizable by editing the levels.json file. Create your own levels, change the difficulty, whatever you like.

The source code is available here.

Sulis: Basic Resource Management 

Sulis logo

Sulis is a Role-Playing Game (RPG) with turn-based, tactical combat, deep character customization, and an engaging storyline.

This month, an article "Basic Resource Management" was published:

In developing Sulis, one of the primary goals is easy and powerful modding capabilities. To that end, virtually all resources are defined via simple YAML files. The idea is that anyone with a text editor can create new resources or edit existing ones easily. However, this immediately brings up the question of how to manage all these resources within the game's state. In Sulis, this is handled via a central resource manager.

While Sulis is used as the primary example, the article should apply to pretty much any game.

Also, the project (the game itself and its source code) was reviewed by gamefromscratch.com [/r/rust_gamedev].

Paddlers: Fun with Rust and distributed systems 

Paddlers architecture scheme

Paddlers is a multi-player real-time strategy browser game about making all Paddland's ducks happy.

Check out a live demo at demo.paddlers.ch (a test user's username is "Tester", password is "1").

This month the third devlog was published: "#3: Fun with Rust and distributed systems". It overviews the architecture and implementation of the project.

Antorum: Drop Tables 

screenshot: battlefield after slaying some chonkrats

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, @dooskington published the 11th devlog "Drop Tables" about the implementation of a drop table system to handle monster loot.

Recall Singularity: November Progress 

Demo of the basic ship collision

^ Demo of the basic ship collision.

Tom Leys is working on a "The Recall Singularity" game about designing autonomous factory ships and stations and this month they published a devlog post: "Recalling Nov 2019".

You can also watch a video version here.

Summary:

  • basic networked inputs to move ships or players;
  • physics for ships, including collisions;
  • Twich streaming the development;
  • a more generic approach to syncronising from Rust (Specs) to Godot.

Slavic Castles 

Just a screenshot of some battle

Slavic Castles is a card game inspired by Arcomage written in Rust using ggez/good-web-game.

You can play online here or on itch.io.

The source code is available here.

Discussions: /r/rust_gamedev

Tennis Academy 

robots demo

@oliviff released v0.0.5..v0.1.0 versions of Tennis Academy:

  • ⏰ players have patience levels and leave when they get bored;
  • ✨ score multipliers with text effects;
  • 🥇 winning and losing states;
  • 🤖 no more people, the robots have taken over!
  • 🎨 new colour palette and graphics, new buttons and UI (using Iced).

Twenty Asteroids 

space ship destroys enemies and asteroids with plasma beams

The game is now officially named "Twenty Asteroids".

@VladZhukov0 published a short video of the updated/tweaked gameplay.

Erasterra 

Flying cars

Erasterra is a geography racing game. It uses Rust to implement the matchmaking server.

It made sense to implement the matchmaker in Rust because it's designed to be a long-running service and as such it may not crash. Rust simply makes it easier to implement non-crashing software 🙌

Garden 

Garden screenshot: ruins, trees and water in craters

@logicsoup tweeted a bunch of updates, including:

Robo Instructus 

A screenshot of a later game level

Alex Butler continues to polish their "Robo Instructus" game; 1.15, 1.16, and 1.17 versions were released: Rust 1.39, bugfixes, and better translations.

You can contribute to translations here.

GitHub Game Off 2019 

gameoff logo

GitHub's Game Off is an annual month-long game jam (hackathon for building games). This year’s theme is "leaps and bounds".

Amethyst Games 

  • Azriel published a "That Looks Good On UI" devlog.

    What’s new:

    • Animated menus and backgrounds can be defined.
    • Player names can be specified in controller configuration.
    • Winner is displayed when a game ends.

    Behind the scenes, the following code maintenance has been made:

    • Moved all tests into a separate crate – 1.9x speedup, 65% less disk usage.
    • Assets are loaded into separate asset components – easier to share logic between different types of objects.
    • Asset loading is done in stages, in preparation for the ability to disable certain stages.

    Will: Winner Status Demo

  • @takeryo_eeic named their hexagonal game "Conquest", added a main menu, and showed a video of new map generator and map scrolling.

    Main menu demo

Library & Tooling updates 

Memory Arena 

how entities/handles are related to each others

@kooparse published a post about implementing a quick memory arena.

For my game, I decided to store almost every entity in a big chunk of memory allocated only once when the program boot. I am using this technique for three reasons. First, I want full and precise control over how memory is managed in the game, second I want better data locality in order to increase cache hits from the cpu, and finally, at runtime asking the operating system in order to allocate more memory is slow.

wgpu v0.4 

some webgpu logo

wgpu is a library in Rust that is meant to be the go-to solution for most graphics and compute needs.

wgpu-rs version 0.4 was released on crates. wgpu is based on gfx-hal-0.4 and includes changes from the previous blog post;

A few notable additions are:

  • proper Windows 7 support;
  • support for multiple clients on the same GPU server;
  • slimmed-down Rendy dependencies (memory and descriptor);
  • new skybox example.

Lyon has updated examples for this version, showing how to draw vector graphics on wgpu.

Also, wgpu is now a part of Gecko code base for powering the emerging WebGPU implementation.

Book: Learn Luminance 

luminance is a type-safe, type-level and stateless Rust graphics framework.

This month, @phaazon released a "Learn Luminance" book. Luminance's wiki was deprecated and the book is now the central reference to onboard newcomers to use luminance as well as people who would like to give luminance a try and who knows nothing about rendering.

Discussions: /r/rust


Btw, @resinten is working on a game using luminance:

space ship pew pew

Pixels 

Pixels logo

Pixels by @kodewerx is a tiny hardware-accelerated pixel frame buffer based on wgpu. It's supposed to be used for emulators, software rendering, 2D animations and games prototyping.

Check out the URLO announcement post.

Discussions: /r/rust_gamedev

Metropolis 

metropolis by @GuyL99 is a high-level graphics renderer, with easy functions to use.

This crate should make graphics programming easy with functions like rect, ellipse, line, text, and such, and it's fast with 60-120 FPS on a bad computer.

Discussions: /r/rust_gamedev

skulpin 

physics demo video

^ Click to see a demo video.

skulpin by @aclysma provides an easy option for drawing hardware-accelerated 2D by combining Vulkan and Skia.

ultraviolet v0.2 

ultraviolet v0.2 were released by @fu5ha. This release introduces Bivectors and Rotors and improved usability.

Discussions: /r/rust


rayn fractal render example

Also, Rayn v0.3 was released recently - it's a CPU-based path tracing renderer focused on rendering SDFs (specifically fractals) that is based on ultraviolet.

Mun v0.1 

Mun logo

Mun is a scripting language for gamedev focused on quick iteration times that is written in Rust.

As a language, Mun is still far from production-ready, but this release gives you a glimpse of what natively supported hot reloading will look like in the future. The purpose of this release is to showcase our progress and gather feedback from those brave souls willing to try out Mun at this early stage.

To get started, read the Mun Book and have a look at Rust examples.

For the full roadmap of Mun, have a look at their Trello board.

Discussions: /r/rust

glsl v3.0 

glsl is a crate to parse GLSL formatted sources into a typed AST. The crate exposes several methods, types and modules to perform transformations on that AST, among outputting GLSL, SPIR-V generation and visiting the AST with possible in-place mutations.

glsl v3.0 was released by @phaazon:

  • the CPP directives (e.g. #line, #pragma, #ifdef, etc.) are now all implemented;
  • improved parsing of deeply nested expressions;
  • multiline annotations () is now supported as a best-effort;
  • other bugfixes.

SPIR-Q 

example output

SPIR-Q is a lightweight SPIR-V query library.

SPIR-Q <...> can be very useful for dynamic graphics/compute pipeline construction, shader debugging and so on. SPIR-Q is currently compatible with a subset of SPIR-V 1.5, with most of graphics capabilities but no OpenCL kernel capabilities covered. Btw, SPIR-Q currently only depends on the Rust standard library.

Discussions: /r/rust

Iced: Beta Version 

Iced demo

Iced is a renderer-agnostic GUI library focused on simplicity and type-safety.

This month, a beta version of Iced was released. The most important new features are:

Also, Cryptowatch is now sponsoring the development of Iced!

Embark's Stockholm Rust Meetup and Newsletter 

Embark logo white on black

Videos from Embark's Stockholm Rust Meetup arrived:

Also, Embark started a newsletter. Check out the first issue "11/08/2019 - Rust, Blender, Hacktoberfest, and more: Newsletter 001 from Embark".

Creative Coding in Rust with Nannou 

Nannou example screenshot

A beginner-level tutorial article teaching how to build a small demo with the nannou creative coding framework.

RLTK & Rust Roguelike Tutorial 

Dungeon generation demo

The Roguelike Tutorial by @blackfuture includes almost 60 chapters now and continues to grow!

Some of the November's updates:

  • backtracking/persistent maps,
  • dynamic colored lighting,
  • town portals, and teleportation in general (including optionally affecting NPCs),
  • cheat mode (for testing later maps).

nes-rust - WASM NES Emulator 

Screenshot of the NES emulator

nes-rust by @superhoge - NES(Famicom) emulator in Rust on the Web, compiled to WASM.

Check out the online Demo.

Amethyst 

Amethyst logo

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. :)

Pascal Penguin logo

^ click to see the release trailer

"Adventures of Pascal Penguin" by Matthew Michelotti is a 2D grid-based puzzle game with levels designed around slippery ice.

Push blocks and bounce off bumpers as you try to reach the crystal at the end of each level. Grab invisibility orbs to walk through solid objects. Build a safe path over boiling lava and ice-cold water. There are 40 levels spread out across 5 zones. Can you complete them all?

Written using the Gate game engine.


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.