OLEG KOLBASOV

A HOLE PLANET

Independent Project · Game Design & SystemsPlay Prototype

What if the car was a planet?

I started A Hole Planet while experimenting with a completely different strategy-game concept. I had been building a globe and found something strangely satisfying about moving a camera around a fully rendered planet. That led to a much less serious question: what if the globe was the thing you controlled?

The idea quickly became a five-minute arcade game about a young planet trying to become capable of supporting life by any means necessary. You adjust your orbital radius, speed, and spin to navigate a living solar system—collecting mass, siphoning oceans from neighboring planets, riding through atmospheric clouds, smashing celestial bodies apart, and eventually parking yourself in the habitable zone long enough for life to survive.

The other planets behave like planets. You behave like an asshole.

That contrast became the foundation of the game. The world takes its celestial mechanics seriously enough to feel believable, while the player is given just enough control to completely abuse them. Destroying another planet might give you the mass you need, but its fragments become new obstacles in orbit. Spinning faster repairs your damaged surface, but destabilizes your trajectory. Flying close to the star anneals your planet faster, but boils away the water and atmosphere you just stole.

I conceived the game mechanics, interaction model, visual direction, UI, and system rules, using AI-assisted development to implement the playable browser prototype over a single weekend. The result is a deliberately ridiculous driving game built around a surprisingly serious design problem: how do you make controlling a planet intuitive without making it stop feeling like a planet?

1

Weekend — Idea to Playable Prototype

5 min

Arcade Run

3

Controls — Radius · Speed · Spin

126

Celestial Bodies

1

Goal — Create Life

01The Idea

Grand Theft Auto, except the car is a planet.

The concept started as a spoof: take the familiar freedom and destruction of an open-world driving game and put it somewhere driving shouldn’t make any sense.

Instead of a car, the player controls a young planet. Instead of roads, there are orbital paths. And instead of traffic, the environment is filled with planets, moons, asteroids, debris, atmospheric clouds, and a star that can either help repair you or boil away everything you’ve collected.

The objective gives that chaos a purpose. Within five minutes, the player has to transform an unstable planetary body into one capable of supporting life.

The fastest way to get there is usually to ruin somebody else’s solar system.

You start here

Small damaged rocky planet.

20 massDamagedNo waterNo atmosphere

You need this

Large habitable planet.

100 massOceanAtmosphereTemperate orbit

Everything between you and it is fair game.

The player’s starting planet against the habitable target state

Five minutes to create life.

I wanted A Hole Planet to work as a quick arcade game rather than a long simulation. Five minutes creates enough room to build a planet while keeping every decision immediate: there isn’t enough time to patiently wait for ideal conditions, so the player is encouraged to interfere.

A successful run can finish considerably faster. Once the player understands the system, the challenge shifts from simply surviving to finding a more efficient route through it—building mass first, identifying water-rich planets, collecting atmosphere at the right time, minimizing damage, and reaching a stable orbit as quickly as possible.

That naturally turned completion time into the score.

The run timer and leaderboard scoring

Create life.
Do it faster next time.

The solar system isn’t a racetrack. It’s the material.

I didn’t want the surrounding planets to function as static checkpoints or collectibles. They exist in the same orbital environment as the player and can be physically disrupted.

Hit a planet at lower speed and you can change its trajectory. Hit it with enough mass and velocity and you can drive through it completely. That destruction creates debris which remains in orbit, turning the player’s previous aggression into a new navigational hazard.

Other celestial bodies can collide with one another as well. An object you’ve knocked off course can come back around later, collide with something else—or hit you from behind.

The player doesn’t move through a level. The player changes the level while playing it.

Debris from a destroyed planet remaining in orbit

Ram

Change another planet’s orbit.

Destroy

Enough mass and velocity breaks it apart.

Debris

Fragments remain in the system.

Navigate

Your shortcut becomes your next obstacle.

Make a mess. Drive through the mess.

The comedy comes from taking the world seriously.

Visually, I resisted turning the planets into cartoon characters. The celestial bodies remain textured, atmospheric, and relatively serious because the absurdity works better when the world itself doesn’t seem to know it’s a joke.

Personality instead comes from behavior. Planets react when the player gets too close, remember repeated collisions, and complain through short speech bubbles while continuing along their orbit.

Believable enough to abuse.

A Hole Planet was never intended to be an astrophysics simulator. Real planets don’t accelerate on command, deliberately change orbital radius, or spin faster because someone is holding a keyboard key. But I also didn’t want the solar system to feel arbitrary.

Mass affects what the player can destroy. Momentum makes changes in speed take time. Temperature depends on orbital position. Damage affects the planet’s ability to retain resources. Collisions alter trajectories. Water freezes farther from the star and evaporates when conditions become too extreme.

Break reality wherever the game needs it. Preserve enough cause and effect that the player still believes the result.

That created the central interaction problem behind the entire prototype: if the player is driving something with planetary mass, the controls can’t feel like they’re driving a car.

02Driving a Planet

Familiar controls. Planetary consequences.

I wanted the game to feel immediately understandable to anyone who had played a driving game before. The player has three primary controls: move inward or outward, speed up or slow down, and increase or decrease spin.

But mapping those controls directly to movement made the planet feel weightless. A celestial body shouldn’t stop, accelerate, or change direction the instant a key is pressed.

Instead, player input establishes where the planet is trying to go. Its actual movement responds over time. You control the intention. The planet has to move the mass.

Radius

A / D

Move in / out

Changes the orbit you’re trying to occupy.

Speed

W / S

Faster / slower

Changes how quickly you’re moving around the star.

Spin

Q / E

Rotate

Repairs damage faster — and destabilizes your orbit.

The controls are simple. The response isn’t.

A planet shouldn’t stop on a dime.

The delay between input and response became one of the most important parts of the game. Increasing speed doesn’t instantly launch the player forward. Changing radius doesn’t teleport the planet onto another orbital path. The player has to anticipate where a target will be, begin changing trajectory early, and account for the momentum of the body they’re controlling.

As the player’s mass increases, that sense of inertia becomes increasingly important. What initially feels like a slightly sluggish control scheme becomes the core skill: learning to drive ahead of the planet rather than reacting at the last second.

Input

Move inward

Target orbit

Where the player wants to be

Inertia

Planet gradually responds

Actual orbit

Where the planet really goes

The gap between input and result is the game.

Movement needed to be visible, not just mathematical.

Orbital movement can be difficult to read from a camera that remains centered on the player. If everything else is moving around you, changing speed or radius doesn’t necessarily feel like movement.

I added physical responses to the planet itself so the controls became visible. Moving between orbital paths changes its apparent tilt. Accelerating and decelerating pitches the axis forward and backward. Increasing spin destabilizes the planet and introduces a visible wobble. At higher speeds, background stars stretch into streaks.

Orbit change

Tilt

Acceleration

Pitch

High spin

Wobble

High speed

Star streaks

The HUD tells you what you changed. The planet shows you what it feels like.

Spin became more than a steering control.

Spin originally belonged to the physical fantasy of controlling a planet, but it became more useful once I connected it to damage recovery. A planet slowly repairs itself at its normal rotation. Increasing spin accelerates that process, giving the player a way to recover quickly after collisions.

The tradeoff is control. High spin destabilizes the planet’s orientation and creates a wobblier orbital path. A short burst can repair meaningful damage, but leaving it elevated makes precision driving much harder.

The spin control and its effect on orbital stability

Spin faster

Repair faster

Up to 4.8× repair rate at maximum rotation.

But

The orbit wobbles

Past the stable limit the pole tilts and the path shakes.

Recovery costs control.

Even collisions had to preserve momentum.

Early collision behavior broke the illusion. Planets reacted at rigid angles, making impacts feel more like objects bouncing around a simple game board than massive bodies exchanging momentum.

I reworked collisions so an impact could redirect both bodies. A lower-energy hit can shove another planet into a different trajectory and speed while disturbing the player’s own orbit. With enough mass and velocity, that same collision crosses a threshold and becomes destructive.

That made ramming useful beyond simply collecting resources. A player can deliberately alter another body’s path—but whatever trajectory they create continues through the system.

Before

Two orbital paths

Impact

Momentum transfers both ways

After

You are displaced. They are on a new trajectory.

30 seconds later

Oh no. It’s you again.

Altered orbits create future encounters

The camera had to sell the fantasy.

The earliest prototype already allowed changes in orbital radius and speed, but the game didn’t feel convincing until the camera behaved correctly.

The player needed to remain visually grounded to their own planet while still reading movement relative to the solar system around them. Once that relationship worked, the unusual control model became much easier to understand: the planet felt like the vehicle, and the rest of the system became the road.

Before

Camera framing — before

After

Camera framing — after

Driving without steering

Three inputs. Five questions.

Radius

Which lane of the solar system am I aiming for?

Speed

Where will I intersect another body?

Spin

How much control am I willing to trade for repair?

Mass

How quickly can I respond — and what can I destroy?

Momentum

Where am I actually going?

The player only has three controls.
The system creates the complexity.

Once the planet felt convincing to drive, I could build the rest of the game around one rule: nothing useful should come without a consequence.

Getting bigger makes you more destructive. Destruction fills your orbit with debris. Faster spin repairs damage but destabilizes control. The star can heal you while destroying the resources you’re trying to protect.

Progress and danger became the same system.

03Every Advantage Has a Cost

Building a planet means constantly breaking something else.

A Hole Planet has a simple objective: build enough mass, collect enough water and atmosphere, reach a temperate orbit, repair your damage, and hold those conditions long enough for life to emerge.

I didn’t want those requirements to function as five independent progress bars. I designed them to interfere with one another.

The fastest way to gain mass creates debris. The fastest way to repair damage destroys resources. Water can’t survive on a badly damaged planet. Atmosphere can’t be retained until the planet becomes massive enough. And the safest place to preserve everything isn’t necessarily where the resources are.

Progress creates problems. Solving those problems creates new ones.

Hitfor mass.
Matchfor water.
Ridefor atmosphere.
Parkfor temperature.
Surviveyour own greed.

Five conditions. One interconnected system.

Hit

Build mass by becoming a menace.

The player begins as a small, damaged planetary body with only a fraction of the mass required to support life. Early in a run, asteroids provide relatively safe opportunities to grow.

As mass increases, the player’s relationship with the rest of the solar system changes. Smaller collisions become less threatening, larger celestial bodies become viable targets, and sufficient mass combined with enough velocity allows the player to stop merely knocking planets around and start driving straight through them.

The player destroying a larger celestial body

Destruction permanently changes the environment you’re still trying to survive in.

Match

Steal somebody else’s ocean.

Water can’t simply be collected by touching another planet. The player has to pull alongside a water-rich body, close the gap, and match its orbital speed closely enough to establish a stable siphon.

Maintain that relationship and water begins transferring between the two planets: the target visibly dries out while oceans gradually appear across the player’s own surface. Break the speed match or drift too far away and the siphon stops.

Siphoning water from a neighbouring planet

But collecting water doesn’t mean you can keep it.

Water retention depends on the condition of the planet itself. Repeated impacts create location-specific craters, and sufficiently severe damage can expose the core. Once that happens, water begins escaping from the damaged surface.

Temperature creates another constraint. Move too close to the star and oceans evaporate. Move far enough away and the planet visibly freezes, covering the surface in ice until it returns to warmer conditions.

You have to build a planet capable of holding what you steal.

A frozen planetary surface

Collect water

Core exposed?Lose it
Too hot?Boil it
Too cold?Freeze it
Stable?Keep it

Ride

Build an atmosphere without losing it.

Atmosphere introduces another dependency. A planet can’t retain one until it has accumulated enough mass, forcing the player to prioritize growth before atmospheric collection becomes efficient.

Once that threshold is reached, the player can intercept atmospheric clouds distributed throughout the system and ride through them to build the resource. But the same conditions that threaten water threaten atmosphere as well.

Riding an atmospheric cloud to build the atmosphere resource

Damage isn’t just a health bar.

Damage is spatial rather than purely numerical. Impacts leave visible craters where the collision occurred, and repeated hits to the same area can eventually expose the planet’s core.

That makes damage part of the resource system rather than simply a fail state. A badly damaged planet becomes less capable of retaining the water and atmosphere required to finish the game. Repair therefore becomes another strategic decision.

Wait

Normal rotation gradually repairs damage.

Safe · slow

Spin

Increase axial rotation to accelerate repair.

Fast · destabilizes orbit

Anneal

Move inside the star’s heat boundary.

Fastest · burns resources

Three ways to heal. None of them free.

The star is both repair shop and threat.

Entering the star’s inner heat zone triggers annealing, rapidly repairing planetary damage. That can rescue a run after a destructive collision or prepare the surface to retain water again.

But the same heat that repairs the planet also strips atmosphere and boils away its ocean. Staying longer means healing faster while destroying more of the progress you’ve already made.

The player’s planet annealing inside the star’s heat boundary

Moons reward precision instead of destruction.

Not every interaction rewards aggression. Moons function as optional time bonuses for players trying to improve leaderboard runs.

Like siphoning, capturing one requires pulling alongside its parent planet and holding position long enough to complete the transfer. Larger moons take longer to steal, forcing the player to decide whether the potential time bonus is worth interrupting a faster route toward habitability.

They aren’t required to create life. They’re there for players who have started optimizing the system rather than simply surviving it.

Capturing a moon from its parent planet

Park

And then stop messing everything up.

After spending most of the run changing orbit, stealing resources, smashing objects, repairing damage, and generally destabilizing the solar system, the final challenge asks the player to do something completely different: settle down.

To create life, the planet must enter a temperate orbital zone with the required mass, water, atmosphere, and surface condition—and maintain those conditions for ten seconds.

It’s deliberately fragile. Debris is still orbiting. Other planets are still moving. Asteroids can still hit. The player has to hold a stable environment inside the mess they created getting there.

Mass Water Atmosphere Temperature Damage

The system loop

Every gain feeds the next problem.

Smash

Gain mass.

creates damage

Steal

Collect water.

needs a matched orbit

Ride

Build atmosphere.

needs mass first

Repair

Undo the damage required to get there.

costs control or resources

Stabilize

Find the habitable zone.

inside the debris you made

The objective is simple.
Every system makes it harder.

Once those systems began interacting, the next problem wasn’t adding more mechanics. It was helping the player understand the ones already there.

A planet can be accelerating, changing orbit, taking localized damage, losing water, approaching a siphon, overheating, repairing itself, and tracking another celestial body at the same time.

If the player can’t understand why something is happening, the system might as well not exist.

04Making Chaos Readable

Complexity only matters if the player can understand it.

As the mechanics became more interconnected, the biggest interface challenge was deciding what the player actually needed to know at any given moment.

A single encounter can involve orbital speed, distance, relative velocity, water availability, moons, damage, temperature, resource loss, and nearby hazards—all while the player is still trying to steer.

My early instinct was to expose more of the system. Playtesting pushed me in the opposite direction. The player doesn’t need to understand the simulation. They need enough information to make the next decision.

Keep the mission visible.

The primary HUD is organized around the five conditions required to create life: mass, water, atmosphere, temperature, and damage.

Rather than functioning as passive progress bars, each panel changes with the state of the planet. Atmosphere explains when the player is too small to retain it. Temperature shifts between frozen, temperate, and scorched conditions. Damage surfaces repair behavior.

The primary HUD showing the five habitability conditions

Mass

Can I destroy larger bodies yet?

Water

How close am I to habitability?

Atmosphere

Can I retain air yet?

Temperature

Can my resources survive here?

Damage

Can my planet hold them?

Five systems. One finish line.

Only show detail when it becomes useful.

The solar system contains far more information than can remain on screen permanently. Instead of giving every celestial body a persistent interface, nearby planets reveal contextual information only when they become relevant to the player.

Approach another planet and a panel exposes the information needed to interact with it: available water, mass, moons, distance, and relative speed. The closer the player gets to an actionable state, the more specific the feedback becomes.

A contextual panel appearing for a nearby planet

Gap

How far away am I?

Match

How closely are our speeds aligned?

Water

Is this planet worth siphoning?

Moons

Is there a time bonus worth stealing?

Don’t show everything about the planet. Show what the player can do with it.

Turn invisible relationships into visible targets.

Some of the most important mechanics depend on relationships the player can’t judge precisely from the 3D scene alone. Two planets can appear close together while moving at very different velocities.

GAP and MATCH translate that invisible relationship into something actionable. Once both enter the required range, the interface changes state and a siphoning progress bar confirms that the player has successfully established the maneuver.

The GAP and MATCH indicators during a siphon

Gap

86

units

Match

4.7

Δv

Close the gap · match velocity

The planet itself became part of the interface.

Not every state needed another panel. Damage appears physically where the planet was hit. Repeated impacts deepen the same area until the core becomes visible. Water gradually covers the surface as it’s collected. Move into colder orbit and that surface freezes.

Those effects aren’t only visual polish. They reduce the amount of abstract information the HUD has to communicate.

Dry

Rock surface

Water

Ocean appears

Frozen

Surface ices over

Damaged

Craters deepen

Core exposed

Resources escape

If the player can see it, don’t make them read it.

The minimap answers “where the heck am I?”

Keeping the camera close enough to make the planet feel controllable creates another problem: the player loses a global view of the solar system.

I added the orbital map as a navigation layer rather than forcing players to constantly zoom out and search the 3D environment. It shows the player’s position relative to other celestial bodies and atmospheric resources, allowing someone to identify a target and plan the next orbital move without abandoning the driving view.

The orbital minimap showing the player’s position in the system

Warnings needed to explain cause, not just failure.

Because several resources can increase or decrease for different reasons, a changing number alone isn’t sufficient feedback.

Warning states explain the cause of the change whenever possible: the planet is too small to hold atmosphere, the star is boiling away water, damage is allowing resources to escape, or the current orbit is outside a temperate range. That turns failure into information the player can immediately act on.

Not enough

Water 34% → 28%

Why?

Better

Water 34% ↓
The star is boiling you
Move outward.

Feedback should answer “what do I do?” before the player has to ask “what happened?”

Humor became feedback too.

The neighboring planets provided another feedback channel—just one that didn’t need to sound like a system message. Get too close and they become uncomfortable. Hit one and it complains. Hit the same planet again and it remembers you.

…personal space?
you again?
THAT WAS MY OCEAN.
oh my god
this is FINE 🔥

I learned to remove information, not just organize it.

Designing A Hole Planet challenged one of my own tendencies: when a system becomes more sophisticated, it’s tempting to expose that sophistication in the interface. The opposite usually made the game better.

Controls became easier to understand when they were reduced to three inputs. Planet information became clearer when it appeared contextually. Physical changes replaced abstract indicators where possible. Feedback became more useful when it explained consequences instead of exposing mechanics.

An impressive system isn’t useful if the person playing it is the only one who doesn’t understand what’s happening.

The system can be complex.
The decision shouldn’t be.

05Built in a Weekend

Saturday morning: a planet going in circles. Sunday night: a game.

The first version of A Hole Planet was barely a game. The player could move a sphere inward and outward between orbital paths and adjust its speed around a placeholder sun. There were no collisions, no resources, no stars, no destruction, and nothing else in the system could meaningfully interact with you.

But the central interaction felt promising enough to keep going.

Over the course of a weekend, I expanded that prototype into a playable five-minute game with a generated solar system, interactive celestial bodies, collision physics, localized damage, resource collection, environmental states, contextual UI, visual effects, scoring, and a persistent leaderboard.

The goal wasn’t to build a lot of features quickly. It was to find out whether the stupid idea was actually fun. It was.

Saturday morning

Planet goes in a circle

Yellow PNG sun. No stars. No collisions. Radius and speed only.

Sunday night

A game

DriveCollideSiphonDestroyRepairSurvive

One weekend

Build the rules first. Let the visuals serve them.

I designed the game as an interconnected set of rules rather than a sequence of scripted events. Celestial bodies have orbital position, speed, and mass. Collisions can alter trajectories. Damage is stored spatially rather than as a purely cosmetic effect. Destroyed planets become persistent debris.

That separation allowed the visual layer to communicate what the underlying simulation was already doing rather than inventing effects solely for appearance.

Player input

Radius · Speed · Spin

Simulation

Orbits · Mass · Collisions · Damage · Resources · Win state

Game state

3D world

Planets · Craters · Oceans · Ice · Debris · Effects

Interface

HUD · Targets · Map · Feedback

The simulation decides what happened.
The renderer makes you feel it.

One system. A lot of moving parts.

126

Celestial Bodies

128 × 32

Localized Damage Grid

20

Code Modules

5,817

Lines

0

Application Servers

AI accelerated implementation. I owned the game.

I used Claude extensively to implement the code while I focused on designing the game itself: the premise, mechanics, interaction rules, control behavior, risk/reward relationships, UI structure, visual direction, and continual playtesting and tuning.

The workflow was highly iterative. I’d define how a mechanic should behave, test the implementation in the browser, identify where the interaction stopped feeling intuitive or fun, and revise the rules until it clicked.

AI dramatically compressed the distance between “what if this worked?” and “let me play it.” It didn’t eliminate the design decisions required once the thing existed.

I designed the rules.
AI helped me make them playable.

The game needed real failure states, not a demo path.

A Hole Planet isn’t a scripted demonstration with a predetermined successful path. The same interacting systems that create the intended experience can also produce unexpected situations: planets collide without the player’s involvement, altered trajectories create later encounters, destroyed worlds fill useful orbital lanes with debris, and badly timed damage can undo several minutes of resource collection.

That unpredictability became part of the appeal. Once the rules worked together, the game started producing situations I hadn’t explicitly designed.

An emergent collision the design never scripted

I designed the system.
The system started surprising me.

Even the leaderboard stays lightweight.

Because A Hole Planet is designed around short repeatable runs, completion time naturally became the competitive layer. The browser submits finished runs directly to Firestore, where validation rules reject impossible scores before they’re added to the leaderboard.

There is no custom application server behind it—the playable prototype remains essentially a browser game with a lightweight persistence layer.

Fast didn’t mean finished.

The weekend build proved the mechanic, not the final game. I’m continuing to refine the interface, environmental behavior, and physical interactions—including stronger gravitational effects near the star and the ability to push celestial bodies completely out of orbit.

But those are extensions of a loop that already works. By Sunday night, the question had changed from “Can this be a game?” to “How far can I push it?”

The current state of the A Hole Planet prototype

TypeScript · Three.js · Vite · Firestore

06What I Learned

Complexity has to disappear into intuition.

A Hole Planet started as a joke about driving something that shouldn’t be drivable. Building it turned into an exercise in making a complicated system understandable without removing what made it interesting.

The more mechanics I added, the clearer one thing became: complexity isn’t valuable just because it’s impressive.

Orbital movement, momentum, localized damage, resource retention, temperature, collisions, environmental effects, and dozens of moving celestial bodies can all exist underneath the experience. But if the player can’t understand what their three controls do—or why their ocean just disappeared—none of that sophistication matters.

The system can be complex.
The decision shouldn’t be.

Constraints created the game.

Some of the mechanics I initially treated as limitations became the things that made A Hole Planet feel distinctive.

The planet couldn’t respond instantly without feeling weightless, so inertia became part of the challenge. Repair needed a purpose, so spin became a risk/reward mechanic. Destruction needed consequences, so shattered planets became persistent debris. Resource collection needed more than progress bars, so water, atmosphere, damage, mass, and temperature became dependent on one another.

The game became more interesting when I stopped trying to make everything convenient for the player.

Playtesting changed what I valued.

Building the system made me want to expose more of it. Playing the system made me want to remove things.

I simplified controls, made information contextual, pushed feedback into the environment, and focused the interface on immediate decisions rather than underlying mechanics.

If the creator has to explain how impressive the system is, the experience isn’t doing enough of the work.

AI changed the speed of experimentation.

AI-assisted development let me test ideas at a speed that would have been unrealistic for me otherwise. More importantly, it changed what I could prototype. Instead of stopping at a storyboard or interaction concept, I could put the actual mechanic in my hands, discover why it didn’t work, and make another decision.

The prototype became part of the design process—not just the artifact at the end of it.

Not every experiment needs to become a company.

A Hole Planet is still an active experiment, not a commercial product. I’m continuing to polish the playable prototype because the core interaction is fun and there are still ideas worth testing.

I’m deliberately not attaching a larger business story to it. The project already answered the question that justified building it: can a ridiculous idea survive contact with an actual player?

In this case, yes.

A Hole Planet

You are a planet.
You need to create life.
Unfortunately, you’re an asshole.

Play Prototype

Game Design · Interaction Design · Systems Design · Visual Direction · AI-Assisted Development