+++ title = "This Month in Rust GameDev #11 - June 2020" date = 2020-07-01 transparent = true draft = true +++
Welcome to the eleventh 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!
You can follow the newsletter creation process by watching the coordination issues. Want something mentioned in the next newsletter? Send us a pull request. Feel free to send PRs about your own projects!
Table of contents:
- Game Updates
- Learning Material Updates
- Library & Tooling Updates
- Popular Workgroup Issues in Github
- Meeting Minutes
- Requests for Contribution
- Jobs
- Bonus
^ Click to see the latest version of the game's trailer
Way of Rhea (steam) is an upcoming puzzle platformer that takes place in a world where you can only interact with objects that match your current color. It's being build in a custom engine, and custom scripting language both written in Rust by Mason Remaley. This month's updates:
- A demo was released as part of the Steam Game Festival! The festival has since ended, so the demo is no longer available.
- @masonremaley ran An AMA at /r/rust_gamedev and /r/IndieDev about the development of the game.
- The studio hosted a speedrun competition as part of the Steam festival, here's the winning run.
- A colorblind friendly mode was added to the game, and a couple other changes were made in response to feedback from the festival.
Follow development updates on the game's Twitter or subscribe to its newsletter.
A/B Street - Adjust Traffic Patterns in Real Cities
^ Measuring the effects of some changes
A/B Street is a traffic simulation game exploring how small changes to roads affect cyclists, transit users, pedestrians, and drivers.
June highlights:
- Alpha release with a trailer, an excited reaction from r/seattle, and some local press coverage
- Support for parking lots, automatically inferring the number and position of individual slots from OpenStreetMap geometry
- Names of roads shown in-game, in a way that doesn't cause clutter with agents moving nearby
- Work starting on light rail and restricting through-traffic to zones
A/B Street uses a custom GUI library, leveraging glium
, usvg
, and
lyon
. Help with Rust and visual/game design is always welcome! Check out the
roadmap and good first issues.
^ Animation improvements
Veloren is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World.
In June, Veloren did a big interview with GamingOnLinux, be sure to check it out! Veloren's lead artist also started a weekly blog about his work on Veloren, which you can see here. Veloren recently reached the first page of most starred projects on Gitlab! The Veloren Youtube channel also reached 1000 subscribers.
A lot has been done over the last month towards 0.7, which is slated to release at the beginning of August. Lots of work has been done improving UI and animations. These will help towards the goal of 0.7 being the "progression" update. Many improvements have been made to the continuous integration system to make it more reliable and faster. Mac support was added to Airshipper, the Veloren launcher. Significant work was done on the world simulation front. This includes economic simulations that will represent trade and resource pricing in settlements and cities. Castle generation is also now in the works.
Test coverage and documentation has started to improve, and a workflow around it is being developed. The project is now hosting a proper documentation site that is updated with each merge. A #ux working group was created to facilitate discussions on improvements to player interactions in Veloren. Lots of translations were merged, including Swedish, Polish, and Brazilian Portugese. The skill system is moving on to implementation, being a coordinated effort between the game design, art, and combat working groups.
You can read more about some specific topics from June:
- Mod Analysis
- Improving CI
- Economic Research
- Compilation Improvements
- Improving Test Coverage
- Skill System Work
- Animation updates
June's full weekly devlogs: "This Week In Veloren...": #70, #71, #72, #73, #74.
In July, work will be done to complete the progression systems. There will be financial meetings held to discuss how funds from the project's Open Collective will be distributed.
Also, check out a talk about open source and Veloren:
Pont is a multiplayer online board game based on Qwirkle, implemented by Matt Keeter. Both the client and server are written in Rust, using WebAssembly to run the client in the browser without any Javascript (besides a small shim).
It can be played online here!
The system architecture is described in a blog post and the source is available on Github
Discussions: /r/rust, Hacker News
runner is a simple side-scrolling endless runner game that takes place in a bright world that only has our fearless adventurer & a few pesky beings that are bent on keeping her from running! It uses specs for ECS and has multiple frontends: sdl2 & quicksilver. Between the two frontends it can target the majority of the platforms: Web, Mac, Linux, Windows (untested) & possible even iOS & Android.
^ Part of the game map
Animal Fight Chess (斗兽棋, "Doe Show Chee") by @netcan is a Rust implementation of a popular Chinese game.
To win the game, one player must successfully move any animal into the Den(兽穴) of the opponent or eat all animals of the opponent. The basic move is just one space either forward, backward, left, or right. The pieces never move diagonally. Each player has eight pieces, different animals with different degrees of power, a larger power piece can eat a little power piece, but rat can eat elephant. Here's a picture of the pieces, their English names, and relative powers indicated by a number. See full rules at ancientchess.com or Wikipedia.
The project uses alpha beta pruning algorithm for AI and provides a python module to use AlphaZero algorithm for training.
Guacamole Runner is a small game made with Tetra and Shipyard in approximately 2 days by @EllenNyan. The game's concept is that the player is constantly falling and must jump off planes to stay in the air. When they go over the top of the dirt tiles they plant flowers which gives them points.
Wooting Snake is a snake game where the visuals are represented on your keyboard lights, instead of a computer screen.
TanTan released a video documenting the process making this project.
^ Click to see a demo video
Weegames is a fast-paced minigame collection. There are 23 odd games all made using free images and sounds. The more minigames you beat the faster they get.
The source code is available here.
Just what everyone's always wanted, Rust on the Sony PSP! 😆
This project is a port and improvement of the unofficial C/C++ PSPSDK from 2005 It does not require a custom GCC toolchain to be installed. Only Rust nightly and a cargo subcommand.
The psp crate provides a psp::sys
submodule that houses the entire Sony PSP
API. We are working to have theseinterfaces merged into the libc crate.
The PSP unfortunately uses non-standard dynamic linking,
(and some libraries are statically linked!), so function definitions
marked extern are not enough. Eventually we will wrap this sys lib with a more
rust-friendly library.
Rather than patching LLVM or rustc, the rust-psp team has also merged a
mipsel-sony-psp
target upstream, and published cargo-psp. This is a subcommand
that works exactly like cargo build, except it also builds the crate into a
PSP-specific executable format called PRX
and packages that into an
EBOOT.PBP
, the standard format for a PSP Homebrew.
The crate has reached full user-mode parity with the unofficial C/C++ SDK.
Kernel-mode support still needs to be worked on. Aside from library
imports, there is also support for PSP-specific custom assembly instructions
via the vfpu_asm!
macro, with no need for a custom compiler toolchain.
There is also optional embedded-graphics
support and a function to benchmark
or time your code.
The next major milestone for rust-psp is std support. If you are interested in helping out, please feel free to join the rust-psp channel in the PSP Homebrew discord server.
^ Mun language server diagnostics in action
Mun is a scripting language for gamedev focused on quick iteration times that is written in Rust.
After the dust of the Mun v0.2 release settled, this month focus has been on fixing several issues found by community members, improving the overall quality of the code base and working towards the next release: Mun v0.3.
Their June updates include:
- Make It or Break It contest;
- several fixes for issues that arose thanks to the contest;
- the foundation for Mun projects;
- an initial language server setup;
yaks is a minimalistic framework for automatic multithreading
of hecs
ECS library using Rayon data-parallelism library.
While the project itself started earlier this year, with this month's release
yaks
gained an overhauled API, further leaning into the promise of
simplicity:
- systems are any functions or closures of a specific signature,
Executor
is a container for one or more systems,- system execution order can be defined when building an
Executor
to create concurrent chains of systems, - resources used by systems (any data that is not associated with an entity) are now borrowed for the duration of execution, instead of being owned by the framework.
All items in the library are exhaustively documented, and the repository contains a fully annotated example.
Enabled-by-default parallel
cargo feature can be disabled to force
everything in yaks
to become single-threaded, which allows using code
written with the framework on platforms without threading - notably, web.
Tetra is a simple 2D game framework, inspired by XNA and Raylib. This month, version 0.4 was released, featuring:
- A rework of the text rendering API, which improves performance and fixes a number of long-standing bugs
- Functions for capturing the player's mouse
- Various tweaks and bug fixes under the hood
Also, a new guide has been added to Tetra's website, listing some things to consider when distributing your game to the public. This guide is still a work in progress, so contributions are welcomed!
Arsenal is the concept for a 2D and 3D game engine that is fully integrated with Blender and built on a Rust core. The engine will be built around an entity component system ( probably Shipyard ) for its performance and game design advantages. The vision of Arsenal is to build an Open Source game engine that is suitable for games of any scale and that is easily approachable by a wide audience of both complete beginners and seasoned experts.
Arsenal currently has a POC working, but there is no support for adding custom game logic. The next major step for Arsenal is to get initial scripting support in Shipyard. The scripting plan for Arsenal borrows heavily from the Amethyst scripting RFC with the first target scripting language being Python. Other languages that are candidates for being added later are be Mun, Lua, and maybe other languages written in Rust such as Gluon.
More information on the Arsenal development direction can be found in the latest Arsenal development blog post.
Katharos Technology has gone live on GitHub Sponsors as a means to fund development of the development of the Arsenal game engine and supporting Rust gamedev libraries and tools such as GFX, and WGPU.
Vimnail - a Mouseless Image Editor
Vimnail is a WIP mode-based image editor inspired by Vim. The goal of the project is to be able to compose images without using the mouse.
TanTan also released a devlog video about the project.
See all meeting issues including full text notes or join the next meeting.
- 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;
Just an interesting Rust gamedev link from the past. :)
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!