five-on-it / apps/server/src/level-source / resolveGame
Function: resolveGame()
resolveGame(
spec,level):object
Defined in: apps/server/src/level-source.ts:62
The game a server runs on its level: the file spec points at (FOI_GAME), else the level's bundled game, else none (free roam). Throws when the file cannot be read, is not a game, is for another level, or fails a check; returns the warnings to log, and the game as authored (source, in this release's format with no default filled in: a run's mission hash is taken over it).
Parameters
spec
string | undefined
level
Returns
object
game
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"; }; };schemaVersion?:number;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"; }>; } |undefined
Union Members
Type Literal
{ 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"; }; }; schemaVersion?: number; 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"; }>; }
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"; }>
undefined
source?
optionalsource?:unknown
warnings
warnings:
string[]