com.gamethesky.fightthesky.run
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"build": {
"description": "A 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. Shared by the run record and the fighter record.",
"properties": {
"guts": {
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"power": {
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"reach": {
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"special": {
"knownValues": [
"post",
"ratio",
"rush"
],
"maxLength": 16,
"type": "string"
},
"speed": {
"maximum": 5,
"minimum": 1,
"type": "integer"
}
},
"required": [
"power",
"speed",
"reach",
"guts",
"special"
],
"type": "object"
},
"ghost": {
"description": "A ghost fight's opponent: a strong reference to another player's fighter record, pinned to the version fought, plus how the CPU drove it. The verifier fetches that exact version, replays with its build and style, and refuses the run if the version is gone, so an owner editing their fighter changes no old result.",
"properties": {
"cid": {
"description": "The version of that record the fight was played against.",
"format": "cid",
"type": "string"
},
"skill": {
"description": "How sharp the ghost's CPU was, the challenger's choice: the sim thinks skill/10 times the difficulty's, so 10 on Normal is as good as the CPU gets. A verifier must replay at the same skill.",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"style": {
"description": "Advisory: how the ghost fought, copied from its record so a card can say so without fetching it. A verifier uses the record's own style and refuses a run that disagrees.",
"knownValues": [
"rusher",
"turtle",
"zoner",
"tricky"
],
"maxLength": 16,
"type": "string"
},
"uri": {
"description": "The opponent's `com.gamethesky.fightthesky.fighter` record, in their repo.",
"format": "at-uri",
"type": "string"
}
},
"required": [
"uri",
"cid",
"skill"
],
"type": "object"
},
"main": {
"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"
},
"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"
}
},
"required": [
"seed",
"simVersion",
"inputs",
"build",
"score",
"wins",
"ticks",
"createdAt"
],
"type": "object"
},
"type": "record"
}
},
"id": "com.gamethesky.fightthesky.run",
"lexicon": 1
}
Metadata
- DID
-
did:plc:fpi7mvknwqh264gz6kug7pmk - CID
-
bafyreihc4qkunn7tgo7pa273a5ht5nzr5ihu2glvkhkqcmveejibz2qdwi - Indexed At
- 2026-10-21 03:10 UTC
- AT-URI
-
at://did:plc:fpi7mvknwqh264gz6kug7pmk/com.atproto.lexicon.schema/com.gamethesky.fightthesky.run
Version History (4 versions)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
com.gamethesky.make.run record
One play of a Make the Sky game, published by the player into their own repo. It stores every input rather than trusting a score: each chapter's engine is deterministic, so replaying its log on the same game reproduces …
-
com.gamethesky.skyvortex.run record
One Sky Vortex run, published by the player into their own repo. The record stores every input rather than trusting a score: the sim is deterministic, so replaying the log on the same seed reproduces the run exactly. Ow…
-
A player's fighter, published into their own repo so anyone can fight its ghost: the build the sim uses, the style the CPU plays it in, and the paint it wears. One per account, at rkey `self`; saving again overwrites it…
-
com.gamethesky.skytanks.run record
One Sky Tanks run, published by the player into their own repo. The record stores every input rather than trusting a score: the sim is deterministic, so replaying the log on the same seed reproduces the run exactly. Own…
-
One night of Haunt the Sky, published by the player into their own repo. The record stores every input rather than trusting a score: the sim is deterministic, so replaying the log on the same seed reproduces the run exa…