June 25, 2022

Project Updates: It's Been a While!

Nesimg Maps 1.png Nesimg Maps 1.png Micro Thumbnail

It's been a long time since our last update. I've been busy with life and other development projects, but I've found some time recently to come back to work on games.

Here's what I've been working on in the last couple months!

FishFight

Recently I've been contributing to the Open Source FishFight game, a tactical pixel-style 2D shooter. A few things I've worked on include:

It's been a fun project to work on and I get to help other Rust game developers while also learning and picking up on strategies that others are using to make games.

NESImg

A couple weeks ago I finished the first phase of a tool called NESImg that is made to help you design levels for the old Nintendo NES / Famicom game console.

This project was an experiment and a learning exercise. On both fronts the project went very well:

  • NESImg succeeded in allowing you to create maps that fit into the NES hardware restrictions.
  • Note: Actual rendering on an NES hasn't been accomplished yet.
  • I learned a lot about how the Egui UI library works and how to use it.
  • The effort resulted in me writing 4 pull requests that got merged into Egui to add support for displaying low-rez pixel-style images without blurring them and to add support for custom paint callbacks using WGPU.
  • My great experience with Egui led me to choose it for the next update to Bevy Retrograde ( see below ).

I'm not sure what the future of NESImg is. It may simply end up a demonstration of an Egui UI, or it may turn into a useful tool for making actual NES games. For now, I think my time will shift towards other projects, but whatever the future of NESImg, it resulted in meaningful contributions to the Egui project, and resulted in a productive direction change for UI in Bevy Retrograde.

Bevy Retrograde

Bevy Retrograde is a Bevy plugin for making 2D games, and just yesterday I finished merging a big update. It's been 1 year since we at Katharos Technology decided we wanted migrate Bevy Retro to use Bevy's renderer, and finally we did it!

Since I last worked on Bevy Retro, Bevy has gotten two big releases out, the first of which included the long-awaited Bevy rendering refactor. Now that the new renderer was stable, and it had web support out-of-the-box, it was time to make the switch.

This meant a complete overhaul of Bevy Retro, and interestingly, most of Bevy Retro disappeared. 👀

By using Bevy's renderer, we no longer needed a big chunk of Bevy Retro. While I was removing that, I did a quick look around and found that there was a great LDtk map loader plugin for Bevy now, too. That was another thing we no longer needed to do ourselves. And after my work on NESImg, I decided that I like Egui more than the RAUI UI we used to use, and there was already an Egui plugin for Bevy, so I could take that out too! Finally, I removed our custom audio crate and used yet another community Bevy plugin instead.

So what did that leave us with? Despite finding out most of Bevy Retro didn't need to be there anymore, it still serves the following purposes:

  • It helps pull together all of these existing Bevy plugins in one place: Bevy Retro was designed to make it super easy to get started making a 2D game with Bevy. That involves extra stuff that might not be ready in Bevy yet, or doesn't belong inside of Bevy anyway, and looking for those things and adding them to your project is still work. Bevy Retro is an opinionated starter kit that makes all those extra plugins a little easier to get to.
  • It has a few utilities that aren't found elsewhere ( yet ):
  • It adds retro-style font rendering and 9-patch style frames to Egui
  • It adds a utility for generating physics collision shapes from sprite images
  • It may later have other features such as save data handling

Also, writing less myself and depending more on the Bevy community gives me less maintenance work and splits the load between more people, so I don't at all mind that Bevy Retro shrunk. That gives me more time to write what other people aren't already writing.

I haven't published a new release of Bevy Retrograde just yet, because the new map renderer we are using needed a fix to avoid some rendering glitches on web. I opened a PR to fix it, which got merged, and now we've got to wait for the next release of bevy_ecs_tilemap.

You can still use Bevy Retro though a Git dependency, though, and it doesn't stop us from continuing development.

What's Next?

Today I started working on porting the Bounty Bros. game to use the new Bevy Retro. Since almost everything in Bevy Retro changed there's a lot of re-writing, but Bounty Bros. is a super small game so far, and the migration is going quickly.

All of the code is public on GitHub in the Skip'n Go repository. For now Skip'n Go is effectively just the Bounty Bros. code without the Bounty Bros. artwork, but eventually it may grow into an easy-to-use game engine for 2D games. We've got to make a game first to see what goes into it, and then we we will better understand how to make it easier for people to make their own games.

If you like the work I'm doing, you can sponsor me on GitHub Sponsors. Any little amount helps! Sponsorship will go towards my contributions to Open Source and development of source available tooling and games.

Hopefully I'll have more updates soon!