at.turtleme.game.defs
Schema Diff
+37 -1
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 13 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#patch", src: "at.turtleme.game.defs#patch", tgt: "at.turtleme.game.defs#patch.index", kind: "prop", name: Some("index") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#patch", src: "at.turtleme.game.defs#patch", tgt: "at.turtleme.game.defs#patch.count", kind: "prop", name: Some("count") }
Non-Breaking Changes (13)
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#patch" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#patch.count" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#patch.index" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.known" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.known:items" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.opened" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.opened:items" }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.known", kind: "prop", name: Some("known") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.opened", kind: "prop", name: Some("opened") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef.known", tgt: "at.turtleme.game.defs#reef.known:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef.known:items", tgt: "at.turtleme.game.defs#patch", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef.opened", tgt: "at.turtleme.game.defs#reef.opened:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef.opened:items", tgt: "at.turtleme.game.defs#patch", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "at.turtleme.game.defs#patch" }AddedVertex { vertex_id: "at.turtleme.game.defs#patch.count" }AddedVertex { vertex_id: "at.turtleme.game.defs#patch.index" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef.known" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef.known:items" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef.opened" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef.opened:items" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#patch", src: "at.turtleme.game.defs#patch", tgt: "at.turtleme.game.defs#patch.index", kind: "prop", name: Some("index") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#patch", src: "at.turtleme.game.defs#patch", tgt: "at.turtleme.game.defs#patch.count", kind: "prop", name: Some("count") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.known", kind: "prop", name: Some("known") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.opened", kind: "prop", name: Some("opened") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef.known", tgt: "at.turtleme.game.defs#reef.known:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef.known:items", tgt: "at.turtleme.game.defs#patch", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef.opened", tgt: "at.turtleme.game.defs#reef.opened:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef.opened:items", tgt: "at.turtleme.game.defs#patch", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"cast": {
5
5
"description": "A run of strikes. The seed every window is drawn from, the level the run opened at and the marker's state are all turtle meat's, so a client can draw the bar to the millisecond without being able to widen it, slow it or move the gold sliver.",
6
6
"properties": {
7
7
"elapsed": {
8
8
"description": "How far into the run this reply reckons it is. A client sets its own clock from it, so the offset it reports for a strike is measured against the run turtle meat is timing.",
9
9
"minimum": 0,
10
10
"type": "integer"
11
11
},
12
12
"left": {
13
13
"description": "Strikes the cast has left, landed or missed.",
14
14
"minimum": 0,
15
15
"type": "integer"
16
16
},
17
17
"level": {
18
18
"description": "The Fishing level the cast opened at, which with the streak gives the width of the window and the pace of the marker. Held for the run, so a level gained mid-cast does not widen the bar under the player.",
19
19
"maximum": 99,
20
20
"minimum": 0,
21
21
"type": "integer"
22
22
},
23
23
"mark": {
24
24
"ref": "at.turtleme.game.defs#mark",
25
25
"type": "ref"
26
26
},
27
27
"seed": {
28
28
"description": "What the run's windows are drawn from.",
29
29
"type": "integer"
30
30
},
31
31
"streak": {
32
32
"description": "Strikes landed in a row, which is what narrows the window and quickens the marker.",
33
33
"minimum": 0,
34
34
"type": "integer"
35
35
}
36
36
},
37
37
"required": [
38
38
"seed",
39
39
"level",
40
40
"streak",
41
41
"left",
42
42
"mark",
43
43
"elapsed"
44
44
],
45
45
"type": "object"
46
46
},
47
47
"mark": {
48
48
"description": "Where the marker was left after the last strike, and which window that laid down. With the run's seed, level and streak it is the whole bar: where the marker is at any later moment of the run follows from it and the clock, which is how a client and turtle meat draw and judge the same bar without describing it to one another.",
49
49
"properties": {
50
50
"at": {
51
51
"description": "Where across the bar the marker was left, as a percentage of it.",
52
52
"maximum": 100,
53
53
"minimum": 0,
54
54
"type": "number"
55
55
},
56
56
"dir": {
57
57
"description": "Which way it is travelling: 1 towards the right end, -1 towards the left.",
58
58
"type": "integer"
59
59
},
60
60
"index": {
61
61
"description": "Which placement of the run's windows is on the bar. A turn at either end lays down the next one.",
62
62
"minimum": 0,
63
63
"type": "integer"
64
64
},
65
65
"since": {
66
66
"description": "The moment of the run, in milliseconds, at which it started moving again. Until then it is held still for the splash to play over, and a strike thrown before it is refused.",
67
67
"minimum": 0,
68
68
"type": "integer"
69
69
}
70
70
},
71
71
"required": [
72
72
"at",
73
73
"dir",
74
74
"since",
75
75
"index"
76
76
],
77
77
"type": "object"
78
78
},
79
79
"market": {
80
80
"description": "The Grand Exchange quote the server settles against, fetched from the Old School RuneScape Wiki's real-time API rather than taken from the caller. The graph on the page is drawn from the same API directly; this is the number a trade actually happens at.",
81
81
"properties": {
82
82
"at": {
83
83
"description": "When turtle meat fetched it.",
84
84
"format": "datetime",
85
85
"type": "string"
86
86
},
87
87
"high": {
88
88
"description": "What buyers are paying, so what a buy offer fills at.",
89
89
"minimum": 1,
90
90
"type": "integer"
91
91
},
92
92
"low": {
93
93
"description": "What sellers are getting, so what a sell offer fills at, before the 2% tax.",
94
94
"minimum": 1,
95
95
"type": "integer"
96
96
},
97
97
"stale": {
98
98
"description": "True when the price service could not be reached and this is the last quote that arrived. Still traded on, up to a point, because a price from twenty minutes ago is a price.",
99
99
"type": "boolean"
100
100
}
101
101
},
102
102
"required": [
103
103
"high",
104
104
"low"
105
105
],
106
106
"type": "object"
107
107
},
108
108
"net": {
109
109
"description": "The drift net, when it is in the water. Absent when it is not.",
110
110
"properties": {
111
111
"holding": {
112
112
"description": "What the net would yield if hauled now. A readout for drawing, not a promise: nothing is banked until it is hauled, and the server works the figure out again at that point.",
113
113
"minimum": 0,
114
114
"type": "integer"
115
115
},
116
116
"setAt": {
117
117
"format": "datetime",
118
118
"type": "string"
119
119
}
120
120
},
121
121
"type": "object"
122
122
},
123
+
"patch": {
124
+
"description": "One patch of a reef and how many of the eight patches around it a turtle is under.",
125
+
"properties": {
126
+
"count": {
127
+
"maximum": 8,
128
+
"minimum": 0,
129
+
"type": "integer"
130
+
},
131
+
"index": {
132
+
"description": "Which patch, counted along each row from the top left.",
133
+
"minimum": 0,
134
+
"type": "integer"
135
+
}
136
+
},
137
+
"required": [
138
+
"index",
139
+
"count"
140
+
],
141
+
"type": "object"
142
+
},
123
143
"reef": {
124
144
"description": "A reef board, as much of it as a player is allowed to know. Where the shoal lies is deliberately absent: a board laid out in the page is a board whose shoal is sitting in memory, and a player who looked would not be guessing at anything.",
125
145
"properties": {
126
146
"across": {
127
147
"description": "How many patches across the board is. It is square.",
128
148
"type": "integer"
129
149
},
150
+
"known": {
151
+
"description": "Covered patches the open numbers prove safe, with what each one counts, alongside `opened`. What sweepReef hands over as `known`, for the whole board at once.",
152
+
"items": {
153
+
"ref": "#patch",
154
+
"type": "ref"
155
+
},
156
+
"type": "array"
157
+
},
130
158
"laid": {
131
159
"description": "Whether the shoal has gone down yet. It goes down on the first sweep, clear of it.",
132
160
"type": "boolean"
133
161
},
162
+
"opened": {
163
+
"description": "Every patch opened so far and what each one counts, on getState while the board is being played, so a page that has lost the board can draw it again. Nothing the sweeps that opened them did not already say.",
164
+
"items": {
165
+
"ref": "#patch",
166
+
"type": "ref"
167
+
},
168
+
"type": "array"
169
+
},
134
170
"over": {
135
171
"description": "How the board ended, or null while it is still being played.",
136
172
"knownValues": [
137
173
"clear",
138
174
"scattered",
139
175
"left"
140
176
],
141
177
"type": "string"
142
178
},
143
179
"shoal": {
144
180
"description": "How many sea turtles are under it, which the nets in the corner count down.",
145
181
"type": "integer"
146
182
},
147
183
"swept": {
148
184
"description": "How many patches have been opened.",
149
185
"minimum": 0,
150
186
"type": "integer"
151
187
}
152
188
},
153
189
"required": [
154
190
"across",
155
191
"shoal"
156
192
],
157
193
"type": "object"
158
194
},
159
195
"rest": {
160
196
"description": "The moments two stretches of water are worth working again. Held as the moment it is up rather than a countdown, so closing the page does not hand the time back.",
161
197
"properties": {
162
198
"reef": {
163
199
"description": "After a reef, however it ended.",
164
200
"format": "datetime",
165
201
"type": "string"
166
202
},
167
203
"strike": {
168
204
"description": "After a run of strikes, however it ended. Null when the water has never been worked.",
169
205
"format": "datetime",
170
206
"type": "string"
171
207
}
172
208
},
173
209
"type": "object"
174
210
},
175
211
"skill": {
176
212
"properties": {
177
213
"xp": {
178
214
"minimum": 0,
179
215
"type": "integer"
180
216
}
181
217
},
182
218
"required": [
183
219
"xp"
184
220
],
185
221
"type": "object"
186
222
},
187
223
"spot": {
188
224
"description": "A fishing spot. Where it is on the water is the page's business; when it leaves is not, because casting at water nobody is standing over has to be refusable.",
189
225
"properties": {
190
226
"movesAt": {
191
227
"description": "When it wanders off, drawn from the moment it appeared and nothing else, so that both sides get the same answer without being told it.",
192
228
"format": "datetime",
193
229
"type": "string"
194
230
},
195
231
"since": {
196
232
"description": "When this spot appeared.",
197
233
"format": "datetime",
198
234
"type": "string"
199
235
}
200
236
},
201
237
"required": [
202
238
"since"
203
239
],
204
240
"type": "object"
205
241
},
206
242
"state": {
207
243
"description": "A player's progress as the server holds it, with a receipt for publishing it. Every method returns this, so that a client always leaves a call holding something it can write to its own repository.",
208
244
"properties": {
209
245
"bankedTurtles": {
210
246
"description": "Turtles held at the Grand Exchange rather than in the inventory.",
211
247
"minimum": 0,
212
248
"type": "integer"
213
249
},
214
250
"cast": {
215
-
"description": "The run of strikes being played, when there is one. Null between casts.",
251
+
"description": "The run of strikes being played, when there is one. Null between casts, and once a run has ended by itself: what that leaves behind is a rest, which `rest` carries.",
216
252
"ref": "#cast",
217
253
"type": "ref"
218
254
},
219
255
"cooking": {
220
256
"ref": "#skill",
221
257
"type": "ref"
222
258
},
223
259
"did": {
224
260
"format": "did",
225
261
"type": "string"
226
262
},
227
263
"fishing": {
228
264
"ref": "#skill",
229
265
"type": "ref"
230
266
},
231
267
"gp": {
232
268
"description": "Coins. Held here rather than by the client because a shop, an exchange and a player's own claim about what they can afford are the same question.",
233
269
"minimum": 0,
234
270
"type": "integer"
235
271
},
236
272
"items": {
237
273
"description": "How many of each kind the player is carrying, keyed by item. Which of the inventory's slots a stack sits in is the client's business and is not recorded.",
238
274
"type": "unknown"
239
275
},
240
276
"market": {
241
277
"description": "What a sea turtle is going for, as turtle meat last fetched it. Present only on the methods that need a price, and null when none recent enough to trade on could be had.",
242
278
"ref": "#market",
243
279
"type": "ref"
244
280
},
245
281
"net": {
246
282
"ref": "#net",
247
283
"type": "ref"
248
284
},
249
285
"outcome": {
250
286
"description": "What the call just did, in facts rather than sentences: what was caught, bought, cooked or refused. The page puts it into words, because phrasing is not a number anyone else can see. Absent on a read. An outcome carrying `stale: true` means another call settled first and nothing was written; the state beside it is what is actually true.",
251
287
"type": "unknown"
252
288
},
253
289
"proof": {
254
290
"description": "A compact JWS over these figures, signed by turtle meat. Writing it into at.turtleme.player.state is what puts a player on the leaderboard; not writing it is how they stay off.",
255
291
"maxLength": 4096,
256
292
"type": "string"
257
293
},
258
294
"reef": {
259
295
"description": "The reef board being played, when there is one. Null between boards.",
260
296
"ref": "#reef",
261
297
"type": "ref"
262
298
},
263
299
"rest": {
264
300
"description": "When the two stretches of water that rest are worth working again.",
265
301
"ref": "#rest",
266
302
"type": "ref"
267
303
},
268
304
"seq": {
269
305
"description": "Increases whenever the state changes, and never otherwise. Publishing a receipt whose sequence has already been counted is a no-op rather than an error.",
270
306
"minimum": 0,
271
307
"type": "integer"
272
308
},
273
309
"shop": {
274
310
"description": "What each of the shop's shelves is holding right now, keyed by item, for a page that has to draw a counter. A shelf nobody has traded at is absent and sits at its usual quantity.",
275
311
"type": "unknown"
276
312
},
277
313
"spot": {
278
314
"description": "The fishing spot being stood over, when there is one. Null when there is not.",
279
315
"ref": "#spot",
280
316
"type": "ref"
281
317
},
282
318
"stats": {
283
319
"description": "Lifetime tallies.",
284
320
"type": "unknown"
285
321
}
286
322
},
287
323
"required": [
288
324
"did",
289
325
"seq",
290
326
"proof"
291
327
],
292
328
"type": "object"
293
329
}
294
330
},
295
331
"id": "at.turtleme.game.defs",
296
332
"lexicon": 1
297
333
}