Steve Hinan presents

PLAY METEOR ATTACK

Hexapuss Meteor Attack: Game Design Document

Title: Hexapuss Meteor Attack

Spelling: Hexapuss (two s)

Owner: Steve Hinan

Doc date: 2026-09-18

Build: HTML5 Canvas 2D web

Version: 1.0

Public GDD path: experimental/gdd/meteor-attack/

Play: https://stevehinanpresents.com/meteor-attack/


1. What it is

You play one of the three Hexapuss band members on the street in front of a music venue. Meteors fall. Dodge them. Later, they crack open into cats. Jump those. If you step in glowing poo, you lose control and walk into the cat's mouth.

One thumb on a phone. One run. Three lives: the three members. No banners on the playfield.

Platform: HTML5 web game, portrait 9:16, hosted at stevehinanpresents.com/meteor-attack. Not Unity. Not Android. Not Google Play.


2. Why it exists

This is the Hexapuss game we are making. It has to feel like the short film: dark graphic novel, not a cartoon, not pixel art. Hexapuss is the universe; Meteor Attack is the game. Official HEXAPUSS dripping wordmark on the TITLE plate only, with METEOR ATTACK as the game name under/with it in the UI font. PLAY venue marquee has no HEXAPUSS / HEXAPUS text. Official band sheets. Script cats. Nothing else.

Do not invent lore. Cats and possession come from the Hexapuss short film script.


3. Design pillars

  1. Smash, then threat. Every wave yells WAVE N, then that meteor falls. Never the other way around.
  2. You play a Hexapuss member. Vocalist, guitarist, or drummer. Not the tentacle mascot. Not a made-up human.
  3. The street is the ad. First run is clean. The only ad is a rewarded extra life from a real tap on WATCH AD. Never a banner.

4. Playable characters

Pick one before the run, and again after a death if anyone is still alive. Same loop for all three until Steve writes different moves. Official sheet is law. Do not change the face, hair, clothes, or gear.

Rowan Quinn: Sable

Role: lead vocalist / lyricist
Age: 39. Height: 5'6". Athletic, elongated. Ireland.
Look: long copper-red hair, fair skin, freckles, faint scar on the left cheek. Worn black leather jacket, black knit tank, dark slim denim, black ankle boots. Dark metal Celtic knot pendant. Simple silver band. Leather lyric notebook. Vintage dark mic.
Art: official Sable sheet. Graphic-novel, not cartoon.

Cole Lawson: Dredge

Role: guitarist
Age: 49. Height: 5'11". Wiry / lean muscle. Northern England.
Look: long dark messy hair, angular face, faint scar on the left cheekbone, deep-set eyes. Worn black leather jacket, fitted black tee, slim dark jeans, scuffed black boots. Signature black electric guitar. Aged leather strap with picks. No tattoos, no extra jewelry, no piercings.
Art: official Dredge sheet. Graphic-novel, not cartoon.

Steve "Slinky" Hinan

Role: drummer
Age: 49. Height: 5'10". Lean / strong.
Look: short beard, salt-and-pepper hair. White / off-white hoodie, white track pants with a black stripe, grey runners, drumsticks.
Art: official Slinky sheet. Graphic-novel, not cartoon.

The chosen character stands on the lot, above the bottom thumb strip, not glued to the bottom of the screen.


5. Character select

After PLAY NOW, pick a member. The screen works like Golden Axe: living members in a row, you move left / right, confirm one, then the run starts (or continues).

Order, left to right, skipping anyone who is already dead:

  1. Sable (vocals): default if she is alive. Cursor starts on the leftmost living member, which is Sable unless she is out.
  2. Dredge (guitar)
  3. Slinky (drums)

Show the official look. Name and role under each. No extra story text. No mascot on this screen. Dead members are not shown.

If the player hits confirm without moving, they get the default living member (Sable if she is alive).


6. How you play

Left and Right to dodge. Jump to vault hazards.

Phone

Keyboard still works: arrows or A / D, jump with Space, W, or up arrow.

One meteor at a time.

Jump over a hazard (meteor, cat, bite, poo pile) while airborne: +1 once per threat. Crush, bite, and possession do not pay that point. Wave CLEAR still +100.

When +1 hits, the player must know it scored in that beat: gold flash / scale / burst ON the character sprite (official sheet, no new pose, no pixel art), a +1 VAULT popup, and the jump-over sting.


7. The run

Title screen: opaque 720×1280 title plate. Official HEXAPUSS wordmark is UI in the top black band. Under/with it, the big game name METEOR ATTACK in the existing UI font. Hexapuss is the universe; Meteor Attack is the game. Three how-to lines and PLAY NOW are UI in the bottom black band:

Do not draw the venue plate under TITLE. Pause still shows the frozen playfield.

PLAY NOW → Golden Axe select (all three alive, Sable default) → run.

Wave 1 smash. Orange meteor. Dodge. Wave 2 smash. Green meteor. Dodge. Wave 3 smash. Purple meteor. Dodge.

The first meteor of a run, and the first meteor after an extra-life resume, must not land on the spawn cell. Stand still is not an instant crush.

Wave 4 onward: smash, meteor, cat. The cat is the same color as the meteor that just crashed. Jump the cat. Special is a bite or poop-in-place (static glowing pile). Cats do not throw poo.

Three lives = the three band members (portraits as lives). One life each. A complete game is three characters.

When the current member dies:

When the third member dies (all three out):

Extra life (once per run, only from a real tap on WATCH AD FOR EXTRA LIFE):

START AGAIN: roster all living, wave 1, score 0, character select.

Score is how far you got. No ads on the playfield.


8. Waves

WaveSmashThen
1WAVE 1 (slim, on marquee)Orange meteor only, compressed
2WAVE 2 (slim, on marquee)Green meteor only, compressed
3WAVE 3Purple meteor. Cat comes out. Bite or poo-in-place.
4+WAVE NMeteor cracks. Cat comes out in that meteor's color. Bite or poop-in-place (static pile).

Waves 1-2 have no cats (compressed meteor-only). Cats start on wave 3. Meteor color = cat color.


9. Threats

Meteor

Falls from the sky. One at a time. Orange, then green, then purple. Get crushed and you die.

Cat

Black silhouette. Glowing eyes and tail. Colors from the short film only: orange, green, purple, cyan, yellow, magenta. Splits in the film are Orange+Cyan, Green+Magenta, Purple+Yellow. Do not invent new cats.

The meteor that crashes sets the cat's color. Orange meteor → orange cat. Green → green. Purple → purple. Same rule on later waves. Do not spawn a cat whose color does not match that meteor.

Bite

A lunge. Jump it.

Poo (in place, not thrown)

Cats do not throw poo. The cat poops where it stands, then walks off the pile. The pile stays as a static ground obstacle the player jumps. Contact is a hit (possession): the chosen member glows, loses control, walks straight at the cat, and the cat eats them. Jumping over the pile is +1 with the existing juice / sting. One pile at a time; it persists across CLEAR / next waves until consumed or a new run. Mist-from-landing-poo is gone.


10. Look

Match the short film.

Do

Do not

Venue plate: paint the night, the building, the doors, the street, the lot. PLAY marquee is blank or says TONIGHT ONLY only. No HEXAPUSS on that plate.


11. Screen

Portrait 9:16. Virtual size 720×1280. Letterbox to fit.

The chosen member's feet sit on the lot, above the footer. Level chrome is only the header and the footer.


12. User Interface

This is the in-level HUD. Title and character select are separate screens.

Header

Wave count and score. Top of the playfield. Nothing else in the header. Slim WAVE on marquee.

Footer

Player navigation buttons. Bottom of the playfield.

No banners. No extra chrome on the playfield. Keyboard still works (arrows or A / D, jump with Space, W, or up).


13. Ads

Google AdSense H5 Games Ads (Ad Placement API). Same stack as a normal web page on stevehinanpresents.com. The only ad is rewarded extra life from WATCH AD FOR EXTRA LIFE. No Unity Ads. No Google Play. No banners on the playfield.

Publisher: ca-pub-1247659112467753. Ads are live (Steve removed data-adbreak-test=on on 2026-08-31). Do not put the test flag back. No spend beyond AdSense. Overlay auto-closes when the ad finishes.

MomentWhat happens
First run, TITLE, SELECT, PLAYClean. No ads.
Death 1 or 2 (someone still living)No ad. That member is out. Character select with only the living. Resume same wave + score.
Death 3 (all three out)Straight GAME OVER. No auto interstitial. No auto ad.
WATCH AD FOR EXTRA LIFEOnly this button fires an ad. Real tap. Rewarded extra-life, once per run, above START AGAIN. Live no-fill does not grant. Fallback stub when needed in code: ~4s TEST AD with TAP TO SKIP (no-fill fallback while H5 Games Ads is in Google review).
Extra life diesGAME OVER. Hide WATCH AD. No second extra. No auto ad.

WATCH AD must be a real tap (user gesture) so showAdFn is allowed.


14. Leaderboard

Shown on GAME OVER.

SHARED on the host. Same origin.


15. Audio

SFX are short original MP3 files in audio/ (explosion, poop, bite, jump, meow-start/stop variants), loaded by the game. Web Audio oscillator / noise remains fallback only when an MP3 is missing. Shared AudioContext. Guarded so missing AudioContext is a no-op.

Soundtrack: audio/hexapuss.mp3 beside game/ (same level as game/ and leaderboard/), never inside game/. Game loads exactly audio/hexapuss.mp3 (relative to index.html). Loops during TITLE / SELECT / PLAY / EXTRALIFE / PAUSE. Fade / stop on GAME OVER. Resume when leaving GAME OVER back to SELECT / TITLE. Unlock / play on first user gesture (pointer down / PLAY NOW).


16. What this is not

Not Hexapuss Quest pinball.

Not a Unity / Android / Google Play game.

Not a catalogue pitch (Rift, Latch, Pack, Divide). Those stay in the pitch book. This is the game we are making.

Not a new mascot game. Playable cats are the script cats.

No spend beyond AdSense. No banners.


17. Locked design notes


18. Publish / next