Skip to content

five-on-it / packages/missions/src/runtime / MissionRuntime

Class: MissionRuntime ​

Defined in: packages/missions/src/runtime.ts:1622

Runs a game's missions for the players of a room.

Constructors ​

Constructor ​

new MissionRuntime(game, options?): MissionRuntime

Defined in: packages/missions/src/runtime.ts:1641

A room's missions: a hub's (every solo mission of the game for every player), or with options.run a run's (its one mission, held for its seats). Throws when the run's mission is not the game's or a seat's team is not the mission's.

Parameters ​

game ​
blurb? ​

string = ...

id ​

string = ...

level ​

string = ...

missions ​

object[] = ...

paths ​

Record<string, { gates: string[]; laps: number; } | { loop: boolean; patrol: string[]; }> = ...

places ​

Record<string, { name?: string; role?: "players" | "police" | "traffic" | "guards" | "hospital"; tags?: string[]; x: number; y?: number; yaw?: number; z: number; }> = ...

rules ​

{ clock?: { pace: number; start: string; }; dropMissionItems: boolean; fallDamage: boolean; garages?: { respray?: number; store?: number; }; ghostSeconds: number; loadout?: object[]; maxPlayers: number; partyRewards: "split" | "shared"; phone: boolean; playerDamage: "on" | "off" | "rivals"; police: boolean; prices?: Record<string, number>; respawn: "hospital" | "mission"; safeZones: string[]; traffic: number; vehicleFire: boolean; weather?: { changes: boolean; climate?: "none" | "temperate" | "meadow" | "forest" | "alpine" | "farmland" | "steppe" | "desert" | "autumn" | "coast"; intensity: number; start?: "clear" | "overcast" | "rain" | "storm" | "fog" | "snow"; }; } = ...

rules.clock? ​

{ pace: number; start: string; } = ...

The room clock (GAME_DESIGN §5.7): the time the room starts at and its pace, game minutes per real second (1 is an hour a minute, a day in 24 minutes; 0 stops it; up to 60 for a day in 24 seconds).

rules.clock.pace ​

number = ...

rules.clock.start ​

string = ...

rules.dropMissionItems ​

boolean = ...

Whether a character that dies drops the items a mission defined that it carried, where it fell (GAME_DESIGN §7.4).

rules.fallDamage ​

boolean = ...

Whether a long fall hurts (from about 4 m) and a very long one kills (from about 12 m).

rules.garages? ​

{ respray?: number; store?: number; } = ...

What every garage of the level charges ($), over the level's own prices (GAME_DESIGN §5.5).

rules.garages.respray? ​

number = ...

rules.garages.store? ​

number = ...

rules.ghostSeconds ​

number = ...

Seconds a player is a ghost after coming back (passing through cars and people, taking no harm).

rules.loadout? ​

object[] = ...

What every player starts with (GAME_DESIGN §7.4): stacks of items by id (weapons and their ammunition are items), each in the slot of the strip it names (1 to 16; the number keys select the first nine, and the slot a key selects is the weapon held) or the first free one. Absent: free roam's arsenal, the fists' slot 1 left empty, the pistol, shotgun, rifle, rocket launcher, grenades and tranquilizer on 2 to 7 and the guns' ammunition from 9 on; an empty list: nothing but the phone.

rules.maxPlayers ​

number = ...

How many players a room of this game takes.

rules.partyRewards ​

"split" | "shared" = ...

How a party's mission reward is paid: each member the whole of it (shared), or the reward divided among them (split).

rules.phone ​

boolean = ...

Whether every character starts with a phone (GAME_DESIGN §7.5); a mission may give one.

rules.playerDamage ​

"on" | "off" | "rivals" = ...

Whether players hurt each other: never, only rivals (players outside one's party), or always.

rules.police ​

boolean = ...

Whether the room has police: crimes raise a Wanted level and police cars come (GAME_DESIGN §12).

rules.prices? ​

Record<string, number> = ...

What the shops charge ($), by item id, over the items' own prices (GAME_DESIGN §14).

rules.respawn ​

"hospital" | "mission" = ...

Where a player who went down comes back: the nearest spawn point (hospital), or where their mission started (mission).

rules.safeZones ​

string[] = ...

The game's zones where players cannot hurt each other and no car is carjacked.

rules.traffic ​

number = ...

Ambient cars driving the level's roads around the players: none unless the game asks (at most 64).

rules.vehicleFire ​

boolean = ...

Whether a car brought low catches fire, burns and blows up, its blast lighting the cars beside it.

rules.weather? ​

{ changes: boolean; climate?: "none" | "temperate" | "meadow" | "forest" | "alpine" | "farmland" | "steppe" | "desert" | "autumn" | "coast"; intensity: number; start?: "clear" | "overcast" | "rain" | "storm" | "fog" | "snow"; } = ...

The room's weather (GAME_DESIGN §5.7): its climate (the level's by default: a region's biome, temperate for a town; none is always clear), the weather it opens with (start, at an intensity), and whether it changes on its own from there (a front every half an hour, by the climate's odds) or holds. Missions change it (setWeather).

rules.weather.changes ​

boolean = ...

rules.weather.climate? ​

"none" | "temperate" | "meadow" | "forest" | "alpine" | "farmland" | "steppe" | "desert" | "autumn" | "coast" = ...

rules.weather.intensity ​

number = ...

rules.weather.start? ​

"clear" | "overcast" | "rain" | "storm" | "fog" | "snow" = ...

schemaVersion? ​

number = ...

The document's format (migrate.ts): 1 when absent; a newer one is migrated away before this reads it.

title ​

string = ...

zones ​

Record<string, { kind?: "pickup" | "spawn" | "restricted" | "race_gate" | "safe" | "checkpoint" | "dropoff"; place: string; radius: number; raises?: "alert" | "heat"; role?: "players" | "police" | "traffic" | "guards" | "hospital"; }> = ...

options? ​
run? ​

RunOptions

Returns ​

MissionRuntime

Properties ​

game ​

readonly game: object

Defined in: packages/missions/src/runtime.ts:1624

The game being played.

blurb? ​

optional blurb?: string

id ​

id: string

level ​

level: string

missions ​

missions: object[]

paths ​

paths: Record<string, { gates: string[]; laps: number; } | { loop: boolean; patrol: string[]; }>

places ​

places: Record<string, { name?: string; role?: "players" | "police" | "traffic" | "guards" | "hospital"; tags?: string[]; x: number; y?: number; yaw?: number; z: number; }>

rules ​

rules: object

rules.clock? ​

optional clock?: object

The room clock (GAME_DESIGN §5.7): the time the room starts at and its pace, game minutes per real second (1 is an hour a minute, a day in 24 minutes; 0 stops it; up to 60 for a day in 24 seconds).

rules.clock.pace ​

pace: number

rules.clock.start ​

start: string

rules.dropMissionItems ​

dropMissionItems: boolean

Whether a character that dies drops the items a mission defined that it carried, where it fell (GAME_DESIGN §7.4).

rules.fallDamage ​

fallDamage: boolean

Whether a long fall hurts (from about 4 m) and a very long one kills (from about 12 m).

rules.garages? ​

optional garages?: object

What every garage of the level charges ($), over the level's own prices (GAME_DESIGN §5.5).

rules.garages.respray? ​

optional respray?: number

rules.garages.store? ​

optional store?: number

rules.ghostSeconds ​

ghostSeconds: number

Seconds a player is a ghost after coming back (passing through cars and people, taking no harm).

rules.loadout? ​

optional loadout?: object[]

What every player starts with (GAME_DESIGN §7.4): stacks of items by id (weapons and their ammunition are items), each in the slot of the strip it names (1 to 16; the number keys select the first nine, and the slot a key selects is the weapon held) or the first free one. Absent: free roam's arsenal, the fists' slot 1 left empty, the pistol, shotgun, rifle, rocket launcher, grenades and tranquilizer on 2 to 7 and the guns' ammunition from 9 on; an empty list: nothing but the phone.

rules.maxPlayers ​

maxPlayers: number

How many players a room of this game takes.

rules.partyRewards ​

partyRewards: "split" | "shared"

How a party's mission reward is paid: each member the whole of it (shared), or the reward divided among them (split).

rules.phone ​

phone: boolean

Whether every character starts with a phone (GAME_DESIGN §7.5); a mission may give one.

rules.playerDamage ​

playerDamage: "on" | "off" | "rivals"

Whether players hurt each other: never, only rivals (players outside one's party), or always.

rules.police ​

police: boolean

Whether the room has police: crimes raise a Wanted level and police cars come (GAME_DESIGN §12).

rules.prices? ​

optional prices?: Record<string, number>

What the shops charge ($), by item id, over the items' own prices (GAME_DESIGN §14).

rules.respawn ​

respawn: "hospital" | "mission"

Where a player who went down comes back: the nearest spawn point (hospital), or where their mission started (mission).

rules.safeZones ​

safeZones: string[]

The game's zones where players cannot hurt each other and no car is carjacked.

rules.traffic ​

traffic: number

Ambient cars driving the level's roads around the players: none unless the game asks (at most 64).

rules.vehicleFire ​

vehicleFire: boolean

Whether a car brought low catches fire, burns and blows up, its blast lighting the cars beside it.

rules.weather? ​

optional weather?: object

The room's weather (GAME_DESIGN §5.7): its climate (the level's by default: a region's biome, temperate for a town; none is always clear), the weather it opens with (start, at an intensity), and whether it changes on its own from there (a front every half an hour, by the climate's odds) or holds. Missions change it (setWeather).

rules.weather.changes ​

changes: boolean

rules.weather.climate? ​

optional climate?: "none" | "temperate" | "meadow" | "forest" | "alpine" | "farmland" | "steppe" | "desert" | "autumn" | "coast"

rules.weather.intensity ​

intensity: number

rules.weather.start? ​

optional start?: "clear" | "overcast" | "rain" | "storm" | "fog" | "snow"

schemaVersion? ​

optional schemaVersion?: number

The document's format (migrate.ts): 1 when absent; a newer one is migrated away before this reads it.

title ​

title: string

zones ​

zones: Record<string, { kind?: "pickup" | "spawn" | "restricted" | "race_gate" | "safe" | "checkpoint" | "dropoff"; place: string; radius: number; raises?: "alert" | "heat"; role?: "players" | "police" | "traffic" | "guards" | "hospital"; }>

Methods ​

addSeat() ​

addSeat(seat): number

Defined in: packages/missions/src/runtime.ts:1665

A seat added to a run under way (a late joiner's, joinInProgress): at the end of the roster, with the lives a seat starts with (per player), its book empty; its player joins it by its index (MissionRuntime.join) and plays the run's mission where it stands, its tracker on the objective under way. Returns its index; throws in a hub, or for a team the mission has not.

Parameters ​

seat ​

RunSeat

Returns ​

number


gone() ​

gone(seat): void

Defined in: packages/missions/src/runtime.ts:1777

A run's seat is gone for good (its minute to come back ran out, or it never came before the run went live): in versus, a team with nobody left that may play loses (a forfeit).

Parameters ​

seat ​

number

Returns ​

void


join() ​

join(player, party?, seat?): void

Defined in: packages/missions/src/runtime.ts:1680

Adds a player, in a party when they have one (a hub's), or in a seat of the run (its index); their first mission starts on the next step (a party's members play the mission its first member is playing; a run's seats, the run's).

Parameters ​

player ​

number

party? ​

string

seat? ​

number

Returns ​

void


leave() ​

leave(player): MissionCommand[]

Defined in: packages/missions/src/runtime.ts:1787

Removes a player; returns the commands that remove their mission's actors. A party's mission goes on: the next member takes it over, its actors and its progress. A run's goes on held for every seat: the player's seat stands empty, its book kept.

Parameters ​

player ​

number

Returns ​

MissionCommand[]


rebind() ​

rebind(from, to): void

Defined in: packages/missions/src/runtime.ts:1696

A run's player who came back under a new client id takes their seat again: their wallet, phone and tracker, their checkpoint's share; their seat's book goes on from what it had. Nothing for a client it does not know, or onto one it does.

Parameters ​

from ​

number

to ​

number

Returns ​

void


reset() ​

reset(): MissionCommand[]

Defined in: packages/missions/src/runtime.ts:1819

Starts every player over (a level reset; a run from its start); returns the commands that remove every mission actor.

Returns ​

MissionCommand[]


runView() ​

runView(): RunView | undefined

Defined in: packages/missions/src/runtime.ts:1720

A run as its host reads it (undefined in a hub): how it is played, its teams with their scores, its lives and retries, each seat, how it ended and who won.

Returns ​

RunView | undefined


state() ​

state(): unknown

Defined in: packages/missions/src/runtime.ts:1857

Every player's missions as plain data, in join order: what the determinism tests compare; a run's room adds the run (its holder's missions, its seats, lives, retries and outcome) around them.

Returns ​

unknown


step() ​

step(facts): MissionOutput

Defined in: packages/missions/src/runtime.ts:1941

One step: the facts in, the commands, changed views, notices and phones out. A party's mission is stepped once, by its first member, with every member's facts; each member reads its notices and its tracker (with their own wallet), and works their own phone.

Parameters ​

facts ​

MissionFacts

Returns ​

MissionOutput


view() ​

view(player, facts?): MissionView

Defined in: packages/missions/src/runtime.ts:1840

The tracker's view for a player (status none for one who never joined).

Parameters ​

player ​

number

facts? ​

MissionFacts

Returns ​

MissionView