Building a Full Arcade Shooter With AI
Interactive Systems12 min read

Building a Full Arcade Shooter With AI

Designing Terminus Breach, a polished side-scrolling shooter built with AI-assisted development, layered systems, and a deep love of classic arcade design

Building a Full Arcade Shooter With AI

Designing Terminus Breach

Play Terminus Breach

Terminus Breach started with a different kind of ambition than Radial Drift. This one was not about inventing a completely new gameplay mechanic. It was about proving that I could take a genre I’ve loved for years, the classic side-scrolling shooter, and build a version of it that felt deep, polished, atmospheric, and genuinely complete.

Games like R-Type, Gradius, and other late-80s and early-90s arcade shooters have always had a special place in my head. I wanted to build something in that lineage. Not a throwaway prototype. Not a shallow AI-generated experiment. A real game with enemies, bosses, progression, upgrades, systems, style, and enough mechanical depth to feel like it could have existed as a serious arcade release in another era.

That was the challenge I set for myself.


Starting With a Visual Experiment

The project began with a much smaller question. I wanted to see if I could create a side-scrolling neon cave that felt exciting to move through.

That was the initial spark.

I chose Three.js and WebGPU because I wanted the best browser-based performance I could get without stepping into Unity or Unreal. Those engines are powerful, but for this particular project I wanted a faster and more direct path from concept to execution while still aiming for a high-end visual result.

The first version was close, but not quite right. It leaned too far into actual 3D space and didn’t yet feel like a proper side-scroller. So I kept adjusting the prompts, the camera, and the rendering until I found the right balance: a game that plays like a side-scroller, but still has real depth and dimensionality.

That visual tension became the foundation for everything else.


A Modern Twist on Vintage Arcade DNA

Once I had the terrain shaping working properly, the game started finding its identity. The scrolling lines at the top and bottom of the environment are a clear nod to older games like Scramble and Defender, but I pushed them into a more modern wireframe direction. The result felt retro without simply copying the past. It looked like an old arcade memory filtered through newer technology.

I also added an optional CRT shader, because I love old tube-display visuals to an almost unreasonable degree. Once it was in, the whole thing clicked much harder. The scanlines, glow, softened image, and subtle arcade-monitor feel gave the game exactly the kind of vintage character I wanted. It stopped feeling like a modern game borrowing from retro aesthetics and started feeling more like some lost arcade machine from a slightly better timeline.

That kind of detail is easy to dismiss as cosmetic. It isn’t. It is part of what makes a game feel finished.

CRT mode in Terminus Breach The optional CRT shader adds scanlines, glow, and softened arcade-monitor character, pushing the whole presentation closer to the cabinet-era feel I wanted.


Finding the Core Loop

Once I had a ship on screen, movement controls, terrain, and some floating asteroids to shoot, I hit the moment that matters most in any game project:

Is the basic loop actually fun?

That is the question that decides whether a concept deserves more of your time.

In this case, the answer was yes. Flying through a procedurally generated cave, weaving around the terrain, and shooting obstacles already felt good. The movement had energy. The setting had atmosphere. The visual style was working. There was enough there to suggest that the game had a real future if I kept pushing it.

A lot of projects stop when they reach that point. I wanted this one to keep going.


Expanding the Enemy System

Once the core loop proved itself, the next step was making the game feel alive. That meant enemies.

I wanted a broad enemy roster with distinct silhouettes, attack patterns, and tactical roles. Some are airborne. Some are ground-based. Some fire direct shots. Others launch rockets, bullet volleys, shockwave-style attacks, or heavy beam weapons. Some move in formation. Some act more like embedded defenses. The goal was not just variety for its own sake. The goal was pressure from different directions.

The player should not feel like they are solving the same encounter over and over. Every new enemy type needed to add a new kind of tension or decision-making. That is where the game started gaining real depth.

For enemy concepts and visual inspiration, I used Google Nano Banana to explore designs that fit the neon wireframe aesthetic. From there, I fed those ideas into my AI coding workflow and iterated until I had enemies that looked and behaved the way I wanted. The process was not one-click magic. It was back-and-forth, refinement, approximation, and repeated adjustment until the result felt right.

Enemy variety and combat pressure in Terminus Breach Enemy variety was a huge part of the game’s depth. Airborne attackers, formations, ground defenses, and layered projectile patterns all combine to create real combat pressure.


Designing the Difficulty Curve

One of the most important things in arcade design is difficulty pacing. A game like this cannot simply get harder at random. It has to escalate in a way that feels deliberate, fair, and compelling.

A friend once sent me an article about designing difficulty curves in games, and it has become one of the most useful pieces of design guidance I return to. The core idea is that challenge should rise steadily without becoming frustrating, stagnant, or unfair.

That philosophy shaped Terminus Breach in a big way. As the game progressed, I introduced more varied terrain, stronger enemy combinations, and increasingly complex encounter patterns. The player starts in relatively manageable scenarios and gradually enters a much harsher world, but the progression is designed to feel earned.

The best arcade games are difficult, but they also feel readable. They push you without making you feel cheated. That was the standard I was aiming for.


Building Distinct Levels and Atmosphere

Once the enemy roster and pacing systems were in place, I started working on the world itself. The terrain needed to evolve visually as the game progressed. The backgrounds needed to feel like more than filler. The environments needed enough variation that the player would feel they were moving through distinct zones rather than replaying the same visual beat again and again.

So I built different terrain treatments, different line styles, and different background looks across the game.

Much of that visual material was procedurally generated or AI-assisted, but always with a lot of manual tuning. I sometimes used generated images as inspiration, then kept iterating until the in-game result felt cohesive and attractive. That mix of procedural structure, visual experimentation, and repeated refinement helped the game feel larger than its technical footprint.


A Full Weapon Matrix

No arcade shooter feels complete if the player can only fire one basic shot forever. Weapons are not just functional. They are part of the fantasy.

So I built a full upgrade matrix inspired by the layered weapon progression systems I loved in games like R-Type and Gradius. The player can collect power-ups and build toward stronger offensive and defensive capabilities over time.

These include:

  • faster ship movement
  • faster bullets
  • side shots
  • rear shots
  • spread shots in multiple strengths
  • homing missiles in increasing counts
  • shield support

The system gives the player meaningful decisions instead of passive upgrades. You are not simply becoming stronger. You are shaping a build.

That changes the emotional experience of the game. It creates momentum, identity, and strategy. It also introduces balancing challenges. In later levels, a fully stripped-down player is simply too weak to survive. So I had to make sure death felt like a setback without turning the run into a hopeless slog. When you lose a life, you lose some strength, but not everything. You retain enough progress that recovery is still possible.

That tuning took real effort, but it was essential. Without it, the game would have been much more frustrating than fun.


Making the Nuke Matter

One of my favorite elements in Terminus Breach is the nuclear weapon.

I spent a ridiculous amount of time making the explosion look as good as possible. It has the double flash, the expanding shockwave, the mushroom cloud, and embers falling out of the plume. It is dramatic, excessive, and exactly what it should be.

But a spectacular effect is not enough on its own. It also needed a reason to exist.

So I made nukes scarce. The player can only hold a limited number, which means they are not something to throw around casually. Then I introduced heavily armored ground-based mini-bosses that can technically be destroyed with conventional weapons, but doing so is slow, dangerous, and often lethal.

That gave the nuke a real strategic role. It became something you save, something you value, and something you deploy when the stakes justify it. Scarcity transformed it from a flashy gimmick into an actual system.

That is usually the difference between a cool idea and a good design decision.

The nuclear blast in Terminus Breach The nuke was designed to feel rare, devastating, and worth saving. Its real value comes from giving the player a tactical answer to heavily fortified ground targets and mini-boss encounters.


Bosses, Rogue AI, and the Right Amount of Cheese

No shooter in this tradition is complete without end bosses.

Terminus Breach includes increasingly powerful boss encounters built around the game’s core fiction: a world overtaken by rogue AI and machine intelligence. Each boss represents a more dangerous technological threat, with its own offensive patterns, presence, and challenge level.

The bosses needed to feel like genuine milestones. They had to be dangerous, visually distinct, and satisfying to overcome. I also made sure they reward the player with meaningful upgrades after victory, which helps offset the cost of surviving those encounters and keeps the run moving forward.

Then there was the story. It had to be a little cheesy. That was intentional.

I wanted the fiction to feel in tune with the late-80s and early-90s arcade sci-fi energy that inspired the project. The setup is pure pulpy arcade drama: rogue AI has taken over, and humanity’s last hope is a ship with no onboard AI and no computer guidance at all. That makes it unpredictable. The enemy systems cannot anticipate its pilot.

That pilot is you.

It is dramatic, a little ridiculous, and exactly right for the game.

End boss encounter in Terminus Breach Boss encounters were designed to feel like true arcade milestones: visually distinct, dangerous, and satisfying to survive.


Using Multiple AI Models as a Real Development Workflow

One of the biggest lessons from Terminus Breach is that AI-assisted development becomes much more powerful when you stop treating any single model as the whole solution.

Throughout this project, I moved back and forth between Claude Code and OpenAI Codex constantly.

Some things worked better in one environment than the other. Sometimes one model would build a feature and the other would do a better job reviewing it, debugging it, or optimizing it. Sometimes a bug that stalled progress in one place became easy to solve by asking the other model to inspect the same problem from a different angle.

That back-and-forth turned out to be one of the most useful parts of the whole process.

Instead of using AI as a novelty, I used multiple models as complementary collaborators. One could generate. Another could review. One could refactor. Another could optimize. That created a much stronger workflow than relying on a single tool in isolation.

We did performance passes. We did bug-squashing passes. We kept tightening things until the game stopped feeling fragile and started feeling solid.

That is where the real advantage shows up. Not in one-shot generation, but in orchestration, iteration, and judgment.


Music, Sound, and Feedback

A game like this also depends heavily on sound.

I used Suno for the music and ElevenLabs for the sound design, and both were incredibly useful. Suno helped me generate music that felt energetic, varied, and tonally right for the game’s arcade-inspired world. ElevenLabs let me create a wide range of specific sound effects, from weapon fire and explosions to larger cinematic moments like the nuke and boss destruction.

That audio layer matters more than people sometimes realize. Weapons need impact. Bosses need presence. Explosions need weight. Without strong sound, even visually impressive interactions can feel strangely flat.

The music and effects helped make Terminus Breach feel much more complete and premium.


A Fully Polished Arcade Experience

By the time Terminus Breach reached completion, it included:

  • a side-scrolling arcade shooter framework built in Three.js and WebGPU
  • procedurally generated cave environments with depth and visual variation
  • a modern neon wireframe aesthetic
  • an optional CRT shader for authentic arcade display feel
  • around ten enemy types with distinct combat behaviors
  • ground-based defenses and mini-bosses
  • full end-boss encounters
  • a layered weapon and power-up matrix
  • scarcity-based heavy weapons, including a tactical nuke
  • tuned difficulty progression
  • AI-assisted visual exploration and implementation
  • music from Suno
  • sound effects from ElevenLabs
  • multiple rounds of optimization and bug fixing using Claude Code and OpenAI Codex together

Every part of the project was pushed beyond the prototype stage.

That was the point.


Why This Project Matters

Terminus Breach matters to me because it demonstrates something deeper than “I made a retro shooter.”

It shows how I work.

I like taking an idea that starts as a rough visual or mechanical spark and pushing it all the way through to something cohesive, polished, and real. I like finding the core loop, validating it quickly, layering systems on top, tuning the rough edges, and refining the aesthetic until the whole thing feels intentional.

The project demonstrates:

  • genre fluency and systems thinking
  • rapid prototyping and validation
  • AI-assisted product development beyond one-shot generation
  • multi-model orchestration across build, review, debugging, and optimization
  • visual craft, audio craft, and interaction polish
  • the stamina to keep going past the point where most people stop

I also build projects like this because they are strong portfolio artifacts. They show prospective employers, collaborators, and partners that I am not just experimenting with AI tools at a superficial level. I can use them to produce highly polished, commercially credible software experiences with real depth.

That is what Terminus Breach represents.

Yes, it is a game.

But it is also proof of how I take something from zero to one.

M

Marco van Hylckama Vlieg

Product innovator and creative technologist building AI-native tools, interactive systems, and experimental software.