Skip to content

Latest commit

 

History

History
108 lines (74 loc) · 8.18 KB

File metadata and controls

108 lines (74 loc) · 8.18 KB

Architecture

A file that phones home cannot live forever on a blockchain. That single sentence is the whole engineering brief. Everything else follows from it.

SPLAT is one HTML document. It carries its own markup, its own styles, its own code, its own art, and its own sound, and it asks the network for nothing. That is not a stylistic choice. It is the physical precondition for putting the game on Bitcoin and having it stay playable after PUDDY is gone, after the domain lapses, after every server anyone might have paid for goes dark. The bytes are the game. The chain holds the bytes.


The single-file model

The entire game is one file, splat.html. Everything a browser needs to run it is inside that one document:

  • Markup - A minimal page and a <canvas> the game draws into.
  • Styles - An inline <style> block. No external stylesheet is ever requested.
  • Logic - An inline <script> block carrying the runner loop, physics, input handling, spawning, collision, and scoring.
  • Art - The sprite sheet is embedded directly as a single base64 data:image/png URI. There is no separate image file to load.
  • Audio - Generated at runtime through the browser's Web Audio API. No audio files ship with the game.

There is no build output to stitch together at load time, no module graph, no bundler manifest, no chunk to lazy-fetch. Open the file and it is already the whole program. Nothing assembles. Nothing resolves. The file is the program.


Zero-network by design

The published artifact makes no network requests. Not fewer than most. None. This is the property that makes the file inscribable, and it is the property that makes it permanent, and the two are the same property. A game that reaches out for one script, one font, one sound file is a game with a dependency that can rot. SPLAT has none, and the audit of the on-chain bytes proves it:

Vector Count
fetch( 0
XMLHttpRequest 0
WebSocket 0
serviceWorker 0
dynamic import( 0
remote src="http…" 0

The only absolute URL anywhere in the file is a single attribution link to https://puddystudios.com - A clickable anchor, not a resource the page loads. The browser fetches it only if a human clicks it. Left alone, the file reaches for nothing.

The proof is one you can run yourself, and it is the strongest kind there is. Pull the ethernet cable. Turn off the wifi. Open splat.html. Play. It works because there was never anything to download.

# Verify the audit yourself against the on-chain bytes:
curl -s https://ordinals.com/content/f77b018fabef5930d116146bd0cf8bf6c4bc4c5571ea1f53f6268d9aa858ac97i0 -o splat.html
grep -c 'fetch(\|XMLHttpRequest\|WebSocket\|serviceWorker' splat.html   # 0
shasum -a 256 splat.html                                                # e10f16251ca87287aab969ecb1baf9427450072117f0c903f57e2111d963d297

State lives in the browser's localStorage, and only there. Your high score is written to your own machine and read back from your own machine. Nothing about a play session ever leaves the device it is played on.


Lineage: from the Chromium runner to SPLAT

SPLAT's core loop descends from the Chromium project's offline "T-Rex" runner, the dinosaur that appears when a browser has no connection. The inheritance is honest and it is fitting: an offline game became the seed for a game that is offline by necessity. That code is (c) 2014 The Chromium Authors and it remains under its BSD-3-Clause license, and the required copyright notice travels with the game everywhere it goes, including permanently inside the header of the inscribed file.

The engine was substantially rewritten and completely re-skinned. What is PUDDY-original is not a coat of paint on someone else's game. It is:

  • the SPLAT character, mascot, and every piece of artwork and animation;
  • the sprite sheet and the whole visual identity;
  • level pacing, difficulty curve, and scoring;
  • the audio design, synthesized at runtime; and
  • the modifications and code that collapse the whole thing into a single, inscribable, zero-network artifact.

That last item is the one nobody sees and the one that made permanence possible. The BSD-3-Clause obligations are preserved in this repository at THIRD-PARTY-NOTICES.md and on-chain in the file's own header. The embedded header reads SPLAT (c) 2023 PUDDY; the repository copyright reads (c) 2023-2026 PUDDY Inc. Both dates are real and both are true. 2023 is the year the game was authored. 2026-03-20 is the day it was written to Bitcoin. Full provenance is at ../PROVENANCE.md.


What the chain actually holds

Most "on-chain games" store a pointer. The token or the inscription holds a URL, and the real program sits on a web server or a distributed file system somewhere off-chain. If that host disappears, the game disappears. The chain was only ever holding an address, and an address to nothing is nothing.

SPLAT stores the program. The playable bytes are the inscription itself, and here is exactly what was written:

Field Value
Inscription ID f77b018fabef5930d116146bd0cf8bf6c4bc4c5571ea1f53f6268d9aa858ac97i0
Inscription number #123224491
Genesis block height 941440
Genesis block hash 000000000000000000011ecb6b60d5e561267f13ddf3d19d79c1305e6576816f
Genesis date/time 2026-03-20 14:46:38 UTC (Friday), epoch 1774017998
Genesis txid f77b018fabef5930d116146bd0cf8bf6c4bc4c5571ea1f53f6268d9aa858ac97
Sat 53222819757777
Satpoint 63967ffb46348f0b142d01905851568e45d8dfc170ecd29b97db0a73417967ca:0:0
Holding address bc1ptumjnxhqlkseef3nl9fdn9g33q8dueeswsslhqvpcel2f0hkm2qq3t5jgc
Fee paid 123240 sats
Output value 9667 sats
Charm vindicated
Content-type text/html; charset=utf-8
Content length 162317 bytes
Content SHA-256 e10f16251ca87287aab969ecb1baf9427450072117f0c903f57e2111d963d297

162317 bytes is the entire game. Not a manifest that points at the game. The game. It was cross-verified on two independent explorers so the claim rests on no single party: ordinals.com resolves the recursive inscription metadata, and mempool.space confirms block 941440 by hash 0000...816f at the same timestamp, carrying 2652 transactions. Two explorers, one set of facts, zero trust required.

One honest caveat remains. The file in this repository, splat.html, is the inscribed artifact: 162317 bytes, SHA-256 e10f16251ca87287aab969ecb1baf9427450072117f0c903f57e2111d963d297. A beautified, human-readable copy of the same game exists elsewhere at 266851 bytes, and it is not what is published on-chain. Do not confuse the two, and never claim the wrapper copy matches the chain. The bytes that match the chain are the ones whose hash matches the chain. There is exactly one such file, and it is this one.


Why this shape matters

As long as Bitcoin exists and one node serves the content, SPLAT is playable. No action is required from PUDDY. There is no domain to renew, no server to keep warm, no S3 bill, no infrastructure that can be forgotten or defunded into a 404. The single-file, zero-network architecture is the entire reason that sentence is true rather than a marketing wish.

Permanence is not a feature bolted onto the game. It is what is left over when you remove every dependency the game could have had. SPLAT has none. The bytes are on Bitcoin. The game is the bytes.

TUNE: Sonnet 5 | effort medium - Next prompt is likely another doc rewrite or QA pass, which is mid-complexity prose work that does not need Opus xhigh.