GGG: Galactic Grocery Gameshow
GGG was our entry for the GMTK Game Jam 2026, made in four days by a team of six on the theme "Count Down". You play a human abducted into an alien game show and dropped into an intergalactic supermarket, where you scan and shoot your way through hostile shoppers and sentient cereal boxes. Kills pay out in points and cash, cash buys grocery scans worth bonus points, and every round runs on a timer. Come up short and your home planet gets destroyed.
I worked the player side of the game: the 2D top-down character, movement and input, the camera, and the scan and shoot abilities.
Projectiles and the stun stars that play on a hit both spawn constantly during a round, so rather than spawning and destroying actors per shot I wrote a general-purpose object pooler in Blueprints. Pools are declared per object type with a size and a can-grow flag, and any actor opts in through a component and an interface that tells it when it has been pulled from or returned to the pool. Once it was working for bullets, the stun VFX went through the same system.
Movement & Camera
The 2D top-down character, mouse-driven aiming, and the smoothed follow camera.
Scan & Shoot
Scanning an enemy to stun it, then finishing it with the laser.
Pool Configuration

Every pooled type is one row of data on the pool actor: which actor to spawn, how many to create up front, and whether the pool may grow past that. Laser bullets and stun stars each start at 20 and are both allowed to grow.
ObjectPooler Blueprints
Setupblueprint
Builds the pools on begin play. Walks the configured object types and, for each one, spawns its instances up front so nothing has to be created mid-round.
GetPooledActorblueprint
The checkout path. Takes an object type and a transform, hands back a free instance, and tells it that it has been activated so it can reset itself. If nothing is free and the pool is allowed to grow, it adds a new instance rather than failing the request.
RegenItemblueprint
Spawns a single pooled instance and attaches the component that ties it back to its pool. Used both when the pool is first built and when it has to grow.
RecyclePooledObjectblueprint
The return path. Deactivates an instance, notifies it that it is going back, and marks its slot free for the next request.
RecycleActorblueprint
Returns a specific actor to its pool rather than one the pool picks itself.
BroadcastPoolerCleanupblueprint
Fires the cleanup delegate every pooled actor listens on, so instances tear themselves down when a level ends instead of leaking across a level change.
What I Did
Player Character & Combat
- Built the 2D top-down player character, including movement, input mappings, and mouse-driven aiming.
- Implemented the scan and shoot abilities, the projectile actor, and the combat interface enemies respond to.
- Fixed camera jitter and added smoothing so the camera tracked the player cleanly at speed.
Object Pooling System
- Wrote a general-purpose Blueprint object pooler that manages one pool per object type, each with a configurable size and an optional grow-on-demand flag.
- Exposed pooling through a component and a Blueprint interface, so any actor can be pooled and reset its own state when it is activated or sent back.
- Routed laser projectiles and enemy stun VFX through the pooler instead of spawning and destroying actors mid-round.
- Added a cleanup broadcast so pooled actors tear down correctly between levels.