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!
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.
- 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 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.
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.
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.
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.
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 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.
^ Demo of the basic ship collision.
You can also watch a video version here.
- 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.
- ⏰ 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).
The game is now officially named "Twenty Asteroids".
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 🙌
@logicsoup tweeted a bunch of updates, including:
GitHub Game Off 2019
How long can you stay alive?
A life/environment simulator with a bit of rogue-like tossed in.
- 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
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 is a library in Rust that is meant to be the go-to solution for most graphics and compute needs.
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 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.
Check out the URLO announcement post.
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.
^ Click to see a demo video.
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.
For the full roadmap of Mun, have a look at their Trello board.
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.
- the CPP directives (e.g.
#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 <...> 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.
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.
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];
Also, Embark started a newsletter. Check out the first issue "11/08/2019 - Rust, Blender, Hacktoberfest, and more: Newsletter 001 from Embark".
A beginner-level tutorial article teaching how to build a small demo with the nannou creative coding framework.
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).
Check out the online Demo.
"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";
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;
Just an interesting Rust gamedev link from the past. :)
^ click to see the release trailer
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!