Post Mortem: Prisoner 42


Overview

This game was for the Kenney Jam 2025 game jam, a two day, 48-hour jam. I signed up a while back just because I really like everything Kenney has done for the itch.io community and thought it'd be fun to try a short jam and focus in on making a small game. When I found out I was allowed to use KayKit resources, I was even more excited.

Sadly, while I made a polished-looking beginning, I once again fell down on gameplay. There really isn't any. More on this later.

I've been developing my own game template, and a while back I was working on a 3D character controller using KayKit's models. This meant that I could theoretically drop in new models. Since I joined their Patreon last year, I decided for this contest I'd use models I'd gotten from Patreon, specifically, Mystery Monthly Series 5.

I had learned from past short game jams that I need to make something REALLY SIMPLE to have any chance of completing it. So my plan was a roguelite so that I could use the same map over and over again, and just spawn in new enemies.

Initial Game Design

I really liked the Mecha that KayKit did and I've been wanting to do a sci-fi game.


I also knew there was a space base pack that would work for me to create the feeling that the Mecha was really huge.


There was also the new forest pack KayKit had released recently that I hadn't had a chance to play with.

Finally, there was this cool ice golem. from the Mystery Monthly Series 5.


I had done a bunch of work on one of my first game jam entries and created 3D ice shaders. So I already knew how to make a cool icy dungeon with KayKit resources, plus I had a number of VFX I had created.

So I decided on an ice mine. The theme POWER got me thinking that the game could be about a space installation that had geothermal power that had been shut off. I thought how cool would it be if the mine was dark, and killing enemies released energy that glowed. So you could use that to see, or you could pick it up for power.

I figured both your heath and your weapons would run on the same power. Every level you'd have the opportunity to transfer power back to the colony to keep it alive and keep your timer running. You could also use it for upgrades.

Icing Models

On the first day, I didn't get started until halfway through the day. I had things to do, including washing sick foster kittens we have. By the time I got started, it was evening. So I started importing models and making them look icy. This was admittedly fun, though ultimately not where I should have started. I ended up modifying models and wasting time on how they looked and didn't even use them - like the Black Knight. It was ultimately wasted time. I could have just used the ice golem as it was, but I was obsessed with making my use of the models "cooler" than what others might have. I wanted to stand out. Instead, I didn't finish.

I also spent time adding weapons and a shield to the models. Unlike older models, these models (and the player model) did not load with them. This was annoying at first - but I'm actually happy about it. Once I added a few BoneAttachment3D nodes it was pretty simple to tie the accessories back in and it's a cleaner implementation. In the future I have plans to update my character import script to create these bone attachments by default.

Game Template

I want all my game jam entries to look like polished-looking games, and I've been working on a game template system I've been working on for about 9 months now. This was my third game jam using the system. I learned a lot the previous two jams, and I have a huge list of improvements I want to make. For this one though, I was going back to a few components I've neglected - namely the 3D camera controller, and the 3D character controller. To even start using these two, I had to update the other components they were already using.

I have a growing number of repositories for every part of my system:

  • Camera - Camera controllers for 1st and 3rd person 3D cameras, and allowing the player to seamlessly switch between the them. (I used 2 of the 5 camera styles I had added.)
  • Character 3D - A default character controller for both 3D players and enemies that uses StateMachines and States.
  • Controller - Handles all player input (Input was already taken), including gamepads (XBox, PS, Nintendo), Mouse, and Keyboard. Manages multiple inputs and UI textures for all inputs.
  • Disk - Save/Load functionality for games and settings (two different systems),
  • Display - Changing screen resolution, full screen, multi-monitor support.
  • Game Template - Creates a UI including a menu that allows for changing various options as well as a StateMachine for the game that handles pausing/unpausing the game, integrating all the various components, showing splash screens, loading levels, etc.
  • Sound - Audio buses, volume levels, sound effect players, music player, songsalbumssound effects, and SFX projects.
  • State Machine - A node-based state machine model that can be used universally for both the game states and character states.

The Character 3D component was mostly functional, but it used an old version of my StateMachine code - before I had even made it a separate component. so first I had to refactor all the scripts that used it. Then I wanted to put it up on GitHub because I'd never gotten around to that.

Meanwhile the Game Template had an example 2D level and loaded it up by default, but I'd never done one for a 3D level. So I ended up making a version of that so I could test it out..

As I made any changes in my game, I made them in a folder called game_template_files. It is my hope that this will make the back-porting that I plan on starting today much easier.

This was an important step to take. I didn't have to do nearly as many changes this time as the last two times in regards to old

Player

Once I had updated all the States to use the appropriate addon instead of the old code, this turned out to be a huge boon. I had created my code in such a way that I just had to drop the imported KayKit model onto the player and it just worked! Part of this was a character import script I had written last year for KayKit models. The player imported without trouble, I could move around, jump and switch camera modes with very little work. I was very pleased with this part of the jam.

Music

I found an AI website called Suno in a previous game jam and used it to make the theme song for my previous game jam game. I thought I'd try it out because it was free. I had been thinking about my game while driving and thought it might be interesting if the player was a prisoner, forced to do this work. It was a different type of power altogether. I also planned to have two endings - one if you failed and "let" the colony die, and one if you saved it.

I still have mixed feelings about using AI music. I believe it's important for people to get paid for their work, and I have ethical concerns about how AI LLMs are trained. However I also realize that AI-generated content isn't going away, and I believe that as an indie developer with a team of one, I cannot do everything. Also I don't see this kind of tool going away. My thought is that in the future when I have enough money to hire artists (i.e. more than none) I can use this as a tool to say, "Here's what I'm thinking." For now, this is a 48 hour game jam and I wanted a theme song.

So I typed this in as my prompt: "Anime theme song with female vocals about Prisoner 42 who is going risk his life in his Mech to save the space colony against alien ice creatures in mines below the surface of a hostile alien planet." And I got the song Prisoner 42. This is where things really started to go off the rails for me. I spent the next hour or two re-doing the way my splash screens work so that I could play a song at the startup of the game and not have the next splash screen cut it off.

My Sound plugin work actually made the fixes pretty easy, and honestly the changes I made were for the better for my game template overall - but it sucked like 2 hours out because I then also wanted then splash screens to finish right as the lyrics started. Plus I had to build a Kenney Jam splash screen (which I made easy with copying). Then I wanted the name of the game to slowly fade in on the screen to match the music. (I planned to create a more interesting screen than straight black but never got around to it.)

Ultimately, these were changes that could have waited for another jam. I got seduced by the theme song.

State Machine(s)

Last game jam I finally played enough with my GDScript version of StateMachine and State nodes to the point where I'd made a lot of the design mistakes that got me to a pretty solid design. This was evidenced by the fact that I have to derived StateMachine states anymore like GameStateMachine or PlayerStateMachine. I also did all my changes to the GameStates in the aforementioned game_template_files folder so it's really easy to see any changes I need to make to update the template itself.

The thing I didn't have was states to control anything other than basic movement for a player - and even those had to be poprted over. Then for the monster I started porting over 2D states I'd done in my last game jam. One of the issues I was having was getting the enemies to consistently orient towards the player. Translating the 2D code into 3D space worked - kinda. I was able to implement IdleHurt and Death states pretty easily for the enemy. At this point though it was after midnight with a 10 am deadline and I was kinda burnt out. Also, I didn't have any health or attacks implemented.

Butler & Export Template Server Downtime

I learned last game jam how awesome Butler is. If you're uploading any content to itch.io and not using it, you owe yourself the time to check it out. It has saved me hours and hours of time.

Around midnight I decided I should export and upload the game. Well I'd also made the decision to use Godot 4.5-beta 3 for this jam. I plan to upgrade everything to 4.5 when it is released (which I expect will be any day now). So this was a good time to check it out. Of course I knew I had to download the ~1.5 GB of export templates. What I did not expect was Godot's only mirror serving it to go down. I decided it was time to go to bed.

A few hours later I was back up because I couldn't sleep. The server was back up too, and I did the download. While that was going on, I started making the game page cause I needed a place to upload the game. The exports (web and windows) took only a minute or so each. Then I used Butler to upload the game. While those happened I kept editing the game page.

Then this morning once I'd made a few more changes, the uploads literally only took about 30 seconds each because Butler only uploads changes to your game.

Early Morning

I woke up at 6:30 am and started working again. I added in a bullet, made a PlayerStateShoot and quickly hooked up the animation. I copied some code from a target-seeking projectile from another game. I was able to shoot the ice golem and have it react and even die, but the bullet only traveled in one direction. One of my translations wasn't working. I only had an hour left and I decided it was time to call it.

I made the decision a while back to post the shittiest game possible and still have a submission. Over time, my submissions are getting better, but I've also learned not to sacrifice my sleep and health for game jams. I'm learning to accept when I get o the end of a game jam that it's time to cut my losses. My game won't place, but I reached a stopping point and uploaded it despite any embarrassment I feel about the game not being finished.

My last game jam, I added in a screen resolution of 630 x 500 specifically for taking screen shots and not having to edit them down for the page. At this point it's easier for me to slap the text on the screen and take a screenshot than use GIMP or Krita to edit it. Next time I'm making a special no window mode because the screenshot contained the top of the window and one pixel on each side. Alternately, I might create an in-game screenshot function. This part of the game jam process was MUCH easier than past games. It took a few minutes instead of 30-60 minutes.

Conclusion

I have learned that I like trying new things and I benefit from things I've built in the past. Ultimately I plan to ship commercial games with the game template I've made. Having something that allows me to quickly put together and build games is going to continue to be a boon. I really saw the benefits this game jam and made notes for the next time.

I still am not learning the lesson of not doing new things in game jams. I have never done a shooter, but I decided to throw this in and I failed. I also will benefit greatly from finishing standard States for the Player and Enemies in both 2D and 3D.

Files

prisoner-42-web.zip Play in browser
Version 2 5 days ago
Prisoner 42.exe 203 MB
Version 2 5 days ago
prisoner-42-web.zip Play in browser
Version 2 5 days ago
Prisoner 42.exe 203 MB
Version 2 5 days ago

Get Prisoner 42

Leave a comment

Log in with itch.io to leave a comment.