03Arcade shooter · 2026 Playable
Obverse
Sixteen sectors. Sixteen guardians. One flip.
A neon side-scrolling shooter for phones, original IP in the spirit of 80s arcade shmups. Mid-stage the run reverses polarity: the ship turns around and the enemies come from the other side. The first two sectors are free in the build below, as they will be in the stores. Pick Cadet if you want five lives.
- Role
- Game design, systems, art direction, audio, mobile release
- Platforms
- iOS, Android, web
- Stack
- HTML5 Canvas · WebGL · Web Audio · Capacitor 8
- Status
- Preparing App Store and Google Play release
WASD or arrows to fly, or drag.Hold Space to charge the beam.X launches the pod.On a phone, turn it sideways.
- 16Sectors, each with its own world and music
- 16Guardians, each testing one new mechanic
- 2Modes: Cadet for kids, Pilot for veterans
- 0Audio files: every sound is synthesised in code
DesignOne new idea per sector
Each sector introduces exactly one new way to kill enemies, and each guardian has one gimmick that tests it. Worms only take damage at the glowing tail. Mirrors reflect your shots, so only the charge beam or the pod gets through. The Relay Twins must both die within six seconds or the first revives.
Cadet mode gives five lives, three hull hits per life and walls that push rather than kill, so a child can finish what a veteran plays on Pilot.
Sector chartThe whole campaign
Sixteen sectors from the build's own level table, in their own colours, with each guardian and how many times that sector flips the run.
- 01Outer LatticeThe WardenNo flips
- 02Reef FoundryBrood FoundryNo flips
- 03Coil ChannelsThe Coil1 flip
- 04Mirror SeaPrism RegentNo flips
- 05Pressure DeepThe Press1 flip
- 06Twin RelayRelay Twins2 flips
- 07Event HorizonSingularity1 flip
- 08The NullwakeNull Heart3 flips
- 09Cryo VeilRime Colossus1 flip
- 10Spore GardenMother Bloom2 flips
- 11Magnetar RunThe Magnetar1 flip
- 12Hollow ChoirThe Cantor2 flips
- 13Rust GraveyardJunk Leviathan1 flip
- 14Chrono TideHour Engine2 flips
- 15Ember ThronePyre King1 flip
- 16The ObverseThe Obverse5 flips
EngineeringFlipping a whole game with one sign
The game logic runs in lane space, where forward is always plus x. A polarity flip mirrors the render transform and the input direction, so one codebase plays in both directions with no special cases for enemies, bullets or guardians. These lines are from the shipping build.
// input: in a flipped run, right on the stick still means "forward"
const fd = L.flipped ? -1 : 1;
P.x += mx * sp * dt * fd; P.x += I.dx * fd;
// the flip itself: clear the screen, shake, warn the player
function doFlip() {
L.flipped = !L.flipped; L.flipT = 1.2; shake = 12; sfx.flip();
for (const e of enemies) if (!e.dead) { score += e.score; e.dead = true; }
}
// render: mirror the whole world in one transform
ctx.save(); if (L.flipped) { ctx.translate(W, 0); ctx.scale(-1, 1); }
CraftLight, sound and terrain from code
A dependency-free WebGL layer draws procedural backdrops for every sector, then composites the game with bloom, shockwaves, chromatic aberration, vignette and grain. If WebGL is missing it falls back to plain canvas.
Terrain is seeded value noise per sector and flattens automatically for guardian arenas. The audio engine synthesises every effect and a procedural bassline per sector, with tempo and root note changing for guardian fights.
Shipping itFrom one HTML file to two stores
One web build is wrapped with Capacitor into native iOS and Android projects, with haptics, Game Center and Play Games leaderboards, a one-time unlock after two free sectors, and anonymous crash reporting that attaches the sector, phase and last game events.



What this means for your project
- Systems designSixteen sectors of mechanics, guardians and difficulty built from one data table.
- RenderingHand-written WebGL shaders and post-processing with a canvas fallback.
- Audio engineeringA complete synthesised soundtrack and effects set with no files.
- Mobile releaseCapacitor, in-app purchase, leaderboards and crash reporting.