at.turtleme.game.defs

turtleme.at

Schema Diff

+183 -0

From

CID
bafyreifvmkozceo...
Indexed At
2026-09-15 20:03 UTC
View this version

To

CID
bafyreibtcyd23pj...
Indexed At
2026-09-16 13:52 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

10 breaking changes, 56 non-breaking changes.

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

Compare Other Versions

Lexicon Garden

@