ultratears
Unofficial native Windows port of Tears of the Kingdom 1.4.3 using static recompilation. Builds locally from the player's own extracted game dump; no game files included.
Flip a head, a body and some legs, meet your monster, and make its card.
GamesHTML · PythonGitHub @mikeohalloOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A mix-and-match monster flip book on a phone: make a monster, answer four questions and print its card, or play games with the monsters. Built with Claude for my daughter.
Taken from the repository README
Loading the full README.
Read the full README ↗For a young child with the printed monster book, on a phone. It does what the book does and more: flip heads, bodies and legs (27,000 monsters from 30 heads, 30 bodies and 30 legs), answer four questions by tapping pictures, print a card, give each monster a house in a toy-model valley that says its hints out loud, and play games with them.
Try it: monsters.mikeohalloran.au, on a phone. No account, no download.
What's measured: seven test suites play the site the way a child would, in a real browser: the flip book, every game, the town (22 plots, a monster that moves in and waves from its window, and every line the town says), the private store's link-and-restore, and every link between the three sites. The first version was built with Claude in a day, alongside the printed book; the town and the store came later.
Where the AI is: in the art, not the play. The 30 monsters and the valley were painted with Google AI Studio; a linked phone can ask Gemini for a 3D toy version of a monster, made once per combination and shared, so nothing personal is in it. The page is one HTML file with no framework, no accounts and no analytics. A child's monsters stay on the phone unless a grown-up links it to the family's private store, approved by passkey, never a sign-in.
I made my daughter a mix-and-match flip book: 30 monsters, each page cut into three strips, so she can flip heads, bodies and legs independently. That's 27,000 monsters in one coil-bound book. The art came from Google AI Studio, the page layout and print files from Python, and the printing from Officeworks.
The book's last page asks four questions about the monster you just made: What's their name? What's their favourite food? Who is their best friend? What makes them grumpy? Her answers deserved somewhere to live, so the book got a website.
The site does the same thing as the book, on a phone:
Flip. The strips turn over like real pages, by arrow or by swipe. Shuffle picks three at random, or you can type the codes printed on the book's strips (H12, B03, L27).
Meet your monster. The four questions, each with answers to tap, so a child who can't read or type yet can answer them herself:
The phone reads each one out. Typing still works.
Make the card. A picture with the name in rainbow letters, the monster, the answers, the date and the strip codes. Save it, print it, stick it on the fridge.
My monsters. Every saved monster, on that device, with backup and restore.
A gift copy of the book gets a link like ?for=Max, and the site becomes Max's Monster Lab.
Then it got things the book can't do. The site opens on the town: a wide toy-model valley, with a lane, a forest, a lake, a hill and the mountains, that scrolls sideways.
And there are games made from the same 30 monsters, on the games page, with Make a monster as the big first tile and the games beneath it.
For Halloween, three spooky ones:
Torch hunt. The lights are off and monsters are hiding. Drag a finger to shine the torch; hold it on a monster and it pops out with a friendly "boo!" and a giggle. Find them all and the lights come on. Two rooms:
On Hard and Tiny torch three of the faces wait in the tray to be found first, and a hidden monster giggles when the torch gets close, louder the closer it gets. Tiny torch has a much smaller beam, and some monsters hide deeper, so only their horns or eyes show.
Pumpkin face maker. Tap the pumpkin's eyes, nose or mouth to change them, light it up, save the picture. Then print the face as a carving stencil on A4, at a real size (a 12, 15 or 18 cm face), with a 5 cm bar to check the printer didn't shrink it.
Monster masks. Pick any of the 30 monsters' heads and print it on A4 as a mask to wear: kid size (eye holes 5 cm apart) or grown-up size (6.3 cm), with a grey line to cut along, eye holes, two dots for elastic and the same 5 cm check bar.
And four witchy ones, under their own heading with a witch's hat:
The plain link opens the town. The games page is /#games, and each game has its own link (/#make, /#match, /#whack, /#bedtime, /#torch, /#cottage, /#pumpkin, /#masks, /#cauldron, /#potions, /#wand, /#broom). Best scores are kept on the device.
Everything lives on the phone, and a phone can be lost, wiped or replaced. So a family can link a phone to a small private store of their own. It's a separate Cloudflare Worker, in a private repo, that answers only under /store/ on this site's own address.
/#keep on the child's phone. The phone makes its own key (the private half can't be read out of the browser) and shows three monster faces. The grown-up taps the same three on the store's grown-up page, signed in with a passkey.A phone that isn't linked never talks to the store at all.
The counting and letter games started here too, then outgrew the monster site and moved to their own: the Learning Lab, at learn.mikeohalloran.au (learning-lab). Old /#letters, /#count and /#quick links go there.
The three sites sit behind one front door, play.mikeohalloran.au: Monster Lab (this one), Learning Lab, and Seek Lab, the sister seek-and-find book (seek-book). A "More to play" button at the bottom of each site goes back to it.
It's one HTML file and about 190 images. No framework, no build step, no accounts, no analytics. Hosting is Cloudflare Pages on the free plan, which comfortably covers the handful of families who have the book.
That was the main design decision. The obvious version of this site has user accounts, cloud saves and an API. For a thing used by a handful of families, each of those is a cost, a privacy question and something to maintain. So everything works on the phone alone, and the one backend (the private store above) is something a family opts into, with no accounts: a phone is approved by a grown-up's passkey, not signed in. Beyond that:
The monster is assembled in the browser. The site holds 90 transparent strip images (30 heads, bodies and legs, about 3 MB in total), cut from the real print files so they match the book exactly. Three <img> tags stacked in a column are a monster.
The card is drawn in the browser on a canvas: 1200 × 1600 px, with the same fonts and colours as the printed book. Saving it is just saving a PNG.
The library lives in localStorage. Each saved monster is three codes, four answers and a date, a couple of hundred bytes. The card is redrawn from the strips every time, so nothing bulky is stored. The town is just a list of which monster lives on which plot. Backup and restore move the library and the town between devices as a small JSON file.
The town is one painted picture, a toy-model valley made in Google AI Studio with its plots left empty. The page places everything on top, in units of that picture, and draws nearer things in front:
Each close-up is a painting of one area with its window cut out. The monster sits behind it, so it really leans out.
Privacy. Answers, saved monsters and scores stay in this browser unless you export or share them, or a grown-up links the phone to the family's store. The display name is included in personalised links between the sites (a gift link like ?for=Max, and "More to play" once a name is set), so the hosting service receives it when those links are opened. The page also loads its fonts from Google Fonts. The picture answers, the town's hints and the monsters' own answers are read out by the device's own voice, and the page picks one that runs on the device where there is one, because on some computers the only voices are online ones. A phone linked to the family's store sends it the Back up contents, and, for each new head, body and legs combination, a drawing of the book monster for Gemini to make in 3D. A phone that isn't linked never talks to the store. (One more thing moves, once, in a browser set up for the Learning Lab's Letters game: the first time the Learning Lab opens there, this site hands the old saved Letters progress across in the part of the address after the #, which browsers don't send to a server.)
Not meant for search. A noindex tag asks search engines not to list the site. It's for families with the book, who arrive by QR code, gift link or home-screen icon.
| Path | What it is |
|---|---|
index.html | The whole site: markup, styles and script in one file |
tools/make_web_strips.py | Cuts the 90 strip images and 30 face icons from the book's print pages |
tools/build_site.py | Wraps the page for hosting and sets the generic title |
tools/test_site.py | Drives the site in Chromium at phone size: flipping, swiping, codes, saving, deleting, backup, restore, no sideways scroll; any failed step or page error fails the run |
tools/test_match.py | Plays the match game: a wrong pair flips back, a full game ends in a win, the best score sticks, every level fits a phone |
tools/test_links.py | The tab bar (Town, Play, Make, My monsters) fits at 360–430 px; the plain link opens the town and #games the games page with Make a monster first; the #make, #match, #whack, #bedtime and #monsters links and gift links work; and the old Letters and Numbers links go to the Learning Lab |
tools/test_games.py | Plays Whack-a-monster and Monster bedtime with the page clock fast-forwarded: a perfect round, an empty round, a sleepy monster on Hard, a full bedtime from tuck-in to Good morning |
tools/test_town.py | The town at five screen sizes, from a folding phone's inner and outer screens to a laptop: every plot can be tapped; moving in, with the cottage in the monster's colour; the close-ups, in the right area and colour; turning the phone with a close-up open; folding it mid-move; a deleted monster's empty cottage; backup and restore of the town; long and odd names; a full valley; the picture answers, with all 32 pictures loaded; and the town talking, with the voice written down instead of spoken: every line, the welcome waiting for the first touch, each monster's answers a tap at a time, nothing said on a redraw, and silence when muted |
tools/test_keep.py | Keeping monsters safe, against the private store run on the same machine with a pretend Gemini and a pretend passkey: an unlinked phone never calls the store; linking by three faces; saving every change; a new phone bringing the monsters, houses and 3D art back; the 3D monster at the gate and in the window; removing a phone. It needs the private store's repo beside this one, and says so and skips without it |
tools/test_spooky.py |
The monster images aren't in the repo; they're the book. The town's pictures are, because they're the site's own. Nor is site/app.html, the working copy that build_site.py wraps into index.html, so that script won't run from a clean clone; index.html is its built result and is complete. The image tools and the tests are all here.
Serve the page rather than opening the file directly. Browsers treat file:// pages differently from one another (saving to the device and drawing the card can both behave differently or fail), and a local server gives reliable browser behaviour, the same as the real site.
python3 -m http.server 8000
Then open http://localhost:8000. Without the strips/ and faces/ folders you'll get the layout with empty frames, which is enough to see how it works.
Monster art, the town and the answer pictures generated with Google AI Studio. Fonts: Fredoka and Nunito, both Open Font Licence. Site and tools written with Claude.
Made for my daughter.
| The Spooky and Witches games. Plays Torch hunt at every level in both rooms by moving the torch onto each monster (in the witch's cottage, holding it at the edge until the room slides along), checks the sliding with a mouse and a finger, the faces to find first, the giggle hints, that no two hiding places overlap, and the cottage at four screen sizes; brews in the Witch's cauldron: each splash colour, stirring with the mouse, a finger, either way round or the Space key (and that a tap isn't a stir), that the same three in any order make the same monster, that all 50 recipes make different monsters and the six secrets are whole ones, the hat on all 30 heads, emptying the pot or leaving part way through, Meet your monster and saving; and the Pumpkin face maker: changing parts, lighting it, saving the picture, measuring each printed stencil (12, 15 and 18 cm, and the 5 cm bar), and checking all 144 faces fit the page at every size; prints masks at both sizes and checks the eye-hole spacing, and that all 30 heads fit the page with the eye holes and elastic dots on the monster; serves five customers in the Potion shop (right and wrong potions, emptying the pot, a thousand orders at each level checked against its rules), casts all five wand spells with a wobbly mouse (half way and carrying on, the other way round, a scribble that fizzles, the Enter key) and checks no spell finishes before the end of its shape, or when she stops short, and flies the broomstick ride home (steering, a bat, every star in reach, both speeds, the keyboard) |
town/ | The town's pictures: the valley (two sizes), the cottage in six colours, the signpost, 30 close-ups (five areas, six colours) and 32 answer pictures |
docs/ | Screenshots |