bevy turns four

Old geek tries to learn game development as part of an open source community

2024-09-13
#bevy

So why Bevy?

I've often been asked this question, usually from people more familiar with the Holy Trinity of gamedev: Unity, Unreal, and Godot. (You can feel free to throw GameMaker in there too, making it a convenient four-pack of indie goodness.)

I heard about Bevy Engine years ago when first beginning to play around with Rust, and having dipped my toes into the now-defunct Amethyst Game Engine. I heard then that someone named cart was working on a new ECS-based engine, and probably spent a few short hours fumbling around with an early Bevy version.

Permission

I don't think at the time I had understood that making games was something I could just "go out and do". I had a few false starts, and in the back of my mind (like many of us) I knew I probably had "one good game" in me. Perhaps I'd known this since pre-Internet days, fooling around in AmigaBasic and typing in programs from the pages of magazines. But it's the "novel in the drawer" phenomenon, and I knew in my heart I was a long way from being able to produce anything real.

I'd had several careers since the Amiga 500 was consigned to history, including one as a nurse and one as a software engineer, largely self-taught. I became a Linux native, and explored many other areas of tech beside, around, and beneath that zone I subconsciously allocated to the magicians that built games from scratch.

I flirted with Casey Muratori's Handmade Hero, because its teaser trailer spoke to me on a hindbrain level. But I suspect I don't have the ambition to completely write something from scratch the way Casey did it. My happy place: just a little help! A foundation library or two. Something that gets out of my way, and lets me do the things. The things that go beep.

Then in October of 2023, PirateSoftware happened.

I don't know how many people on the planet are now attempting to move a box on a screen as a result of Thor's encouragement. I know he's unlocked something powerful in many viewers of his near-daily Twitch streams and YouTube shorts. There seems to be something extraordinarily compelling about standing back and giving permission to an audience of misfits and malcontents, that they might perhaps be capable of feats of nerdhood they had been suppressing up until now. It certainly had a catalytic effect on me.

So, round about Bevy 0.11, I jumped back in: a fifty-one-year-old indie gamedev wannabe.

The Bevy n00b experience

"Why Bevy"? It doesn't arrive with a package of pre-installed game-goods, after all. It has no editor, no point-and-click object placement, drag-and-connect scenes, or built-in asset management interface. Any new acolyte must face the daunting blank page in a text editor, the first in a series of scary boss fights on the way to an initial executable.

tyranny of the blank page

To a programmer, Bevy's saviour is the ECS. Treating most parts of your work as rows in an in-memory database is a compelling premise, and to my delight, it was easy to begin to see patterns emerge early in my Bevy apprenticeship. Retrieve and move your player? Query it:

fn move_player(player: Query<&mut Transform, With<Player>>) {
    if let Ok((mut transform)) = player.get_single_mut() {
        transform.translation.y += 1.0;
    }
}

Want that to happen every tick? Run it on the Update schedule:

app.add_systems(Update, move_player);

It was starting to make sense. I could see, even if I didn't understand many of the more esoteric concepts underpinning the engine (rendering, shaders, hell, even scheduling) that the building blocks I already had available could be used to construct playable games. It even seemed to be simple enough to build to web targets (WASM for itch.io), Windows, Mac, and mobile without having to leave the comfort of my dark blue terminal.

Why? Even now, I'm not sure I can adequately answer that question, except to say that it felt right.

The patterns I was seeing in the terminal made the patterns in my brain start lighting up with possibilities. I could see a community emerging around the engine that made sense to me too. And opensource: getting games out there while helping to build the infrastructure for more, forms a key part of the way I like to approach the world. I've always liked being part of the solution. I'm never the fastest to arrive there, but stubbornness and hope in equal measure can get you a long way!

I feed off being an early adopter, because it seems to me if you're going to learn a field, you may as well learn it from scratch. Maybe not Handmade Hero scratch, but enough of a platform to be jump-started without insisting you follow a playbook all the way to your goal.

I'm no Chris Biscardi (who has become a kind of de facto Bevy Ambassador) but in my own small way I hope I can help introduce others to Bevy in an incrementally kinder way than those who came before me had to endure, until perhaps at v1.0 we can include Bevy as the fifth point of the gamedev star--the Blender of the open source game engine world.

How it's going

It's September. It's been almost a year, and it's Bevy's fourth birthday. (As usual, I was a little late to the party.) Bevy is moving rapidly in a variety of directions, some of which I recognise, some still seem magical and unfamiliar.

In this phase of my Beveducation, I've turned to the D-Trivial GitHub label as a way to engage with the project and begin to understand what I might need to know to help us move the needle a little further into the green. (At least, for some values of green.) By the way, you should try this too, if you haven't already: I've been met with nothing but patience and kind re-education, despite various false starts.

Why Bevy? Because it's a challenge. Because it's fun. Because it's surrounded by a community. And because it so obviously has a future, about which I remain irresistably curious. At this point, I really need to know how it turns out.

Footnote

Thanks to Cart, Alice, and all the maintainers, and the community hivemind-at-large. Here's to the next birthday!

You can find all the other birthday posts here.