app.golfthesky.round
Schema Diff
+1 -1
Compatibility Analysis
Backward Compatible
No changes detected.
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"hole": {
5
5
"properties": {
6
6
"holeId": {
7
7
"description": "Permanent identity of the hole within the course.",
8
8
"knownValues": [
9
9
"opening-drive",
10
10
"dogleg",
11
11
"sky-ramp",
12
12
"slick-slope",
13
13
"bunker-alley",
14
14
"island-hop",
15
15
"first-light",
16
16
"sticky-situation",
17
17
"ice-cave",
18
18
"archipelago"
19
19
],
20
20
"maxLength": 64,
21
21
"type": "string"
22
22
},
23
23
"shots": {
24
-
"description": "The whole hole as the only input the game takes. Comma-separated `<dtick>.<yaw>.<pitch>.<power>` entries: dtick is 120 Hz ticks since the previous shot, yaw is milliradians (0–6283), pitch whole degrees, power 1–100. Example: `360.1571.24.80,540.1600.2.30`.",
24
+
"description": "The whole hole as the only input the game takes. Comma-separated `<dtick>.<angle>.<mod>.<power>` entries: dtick is 120 Hz ticks since the previous entry, angle is milliradians counter-clockwise from +x (0–6283), mod is the ball type applied to that swing (0 none, 1 sticky, 2 super, 3 nitro, 4 air brakes), power 1–100. An entry with power 0 is an event, not a swing: mod 4 is an Air Brakes tap, mod 5 a Mulligan. Power-ups cost energy; a verifier recomputes energy from the clock (starts at 4, +1 every 360 ticks, max 10; costs sticky 4, super 3, nitro 4, brakes 5, mulligan 6) and refuses a log that overspends. Example: `360.785.0.80,540.0.4.0`.",
25
25
"maxLength": 8000,
26
26
"type": "string"
27
27
},
28
28
"strokes": {
29
29
"description": "Advisory stroke count, including out-of-bounds penalties.",
30
30
"minimum": 0,
31
31
"type": "integer"
32
32
},
33
33
"ticks": {
34
34
"description": "Advisory: the tick the ball dropped. Absent if the hole was never finished.",
35
35
"minimum": 1,
36
36
"type": "integer"
37
37
}
38
38
},
39
39
"required": [
40
40
"holeId",
41
41
"shots",
42
42
"strokes"
43
43
],
44
44
"type": "object"
45
45
},
46
46
"main": {
47
47
"description": "One Golf the Sky round, published by the player into their own repo. The record stores every shot rather than a score: the game's ball physics are deterministic, so re-simulating the shots reproduces the round exactly. Owning the record is the identity proof, and replaying it is the score proof — strokes and ticks in this record are advisory and never trusted by a leaderboard.",
48
48
"key": "tid",
49
49
"record": {
50
50
"properties": {
51
51
"courseId": {
52
52
"description": "Permanent identity of the course played. Append-only: ids are never reordered, renamed, or reused.",
53
53
"knownValues": [
54
54
"skyline-links"
55
55
],
56
56
"maxLength": 64,
57
57
"type": "string"
58
58
},
59
59
"createdAt": {
60
60
"format": "datetime",
61
61
"type": "string"
62
62
},
63
63
"field": {
64
64
"description": "How many players were in that live round.",
65
65
"minimum": 1,
66
66
"type": "integer"
67
67
},
68
68
"holes": {
69
69
"items": {
70
70
"ref": "#hole",
71
71
"type": "ref"
72
72
},
73
73
"maxLength": 18,
74
74
"type": "array"
75
75
},
76
76
"mode": {
77
77
"description": "solo: against local bots. live: against other players on a synced clock — the only mode in which placing means anything.",
78
78
"knownValues": [
79
79
"solo",
80
80
"live"
81
81
],
82
82
"type": "string"
83
83
},
84
84
"placing": {
85
85
"description": "Advisory finishing position in a live round, 1 = won.",
86
86
"minimum": 1,
87
87
"type": "integer"
88
88
},
89
89
"simVersion": {
90
90
"description": "Which physics produced these shots. A verifier must replay under the matching version or refuse the round.",
91
91
"minimum": 1,
92
92
"type": "integer"
93
93
}
94
94
},
95
95
"required": [
96
96
"courseId",
97
97
"simVersion",
98
98
"holes",
99
99
"createdAt"
100
100
],
101
101
"type": "object"
102
102
},
103
103
"type": "record"
104
104
}
105
105
},
106
106
"id": "app.golfthesky.round",
107
107
"lexicon": 1
108
108
}