dev.tsunagite.score

tsunagite.dev

Schema Diff

+19 -29

From

CID
bafyreidmjc6xqzy...
Indexed At
2026-01-09 19:32 UTC
View this version

To

CID
bafyreifl3pzitvt...
Indexed At
2026-01-11 02:50 UTC
View this version
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
}

Compare Other Versions

Lexicon Garden

@