About
Shitty Games is a toybox. Each machine is one page that runs in its own frame, and that frame is the product: the same toy drops into an article on another site with one line of markup, and behaves identically there.
Like this
What follows is not a screenshot or a video. It is the real toy, running here, served from the same place any other site would pull it from.
Why a frame
A toy wants the whole event loop: pointer capture, animation frames, the keyboard, and complete control of its own background. Dropped inline into an article it would inherit the page’s stylesheet, collide with whatever scripts the page already runs, be reachable from all of them, and sit on a background it cannot control. The last one is not a detail here. Both of these machines are perceptual instruments, and a saturated colour up against the edge of the frame measurably breaks them.
A frame on its own hostname gives each toy a clean document, a private script context, and a background it owns. It is also a real security boundary rather than a decorative one: a sandboxed frame that shares an origin with the page around it can climb out of its own sandbox, so the toys are served from a host that is never the same origin as any site embedding them.
The rules a toy lives by
One file, no exceptions. No CDN, no web fonts, no analytics, no network of any kind. Everything is inline, which is what makes a toy portable, keeps its security policy trivial, and means it works the same in an article, on its own page, or opened directly with nothing around it. The host enforces that rather than trusting it: the content policy it serves has no network permissions to give away.
The frames talk to their page about exactly one thing, which is how tall they need to be, and the page clamps that to a range the toy declared in advance. Nothing else crosses the boundary.
The machines
Both of the first two exploit the same thing: your visual system is not one system, it is several, and they can be told different stories. Get the brightness channel and the colour channel to disagree and you can hide a word in plain sight, or paint with a colour that is not on the screen.