at.turtleme.game.defs
Schema Diff
+222 -0
Compatibility Analysis
Breaking Changes Detected
15 breaking changes, 63 non-breaking changes.
Breaking Changes (15)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#market", src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.low", kind: "prop", name: Some("low") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#market", src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.high", kind: "prop", name: Some("high") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.dir", kind: "prop", name: Some("dir") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.index", kind: "prop", name: Some("index") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.at", kind: "prop", name: Some("at") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.since", kind: "prop", name: Some("since") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.elapsed", kind: "prop", name: Some("elapsed") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.level", kind: "prop", name: Some("level") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.mark", kind: "prop", name: Some("mark") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.streak", kind: "prop", name: Some("streak") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.left", kind: "prop", name: Some("left") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.seed", kind: "prop", name: Some("seed") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#spot", src: "at.turtleme.game.defs#spot", tgt: "at.turtleme.game.defs#spot.since", kind: "prop", name: Some("since") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#reef", src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.shoal", kind: "prop", name: Some("shoal") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#reef", src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.across", kind: "prop", name: Some("across") }
Non-Breaking Changes (63)
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.elapsed" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.left" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.level" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.mark" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.seed" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#cast.streak" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark.at" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark.dir" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark.index" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#mark.since" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#market" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#market.at" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#market.high" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#market.low" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#market.stale" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.across" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.laid" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.over" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.shoal" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#reef.swept" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#rest" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#rest.reef" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#rest.strike" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#spot" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#spot.movesAt" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#spot.since" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.bankedTurtles" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.cast" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.gp" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.items" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.market" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.outcome" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.reef" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.rest" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.shop" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.game.defs#state.spot" }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#cast.mark", tgt: "at.turtleme.game.defs#mark", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.at", kind: "prop", name: Some("at") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.stale", kind: "prop", name: Some("stale") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.laid", kind: "prop", name: Some("laid") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.over", kind: "prop", name: Some("over") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.swept", kind: "prop", name: Some("swept") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#rest", tgt: "at.turtleme.game.defs#rest.reef", kind: "prop", name: Some("reef") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#rest", tgt: "at.turtleme.game.defs#rest.strike", kind: "prop", name: Some("strike") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#spot", tgt: "at.turtleme.game.defs#spot.movesAt", kind: "prop", name: Some("movesAt") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.bankedTurtles", kind: "prop", name: Some("bankedTurtles") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.cast", kind: "prop", name: Some("cast") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.gp", kind: "prop", name: Some("gp") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.items", kind: "prop", name: Some("items") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.market", kind: "prop", name: Some("market") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.outcome", kind: "prop", name: Some("outcome") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.reef", kind: "prop", name: Some("reef") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.rest", kind: "prop", name: Some("rest") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.shop", kind: "prop", name: Some("shop") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.spot", kind: "prop", name: Some("spot") }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.cast", tgt: "at.turtleme.game.defs#cast", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.market", tgt: "at.turtleme.game.defs#market", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.reef", tgt: "at.turtleme.game.defs#reef", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.rest", tgt: "at.turtleme.game.defs#rest", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "at.turtleme.game.defs#state.spot", tgt: "at.turtleme.game.defs#spot", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "at.turtleme.game.defs#cast" }AddedVertex { vertex_id: "at.turtleme.game.defs#cast.elapsed" }AddedVertex { vertex_id: "at.turtleme.game.defs#cast.left" }AddedVertex { vertex_id: "at.turtleme.game.defs#cast.level" }AddedVertex { vertex_id: "at.turtleme.game.defs#cast.mark" }AddedVertex { vertex_id: "at.turtleme.game.defs#cast.seed" }AddedVertex { vertex_id: "at.turtleme.game.defs#cast.streak" }AddedVertex { vertex_id: "at.turtleme.game.defs#mark" }AddedVertex { vertex_id: "at.turtleme.game.defs#mark.at" }AddedVertex { vertex_id: "at.turtleme.game.defs#mark.dir" }AddedVertex { vertex_id: "at.turtleme.game.defs#mark.index" }AddedVertex { vertex_id: "at.turtleme.game.defs#mark.since" }AddedVertex { vertex_id: "at.turtleme.game.defs#market" }AddedVertex { vertex_id: "at.turtleme.game.defs#market.at" }AddedVertex { vertex_id: "at.turtleme.game.defs#market.high" }AddedVertex { vertex_id: "at.turtleme.game.defs#market.low" }AddedVertex { vertex_id: "at.turtleme.game.defs#market.stale" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef.across" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef.laid" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef.over" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef.shoal" }AddedVertex { vertex_id: "at.turtleme.game.defs#reef.swept" }AddedVertex { vertex_id: "at.turtleme.game.defs#rest" }AddedVertex { vertex_id: "at.turtleme.game.defs#rest.reef" }AddedVertex { vertex_id: "at.turtleme.game.defs#rest.strike" }AddedVertex { vertex_id: "at.turtleme.game.defs#spot" }AddedVertex { vertex_id: "at.turtleme.game.defs#spot.movesAt" }AddedVertex { vertex_id: "at.turtleme.game.defs#spot.since" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.bankedTurtles" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.cast" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.gp" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.items" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.market" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.outcome" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.reef" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.rest" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.shop" }AddedVertex { vertex_id: "at.turtleme.game.defs#state.spot" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#market", src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.low", kind: "prop", name: Some("low") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#market", src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.high", kind: "prop", name: Some("high") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#spot", src: "at.turtleme.game.defs#spot", tgt: "at.turtleme.game.defs#spot.since", kind: "prop", name: Some("since") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.elapsed", kind: "prop", name: Some("elapsed") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.level", kind: "prop", name: Some("level") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.mark", kind: "prop", name: Some("mark") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.streak", kind: "prop", name: Some("streak") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.left", kind: "prop", name: Some("left") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#cast", src: "at.turtleme.game.defs#cast", tgt: "at.turtleme.game.defs#cast.seed", kind: "prop", name: Some("seed") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.dir", kind: "prop", name: Some("dir") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.index", kind: "prop", name: Some("index") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.at", kind: "prop", name: Some("at") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#mark", src: "at.turtleme.game.defs#mark", tgt: "at.turtleme.game.defs#mark.since", kind: "prop", name: Some("since") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#reef", src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.shoal", kind: "prop", name: Some("shoal") }
- Breaking: RequiredEdgeAdded { vertex_id: "at.turtleme.game.defs#reef", src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.across", kind: "prop", name: Some("across") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#cast.mark", tgt: "at.turtleme.game.defs#mark", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.at", kind: "prop", name: Some("at") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#market", tgt: "at.turtleme.game.defs#market.stale", kind: "prop", name: Some("stale") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.laid", kind: "prop", name: Some("laid") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.over", kind: "prop", name: Some("over") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#reef", tgt: "at.turtleme.game.defs#reef.swept", kind: "prop", name: Some("swept") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#rest", tgt: "at.turtleme.game.defs#rest.reef", kind: "prop", name: Some("reef") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#rest", tgt: "at.turtleme.game.defs#rest.strike", kind: "prop", name: Some("strike") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#spot", tgt: "at.turtleme.game.defs#spot.movesAt", kind: "prop", name: Some("movesAt") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.bankedTurtles", kind: "prop", name: Some("bankedTurtles") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.cast", kind: "prop", name: Some("cast") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.gp", kind: "prop", name: Some("gp") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.items", kind: "prop", name: Some("items") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.market", kind: "prop", name: Some("market") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.outcome", kind: "prop", name: Some("outcome") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.reef", kind: "prop", name: Some("reef") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.rest", kind: "prop", name: Some("rest") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.shop", kind: "prop", name: Some("shop") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state", tgt: "at.turtleme.game.defs#state.spot", kind: "prop", name: Some("spot") }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state.cast", tgt: "at.turtleme.game.defs#cast", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state.market", tgt: "at.turtleme.game.defs#market", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state.reef", tgt: "at.turtleme.game.defs#reef", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state.rest", tgt: "at.turtleme.game.defs#rest", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "at.turtleme.game.defs#state.spot", tgt: "at.turtleme.game.defs#spot", kind: "ref", name: None }
1
1
{
2
2
"id": "at.turtleme.game.defs",
3
3
"defs": {
4
4
"net": {
5
5
"type": "object",
6
6
"properties": {
7
7
"setAt": {
8
8
"type": "string",
9
9
"format": "datetime"
10
10
},
11
11
"holding": {
12
12
"type": "integer",
13
13
"minimum": 0,
14
14
"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."
15
15
}
16
16
},
17
17
"description": "The drift net, when it is in the water. Absent when it is not."
18
18
},
19
+
"cast": {
20
+
"type": "object",
21
+
"required": [
22
+
"seed",
23
+
"level",
24
+
"streak",
25
+
"left",
26
+
"mark",
27
+
"elapsed"
28
+
],
29
+
"properties": {
30
+
"left": {
31
+
"type": "integer",
32
+
"minimum": 0,
33
+
"description": "Strikes the cast has left, landed or missed."
34
+
},
35
+
"mark": {
36
+
"ref": "at.turtleme.game.defs#mark",
37
+
"type": "ref"
38
+
},
39
+
"seed": {
40
+
"type": "integer",
41
+
"description": "What the run's windows are drawn from."
42
+
},
43
+
"level": {
44
+
"type": "integer",
45
+
"maximum": 99,
46
+
"minimum": 0,
47
+
"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."
48
+
},
49
+
"streak": {
50
+
"type": "integer",
51
+
"minimum": 0,
52
+
"description": "Strikes landed in a row, which is what narrows the window and quickens the marker."
53
+
},
54
+
"elapsed": {
55
+
"type": "integer",
56
+
"minimum": 0,
57
+
"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."
58
+
}
59
+
},
60
+
"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."
61
+
},
62
+
"mark": {
63
+
"type": "object",
64
+
"required": [
65
+
"at",
66
+
"dir",
67
+
"since",
68
+
"index"
69
+
],
70
+
"properties": {
71
+
"at": {
72
+
"type": "number",
73
+
"maximum": 100,
74
+
"minimum": 0,
75
+
"description": "Where across the bar the marker was left, as a percentage of it."
76
+
},
77
+
"dir": {
78
+
"type": "integer",
79
+
"description": "Which way it is travelling: 1 towards the right end, -1 towards the left."
80
+
},
81
+
"index": {
82
+
"type": "integer",
83
+
"minimum": 0,
84
+
"description": "Which placement of the run's windows is on the bar. A turn at either end lays down the next one."
85
+
},
86
+
"since": {
87
+
"type": "integer",
88
+
"minimum": 0,
89
+
"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."
90
+
}
91
+
},
92
+
"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."
93
+
},
94
+
"reef": {
95
+
"type": "object",
96
+
"required": [
97
+
"across",
98
+
"shoal"
99
+
],
100
+
"properties": {
101
+
"laid": {
102
+
"type": "boolean",
103
+
"description": "Whether the shoal has gone down yet. It goes down on the first sweep, clear of it."
104
+
},
105
+
"over": {
106
+
"type": "string",
107
+
"description": "How the board ended, or null while it is still being played.",
108
+
"knownValues": [
109
+
"clear",
110
+
"scattered",
111
+
"left"
112
+
]
113
+
},
114
+
"shoal": {
115
+
"type": "integer",
116
+
"description": "How many sea turtles are under it, which the nets in the corner count down."
117
+
},
118
+
"swept": {
119
+
"type": "integer",
120
+
"minimum": 0,
121
+
"description": "How many patches have been opened."
122
+
},
123
+
"across": {
124
+
"type": "integer",
125
+
"description": "How many patches across the board is. It is square."
126
+
}
127
+
},
128
+
"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."
129
+
},
130
+
"rest": {
131
+
"type": "object",
132
+
"properties": {
133
+
"reef": {
134
+
"type": "string",
135
+
"format": "datetime",
136
+
"description": "After a reef, however it ended."
137
+
},
138
+
"strike": {
139
+
"type": "string",
140
+
"format": "datetime",
141
+
"description": "After a run of strikes, however it ended. Null when the water has never been worked."
142
+
}
143
+
},
144
+
"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."
145
+
},
146
+
"spot": {
147
+
"type": "object",
148
+
"required": [
149
+
"since"
150
+
],
151
+
"properties": {
152
+
"since": {
153
+
"type": "string",
154
+
"format": "datetime",
155
+
"description": "When this spot appeared."
156
+
},
157
+
"movesAt": {
158
+
"type": "string",
159
+
"format": "datetime",
160
+
"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."
161
+
}
162
+
},
163
+
"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."
164
+
},
19
165
"skill": {
20
166
"type": "object",
21
167
"required": [
22
168
"xp"
23
169
],
24
170
"properties": {
25
171
"xp": {
26
172
"type": "integer",
27
173
"minimum": 0
28
174
}
29
175
}
30
176
},
31
177
"state": {
32
178
"type": "object",
33
179
"required": [
34
180
"did",
35
181
"seq",
36
182
"proof"
37
183
],
38
184
"properties": {
185
+
"gp": {
186
+
"type": "integer",
187
+
"minimum": 0,
188
+
"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."
189
+
},
39
190
"did": {
40
191
"type": "string",
41
192
"format": "did"
42
193
},
43
194
"net": {
44
195
"ref": "#net",
45
196
"type": "ref"
46
197
},
47
198
"seq": {
48
199
"type": "integer",
49
200
"minimum": 0,
50
201
"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."
51
202
},
203
+
"cast": {
204
+
"ref": "#cast",
205
+
"type": "ref",
206
+
"description": "The run of strikes being played, when there is one. Null between casts."
207
+
},
208
+
"reef": {
209
+
"ref": "#reef",
210
+
"type": "ref",
211
+
"description": "The reef board being played, when there is one. Null between boards."
212
+
},
213
+
"rest": {
214
+
"ref": "#rest",
215
+
"type": "ref",
216
+
"description": "When the two stretches of water that rest are worth working again."
217
+
},
218
+
"shop": {
219
+
"type": "unknown",
220
+
"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."
221
+
},
222
+
"spot": {
223
+
"ref": "#spot",
224
+
"type": "ref",
225
+
"description": "The fishing spot being stood over, when there is one. Null when there is not."
226
+
},
227
+
"items": {
228
+
"type": "unknown",
229
+
"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."
230
+
},
52
231
"proof": {
53
232
"type": "string",
54
233
"maxLength": 4096,
55
234
"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."
56
235
},
57
236
"stats": {
58
237
"type": "unknown",
59
238
"description": "Lifetime tallies."
60
239
},
240
+
"market": {
241
+
"ref": "#market",
242
+
"type": "ref",
243
+
"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."
244
+
},
61
245
"cooking": {
62
246
"ref": "#skill",
63
247
"type": "ref"
64
248
},
65
249
"fishing": {
66
250
"ref": "#skill",
67
251
"type": "ref"
252
+
},
253
+
"outcome": {
254
+
"type": "unknown",
255
+
"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."
256
+
},
257
+
"bankedTurtles": {
258
+
"type": "integer",
259
+
"minimum": 0,
260
+
"description": "Turtles held at the Grand Exchange rather than in the inventory."
68
261
}
69
262
},
70
263
"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."
264
+
},
265
+
"market": {
266
+
"type": "object",
267
+
"required": [
268
+
"high",
269
+
"low"
270
+
],
271
+
"properties": {
272
+
"at": {
273
+
"type": "string",
274
+
"format": "datetime",
275
+
"description": "When turtle meat fetched it."
276
+
},
277
+
"low": {
278
+
"type": "integer",
279
+
"minimum": 1,
280
+
"description": "What sellers are getting, so what a sell offer fills at, before the 2% tax."
281
+
},
282
+
"high": {
283
+
"type": "integer",
284
+
"minimum": 1,
285
+
"description": "What buyers are paying, so what a buy offer fills at."
286
+
},
287
+
"stale": {
288
+
"type": "boolean",
289
+
"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."
290
+
}
291
+
},
292
+
"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."
71
293
}
72
294
},
73
295
"$type": "com.atproto.lexicon.schema",
74
296
"lexicon": 1
75
297
}