One run of Fight the Sky, published by the player into their own repo: a climb up the ladder, or a single ghost fight (see `ghost`). The record stores the fighter's build and every input rather than a score: the sim is deterministic, so re-running the input log against the same seed with the same build reproduces the run exactly. Owning the record is the identity proof, and replaying it is the score proof — score, wins and the rest are advisory and never trusted by a leaderboard.
tid
Timestamp-based ID
Properties
build
ref
#build
Required
The fighter's build: twelve points at most over four stats of 1–5, and a special. The build changes the sim, so a verifier replays with it and refuses one over budget.
createdAt
string
datetime
Required
An RFC 3339 formatted timestamp.
difficulty
string
Optional
How hard the run was. A verifier must replay at the same difficulty. Absent means normal. Each difficulty has its own daily board.
maxLength: 16 bytesgranny, easy, normal, hardfaces
array
of
ref
#face
Optional
The player's own photo faces that fought on the ladder, included on purpose (the game asks, off by default) so a replay anywhere shows them; each photo is a public blob in the player's repo. Cosmetic, like `look`: a face takes its ladder slot ahead of the people the player follows, the opponents' play is the sim's, and a verifier ignores this field entirely. Six at most. Never on a ghost fight.
maxLength: 6 itemsghost
ref
#ghost
Optional
Present on a ghost fight: who the opponent was and how sharp. A run with this never ranks on a board, whatever its seed.
hits
integer
Optional
Advisory: hits landed.
minimum: 0inputs
string
Required
The whole run as the only input the game takes. Comma-separated `<dtick>.<code>` entries, or `<dtick>.<code>.<v>` for the held ones: dtick is 60 Hz ticks since the previous entry; code 0 is a jab, 1 a kick, 2 the special, 3 throws in the towel (the run ends on that entry), 4 sets the held direction (v is -1 left, 0 none, 1 right; absolute, not relative to facing), 5 crouches (v 1) or stands (v 0), 6 jumps, 7 holds guard (v 1) or lets go (v 0). Only inputs the sim accepted are logged; a verifier refuses a log the sim would not have accepted. Example: `100.4.1,40.0,8.1,30.4.0`.
maxLength: 400000 byteslook
string
Optional
Cosmetic: the fighter's three paint colors, as `rrggbb.rrggbb.rrggbb` (body, trim, gloves). The sim never sees it.
maxLength: 32 bytesperfects
integer
Optional
Advisory: fights won without taking a hit.
minimum: 0score
integer
Required
Advisory: the final score.
minimum: 0seed
string
Required
Which ladder: a date (YYYY-MM-DD, local to the player) for the daily ladder, or any other string for a practice one or a ghost fight. The sim seeds from the FNV-1a hash of this string.
maxLength: 64 bytessimVersion
integer
Required
Which rules produced these inputs. A verifier must replay under the matching version or refuse the run.
minimum: 1start
integer
Optional
The ladder slot the run started at: 1 for a full run, any other for practice against that opponent. Absent means 1. Only full runs of a daily ladder rank. A ghost fight is always 1.
minimum: 1maximum: 10ticks
integer
Required
Advisory: the tick the run ended.
minimum: 1wins
integer
Required
Advisory: fights won.
minimum: 0won
boolean
Optional
Advisory: the whole ladder was cleared; in a ghost fight, the ghost was beaten.
worn
ref
#worn
Optional
The photo face the player wore themself in this run, included on purpose under the same switch as `faces` (off by default), so a replay anywhere shows it in their corner, with its name, instead of their avatar. A public blob in the player's repo. Cosmetic: a verifier ignores it. Never on a ghost fight.
View raw schema
{
"description": "One run of Fight the Sky, published by the player into their own repo: a climb up the ladder, or a single ghost fight (see `ghost`). The record stores the fighter's build and every input rather than a score: the sim is deterministic, so re-running the input log against the same seed with the same build reproduces the run exactly. Owning the record is the identity proof, and replaying it is the score proof — score, wins and the rest are advisory and never trusted by a leaderboard.",
"key": "tid",
"record": {
"properties": {
"build": {
"description": "The fighter's build: twelve points at most over four stats of 1–5, and a special. The build changes the sim, so a verifier replays with it and refuses one over budget.",
"ref": "#build",
"type": "ref"
},
"createdAt": {
"format": "datetime",
"type": "string"
},
"difficulty": {
"description": "How hard the run was. A verifier must replay at the same difficulty. Absent means normal. Each difficulty has its own daily board.",
"knownValues": [
"granny",
"easy",
"normal",
"hard"
],
"maxLength": 16,
"type": "string"
},
"faces": {
"description": "The player's own photo faces that fought on the ladder, included on purpose (the game asks, off by default) so a replay anywhere shows them; each photo is a public blob in the player's repo. Cosmetic, like `look`: a face takes its ladder slot ahead of the people the player follows, the opponents' play is the sim's, and a verifier ignores this field entirely. Six at most. Never on a ghost fight.",
"items": {
"ref": "#face",
"type": "ref"
},
"maxLength": 6,
"type": "array"
},
"ghost": {
"description": "Present on a ghost fight: who the opponent was and how sharp. A run with this never ranks on a board, whatever its seed.",
"ref": "#ghost",
"type": "ref"
},
"hits": {
"description": "Advisory: hits landed.",
"minimum": 0,
"type": "integer"
},
"inputs": {
"description": "The whole run as the only input the game takes. Comma-separated `<dtick>.<code>` entries, or `<dtick>.<code>.<v>` for the held ones: dtick is 60 Hz ticks since the previous entry; code 0 is a jab, 1 a kick, 2 the special, 3 throws in the towel (the run ends on that entry), 4 sets the held direction (v is -1 left, 0 none, 1 right; absolute, not relative to facing), 5 crouches (v 1) or stands (v 0), 6 jumps, 7 holds guard (v 1) or lets go (v 0). Only inputs the sim accepted are logged; a verifier refuses a log the sim would not have accepted. Example: `100.4.1,40.0,8.1,30.4.0`.",
"maxLength": 400000,
"type": "string"
},
"look": {
"description": "Cosmetic: the fighter's three paint colors, as `rrggbb.rrggbb.rrggbb` (body, trim, gloves). The sim never sees it.",
"maxLength": 32,
"type": "string"
},
"perfects": {
"description": "Advisory: fights won without taking a hit.",
"minimum": 0,
"type": "integer"
},
"score": {
"description": "Advisory: the final score.",
"minimum": 0,
"type": "integer"
},
"seed": {
"description": "Which ladder: a date (YYYY-MM-DD, local to the player) for the daily ladder, or any other string for a practice one or a ghost fight. The sim seeds from the FNV-1a hash of this string.",
"maxLength": 64,
"type": "string"
},
"simVersion": {
"description": "Which rules produced these inputs. A verifier must replay under the matching version or refuse the run.",
"minimum": 1,
"type": "integer"
},
"start": {
"description": "The ladder slot the run started at: 1 for a full run, any other for practice against that opponent. Absent means 1. Only full runs of a daily ladder rank. A ghost fight is always 1.",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"ticks": {
"description": "Advisory: the tick the run ended.",
"minimum": 1,
"type": "integer"
},
"wins": {
"description": "Advisory: fights won.",
"minimum": 0,
"type": "integer"
},
"won": {
"description": "Advisory: the whole ladder was cleared; in a ghost fight, the ghost was beaten.",
"type": "boolean"
},
"worn": {
"description": "The photo face the player wore themself in this run, included on purpose under the same switch as `faces` (off by default), so a replay anywhere shows it in their corner, with its name, instead of their avatar. A public blob in the player's repo. Cosmetic: a verifier ignores it. Never on a ghost fight.",
"ref": "#worn",
"type": "ref"
}
},
"required": [
"seed",
"simVersion",
"inputs",
"build",
"score",
"wins",
"ticks",
"createdAt"
],
"type": "object"
},
"type": "record"
}