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