[GAME DESIGN · C++ · PIXEL ART · ORIGINAL MUSIC]
A pixel game that makes ocean pollution feel urgent before you have time to think
Plastic Panic is a 2D pixel game built in Godot using GDScript. The player controls a sea turtle navigating a procedurally spawning debris field; spawn rate scales with elapsed survival time. Collision applies a progressive speed penalty until movement stops. The mechanic is deliberately simple: the weight comes from what the turtle represents, not from system complexity.
Skip to Final Design ↓SCOPE
Game Design Creative Technology
ROLE
Solo. Visual design, Godot/C++ programming, sprite animation, and original music composition in Strudel.
[PROBLEM SPACE]
Environmental education fails when it lectures. It works when it makes you feel something first.
A beach cleanup in Bali made the scale of the problem concrete: plastic being collected was immediately replaced by new plastic washing in from the tide. The cleanup felt futile in a way that was clarifying. The problem is not littering; it is throughput. Plastic Panic communicates that through repetition: trash keeps spawning, spawn rate keeps climbing, and the player has to keep moving.
[CONCEPT]
The mechanic is simple. The weight comes from what the turtle represents.
A sea turtle navigates an ocean filling with debris. Spawn rate accelerates over elapsed time; there is no winning state, only a longer survival interval. Collision triggers a progressive movement speed reduction until the entity reaches zero velocity. No explosion, no game-over fanfare. The system is designed to feel futile just before it terminates.
[PROCESS]
Sprite Design
All assets were drawn in Procreate at 32x32px: the turtle, three trash variants (plastic bag, bottle, wrapper), and tiling ocean background. The 32x32 constraint enforced legibility at runtime scale with no room for surface detail. Character and object designs were kept visually distinct to ensure immediate readability at high debris density.
Animation
The turtle swim cycle is four frames: neutral, left-stroke, glide, right-stroke, running at 8fps. The low frame rate reinforces the underwater physics feel and distinguishes the character from surface-speed game conventions. Trash objects use a per-instance randomised drift vector to simulate ocean current; no two objects move identically, preventing the scene from reading as static.
Gameplay Mechanics
Built in Godot using C++. Movement uses a momentum model: the turtle continues moving after input is released, making avoidance feel physical rather than cursor-like. Trash objects spawn from the right edge at randomised heights and speeds scaled to elapsed survival time. Collision detection uses Godot's built-in Area2D nodes. Score increments per second survived. No threshold, no congratulations screen.
Sound
The soundtrack was composed in Strudel, a live-coding environment for generative music. A pentatonic melody runs over an ocean-ambient drone. Tempo is directly coupled to the trash spawn rate: as the spawn interval decreases, BPM increases proportionally. Tension escalates in the audio before the player consciously registers it in the game state.
[FINAL DESIGN]
Plastic Panic
Plastic Panic. A game about surviving something that does not stop.
[REFLECTION]
What coding the mechanics taught me about what things mean.
Momentum is a design decision, not a feature
Movement tuning took more iteration than any other mechanic. Too much momentum and the game becomes uncontrollable; too little and it reads like a cursor. The turtle needs to feel alive, which required more precision in the physics parameters than expected.
The score is the message
Survival time as the score metric communicates one thing: you can last, but not forever. A v2 would convert elapsed time to a real-world data point at the game-over screen. "You lasted 47 seconds. That's how long it takes 8 million plastic bottles to enter the ocean."





