Postmortem: Aeolus and the Missing Wind


Making The Game

I thought about joining Micro Jam 024: Wind, but couldn't figure out anything I wanted to make. What I really wanted to work on was learning how to use TileMapLayers in Godot. This past week I have been learning how to do procedural map generation with TileMapLayers. I got Jamie Brownhill's World of Solaria Complete Bundle. I love the art. One of the things I like is the seasons, and I really wanted to figure out how to swap tiles out programmatically. I decided that, and playing with Dialogic were what I really wanted to do.

Saturday I was talking to a friend, and I mentioned the game jam, and that I had decided not to do it. He encouraged me to create the crappiest game I could that met the requirements anyway. So I went home and thought about it. This was a 48-hour game jam, and I had already missed the first 20 hours. But, I decided he was right. Completing a game on a deadline would help me. I've read a lot about the benefits of submitting to game jams. It was also a chance to work on a 2D game. So far I've been mainly working in 3D.

I then spent the next 24 hours playing with tile swapping. I had it working great, made some tweaks, and introduced a bug. But I had a little more than 4 hours left and had nothing else. I still needed to make a character, add controls, have a win condition, add music and sound effects, add a story and control info.

Godot has some bootstrap code for creating characters, and I had an example I'd downloaded that allowed me to learn how to add sprites, animate them, and cram them into a controller. I'd done this before in 3D, and while there were a few gotchas, after half an hour I had a working character. I attached my camera to him, and was ready to move on.

I was worried about export and having issues, so I decided to stop, create my page, and upload the game. I was really disappointed when I found out I had accidentally deleted a batch file tool I made for popping up a test webserver - from TWO different places! So, I couldn't test my web export before upload. This was a bummer, but I didn't have time. I launched the game and made it live. Another 30 minutes down.

Next I installed Dialogic. I had a story - kinda - but I needed Zeus to give some exposition. I found a crappy free pixel art version of him online and used that as a portrait. Then, I tried using a sprite sheet for Aeolus' portrait. After a few wrong turns trying to use that, I opened up Paint, cropped it to one picture, and threw that in. Luckily the tutorial showed me how to add in code, and I got that running.

I decided that a bag would be what the East Wind was kept in, because in the Illiad, Aeolus traps the winds in a bag. I quickly created a sprite and added some collision code that could run a second conversation. I added that second conversation, and used another cropped sprite sheet for his character. They were literally butting heads, but at this point I didn't have time to deal with Dialogic. I was another 30 minutes down.

Next up was music. I have a ton from ELV Games and Ovani Sound that I love, but I just wanted a few songs. (BTW, if you want music, ELV has the Fantasy Fanfare Bundle that is so worth the money. Also, Ovani has AMAZING Humble Bundle promotions, and if you get on their mailing list, they have really great weekly deals on sound effects, plus FREE weekly sound effects.) I load all my game music into WinAmp. I rate it, and I use the Genre column to fill in what I think the music would be good for. So I loaded up all 123 albums of game music, organized by genre, and quickly found some songs that fit.

I created a nice little Sounds singleton for my other games that I used, but the other day I "upgraded" it. I made it so music is actually loaded in resources that contain the Song Title, Artist, Album Name, and Album Link. I love sharing great music and where I got it. However, loading this information in is manual currently, and I didn't have time. So I had to do it quick-and-dirty. I exported variables for the 5 songs I picked, and then just tied each one to an event or button-press (the three winds). Easy peasy lemon-squeazy.

Now I just have some sound effects. In one of the many Ovani deals, I got an entire pack of over one hundred Air Sound FX. So, I trawled through it, listening until I found a few sounds for each action press. I hooked those up to a second AuioStreamPlayer using a third SFX bus. At this point I played the game again, and I wanted to claw my eyes out because the music was so loud. I didn't have time to make a volume slider, or a menu really, so lowered it manually in the editor for the Music bus and moved on.

With sound and dialog in, it was time for another upload. Now at least it was a little more than a weather changing app for a fantasy town. That export went well, and I was feeling better about my submission. However, there was NO collision detection in the entire game. You could walk anywhere. I spent all my time and effort coding tile-swapping using three different methods bade on 9 layers of tiles. But you could walk anywhere, even on water. I'd always envisioned that the seasons would be puzzles, and one would be you could walk on water when it was frozen. (Thank you, Zelda: Oracle of Seasons). I actually spent time last night find vines for spring/summer and coming up with obstacles for each season. But I spent all my time on season switching.

So, with 45 minutes to go, I started adding collision detection. Another friend called and is having a bit of a crisis, so I'm talking with him while I'd adding collisions to tile maps. I made it so you couldn't walk out onto the water, but could on the ice. That done, you at least had to do one puzzle to get to the end of the game. I only had about 30 minutes left, and there was basically one house on the screen. I decided making the game look more interesting was better than a blank slate. After all, I had done all that tile-swapping code, and it (mostly) worked! A little decorating, and the last 15 minutes were spent uploading my final version.

Lessons Learned

  1. Learning is fun, but doing it in a game jam isn't the best use of my time. On the one hand, it's a great way to learn things fast. On the other, it leads to me not being able to finish my game.
  2. Planning ahead of time would have been great. I had no idea how to make a GAME out of my idea. I just wanted to play with seasons changing at the press of a button. It was magical. It was fun. But what would have been even cooler than a quest would have been making an in-game placement game that just let you build stuff. Not sure how I would've tied that into the "wind" theme, but I could have shoehorned something.
  3. Cowboy coding is the way to go - refactoring has to wait until later. After more than 25 years in the software development industry, I have a lot of really good professional habits that are detrimental to me when doing game jams. I typically refactor code as I write it. A method will usually go through half a dozen iterations, and also usually be chopped into smaller pieces. While I love Object-Oriented Programming, I'm a big fan of reducing cognitive load (keeping the numbers of conditionals and indents to a small number per function) when reading my code. Also, I really enjoy the elegance of Functional Programming. During this jam, I tried to keep that to a minimum, but I got to the point where I had to refactor some code because I was copypasta-ing all over the place. There's a balance, and I will probably find it.
  4. I want to learn how to make Godot Plugins. I have a lot of really cool things, like my sound system, that I like. When I want to fire off a sound effect, I just do it. My Sounds singleton handles the AudioPlayer, and all the cleanup involved. I don't have any AudioPlayers in and of my objects unless they have a sound effect that needs to be played in 3D (or 2D) space relative to the player. In which case, I just pass that information to the Sounds singleton. Likewise, I have a way to display all the information of a playing song, and soon I plan to have a music player inside my games. If that was all a plugin, I could easily port it from game to game. (I love modularity.)
  5. I feel good about uploading a game even though it's crap. My friend was right. I listened to him instead of my perfectionism, and I now have experience. Technically, this is my second game jam. My first I was unable to upload my game because my internet died in the last few hours when I planned to upload. I was devastated. And now that game has become something I've spent a lot of time polishing. My 2D Shaders and 3D Ice Shaders came out of that journey. But it has languished because there are so many little polishing things I want to add to it. After today, I believe the truth is I need to publish it and move on. I learned a lot about letting personal projects be done - even when you don't think they're ready. (Something that ironically I often argued for in my professional career over the years.)
  6. Games not exported to the Web are a PAIN to evaluate. I already knew this logically, but after playing every other submission, and cringing at the Windows warning with unsigned executables, I really appreciate the safety and ease of web games. The fact that two people uploaded games that had nothing to do with the Jam (and one had devlogs from January) tells me I need to be careful downloading game jam games willy-nilly.

Final Thoughts

I played every single one of the other 32 entries in this game jam. I found some new resources. I learned half the people don't put much information on their submission pages - often no screenshots. There were a few that were fun. My game came out pretty close to the bottom in my opinion, but I learned what makes a good game in a 48-hour jam - and where the bar for the future. My game will be better next time.

Files

aeolus.zip Play in browser
9 days ago

Leave a comment

Log in with itch.io to leave a comment.