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.

Discussions: /r/rust, twitter


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) 

CCD sub-steps

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).

Discussions: /r/rust, twitter


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 

Part of the trailer
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 0.3 

Veloren screenshot

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

Discussions: /r/rust


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.

RUZZT 

RUZZT screenshot

@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.

Discussions: /r/rust

oxygengine-navigation - Navmesh Pathfinding System for ECS Games 

oxygengine-navigation interactive demo

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.

Discussions: /r/rust, twitter

Amethyst’s Activity Report 

amethyst logo

Discussions: /r/rust, twitter


A few days ago a third showcase project was announced: “Space Shooter” by Carlo Supina [/r/rust, twitter].

“Space Shooter” gameplay

Embark’s Rust Open-Source Crates and Ecosystem Tracking 

Embark logo

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.

embark.rs

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 opensource@embark-studios.com!

Discussions: /r/rust, twitter


Also, Embark has recently open-sourced physx-rs - PhysX bindings to Rust.

“ball” example

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!

Discussions: /r/rust, twitter

6 Months of Game Development in Rust 

screenshot from Olivia’s game

@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 

Mipmap example

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

Discussions: /r/rust


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. Major improvements:

  • API is (mostly) updated to the upstream WebGPU working group spec
  • internal deadlock protection
  • raw-window-handle support
  • individual tracking of texture array layers and mipmap levels
  • more API features:
    • multisampling
    • indirect draw and dispatch
    • stencil masks and reference values
  • more examples!
  • more state validation!

Discussions: discourse, /r/rust

luminance 0.31 

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.

Discussions: /r/rust, twitter

Other News 

Meeting Minutes 

See all meeting issues including full text notes or join the next meeting.

Requests for Contribution 

Bonus 

Just an interesting Rust gamedev link from the past. :)

A Snake’s Tale’s logo

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.

Part of A snake's Tail's trailer
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!

Discussions of this post: /r/rust, twitter.