This Month in Rust GameDev #1 - August 2019
Welcome to the inaugural issue of the Rust Game Development Workgroup’s monthly (hopefully!) 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!
News and Blog Posts
Survey from the Rust GameDev Working Group 📋
Interested (maybe already invested?) in using Rust for game development? Please set aside a brief moment to answer this short survey about the current state of our GD ecosystem and what the GD working group can do to nurture it. 🌱
While we'd greatly appreciate a modicum of identifying information so we can easily connect with you for further discussions, sharing that information is optional. Only 3 questions in this survey are mandatory and we've saved the most important one for last.
The survey is now being processed for publishing. We’re still accepting responses until the survey has been published and subsequently closed for good.
Also, check out our previous post "Introducing the Rust Game Development Working Group" if you haven't seen it yet [/r/rust, twitter].
This Month in Rustsim #7 (June − July 2019)
nphysics 0.12 release contains several long awaited features:
- The support for linear and non-linear continuous-collision detection (CCD) with colliders on rigid bodies and sensors. There's a brand new page of the user guide about it.
- Rigid body velocity damping: this allows to artificially slow down some bodies. This is essential for, e.g., top-down 2D games where traditional coulomb friction cannot be used.
- Rigid body maximum velocity limit: it is possible to force a rigid body to never get a velocity higher than a threshold.
- The possibility to use custom containers for bodies, colliders, joints, and force generators. This helps overcoming some difficulties related to borrowing, and also help for the integration of nphysics with other solutions. The physics world structures will no longer own those containers.
With ncollide 0.20, it is now possible to compute the time of impact between two shapes undergoing an arbitrary rigid motion. This is known as non-linear time-of-impact computation. This is used by the new CCD integration on nphysics 0.12.
Watch a "CCD support on nphysics 0.12" video or play with the online demo yourself (choose "CCD" in the "Select example" menu).
Also, check out "About the future of nphysics: a pure rust 2D and 3D real-time physics engine" [/r/rust].
Way of Rhea Trailer and Steam Wishlist Announced
click on the GIF to see the full trailer
A new trailer and the Steam wishlist were published for "Way of Rhea" by Anthropic Studios.
Way of Rhea is an upcoming puzzle platformer that takes place in a world where you can only interact with objects that match your current color.
Take a look at this Reddit comment with a quick summary about implementation and tooling.
Discussions: /r/rust_gamedev, twitter
Veloren is an open-world, open-source multiplayer voxel RPG. The game is in an early stage of development, but is playable.
The 0.3 version was a long time coming, and there has been a ton added to Veloren. Here is a small list of the major changes in this version:
- XP and leveling
- Better combat, movement, and animations
- Enemies, bosses
- Better world generation, more biomes
- Build mode
- Caves, lanterns, lights, dungeons
- Character customization, multiple races
- Inventories (WIP)
- Day/night, better shaders, voxel shadows
- Many performance optimizations
Also, if you want to see how the work on 0.4 is going, check out other August's weekly devlog posts: "This Week in Veloren..." #28, #29, and #30.
@yokljo published RUZZT - a ZZT game engine clone written in Rust.
My wife and I wrote this as a fun exercise, and went a lot further with it than originally anticipated. We wanted to try to replicate the original game's behaviour by simply looking at it running in Dosbox and seeing if we could make RUZZT do the same thing. This means the code architecture is likely very different from the original game.
Eventually we did get far enough that it seemed like a waste of time to try to guess how some specific things were implemented, so we used a disassembler to make sure various behaviours worked correctly.
oxygengine-navigation - Navmesh Pathfinding System for ECS Games
oxygengine-navigation is a crate to perform pathfinding on navmeshes. It's an ECS module (compatible with any SPECS engine) and is a part of a bigger Oxygen game engine.
Here's a demo/example of the integration with Amethyst.
Amethyst's Activity Report
Amethyst v0.12 quietly released and now the project moves to two-week release cycle.
2D action platformer Space Menace by @krankur partnered with Amethyst to become an official showcase project (announcement).
Evoli released v0.2 and moved into 3D.
New tools for 2D game development: the Sheep spritesheet packer and Amethyst 2D Starter.
Scripting support edges closer.
Learning from Legion: an ECS design discussion.
Arsenal - a Blender game engine built on Amethyst and Rust (announcement).
amethyst-imgui and Laminar (a semi-reliable UDP-based protocol for multiplayer games) steadily mature.
Rendy (rendering engine) is well on its way towards web and OpenGL support.
Atelier Editor underwent some visual planning.
A few days ago a third showcase project was announced: "Space Shooter" by Carlo Supina [/r/rust, twitter].
Embark's Rust Open-Source Crates and Ecosystem Tracking
A quote from the announcement:
We've put together a tracking page for our Rust open source work, future ideas/plans, and issues that we've run into and want to improve on.
It is still pretty early, but hope it can be useful or of interest to see what we, a commercial games company, is planning and thinking about Rust.
We are also open to collaborate with other companies or individuals, as well as sponsoring more open source work to improve and support the ecosystem. Feel free to reach out to us here or on email@example.com!
Also, Embark has recently open-sourced physx-rs - PhysX bindings to Rust.
Quite complex big C++ project to build & bind to (@h3r2tic did some magic). Eventually want full native Rust lib but PhysX is feature rich & performant today so nice to be able to use it!
6 Months of Game Development in Rust
@oliviff tells about theirs experience of developing a hobby game "Tennis Academy" in Rust for six months.
Here's a YouTube video with the current state of the game.
Features of the game:
- 💵money: every item costs money and the money is substracted when buying an item
- 👟tennis courts of all types: hard, clay, concrete and grass
- 🎁more object types: benches, balls, roof tiles
- ⏱️time: the game keeps track of how many days/months/years it's been
- 🌶️main menu
- 🏠build menu
- ⛹️player selection menu
- ↩️assignments: a player can be assigned to a court or a bench
- 🛣️basic pathfinding: a player can find its way to an assigned court or bench
- 📈skill levels: a player playing on a court will get increased tennis skill level
- 🛌needs: a player who plays too much will get tired and need rest
Discussions: /r/rust_gamedev, twitter
gfx-hal 0.3 and wgpu 0.3
gfx-hal is a low-overhead Vulkanic GPU API in Rust.
Version 0.3 is published that includes:
- MSAA resolves
- events API
- building Vulkan backend on Apple platforms
- "readonly" storage support in DX12 backend
- WASM and compute support in GL backend
- lots of fixes and improvements in all backends
wgpu is a safe, modern and portable GPU API for native platforms and the Web.
It's based on gfx-hal and Rendy.
Our implementation and its Rust wrapper
wgpu-rs have reached version 0.3.
- API is (mostly) updated to the upstream WebGPU working group spec
- internal deadlock protection
- individual tracking of texture array layers and mipmap levels
- more API features:
- indirect draw and dispatch
- stencil masks and reference values
- more examples!
- more state validation!
Discussions: discourse, /r/rust
luminance is a type-safe, type-level and stateless Rust graphics framework.
luminance v0.31 was released by @phaazon. This version brings LOTS of major changes and bugfixes, including two new crates:
- luminance-derive - provides several procedural derive macros you can use to easily implement all required traits to work with luminance. Especially, some traits that are unsafe can be implemented in a safe way with that crate.
- luminance-glutin - the windowing crate support for glutin.
Also, two ways to learn luminance were added:
The examples. They are like unit tests: each introduces and focuses on a very specific aspect or feature. You should read them if you are interested in given feature. They’re not well suited to learn from scratch and they are weaker than a structured tutorial but more concise.
The wiki. It contains various chapters, including tutorials and onboarding newcomers. It will not provide you with the best description of a given feature as it focuses more on the overall comprehension and explaining than code directly.
Vlad Zhukov shared theirs first Youtube devlog about the development of an asteroids-like game with Voronoi diagrams for procedural destructions.
Azriel published a devlog "Charging Up" - characters in Will can now charge up by holding the Attack button.
droprate - a crate for choosing outcomes based on a weighted probability map, aka more player-friendly random numbers [/r/rust].
"Compare Against Your Friends" - after the 1.0 release of Robo Instructus, Alex Butler released a few more versions that fix some bugs, improve performance, scoring and UI.
@Remco shared on Twitter a video of hot reloading demonstration [/r/rust, /r/rust_gamedev].
rx - a minimalist and extensible pixel editor in Rust [/r/rust, repo].
Popular Workgroup Issues in Github
- #23 "[Needed Crate] A pure rust SPIRV generator"
- #25 "The state of math libraries"
- #26 "[Tracker] Better windowing/graphics inter-operation"
- #42 "[Discussion] A plan for crate stewardship"
See all meeting issues including full text notes or join the next meeting.
Requests for Contribution
- gfx-rs's "contributor-friendly" issues;
Just an interesting Rust gamedev link from the past. :)
On 2017.07.06 one of the first commercial Rust games "A Snake's Tale" by Michael Fairley was released: Steam (Windows/Linux/macOS), itch.io, AppStore, Google Play.
A Snake's Tale is a puzzle game about snakes in cramped places. Clear a path to get to the hole, eat some eggs along the way, and make sure to press all the buttons.
click on the GIF to see the full release trailer
A few posts about the game and how it was developed:
That's all news for today, thanks for reading!
Want something mentioned in the next newsletter? Send us a pull request.
Also, subscribe to @rust_gamedev on Twitter or /r/rust_gamedev subreddit if you want to receive fresh news!