Welcome to the eighth 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!
Spreading the Word
If you're working on a project that heavily relies on some engine/framework, consider informing its authors about your work: as the community is growing it happens more and more that frameworks/engines authors just don't know about users of their libs (this note was requested by Icefox in relation to GGEZ projects).
DynaMaze is an open-source multiplayer puzzle/strategy game written in Rust and compiled to WebAssembly, made by @boringcactus. Adjust the maze to build a path to your target and keep the other players from getting to theirs.
A traditional roguelike where the outcomes of attacking and defending are pre-determined and visible. Gameplay revolves around fighting slimes, adding to your sequence of combat outcomes, and using abilities to modify the order in which combat outcomes occur. It’s set in a neon sewer!
Will is a 2.5D moddable action/adventure game.
Highlights of this month's update include:
- Going open-source
- Network play (early version)
- 👟 blue players are back
- 🎆 improved particle effects
- 🖼️ a few art fixes
For The Quest
For The Quest is the working title for a game in early development by @seratonik. Written entirely in Rust and compiled to WebAssembly, For The Quest is destined to become a MMORPG set in a post-apocalyptic Earth where your goal is to band together into like-minded factions to not only survive in this new world, but to unearth the cause of humanity's downfall.
For The Quest is currently undergoing engine development with a focus on running smoothly in modern browsers using WebGL 2.0 before moving onto native desktop ports.
New developments in March:
- Collision and Activation-Based Triggerable Entities (Able to load new areas)
- New overworld "sky light" directional lighting shaders in addition to omni-directional point lighting for underground areas
- New Ice Cavern models and textures, establishing a hybrid pixel-art in 3D style - mapping tool has been expanded to allow for rotating "tiles" to build extensive environments in a simple text format for rapid prototyping
- Specular maps added to the engine and world for that extra shine
- Started refactoring the rendering pipeline to allow for screen-space effects such as reflections and ambient occlusion
Follow @seratonik on Twitter for updates.
Urban Gift: Teaser Video
Urban Gift is part detective game and part superhero simulator. This month a teaser video was released:
Follow development updates on Twitter.
Realm.One is an open-source MMO game written using the Amethyst game engine. This month two videos were posted:
- "GameDev in Rust (Episode 0)" - ECS-based design with Amethyst, networking and tiled 2d based design.
- "GameDev in Rust (Episode 1): Monsters and AI!" - how the monsters are managed on server-side and integration with Tiled map editor.
Native Systems is working on "Colony Genesis" - an ant colony sandbox game with ASCII graphics.
This month v0.1.1 and v0.1.2 versions were released. Some of the updates:
- Add color palette options to Settings including a modified palette for red-green color blindness
- Add lifecycles to more ant castes
- Nurse ants give food to larvae
- Nurse ants on the surface will return to the colony
- Fix for foragers getting stuck in dig state at colony entrance
- Updated pathfinding
Hop your way through bite-sized levels while dodging spikes and turrets. Then, change the direction of gravity, and do it all again!
@Roal_Yr tweeted a bunch of updates about their "pGLOWrpg" project:
- Rivers erosion: this will ensure no rivers flow upwards and the canyons through the landmass are more smooth.
- River segmentation and width increment.
- Improved the temperature map generation.
- Improved topography map rendering.
Akigi is a multiplayer online world where most believe that humans are inferior.
Some of March's updates:
- Migration to specs is finished.
- Asset compilation rewrite.
- Deploying process update.
- Preparations for the initial alpha release is being done.
Your goal is to hit the other spheres as hard as possible to shatter them into pieces! But take care; if you get hit too hard too often by other spheres, you will be smashed yourself! Avoiding them is challenging as the bent space keeps dragging you to the center. Can you destroy everything around you until you are the only one left?
The game is a test for the studio's "Sphere Engine" engine that is being implemented using Rust and Vulkan.
Helix Repair is another game by Coffé Junk Studio written using the same engine. Your task is to repair a broken DNA sequence by replacing wrong nucleobases with the right ones. You have 20 seconds: how many nucleobases can you repair within that time?
The game was developed within one weekend during the Global Game Jam 2020, whose theme was "repair".
Garden: March Devlog
Garden is an upcoming game centered around growing realistic plants.
March devlogs were posted. Some of the updates:
- Splashing sweat symbol water diffusion in the new soil;
- Herb improved leaf translucency;
- Joystickcollision detection, player movement;
- Artist palette debug tool for visualizing the forces acting upon a game object and its other vectors.
- Some of the text buttons were replaced by icons.
- Ability descriptions.
- Popup screens and exit confirmation dialogs.
zguiwidgets: ColoredRect, LayersLayout.
- Inactive buttons are either hidden or grayed-out now.
- The project fully switched to
good-web-gameas the first step of the migration to miniquad.
^ Work on Level of Detail
Veloren is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World.
Many systems have been worked on in March. Worldsim is making progress through simulation of civilization over time. The map has seen improvements for lighting. Certain parts of the UI have been going through big changes. Many small outstanding issues have been worked on by a few diligent contributors. Networking is also being reworked from the ground up.
Here is the March changelog:
- Added sfx for wielding/unwielding weapons - Fixed NPCs attacking the player forever after killing them - Added sfx for collecting, dropping and using inventory items - New attack animation - weapon control system - Game pauses when in singleplayer and pause menu - Added authentication system (to play on the official server register on https://account.veloren.net) - Added gamepad/controller support - Added player feedback when attempting to pickup an item with a full inventory - Added free look - Added Italian, Portuguese, and Turkish translations
You can read more about some specific topics:
- New Networking Protocol
- External Work
- Winit Issues
- UI Improvements
- Map Improvements
- World Simulation Process
With the Content Update scheduled to come out at the end of April, many systems will be finishing up development. Keep a lookout for the launch party!
Library & Tooling Updates
Some of this month's updates:
- Input API.
bracket-colornow supports pallets and RGBA.
- The graphical (OpenGL, WASM, Amethyst) render targets now support alpha channel.
- Arbitrary clipping window on any layer.
- New functions for right-justifying printed text.
- Fonts and dimensions in terminal layers can now be switched at run-time.
- New layer type that lets you specify glyph position as a float.
- New sprite layer.
- Updated examples.
- simba - a crate that defines a set of traits for writing code that can be generic with regard to the number of lanes of the input numeric value. Those traits are implemented by f32, u32, i16, bool as well as SIMD types like f32x4, u32x8, i16x2, etc.
- benchmarks: "SIMD Array-of-Structures-of-Arrays in nalgebra and comparison with ultraviolet".
- alga abstract algebra crate is switched to passive maintenance mode.
gfx-rs and wgpu news
^ deeper uses wgpu for rendering
gfx-hal-0.5 was released! Improvements done in March:
- Debug markers. Users are now able to debug-annotate parts of the rendered frame, so that inspecting it in a GPU debugger is more enjoyable.
- The generic range parameters are removed in favor of simple structs. This is a move towards simpler low-level API.
- Physical device features for NDC Y-flip and sampler mirror clamp are added.
- Physical device performance hints are introduced. The first hint is for "base vertex/instance" support.
SmallVecis removed from the API, it's reshaped to avoid any heap allocations. Previously, it had to touch the heap on multiple descriptor sets or command buffers.
- DX12 got true support for read-only storage bindings. This is one of the opt-in derivations from Vulkan that allow to better map users logic to non-Vulkan backends, also used by WebGPU.
- Last but not the least, @zicklag
has been fighting
with the OpenGL backend to align its API with the rest of the crowd,
armed with surfman.
The fight is reading conclusion, and we are crossing fingers
to add OpenGL support to
wgpu-rsas it lands.
- @grovesNL reached an epic milestone in the Web target
by showing the first triangle.
Users will soon be able to seamlessly target the web
with their existing
wgpu-typescrate is created to share types between the Web target and the native one.
- @lachlansneff improved the async story quite a bit, we also converted more methods to be asynchronous.
- Debug labels support.
- Id management story for browsers with a GPU process has been completely redesigned and now working well.
- All the objects are properly destroyed and GPU tracked if needed.
- Ability to provide a
Surfaceso that the selected adapter can present to it.
- New "mailbox" present mode.
- naga - the new in-house shader translator has reached the milestone of successfully loading a WGSL boids example and generating a valid Metal source for it. 🎉
- metal-rs has got a lot of contribution by @adamnemecek. Indirect command encoding is particularly exciting!
- gfx-extras is a new library that is forked from rendy-memory/descriptor.
- gfx-ocean was moved to gfx-rs organization and updated to gfx-hal-0.5.
- gfx-portability was also updated.
- example project by @PonasKovas, illustrating android and web platform-dependent configuration: mandelbrot.
- first prototype for embedded debug frame introspection: introspection.
^ Daily Sketch 0114 by Mactuitui
Nannou is a creative coding framework that aims to make it easy for artists to express themselves with simple, fast, reliable code.
This month Nannou v0.13 was released. Some of the updates:
- Migration to wgpu-rs.
- Nicer native macOS experience.
- Capturing Frames & Textures.
Also check out lots of cool sketches from the community: #nannou tag on Twitter.
This part of the series describes how a simple Rust project can be built for Android - useful even if you're not targeting the Oculus hardware!
Thomas Versteeg has released a new crate called
const-tweaker, which provides
a web UI that can be used to tweak
const variables in a running application.
This can be used as a simpler alternative to embedded scripting languages or
hot-reloading in your games.
a1phyr has created a crate called
assets_manager, which provides a convenient way
to load and cache external resources. It abstracts over the filesystem logic, and
provides a variety of built-in loaders for common Serde formats (e.g. TOML, JSON).
Hot-reloading support is also planned in the future.
netstack is a batteries included networking crate for games. Requiring an exchange of a secret and connection tokens. At the moment, UDP transport, connection management, packet signaling, and packet acknowledgement are features already implemented. Examples for getting started are provided on the crates.io page.
Version 0.3.0 adds basic monitoring functionality along with traits
ServerMonitor. A work-in-progress prometheus exporter has also been added in this version.
three-d is a renderer which targets both desktop (OpenGL) and web (WebAssembly + WebGL2) which makes it possible to develop a 3D application on desktop and easily deploy it on web.
This month three-d v0.1 was released. Main features:
- Thin and low-level graphics abstraction layer which maps one-to-one with the OpenGL/WebGL2 graphics APIs.
- Medium-level modular abstractions of common graphics concepts.
- Deferred renderer with high-level components.
- Default windows for easy setup.
It is possible to build your own rendering features from low- or medium-level components and combine with other high-level features, so you can already now make some cool stuff. See for example these examples.
This Month in Mun
Mun is a scripting language for gamedev focused on quick iteration times that is written in Rust.
Their March updates include:
- marshalling of value structs;
- extern functions;
- garbage collector (defaults to mark&sweep);
- performance benchmarks;
- bugfixes and improved test coverage.
This month Oxygengine creator published plans for the future of the engine, where he explains the long term goal of the project that explains why Oxygen is definitely not a toy or a hobby project and how that will shape its feature towards being a toolset for the professionals. Project progress tracker can be found here.
Also, @PsichiX has started to work on the modular game editor (extendable with user-made plugins) called Ignite, that will ease creating games with the engine.
You can look at the first editor module - Asset Browser:
- Better panic messages on
- Support for setting log levels from configuration.
- Text field rendering corrections.
- Target multiple overlapping UI entities with events.
- Better panic messages on
specsis the underlying ECS that powers Amethyst but there's an ongoing prospect of moving to
legion. @csherratt wrote an excellent post comparing both libraries. Also an in-depth discussion about archetypal and grouped ECS design took place on the forum.
- Prefab loading, saving, and hot-reloading
- Entity creation / deletion
- Component addition / removal
- Undo and Redo
ash is lightweight wrapper around Vulkan.
The latest version comes with support for Vulkan 1.2 and following extensions:
Rectangle Pack v0.1.5
Rectangle Pack is a Rust crate focused on rectangle packing: Laying out any smaller
number of rectangles inside any number of larger rectangles. The developer's use
for the library is in packing textures from texture atlases on the GPU, although
the library does not have any concept of texture, and can be used in any
context where rectangle packing may be needed.
Version 0.1.5 adds implementation for error handling for RectanglePackError.
Popular Workgroup Issues in Github
Requests for Contribution
- 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;
- @kvark: Anybody wants to work on the GLSL front-end in Naga? One day, we'll be able to finally replace glsl-to-spirv, which is used by a lot of graphics applications and is prone to issues.
Just an interesting Rust gamedev link from the past. :)
Salvage Engineer, you have a new assignment on a distant world...
Robo Instructus is a puzzle game in which players manoeuvre a robot by issuing instructions via a simple programming language. As players progress through the game they unlock new functions to overcome new puzzles, each of which can be solved in multiple ways. The more you master the robot, the more elegant and powerful your solutions will be.
Take the role of a Salvage Engineer sent across space. Use wits and tenacity to uncover the secrets of this isolated, frozen world.
Check out the release trailer.
That's all news for today, thanks for reading!