Global Game Jam 2022: Retro

I attended Global Game Jam 2022. If you don’t know what a game jam is, the programmer in me will say “it is a hackathon but your product is a video game.” How did I do? As a learning experience I am proud of what I was able to accomplish. However; I think there is an opportunity to reflect on why I didn’t end up with a finished product. This article is my retelling of this year’s Global Game Jam.

My Game Jam Experience

48 hours until the Game Jam

First, what is this year’s theme?

This Year’s Theme Is…

Duality. Perfect and just what you would expect from a game jam theme. Vague. Anything fits if you squint hard enough.

I sign up for a local location. It isn’t fully virtual (thank God!) so I will be able to go somewhere and socialize with like minded people. Great!

I read the rules of the game jam. Even though the theme is announced and the time window is open for longer, a participant has 48 hours to complete them jam submission.

It’s January 19th now. I don’t want to waste time during the jam time. I’m going to do the chore of setting up my project’s CI/CD system and Unity project so I can see an empty video game on my phone on a public URL.

Commit history of January 19, 2022 where I initialize my project
Read commit history starting from the bottom

Nice. A beautiful but very empty Unity project can be seen from my phone behind https://aallbrig.github.io/global-game-jam-2022/WebGL/index.html

I believe all game jam organizers want their participants to be successful. They know the difficulty in building video games. This type of routine base project setup and thinking can optionally not count towards the 48 hours.

I can’t do anything else today. I brainstorm some notes in my journal.

Thinking about halo combat notes 1
brainstorm page 1
Thinking about halo combat notes 2
brainstorm page 2

So the theme is duality right? What about a Halo combat sim build to be played on your phone? Maybe the idea is that you defeat enemy combatants and then have them join you for points. The duality is that you are hurting the enemy to save the enemy. I imagine what the game looks like and how it plays on one’s phone. I really want to play this.

Here is what I imagine… A player is playing an isometric combat simulator on their phone (portrait or landscape) where they fight against elite, grunt, jackal, and hunter equivalents by moving (taps, swipes), shooting (tap enemy to prioritize targeting), throwing grenades & equipment (buttons on the right, tap to throw), and being able to melee (move player character within melee range). When the enemy health reaches 0, the player can then “revive” them for points and health. Shields regenerate, health does not. The player character should know how to fire at enemies by default within range, so the player’s focus is on maneuvering, prioritizing targets, and throwing equipment. The closer the player is, the more accurate fire will be. The player interactions is maneuvering, prioritizing targets, and tossing grenades and equipment.

Here is why I want to build this… I want to master A.I. and mastering behavior trees (BTs) is critical. In my research (HUGE shout out to gameaipro and GDC vault) I learn that Halo 2 is the first AAA game to introduce BTs into the video game space. It comes from other industries but Halo imports it into video games for everyone.

Its good to get the brain juices cooking on the idea.

Its Jan 20 now. Since I am going to a physical location I should think about play testing. I’ve generated QR codes for my past games I’ve built to share with arcade bartenders before. It sucks scrolling through my phone’s photo gallery to pull them up though. What if these QR codes are just embedded in the project. Yea, that’s the ticket…

Global Game Jam 2022 project page

Two commits later and I pull up a shareable QR code on my phone using my GitHub mobile app. This is going to be very cool and will probably blow some minds!

Having an easily shareable QR code is a God’s send for so many reasons. Everyone knows how to interact with QR codes nowadays too!

I bet there will be plenty of opportunities for play testing at the game jam location.

I stop to reflect. My CI/CD build system is Game.CI running inside GitHub Actions. That can run in either a private or public repo but it is more generous with public builds. However; my github repo must remain public to use GitHub Pages. Crap! Is there a way to version control free unity assets from the asset store without adding the actual assets to a public git repo?

The answer is NO. I am stuck with only using the 3D models default to the unity editor. There is no time to learn more Blender. This is a big disappointment to discover. I’m surprised that Unity doesn’t provide a Scripting API for the Unity Asset Store. I can try reverse engineering from Unity’s C# reference source code (specifically this directory). I try for a bit. I stop myself. Not now, later. Time is scarce.

It’s January 21. My jam location starts in the evening but it is during the day now. I use my day off to do more research for my game idea. I find the slide deck and GDC vault audio of the Halo 3 behavior tree talk and take notes.

Halo 3 GDC Talk notes 1
Halo 3 GDC Talk notes 2
Halo 3 GDC Talk notes 3

I think I can see this build a decent enough combat A.I. with the knowledge I gain.

It is the evening now. It is time to go to the game jam location. I go in my car.

48 Hours of Game Jam time

It is fantastic to see fellow nerds, geeks, and other manner of creative people. Time is spent being guided through Club meeting announcements and some other game jam adjacent topics. Participants are asked to socialize and form teams.

I speak with people. I have a goal set in mind. I decide to lone wolf it.

I am unable to get WIFI working at my location. I stream internet through my phone. It is very late in the day. Now that it is live jam time, it is time to push some up some legit game jam commits.

Read commit history starting from the bottom

My wife calls me to pick her up. I get some peer pressure from her and some friends to stay for a while. After a while passes I drive her home and go to sleep.

I wake up to January 22. Should I go to location? I need internet and streaming from my phone isn’t optimal. I stay at my house to work.

Read commit history starting from the bottom

Since I’m using Unity’s navigation mesh (aka nav mesh) and nav mesh agents and I want to test my game then I have to dynamically be able to generate a nav mesh for some of my tests. It is good to get it working. I have a automated tests that are driven by fake input and use dynamically generated nav meshes.

I figure out how to “talk” to Javascript on the web page from the Unity webGL build. I build it for an in game link to the source code from the game (WebGL: Interacting with browser scripting manual page). This is super powerful! I can get data from the page into my game which is a huge personal development. Pocket that and reorient on game jam.

I rough out some levels and enemy combatants. I use the default Unity shapes for the enemy combatants and Probuilder for the level. I lament that I can’t grab free assets from the Unity asset store. Oh well!

At this point I wish I had more to show a user. I stop to wonder how play testing would have steered my game production’s production. I bet there would be more of a focus on a playable game. Time to rest.

It is January 23 now. Time to push up more commits. There is no other option if I want to finish.

Jan 23 commits
Read commit history starting from the bottom

I add in files of a behavior tree and finite state machine library I’ve written before. I think of how I should to create a custom package out of these (Creating custom packages manual page) so importing isn’t a clunky barbaric copy and paste routine. Time is ticking so I grit my teeth and copy.

I build out some of level 1 and fill it with some game entities.

I improve my behavior tree implementation which I’m very happy about.

I’m so far behind now. I have something playable but it looks like it is in early alpha. Its no where near my vision. You can’t even interact with the enemy combatants in any way.

At least you can play it on your phone with very little friction.

Game Jam Screenshot 1
Game Jam Screenshot 1
Game Jam Screenshot 3

I have only a few hours before it is demo time. I make a choice. I don’t want to present. I wish I had more to show. It would be awesome to have everyone scan a QR code to play. I could grind out something to share in the short amount of time I have.

I decide instead to relax.

Thus concludes my experience for Global Game Jam 2022.

Reflection

It is important to go into a game jam with an idea of how you are going to build something.

Play testing is essential to maintaining enough excitement throughout the time you have. It is good to get other eyes on your game to watch other people play your game. It is a form of feedback and a form of collaboration. Building games requires play testing.

I need to figure out how to get regular play testing done while I’m building games. I think this will accelerate my growth in this hobby if I can figure this out.

Knowing now how to customize webGL build templates (Using WebGL templates manual page) and interact with javascript from a unity webGL build (Interacting with browser scripting manual page) is powerful knowledge. For example, this knowledge allows would allow me to handle accounts in standard web technology and share web page cookie information with the video game (like a session token!). I now have a bridge between the Unity world and the world of the web.

How do people use the Unity asset store in a way that is consistent with the Asset Store EULA and works with CI/CI build systems? I bet most people either (1) don’t care about committing (free) unity asset store assets in their public repo or (2) use private repos and commit (still a violation) or (3) integrate build pipelines that reach out to download bytes from S3 buckets or the like. That this doesn’t have an easily searched and clearly defined answer hints at how many others build using Unity and how Unity expects people to build. That’s a topic of another time.

As of right now, I don’t know how to programatically install asset store assets free (or paid, for that matter!) for my CI/CD build pipeline. Automation through CI/CD build systems is such a effort multiplier so I refuse to trade it in for an asset store. The individual parts of the CI/CD system are most certainly replaceable. Clearly, I need to work around this limitation and figure it out, and I have some leads. #programming

I am thrilled that I’ve finally written an automation test simulating how players will interact with the game. Previous tests have been around game play interactions. This expansion of testing knowledge will serve me greatly from now on.

I think if I had made different choices the outcome of the game jam would have been different. I reflectively wonder…

  • What if I decided to work in a team?
  • What if I decided to work on someone else’s idea?
  • What if I had worked at the live location?
  • What if I regularly play tested it throughout production?
  • What if I could have used free assets from the unity asset store?
  • What if my target platform wasn’t webGL running inside GitHub Pages?
  • What if I presented my game at my location’s demo?
  • What if I spent more time on the game?

Conclusion

On VR chat I have repeatedly told internet strangers that Global Game Jam 2022 would be a milestone of how far I have come in my video game creator journey. In very many ways I am proud of what I gained from the GGJ2022 experience. In other ways I am disappointed that I am not further along.

Truly Global Game Jam 2022 indeed serves as a milestone and a moment to be proud of the hard work I have put into getting myself where I am. I can better see where I am in relation to where I want to be. I will this experience to inform what to study next.

I can’t wait to see what I am able to produce for Global Game Jam 2023.

Resources

Project source code repository

Play the game

Global Game Jam 2021 Retro

Leave a comment

Your email address will not be published. Required fields are marked *