Bus Crowd — Traffic Jam — Buyer Guide

Unity 6000.0.62f1 · Universal Render Pipeline · LocalQA handoff candidate

Overview

Bus Crowd — Traffic Jam is a portrait traffic-puzzle game for Unity 6000.0.62f1 (URP). A depot of parked buses faces a crowd of coloured passengers queuing around a ring road. The player taps a bus whose path out of the depot is clear; it drives to one of four parking bays and passengers of its colour board it. A full bus drives away and frees its bay. Every bus must leave before the attempt timer runs out.

The package contains a 500-level validated campaign, three boosters on the HyperCasualLiveOpsKit (HLK) booster bar, mystery buses, a level editor and an automatic level generator, and the HLK menu, economy, results and LiveOps screens configured for this game in a LocalQA profile (simulated ads and purchases).

Getting Started

  1. Create a Unity 6000.0.62f1 project with the Universal Render Pipeline. Install com.unity.inputsystem and com.unity.ugui, then import TMP Essential Resources (Window → TextMeshPro → Import TMP Essential Resources).
  2. Import the package. It creates two folders: Assets/Game and Assets/HyperCasualLiveOpsKit.
  3. Assign the included pipeline asset Assets/Game/ProjectRenderSettings/PC_RPAsset.asset under Project Settings → Graphics (and Quality), and set the colour space to Linear.
  4. Add the scenes to Build Settings in this order: Assets/HyperCasualLiveOpsKit/StarterMenu/Scenes/HLK_MainMenu.unity, then Assets/Game/Scenes/Game.unity.
  5. Open HLK_MainMenu and press Play. PLAY NEXT LEVEL starts level 1, the guided tutorial.

Set Player Settings → Resolution to a portrait window (for example 540 × 960) for desktop testing. The game fits its board between the HLK top bar, the booster shelf and the banner lane on any portrait aspect.

Folder Structure

FolderContents
Game/Scripts/CorePure C# rules: GameSim (fixed 1/60 s simulation, dispatch, parking, boarding, crowd, timer, boosters, mystery reveal), LevelData (level JSON parser), geometry and JSON helpers. No UnityEngine references.
Game/Scripts/GameUnity presentation: GameController (input, clock, events), Viewport (code-built camera and portrait fit), vehicle/crowd/environment/effects views, HUD, tutorial hand.
Game/CampaignPure C# campaign model: board templates, formation families, constructive generator, solver and policies, the frozen chapter progression.
Game/IntegrationHLK boundary: BusCrowdHlkBridge (level selection, settlement, rewards, sound cues), BusCrowdLevelSource, BusCrowdPowerUpAdapter and its three booster assets, the campaign menu binding.
Game/CampaignLevels/Resources/LevelsThe published campaign Level_1.json … Level_500.json plus CampaignAuthoring.json (editor authoring data). Loaded at runtime with Resources.Load("Levels/Level_N").
Game/ResourcesThe two recorded source levels (level-1, level-200), vehicle models, materials, the soft-toy shader and palette.
Game/LevelTools, Game/ProductionLevelToolsEditor-only level editor and generator (Bus Crowd adapter + shared framework).
Game/Scenes/Game.unityGameplay scene: the game root with the HLK gameplay overlay. The world, camera and HUD are built in code at runtime.
Game/ProjectRenderSettingsURP pipeline/renderer assets used by the game.
HyperCasualLiveOpsKitMenu, results, economy, boosters UI, LiveOps and service interfaces; see its own manual.

Gameplay

Win/lose settlement goes through HLK once per attempt: a win credits the configured coin reward and opens the results overlay; a loss credits nothing. Gameplay sound cues (bus released, blocked tap, full bus, mystery reveal, win, lose) are played through the HLK sound bank and follow the Settings sound toggle.

Scripts Reference

TypeRole
BusCrowd.Core.GameSimDeterministic rules. TapVehicle(i), Step(), events (SimEventKind), Phase, TimeLimit; booster effects CrowdShuffleEffect(), AirliftEffect(i), BusShuffleEffect().
BusCrowd.Core.LevelDataParses the level JSON (see Level Format).
BusCrowd.Game.GameControllerOwns the simulation, maps pointer input to taps, advances the clock and raises OnSimEvent/LevelStarted. Integration seams: ExternalResults, ExternalBoosters, PointerBlocked, TapInterceptor, PlayRectProvider.
BusCrowd.Game.ViewportBuilds the game camera in code and fits the depot column into the reserved play rectangle.
BusCrowd.Integration.BusCrowdHlkBridgeSelects the HLK level, blocks gameplay input under overlays, settles results, emits buscrowd_level_end, plays semantic sound cues and hands the audio listener to the code-built camera.
BusCrowd.Integration.BusCrowdLevelSourceMaps the HLK level index to Levels/Level_N.
BusCrowd.Integration.BusCrowdPowerUpAdapterRegisters the three boosters with the HLK booster bar (effects + availability).
BusCrowd.Campaign.*Progression (chapters), Formations, Generator, Solver (Replay, Greedy, FindLosingRoute).

Level Editor

The current preview draws vehicle lengths, widths and routes at the same fitted physical-world scale. Controls use normal editor layout so dummy Layout-event rectangles do not clip the control rows. Recorded evidence levels remain read-only in this canvas; their first-layout preview is guarded.

Open Tools → BusCrowd → Level Editor. The window lists all published levels with a live canvas preview of the depot (bus sizes, colours and headings, mystery marks), the crowd rows and the saved witness order.

Levels 1 and 200 are the recorded source levels and must stay in place; the campaign check refuses a save that moves them.

Automatic Level Generator

Open Tools → BusCrowd → Auto Level Generator (the same window; the generator controls are in the lower panel). The saved request holds count, seed, attemptsPerLevel, minimumFormations, maximumRepeatStreak and append. In a fresh project it is recreated from the campaign's own CampaignAuthoring.json.

Generation is constructive: it picks a formation for the level's chapter, builds a blocking order from the real sweep rules, generates the crowd sequence (with decoys), and proves a witness dispatch order by replaying it through the actual GameSim. A candidate that fails validation or its witness is retried. With append on, existing levels are kept byte-for-byte and only new ones are added (for example count 502 appends levels 501–502). The same seed reproduces the same campaign. Generate into editor (review, then save) fills the editor with the result; nothing is published until Validate + save. Save request stores the settings.

Boosters

BoosterEffectStart count
Crowd ShuffleBrings a row of a parked bus's colour forward in the queue (instant). Refused when no row matches.2 on unlock
BalloonArm, then tap a blocked bus: it is lifted straight into a free bay. Missed taps and hidden buses keep it armed at no cost; a second press cancels.2 on unlock
Bus ShuffleSwaps equal-size waiting buses in a short staggered flight; taps wait until they land.2 on unlock

Crowd Shuffle, Balloon and Bus Shuffle unlock at player levels 2, 7 and 12 respectively. Each receives two initial uses and is consumed once per successful activation. The current progression policy is included in the current-delivery section; per-booster offer overrides take precedence. Counts, prices and unlock level are defined in Game/Integration/PowerUps/*.asset and the HLK power-up catalog.

Level Variation

The campaign has nine chapters: First taps, Blocked paths, Cars and decoys, Two arms, Mystery buses, Dense depots, Super hard, Master depots and Grand master. Chapters raise the bus count (4–6 in chapter 1 up to 60–84 in chapter 9), colours, blocking depth, decoy ratio and mystery buses, and tighten the time factor; recovery levels follow difficulty peaks. Two board templates (A: large buses, B: the Level 200 depot), three crowd topologies (left arm, right arm, both arms) and twelve formation families with dense variants give 190 distinct depot formations in the current campaign with no formation repeated more than twice in a row.

Customization Guide

Level Format

Each level is one JSON file. Coordinates are normalised to the portrait design frame. Key fields: vehicles (id, colour, size, capacity, x, y, headingDeg, length, width), slots (the four bays), crowd (rowSize, the ring path and its queued rows as [colour, row count], feeder arms), timeLimitSeconds, mystery (bus id + reveal count), generator (formation provenance) and solution (the proven witness order and its duration). Below is the complete published Level_4.json:

{
  "schemaVersion": 1,
  "id": "Level_4",
  "number": 4,
  "caption": "LEVEL 4",
  "design": {
    "aspect": [
      9,
      20
    ],
    "unitsPerHeight": 20,
    "cameraPitchDeg": 60
  },
  "generator": {
    "board": "B",
    "topology": "Double",
    "big": true,
    "family": "echelon",
    "cols": 3,
    "rows": 6,
    "headings": "24-72e58685",
    "seed": 1621612758,
    "source": "generated",
    "route": "stadium"
  },
  "vehicles": [
    {
      "id": "V01",
      "colour": "red",
      "size": "long",
      "capacity": 40,
      "x": 0.5792,
      "y": 0.4998,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V02",
      "colour": "purple",
      "size": "long",
      "capacity": 40,
      "x": 0.6682,
      "y": 0.5198,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V03",
      "colour": "blue",
      "size": "long",
      "capacity": 40,
      "x": 0.7572,
      "y": 0.5399,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V04",
      "colour": "green",
      "size": "car",
      "capacity": 16,
      "x": 0.467,
      "y": 0.5755,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V05",
      "colour": "blue",
      "size": "car",
      "capacity": 16,
      "x": 0.5561,
      "y": 0.5955,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V06",
      "colour": "yellow",
      "size": "long",
      "capacity": 40,
      "x": 0.6451,
      "y": 0.6155,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V07",
      "colour": "blue",
      "size": "car",
      "capacity": 16,
      "x": 0.3549,
      "y": 0.6512,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V08",
      "colour": "blue",
      "size": "long",
      "capacity": 40,
      "x": 0.4439,
      "y": 0.6712,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V09",
      "colour": "purple",
      "size": "car",
      "capacity": 16,
      "x": 0.533,
      "y": 0.6912,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V10",
      "colour": "red",
      "size": "car",
      "capacity": 16,
      "x": 0.2428,
      "y": 0.7268,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V11",
      "colour": "green",
      "size": "long",
      "capacity": 40,
      "x": 0.3318,
      "y": 0.7469,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    }
  ],
  "lot": {
    "rect": [
      0,
      0.425,
      1,
      0.8417
    ]
  },
  "road": {
    "laneV": 0.4167,
    "departLaneV": 0.4278,
    "topV": 0.3125,
    "bottomV": 0.4417,
    "exitEdge": "left"
  },
  "slots": {
    "count": 4,
    "lockedCount": 3,
    "tiltDeg": 15,
    "parkedHeadingDeg": -75,
    "centers": [
      [
        0.2516,
        0.375
      ],
      [
        0.3459,
        0.375
      ],
      [
        0.4371,
        0.375
      ],
      [
        0.5283,
        0.375
      ]
    ],
    "locked": [
      [
        0.6195,
        0.375
      ],
      [
        0.7107,
        0.375
      ],
      [
        0.8019,
        0.375
      ]
    ],
    "size": [
      0.623,
      1.444
    ],
    "counterOffsetV": -0.0111
  },
  "hud": {
    "speedPill": {
      "u": 0.9026,
      "v": 0.306,
      "w": 0.177,
      "h": 0.037
    },
    "caption": {
      "u": 0.5,
      "v": 0.06
    }
  },
  "bushes": [
    [
      0.1101,
      0.2639
    ],
    [
      0.8899,
      0.2639
    ]
  ],
  "speedPill": {
    "initial": 1,
    "multipliers": {
      "1": 1,
      "2": 1.93,
      "3": 2.78
    },
    "holdToTripleSeconds": 0.25
  },
  "crowd": {
    "rowSize": 4,
    "rowPitchUnits": 0.2586,
    "speedUnitsPerSec": 0.9815,
    "ring": {
      "path": [
        [
          0.5157,
          0.2917
        ],
        [
          0.4843,
          0.2919
        ],
        [
          0.453,
          0.2924
        ],
        [
          0.4216,
          0.2927
        ],
        [
          0.3902,
          0.2926
        ],
        [
          0.359,
          0.2913
        ],
        [
          0.3282,
          0.289
        ],
        [
          0.3021,
          0.2826
        ],
        [
          0.29,
          0.2714
        ],
        [
          0.2842,
          0.2594
        ],
        [
          0.2811,
          0.2472
        ],
        [
          0.2829,
          0.235
        ],
        [
          0.2891,
          0.223
        ],
        [
          0.3017,
          0.2119
        ],
        [
          0.3281,
          0.2057
        ],
        [
          0.359,
          0.2036
        ],
        [
          0.3902,
          0.2024
        ],
        [
          0.4216,
          0.2023
        ],
        [
          0.4529,
          0.2026
        ],
        [
          0.4843,
          0.203
        ],
        [
          0.5157,
          0.2032
        ],
        [
          0.5471,
          0.203
        ],
        [
          0.5785,
          0.2026
        ],
        [
          0.6098,
          0.2023
        ],
        [
          0.6412,
          0.2024
        ],
        [
          0.6724,
          0.2036
        ],
        [
          0.7033,
          0.2057
        ],
        [
          0.7297,
          0.2119
        ],
        [
          0.7423,
          0.223
        ],
        [
          0.7485,
          0.235
        ],
        [
          0.7503,
          0.2472
        ],
        [
          0.7472,
          0.2594
        ],
        [
          0.7414,
          0.2714
        ],
        [
          0.7293,
          0.2826
        ],
        [
          0.7032,
          0.289
        ],
        [
          0.6724,
          0.2913
        ],
        [
          0.6412,
          0.2926
        ],
        [
          0.6098,
          0.2927
        ],
        [
          0.5784,
          0.2924
        ],
        [
          0.5471,
          0.2919
        ]
      ],
      "closed": true,
      "exitIndex": 0,
      "direction": "clockwise",
      "rows": [
        [
          "blue",
          3
        ],
        [
          "green",
          1
        ],
        [
          "blue",
          5
        ],
        [
          "purple",
          1
        ],
        [
          "green",
          1
        ],
        [
          "blue",
          1
        ],
        [
          "purple",
          2
        ],
        [
          "blue",
          1
        ],
        [
          "purple",
          6
        ],
        [
          "red",
          2
        ],
        [
          "purple",
          1
        ],
        [
          "red",
          1
        ],
        [
          "blue",
          3
        ],
        [
          "green",
          4
        ],
        [
          "red",
          10
        ],
        [
          "blue",
          1
        ],
        [
          "red",
          1
        ]
      ],
      "phaseOffsetUnits": -0.1093,
      "junctions": {
        "left": [
          0.3008,
          0.2127
        ],
        "right": [
          0.7306,
          0.2127
        ]
      }
    },
    "feeders": [
      {
        "id": "left",
        "junction": "left",
        "path": [
          [
            0.0957,
            0.0232
          ],
          [
            0.0954,
            0.0389
          ],
          [
            0.095,
            0.0546
          ],
          [
            0.0949,
            0.0703
          ],
          [
            0.096,
            0.0859
          ],
          [
            0.0974,
            0.1016
          ],
          [
            0.1,
            0.1173
          ],
          [
            0.1055,
            0.1328
          ],
          [
            0.1149,
            0.1481
          ],
          [
            0.1286,
            0.1628
          ],
          [
            0.1491,
            0.1763
          ],
          [
            0.1759,
            0.1879
          ],
          [
            0.2091,
            0.1967
          ],
          [
            0.3008,
            0.2127
          ]
        ],
        "rows": [
          [
            "blue",
            8
          ],
          [
            "yellow",
            1
          ],
          [
            "green",
            1
          ],
          [
            "blue",
            1
          ],
          [
            "green",
            1
          ],
          [
            "yellow",
            1
          ],
          [
            "green",
            4
          ],
          [
            "yellow",
            2
          ],
          [
            "blue",
            2
          ],
          [
            "green",
            2
          ]
        ]
      },
      {
        "id": "right",
        "junction": "right",
        "path": [
          [
            0.9357,
            0.0232
          ],
          [
            0.936,
            0.0389
          ],
          [
            0.9364,
            0.0546
          ],
          [
            0.9365,
            0.0703
          ],
          [
            0.9354,
            0.0859
          ],
          [
            0.934,
            0.1016
          ],
          [
            0.9314,
            0.1173
          ],
          [
            0.9259,
            0.1328
          ],
          [
            0.9165,
            0.1481
          ],
          [
            0.9028,
            0.1628
          ],
          [
            0.8823,
            0.1763
          ],
          [
            0.8555,
            0.1879
          ],
          [
            0.8223,
            0.1967
          ],
          [
            0.7306,
            0.2127
          ]
        ],
        "rows": [
          [
            "blue",
            1
          ],
          [
            "yellow",
            1
          ],
          [
            "blue",
            2
          ],
          [
            "purple",
            1
          ],
          [
            "yellow",
            5
          ],
          [
            "purple",
            3
          ]
        ]
      }
    ],
    "exit": {
      "u": 0.5157,
      "v": 0.2917
    }
  },
  "timing": {
    "vehicleSpeedUnitsPerSec": 17.222,
    "exitSpeedUnitsPerSec": 21,
    "laneSpeedUnitsPerSec": 15,
    "parkSeconds": 0.2,
    "reverseOutSeconds": 0.4,
    "reverseOutUnits": 1.245,
    "departSpeedUnitsPerSec": 14.444,
    "bumpSpeedUnitsPerSec": 17.222,
    "bumpFlashSeconds": 0.07,
    "bumpBurstSeconds": 0.35,
    "slotsFullPopupSeconds": 0.6,
    "slotsFullFadeSeconds": 0.1,
    "slotBlinkPeriod": 1,
    "slotBlinkOn": 0.3,
    "winDelayAfterLastDeparture": 1.56,
    "flashToConfetti": 0.04,
    "confettiSeconds": 0.3
  },
  "timeLimitSeconds": 90,
  "mystery": [],
  "solution": {
    "order": [
      "V01",
      "V04",
      "V07",
      "V10",
      "V02",
      "V05",
      "V08",
      "V11",
      "V03",
      "V06",
      "V09"
    ],
    "seconds": 24.2
  }
}

Support

Contact satisvizion@gmail.com with the Unity version, the level number and reproducible steps. Do not send account credentials. Read AI-DISCLOSURE.txt for the provenance items the owner must confirm.

Current delivery and examples

Unity 6000.0.62f1 / URP. Support: satisvizion@gmail.com.

Buyer roots: Assets/Game, Assets/HyperCasualLiveOpsKit. Internal production, build and upload folders are excluded. The kit is an owner-approved first-party asset.

Current campaign: 500 levels. Use the shipped Level Editor and Auto Level Generator menu entries: Tools/BusCrowd/Documentation, Tools/BusCrowd/Level Editor, Tools/BusCrowd/Auto Level Generator.

Current complete level example

Assets/Game/CampaignLevels/Resources/Levels/Level_4.json

{
  "schemaVersion": 1,
  "id": "Level_4",
  "number": 4,
  "caption": "LEVEL 4",
  "design": {
    "aspect": [
      9,
      20
    ],
    "unitsPerHeight": 20,
    "cameraPitchDeg": 60
  },
  "generator": {
    "board": "B",
    "topology": "Double",
    "big": true,
    "family": "echelon",
    "cols": 3,
    "rows": 6,
    "headings": "24-72e58685",
    "seed": 1621612758,
    "source": "generated",
    "route": "stadium"
  },
  "vehicles": [
    {
      "id": "V01",
      "colour": "red",
      "size": "long",
      "capacity": 40,
      "x": 0.5792,
      "y": 0.4998,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V02",
      "colour": "purple",
      "size": "long",
      "capacity": 40,
      "x": 0.6682,
      "y": 0.5198,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V03",
      "colour": "blue",
      "size": "long",
      "capacity": 40,
      "x": 0.7572,
      "y": 0.5399,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V04",
      "colour": "green",
      "size": "car",
      "capacity": 16,
      "x": 0.467,
      "y": 0.5755,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V05",
      "colour": "blue",
      "size": "car",
      "capacity": 16,
      "x": 0.5561,
      "y": 0.5955,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V06",
      "colour": "yellow",
      "size": "long",
      "capacity": 40,
      "x": 0.6451,
      "y": 0.6155,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V07",
      "colour": "blue",
      "size": "car",
      "capacity": 16,
      "x": 0.3549,
      "y": 0.6512,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V08",
      "colour": "blue",
      "size": "long",
      "capacity": 40,
      "x": 0.4439,
      "y": 0.6712,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    },
    {
      "id": "V09",
      "colour": "purple",
      "size": "car",
      "capacity": 16,
      "x": 0.533,
      "y": 0.6912,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V10",
      "colour": "red",
      "size": "car",
      "capacity": 16,
      "x": 0.2428,
      "y": 0.7268,
      "headingDeg": 60,
      "length": 1.0668,
      "width": 0.5224
    },
    {
      "id": "V11",
      "colour": "green",
      "size": "long",
      "capacity": 40,
      "x": 0.3318,
      "y": 0.7469,
      "headingDeg": 60,
      "length": 1.778,
      "width": 0.685
    }
  ],
  "lot": {
    "rect": [
      0,
      0.425,
      1,
      0.8417
    ]
  },
  "road": {
    "laneV": 0.4167,
    "departLaneV": 0.4278,
    "topV": 0.3125,
    "bottomV": 0.4417,
    "exitEdge": "left"
  },
  "slots": {
    "count": 4,
    "lockedCount": 3,
    "tiltDeg": 15,
    "parkedHeadingDeg": -75,
    "centers": [
      [
        0.2516,
        0.375
      ],
      [
        0.3459,
        0.375
      ],
      [
        0.4371,
        0.375
      ],
      [
        0.5283,
        0.375
      ]
    ],
    "locked": [
      [
        0.6195,
        0.375
      ],
      [
        0.7107,
        0.375
      ],
      [
        0.8019,
        0.375
      ]
    ],
    "size": [
      0.623,
      1.444
    ],
    "counterOffsetV": -0.0111
  },
  "hud": {
    "speedPill": {
      "u": 0.9026,
      "v": 0.306,
      "w": 0.177,
      "h": 0.037
    },
    "caption": {
      "u": 0.5,
      "v": 0.06
    }
  },
  "bushes": [
    [
      0.1101,
      0.2639
    ],
    [
      0.8899,
      0.2639
    ]
  ],
  "speedPill": {
    "initial": 1,
    "multipliers": {
      "1": 1,
      "2": 1.93,
      "3": 2.78
    },
    "holdToTripleSeconds": 0.25
  },
  "crowd": {
    "rowSize": 4,
    "rowPitchUnits": 0.2586,
    "speedUnitsPerSec": 0.9815,
    "ring": {
      "path": [
        [
          0.5157,
          0.2917
        ],
        [
          0.4843,
          0.2919
        ],
        [
          0.453,
          0.2924
        ],
        [
          0.4216,
          0.2927
        ],
        [
          0.3902,
          0.2926
        ],
        [
          0.359,
          0.2913
        ],
        [
          0.3282,
          0.289
        ],
        [
          0.3021,
          0.2826
        ],
        [
          0.29,
          0.2714
        ],
        [
          0.2842,
          0.2594
        ],
        [
          0.2811,
          0.2472
        ],
        [
          0.2829,
          0.235
        ],
        [
          0.2891,
          0.223
        ],
        [
          0.3017,
          0.2119
        ],
        [
          0.3281,
          0.2057
        ],
        [
          0.359,
          0.2036
        ],
        [
          0.3902,
          0.2024
        ],
        [
          0.4216,
          0.2023
        ],
        [
          0.4529,
          0.2026
        ],
        [
          0.4843,
          0.203
        ],
        [
          0.5157,
          0.2032
        ],
        [
          0.5471,
          0.203
        ],
        [
          0.5785,
          0.2026
        ],
        [
          0.6098,
          0.2023
        ],
        [
          0.6412,
          0.2024
        ],
        [
          0.6724,
          0.2036
        ],
        [
          0.7033,
          0.2057
        ],
        [
          0.7297,
          0.2119
        ],
        [
          0.7423,
          0.223
        ],
        [
          0.7485,
          0.235
        ],
        [
          0.7503,
          0.2472
        ],
        [
          0.7472,
          0.2594
        ],
        [
          0.7414,
          0.2714
        ],
        [
          0.7293,
          0.2826
        ],
        [
          0.7032,
          0.289
        ],
        [
          0.6724,
          0.2913
        ],
        [
          0.6412,
          0.2926
        ],
        [
          0.6098,
          0.2927
        ],
        [
          0.5784,
          0.2924
        ],
        [
          0.5471,
          0.2919
        ]
      ],
      "closed": true,
      "exitIndex": 0,
      "direction": "clockwise",
      "rows": [
        [
          "blue",
          3
        ],
        [
          "green",
          1
        ],
        [
          "blue",
          5
        ],
        [
          "purple",
          1
        ],
        [
          "green",
          1
        ],
        [
          "blue",
          1
        ],
        [
          "purple",
          2
        ],
        [
          "blue",
          1
        ],
        [
          "purple",
          6
        ],
        [
          "red",
          2
        ],
        [
          "purple",
          1
        ],
        [
          "red",
          1
        ],
        [
          "blue",
          3
        ],
        [
          "green",
          4
        ],
        [
          "red",
          10
        ],
        [
          "blue",
          1
        ],
        [
          "red",
          1
        ]
      ],
      "phaseOffsetUnits": -0.1093,
      "junctions": {
        "left": [
          0.3008,
          0.2127
        ],
        "right": [
          0.7306,
          0.2127
        ]
      }
    },
    "feeders": [
      {
        "id": "left",
        "junction": "left",
        "path": [
          [
            0.0957,
            0.0232
          ],
          [
            0.0954,
            0.0389
          ],
          [
            0.095,
            0.0546
          ],
          [
            0.0949,
            0.0703
          ],
          [
            0.096,
            0.0859
          ],
          [
            0.0974,
            0.1016
          ],
          [
            0.1,
            0.1173
          ],
          [
            0.1055,
            0.1328
          ],
          [
            0.1149,
            0.1481
          ],
          [
            0.1286,
            0.1628
          ],
          [
            0.1491,
            0.1763
          ],
          [
            0.1759,
            0.1879
          ],
          [
            0.2091,
            0.1967
          ],
          [
            0.3008,
            0.2127
          ]
        ],
        "rows": [
          [
            "blue",
            8
          ],
          [
            "yellow",
            1
          ],
          [
            "green",
            1
          ],
          [
            "blue",
            1
          ],
          [
            "green",
            1
          ],
          [
            "yellow",
            1
          ],
          [
            "green",
            4
          ],
          [
            "yellow",
            2
          ],
          [
            "blue",
            2
          ],
          [
            "green",
            2
          ]
        ]
      },
      {
        "id": "right",
        "junction": "right",
        "path": [
          [
            0.9357,
            0.0232
          ],
          [
            0.936,
            0.0389
          ],
          [
            0.9364,
            0.0546
          ],
          [
            0.9365,
            0.0703
          ],
          [
            0.9354,
            0.0859
          ],
          [
            0.934,
            0.1016
          ],
          [
            0.9314,
            0.1173
          ],
          [
            0.9259,
            0.1328
          ],
          [
            0.9165,
            0.1481
          ],
          [
            0.9028,
            0.1628
          ],
          [
            0.8823,
            0.1763
          ],
          [
            0.8555,
            0.1879
          ],
          [
            0.8223,
            0.1967
          ],
          [
            0.7306,
            0.2127
          ]
        ],
        "rows": [
          [
            "blue",
            1
          ],
          [
            "yellow",
            1
          ],
          [
            "blue",
            2
          ],
          [
            "purple",
            1
          ],
          [
            "yellow",
            5
          ],
          [
            "purple",
            3
          ]
        ]
      }
    ],
    "exit": {
      "u": 0.5157,
      "v": 0.2917
    }
  },
  "timing": {
    "vehicleSpeedUnitsPerSec": 17.222,
    "exitSpeedUnitsPerSec": 21,
    "laneSpeedUnitsPerSec": 15,
    "parkSeconds": 0.2,
    "reverseOutSeconds": 0.4,
    "reverseOutUnits": 1.245,
    "departSpeedUnitsPerSec": 14.444,
    "bumpSpeedUnitsPerSec": 17.222,
    "bumpFlashSeconds": 0.07,
    "bumpBurstSeconds": 0.35,
    "slotsFullPopupSeconds": 0.6,
    "slotsFullFadeSeconds": 0.1,
    "slotBlinkPeriod": 1,
    "slotBlinkOn": 0.3,
    "winDelayAfterLastDeparture": 1.56,
    "flashToConfetti": 0.04,
    "confettiSeconds": 0.3
  },
  "timeLimitSeconds": 90,
  "mystery": [],
  "solution": {
    "order": [
      "V01",
      "V04",
      "V07",
      "V10",
      "V02",
      "V05",
      "V08",
      "V11",
      "V03",
      "V06",
      "V09"
    ],
    "seconds": 24.2
  }
}

Level fields

FieldJSON type
schemaVersionint
idstr
numberint
captionstr
designdict
generatordict
vehicleslist
lotdict
roaddict
slotsdict
huddict
busheslist
speedPilldict
crowddict
timingdict
timeLimitSecondsint
mysterylist
solutiondict

Safe worked editing procedure

  1. Open Level 4 in the Level Editor, duplicate it and move the duplicate to the end. Preserve the recorded source levels at positions 1 and 200 before saving.
  2. Use the editor’s supported controls for a small placement change; keep legal occupancy and required targets. Do not invent JSON fields.
  3. Run the shipped validator, correct any rule errors, save, then open the duplicate in gameplay and complete it.
  4. For generation, record the current seed, request a small append batch using the exposed controls, validate its solutions and confirm the previous campaign prefix is unchanged. Cancelling must leave the campaign unchanged.

Run these procedures in a clean import of the final candidate before claiming buyer acceptance; restore test additions afterward.

Current booster policy

{
  "schemaVersion": 1,
  "game": "buscrowd",
  "profile": "local",
  "campaignLevels": 500,
  "initialGrant": 2,
  "refillAmount": 1,
  "baseCoinCost": 100,
  "coinCostStep": 25,
  "levelsPerPriceStep": 10,
  "boosters": [
    {
      "id": "buscrowd_crowd_shuffle",
      "unlockLevel": 2,
      "rewardedPlacement": "booster_refill_buscrowd_crowd_shuffle",
      "baseCoinCost": 0,
      "coinCostStep": 0,
      "reason": "Default first slot. No target to pick: one tap trades waiting rows so they match parked buses, the easiest booster to teach."
    },
    {
      "id": "buscrowd_balloon",
      "unlockLevel": 7,
      "rewardedPlacement": "booster_refill_buscrowd_balloon",
      "baseCoinCost": 0,
      "coinCostStep": 0,
      "reason": "Default second slot. The first targeted booster (pick a blocked bus and lift it into a free bay) once the bar is familiar."
    },
    {
      "id": "buscrowd_bus_shuffle",
      "unlockLevel": 12,
      "rewardedPlacement": "booster_refill_buscrowd_bus_shuffle",
      "baseCoinCost": 0,
      "coinCostStep": 0,
      "reason": "Default third slot. Swaps equal-size buses across the depot; most useful once boards are dense enough to have several."
    }
  ]
}

Hosting, native-device tests and live-service verification are separately recorded in the delivery handoff. A local build is not proof of a hosted release.

Fonts

Unity-provided defaults only: TextMesh Pro default font for TMP text and LegacyRuntime.ttf for legacy Unity UI. Official TMP Essentials must be installed. Do not add custom font files or atlases. Any historical custom-font references above describe an older revision; they are not current dependencies.

Demo and publishing configuration

Current source verified on 2026-10-09. The Android download is a development demo with debug signing; WebGL is a LocalQA showcase. Ads are included as LiveOps provider adapters and test/local configuration; vendor SDKs and production credentials are not bundled in the buyer package. Native device and live store certification remain pending.

For product help, contact SatisVizion at satisvizion@gmail.com

See Third-Party Notices.txt in the package for the verified dependency and license inventory.

HyperCasual LiveOps Kit manual