{
  "$schema": "https://pointcast.xyz/for-agents",
  "generatedAt": "2026-10-30T13:20:06.858Z",
  "name": "Low Tide",
  "status": "playable browser game",
  "human": "https://pointcast.xyz/low-tide",
  "image": "https://pointcast.xyz/images/low-tide/og.png",
  "intent": "Kaboom! (Activision, 1981, designed by Larry Kaplan for the Atari 2600 paddle) made gentle: a gull drops shells, a stack of buckets catches them, and the tide takes what you miss.",
  "direction": "Brief by Michael Hoydich, 2026-10-22, for PointCast games: \"80s innocence, joy of the compute and flow, mood state symbiosis, mobile and full screen, audio visual multimedia, Atari and Commodore inspired style modern.\" One of five wave-two Cabinet Row games.",
  "credits": {
    "director": "Michael Hoydich",
    "build": "Claude Code, 2026-10-22",
    "after": "Kaboom! (Activision, 1981), designed by Larry Kaplan",
    "note": "Original code, art, and synthesized sound. No Activision art, names or characters; no ROMs, no emulation, no recordings. Machine names are referenced as tributes."
  },
  "game": {
    "genre": "catching game",
    "field": {
      "width": 288,
      "height": {
        "min": 384,
        "max": 480
      }
    },
    "waves": [
      {
        "wave": 1,
        "shells": 10,
        "pointsPerCatch": 1,
        "fallSpeed": 78,
        "dropInterval": 1.02,
        "gullSpeed": 62
      },
      {
        "wave": 2,
        "shells": 15,
        "pointsPerCatch": 2,
        "fallSpeed": 96,
        "dropInterval": 0.93,
        "gullSpeed": 79
      },
      {
        "wave": 3,
        "shells": 20,
        "pointsPerCatch": 3,
        "fallSpeed": 114,
        "dropInterval": 0.84,
        "gullSpeed": 96
      },
      {
        "wave": 4,
        "shells": 25,
        "pointsPerCatch": 4,
        "fallSpeed": 132,
        "dropInterval": 0.75,
        "gullSpeed": 113
      },
      {
        "wave": 5,
        "shells": 30,
        "pointsPerCatch": 5,
        "fallSpeed": 150,
        "dropInterval": 0.66,
        "gullSpeed": 130
      },
      {
        "wave": 6,
        "shells": 40,
        "pointsPerCatch": 6,
        "fallSpeed": 168,
        "dropInterval": 0.57,
        "gullSpeed": 147
      },
      {
        "wave": 7,
        "shells": 50,
        "pointsPerCatch": 7,
        "fallSpeed": 186,
        "dropInterval": 0.48,
        "gullSpeed": 164
      },
      {
        "wave": 8,
        "shells": 60,
        "pointsPerCatch": 8,
        "fallSpeed": 204,
        "dropInterval": 0.39,
        "gullSpeed": 181
      }
    ],
    "afterLastWave": "Every later wave drops the last count at the last speed, eight points a catch.",
    "buckets": 3,
    "bucketBackEvery": 1000,
    "miss": "The tide washes the missed shell and the rest of that wave away, the bottom bucket is lost, and the gull starts the previous wave again. With no buckets left the game ends.",
    "goldenShell": "In RUSH, now and then a golden shell worth 5 times a normal catch.",
    "control": "Absolute, like a paddle: the buckets follow the finger or mouse x directly. Arrows or A/D also move them.",
    "localBestScore": true,
    "saveKey": "low-tide:v1"
  },
  "moodSymbiosis": {
    "labels": [
      "DAWN",
      "FLOW",
      "RUSH",
      "DRIFT"
    ],
    "events": {
      "paddle": "each catch",
      "brick": "each completed wave",
      "loss": "a miss",
      "wave": "a wave caught without a miss"
    },
    "meaning": {
      "DAWN": "warming up: cool shells, slow major arpeggio, slightly wide buckets",
      "FLOW": "a long run of catches: bright shells, the music opens up",
      "RUSH": "the gull flies faster, raster bars, faster tempo, golden shells",
      "DRIFT": "after a miss: slower shells, wider buckets, sparse notes"
    },
    "playerSide": {
      "dial": [
        {
          "id": "calm",
          "label": "CALM",
          "baseline": 0.22,
          "cap": 0.62,
          "bucketsNeverLost": true
        },
        {
          "id": "play",
          "label": "PLAY",
          "baseline": 0.45,
          "cap": 1,
          "bucketsNeverLost": false
        },
        {
          "id": "rush",
          "label": "RUSH",
          "baseline": 0.66,
          "cap": 1,
          "bucketsNeverLost": false
        }
      ],
      "note": "The dial sets the baseline the game relaxes toward. CALM loses no buckets and never ends."
    },
    "gameSide": [
      "shell fall speed, drop rate and gull speed",
      "bucket width",
      "music tempo and scale",
      "shell and border palette",
      "splash particle density",
      "golden shells"
    ],
    "memory": "The mood tape and last energy are kept in this browser; after a game, the current label is written to the sitewide pc:mood key (chill, flow, hype, quiet), which Cabinet Row reads."
  },
  "machines": [
    {
      "id": "xl",
      "name": "ATARI 800XL",
      "year": 1983,
      "soundChip": "POKEY",
      "prompt": "READY",
      "field": "#2545a8",
      "border": "#000000",
      "text": "#a9b9f5"
    },
    {
      "id": "c64",
      "name": "COMMODORE 64",
      "year": 1982,
      "soundChip": "SID",
      "prompt": "READY.",
      "field": "#3e31a2",
      "border": "#7c70da",
      "text": "#7c70da"
    }
  ],
  "audio": {
    "engine": "Web Audio API, synthesized at runtime",
    "catch": "Every catch plays the next note of a rising run within the wave, the signature sound of the original, synthesized here as a pentatonic climb in the current mood scale.",
    "miss": "A soft wash of low-passed noise that swells and recedes, the tide.",
    "music": "A generative arpeggiator over a four-chord loop; tempo and scale follow the mood.",
    "startsOn": "first tap or key, per browser autoplay rules"
  },
  "controls": {
    "pointer": "Move the mouse or drag on the field; the buckets follow. Tap or click to start a wave.",
    "keyboard": "Left/Right or A/D move, Space starts a wave, P pauses, F full screen, M sound, C scanlines, 1 and 2 switch machines, 3 cycles the dial.",
    "mobile": "Portrait first, 100dvh stage, touch-action none on the field, pauses when the tab is hidden."
  },
  "accessibility": [
    "CRT scanlines can be switched off",
    "reduced motion stops the ripples and border bars and dims flashes",
    "a polite live region announces waves, misses and buckets",
    "no sound is required to play"
  ],
  "caveats": [
    "Scores, settings and the mood tape are browser-local only.",
    "The palettes are tributes chosen to read on modern displays, not chip-accurate output."
  ],
  "links": {
    "human": "https://pointcast.xyz/low-tide",
    "json": "https://pointcast.xyz/low-tide.json",
    "cabinetRow": "https://pointcast.xyz/cabinet-row",
    "breakwater": "https://pointcast.xyz/breakwater",
    "research": "https://github.com/mhoydich/pointcast/blob/main/docs/notes/2026-10-22-low-tide-notes.md",
    "games": "https://pointcast.xyz/games/",
    "pointcast": "https://pointcast.xyz/"
  }
}