DEV Community

Cover image for From Childhood Inspiration to Reality: Building My 2D Platformer Game With Kiro
Behrouz Pooladrak
Behrouz Pooladrak

Posted on

From Childhood Inspiration to Reality: Building My 2D Platformer Game With Kiro

Glitch Dimension - Broken Reality

As a teenager, I lost hours to Crash Bandicoot, tight jumps, fast loops, hidden gems. Back then, I never imagined I’d one day create a platformer myself.

Today I’m doing just that. My game, Glitch Dimension, is built in Godot 4.4 for the web. But I didn’t build it alone Kiro was my copilot, keeping me fast, focused, and honest.

I explored freely in Vibe. I locked plans in Spec. I automated the boring parts with Hooks. Result: momentum without chaos.


The Kiro Loop That Powered Development

Vibe → Spec → Hooks → Iterate. That rhythm turned fuzzy ideas into shippable work.

  • Vibe Mode let me sketch in code. Try a jump buffer. Nudge gravity. Break and fix fast.
  • Spec Mode forced clarity. I wrote short specs for movement, level flow, checkpoints, enemies, and the level map.
  • Hooks did the chores. Clean temp scenes. Run with verbose logs on macOS. Keep the repo lean.

Kiro made agentic coding real not hype, just a simple loop that compounds.

A circular flow showing Vibe, Spec, Hooks, Iterate


What The Player Feels First

  • Dimension Flip with FX and audio. Switch A ↔ B to dodge hazards and reveal routes.
  • Tight Platforming with coyote time, jump buffer, variable and double jump.
  • Level Select Pro with a data driven map, unlock rules, cards, and thumbnails.
  • Boss Battle against a giant with phases and a clean health UI.
  • Saves and Progress that persist on web and desktop.
  • Pause and Scene Flow that never glitch your state.
  • Touch Ready for phones and tablets.
  • Offline Analytics so I improve design without tracking users.

a short clip of dimension flip through spikes into a secret


Production Mindset From Day One

Kiro pushed me to design as if this were a product for real players, not just a quick demo.

Modular Actors

Core actor types form the foundation (player, interactive objects, collectibles, enemies).

On top of that, snap-in components handle things like health, movement, animation, audio, effects, and state — making behavior easy to mix and match.

Scalable Event System

A clean event bus organizes communication between gameplay elements, UI, audio, and effects.

It enforces clear categories, strongly typed messages, and automatic cleanup — reducing bugs and making systems easier to extend.

Reliability and Fallbacks

A central system manager checks whether critical features are available, provides safe calls, and loads fallback resources.

If something fails, the game degrades gracefully instead of breaking outright.

IDE Kiro


Dynamic Platforms That Behave Like Actors

Platforms aren’t just scenery — they behave like active systems.

  • Editor Friendly: Easy to preview and adjust in real time, with direct controls for size, textures, and collisions.
  • Accurate Physics: Collisions line up with visuals, avoiding gaps or mismatches. Movement, rotation, and scaling all stay consistent.
  • Breakable Lifecycle: Platforms can shift through clear states — stable, touched, shaking, broken, destroyed — with effects, delays, and particle feedback that scale naturally.
  • Dimension: Built with room to expand, including integration for world-switching and visual feedback.

A platform that shakes, breaks, and drops


Enemies That Think A Little

Flying Enemy AI

  • Obstacle Avoidance using a few forward rays to detect collisions. If blocked, it shifts vertically or horizontally and eventually reverses if stuck.
  • Chase Behavior triggers when the player is within a close range, with a speed boost. If the player escapes beyond a certain distance, the enemy cools down and stops chasing. Line of sight can also be required.
  • Smooth Movement with gradual turning and speed adjustments keeping a safe distance and favoring the path of least resistance.
  • Performance Budget kept lean with lightweight math, staggered updates, reduced checks when off screen, and a low-frequency mode when idle.

A flying enemy in chase states


Level Selection That Feels Like A Storefront

A horizontal carousel displays multiple cards at once, snapping smoothly with clean focus.

  • Navigation with left and right, smooth scroll to selected, focus indicators, and a tiny state model for index and scroll position.
  • Config in a JSON like model that sets dimensions, smoothness, speed, snap and effects.

The Level Map

Fun easter egg (Cheat code): press zero five times on the map to unlock all levels — handy for testing or exploring.


Systems That Keep The Game Together

Here’s the backbone of the game, held together by lightweight Godot scripts:

Core game flow:
Game.gd (state, scoring, attempts)
LevelLoader.gd (async loading)
SceneManager.gd (transitions)
PauseManager.gd (pause overlay and flow)

Presentation & effects:
Audio.gd (buses, pooled SFX)
FX.gd (screen shake, flashes, hit stop)
DimensionManager.gd (flip rules and feedback)

Persistence & meta:
Respawn.gd (checkpoints)
Persistence.gd (profiles, stats)
LevelCompletion.gd (end celebrations)
Analytics.gd (local logs)

Utilities:
ObjectPool.gd, HealthSystem.gd, GameTimer.gd, EventBus.gd, PerformanceMonitor.gd


Inputs, UI, And Accessibility

Keyboard: WASD or arrows to move, Space or W to jump, F to flip, ESC to pause, R to restart.
UI: Main Menu, Level Map Pro, Pause Menu, Results, Settings, Touch Controls, Game HUD, and Boss Health UI.
Accessibility via data/game_config.json: color blind, high contrast, reduced motion, large UI. Live overrides through a ConfigManager.

Main menu


Audio: Small But Considered

  • Buses: Master, Music, SFX
  • Pooled SFX players for performance
  • Volume sliders with persistence
  • Ogg friendly for the web
  • Narration ducking supported in code

Thanks to Elevenlabs, I generated high-quality voiceovers for guides and the boss, each with distinct voices.


Performance And Stability

  • Object Pooling for particles, debris, collectibles, transient actors
  • Rendering with texture compression, efficient collisions, groups, culling, and dimension masks
  • Memory And Loading with resource caching and cleanup plus async LevelLoader
  • Analytics categories: gameplay, UI, performance, error, progression, monetization. Batched locally. Opt out respected. No networking.

Performance targets: 60 FPS, <1 GB RAM, first load under 10 seconds, <50 MB total download.


Levels And Progression

  • Level00 First Steps. Short and friendly.
  • Level01 Mystic Realms. Crates, first enemies, secrets.
  • Level02 Parallel Worlds. Heavier dimension gating, moving platforms, flying enemy intro, frequent checkpoints.
  • Level_GiantBoss The Giant’s Last Stand. Arena with phases, projectiles and shockwaves, dimension aware openings, and a dedicated boss UI.

Unlocks are data driven in data/level_map_config.json: previous level, minimum score, and more planned like deaths max and relic count. Thumbnails, lock overlays, latest score, best score, and hearts are all in the cards.

GiantBoss


Web-First Delivery

  • Renderer set to GL Compatibility for the widest web support
  • Resolution 1280 by 720
  • Responsive canvas and touch aware inputs
  • Vercel deployment with smart headers and caching via vercel.json
  • Exports for Windows, macOS, and Linux ready

The game running in a browser tab

https://glitch-dimension-broken-reality.behrouz.nl/


Why Kiro Deserves The Credit

Kiro kept me honest.

  • Vibe for speed.
  • Spec for shape.
  • Hooks for hygiene.

It nudged me toward a production mindset without slowing me down. It made me write specs. It gave me fast feedback. It helped me avoid the classic indie trap: adding features without a spine.

Strong opinion: if you are building anything with moving parts, use Kiro like a metronome. Keep time. Keep pace. Ship.


Credit

Closing

The spark was Crash Bandicoot. The engine: Godot. The catalyst: Kiro.
Together they turned a teenage dream into a playable, web-first platformer with real systems and room to grow. If this is agentic coding, I am in.

👉 Play the game here: https://glitch-dimension-broken-reality.behrouz.nl
💬 Feedback welcome — I’d love to hear what you think.

Top comments (0)