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?
Returns
MissionRuntime
Properties
game
readonlygame:object
Defined in: packages/missions/src/runtime.ts:1624
The game being played.
blurb?
optionalblurb?: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?
optionalclock?: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?
optionalgarages?:object
What every garage of the level charges ($), over the level's own prices (GAME_DESIGN §5.5).
rules.garages.respray?
optionalrespray?:number
rules.garages.store?
optionalstore?:number
rules.ghostSeconds
ghostSeconds:
number
Seconds a player is a ghost after coming back (passing through cars and people, taking no harm).
rules.loadout?
optionalloadout?: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?
optionalprices?: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?
optionalweather?: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?
optionalclimate?:"none"|"temperate"|"meadow"|"forest"|"alpine"|"farmland"|"steppe"|"desert"|"autumn"|"coast"
rules.weather.intensity
intensity:
number
rules.weather.start?
optionalstart?:"clear"|"overcast"|"rain"|"storm"|"fog"|"snow"
schemaVersion?
optionalschemaVersion?: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
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
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
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
Returns
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