This Month in Rust GameDev #4 - November 2019
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
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
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):
Also, they’ve written an article in Russian about Veloren for dtf.ru.
Math Defense
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 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 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
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
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
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
@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
The game is now officially named “Twenty Asteroids”.
@VladZhukov0 published a short video of the updated/tweaked gameplay.
Erasterra
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
@logicsoup tweeted a bunch of updates, including:
Robo Instructus
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
GitHub’s Game Off is an annual month-long game jam (hackathon for building games). This year’s theme is “leaps and bounds”.
-
“TopDown” by @fedor_games made with their own unannounced game engine (source code).
-
“Compact Space” by @fischspiele made with specs and Tetra (source code).
How long can you stay alive?
-
“evo” by @ZappedCow made with Tetra (source code).
A life/environment simulator with a bit of rogue-like tossed in.
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.
-
@takeryo_eeic named their hexagonal game “Conquest”, added a main menu, and showed a video of new map generator and map scrolling.
Library & Tooling updates
Memory Arena
@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
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:
Pixels
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
^ 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
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 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
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 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:
- A basic renderer built on top of wgpu;
- A windowing shell powered by winit;
- A web runtime based on dodrio (try the tour on iced.rs);
- First-class async actions, leveraging futures;
- New widgets, like text inputs and scrollables.
Also, Cryptowatch is now sponsoring the development of Iced!
Embark’s Stockholm Rust Meetup and Newsletter
Videos from Embark’s Stockholm Rust Meetup arrived:
-
“An Unholy Fusion of Rust and C++ in physx-rs” - Tomasz Stachowiak, senior software engineer at Embark, details their experiences combining Rust and C++ code during the creation of the physx-rs open source project [/r/rust];
-
“Rust, Open Source, Game Dev” - Jake Shadle explains how Rust, open source, and game development fit together [/r/rust];
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
A beginner-level tutorial article teaching how to build a small demo with the nannou creative coding framework.
RLTK & Rust Roguelike Tutorial
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
nes-rust by @superhoge - NES(Famicom) emulator in Rust on the Web, compiled to WASM.
Check out the online Demo.
Amethyst
-
Blaine Price is working on a “The Ten Top” game and shared a “Rustlang Up Some Grub at The Ten Top” devlog about dependency graphs;
-
@mvlabat posted “How can we improve custom shaders user experience?”;
-
“Future of nalgebra and math in Amethyst” discussion;
-
“Skepticism about Rendy” discussion;
Popular Workgroup Issues in GitHub
- #50 “Linking Time”;
- #51 “Using wasm-bindgen for games”;
- #68 “Modding”;
- #69 “Input Handling”;
- #71 “Proof Of Concept Crate: Simplistic Bump Allocator”;
- #73 “Membership Listing”;
Meeting Minutes
See all meeting issues including full text notes or join the next meeting.
Requests for Contribution
- @kyren is looking for a new maintainer for “rlua”;
- Add assets (graphics, levels, sounds) to Le Train Dispatcher;
- /r/rust: “Need help porting steam libraries to rust”;
- 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;
Bonus
Just an interesting Rust gamedev link from the past. :)
“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!