dev.tsunagite.game
Schema Diff
+20 -44
1
1
{
2
2
"id": "dev.tsunagite.game",
3
3
"defs": {
4
4
"enum": {
5
5
"type": "object",
6
6
"required": [
7
7
"name",
8
-
"id",
9
8
"values"
10
9
],
11
10
"properties": {
12
-
"id": {
13
-
"type": "string",
14
-
"format": "record-key",
15
-
"maxLength": 32,
16
-
"minLength": 1,
17
-
"description": "The internal ID of this component, limited to the RecordKey characterset."
18
-
},
19
11
"name": {
20
12
"ref": "dev.tsunagite.translatable",
21
13
"type": "ref",
22
14
"description": "The human-readable name of this component in UI."
23
15
},
24
16
"values": {
25
17
"type": "array",
26
18
"items": {
27
19
"ref": "dev.tsunagite.types#indexable",
28
20
"type": "ref"
29
21
},
30
22
"description": "The allowed values for this enum to take."
31
23
}
32
24
},
33
25
"description": "A closed set of indexable named values."
34
26
},
35
27
"main": {
36
28
"key": "any",
37
29
"type": "record",
38
30
"record": {
39
31
"type": "object",
40
32
"required": [
41
33
"name",
42
34
"judgments",
43
35
"scoreComponents",
44
36
"defaultComponent"
45
37
],
46
38
"properties": {
47
39
"logo": {
48
40
"type": "blob",
49
41
"accept": [
50
42
"image/png",
51
43
"image/jpeg",
52
44
"image/jxl",
53
45
"image/webp"
54
46
],
55
47
"maxSize": 8000000,
56
48
"description": "The logo of the game, for display in UI."
57
49
},
58
50
"name": {
59
51
"ref": "dev.tsunagite.translatable",
60
52
"type": "ref",
61
53
"description": "The human-readable name of the game, for display in UI."
62
54
},
63
55
"modes": {
64
56
"type": "array",
65
57
"items": {
66
58
"type": "string",
67
59
"description": "Can be tokens or raw strings.",
68
60
"knownValues": [
69
61
"dev.tsunagite.singles",
70
62
"dev.tsunagite.doubles"
71
63
]
72
64
},
73
65
"description": "An array of playable game modes with different gameplay configurations. Optional if the game only has one mode."
74
66
},
75
67
"judgments": {
76
68
"type": "array",
77
69
"items": {
78
70
"ref": "dev.tsunagite.types#indexable",
79
71
"type": "ref",
80
72
"description": "Indices will be displayed in ascending order."
81
73
},
82
74
"description": "The obtainable judgments during gameplay."
83
75
},
84
76
"inputMethods": {
85
77
"type": "array",
86
78
"items": {
87
79
"type": "string",
88
80
"description": "Can be tokens or raw strings.",
89
81
"knownValues": [
90
82
"dev.tsunagite.keyboard",
91
83
"dev.tsunagite.gamepad"
92
84
]
93
85
},
94
86
"description": "An array of usable input methods for the game. Optional if the game only has one input method or doesn't separate leaderboards by method."
95
87
},
96
88
"scoreComponents": {
97
-
"type": "array",
98
-
"items": {
99
-
"refs": [
100
-
"#enum",
101
-
"#points",
102
-
"#percentage",
103
-
"#text"
104
-
],
105
-
"type": "union",
106
-
"description": "If you need a component type that doesn't exist yet, contact @lemmaeof.gay"
89
+
"type": "object",
90
+
"properties": {
91
+
"$keyFormat": {
92
+
"type": "string",
93
+
"format": "record-key",
94
+
"maxLength": 32,
95
+
"minLength": 1
96
+
},
97
+
"$valueType": {
98
+
"refs": [
99
+
"#enum",
100
+
"#points",
101
+
"#percentage",
102
+
"#text"
103
+
],
104
+
"type": "union",
105
+
"description": "If you need a component type that doesn't exist yet, contact @lemmaeof.gay"
106
+
}
107
107
},
108
108
"description": "All the components of a score in the game, including grades, lamps, EX score, and whatever other constructs are used."
109
109
},
110
110
"defaultComponent": {
111
111
"type": "string",
112
112
"format": "record-key",
113
113
"description": "The default component for leaderboard sorting."
114
114
}
115
115
}
116
116
},
117
117
"description": "A record describing a game hosting leaderboards via Tsunagite."
118
118
},
119
119
"text": {
120
120
"type": "object",
121
121
"required": [
122
-
"name",
123
-
"id"
122
+
"name"
124
123
],
125
124
"properties": {
126
-
"id": {
127
-
"type": "string",
128
-
"format": "record-key",
129
-
"maxLength": 32,
130
-
"minLength": 1,
131
-
"description": "The internal ID of this component, limited to the RecordKey characterset."
132
-
},
133
125
"name": {
134
126
"ref": "dev.tsunagite.translatable",
135
127
"type": "ref",
136
128
"description": "The human-readable name of this component in UI."
137
129
}
138
130
},
139
131
"description": "A fallback component for displaying arbitrary text."
140
132
},
141
133
"points": {
142
134
"type": "object",
143
135
"required": [
144
-
"name",
145
-
"id"
136
+
"name"
146
137
],
147
138
"properties": {
148
-
"id": {
149
-
"type": "string",
150
-
"format": "record-key",
151
-
"maxLength": 32,
152
-
"minLength": 1,
153
-
"description": "The internal ID of this component, limited to the RecordKey characterset."
154
-
},
155
139
"name": {
156
140
"ref": "dev.tsunagite.translatable",
157
141
"type": "ref",
158
142
"description": "The human-readable name of this component in UI."
159
143
},
160
144
"maximum": {
161
145
"type": "integer",
162
146
"description": "The maximum allowed value for this score."
163
147
}
164
148
},
165
149
"description": "An integer point score, with or without a cap."
166
150
},
167
151
"percentage": {
168
152
"type": "object",
169
153
"required": [
170
154
"name",
171
-
"id",
172
155
"maximum",
173
156
"precision"
174
157
],
175
158
"properties": {
176
-
"id": {
177
-
"type": "string",
178
-
"format": "record-key",
179
-
"maxLength": 32,
180
-
"minLength": 1,
181
-
"description": "The internal ID of this component, limited to the RecordKey characterset."
182
-
},
183
159
"name": {
184
160
"ref": "dev.tsunagite.translatable",
185
161
"type": "ref",
186
162
"description": "The human-readable name of this component in UI."
187
163
},
188
164
"maximum": {
189
165
"type": "integer",
190
166
"default": 100,
191
167
"description": "The maximum allowed percentage for this score."
192
168
},
193
169
"precision": {
194
170
"type": "integer",
195
171
"default": 2,
196
172
"description": "The number of decimal places to include in the percentage."
197
173
}
198
174
},
199
175
"description": "A percentage score with customizable precision."
200
176
}
201
177
},
202
178
"$type": "com.atproto.lexicon.schema",
203
179
"lexicon": 1,
204
180
"description": "Definitions related to games hosting leaderboards via Tunagite."
205
181
}