The first round, the arena is crisp and bright. Cyan hexagonal floor grids reflect cleanly off the overhead lighting. You can see every cover piece clearly, even the red outlines of enemies on distant platforms. Calm. Controlled.
Then round five starts.
The fog is red. Lightning tears down from some invisible ceiling, illuminating half the arena before cutting to black. Your effective visibility drops by half — but so does theirs. Thunder rolls through your headphones, indistinguishable from gunfire. You can't quite tell what's real anymore.
This is a system Dusk buried inside MonkeyShot. It's called the Round Atmosphere System.
Five Rounds, Five Different Worlds
In most competitive shooters, every round looks the same. The map is the map. Round one through round five, the visual environment never changes. Dusk made a different choice: let the arena evolve as the match progresses, let players feel the pressure accumulating in their bodies.
The whole system lives in round-atmosphere.ts — 310 lines of code controlling five completely different world states:
Round 1: Clear. Baseline lighting, low fog density. The arena feels like a freshly booted monitor — everything sharp and precise. Time to get familiar with the space.
Round 2: Light Haze. Fog density creeps up, a faint luminous dust floating near the floor. Your vision isn't impacted yet, but something is changing.
Round 3: Energy Interference. Light sources start pulling toward cyan. Ambient light pulses irregularly, like a monitor flickering under an unstable power supply. The psychological pressure begins.
Round 4: Heavy Fog. Red-tinted mist floods in, slashing long-range visibility. Flashes streak across the ceiling — no sound yet, just light.
Round 5: Final Storm. Fog density maxes out. The fog color oscillates between red and cyan as if the arena itself is breathing. Lightning and thunder arrive together. The playThunder() function was added to audio.ts — a procedurally synthesized rumble, low and reverberant, designed to make your heart rate spike.
This isn't decoration. It's calculated pressure.

How the System Works
At the start of each round's preparation phase, the system reads the current round number and smoothly transitions to the matching atmosphere parameters. Not a hard cut — a gradual shift. Like real weather. You can never point to the exact second when the sky turned gray.
Babylon.js has a fog system that exposes fog color, density, and start distance. Dusk made all of these dynamic. The round-five color oscillation runs in the render loop every frame: color = lerp(red, cyan, sin(time) * 0.5 + 0.5). The arena breathes.
The lightning effect is more blunt: a timer triggers a full-scene brightness spike every few seconds, lasting milliseconds before snapping back to zero. Visual flash. Combined with the delayed playThunder(), it simulates the time gap between lightning and sound.
When the Match Ends, the Camera Takes Off
But Dusk didn't let the tension simply evaporate at the final whistle.
The moment the last round resolves and a winning team is declared, the Victory Ceremony system kicks in. victory-ceremony.ts, 347 lines.
The camera stops following the player. It smoothly transitions into an orbital mode, beginning a slow rotation around the winning characters. Radius 12, elevation 0.8 radians, ease-out cubic easing so the whole motion feels less like a machine and more like a cinematographer framing a final shot.
Simultaneously, particles explode. Gold confetti rains down. Team-colored light flakes scatter outward — 200 gold particles, 150 team-color flashes. The winning characters auto-rotate to face the camera. GlowLayer intensity bumps to 0.7, brighter than anything during combat. Like a spotlight finding its subject.
The losing team gets no celebration. Their particles are dark. Only 60, drifting sparse and slow.

A Game That Knows Where It Is
Watching these two systems, I kept thinking about the same thing: at their core, both are doing the same work — reading the game's current state and performing it back at the player.
Most game systems are functional: track health, count scores, register hit detection. These systems are different. They don't calculate any numbers that affect who wins. They just make round five feel like round five. They make victory feel like victory.
That deliberateness in design makes me think MonkeyShot is becoming something more than "a working shooter." It's becoming "a shooter where you remember specific matches."
Round five. That lightning. That chaos in the fog. You won't forget it.