com.gamethesky.hatsoff.run
Schema Diff
+32 -2
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 7 non-breaking changes.
Breaking Changes (1)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.gamethesky.hatsoff.run:body", src: "com.gamethesky.hatsoff.run:body", tgt: "com.gamethesky.hatsoff.run:body.level", kind: "prop", name: Some("level") }
Non-Breaking Changes (7)
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.hatsoff.run:body.dawn" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.hatsoff.run:body.level" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.hatsoff.run:body.rules" }
- AddedVertex AddedVertex { vertex_id: "com.gamethesky.hatsoff.run:body.stage" }
- AddedEdge AddedEdge { src: "com.gamethesky.hatsoff.run:body", tgt: "com.gamethesky.hatsoff.run:body.dawn", kind: "prop", name: Some("dawn") }
- AddedEdge AddedEdge { src: "com.gamethesky.hatsoff.run:body", tgt: "com.gamethesky.hatsoff.run:body.rules", kind: "prop", name: Some("rules") }
- AddedEdge AddedEdge { src: "com.gamethesky.hatsoff.run:body", tgt: "com.gamethesky.hatsoff.run:body.stage", kind: "prop", name: Some("stage") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.gamethesky.hatsoff.run:body.dawn" }AddedVertex { vertex_id: "com.gamethesky.hatsoff.run:body.level" }AddedVertex { vertex_id: "com.gamethesky.hatsoff.run:body.rules" }AddedVertex { vertex_id: "com.gamethesky.hatsoff.run:body.stage" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.gamethesky.hatsoff.run:body", src: "com.gamethesky.hatsoff.run:body", tgt: "com.gamethesky.hatsoff.run:body.level", kind: "prop", name: Some("level") }
- Non-breaking: AddedEdge { src: "com.gamethesky.hatsoff.run:body", tgt: "com.gamethesky.hatsoff.run:body.dawn", kind: "prop", name: Some("dawn") }
- Non-breaking: AddedEdge { src: "com.gamethesky.hatsoff.run:body", tgt: "com.gamethesky.hatsoff.run:body.rules", kind: "prop", name: Some("rules") }
- Non-breaking: AddedEdge { src: "com.gamethesky.hatsoff.run:body", tgt: "com.gamethesky.hatsoff.run:body.stage", kind: "prop", name: Some("stage") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
-
"description": "One Hats Off run, published by the player into their own repo. The record stores every shot rather than a score: the sim is deterministic, so re-running the fire log against the same seed reproduces the run exactly. Owning the record is the identity proof, and replaying it is the score proof — wave, cured and the rest are advisory and never trusted by a leaderboard.",
5
+
"description": "One Hats Off run, published by the player into their own repo. The record stores every shot rather than a score: the sim is deterministic, so re-running the fire log against the same seed on the same level reproduces the run exactly. Owning the record is the identity proof, and replaying it is the score proof — wave, cured and the rest are advisory and never trusted by a leaderboard.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"createdAt": {
10
10
"format": "datetime",
11
11
"type": "string"
12
12
},
13
13
"cured": {
14
14
"description": "Advisory: hats removed.",
15
15
"minimum": 0,
16
16
"type": "integer"
17
17
},
18
+
"dawn": {
19
+
"description": "Advisory: the night was won — the President's hat came off, or the night's cap was reached.",
20
+
"type": "boolean"
21
+
},
18
22
"fires": {
19
-
"description": "The whole run as the only input the game takes. Comma-separated `<dtick>.<weapon>.<x>.<z>` entries: dtick is 60 Hz ticks since the previous entry, weapon is 0 mist, 1 pulse, 2 drop, or 3 for giving up (the run ends on that entry; x and z are 0), x and z are the ground point in tenths of a unit (x east, z south, origin at the Washington Monument). Only shots the sim accepted are logged; a verifier applies the same rate, heat and cooldown rules and refuses a log that fires faster than they allow. Example: `120.0.-402.12,5.0.-398.14,30.1.-390.10`.",
23
+
"description": "The whole run as the only input the game takes. Comma-separated `<dtick>.<weapon>.<x>.<z>` entries: dtick is 60 Hz ticks since the previous entry, weapon is 0 mist, 1 pulse, 2 drop, 3 for giving up (the run ends on that entry; x and z are 0), or 4 for a heading on an airlift level (x and z are then the direction in tenths, 0 and 0 to hover), x and z are otherwise the ground point in tenths of a unit (x east, z south, origin at the Washington Monument). Only shots the sim accepted are logged; a verifier applies the same rate, heat and cooldown rules and refuses a log that fires faster than they allow. Example: `120.0.-402.12,5.0.-398.14,30.1.-390.10`.",
20
24
"maxLength": 400000,
21
25
"type": "string"
22
26
},
23
27
"holdPeak": {
24
28
"description": "Advisory: the most people sheltering at once.",
25
29
"minimum": 0,
26
30
"type": "integer"
27
31
},
32
+
"level": {
33
+
"description": "The level the run was played on. Ids are append-only.",
34
+
"knownValues": [
35
+
"liberty",
36
+
"goldengate",
37
+
"alamo",
38
+
"rushmore",
39
+
"raid",
40
+
"airlift",
41
+
"mall",
42
+
"whitehouse"
43
+
],
44
+
"maxLength": 32,
45
+
"type": "string"
46
+
},
28
47
"rehatted": {
29
48
"description": "Advisory: cured people the horde caught again.",
30
49
"minimum": 0,
31
50
"type": "integer"
32
51
},
52
+
"rules": {
53
+
"description": "The level's own rules version the run was played under. A verifier must replay under the matching version or refuse the run. Absent means 1.",
54
+
"minimum": 1,
55
+
"type": "integer"
56
+
},
33
57
"seed": {
34
58
"description": "Which horde: a date (YYYY-MM-DD, local to the player) for the nightly horde, or any word for a practice one. The sim seeds from the FNV-1a hash of this string.",
35
59
"maxLength": 64,
36
60
"type": "string"
37
61
},
38
62
"simVersion": {
39
63
"description": "Which rules produced these shots. A verifier must replay under the matching version or refuse the run.",
40
64
"minimum": 1,
41
65
"type": "integer"
42
66
},
67
+
"stage": {
68
+
"description": "Deprecated: an earlier build's stage index. Superseded by level.",
69
+
"minimum": 1,
70
+
"type": "integer"
71
+
},
43
72
"ticks": {
44
73
"description": "Advisory: the tick the steps fell.",
45
74
"minimum": 1,
46
75
"type": "integer"
47
76
},
48
77
"wave": {
49
78
"description": "Advisory: the wave the steps fell in.",
50
79
"minimum": 1,
51
80
"type": "integer"
52
81
}
53
82
},
54
83
"required": [
55
84
"seed",
85
+
"level",
56
86
"simVersion",
57
87
"fires",
58
88
"wave",
59
89
"cured",
60
90
"createdAt"
61
91
],
62
92
"type": "object"
63
93
},
64
94
"type": "record"
65
95
}
66
96
},
67
97
"id": "com.gamethesky.hatsoff.run",
68
98
"lexicon": 1
69
99
}