Skip to content

Files

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Latest commit

e73f8e5 · Jun 4, 2021

History

History
445 lines (320 loc) · 16.7 KB

File metadata and controls

445 lines (320 loc) · 16.7 KB

+++ title = "This Month in Rust GameDev #22 - May 2021" date = 2021-06-01 transparent = true draft = true +++

Welcome to the 22nd 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!

Game Updates

Flesh

flesh preview a new enemy

Flesh by @im_oab is a 2D-horizontal shmup game with hand-drawn animation and organic/fleshy theme. It is implemented using Tetra. This month's updates include:

  • Add (internal use) level editor.
  • Add new enemy types.
  • Prepare to release a short demo next month for collecting feedback.

Airship The beginning of an exciting journey

Veloren is an open world, open-source voxel RPG inspired by Dwarf Fortress and Cube World.

Veloren's 3rd birthday was at the end of May, on the 25th! During the month, lots of systems were overhauled. Music changes were made to only play certain tracks in certain areas. Econsim was optimized, and many bugs were fixed. The minimap was overhauled, with many quality-of-life and visual improvements. Terrain compression speed was worked on, with many trials of different compression techniques.

The large physics overhaul was merged, and lots of patches are being added to issues that popped up from it. You can see a small flight in action here. Dungeons have been balanced, and many weapons have also seen changes. In June, 0.10 will be released.

May's full weekly devlogs: "This Week In Veloren...": #118, #119, #120, #121, #122.

Most of West Seattle has poor access to public libraries

A/B Street by @dabreegster is a traffic simulation game exploring how small changes to roads affect cyclists, transit users, pedestrians, and drivers, with support for any city with OpenStreetMap coverage. The project aims to engage more citizens with transportation planning, letting people advocate for real changes they want to see.

In May, travel time stopped being the only "score" for how well road changes work. Risk exposure of cyclists crossing dangerous intersections or travelling in front of high-speed traffic is now measured, with lots of data visualization work by Michael. Trevor also revived the 15-minute isochrone tool, finding areas of a city without easy access to education, hospitals, or other facilities. We also moved the map import process, with over 100 supported maps, to the cloud from a single poor laptop. OpenStreetMap importing now handles multiple turn lanes, U-turns, and stop signs much better.

Animated image showing a small factory in the middle of the game island This factory has never looked livelier!

The Process by @setzer22 is an upcoming game about factory building, process management and carrot production, built with Rust using the Godot game engine!

This month has been focused on improving the game's UI and extending the machine logistics system, but there was also room for a few cosmetic improvements:

Discussions: /r/rust_gamedev, Twitter

Game features

pGLOWrpg by @Roal_Yr is a Procedurally Generated Living Open World RPG, a long-term project in development, which aims to be a narrative text-based game with maximum portability and accessibility.

Recent updates include:

  • Implemented dev features test arena.
  • Implemented entity system draft.
  • Sanitized coordinate systems everywhere (ooof!)
  • Much refactoring.
  • Resumed river generation development.

Discussions: Twitter

bounty-bros-title-screen Click the image to play the game in your browser!

Bounty Bros. is a prototype game, similar to the old Legend of Zelda® games, developed by Katharos Technology as a testing ground for a future commercial game.

The last two months of development was primarily focused on sound and user interface:

  • Music will play in different areas of the map and fade in when walking into an area with different music.
  • In-game UI is now functional including a new start menu and a simple settings menu to toggle the CRT filter and pixel aspect ratio.
  • The web-player now has a simple loading icon instead of a solid black screen.

The web version was re-built and published under a new link so you can try it in your browser.

You can read the full update in the Blog Post.

Engine Updates

rustcraft-img

Rustcraft by [@dskart] is a simple Minecraft engine written in Rust using wgpu.

It handles infinite world generation using gradient noise as well as placing and breaking blocks.

Learning Material Updates

A screenshot of Dig World gameplay

@kuviman wrote a devlog about his experience writing a video game in Rust.

He needed to make a game in just 48 hours for the Ludum Dare 48 (LD48) game jam, so he chose a simple theme: digging.

20 hours later, he had a full-fledged MMO - complete with hackers!

Discussion: r/rust_gamedev

Library & Tooling Updates

egui

egui by @emilk is an easy-to-use immediate mode GUI library in pure Rust.

This month version 0.12 of egui was released, with improved plots, multitouch, user memory stores, window pivots, and more.

You can try out egui in the online demo.

Discussions: /r/rust

Dota2 running on Naga

Naga is a shader translation library in pure Rust, aiming to replace glsl-to-spirv and SPIRV-Cross.

In April the gfx-rs team shared a glimpse of the performance difference with SPIRV-Cross on a single pipeline creation. In May, they did a full-fledged Dota2 run on gfx-portability without SPIRV-Cross. All shader translation was done by naga, roughly 4x as fast as the C++ alternative (with no pipeline caching involved). Read more on gfx-naga-blog.

Rafx Wireframe Demo Demo with wireframes enabled

Rafx is a multi-backend renderer that optionally integrates with the distill asset pipeline.

This month, @dvd completed work on the new job system. It implements three steps: extract, prepare, and write. These jobs are now more structured, making them easier to implement while supporting concurrent execution and reducing dynamic allocation. They also integrate with a visibility system to ensure that off-screen objects are not processed.

@aclysma continued work on OpenGL ES 2.0/3.0 backends and documented implementation details of currently available rendering backends.

Additionally, some rendering features were improved and added: mesh rendering now uses an instance-rate vertex buffer instead of per-object uniforms, improving performance. Rendering features now support wireframe and untextured rendering modes. An egui render feature was added, and the demo now uses egui instead of imgui.

ui-example Bevy Retro UI example

Bevy Retro is a Bevy plugin designed for making pixel-perfect games as easily as possible.

This project was released under the Katharos License. This license has moral and ethical implications that you may or may not agree with, so please read it before making use of this project.

In the last two months Bevy Retro has gained a few new features, the biggest of which being an integration with the RAUI UI library ( also featured in this newsletter ), allowing you to design fully-fledged user interface for Bevy Retro games. Additional features added were:

  • A simple sound playing API
  • Text rendering for the BDF font format
  • Custom render hook support allowing you to use raw Luminance API calls to render anything you want into the low-resolution framebuffer

You can ask questions or give feedback for Bevy Retro on GitHub.

A tilemap with procedural textures A preview to version 0.5 with furniture

Texture Generator by Orchaldir is a library to generate textures, and a library to use those textures to render tilemaps. Both libraries can generate color & depth images and support post processing effects like lighting & ambient occlusion. For randomness the instance id (e.g. the 145th brick) and/or the tile id are hashed.

The current release focuses on furniture.

Configuring two asset collections

bevy_asset_loader by @nikl_me is a plugin for Bevy apps aiming to improve a common pattern for asset-loading. The boilerplate required to load assets during a "loading state" is reduced to a minimum. At the same time, the plugin brings together the internal names of assets and their filepath, making it easier to add new assets and to keep an overview over already existing ones.

The library introduces the AssetCollection trait that can be derived. Any number of asset collections can be loaded by a single AssetLoader during a configured app state. When all assets are loaded, the collections will be inserted into Bevy's ECS as resources. Afterwards, the AssetLoader will switch into a second configurable app state. At this point, your app can use the asset collections that now contain loaded asset handles.

Currently, a single file always corresponds to one asset and more complex assets like e.g. TextureAtlas are not yet supported. There are plans to extend the asset attribute to allow loading more complex assets. Stay tuned!

Zelda running on Nestadia

Nestadia by [@zer0x64], [@junior-n30] and [@CBenoit] is a server-based NES emulator.

Nestadia was written as a reverse engineering and memory exploitation challenge for NorthSec CTF 2021, a cybersecurity competition. Contestants were required to reverse-engineer the emulator and ultimately write a Tool Assisted Speedrun to run arbitrary code inside a provided ROM.

After the competition, the code was open-sourced and cleaned up to remove references to the competition. The developers intend on fixing more bugsand adding more features in the near future.

Some interesting features of this emulator are its server-based nature, and the no_std core which means that the emulator can be built and ran pretty much anywhere without much work.

Incoming improvements include online multiplayer, sound, a WASM port, porting to a libretro core, and using wgpu instead of sdl for the native GUI and debugger.

Popular Workgroup Issues in Github

Meeting Minutes

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

Requests for Contribution

Jobs

Bonus


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!