Welcome to the 28th 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!
- Rust GameDev Meetup
- Game Updates
- Learning Material Updates
- Engine Updates
- Tooling Updates
- Library Updates
- Other News
- Requests for Contribution
Rust GameDev Meetup
The eleventh Rust Gamedev Meetup happened in November. You can watch the recording of the meetup here on Youtube. The meetups take place on the second Saturday every month via the Rust Gamedev Discord server and are also streamed on Twitch. If you would like to show off what you've been working on at the next meetup on December 11th, fill out this form.
The melee weapon in action
- Support different types of ships that players can choose.
- Add a melee weapon.
Screenshot of One-Click Ninja
Fish Fight is a fast-paced 2D brawler game, played by 1-4 players online or on a shared screen, built with macroquad game engine.
This month it got a trailer, and the game is now available to wishlist on Steam!
They recently implemented a mission system, where you can select one of three types of missions to go to from the central camp. One is to defend supplies from a horde of zombies, the second is to search a facility for some object or clear all the zombies and the last one is to fight your way through a tunnel full of spiders and other enemies! They also worked on a tutorial.
Screenshot of Halloween Mahjong Solitaire
The challenge was to create a Halloween-themed game based on four emojis. In this case the chosen emoji combination was: skull_and_crossbones, bat, game_die, and shinto_shrine (☠️ 🦇 🎲 ⛩️).
The game is part of an open source repository of several mini-games that use Syn9's Rust Mini Game Framework.
You can follow the development of Country Slice on Twitter.
A merchant paused in their travels
Veloren is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World.
In November, Veloren started a new initiative to help new developers learn more about the codebase; the Veloren Reading Club. You can watch the first and second sessions now. Hats were merged, and a major rewrite of the server-hosting section of the book happened. New textures were made for item drops. Some concept art was created for what massive cities could look like. Dynamic weather was added, and you can watch that in action.
Experience sharing went through a large overhaul to evenly distribute EXP gained across groups. The difficulty of dungeons was adjusted to be more balanced for new players. Persistence was added to skills, and measures were put in place to help with future migrations to new skill trees. Work was done on site2, the system that is used to generate structures procedurally. This will help make the variance more dynamic by adding more parameters that can be adjusted. In December, Veloren will release 0.12, hopefully with some holiday spirit!
Watch out! The entire world bends around you!
BENDYWORM (GitHub, Twitter) by @bauxitedev is a platformer with a twist: the entire world bends and twists around you as your progress through the level. Why? Because you're inside of a gigantic worm, and worms are bendy.
The game was made for GitHub Game Off 2021, and uses
godot-rust behind the
Molecoole is a top-down shooter roguelike where you build your character from different atoms. Each atom has a unique ability to provide tons of variety between playthroughs. It's made using the Bevy Engine.
In December their main focus will be on audio and polishing the game.
November was dedicated to the launch of the Steam Store page and associated trailer showcasing Hydrofoil Generation's custom Rust engine in motion for the first time. Constant tweaks to the boat behavior and addition of gameplay features are ongoing as the planned Q2 2022 Steam Early Access release gets closer and closer.
December 2021 will see an attempt to port the rendering backend of the game from DirectX 11 to WGPU to widen the number of platforms reachable with a particular interest in the Steam Deck that seems to offer the perfect controller layout for such a demanding simulation as Hydrofoil Generation.
You will be able to follow the progress of the port Mondays and Fridays on Twitch.
In November, a new major update was released that overhauled the automatic watering system. In addition, an automatic stair builder and a grass-cutting tool was added to reduce the tediousness of these common tasks.
Combine&Conquer by Martin Buck is a WIP strategy game about automation similar to Satisfactory or Factorio.
This month Martin finished writing a detailed devlog for the project from the first commit up until now. A few dozen short posts cover various topics including simulation of arms and conveyor belts with moving items, blueprints, testing, rendering, save and load, tech tree and research, and multiplayer.
One of the characters can spend super meter to rewind time, this is strong but pretty situational.
PaddlePunks is a versus tennis game by Felix Windström with a diverse cast of characters and playstyles and online play with rollback netcode.
- Some engine work to improve performance on laptops with integrated GPUs
- Balance updates to make the skeleton less overbearing
- Presented the game at Rustfest in an interactive session.
Shroom Kingdom (GitHub, Discord, Twitter) is an upcoming play-to-earn video game built with web technologies running on the NEAR Blockchain. It is a 2D platformer, where players can also build their own levels and share them with others.
Currently, a prototype of the game is in development. The game is written with the Bevy game engine and the Rapier physics engine and is compiled to WebAssembly. The prototype is still very basic, but you can already place and remove blocks and have a feeling about the physics recreation of the original games.
In the past months, there also has been the SHRM token launch and a token airdrop for NEAR early adopters. The Shroom Kingdom DAO is looking for people, who want to become involved and get paid with their very own token.
To onboard new users to blockchain gaming, a linkdrop campaign is currently in development, where people can claim a small amount of NEAR token to create their own wallet.
Tetra is a simple 2D game framework, inspired by XNA, Love2D, and Raylib. This month, version 0.6.7 was released, featuring:
- Updates to the gamepad backend, adding rumble support for a much wider variety of controllers (including DualShock 4s)
- Various bugfixes and docs improvements
For more details, see the changelog.
Additionally, development has begun on version 0.7 - check out the planned features and changes, and feel free to suggest more!
The hottest HTML5 + WASM game engine for games written in Rust with web-sys.
- First few chapters of the book explaining how Oxygengine works in: Oxygengine Essentials Book.
- New hardware-accelerated renderer based on Material Graphs (to allow making faster and better quality game visuals - more about that in Material Graph based rendering chapter).
- New Overworld game module (which aims to provide all essential features needed by RPG game developers, to let them focus on making an actual game).
- New AI feature module (WIP) that integrates Emergent AI crate with the engine.
- Plugin-based asset pipeline as well as support for LDtk software projects.
All of these changes mark the beginning of stabilizing phase of the engine. The API more or less won't change much - now the focus is put entirely on the features that will push progress towards the Ignite visual game editor for artists and game designers to use.
Learning Material Updates
The Raytracer Challenge is a project with the goal to write a raytracer from scratch in Rust, while showing each step of the way as a weekly live coding session. Everything is documented, starting with implementing Vectors and Matrices all the way to creating Phong Lighting.
November has been a busy month for the project with lots of visual changes in the raytraced results:
Basic animation support came along allowing the easy creation of video sequences.
More realistic and life-like scenes due to Shadow Casting.
As a new basic body type Planes came to life.
The Rustacean Station is a podcast about the Rust language.
In November, Herbert Wolverson was interviewed about game development in Rust. In this episode, lots is discussed about existing game development engines, and how Rust is breaking into this space with engines like Bevy, Amethyst, and RG3D. There is also a discussion on the Entity Component System paradigm in comparison to Object Oriented Programming.
In this blog post, Raph Levien describes the current state of coding on a graphics card. The post describes how going about writing custom code still induces many issues in this day and age, and what modern technologies can be used to help make this easier. Rust-gpu is mentioned as a possible way to write compute shaders in a "real language".
A nasty demon monster at the exit to Abyss
The Roguelike Tutorial by @herberticus got a new 75th (!) chapter that shows how to generate a chaotic Voronoi-based city plaza inhabited by dark elves and adds a new big demon enemy to guard the Abyss portal.
You can battle your way down to the Dark Elf Plaza, and find the gateway to Abyss - but only if you can evade a hulking demon and a horde of elves---with very little in the way of help offered. Next up, we'll begin to build the Abyss.
A Dungeon Crawler running in a browser
Another update from @herberticus is a bonus article for the Hands-on Rust book: "Run Your Rust Games in a Browser" that guides the reader through the basics of building and publishing bracket-lib games in WebAssembly.
In the last month, a relative position and velocity calculation system has been added. This is due to the inaccuracy of astronomic data. With this new method that relies on the orbital elements of two body systems getting data for multibody simulation is now possible.
Apart from this new equation set, SPV now also has a more standard color scheme based on the one GitHub uses. This month also came with numerous bug fixes and a more concrete plan for future development.
It is useful for creating mood boards, daily art reports, presentations and other collages.
Features so far:
- Interactive loading
- Scaling images to equal size
- Optional margin between images
- Custom aspect ratio; now you can set aspect ratio by text in any form
- CLI; you can use it without GUI and embed it into your project manager tool
The previously announced Alpha release was delayed as core devs returned to school - January is the new goal. Development now continues to pick up speed. Design of the project website has continued for its launch soon, alongside the Alpha release.
The project upgraded to the Rust 2021 edition and made big improvements to the
frontend TypeScript and web infrastructure. The editor UI is now fully
responsive at small window sizes. Unsaved document tabs display an
* and warn
before closing the window. Ruler measurements now move and scale with the
document. And the new snapping system helps draw/move shapes aligned with
Try it right now in your browser. Graphite is making steady progress towards becoming a non-destructive, procedural graphics editor suitable for replacing traditional 2D DCC applications. Join the Discord and get involved!
A demo video of using the editor
Solid Editor is Solid Engine's custom-built voxel graphics editor. It is designed to be a key part of the engine's asset pipeline, enabling the creation of game-ready voxel graphics assets. Since the engine part is pretty far from being done, the author decided to release this editor as a standalone application.
Besides being natively compatible with Solid Engine, the editor sports some generally interesting and unique features.
- True WYSIWYG editing. The editor scene is rendered using Solid Engine's path tracer in real-time, yielding realistic lighting while editing.
- The possibility to edit voxels directly in 3D, by using any brightly colored ball as a 3D pointing device. Read more about the Ball Pointer.
- A novel approach to editor tools. Instead of many different tools with overlapping functionality (e.g. "draw square" vs. "select square", or "bucket fill" vs. "magic wand") there is only one, a versatile Selection tool. Different effects can be applied to the selected voxels, producing the same results as regular editor tools. Combined with real-time effect preview, the user experience is very similar to that of classic graphics editors, with the added benefit of being able to tweak every edit before applying it.
Pixels 0.8.0 👾
Pixels is a tiny hardware-accelerated pixel framebuffer. Its goals include pixel-perfect rendering and custom shader pipelines for textures with direct pixel access. It's perfect for making 2D animations, games, and emulators.
Version 0.8.0 was released this month, bringing highly-anticipated support for WASM targets, as well as support for Raspberry Pi 4. A minimal example for web browsers is included to get you started. Full details are available in the release notes.
Quinn is an async-enabled implementation of the state-of-the-art IETF QUIC transport protocol, a robust foundation for real-time networking.
Quinn 0.8 introduces support for the final QUIC 1 specification defined in RFC 9000. Other highlights include an improved CUBIC congestion controller, a more ergonomic configuration API, and numerous performance and robustness improvements.
hecs is a fast, lightweight, and unopinionated archetypal ECS library.
Version 0.7 introduces several new features, including two new
query combinators, a
CommandBuffer for recording operations to be applied to a
World at a future time, accessors for efficient random access within columns,
and a variant of
EntityBuilder that clones its components and can therefore be
spawned from repeatedly. Other improvements include compatibility with 32-bit
MIPS and PPC, and introduction of a niche to
Entity so that e.g.
Option<Entity> will not consume additional space.
November has been a month of refactoring for godot-rust. The API was cleaned up across different locations, reducing confusion and making the library more accessible:
- The module simplification (#811) continued initial efforts on the module structure, such as shorter paths and avoidance of redundant re-exports. Some differences between v0.9.3 and now can be seen in the above picture.
- Several core symbols were renamed for consistency (#815):
PoolArray, among others.
- Another refactoring affects the
Variantconversion methods (#819). Instead of
Variant::to_i64()which may silently fail and return a default value (Godot behavior), the recommended method is now
Variant::to<T>(). This enables genericity and is more idiomatic in Rust, returning an
Optionto indicate success or failure.
As a binding to a C++ library, one topic godot-rust has to deal with is the use
unsafe, which sometimes boils down to a trade-off between safety and
ease-of-use. Even though Rust provides basic guidelines, there are different
philosophies on their execution, see The CXX Debate for an example. To
discuss how APIs interacting with Godot can be as ergonomic as possible while
preserving safety, issue #808 was opened.
NavMesh crate is a pathfinding library for 2D and 3D games.
This month changes by @PsichiX:
- Added NavGrid structure to find paths on grids.
- Added NavFreeGrid structure to find paths on cells put in free layout manner (used for example on clusters of cells rather than the condensed grid).
- Added NavIslands structure to allow hierarchical pathfinding (used for example with streamed navigation islands, such as other pathfinding structures).
With this release comes a few crates. rustc_codegen_nvvm for compiling Rust to CUDA PTX code using rustc's custom codegen mechanisms and the libnvvm CUDA library. cust for actually executing the PTX is a high-level wrapper for the CUDA Driver API. cuda_builder for easily building GPU crates. cuda_std is the GPU-side standard library which complements rustc_codegen_nvvm. gpu_rand is a GPU-friendly random number generation. nvvm is high-level bindings to libnvvm, and ptx_compiler is high-level bindings to the PTX compiler APIs, which are currently incomplete. find_cuda_helper is for finding CUDA on the system. There are many other works in progress.
- Other game updates:
- Rust Shooter progress report: GLTF import, more character animations and weapons, and underwater effects.
- A video of the new record for speedrunning the Way of Rhea demo (spoilers!)
- Necrophaser is a recently alpha-released Top-Down Shooter made with Bevy.
- A new spaceship for Stellary 2.
- Endless Trial is a 2D bullet-hell game made in Tetra.
- Other learning material updates:
- Other engine updates:
- Other library updates:
- natura is a simple and efficient spring animation library.
Requests for Contribution
- Graphite is looking for contributors to help reach the 0.1 Alpha release.
- winit's "difficulty: easy" issues.
- Backroll-rs, a new networking library.
- Embark's open issues (embark.rs).
- 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.
- SIMple Mechanic's good first issues.
- Bevy's "good first issue" issues.
That's all news for today, thanks for reading!
Want something mentioned in the next newsletter? Send us a pull request.