Skip to content
ZapskiRetro

GB Slingshot

Pick an angle and a power, choose one of four projectiles, and bring the structure down before your shots run out. Fifty hand-built levels, and the collapse is usually the real answer — break the keystone and let gravity finish the job.

Game Boy (DMG)GBDK-2020Super Game Boy enhancedHomebrew

Emulated by binjgb (WebAssembly). Click the screen to give it keyboard focus. Open full screen.

How to play

ScreenButtons
AimingUP / DOWN set the launch angle from 5° to 80° in 5° steps · LEFT / RIGHT set the power in eight steps · B cycles the projectile · A fires
In flightA spends the armed projectile's one ability — boost, split or drill — once per shot
SettlingNothing — the unsupported cells fall, anything that lands hard breaks, and the ball reloads if there are shots left
LevelSTART restarts the level, or loads the next one after a win · SELECT goes back to the level select

The dotted arc shows where the shot would fly if the level were empty. That is deliberate: it is the clean trajectory, not a prediction of what the ball will hit, so use it to judge the line and then expect the ball to stop or slow on the first structure it reaches. Restarting a level is free, and a level you finish with shots to spare pays for it in stars.

Keyboard

  • D-padArrow keys
  • AX
  • BZ
  • STARTEnter
  • SELECTC

Emulator

  • Toggle the SGB borderS
  • Fast-forwardShift
  • PauseSpace
  • Save / load stateF6 / F9
  • RewindBackspace

Materials

CellHPDamageScore
Wood4Normal10
Stone4Half20
Ice2Double5
Target2Normal100
Ground—Indestructible—

Speed decides damage, so a shot that has already punched through a wall arrives weaker than one that took a clean line. A hit that destroys a cell lets the shot carry on, a quarter slower; a hit that only damages stops it there. Damaged cells stay visibly cracked, so one more solid impact may finish what a weak one started.

Super Game Boy

GB Slingshot title screen

On a Super Game Boy the screen sits in a launch rig at dusk, framed in wood, with the game's name across the sky. The border is a 256×224 image converted to tiles, a map and a palette, and it costs about 6 KB of the cart. The emulator reads the ROM's SGB flag and starts with the border on — press S to toggle it. On a regular Game Boy the game simply fills the screen.

Bringing it down

The structures are not static. After every shot the game checks the board from the bottom up: a cell with nothing underneath falls a row, while a cell with a solid neighbour on both sides can bridge the gap and stay put until one of those supports goes. A cell that falls two or more rows damages whatever it lands on and takes damage itself, a stack that falls together does not hurt itself, and a fall of three or more rows destroys a target.

That is often the cheaper way to win. The target may be too tough or too well covered to hit directly, but the tower above it is not: break the keystone and let gravity do the work. A cell destroyed by a collapse scores double, and the HUD slides up for a moment to show what the chain was worth — free points that did not cost an extra shot.

Shot budgets are measured, not guessed: a brute-force solver plays every level over every angle, power and projectile, and most levels are set to the best it can do plus one. Your best star rating for each level is written to battery-backed cartridge RAM when you press START on the win splash, so progress survives a reset.

Four projectiles

KeyTypeAbility on the second A press
AStandardNone.
BBoostThe shot instantly speeds up by half, in the same direction. Faster means more damage and more range.
CSplitThe shot fans into three, the new shards angled slightly off its heading. Each shard collides on its own, so one shot can cover several targets or hit the same wall from three lines.
DPierceThe ball becomes a drill and keeps grinding through the cells it dents instead of stopping on the first. Only the ground still stops it.

Every type flies like the standard shot until you spend its ability, and the ability can be spent only once per shot. Eighteen levels declare the type they are built around — the level select shows NEEDS B, for example — and the game's tests prove those declarations true rather than wishful.

Under the hood

Written from scratch in C with GBDK-2020 — no game engine, in the same lineage as GB Protector, GB Checkers and Luna Lander. The whole simulation is one header with no hardware calls in it, which is what lets the exact same code run under gcc on a desktop and SDCC on the Game Boy; the front end reads the pad, ticks the simulation and draws the result. The cart is a single 32 KB image, MBC1 with battery-backed RAM holding the star ratings.

There is no floating point and no 32-bit arithmetic in the simulation at all. Positions are whole pixels plus a separate 8-bit fraction — a 16-bit 8.8 value cannot hold 160 px — and velocities and gravity are true 8.8. The flight step is shared with the dotted aim preview, so the preview cannot drift from the shot. The fifty levels are plain-text ASCII grids with their shot budgets; the tile art, the level tables and the Super Game Boy border are all generated and committed, so the game builds from source with a toolchain and Python.

The testing is two layers. Host-side tests run over a thousand assertions plus a golden replay whose hash pins the outcome of three fixed shots; the emulator test then presses the same buttons on the real ROM in PyBoy and compares the grid hash, which is what catches the SDCC-to-gcc divergence. It also reaches the front end, checking the level select, the HUD, both splashes, the falling sprites, the chain flash and the battery save across two emulator sessions. Sound is written straight to the APU, and the border transfer has its own test that compares what the Super Game Boy receives against the generated tile data.

More about GB Slingshot

More games