OpenGame guide
Browser FPS Game Design: BAZAAR ZERO
Break down BAZAAR ZERO wave pacing, pointer-lock aiming, scoring, combat feedback, death, redeployment, and browser-first performance boundaries.

A browser FPS game needs to establish trust immediately. The player must understand how to take control, where threats will appear, whether shots connect, how much ammunition and health remain, and what happens after death. BAZAAR ZERO compresses that contract into an urban survival shooter that runs directly in a desktop browser.
The game is a useful flagship reference because it connects movement, pointer-lock aim, weapon feedback, escalating waves, scoring, death, and redeployment without requiring an installation or an account-specific runtime.
Start with an explicit control handoff
The first screen says what the game is and asks the player to click to deploy. That click is also the trusted browser gesture used to request Pointer Lock. The game does not hide a sensitive control transition behind an automatic request.
Once deployed, the core desktop controls remain familiar:
WASDmoves and the mouse aims.- Left click fires and right click aims down sights.
Shiftsprints,Spacejumps, andCor Control toggles crouch.Rreloads.Escreleases the pointer and returns to a paused state.
This is a desktop-first game, and the page says so instead of pretending that a touch layout can reproduce the same aiming model.
Use wave pacing to teach before escalating
The first wave begins with four enemies. Every cleared wave adds one more, up to a cap of nine. A three-second pause separates cleared and incoming waves.
That structure creates a readable pressure curve. Four enemies are enough to establish movement, aiming, cover, ammunition, and health. Later waves increase density without changing the control language. The short break gives the player time to register success, reload, reposition, and anticipate the next attack.
The wave banner also states the current wave and incoming enemy count. Difficulty is therefore visible before it becomes damage.
Make every hit produce an explanation
Combat feedback needs to answer several questions at once: Did the shot fire? Did it hit a wall or an enemy? Was it a headshot? Did it kill? Did the enemy fire back?
BAZAAR ZERO connects hitscan combat to tracers, impacts, damage events, a hit marker, score changes, a kill feed, weapon audio, and spatial enemy fire. A normal elimination adds 100 points, a headshot elimination adds 150, and clearing a wave adds 250.
Those values are simple, but they turn aim quality and survival progress into visible outcomes. The player can tell why a score increased instead of seeing an unexplained number at the end.
Keep the world useful to combat
The market district is not only a background. Its long street, stalls, props, and sight lines create approach routes, cover interruptions, and spatial audio cues. Enemy spawns land in the far half of the street and avoid appearing within fifteen meters of the player.
That spawn boundary protects the opening seconds of a wave. Threats arrive from a readable part of the arena instead of materializing directly beside the player. The level can remain compact because timing and placement do part of the pacing work.
Treat death as part of the product flow
When the player dies, the game shows a final score, the wave reached, and a clear Redeploy action. Redeploy resets the game instead of leaving the player inside a broken partial state.
This matters because survival games depend on comparison. A new run should answer a useful question: Can the player reach a later wave, score more efficiently, or control the arena better? Immediate redeployment makes that comparison cheap.
Bound the browser simulation
The combat simulation performs deterministic work on fixed 120 Hz updates, while rendering remains separate. Reused vectors and event payloads reduce avoidable allocation during combat. The Three.js runtime is bundled locally, and the public build does not depend on an external gameplay request after its own files load.
These implementation boundaries support the visible design. Consistent enemy movement, aiming, impacts, and damage matter more than adding an unlimited number of effects. Browser performance is part of combat readability.
Use the FPS as a reference, not a remix promise
Play BAZAAR ZERO on a desktop browser to experience the complete control, wave, score, death, and redeploy loop. It is a hand-finished flagship build, not a promise that one prompt will reproduce the same production.
To design an original shooter, use OpenGame Studio to specify a different setting, enemy logic, weapon fantasy, arena, progression, failure state, and feedback system. The useful lesson is the structure: explain control, introduce pressure, confirm every action, and make retry immediate.
Source note
Gameplay and implementation details in this article were checked against the current public BAZAAR ZERO registry and first-party browser build. The article describes the shipped game and does not use Call of Duty branding or claim affiliation with another franchise.