First Jam, First Finished Game, First Bevy-isms


So! The Bevy Game Jam #4 was my first ever game jam, for which I made my first 'finished' game, for which I used Bevy for the very first time! In the following I will try to briefly recall how this past week went, so strap in! 

This is mostly for myself, so I can look back on this first jam and not have to rely on my (very) poor memory for the details.

First Jam

I've been wanting to learn bevy for a while: I remember learning about it around when it hit 0.8, from a Chris Biscardi video, whom I discovered through a Tauri tutorial. So while I'm not new to rust itself, I had never managed to find the opportunity to learn bevy nor gamedev really. The two following sections will explore both!

Why This Jam? Frankly, I have no idea. This was not the ideal week for me to learn a brand new game engine, far from it actually. The theme didn't inspire me the second I read it either - But something in me was like "It's now or never" so I went for it - and I'm so glad I did!

Speaking about that theme ("That's a LOT of entities"), I spent the first two days of the Jam trying very hard to come up with an idea that felt both interesting and feasible with Bevy. A bullet hell? Too obvious. "Entity Symphony", a recursive music-making game? Too complicated, apparently there are audio problems with bevy games playing in the browser.  "Birds, Bees and Entities", an ecosystem management game à la predator-prey simulation ? Déjà-vu, and done better than I could ever in a week...

And then I realized that what I was missing was an inspiration, something to go off of to manage to build a proper, playable game in one week. That's when, for some obscure reason, a memory of mine resurfaced: I remembered playing Zoo Tycoon, and loving the 'people-pleasing' aspect of it almost more than the actual Zoo part. I loved that you could see that this random visitor was thirsty, and thus decide to place more food stands! So that was it: I wanted a simulation game where you had to fulfil the needs of little individuals. The way this game would fit the theme is that after some time, the number of little guys would have grown out of control.

First Game

Technically, I've dabbled in game dev before. Years ago, I made a very (very) basic little game in Blender (yeah I know, Blender??). But I never took a game from the idea stage, to the development board, and to a playable, semi-complete state.  

The development of Complexcity (I'm still proud of that name, I felt so clever when I found it) started with the search for free (as per the rules of the Jam, and because I'm a terrible artist) assets, which would eventually semi-determine which buildings I would include in the game. Then it went like this:

  1. Spawn the ground.
  2. Implement Persons, as well as the logic for 'likes' and 'dislikes' interpersonal relationships.
  3. Add scores to each Person, like hunger, entertainment...
  4. Add a 'selector' that displays the info for each Person, along with their list of current problems.
  5. Add Buildings, and make them attract Persons according to their problems.
  6. Polish, adjust, refine, iterate. Implement Quality-Of-Life features and playtester feedback. (In the last hours of development ::D )

I won't go into the internals of how things work for Complexcity in this devlog, as it is not its purpose - however, I want to recount some of my thoughts on Bevy.

First Bevy-isms

I had never used Bevy before.  My free time on the third and fourth days of the Jam were spent on reading everything in the Bevy Book and Unofficial Cheatbook. Then, to kickstart my project and get a working setup for itch.io from the beginning, I took inspiration from Niklas Ei's bevy game template

Now that I am writing these lines, I realize that I don't actually have much to say about Bevy as a game engine. I loved the system of States, which made it super easy to implement a basic menu-or-playing system. I loved the system of Queries, which felt very natural when you get thinking in terms of components. I loved how a lot of my problems were solved by using a Resource to keep track of things. I think the only thing I didn't love was how little documentation there is if you don't already know where to look. To find how to use States, I had to read the migration guide from 0.9 to 0.10 for example. But that wasn't too bad, and the official examples helped a lot, once I decided to look at them ::') .

One issue that feels worth mentioning to myself so I don't run into it again, is that calling `clamp_length` with a non-zero min on a Vec2/Vec3 with zero-length is not a good idea.

What got cut

Ultimately, between the fact that this jam lasted only a week or so, and the fact that my work decided it was a good idea to be very busy this same week, I didn't have the time to implement everything I had in mind into the game. Some things had to be cut, but that in itself was a valuable lesson in scope management: I'm very happy with how the game turned out in the end ::D. 

So for posterity, here is what got cut, in order of done-ness at the time of submission:

  • Accelerated mode that speeds up all movements
  • Complex relationships between buildings (Homes don't like being close to Forums because they're noisy, etc)
  • Animation for the movement of Persons (I have the sprites for it, I just didn't dive into animation)
  • Underground Passage: a Building that would work in pairs, and teleport Persons from one building to the other. (I didn't have the time to implement the teleportation into the distance computations)
  • Roads
  • Random names for each Person
  • Sound effects

Final Thoughts

This was an amazing learning experience, and I feel like I learned more bevy in a week than I would've in months had it not been for this Jam. A big thank you to all the Bevy contributors, you're doing amazing work, and building an amazing tool.

I can't wait to play all of the other submissions! 

Final final thought: If you're wondering why my smileys have four eyes... Play Outer Wilds ;;D

Get Complexcity

Leave a comment

Log in with itch.io to leave a comment.