Generated Maps
Pick the Generated Map level and every round starts on a course nobody has seen before — carved from one shared seed, guaranteed completable, and dressed with tiles you can swap for your own without writing code.
Overview
Hand-tuned levels are the toolkit's bread and butter, but a party round lives on novelty. The Generated Map level builds its course at load time: a winding causeway of platforms through water, with jump gaps, height steps, checkpoints on lap circuits, direction arrows — and moving obstacles on the route.
The design decision everything else hangs on: a map is pure data rolled from one seed. Only three values ever travel over the network — seed, size, type — and every machine builds the identical world from them locally. No geometry is replicated, ever.
Hosting a generated round
Select the Generated Map level like any other. For this level the host panel grows three extra controls:
- Size — Small, Medium or Big. Size also sets the session capacity: a Small map lays out 4 spawn points, a Big one 8.
- Type — a Goal Race (start to finish, first over the line wins) or a Lap Circuit (a closed ring with ordered checkpoints and a lap counter).
- Seed — leave blank for a fresh roll, or type a number to pin the exact course. With reseeding on, every round restart rolls a new map; with a fixed seed the course stays — sharing a seed with a friend shares the map.
From code, the same seam is one call:
using Curitor.PartyCoreKit.Maps;
using UnityEngine;
// Everyone who plays today gets the SAME course, because everyone
// derives the same seed. Same seed = same map, on every machine.
public class DailyChallenge : MonoBehaviour
{
public void ConfigureSession()
{
int daySeed = int.Parse(System.DateTime.UtcNow.ToString("yyyyMMdd"));
MapSession.BeginFresh(MapSize.Medium, MapType.LapCircuit, daySeed);
}
}Your content, zero code
Everything visible on a generated map comes out of one asset: the Map Tile Catalog. Each entry is a prefab, a category, and a selection weight. The stock set ships pre-wired; your edits survive every reinstall, and setting a weight to 0 retires an entry without deleting it.
| Field | Type | What it does |
|---|---|---|
Platform | structural | The walkable floor tile. Every ground, start, finish and checkpoint cell stands on one, picked by weight. |
Drop-Zone Filler | structural | The water that fills a jump gap — and everything off the route. |
Start / End Zone | structural | The flat marker panels on the start cell and on finish/checkpoint cells. |
Special | chance décor | Props sprinkled by chance, each with its own placement contract: on the route, beside it, or anywhere off-path. |
Direction Marker | guidance | The run-direction arrow laid on every Nth route cell. Optional — a catalog without one simply emits no arrows. Reskin by swapping the prefab. |
Path Obstacle | gameplay | A moving hazard placed ON the route — an exact count per map, never a chance roll. Brings its own motion component and must never fully block its cell. |
Open the catalog
TheMapTileCatalogasset under the toolkit's Maps folder — or your own copy wired into the generator config.Add an entry
Assign your prefab, pick the category, set a weight. Structural tiles expect a cell-sized footprint with the pivot at the walkable top; Special and Path Obstacle prefabs are placed as-authored on the cell floor.For Specials: choose a placement
On the route, adjacent to it, or anywhere off-path. The generator honors the contract per entry.Play
The next generated round picks your entry by weight. No code, no registration step.

Moving obstacles
Path Obstacles are the generated map's gameplay layer: an exact number of them (a generator config value, default 3) land on the route itself, always with a clean landing cell on either side and never two in a row. The stock obstacle is a mushroom cluster that sprouts out of the platform, holds, and shrinks away — cross while it is down.
| Field | Type | Default | What it does |
|---|---|---|---|
Period | seconds | 3 | One cycle window. Each window carries at most one sprout. |
Grow Seconds | seconds | 0.4 | The grow transition; the shrink takes the same time. Variance never changes the speed of the motion — only its moment. |
Hold Seconds | seconds | 1 | How long the obstacle stays fully grown. |
Open Seconds | seconds | 1 | GUARANTEED dormant gap between two sprouts, however the dice land — the crossing window that keeps high variance fair. |
Variance | 0 – 1 | 0 | 0: a metronome. 1: the sprout moment shifts unpredictably within each cycle and roughly a third of cycles skip entirely. Fully deterministic — every machine rolls the same. |
Variance is the difficulty dial: at 0 the mushroom is a rhythm you learn; turned up, when it sprouts — and whether it sprouts at all this cycle — becomes a surprise. The transition speed never changes, and Open Seconds always guarantees a crossing window, so high variance stays mean rather than unfair.
Bots run generated maps too
Every generated map emits the same typed waypoint graph a hand-authored level carries — nodes along the route, jump edges over the gaps, ordered by the carve. To a bot, a generated course and your hand-tuned one are indistinguishable, so a solo round on a fresh map still has opponents in it.
Tuning the generator
The algorithm is code; every number it runs on is config. The MapGeneratorConfig asset carries the size table (cells per side and spawn points per size), cell dimensions, the gap and height-change chances, off-path ledge density, the special-tile chance, the obstacle count, the direction-arrow interval and the lap rules — all consumer-tunable, all surviving reinstalls.
Two values are load-bearing for the completability promise, and the config warns the moment you break them: the height step must stay within the character's step-up reach, and the jump-gap distance in the movement metrics must fit inside a cell. Retune the character and the courses follow — the metrics asset is the one contract between movement and generation.