Overview

20 Minutes Till Showtime was made for the GMTK Game Jam 2026 in four days.

Following the theme “Countdown”, the player solves a mystery within a 20 minute timer. The game features multiple characters with dialogue, a system for collecting clues, and a “Timeline” menu where you place relevant clues to solve puzzles.

It placed 1454th for narrative out of 10k entries.

Gameplay

Meet unique characters image Search the crime scene for clues! image

Solve the murder image

Code

I was responsible for all programming during the jam. My workflow usually consists of building tools for designers to use so they can assemble the finished game, which worked very well for this project. As most of the content is cutscenes and dialogue, I chose to use the Godot Dialogue Manager plugin, which adds a whole dialogue tab to the Godot editor with basic scripting capabilities. Then, I created global functions for the writer to call from directly in the dialogue window. This included adding clues to the player’s inventory, making characters walk around, changing the dialogue line of objects, spawning/destroying objects, open doors, and more. This gave the designers free reign to create story content without being bogged down by the programming side of things. image I also created a puzzle-solving system where the player places clues they found onto a timeline to determine what happened at a crime scene. Again, the goal was to make these puzzles easy to implement for the designers without them having to interface with the actual code. I created two types of resource (a Godot class that’s like a saveable struct) to support this system. One resource for the puzzle itself, containing a title and a list of the answers, and a resource for each clue containing an icon, name, and description. This way, the designers can make as many puzzles and clues as they want, and give them to the player using the dialogue system using this function:

# function takes in a clue (TimelineEvent), 
# and the timeline(puzzle) index to assign it to
func add_event(event : TimelineEvent, timeline_index : int):
	var timeline_menu = menu.get_timeline(timeline_index)
	if timeline_menu:
		# add the event to the proper place
		timeline_menu.add_event(event)
		menu.show_timeline_tab(timeline_index)
	else:
		# error message
		print("Menu not found")

Last-Minute Rewrite

On the last day of development we had a major issue with the story: It didn’t make sense! It was a very ambitious and overcomplicated idea that simply couldn’t have been executed in the time we had, even with the robust set of features ready to support it. There were four murders, secretly-alive suspects, and a lot of plot holes. Instead of continuing to polish the programming side of the game with things like menu animations, additional sound effects, and better overall gamefeel, I took on the responsibility of helping implement a fully reworked story.

This is where my partner, Kit, came onto the project. She swooped in and wrote a simple usable overall story, but she’s not a game developer so I handled implementation. I had to write dialogue, script NPC movements, and create resource objects… a programmer’s worst nightmare. Fortunately, my efficient dialogue and puzzle systems made implementation very easy. We also had the diligent support of Ben making new art assets to support this reworked story, which helped a lot.

Additionally, the story was most of what fulfilled the “Countdown” theme, it featured a gun with numbered bullets, like the victim’s bodies were counting down to the final shot of the gun. Because this was cut, we had to add the much less inspired feature of a time limit. At least we managed to make it make a little sense within the story, though! In the end, we ended up with something that I’m still very proud of, especially after the story fiasco. It had three puzzles used to solve one murder, and a satisfying comedic conclusion. Case closed.

Credits

Created by Abby Smith, Ben Baker, Kit Taylor, and Isaiah Sugar. Made in Godot Game Engine. Using Godot Dialogue Manager by Nathan Hoad.

The code is available on my GitHub page