dev.tsunagite.score
Schema Diff
+19 -29
1
1
{
2
2
"id": "dev.tsunagite.score",
3
3
"defs": {
4
4
"enum": {
5
5
"type": "object",
6
6
"required": [
7
-
"id",
8
7
"value"
9
8
],
10
9
"properties": {
11
-
"id": {
12
-
"type": "string",
13
-
"format": "record-key",
14
-
"maxLength": 32,
15
-
"minLength": 1,
16
-
"description": "The internal ID of this component, matching with an enum defined by the game record."
17
-
},
18
10
"value": {
19
11
"type": "string",
20
12
"format": "record-key",
21
13
"description": "The internal ID of the value, matching with an allowed enum value defined by the game record."
22
14
}
23
15
},
24
16
"description": "An indexable named score component."
25
17
},
26
18
"main": {
27
19
"key": "tid",
28
20
"type": "record",
29
21
"record": {
30
22
"type": "object",
31
23
"required": [
32
24
"game",
33
25
"song",
34
26
"chart",
35
27
"judgments",
36
28
"scoreComponents"
37
29
],
38
30
"properties": {
39
31
"game": {
40
32
"type": "string",
41
33
"format": "at-uri",
42
34
"description": "The game this score was earned in. URI must point to a record of type `dev.tsunagite.game`."
43
35
},
44
36
"mode": {
45
37
"type": "string",
46
38
"description": "The game mode this score was earned on. Must be a mode defined by the game record if present."
47
39
},
48
40
"song": {
49
41
"type": "string",
50
42
"format": "at-uri",
51
43
"description": "The song this score was earned on. URI must point to a record of type `dev.tsunagite.song`."
52
44
},
53
45
"chart": {
54
46
"type": "string",
55
47
"format": "at-uri",
56
48
"description": "The chart this score was earned on. URI must point to a record of type `dev.tsunagite.chart`."
57
49
},
58
50
"version": {
59
51
"type": "bytes",
60
-
"maxLength": "16",
61
-
"minLength": "16",
52
+
"maxLength": 16,
53
+
"minLength": 16,
62
54
"description": "The md5 hash of the chart version this score was earned on. Optional if you will not perform leaderboard resets upon any chart changes."
63
55
},
64
56
"judgments": {
65
57
"type": "object",
66
58
"properties": {
67
-
"$allFields": {
59
+
"$keyFormat": {
60
+
"type": "string",
61
+
"format": "record-key",
62
+
"maxLength": 32,
63
+
"minLength": 1,
64
+
"description": "Must match a judgment defined by the game record."
65
+
},
66
+
"$valueType": {
68
67
"type": "object",
69
68
"required": [
70
69
"total"
71
70
],
72
71
"properties": {
73
72
"late": {
74
73
"type": "integer",
75
74
"description": "The number of total judgments of this type earned when hitting late."
76
75
},
77
76
"early": {
78
77
"type": "integer",
79
78
"description": "The number of total judgments of this type earned when hitting early."
80
79
},
81
80
"total": {
82
81
"type": "integer",
83
82
"description": "The number of total judgments of this type earned."
84
83
}
85
84
}
86
85
}
87
86
},
88
87
"description": "A map of judgment names to the integer judgment amounts earned during play."
89
88
},
90
89
"inputMethod": {
91
90
"type": "string",
92
91
"description": "The input method this score was earned using. Must be an input method defined by the game record if present."
93
92
},
94
93
"scoreComponents": {
95
94
"type": "object",
96
95
"properties": {
97
-
"$allFields": {
96
+
"$keyFormat": {
97
+
"type": "string",
98
+
"format": "record-key",
99
+
"maxLength": 32,
100
+
"minLength": 1,
101
+
"description": "Must match an ID defined by the game record, as well as using the same type."
102
+
},
103
+
"$valueType": {
98
104
"refs": [
99
105
"#enum",
100
106
"#points",
101
107
"#percentage",
102
108
"#text"
103
109
],
104
110
"type": "union",
105
111
"description": "If you need a component type that doesn't exist yet, contact @lemmaeof.gay"
106
112
}
107
113
},
108
-
"description": "The components that make up this score, as defined by the game record and keyed to the IDs."
114
+
"description": "The components that make up this score, as defined by the game record."
109
115
}
110
116
}
111
117
},
112
118
"description": "A score in a game hosting leaderboards via Tsunagite."
113
119
},
114
120
"text": {
115
121
"type": "object",
116
122
"required": [
117
123
"id",
118
124
"value"
119
125
],
120
126
"properties": {
121
127
"id": {
122
128
"type": "string",
123
129
"format": "record-key",
124
130
"maxLength": 32,
125
131
"minLength": 1,
126
132
"description": "The internal ID of this component, matching with a text score defined by the game record."
127
133
},
128
134
"value": {
129
135
"type": "string",
130
136
"description": "The text value of this score."
131
137
}
132
138
},
133
139
"description": "A fallback score component."
134
140
},
135
141
"points": {
136
142
"type": "object",
137
143
"required": [
138
-
"id",
139
144
"value"
140
145
],
141
146
"properties": {
142
-
"id": {
143
-
"type": "string",
144
-
"format": "record-key",
145
-
"maxLength": 32,
146
-
"minLength": 1,
147
-
"description": "The internal ID of this component, matching with a point score defined by the game record."
148
-
},
149
147
"value": {
150
148
"type": "integer",
151
149
"description": "The number of points earned, capped by the limit defined by the game record if present."
152
150
}
153
151
},
154
152
"description": "An integer point score component."
155
153
},
156
154
"percentage": {
157
155
"type": "object",
158
156
"required": [
159
-
"id",
160
157
"value"
161
158
],
162
159
"properties": {
163
-
"id": {
164
-
"type": "string",
165
-
"format": "record-key",
166
-
"maxLength": 32,
167
-
"minLength": 1,
168
-
"description": "The internal ID of this component, matching with a percentage score defined by the game record."
169
-
},
170
160
"value": {
171
161
"type": "string",
172
162
"description": "The percentage score earned, capped and formatted by the limits defined by the game record. Stored as a decimal number without a percent sign."
173
163
}
174
164
},
175
165
"description": "A percentage score component."
176
166
}
177
167
},
178
168
"$type": "com.atproto.lexicon.schema",
179
169
"lexicon": 1,
180
170
"description": "Definitions related to scores in games hosting leaderboards via Tsunagite."
181
171
}