Skip to content

Zones

Every round of HYPER BULLET drops you into a Zone — but a Zone is not a level. In the code a Zone is a ZoneDefinition: a pure visual-and-audio theme layered over the same arena. It sets the colors of the glowing hex-tile floor, the side walls, the sky and clouds, the atmosphere and midground, the color your Targets flash when they spawn, and even the background music. The rules never change between Zones — you still shoot Targets, point your Tool down to reload, and race the wave timer. The Zone is the mood; your build and your aim are the game.

HYPER BULLET key art tiling several Zone backdrops at onceThe official key-art banner is a montage of several Zone backdrops behind the logo: a purple neon city skyline (palm trees + lit skyscrapers, top-left), blue ruins (top-right), a green lantern-lit garden (bottom-right), a red desert with cacti (bottom-center), and a glowing orange field (bottom-left). These are different Zone looks, not separate game modes.

What a Zone really is

In dump.cs (around line 407744) a Zone is a ZoneDefinition ScriptableObject. Reading its serialized fields is the clearest proof that a Zone is a backdrop, not a battlefield. A single Zone controls:

  • The hex floor — two tile colors (m_hexColor0, m_hexColor1), a glow color (m_hexGlow), grout color (m_groutColor), and gap size (m_hexGap).
  • The side walls / lightsm_sideLight, m_sideDark, a light direction (m_sideLightDirection), and an optional side texture (m_sideTexture).
  • The sky — a full gradient (m_skyTopColor / m_skyMiddleColor / m_skyBottomColor plus a m_skyGradient texture and an optional m_skyTexture).
  • Clouds — left/right cloud colors, coverage (m_cloudsCoverage), and a scroll speed (m_cloudsScrollSpeed).
  • Atmosphere and midground — an Atmosphere and a Midground object for fog, haze, and the distant backdrop.
  • The spawn flash — a per-Zone target color (m_spawnColor) plus spawn/despawn cosmetic timing values (CosmeticOnSpawn / CosmeticOnDespawn, both floats) and hue/saturation/value tuning (m_cosmeticHueStart, m_cosmeticHueRange, m_cosmeticSaturation, m_cosmeticValue).
  • Music — a background track (m_musicBackground) and a separate streamer-safe track (m_musicBackgroundStreamer) for Streamer Mode.

Each Zone also carries a node color (m_nodeColor) — the tint used for that Zone's nodes when you look at The Monolith map — and an exclude flag (m_exclude) that can keep it out of the random rotation. Notice what is not in this list: no enemy lists, no spawn tables, no win condition. That all lives elsewhere. A Zone is the skin.

The Zone theme is static, but a separate layer of feedback plays on top of it: the WorldGlow component pulses the whole arena a color on key events. Its PulseColors are NEUTRAL, GOOD, BAD, EXTRA_TIME, and CURSE (each with its own color — m_good, m_bad, m_extraTime, m_curse), driven by PulseWorldGlow(color, time, multiplier). So the arena flashes green on a good play (a clean hit or building combo), red on a bad one (a miss), a distinct color the moment you gain extra time, and a special Curse color when a Curse fires (DoCurse). It's pure juice — reactive feedback riding on top of the fixed Zone look, not a change to the Zone itself.

Neon cityscape gameplay: Targets bursting into points under purple palm treesA purple-city Zone in action — purple sky, silhouetted palm trees, lit skyscrapers, and a hexagonal tiled floor. Targets burst into floating "10" point pops, with a "4x" combo and a Coin drop, all over the signature pink-and-purple glow.

The hex floor is universal

No matter the Zone, the ground is always a grid of hex tiles and the walls glow in the Zone's accent colors. Environment-reactive Augments — Detonator (Targets explode), Arctic Pod (freeze), Arc Module (lightning) — behave the same everywhere, so your build carries cleanly from Zone to Zone.

How Zones change as you climb the Monolith

You don't pick Zones — the run assigns them. The ZoneManager (the asset that loads and swaps ZoneDefinitions) drives this with a small set of confirmed constants:

ConstantValueWhat it means
ZONE_FOLDER"Zones/"Where Zone assets are loaded from.
TRANSITION_SECONDS2.5How long a normal cross-fade between Zones lasts.
LAYER_PREF_COEF3Weighting factor used when randomly picking a Zone for a Monolith layer.
SHOP_ZONE"shop"The dedicated shop backdrop.
HOME_ZONE"shopStandby"The home / standby backdrop (menu and between-run lobby).
FALLBACK_ZONE"synth"The Zone used when no other choice is available.

A few things worth knowing:

  • Transitions cross-fade over ~2.5 seconds. ZoneManager.CoTransition runs the TRANSITION_SECONDS = 2.5 fade. Some swaps are instant instead — there is an IsInstantTransition flag (SetInstantTransition) for that.
  • Zones are chosen per Monolith layer, with weighting. SelectWeightedRandomZoneMeta(layer, mapParams, exclusions, strictExclusions) picks a Zone for a layer using LAYER_PREF_COEF = 3, and there are also SelectRandomZoneMeta and SelectAllAvailableZones. The exclusions set is what keeps the world from snapping to a brand-new look every single node — it's the real mechanism behind a theme "settling in" for a stretch before drifting to something new.
  • The shop has its own backdrop. TransitionToShopZone() swaps to the "shop" Zone, so you always know at a glance that you're between rounds and free to spend Coins on Mods.
  • The menu / between-runs lobby is one standby Zone. TransitionToHomeZone() swaps to "shopStandby". The menu and the standby lobby are the same Zone (HOME_ZONE), not two different ones.

Scenery is a free progress cue

Because the look shifts as you ascend the Monolith, a sudden change of backdrop is a handy mental marker that you've moved into a new stretch of the run.

How many Zones are there?

The exact number is unconfirmed. The full Zone set is stored in a serialized list, ZoneManager.m_zoneMetadata (a List<ZoneManager.ZoneMetadata>), and that list is not enumerated anywhere in the dump — so there is no source that says "18 Zones," "14 battle Zones," or any other count. Each entry (ZoneManager.ZoneMetadata) is tiny: just an id string and a nodeColor. The actual ZoneDefinition assets are loaded by id from the Zones/ folder.

Just as importantly, Zones have no player-facing display names. There is no Zone or arena name anywhere in loc_en.json (the only "zone" entry, TUTORIAL_MAP_SPLIT_ZONE, is about a path split, not a backdrop). So while the game clearly has multiple themed backdrops — you can see five of them in the key art above — the wiki can't responsibly hand you a named, described list.

Confirmed special Zones

These four are the only Zones whose ids appear directly in the code:

Zone idConstantRole
shopSHOP_ZONEThe shop interior shown between rounds (TransitionToShopZone).
shopStandbyHOME_ZONEThe home / standby lobby for the menu and gaps between runs (TransitionToHomeZone).
synthFALLBACK_ZONEThe fallback Zone used when no other choice applies.
defaultA Zones/default asset loaded specifically when "No zone meta found." (a distinct, last-resort fallback).

Note that there are two different fallbacks: synth (the FALLBACK_ZONE constant) and the separate Zones/default asset that loads only when the game logs "No zone meta found. Loading default zone." They are not the same thing, and neither is a named "battle arena."

No "boss," "lava," "matrix," or "honeycomb" Zone

The strings honeycomb, a lava zone, and a matrix zone do not exist anywhere in the game's data. (lava shows up only as the enemy id enemyLavaBlob; matrix only inside Unity's shader/math internals.) There is also no boss Zone id — boss fights reuse the normal Zone system; ZoneManager exposes TransitionToShopZone / TransitionToHomeZone / TransitionToZone, but no boss-zone constant.

What we can say about themed Zones

The Zone ids themselves live in that un-enumerated m_zoneMetadata list, but a handful of zone-prefixed strings do appear elsewhere in the data, hinting at the themes the developers built: bazaar, blue, canyon, ocean, and white appear as standalone strings, plus compound ids like cityscapeBackseatRider, castleRevenant, iceFranticPace, factoryDarkConsole, canyonNeonDesert, bambooIronclad, bazaarStateless, synthTitan, and oceanOne. These tell us a city, a castle, a canyon, ice, a factory, bamboo, a bazaar, an ocean, and a "white" theme almost certainly exist — but the game never attaches a description or display name to any of them, so any detailed "vibe" write-up of a specific Zone would be invented, and isn't included here.

Why Zones matter to you

Mostly, Zones are a flow-state booster — a constantly shifting backdrop keeps a fast, repetitive score-attack game feeling fresh wave after wave. A few practical notes:

  • Visibility. Brighter backdrops make Targets and point pops easy to read; darker, moodier ones lean into atmosphere. Your aim doesn't change, but knowing a Zone's look helps you stay locked in.
  • Spawn flashes are tuned per Zone. Each ZoneDefinition sets its own m_spawnColor, so the flash a Target makes when it appears is matched to the current Zone — a subtle cue that something just entered the arena.
  • Nodes are tinted too. Each Zone carries a nodeColor, so the Monolith map nodes pick up the current theme's tint — another quiet way the game signals where you are.
  • Don't sightsee mid-round. The backdrops are gorgeous, but a wave is on a tight clock (you start with 30 seconds, gaining +10 if you lose a life). Admire the view in the shop Zone, then get back to clearing Targets.

See also

  • The Monolith — the tower run that assigns a Zone to each layer
  • Targets — the things you're actually shooting in each Zone
  • Tools — the Pistol, SMG, and Shotgun you bring along
  • Augments — including the environment-reactive ones (Detonator, Arctic Pod, Arc Module)