Bounced is a multi-window routing game concept that turns the browser desktop itself into the puzzle. Instead of keeping the whole game inside one canvas, the player opens and arranges real browser windows into a connected route, then guides a live signal ball from START through ordered RELAY rooms and into the final GOAL.
Project Links
- Repository: https://github.com/ColinMichaels/bounced
- Live demo: https://colinmichaels.github.io/bounced
The Core Idea
The hook is simple but unusual: the windows are the level. A control deck opens a cluster of floating game rooms, and the player has to physically move those rooms so the ball has a valid path. It is part action puzzle, part spatial routing game, and part window choreography.
Every level follows a route structure. One room is the START, one or more rooms are ordered RELAY rooms, and the final room is the GOAL. The ball must clear each relay in order before the final goal counts. Skipping ahead does not work, and hidden targets do not count if another window is covering them.
Bounced turns your desktop into the puzzle.
Project field manual
How the Rooms Work
The interesting technical problem is that the game is not pretending to have multiple rooms. The browser windows themselves become the playfield. The signal ball can only cross between rooms when the windows touch on a usable side or overlap in a way that forms a valid connection.
- Rooms must touch or overlap to create a usable route.
- Disconnected windows trap the ball inside the current connected shape.
- Blocked room sides can reject the ball even when two windows appear connected.
- Window placement becomes the main player skill.
- The host window remains the control deck and source of truth.
Gameplay Systems
The current build already sketches out a surprisingly deep set of systems around the core routing idea. It includes level progression, barriers, locked sides, utility charges, bonuses, signal credits, medals, best-time tracking, and run upgrades.
- Barriers physically block the ball and can be destroyed by clicking them.
- Side locks prevent crossing through specific room edges.
- Relay bonuses reward fast and efficient route execution.
- Ambient bonuses provide optional score, time, utility, or signal-credit rewards.
- Bridge Pulse temporarily suppresses blocked sides.
- Time Brake slows the live ball for a short correction window.
- Signal credits can be spent between levels on run upgrades.
- Medals reward better clear times.
What the Current Build Includes
The playable version is already more than a proof of concept. It includes generated levels, local progress, audio, route objectives, real popup rooms, and a custom simulation model designed around live browser-window topology.
- 100 generated unlockable levels.
- 3 to 8 active rooms depending on level.
- Randomized disconnected room layouts.
- Ordered START to RELAY to GOAL progression.
- Barrier obstacles and blocked room sides.
- Relay bonuses and ambient bonuses.
- Best-time and medal tracking.
- Persistent local progress.
- Shared utility charges.
- Signal credits and summary-based run upgrades.
- Bridge Pulse and Time Brake abilities.
- Host-side synthesized audio.
- Focused-room xray rendering for overlap readability.
The Engineering Challenge
The hard part of Bounced is not generic rigid-body physics. The hard part is mapping gameplay onto real browser windows. The game needs to track window positions, determine which rooms are connected, decide whether a side is usable, keep the host as the authoritative simulation layer, and synchronize popup renderers in real time.
- index.html acts as the host control deck shell.
- client.html acts as the popup room shell.
- src/host handles the host UI, popup management, audio, and worker ticker.
- src/engine owns authoritative simulation, difficulty, and ball physics.
- src/client renders popup rooms and reports bounds.
- src/network wraps BroadcastChannel communication.
- src/shared contains shared types, constants, geometry, and message protocol.
Browser Constraints Make It Interesting
This project intentionally works within browser limitations instead of hiding them. Popups must be allowed. Browser chrome cannot be fully hidden. Everything runs client-side on one origin. Active room count is capped for ergonomics. Those constraints are part of what makes the concept feel weird, experimental, and worth documenting.
Why This Project Matters
Bounced is exactly the kind of side project that pushes a developer into unusual territory. It is not just another web game. It is a browser-behavior experiment, a real-time UI coordination problem, a custom physics challenge, and a creative interaction prototype all at once.
For ColinMichaels.com, it also fits into the larger labs direction: projects that are playful on the surface but useful as experiments in architecture, user interaction, animation, state management, and browser capabilities.
What Comes Next
The next phase should focus on making the concept easier to understand on first run while preserving the strangeness that makes it special. The biggest risk is that the game is too novel for players to immediately know what to do. The best path forward is better onboarding, clearer visual guidance, and more structured early levels.
- Improve the first-run onboarding.
- Add clearer visual route hints.
- Make popup permission handling more explicit.
- Refine early level pacing.
- Polish the control deck HUD.
- Add more visual feedback for blocked sides and valid connections.
- Expand playtest documentation.
- Package the project as a highlighted Labs experiment.
The Bigger Picture
Bounced is a strong example of what a personal creative lab can be. It starts with a simple question: what if the browser windows were the level? From there, it becomes a real game design, engineering, and interaction challenge.
The result is strange in the best way: a multi-window routing game where your desktop becomes the board, your windows become the maze, and the puzzle is not just what is on the screen, but how the screens relate to each other.