Equinox Exchange
A single-player puzzle-platformer for Reddit. You steer two linked blobs that share one pool of size: make one big and heavy and the other becomes small and light. Master that Equivalent Exchange — a big blob presses heavy plates and tips seesaws; a small blob jumps high, floats on bubbles, and squeezes through gaps — to guide both blobs to their matching exits.
Two blobs. One shared size. Trade it wisely.
How to play
- Tap / click a blob to take control of it (a gold ring shows who you're driving).
- Move:
ADor← →(or the on-screen ◀ ▶ on mobile). - Jump:
Space/W/↑(or the JUMP button). - SWAP:
E(or the SWAP button) — flips which blob is big. Size is shared, so one always grows as the other shrinks. - Goal: get both blobs onto their colour-matched exits at the same time.
The toolbox
| Mechanic | What it does |
|---|---|
| H / L plates | H needs a big blob (or a pushable block); L needs a small blob. A held plate opens its matching coloured door. |
| Doors | Open when their plate condition is met; "sticky" doors latch open for good. |
| Bubble columns | Lift only the light blob — shrink to float up, grow to drop. |
| Seesaw | A big blob's weight on one pan lifts the light blob on the other up to a ledge. |
| Swap-lift | A violet elevator whose height is driven by SWAP — ride it up, step off. |
| Moving platforms | Ferry you across gaps; they carry riders and stay glued going up or down. |
| Spikes | Bounce you back — too wide for a heavy hop, so SWAP light and leap. |
Game modes
Campaign (PLAY)
A fixed sequence of 15 levels (3 tutorial/practice + 12 main), each a unique mechanic or combination, ordered easy → hard. Progress is saved per-player and unlocked sequentially — you must clear a level to unlock the next.
- Level Select (
LEVELSon the main menu) shows every campaign room with clear visual states:- ★ Completed levels — gold-accented card with a gold star
- ✦ Current level — gold glowing border with a gentle pulse animation to draw your eye
- ◻ Unlocked levels — neutral elevated cards, ready to play
- 🔒 Locked levels — dimmed cards with a lock icon, unreachable until you clear the one before them
- Practice rooms are marked with a "P" prefix (P1, P2, P3) and teach the core mechanics before the main campaign begins.
- Every room awards 1–3 stars based on your clear time (< 9s = ★★★, < 18s = ★★, else ★).
Daily (DAILY)
A date-seeded, side-scrolling level assembled fresh each day — every Redditor plays the exact same level on a given day, and it changes completely tomorrow.
- Generated from a library of 10 section types (heavy gates, light gates, bubble walls, seesaws, swap-lifts, spike mazes, moving platforms, block gates, etc.) — each daily draws a random subset for a unique combination.
- Always includes at least one signature hard beat (the seesaw wall and/or spike gauntlet) near the end.
- Sections ramp from easy → hard so the level teaches as it goes.
- Your best time is posted to a per-day leaderboard (top 10 players shown).
- Consecutive daily clears earn a streak shown on the main menu.
Create (CREATE)
Opens the in-game level editor — place any object from the palette (blocks, plates, doors, spikes, moving platforms, swap-lifts, bubbles, seesaws, checkpoints) inside a blank room frame.
- Drag objects to position them, tap to configure their properties (target position for movers/lifts, colour for doors, which plate opens which door).
- Play-Test your puzzle to verify it's solvable — clearing it in play-test mode unlocks Publish.
- Published puzzles become community posts that other Redditors can play.
- Capped at 18 objects (plus the required 2 players and 2 goals).
Leaderboard (LEADERBOARD)
Per-scope leaderboard tracking the fastest times for each scope:
| Scope | Example | Description |
|---|---|---|
| Daily | daily-2026-07-14 |
Today's daily level — shared by all players |
| Campaign room | room-1 |
Each campaign level has its own leaderboard |
| Community | community-<postId> |
Published community puzzles (post-specific) |
- Each player only keeps their best time per scope — subsequent plays only improve it.
- Leaderboards store the top 10 fastest times.
- Viewed from the in-game 🏆 button (shows top 8) or the main menu
LEADERBOARDbutton (shows top 6 for the current daily).
Progression & streaks
- Campaign progress persists via the server: cleared rooms unlock future ones even if you leave and come back.
- Daily streak grows by 1 each consecutive day you complete the daily. A missed day resets it to 1.
- The main menu shows your current streak + campaign completion count at a glance.
Tech stack
- Phaser 4 — the game client (Arcade physics), rendered in a Devvit web view.
- Vite — bundles the client.
- Hono — server routes (leaderboards, daily post scheduling).
- Devvit Web — the Reddit app platform + hosting.
- TypeScript throughout.
Built With
- devvit
- hono
- phaser.js
- typescript
- vite
Log in or sign up for Devpost to join the conversation.