[["ERA I — THE FIRST SPARK · July 5, 2026 · v0.1→v0.55",[["v0.1","The game is born in ONE html file — a rubberhose card-battler where board-game pieces brawl on a boulevard."],["v0.4","The core loop lands: 8-cart troupes, energy, leaders, the album, the shop, a procedural chiptune soundtrack from pure code."],["v0.55","THE INKLET arrives — the navy teardrop with the flame tip — and the modes multiply: Bit-Brawl, Ink Panic, the Rink, Bullet Ballet."]]],["ERA II — THE AUTONOMOUS PUSH · July 5–6 · updates 69–89",[["v0.69","Bullet Ballet rebuilt as a vertical shooter — five curtains and a random-character boss."],["v0.70","One file forever — index.html becomes the single source of truth."],["v0.72","The SNES cold open: ODAROO PRESENTS, lightning zaps the D-pad alive. The Feedback Ledger itself is born."],["v0.75","The NO-TAP build — the whole game becomes controller-only."]]],["ERA III — THE CENTENNIAL · July 7 · v2.00→v2.02",[["v0.100","Build 100: Game Boy boot, camera HUD, cup-locks, the cast re-pixelled, XP levels, the showstopper dice."],["v0.101","The ledger-clearing build — every open idea goes green."],["v0.102","THE GRAND TOUR, THE RIVAL BOOK, VS FRIEND challenge codes."]]],["ERA IV — THE POLISH MARATHON · July 7–8 · v2.03→v2.39",[["v0.105","Identity mega-batch: pixel chains, film-reel bar, frames, cartridge-cut carts, vintage stages."],["v0.108","HORROR SHOW becomes INK PANIC."],["v0.117","The frozen cave rink · CHEAT CODES arrive · the deck floats."],["v0.122","THE MEGA DRIVE PATCH — the soundtrack re-voiced through an FM rack, zero files."],["v0.124","CARTS! Every card becomes a cartridge with grip ridges."],["v0.126","Four new spells · ODAROO'S DRUMS take the kit."],["v0.131","THE GOLDEN BOX — every rink floor rolls a roulette prize."],["v0.135","THE FRAME LAW: rarity is frame colour only. No glows. Ever."],["v0.138","Panic perfected — fizzing hearts, freeze-frame chains, the climbing combo chime."]]],["ERA V — THE NEOCITIES AGE · July 9 · v2.40→v2.68 · one marathon day",[["v0.140","The deploy pipeline goes direct — builds ship straight to inkville.neocities.org."],["v0.143","The cheat ritual is canonised: silent taps, then the whole screen inverts."],["v0.145","THIN ICE — the rink becomes one 30-second run."],["v0.146","The music rack goes honest 8-bit."],["v0.151","Bullet Ballet flies through five pixel worlds to a 50/50 headliner roulette."],["v0.155","The art overhaul: true ink, then colour comes home — classic rack, red vs black, gold crit die."],["v0.161","Lobby v4, the Persona dive, the summon beam retires — the floor CRACKS and the ink climbs out."],["v0.165","WAR CRY — three seconds of roar before the march; L1 tags on every unit."],["v0.166","Crowned queens, carbonated bubbles, stacking frames, and ROO takes the drums."],["v0.167","Panel Panic rises for real; BATTLE START slams in huge with a ding-ding clock."],["v0.168","THE OPEN FIELD — the battlefield redrawn by hand: open corners, plain floor, diagonal marches."],["v0.169","This screen. The ledger steps into the game itself."]]],["ERA VI — THE FOLD & THE POLISH · July 9–10 · v2.70→now",[["v0.170","FULL BLEED — the letterbox dies; the game owns every screen. The bulb frame becomes real dots."],["v0.171","Sixteen inks (four in pattern), and the button law: confirm is GREEN, back is RED."],["v0.172","These credits become a full screen — film-reel tabs, white on black, a night beach with live surf."],["v0.173","The colour calculator, the 10-second GLITCH INK, and the window rule for every dialog."],["v0.174","The frame parlour: three new costumes, three new frames, a circles-only frame shop."],["v0.175","The VS dive burns in; the rink points its own way out; +3s a floor."],["v0.176","The numbers board — level base in cream, gear bonus in green."],["v0.177","256 HP per bar, colours locked, the field flush with the deck."],["v0.178","THE COMBINATION goes 4×4 — every row a ×combo, ×4 hits hardest."],["v0.179","Units waddle like paper cutouts; LV rides the username; forfeits go quiet."],["v0.180","The vanishing D-pad bug dies; the FILE gets a fail-safe OPTIONS."],["v0.181","The long rink — down into the pad corner, with a BEST RUN plaque."],["v0.182","Frames stack on your inklet; the Bug Finder pipe smokes in colour."],["v0.183","BIT-BRAWL goes ONLINE — the world, the messengers, the green light."],["v0.184","Cheats announce in two clean lines; the numbers tab gets the stat board."],["v0.185","The world gains its continents; the buddies find their necks."],["v0.186","INKVILLE lands dead centre of every screen, both folds."],["v0.187","Tap the ink and the reel un-reels; the rink hides a glitching +10s clock."],["v0.188","THE 56K HANDSHAKE — ten seconds of dial-up before every match."],["v0.189","One bar, one song, 00:30 — the brawl becomes a blitz."],["v0.190","VICTORY, three lines, straight home; the title stops leaking through the town."],["v0.191","The corner badge — two messengers in front of the world."],["v0.192","OPTIONS rebuilt around this very page — the ledger becomes CREDITS."],["v0.193","Nine glitch moods, the reel talks in k and M, and the rival dances on your defeat."],["v0.194","The brawl slows to watchable — 999 HP a side, real swings, heavyweights that send the little ones skidding."],["v0.195","Currencies learn to spell — INK, CUPS, STARS, REELS in plain words; the lobby lines up its names; the summons dig out of honest pixel dirt."],["v0.196","Big pulls stop shouting — an epic or legendary rink run simply SHINES, card and drop-rate alike."],["v0.197","The SHOWSTOPPER grows up — a boxless stage, seven condensed games in rotation, an RGB clock, and the rival takes his own turn."],["v0.198","TETR-INK comes home — the classic, four shades of Game Boy green, a fair 7-bag and a ghost outline, chained to the marquee until 128 cups."],["v0.199","INK-PUT! goes headline — survival rounds of the combo board, a meaner clock every round, flubs burn time, cleared boards bank ink."],["v0.200","INKAMP — the jukebox reborn as a full-screen Winamp: main deck, equalizer, playlist. It really whips the inklet's tail."],["v0.201","TETR-INK gets a HOLD box and stages 1–5; INK-PUT rebuilt as shiny rows of 8 chasing the 24-BIT AWARD."],["v0.202","You WATCH the rival play his showstopper now; new VICTORY/DEFEAT receipts, one-piece-per-side card rules, and INK RINK lives."],["v0.203","THE MAKING OF INKVILLE — the two lore tabs merged into one clean magical read. And a secret: tap the credits inkling ten times to summon V and jam WEDNESDAY JAMS, a full guitar-hero stage with an improvised 8-bit song, five frets, stars, and a top-5 board."],["v0.204","WEDNESDAY JAMS goes Mega-Man; INK-PUT plays on a theater stage; TETR-INK hard-drops with ▲ and throws Ink-Panik combos on line clears."],["v0.205","Two new games: DANCE DANCE INK (four-lane arrows) and INK TAR HERO, a full guitar-hero cabinet with a song roulette."],["v0.206","Polish wave: a clean BATTLE / DIP lobby, the WARNING callout, whole-number reels, and a simpler solo credits jam."],["v0.207","Fix + polish: clearer touch-game notices, upward DDI combos, HOME confirms before quitting, and Ink Panik stops bouncing on exit."],["v0.208","NIM joins the roster — the classic 1·3·5·7 ink-drop duel. Take drops from one row, you versus the rival, and never get stuck with the last one. Coin-flip who starts, a start banner with flags, your inkling in its frame, and a ledger win/lose."],["v0.209","WASD now works everywhere — a headless run of the whole game turned up that the second-thumb keys drove the A/B buttons but not the direction pad on Nim (and any standalone game), so W/A/S/D fell through dead. Fixed at the source: WASD steers the pad on every screen now."],["v0.210","The rhythm games play the REAL Inkville songs — a shared setlist, 5★ to unlock the next, your framed inkling up top, and card-drop roulette on every clear."],["v0.211","Bullet Ballet overhaul: you pilot the inkling itself, a floating star in a fresh costume each scene, dodging faster monsters through glitchy portals."],["v0.212","New game SUPERSTARS, a carnival strength-tester — three timing swings become one megaton punch up the tower. Games moved up top, Album and Shop to the bottom."],["v0.213","Cleared out the old ROAD SHOW for good — the story (solo) tour and the endless parade are gone, making room for something new down the line. Everything else is untouched."],["v0.214","The rhythm games now play the songs for real. Both Ink Tar Hero and Dance Dance Ink follow the actual rhythm of each track at its true tempo — the full melody, off-beats and all, no more spacing it out to quarter notes — and the ones with a swing to them (Ink Strut, Inkwell Stroll, Penny Arcade Rag) now groove with a proper long-short shuffle. These are real jingles you can learn and hum now."],["v0.215","SUPERSTARS joins the Bit-Brawl showstopper roulette — and it is the real deal, not a mini panel: the full three-swing megaton punch (power, converge, bullseye) plays centered on the screen with no box behind it, then lands as one big hit on the rival. Both you and the rival can roll it."],["v0.216","Ink Panik climbs smooth now — the stack rises frame-by-frame with the next row just peeking in below, no more jumping or bouncing when you sit still or hold B. And the pause box is cleaner: the home button reads HOME (−15 CUPS) and the way out is just CANCEL."],["v0.217","The home menu gets a marquee. The same light-bulb frame from the title screen now runs down the LEFT and RIGHT sides of the menu — gold and red bulbs chasing like a 1950s theater marquee — with no top bar and the reel left untouched up top."],["v0.218","Fixed the home wallpaper (the Superstars screen was secretly painting its dark background over the whole menu) — it is the warm marquee again. And the menu got a clean-up: the Japanese subtitles are gone, every icon is the same size, and the tiles are centered so the games have room to breathe."],["v0.219","Every game tile on the home menu now has its own artwork pattern — chevrons, checkers, dots, arrows, fret lines — and when you hover or select one, it flips dark and the pattern lights up in the game color, just like Bit-Brawl always did."],["v0.220","The rhythm games got tidier. Ink Tar Hero and Dance Dance Ink now share one clean bar across the top — back button, song title, score and stars all in that one line — so the play area is bigger. The curtains lost their glitchy top valance and bottom footlights (just the side drapes now), and the inkling up top-left gets a little room to breathe."],["v0.221","You can always get out now. Ink Tar Hero and Wednesday Jams used to swallow the START and SELECT buttons — so START now pauses (and lets you go Home) and SELECT saves in every game, no more getting stuck with no way back."],["v0.222","New game: LUMEN INK. Two-color blocks fall onto a grid, and a timeline bar sweeps across in time with the music, wiping any 2x2 squares of one color you have built. Chain squares together before the sweep passes to rack up combos. It runs through the whole soundtrack as levels — every jingle is a new skin, the colors and song fade in seamlessly without stopping the field, and it climbs faster the deeper you go. Playable with the D-pad + A/B in portrait or unfolded."],["v0.223","The little Inkville icon shows up in your browser tab now. The favicon was always sitting on the server, but the page was quietly telling the browser to ignore it — now it points at the real thing, so the tab wears its face."],["v0.224","A cleaner start. The menu shows only unlocked games plus the next one coming up; Album and Shop ride together as the two big buttons; the tour points at the right tiles again; and the credits open on THE MAKING OF INKVILLE with a simpler flat BUILDS list."],["v0.225","The showstopper gets serious. When the RIVAL plays theirs, the whole board FREEZES — hands off — and a WAIT screen shows their combo landing (they nail it most of the time now, and it can cost you a whole HP bar). The minigames grew up too: Tetr-Ink is a real 7-piece tetromino game on a full field, Ink Panik is the full rising-panel puzzle (Ⓑ forces a rise, clear 10), and Bullet Ballet is a real shooting window. And every showstopper banner is pinned to the top under the versus bar so it never gets cut off."],["v0.226","A unified look for every game, starting with Tetr-Ink, Ink-Put and Nim. One clean top bar — the game name on the left, its Japanese name on the right — with your framed inkling featured top-left (just like Ink Tar Hero) and live stats down the right side. The old cramped bars and the extra little buddy boxes are gone; the reclaimed space goes to the game. More games get the same treatment next."],["v0.227","New names. The ALBUM is now CARTS (カート) and the SHOP is now the MART (マート) — on the menu, in the tour, and on their own screens. The store and wardrobe get their full redesign next."],["v0.228","STYLE arrives. Tap your inkling on the home menu and the wardrobe opens as a whole new Persona-5-flavoured screen — your inkling in focus on the left, bold angled GEAR / COSTUMES / FRAMES tabs, and a big animated grid. Tap any item and a dossier pops open with a full preview of it worn on your inkling, its exact stats, and a BUY button that drops it straight into your wardrobe. This is now the one place for all gear, costumes and frames."],["v0.229","The MART is rebuilt, clean and simple. A plain black bar up top, no more currency clutter. Three booster packs now — the Newsreel (ink), the Feature Film (reels), and the new PREMIERE GALA pack (8 stars, with the best legendary odds in the game). Below them, one tidy singles rack: four epics on rotation plus a legendary. Wearables, costumes and frames have all moved to STYLE."],["v0.230","The top bar in the games loses its back button — Tetr-Ink, Ink-Put, Nim, Ink Tar Hero, Dance Dance Ink and Lumen Ink now just name the game. Pause any time (START) to step out. The same clean bar rolls onto the remaining games next."],["v0.231","Every game now wears the same clean bar. Ink Panik, Bullet Ballet, Ink Rink and Superstars join the rest — your framed inkling up top-left, the game name in English and Japanese, and its live stats down the right. No back button anywhere (pause to step out). Only Bit-Brawl keeps its own versus screen. One consistent look across the whole cartridge."],["v0.232","The rival gets serious in Bit-Brawl. When the enemy plays a showstopper you now watch them play the SAME real minigame you do — a rival AI actually plays Tetr-Ink, Ink Panik, Bullet Ballet, DDI, Superstars and the rest, hands off, right on the screen. The throwaway animations are gone. They fire showstoppers about twice as often now, so they hit hard. And the Superstars showstopper no longer freezes after the third swing — it lands and play resumes."],["v0.233","THE BIT-BRAWL SHOWSTOPPER OVERHAUL. The rival plays with their OWN inklet, their games run full length, and the FLUBS IT / NAILS IT cards are gone — instead the damage counts up in a full cinematic and lands POW on your inklet. Damage is honest now: 100% play = 100% damage, for both sides. Bullet Ballet became the real thing — dodge the swelling bullet-storm for 10 seconds. Ink Panik sits still and pops matches like the big league. Superstars answers the A button (the old PUNCH button retired). Plus: varied lobby silhouettes and rival names, a compact VS stage, stuck arrows fixed, no more screen-shake on the WARNING, and flash-gig banners wait politely until you are home."],["v0.234","THE LIVING PROFILE. The style screen is a real shelf now — a big 4-wide rack of item icons (6-wide unfolded) that zoom into their dossier when tapped, with a VIP ★ BUY EVERYTHING button (own it all and it flips to WEAR EVERYTHING, with the full invert ritual). The COLOR tab became 32 small color circles — and circle #31 is a quiet rainbow that starts acting out if you stare for ten seconds… press it. The starter frame is a clean white ring now, the glitch ink repaints in loud rainbow hues, and every featured inkling everywhere bounces, breathes and changes its face — never static — popping bigger and glitchier the higher your combo climbs."],["v0.235","BULLET BALLET, PILOTED BY YOU. The pilot is YOUR inklet now — exact colour, exact gear, no random costume. The beam grew up: kills and swallowed pinks fill a little charge bar over your top-left inkling (about three times faster than before), the X button only appears once it is FULL, and firing it unleashes a huge five-second rainbow column that melts monsters, vaporises bullets and carves into the boss while the whole stage rumbles. Hearts and stat icons are proper big pixels now (no font glyphs or emoji), counters read 1-5 and 0-8 instead of slashes, the home greeting no longer clips on the narrow Fold, and the inklet sits smaller inside every frame so tall hats never get cut off. The profile also lost its price tags on the shelf (the dossier tells you when you tap), the color numbers are gone except a lone 31, real scrollbars appeared, and the tabletop troupe now jogs across the sunny field behind it all."],["v0.236","THE FULL DOSSIER. The profile STATS tab is a real record now — THE VAULT (ink, reels, stars, cups all spelled out), the inklet sheet, the BIT-BRAWL RECORD (matches, wins, losses, win rate, biggest show) and an ARCADE LOG that counts every run of every game. Stat icons became readable ATK / HP / SPD / NRG labels. WEAR EVERYTHING now stacks every costume AND every frame at once, and BUY EVERYTHING includes color 31. The pause menu now outranks every screen (START always works, gold standard), Tetr-INK got stacked stat boxes with HIGH SCORE and a BEST STAGE that sticks forever, the glitch ink is one whole-body colour riding a non-stop RGB cycle, and the beta gift stopped interrupting — the BUG FINDER frame just shines on the shelf until you tap it."],["v0.237","THE NEW LADDER + LUMEN INK GROWS UP. The menu reordered with fresh cup gates: Ink Rink is FREE now, then Superstars 50, Ink-Put 100, Tetr-Ink 150, Ink Panik 200, Dance Dance Ink 250, Ink Tar Hero 300, Nim 350, Bullet Ballet 400 — and LUMEN INK at 500 as the finale. And it earns that spot: the timeline now banks every square it passes and erupts the WHOLE group at once (no more two-block nibbles), a rare PLUS block chain-clears everything connected in its colour, you always see the NEXT block coming, and each level paints a new living cosmos behind the field. Nim became a proper casino parlour — felt table, wood rail, wins and losses under your inkling, and the take-highlight now follows ◀ naturally. The carts GALLERY is a top-to-bottom scroller: your cards first, the undiscovered ride behind as ?. And the profile backdrop is a full parade — a dozen big tabletop pieces marching under confetti."],["v0.238","LUMEN INK GOES JEWELLED. The blocks are perfect squares now (the field sizes itself from real pixels) and they are GEMS — six cuts (gem, diamond, hex, orb, pill, shard), with two different cuts on the field every wave, rotating as the levels climb. The + block appears about three times as often and its + fills the whole gem. Holding ▼ no longer sticks — one press, one step, like the classic. And behind the black box a real SPECTRUM VISUALIZER dances to the actual song — Lumines meets DDR, the way it was always meant to feel."],["v0.239","A tidy sweep. Every game's featured inkling now rises in with a clean little entrance instead of flashing into the corner as the game starts. The player's guide (blueprint) finally caught up with the new unlock ladder — Ink Rink free, Superstars 50 up through Lumen Ink 500. And the old \"gold 99 ghost numbers\" bug was hunted and confirmed gone (the new unified game bars had already cleared it)."],["v0.240","PAPER & FRAMES. The inklet goes Paper Mario — a crisp paper-white sticker edge now wraps the whole sprite (front AND back view, gear and all) outside its bold ink contour, so it reads like a living paper cut-out everywhere it appears. And the cards got their long-requested rework: the old \"missing pixel\" corner notch is retired on every card — album, battle and the big press-and-hold dossier — replaced by a clean full frame that gets THICKER with rarity: ink for commons, bronze for rares, silver for epics and a fat gold plate for legendaries, each with a thin ink keyline."],["v0.241","BIT-BRAWL, REWORKED. The lobby is a real marquee now — YOUR inklet and the actual rival you are about to fight, both revealed and 20% bigger, name and all; BATTLE connects straight into that match. The Bullet Ballet showstopper mini is gone for good, replaced by INK TAR HERO — fret gems in the real fret colours riding the live soundtrack, just like the DDI mini. The rival plays at HUMAN speed now (Tetr-Ink, Ink Panik, Ink Rink and Ink-Put all take their time, one move a beat), and while they play a big red PLEASE WAIT card sits dead centre so you know the stage is theirs."],["v0.242","THE BIG SWEEP. INK RINK reborn: every stat lives in the black bar (floor, score, best, time), the left side is just your framed inklet, the rink fills the screen — and every exit spins a ROULETTE whose odds climb floor after floor, green +chips showing each gain. The mystery CONNECTING roulette is back in the Bit-Brawl lobby (bigger fighters stay). The Ink Tar Hero showstopper is now TRUE to the real game: five coloured frets at the bottom, notes falling onto them, touch-screen only. The GB cartridge notch returns on every card, cut pixel-perfect to each rarity frame. The gallery scrolls top-to-bottom in order of appearance, yours first. The profile screen scrolls well past the D-pad. And the Bug Finder frame stopped photobombing — no more random pop-out glass on the home screen."],["v0.243","PROFILE, POLISHED. The profile finally scrolls for real on both folds — the screen itself was quietly growing past the window instead of scrolling inside it, now fixed at the root, with the ◀ BACK bar staying pinned while you scroll. The stat sheet cleaned up: ATK / HP / SPD / NRG stand alone (no spelled-out double labels), every + lines up in one tidy column, and PEAK CUPS got its own row instead of squeezing next to CUPS. The tabs, stat lines and panels all share one matching paper background with no more shifting between them. And the item dossier now floats fixed above the D-pad — never sunk behind it — with the purchase toast landing on top of everything."],["v0.244","THE RINK GOES WIDESCREEN + A LIVELIER TOWN. Ink Rink lost its whole top banner — the ice takes the full window and the only readout is TIME, alone in the top-right corner (red and glowing under 10s). Fall through the ice and you restart at FLOOR 1 with the roulette odds reset; your SCORE and BEST floor now read out on the clear roulette and the shatter screen instead. The rink inkling is alive like the rhythm games — it breathes, changes faces, and pops bigger and happier the closer you glide to the exit. The Bit-Brawl crowd got variety: rivals now mix costumes with gear (nearly half dress up, some arrive in full kit), wear different faces, and draw from a bigger pool of names. Taking a showstopper hit reads exactly like dealing one — same POW star, same splashes across your line, and the damage counts up as a plain number, no minus sign. The rival-is-playing card is straight text now and wraps neatly on both folds. And the Ink Tar Hero showstopper matches the real game: notes are fret-coloured LINES sliding down five marked columns onto the frets — no more falling balls."],["v0.245","SUPERSTARS UNDER THE STARS + INK-PUT GOES TO THE WHEEL. Superstars lost its whole top bar: the inkling hugs the top-left with the SUPERSTARS logo right under it, STAGE 1-5 reads alone in the top-right, and BEST is gone from the field. The strength tower stays hidden through all five acts — then rises centre-stage for the finale and the score climbs it in chunky pixel steps, singing as it goes. The bell is proper pixel art now (no emoji anywhere on the screen), the puck is a pixel slab, and the whole cast streaks across the cosmos as shooting stars behind you. Ink-Put got the same open stage: banner gone, inkling in the corner, just STAGE 1-1 in the top-right — banked ink and best rounds wait for the end screens. And every five stages the WORLD ROULETTE spins a free card, with friendlier base odds than the rink (Ink-Put unlocks later, so the house is kinder) and every world sweetening the legendaries."],["v0.246","TETR-INK & INK PANIK GO FULLSCREEN. Both puzzle towers lost their banners and stat walls: just your framed inkling top-left and STAGE 1-1 top-right. Tetr-Ink keeps NEXT and HOLD tucked under the inkling — nothing else — and the inkling now pops and glitches with every line combo. Levels come five to a stage: each stage starts a breath slower than the last one ended (stage 1 runs speeds 1-5, stage 2 runs 2-6…), every level-up GLITCHES the screen, shouts NEXT LEVEL!, and repaints the well in a fresh Game Boy palette (amber, glacier, strawberry, grape…). Clear a stage's fifth level and the shared STAGE ROULETTE spins a free card — Tetr-Ink's odds beat Ink-Put's, and Ink Panik's beat them BOTH, the richest wheel on the ladder. Panik's CLEAR LINE enters at the very bottom on the first rise now and rides up with the stack, so the finish is in sight from second one. Time, score and bests all moved to the end screens where they belong."],["v0.247","TWO STAGES, TWO SHOWS. Ink Tar Hero and Dance Dance Ink stopped sharing a landing page. The Hero opens on a smoky night-club poster — roaming spotlights, notes drifting up past the moon — while DDI opens on a proper disco: mirror ball, flashing checkerboard floor, arrows rising through the lights. Both offer two doors: START SHOW! plays the whole six-track setlist in one continuous run — every clear unlocks that track for good, the notes fall a little faster with each song, and a card roulette spins between every number (rarer pulls the deeper you get). SETLIST is the jukebox side: replay any track you have opened, on demand, no padlocks in sight. Fail a show and the curtain falls where you stand — the tracks you cleared stay yours."],["v0.248","NIM RIDES THE ELEVATOR + BULLET BALLET CLEANS UP. Nim got a whole new house: the duel now plays inside a climbing ELEVATOR SHAFT — girders streaming past, windows sweeping by with the tabletop cast peeking in as you ride up. Your opponent is THE NIM-MASTER, one particular inkling in cool shades with a permanent grin. Every match opens with a spinning COIN FLIP that calls who goes first. The banner and win/loss counters are gone, the rules read as two clean lines, and picking drops finally reads left-to-right: the first drop lights first, ▶ strikes out the next one, ◀ lets one go, A takes them. Bullet Ballet got the fullscreen treatment too: no top bar, the beam bar tucked under your framed inkling (clear of tall hats), STAGE 1-5 top-right with BIG pixel hearts right beneath it, and nothing else — gates, kills and bombs wait for the end screens. Scenes are gone as a word: crossing a golden gate pops 1/8, 2/8… on the spot with the inkling riding along, and 8/8 shouts NEXT LEVEL!"],["v0.249","LUMEN INK, WIDESCREEN & TRUE TO LUMINES. The top bar is gone: just your inkling with a TETR-INK-style NEXT box under it (no HOLD in this game), and the field grew to a wider 12×12 that finally fills the window — plus the mini-field bug is dead: the game used to measure itself mid-screen-wipe and lock in a tiny board; it now waits for a real measurement and self-heals every second. The + is proper pixel art on the block and in the preview. The Lumines chain rule works the way the arcade meant it: when a + goes off inside a square, its ENTIRE connected colour group lights up together during the sweep and erupts in one simultaneous flash — and a genuine bug fell out of testing this (the chain could lose its group if the square popped first; fixed at the root). And the drop finally feels right: tap ▼ to step one row, hold ▼ to dive, let go and the old pace returns — on D-pad and keyboard both."],["v0.250","THE FOLD-CHECK PATCH — a real browser pass over every v3.43–v3.49 screen, on both fold sizes. First, the big one: updates were not landing on phones at all — the page still asked for the v3.42 files by name, so browsers kept serving their old copies; the reference is stamped fresh every deploy now. Then the finds: wearing gear from the profile dossier no longer pops the ancient WARDROBE modal over everything (an old refresh path fired behind the scenes); the item name in the dossier reads above the preview instead of hiding behind big gear; profile stat rows keep a gap on the narrow fold (no more CARTS OWNED14/37) and long arcade-log lines wrap inside the panel. Lumen Ink measured its field against the wrong box and could overflow off-screen — sized from the true content area now. The Ink Rink board starts below the TIME box instead of under it, and its corner inkling sits properly in its frame again, growing and smiling as you near the exit. Nim lost its doubled-up corner inkling (the duel card IS you). Bullet Ballet's beam bar dropped well below the frame, clear of any costume. The Superstars logo reads over hanging gear, the DDI mirror ball hangs behind the title, and both splash subtitles fit the narrow fold in one line. And the sneakiest one: the GLITCH ink's jitter animated the sprite's margins, quietly knocking every glitch-coloured inkling off-centre in every frame and box across the whole game — it wobbles by pure translation now, dead centre everywhere."],["v0.251","START & SELECT, FINALLY TRUSTWORTHY. The big one: those buttons open their menu the instant your finger lands — so the same tap's RELEASE used to click the freshly-opened dialog and close it on the spot. That's why the pause menu \"disappeared right away\" and why press-hold-drag-off was the only way in. Any tap in a dialog's first split-second is ignored now, so one clean press always works — every game, every screen. Related finds, all fixed: pressing A to confirm the SAVE screen used to vanish into a running showstopper mini (an open dialog always gets the button first now); pressing A right as a showstopper landed could relaunch a second one mid-cinematic and freeze the brawl (blocked); and backing out of a spinning roulette (rink exits, world wheels, card drops) stranded the game with no way to continue — those wheels are locked while they spin, and their own buttons are the only doors. The START menu on the HOME screen dropped its pointless HOME entry — just OPTIONS and CANCEL there. And Tetr-Ink's landing shadow is a see-through dashed outline again (the new palette engine had been painting it as a solid dark slab)."],["v0.252","THE RIVAL GETS A CLEAR STAGE. Every Bit-Brawl banner and popup now slides in RIGHT UNDER the timer strip instead of over the top bar or the action: BATTLE START, the RIVAL SHOWSTOPPER! announcement, and the RIVAL IS PLAYING card — which shrank from a big dead-centre plate into a slim ribbon pinned under the clock, so the rival's whole minigame is visible while they play. The minigame itself ducks a little lower during their turn so the ribbon never sits on the notes, the well, or the board. Verified live with a forced rival run: timer on top, ribbon beneath it, the full five-fret highway playing clean below."],["v0.253","RINK HOUSEKEEPING + THE PHANTOM GAP. Ink Rink speaks one currency now: SCORE is gone — the roulette reads INK THIS RUN and BEST FLOOR, because ink is ink and floors are floors. The \"the deeper you skate, the luckier the wheel\" tagline left too; the green +chips on the odds rows already tell that story every floor. And the Bit-Brawl mystery gap is dead: the screen's slide-up entrance could freeze on its very first frame, leaving the whole battle shifted 14 pixels down with a sliver of daylight at the top — a failsafe now snaps any stuck entrance to its finished position. The rival's minigame window also stopped being scrollable during their turn (it never should have been), and it drops its big title while they play — the ribbon under the timer already says whose stage it is."],["v0.254","SUPERSTARS: NEW ACTS AT THE CARNIVAL. The stage counter finally reads like a world — 1-1, 1-2… up to 1-5 — and the redundant name cards are gone: no English/Japanese splash on entry (you know where you are) and the corner logo is English only, sitting properly below the inkling and its frame. Three brand-new acts join the bag: SQUARE DANCE / TIGHT FIT — a big square dives onto a dashed frame, press A at the exact moment they match for 100%; POCKET WATCH / HYPNO SWING — a little golden pocket watch swings left and right across a glowing ring dead centre, and EVERY press inside the ring is another combo before the clock runs out. And the finale is now always THE METRONOME: a swinging watch where every hit makes the swing faster AND speeds the actual song up with it — easy at first, gradually wild, your combo count is your score. Miss and the tempo eases back a touch. Five acts, one megaton finish, same pixel tower at the end."],["v0.255","INK-TAR HERO, MIRRORED. The guitar game is spelled INK-TAR HERO everywhere now — menu tile, splash, showstopper, arcade log, the works. And its setlist runs in REVERSE: the show opens on Penny Arcade Rag and works its way back to Hero of Inkville, the exact mirror of Dance Dance Ink's climb — two rhythm games, one soundtrack, opposite journeys. The SETLIST wall lists them in that same reversed order, stars and unlocks riding along."],["v0.256","LUMEN INK, UNBROKEN. Found it: when the field grew to 12×12, the layer that draws the SETTLED gems was still a hardcoded 10×13 grid — so every landed block rendered in the wrong cell, drifting further from the falling block until the whole board read as nonsense. That layer is gone: settled gems are now placed by the exact same percentage math as the falling block, verified pixel-identical, at any board size, forever. While in there: the + block went back to being a rare treat (~1 in 11 instead of 1 in 4 — at 25% it nuked half the board every few drops and felt like another bug), fast-fall physically cannot stick on anymore (no held ▼, no fast-fall — checked every frame), the empty cells stopped wasting 100+ DOM nodes a frame, and a faint cell grid glows behind the gems so you can read the board at a glance."],["v0.257","A FANFARE FOR EVERY WIN + THE RHYTHM FLOW. Win a Bit-Brawl and the band writes you a brand-new victory fanfare on the spot: the key, tempo, scale colour, pickup, rising call, turn chord and finale are all rolled fresh per victory from bright, cadence-shaped pools — always a happy-go-lucky classic bugle finish, and with fifteen-thousand-plus combinations it practically never plays the same twice. The battle music steps aside so it owns the moment. Ink-Tar Hero and Dance Dance Ink got the flow you asked for: a clear goes STRAIGHT to the card roulette, then one clean results sheet — stars, hits, score, max combo — with exactly two doors: NEXT SONG or BACK (back returns to that game's own menu, never home). And the black letterbox bar is gone from both stages: just the five stars floating top-right, with the highway and the dance reel climbing into the reclaimed space."],["v0.258","THE RINK GETS ITS MARQUEE + LUMEN GOES FLUID. Ink Rink's clock moved where it can never be cut off: it now sits ON the rink's own bottom wall, dead centre — inkling and stage up top, timer below, and since it lives inside the board itself it physically cannot crop on either fold. Arriving at the rink now slams up a THE INK RINK card, SUPERSTARS-style, that holds a beat and then skates clean off the right edge — plus a little INK RINK wordmark under your inkling (easy to pull if it doesn't sing). Lumen Ink got the speed pass: the next block is IN PLAY the instant the last one lands (no more entering from above the ceiling), holding ◀ or ▶ glides the block continuously, the base fall pace is up, and the falling block now GLIDES between cells instead of teleporting — its four gems are reused across frames so the motion is genuinely smooth. The settled gems BREATHE, each on its own beat; every level rolls a fresh random pair of gem cuts; and each song now owns TWO levels with a rising bridge between tracks — no more cold jumps mid-groove."],["v0.259","WEDNESDAY JAMS ASCENDS. The secret credits jam grew into a full spectacle. YOU play stage-left with your own inklet; stage-right stands THE GODDESS — crowned, in shades, her whole body cycling through the rainbow inside a spinning, pulsing aura, headbanging without pause. The marquee finally looks the part: WEDNESDAY JAMS in big letters with its Japanese name beneath and waving checkered flags on both sides. The song is IMPROVISED FRESH every single play — random seed, random tempo (144–166 BPM), random key — fast-paced but honest: clean quarters, eighth-note sprinkles, the rare triplet, built for big combos. And when you HIT one: every 20-combo triggers the RUSH — time itself hit-stops for up to two seconds, the notes hang frozen mid-air, the screen glitches and flickers, both inklings blaze white, and a power chord sustains through the whole freeze — then the clock (audio and visuals together) resumes exactly mid-phrase, zero desync. Deeper combos, longer freezes. Turn her toons to gold."],["v0.260","A HOME MARQUEE, A BRAWL SCHOOL, AND THE BAND PLAYS ON. Three things. First, the home menu now wears the EXACT same light-bulb frame as the title screen — a full four-sided rectangle of gold-and-red bulbs, pulsing in the same size and rhythm, all the way around the games (kept clear of the top bar and D-pad on the fold). Second, the tutorial grew up: the town tour picks up two new beats (how CUPS unlock games and EXP levels your inkling, and how the line-up lights up as you climb), and when it ends the game offers a hands-on BIT-BRAWL lesson. Say yes and THE COACH — who never hits back — walks you through a real match: your ink and cards, playing a fighter, the ★ star, and then every single showstopper one at a time, each with a short how-to-play card and its exact controls before it begins, so you meet all seven before your first real fight. Third: when a victory fanfare finishes, the house band strolls back in — DRUMS AND BASS ONLY — and keeps a low groove going under the receipt right up until you leave the screen."],["v0.261","INK-TAR HERO NOTES STAY PUT. A real bug, found and killed: partway through a song the notes could visibly change size and stop landing on the frets. The cause — each note's length was measured ONCE, the moment it was born, against however tall the highway happened to be right then. So the instant the highway changed height mid-song (a phone's address bar sliding away, an unfold or rotate, or the layout crossing a size breakpoint) every note already on screen kept its old size while new ones came in at the new size — two different note sizes in one song, and the older ones drifting off the fret line. Notes are now measured against the LIVE highway every single frame, so a resize rescales the whole board cleanly and every note still lands exactly on its fret. The game also stops trusting a zero-height reading taken before the screen has finished laying out, which could squash notes flat. Verified across a full 117-note song through a mid-song resize AND a bad measurement: every note lands on its line."],["v0.262","A SHORTER TUTORIAL + THE FRAMES MATCH AT LAST. The tutorial was too talkative, so it got cut down hard: the town tour is FOUR beats instead of eight (one short line each), and the brawl lesson opens with ONE card instead of four. Every showstopper card is now a single line — \"Tap each arrow as it reaches the line.\" — instead of a paragraph. Same lessons, a third fewer taps, and no wall of text anywhere. And a real card-frame bug is dead: gold and silver frames genuinely WERE thinner than a common card's black one at the top-right corner. Two things caused it. Each rarity had its own border weight (3/4/5/6px), which made the fixed corner notch read differently on every card. Worse, the legendary shine sweep and the epic inner glow were being drawn using the very same slot that draws the notch's corner edge — so epic cards had that edge shoved into the corner and legendary cards lost it completely. Rarity is now frame COLOUR only: every card, common to legendary, has the exact same border thickness, the exact same notch, the exact same layout — measured identical across all four. Legendaries still shine; the shine just no longer eats the border."],["v0.263","TETR-INK REPAINTS THE WHOLE ROOM + THE LOBBY BUBBLES COME BACK. Four fixes. ① Tetr-Ink's NEXT and HOLD boxes used to sit on a fixed guess, so a tall crown, a big frame or a full costume spilled straight over them — the column now MEASURES what your inkling actually takes up (overflowing gear art included) and drops itself clear beneath, keeping the same tidy gap whether you are bare or wearing all 36 items and every frame at once. ② Levelling up no longer just recolours the play area: the ENTIRE screen changes together — backdrop, well, NEXT/HOLD, the mini pieces, the stats — and the scheme is GENERATED fresh every level from a random hue, so no two runs ever look the same. Fixing this uncovered a real bug: the well carried a CSS transition on colours that came from variables, and a running transition pins those colours at their fallback — which is why the repaint had been quietly failing to land. ③ The floating BUBBLES are back in Bit-Brawl. While the match is connecting, bubbles drift up the screen; pop one in time and it pays out ink, a reel or a star. They had been sitting at a layer far below the connecting window, so they were invisible and untappable — they now ride above it, and they clean themselves up the moment the search ends. ④ The Ink Rink corner inkling is the same shared drop as Superstars and Tetr-Ink now — same size, same seat, same style, reacting to your runs with the same hype-and-glitch ladder. The square box behind it and the little wordmark under it are gone: just the clean inkling, nothing else."],["v0.264","BUILDS FLIPS, TITLES FOR EVERY GAME, AND NOTHING RESIZES MID-RUN. This list now reads NEWEST FIRST — open BUILDS and today's update is the first thing you see, in big text, one or two lines each, so it scrolls like a feed instead of an essay (and every future build lands on top automatically). Every minigame now announces itself the same way: the wordmark with waving checkerboard flags either side, centred up top, Superstars-style — Ink Panik, Tetr-Ink, Ink-Put, Nim, Lumen, the Rink, Bullet Ballet and both rhythm games all wear it, and it sizes itself to fit between your inkling and the stage tag on either fold. The mid-game resizing is fixed at the source: Ink Panik was re-measuring its whole board on EVERY render — every swap, every rise, every input — so the slightest change resized the field under you; it locks its size for the run now, as do Tetr-Ink and Lumen (whose field was re-fitting itself every 900ms). The Ink Rink clear screen is compact: the run bank and best floor are gone, the wheel and odds are tighter, NEXT FLOOR is just NEXT, and everything fits above the D-pad without scrolling on both folds. And the skater stopped losing its head — the tile used to clip it, so the idle breathing bob and every hat, crown and ear were sliced off; it now sits on the tile and grows freely upward."],["v0.265","THE RIVAL LEARNS TO PLAY LIKE A PERSON + EVERY SHOWSTOPPER HITS FAIR. The biggest change is one you feel rather than read: HP no longer jumps. Take thirty damage and the number COUNTS DOWN, fast but visible, with the bar draining alongside it — both fighters, every hit, from a jab to a full showstopper. The rival stopped behaving like a robot: its moves used to land on a perfect metronome and its Tetr-Ink pieces teleported to a column and slammed down in a single frame. Now every action lands off-beat, it pauses to read the board, occasionally second-guesses itself, and its pieces rotate, slide across one column at a time and walk down row by row — it looks like someone is actually playing, which matters because that is exactly what other players will be watching when this goes online. Showstopper damage was rebalanced from scratch: a flawless Superstars or Tetr-Ink run used to be worth four times a flawless Ink Rink or Ink Panik run, purely because each game invented its own scoring. Every game now reports how well you played on one shared scale, so ANY showstopper played perfectly reaches 1200% and takes two of the rival's three bars, while a fumbled one is a chip — a tenfold gap, identical in every game. Superstars ends on its own now: the tower climbs, the roulette spins by itself and the full stat sheet follows, with no CARD DROP button to press. And nothing can strand you any more — locked screens used to swallow B and START entirely, so a single failed button could trap you; they now always offer a way out, and any dismissal still carries the sequence through instead of leaving it hanging. The profile's arcade log reads x3 instead of \"3 PLAYED\"."],["v0.266","BUBBLES YOU CAN ALWAYS REACH — AND A HANDFUL MORE WHEN YOU WIN. The waiting-screen bubbles arrive at exactly the same rate as before; what changed is that nothing can block them any more. They used to sit just above the lobby window but below the celebration and the message boxes, so a bubble could drift under a text box and simply refuse the tap. They now float above every single layer in the game, so wherever one appears, it can be pressed. And winning a brawl sends up a fresh burst of five or six, drifting at that same easy pace and worth a little more than the usual ones — a last handful of rewards to grab while the victory receipt is still on screen. They tidy themselves away the moment you leave."],["v0.287","LUMEN INK LEARNS TO KEEP TIME. The core idea finally works the way it was always meant to: ONE FULL SWEEP OF THE BAR = ONE BAR OF MUSIC, locked to the audio engine itself rather than guessing — and the line PULSES on every beat as it crosses, with faint beat ticks marked on the field. Every song in the game is tempo-shifted to a single game speed, so the sweep never changes pace between tracks; the challenge climbs through FALL SPEED instead. And it now plays the ENTIRE soundtrack: all 17 songs, one per stage, five levels each — 85 levels from the town themes through the brawl reels to the Colossus suite as the finale. Plus the move the game was missing: press UP and the block SLAMS straight to the floor, next block live the same instant — pure arcade pace. A rotates, B rotates back, DOWN still soft-drops."],["v0.286","THE GREAT DECLUTTER. The BUILDS list went back to its original small, readable type, and every entry now wears its SHIP DATE beside the version number — a real diary of the whole run. The build count moved to the very top of the credits screen, always visible instead of hiding behind the game pad — and the pad itself now steps aside on the credits beach entirely, so the little inkling in her full regalia finally stands in the clear (touch-scroll and BACK cover everything the pad did there). And the collection got a deliberate trim: the wardrobe was CUT IN HALF to 13 pieces of gear and 6 costumes, the frame wall halved to 7 (every EARNED frame stays), and the ink wall trimmed from 32 colors to a tighter 16 — fewer, better choices. Nobody loses a cent: any retired piece you had bought is refunded at full purchase price, straight into your ink, automatically."],["v0.401","A HONEST RED DOT, TWICE-SIZE TABLE TALK, AND A CUE THAT ANSWERS. Four fixes to the things that were quietly getting in the way. THE RED DOT ON GIGS & ACHIEVEMENTS IS AN APP BADGE NOW — bigger, half on the bar and half off its top-left corner, with a shine that sweeps across it and a little heartbeat — and, more to the point, it is HONEST. It lights for exactly three things: a finished gig waiting to be paid, a badge you have earned but not collected, and today's jackpot pull still sitting there. A flash gig merely RUNNING no longer lights it, because nothing in it is collectable yet, and a dot that means go and look is a dot people learn to ignore. THE WORD PURSE IS GONE from the game — you unlock a badge and you collect what it pays, no middleman. CROWN DELUXE TABLE TALK IS TWICE THE SIZE. The old dock was a 13-pixel tab with 13-pixel emoticons crammed into a wrapping row; nobody could hit any of it mid-shot. It is now a big three-dots button, a grid of thumb-sized emoticons behind it, and SPEECH BUBBLES along the bottom of the board that BOTH players see. A bubble lives ten seconds and then takes itself away — nothing is recorded, it is table talk. New ones arrive at the bottom and push the older ones UP, away from the controls. AND THE CUE ANSWERS FIRST TIME. The shooting zone used to be a six-unit sliver past the near rail, which on a phone sat directly on top of the D-pad, so most drags read as move-the-ring instead. The line is your base line now: the felt side moves the ring, your side is the cue — a third of the screen instead of a sliver — and a drag that starts on the felt and heads back towards you hands itself over to the cue on the way. The board also comes down to nine tenths on BOTH folds, and the tenth it gives back is spent putting daylight between the cue and the pad."],["v0.897","While the game loads, the screen is blank: the D-pad, A, B, SELECT and START no longer show through the black before TAP TO LOAD appears. They come up with the boot, as before."],["v0.896","The Odaroo & Co. studio card on the boot screen sits dead centre now, the way Lunatide's does, and its nine tiles are a little bigger. It used to be pulled up toward where the title inklet stands; now it is in the middle of the screen on every phone."],["v0.895","The Discord badge on the title screen sits the same distance from the dotted frame on the folded and unfolded phone and on an ordinary phone, with clear paper between the ring and the frame (it used to touch it on the folded screen). The ring now flips around the Discord logo in 3D, the way the cartridge on the boot screen turns, while the logo itself stays still. SMOOTH MODE switches the flip off."],["v0.894","The screen-size sweep now checks the unfolded Fold 8 at its real size, 708 by 786, read off the phone's own screen report. Both earlier guesses were wrong and are retired. Nothing in the game itself changed."],["v0.893","The screen report (?vp on the address) can be read now. It used to close on any tap, and the first tap on the phone is the one that starts the game, so the numbers vanished before they could be photographed; it also failed to open at all when the page had already finished loading. It has a CLOSE button now, follows the game into fullscreen, and opens whether or not the page has finished loading."],["v0.892","Three things from Odaroo in one sitting. The screen-size sweep before every ship is three sizes now (the Fold 8 folded and unfolded, and one usual portrait phone for everyone else) and they run at the same time, with any size that reports something new re-checked on its own so a busy machine cannot invent a fault: about three minutes instead of fifteen. The ink you earn on the bill IS the score now; there is no separate score figure anywhere, so house records and personal bests are finally comparable between games. And the Discord announcement posts the bill and nothing else: one line saying who and what, then the bill's own rows, with the duplicate Game, Match, Result, Score and Time fields removed."],["v0.891","The game opens with no internet. Odaroo played at an airport with no signal and Inkville would not come up. Two things at start-up still went out to the internet: the pixel lettering came from Google's font servers (a request that hangs on a wifi with nothing behind it), and the start page asked the internet first with no time limit before looking at the copy already saved on the phone. Both pixel faces now ship inside the game, and the start page gives the network three and a half seconds before loading the saved copy. A wifi sign-in page can never be mistaken for the game. Updates still arrive the same way when there is a connection. Proof: node tools/test-offline-boot.mjs."],["v0.890","blueprint admin dashboard rework — deploy history, online feature analysis, real game screenshots"],["v0.889","Forfeit filing — walk-outs and dead tabs now file as online losses, server accepts forfeit flag, bot card shows Victory walkover for the winner"],["v0.888","v0.887 — The main menu stops moving. Three things on that screen had never stopped sliding sideways, and none of them could be switched off: the huge sunburst pattern behind the menu was rotating for ever, the film grain laid over every pixel of the game was jumping 14 pixels left and right four times a second, and the film scratch was leaping most of the width of the screen every seven seconds. All three are still now — the grain and the scratch keep their look, they just no longer travel. This is also why SMOOTH MODE appeared to do nothing: that switch only reaches animations that have asked to be switched off, and these three never had, so the toggle was never touching the biggest movers on the screen. The highlighted tile's small wobble now answers to SMOOTH MODE as well."],["v0.887","v0.887 — The v0.886 fixes reach the live game now: Railway's watch paths for the game were written as 'everything except…' and a push that also touched notes and the bot did not build the game at all — the list is written the other way round now, naming the files that ARE the game. Two small honesty fixes ride along: a solo run is announced as 'finished' rather than 'cleared' (a solo bill never says lose, so a top-out and a clear arrive looking the same), a second report of a duel now leaves a line in the server log, and the self-test fingerprint ignores the cache-buster numbers so GitHub does not re-run a sweep the desktop just finished."],["v0.886","v0.886 — The matches that never showed up: found, and the reason is a counter. Every time the game server was redeployed, its match numbering started again from 1 — but the scoreboard on the disk remembers matches by that number, so a brand-new online duel looked like a repeat of a match from days ago and was quietly folded into it: no row, no announcement, credited to whoever played the old one. Every online match after every deploy, until the numbers climbed past the old ones. The numbers are stamped from the clock now and can never repeat. Three more ways a match went missing are closed with it: the OCTATHON tile skipped the door that forgets the last online match, so a solo bout could be filed as that old duel; a duel where the loser's phone reported first was never announced (and when it was, it showed the loser's figures under a Victory headline); and a report that failed to reach the server was simply lost — it is kept on the phone and sent again now. A player who left the name box empty is called PLAYER and was merging with every other PLAYER on the board; those runs are held back until they pick a name. And the bigger change underneath: the game AND the Discord bot deploy from GitHub now, the deploy script runs from a bare clone with no PC-only folders, and GitHub runs the full fold sweep itself when a session had no browser — with Railway waiting for that check before anything goes live. The bot no longer complains about the deleted passkey channel; that door is simply off."],["v0.885","v0.885 — #hi-scores is a log of wins now, and the double post is closed. The double post was two tickers sharing one state file: the standings board read the bot's cursor, spent half a second talking to Discord, then wrote the cursor back to where it had been, so the announcer read the same match a second time. Caught in the live log twice over. The board is gone entirely — no ranking, no first/second/third, no loss column anywhere in Discord — and the announcer now posts every win as it lands instead of only the record-breaking ones. A loss is never announced at all, refused by one guard rather than five, so nothing negative can reach the channel by any route. Only the server's judgement changed on the game side; no screen was touched."],["v0.884","Write down what the Lumen rebalance found - the notes for the next session, and two new instruments in the workshop table"],["v0.883","Lumen Ink online is winnable again, and a duel is now several records instead of one. Measured against the real room: OMEGA emptied your whole meter in about fifty seconds, before the record had even got going. Three things were wrong. The bot was reading the table written for the two note-per-beat rhythm games and then ignoring the only part of it that sets a pace, so all three opponents crossed the board at the same speed with the same size of eruption and the same multiplier cap - the difference between ALPHA and OMEGA was only how often they fluffed. Lumen has its own table now, with four dials: ALPHA is easy, BETA medium and OMEGA hard, and they differ in how often they land, how fast they cross, how big a blow is and how far their chain may climb. A blow is also worth less of a meter than it was, by the rival's tier, so a match is decided over one or two songs instead of inside the first minute of the first - and above all, an online duel no longer ends when the record does. It rolls on to the next one: two records against ALPHA, three against BETA and against another player, five against OMEGA. Matchmaking seats BETA, so it is medium on both sides. And the bot gets stronger the longer the match runs, so a long duel really does become hard to sustain rather than staying the same fight for ten minutes."],["v0.882","Every match reaches the scoreboard, and Discord finally shows the standings. Measured with a new probe that plays real bot matches instead of poking the reporting code: every online match against ALPHA, BETA and OMEGA was already being filed, but what was IN the row was wrong. OCTATHON was filing Disc-Ink's figures from the previous match. A stage tag like 1-1 was being read as a score of eleven, so Disc-Ink and Panel-Ink were ranked on a string-parsing accident. Disc-Ink's bill was a clock and two payouts, so it scored zero forever and could never hold a record — it prints RINGS SUNK now. A match that ended after you had walked off the screen was never filed at all. And a solo bout against a bot was announced with nobody in it. On top of that the bot now keeps a live STANDINGS BOARD in Discord — top players, their matches, online wins and losses, time played, and the house record in each game — edited in place, so every ordinary match counts for something without the channel turning into a match log."],["v0.881","Fix long player name scaling in HUD bar — a solo run booked no room for the match clock, so a long username printed straight over the timer. The reel now reserves the clock's real width in solo exactly as it always has in a match, and pays nothing for the turn arrow a solo run can never show, so the name steps its face down and fits beside the time instead of running under it."],["v0.880","Inklet redesigned from reference sheet, boot logo shift fixed"],["v0.879","START rename, bigger Discord badge on the permanent invite, RESTORE SAVE moved into OPTIONS, credits go quiet under waves"],["v0.878","Start button renamed, Discord invite button added to top right"],["v0.877","v0.876 — the beta is OPEN: no passkey, no gate. PRESS START plays. A save code is a coat-check ticket again — the server mints one for every new cartridge, the profile prints it, and RESTORE SAVE takes it back. The scoreboard files every ending from all nine games, solo and online, and #hi-scores announces only what is genuinely notable."],["v0.876","THE BETA IS OPEN. There is no passkey and no 256 seats any more - PRESS START takes you straight into the game, with nothing asked. The save system stays and works exactly as it did before invite-only: the parlour issues you an eight-character SAVE CODE by itself the first time you play, every save is backed up behind it, it is printed under your name on the PROFILE (tap to copy), and RESTORE SAVE is back in the pause menu so you can type it in on another phone. The Discord bot and every passkey already handed out keep working untouched. And the scoreboard was un-gated with it - /save, /save/new and /match all used to refuse anybody who was not on the 256-seat guest list, so leaving that in would have left every new player silently missing from the leaderboard. Audited all nine games through their real front doors: 18 of 18 solo and online endings file a complete row - right game, right score, right opponent, right result."],["v0.875","Add Discord invite icon to title screen"],["v0.874","AND THE ONLINE BILLS CARRY THEIR FIGURES NOW. Odaroo's announcement had no score on it, and the reason is a cousin of the mode bug just fixed: an online match is filed about three quarters of a second BEFORE its receipt appears on screen, and on a win a card roulette spins for several seconds in between — so the reporter was reading a screen that had nothing on it yet and filed every online match with no rows and a score of zero. A hi-scores channel that cannot print a score is not much of a hi-scores channel. The shared receipt helper now hands over the same figures it is about to draw, while they still exist, and the screen is still preferred whenever the bill really is up."],["v0.873","ONLINE MATCHES ARE REPORTED AS ONLINE NOW, WITH THE OPPONENT ON THEM. Odaroo's online Panel-Ink victory was announced as a Solo run that had been Cleared, with nobody on the other side of it. The reporter was asking whether a match was live at the moment it wrote the report — and every game tears its match down BEFORE it builds the bill, so the true answer at that exact moment is always no. It was the wrong question rather than a race: running sooner would not have helped. The match id and the rival's name are written down at the handshake now, where they are unambiguous, and read back at the end. The match id matters as much as the name: without it both players file separately and one duel becomes two rows announcing opposite winners. The announcement itself also demanded both an online mode AND a known opponent before it would call something a match, so a duel with a missing name fell through and printed Cleared. A versus match now reads Victory or Defeat, names both players when it can, and stays a match even when it cannot."],["v0.872","THE SCOREBOARD ACTUALLY WORKS NOW — nothing had ever been filed. The player's name was being read from S.player.name, and that field does not exist: S.player is the inklet's APPEARANCE (its colour, glove and expression), while the name is and always has been S.buddy.nm, read through shPlayer(). So the name was always blank, the reporter gave up on its very first check, and both v0.870 and v0.871 shipped a scoreboard that could not put a single row on the board — solo, online, any game. The comment on shPlayer() records this exact mistake being made once before, in the same file, and says in as many words that nothing new should hard-code a name beside it. The test could not see it because the harness was setting S.player.name itself, inventing the field the game does not have and then proving the reporter could read it. It names the inkling the way a player does now. Also: POST /match logs every filed match and every refusal with its reason (never the passkey), and Inkalot checks it can actually post in the channel at boot instead of failing silently later."],["v0.871","THE ONLINE MATCHES NOW REACH THE SCOREBOARD — v0.870 only ever filed SOLO runs. There are two doors out of a finished game and the scoreboard was wired to one: inkEndTop, which every solo run walks through, and inkOutcome, which is the one that covers the matches. So the four online games Odaroo played after v0.870 landed went completely unreported and the ledger was still empty. Two more faults fixed with it: a STAGE CLEAR was being filed as if it were a whole match, so a long ladder run would have posted a phantom result at every stage; and a win walked through BOTH doors seconds apart (the card roulette spins in between), which would have filed every online victory twice. One report per run now, keyed on the run's own start and end stamps. The test was passing against all of this because it only ever drove one of the two doors — it drives both now, plus the stage clear and the double-file, and all three faults were put back to prove it can fail."],["v0.870","THE SCOREBOARD AND #hi-scores. Every run and every match you finish is now filed with the parlour — which game, who against who, who won, how long it took and what you scored — and Inkalot announces the ones worth celebrating in #hi-scores: a new house record, a personal best that genuinely beat your old one, three online wins in a row, a long run won, or somebody's very first match. It is deliberately NOT a match log: an ordinary run says nothing. The judging is done once by the game server, never by the bot and never by your own copy of the game, so nobody can declare themselves a record holder; your passkey proves it is really you and is then thrown away — what appears in Discord is your in-game name and nothing else. Also fixed on the way past: /matches and /leaderboard had been silently ignoring their since and limit settings since the day they landed."],["v0.869","NO NEW PASSKEY CONTAINS O, 0, I OR 1. A passkey is not a token a machine copies — it is eight characters a person reads off a Discord message and types into a phone, and both Odaroo and I failed to type his own key, which has three characters from that confusable set in it. The minting alphabet drops all four; 32 to the eighth is still a thousand billion combinations for 256 seats, and legibility is worth far more here than four characters of alphabet. The VALIDATOR is deliberately untouched and still accepts the full A to Z and 0 to 9, because every passkey issued before this build legitimately contains those characters and narrowing it would lock out every tester already holding one. There is no auto-correct on the input either, for the same reason: mapping a typed letter O to a zero would be exactly wrong for the existing keys that contain a real letter O."],["v0.868","THE SCOREBOARD OPENS. The parlour now keeps every finished match — who played, who won, the figures off the bill and how long it took — and answers two new questions: what has happened since I last looked, and who is on top. An online duel is reported by BOTH players, so the store folds the two reports into one match rather than announcing every duel twice with the winner and loser swapped; the first report is the record and the second may only fill in a name it did not know. Both players are still counted once each, so losers appear in the standings, and a client that retries cannot inflate its own row. A passkey is required to file a result, so a stranger cannot stuff the table — and it is thrown away immediately rather than stored, because a scoreboard that printed passkeys would be a key giveaway. What is published is the in-game name, never the Discord account."],["v0.867","THE LOCKED DOOR NOW TELLS YOU WHERE THE KEY IS. The passkey gate carries a Discord button — the mark, the blurple, and the words Visit the Odaroo and Co. Discord Server to request your passkey, while supplies last — and the whole row is the tap target rather than the little logo, because at 22px a logo alone is well under what a thumb reliably hits and this is the one control a locked-out player actually needs. It opens the permanent invite in a NEW tab: installed to the home screen this game has no address bar and no back button, so a same-tab jump would replace the game with Discord and strand somebody at a door they cannot get back to. The mark is drawn in the page rather than fetched, because an offline-first game must not reach out for an image at the very moment it is telling somebody it cannot let them in."],["v0.866","GIVING A SEAT BACK — POST /passkey/release, the other half of the beta door's repair kit. A tester goes quiet or is handed the wrong seat, and the number goes back into the 256. Destroying the cartridge behind it is an explicit argument and never a consequence: a seat holding a save is refused outright, and the refusal says what is in the way, because there is no undo and nobody reclaiming a number should discover afterwards that they erased somebody's progress. The seat and the save are cleared together, so no orphan file is left for a future holder to inherit."],["v0.865","OPTIONS no longer prints the two developer diagnostic lines at the foot of the card — SCREEN 338x790 TAP FOR DETAIL and RECORD FLICKER 10 SECONDS. Both were instruments built for the Fold 8 flicker hunt and both still exist: inkViewport() and inkFlicker() are untouched and the ?vp and ?flick URL switches still open them, so a screen report can still be taken off the phone when one is needed. They simply no longer sit under the volume sliders where a player reads them as the game being broken. SMOOTH MODE stays exactly where it is: that is a setting, not an instrument."],["v0.864","THE REPAIR DOOR — a new admin route on the parlour, POST /passkey/bind, for the things that go wrong over a 256-seat beta: somebody loses a key, deletes a Discord account, or is handed the wrong seat by whoever is running the door. It re-points an EXISTING passkey at a Discord account and releases whatever duplicate that account was holding. It can never create a passkey — minting stays the one door that counts against the 256 — and it will never release a duplicate that has a save behind it, because that is somebody's progress and there is no undo; such a seat is reported back untouched so a human can look before anything is destroyed. It is behind the same shared secret as the mint, so only the Discord bot's operator can reach it."],["v0.863","Fix online match clock starting during coin toss"],["v0.862","Comment and label tidy-up only - no behaviour change. The online match-clock fix that shipped a moment ago was written down as v0.858 in its own source notes; it is stamped with the build it actually landed in."],["v0.861","The online match clock no longer runs during the ceremony. Online Disc-Ink starts its timer the moment you actually get the cue - not while the coin is still spinning: the table, the coin toss and the 3-2-1 all now happen with the clock sitting at 00:00, exactly as it already does in solo. The same fix covers the online Ice-Ink arrow ceremony and OCTATHON's BATTLE START, both of which were quietly putting a few seconds of curtain-raiser on the bill."],["v0.860","PLEASE ENTER PASSKEY — the gate now says exactly that, and the passkey is lettered in the game's own NES face instead of a typewriter one. It has exactly one home: the line under your username on the PROFILE. The read-only card that used to open when you tapped it is gone — tapping the line copies the passkey and says so, which is the only thing anyone ever wanted from that card. The SAVE YOUR SHOW card stopped telling players their progress cannot follow them to another phone and stopped pointing at a SAVE CODE control that no longer exists; it now says what is true. Nothing anywhere else in the game asks for, offers to save, or mentions a passkey: it is a one-time gate at first boot, remembered on that device for good, and a line on your profile."],["v0.859","Measured the main menu before touching it, and the measurement said not to cut anything: the home screen runs 167 animations at zero layouts a second, and switching off 146 of them changed the cost by nothing at all — Chrome does the same fixed amount of style work per frame whether one thing is moving or a hundred, so removing artwork would have cost the look and bought no smoothness. What it did find is a real rule: a filter on something that never stops moving stops Chrome handing that movement to the graphics chip, so it redraws it by hand every frame. The spinning sunburst behind the menu (by far the biggest moving thing in the game) and the 2x badge both had one, and both are now drawn instead of filtered with identical pixels. And because the difference Odaroo sees between Chrome and Samsung Internet cannot be measured on this machine at all, OPTIONS gains SMOOTH MODE — one tap that turns off the optional motion across the whole game, on the phone, so the question can finally be answered by the device rather than guessed at. The mascot keeps breathing either way."],["v0.858","INVITE ONLY — a passkey is now how you get into Inkville at all. Pressing START on a device that has never played asks for the passkey you were handed on Discord, and there is no way past it: no NEW GAME, no guest run. The parlour is the real check — it holds the guest list of 256 seats, refuses a passkey that was never issued, and will not store a save under one either, so the gate is not something a browser can talk its way around. Once entered, the passkey is remembered on that device and never asked for again; typing it on another phone brings your whole show across, because the passkey IS you. It is printed permanently on your PROFILE under your username, with COPY, and it cannot be changed — your username still can. The game no longer issues itself a code, and RESTORE SAVE has left the pause menu, because there is now exactly one place a passkey is ever typed."],["v0.857","PASSKEY, NOT A CODE — and it stops shouting at you. The eight characters that carry your save are never announced any more: no pop-up on the way in, and the OPTIONS card no longer prints one. Instead your PASSKEY is printed permanently on your PROFILE, directly under your username, and tapping it opens the card that copies it or takes one back. Pressing START on a brand-new phone now asks one question — NEW GAME, or ENTER PASSKEY — so a show can be carried over from another phone without hunting for a button. The passkey is set in ONE typeface everywhere it appears: the readout, the box you type into, that box's faint sample text and the profile line all match, where before the sample was drawn in the chunky pixel font and the characters you typed came out in monospace inside the same box. And your username is never cut off with three dots again — it shrinks to a readable floor and is then gently narrowed so the WHOLE name always prints, at every screen size."],["v0.856","v0.856: On-device flicker recorder (inkFlicker/RECORD FLICKER in OPTIONS), overflow:hidden on html+body, interactive-widget=overlays-content on viewport meta."],["v0.855","THE FLICKER WAS THE SAFE-AREA INSET. Four builds of viewport-damper work were all aimed at the game's HEIGHT, and a per-frame probe now proves that height is genuinely rock steady. What was actually moving is env(safe-area-inset-bottom) — on Android that inset IS the system navigation bar, every control in the game is anchored off it, and the game box itself is padded from the matching inset at the top. An env() variable is resolved by the browser engine: it fires no resize event and reaches none of the gates or dampers this game has built, which is exactly why four investigations went past it and why it never happened in Samsung Internet. Both insets are now latched to the largest value the device has shown and held until the phone is actually folded, so the D-pad, the buttons and every pixel of the game stop moving when Chrome's bars come and go. Also fixed: opening the on-screen keyboard was collapsing the whole game into a 320-pixel box, and the resize path was doing about 700 wasted layout measurements every few seconds, including 158 needless style rewrites of the D-pad."],["v0.854","FOLD 8 CHROME FLICKER — the browser bar SLIDES, it does not snap. Chrome on Android animates its navigation and URL bars over about a quarter of a second, firing a resize every frame, so one transit reports about nine different heights. The viewport damper built in v0.829 and widened in v0.837 could only recognise a viewport JUMPING between exactly two heights, so on the one device and the one browser it was written for it never armed at all — and the game rewrote its own app box on every intermediate value, all session, driven by every touch. That is the constant readjusting Odaroo has been filming. The damper now latches on a BAND rather than a pair, holds over a fixed furniture-sized allowance instead of the few pixels it happened to catch when it armed, empties its history when it lets go so a genuine hinge can no longer be re-latched by the readings it just escaped, and drops the latch outright the moment the WIDTH moves. Measured at all five fold sizes: the app box now holds one height through a sliding bar instead of two, with no teardowns. Every earlier harness faked the toggle as two discrete values, which is exactly the shape the broken code could handle, so all three of them passed against a build that flickered; tools/test-vp-slide.mjs slides it properly and proves the old damper fails, and tools/test-vp-oscillation.mjs now fakes a fold by moving innerHeight alongside the visual viewport, which fixes a false failure it had been reporting at 906x832."],["v0.853","Vinyl rip on every loss — online rhythm freeze fixed, all nine games proven"],["v0.852","THE MATCH CLOCK NOW STARTS AT GO, IN EVERY GAME. Odaroo caught the Disc-Ink timer already reading 0:12 by the time the table was playable: the clock was stamped at the splash card and then counted through the whole coin toss and the 3-2-1 before snapping back to zero. Every earlier audit passed because they all checked the NUMBER on the bill, which the v0.780 latch had made correct - nobody measured what the player was looking at in between. inkMatchSecs() now answers 0 until a game declares GO, so the header plate, every bill and the share card all read 00:00 through the ceremony; INK-PUT, LUMEN INK and a solo OCTATHON, which never declared GO at all, now do. A new harness opens all nine games through their real SOLO doors at five fold sizes, watches the plate the whole way through the toss, the record shelf and the countdown, and proves it both stays at zero and actually starts."],["v0.851","Save system — 8-char codes, server-side backup, restore from pause menu"],["v0.850","Ink rewards rebalanced — 500-1000 per long game, granular progression"],["v0.849","Disc-Ink solo is genuinely solo now. A coin toss in the solo ladder was naming a breaker, and half the time it named the rival — which handed the table to the AI, so a bot really was taking shots in a mode that is meant to be a practice ladder. The toss is gone and the table is locked to you at three separate doors. The stat column no longer drifts left and right: it was being re-placed once a second from a measurement of the mascot, and the mascot breathes, so the whole readout crept about all match. And a solo rung no longer shows which colour disc you were dealt, because every ring on the rack is yours and the mission is simply to clear them. All eight solo games audited: only Disc-Ink was wrong."],["v0.848","Timer fix — continuous clock survives stage transitions, winCups guard"],["v0.847","Matchmaking generates random bot opponent - no room players in roulette, medium difficulty"],["v0.846","Matchmaking roulette - row-sized button, ink pun names, spinning inklet animation"],["v0.845","Matchmaking button - rainbow animated button at bottom of online lobby roster"],["v0.844","INK-TAR HERO revamp. The D-pad is gone from this game: the five frets are the controls, so the cross was reserving a quarter of the screen for nothing. The neck is now 346x440 where it was 318x230 on the folded phone, and the buttons grew with it. A sustain is a closed window - nothing is dealt between its head and its tail any more, so a long note really is one press held. Holding a fret now takes the finger with it, so you can wiggle it for a whammy bar: the note bends down, the button and the note wobble, and working it pays. A new pause chip top-right is the way out now that START went with the pad."],["v0.843","Added /encyclopedia as a route onto the player's guide — it was being handed out as an address but 404'd"],["v0.842","Revamped blueprint player's guide — interactive fan-made encyclopedia with all current games and artwork"],["v0.841","Redesigned inklet face to match slime avatar reference - all 12 expressions updated"],["v0.840","DUPES ARE A PROGRESS BAR NOW. A spare copy of a card no longer says 'dupe +1'. Everywhere a duplicate shows up — the pack rip, the haul at the end of a pack, and every cartridge in the album — it reads as a little energy bar filling up behind a figure like 8/12: how many spare carts you have banked against how many this level costs. It goes gold and says so the moment the card is ready to upgrade, and a maxed-out headliner reads MAX. The bar keeps its space on every card so the album stays in neat rows, and the target is read from the one upgrade ladder in the game, so it can never drift."],["v0.839","CREDITS REWRITTEN. The MAKING OF tab is scrapped and rewritten from scratch as plain documentation — WHAT IT IS, WHO MADE IT, HOW IT STARTED, HOW IT WAS BUILT — half the length of the old text, no flourish. It states the facts: a rubberhose card-battler whose art and music are drawn in code, made alone by Odaroo under Odaroo & Co., priced as a four-person studio job in May 2026 and shelved, reopened on July 5 as a single test project for Claude Fable 5 that kept working until it became the whole game, dictated wish by wish and shipped the same day. The type is smaller throughout (12.5px to 10px, headings 11px to 9px) so it reads as a document rather than a poster, and the inklet standing on the night beach at the bottom is now a miniature (104x118 down to 44x50) — one small figure on the sand under the surf and the gulls. It is still the ten-tap door to WEDNESDAY JAMS, kept at 44px so it stays tappable. Checked clean at all five fold sizes: nothing clipped, no contrast faults, the text scrolls."],["v0.838","THE CHROME-FULLSCREEN FLICKER ON THE FOLD 8. Chrome's Android fullscreen does not take the system navigation bar away for good - it hides it and re-shows it around your touches, so the reported screen height toggled between two values every few seconds, all session long, driven by your own presses. Samsung Internet keeps its bars still, which is why it only ever happened in Chrome. The game already had a damper for exactly this, built in v0.829, but it only watched a 2.5 second window and wanted six readings inside it - a tap-driven toggle only ever offers two or three, so it sat there disarmed on the one phone and the one browser that needed it. It watches twelve seconds now and acts on four. And every gate downstream was reading the raw height rather than the damped one, so even when the game box correctly did not move, the whole screen was being re-measured and rebuilt on every flip; they read the settled height now. The two-second black stall on a screen change was a separate thing: the three bars of the slash transition were each holding their own permanent GPU layer, about 75MB on the unfolded screen, for something invisible 99% of the time - Chrome runs out of room to composite that in fullscreen and falls back to painting it slowly, which is the black sheet with just the D-pad showing. They are only promoted for the 0.42s they are actually moving now, and a deadman takes the sheet off at 900ms whatever else happens. Also: the Ice Rink was rebuilding its whole board on every single resize event, and the viewport scroll handler was forcing a layout on every frame of a touch. Both fixed."],["v0.837","Reworked the pre-registration page so it describes the game that actually exists. CROWN DELUXE is gone from it - that game was renamed OCTATHON and turned into the sealed vault over a hundred builds ago, and the page was still advertising it as a 50-cup table. The board list is now the real eight, in ladder order: Tetr-Ink, Ice-Ink, Disc-Ink, Panel-Ink, Ink-Put, Dance Dance Ink, Ink-Tar Hero and Lumen Ink, with OCTATHON described as the vault behind them. Every cup price is off the page - a figure beside a game name made the whole thing read as a rack of minigames instead of a card brawler, so the boards now carry a name and a description and nothing else. The title only ever says INKVILLE now; the INK TOWN / INKOUNTRY cycle is a deliberate easter egg and it stays inside the game, but on the front door it just looked like a page unsure what the product is called. Each showcase is a real gameplay field with the inkling standing on it top-left, the way it sits on every screen of the game. Also pulled the '1,247 others waiting' counter: that endpoint has no handler, so the made-up fallback number was the only one anyone ever saw, and the page was stating an invented figure as fact. Added scroll reveals, parallax and five small easter eggs - the drifting pieces spin when you catch one, eight taps on the mascot finds the octave, the footer inklet changes its mind, typing I-N-K runs the projector fast, and the vault seal turns. The page is served at /register (plus /pre-register, /waitlist and /join) and there is a new tools/test-waitlist.mjs that reads the game list straight out of MODE_GATES so this page can never quietly go stale again."],["v0.836","UNIVERSAL D-PAD — the control deck is now ONE size in every game. OCTATHON's battle deck was 222px tall against every other screen's 240px, so walking into a brawl quietly moved the pad 18px under the thumb already resting on it; it is 240px everywhere now and the battlefield's clearance moved with it. The narrow-screen shrink rule also only ever shrank the LEFT pad, which would have left the two pads different sizes in the dual-pad games — it is scoped out of that mode, where both pads are already capped together. No new pads, no new positions: the left pad is the universal one, and the right-hand pad appears only for the arrow-only games and is an exact mirror of it. Proved by a new tools/probe-pad-uniform.mjs, which measures the cross and the deck on all ten game screens at all five fold sizes and is mutated back to 222px to prove it can fail."],["v0.835","STATIC CARTRIDGES — every game's carousel cartridge is now static (no 3D spin) except OCTATHON, which keeps its turning stop sign. The spinning rig under perspective was re-rasterising the SVG shell every frame in the installed PWA, and the app compositor handles it worse than Chrome. Stripping the spin from every other game removes the largest remaining animation cost on the home screen."],["v0.834","THE FLICKER, EVERYWHERE — not one more screen. The last three builds each fixed one screen because the idle test only ever walked FIVE of the game's twenty-two, and no playfield was ever measured while it was actually being played. All 22 screens are now swept at all five fold sizes (110 pairs, all clean) and all nine games are measured with their loops running. Fixed: the credits screen was re-solving the page 240 times a second (the halo's 1px bob on a shape inside the inklet's SVG); the Ice-Ink glare swept on 'left' for 144/s; INK-PUT was the worst screen in the game at 241/s, mostly one HUD label rewriting the same text 480 times a second plus its clock bar resizing every frame; and OCTATHON's pieces walked on 'left'/'bottom' while a stray width measurement between two writes forced a full page layout per piece per frame. Six progress bars across the game now drain on scale or clip-path instead of width, and a new test proves every one of them still fills and empties. Ink-Put 241 to 2, the credits screen 240 to 0, the rink 144 to 9; every other screen 0 to 11."],["v0.833","THE FLICKER WAS NEVER THE RESIZE PATH - THE GAME WAS RE-SOLVING ITS WHOLE LAYOUT EVERY SINGLE FRAME. Odaroo has reported the Fold 8 flickering for many builds, and after v0.831 said it was still there, including on the end-game screens. Measured: the game forced a FULL PAGE LAYOUT 60 TIMES A SECOND, on every screen, from boot until the tab closed, with nobody touching it and the DOM completely still. Now 0-3. Five earlier investigations missed it because they all read the resize code, which a new probe proved was already clean. Three permanent animations were animating LAYOUT properties. The big one is the mascot's breath: it ran on the <image> INSIDE the inklet's <svg>, and an SVG child can never be composited in Blink - there is no layer to promote, so every frame went back through layout. will-change, contain:layout paint and contain:strict were all measured and none of them help; moving the identical keyframes one level up onto the <svg> takes it to zero, and the mascot breathes exactly as before. The other two were plainer: the film scratch animated 'left' and the title's scan line animated 'top', so a 2px decoration and a 3px line each cost a full layout per frame; they move on translate and background-position now. Also restated the breath on the stressed-mascot rule, which would otherwise have replaced it and stopped a stressed inklet breathing. Proved by tools/test-idle-cost.mjs, which measures Chrome's own layout counter on five screens at all five fold sizes, demands the mascot is still visibly breathing so the cost cannot be fixed by deleting the animation, and puts the fault back to prove it can fail."],["v0.832","OCTATHON — the battlefield you can read at a glance. Every piece on the field still turns, but it never faces backwards any more: the whole drawing counter-flips with the turn, so the horses, the queens and the numbered balls all look the same way as they walk, like an optical illusion. Every FIGURE is gone from the fight — no HP numeral, no damage numbers. Instead the piece that was hit recoils and flashes red, its own bar is bigger and goes red as it empties, the HUD bar shakes and flares on every blow, and the attacker's NAME still lands on the inklet it hit, so you can see who is hitting who without reading arithmetic. The rival reaches for the stage about twice as often, on every bot, so it stops leaving you in the lead by default. Playing a card is one continuous move now: the cart shrinks to 44% at half opacity in your hand as you carry it, then takes one fast 360-degree turn at your finger through a BLACK back before the floor cracks open and the piece climbs out. And the brawl has no film reel at all — every message now prints as one plain line directly under the timer bar, so nothing is ever laid across a showstopper's instructions again."],["v0.831","THE FOLD 8 UNFOLDED SIZE WAS WRITTEN DOWN THE WRONG WAY ROUND, AND THE GAME NOW MEASURES ITS OWN SCREEN. Odaroo has reported the unfolded Fold 8 flickering for many builds. Two findings. First: the inner panel is 1848x2448 - TALLER than wide - and the size this project has tested against since v0.785, 816x616, is that panel divided by three and then transposed, i.e. LANDSCAPE. Every 'all four folds' sweep in that window checked the unfolded game in an orientation he never holds the phone in, and the '13 faults on the Fold 8' this file records were largely an artefact of it: the real portrait screen measures 2. tools/folds.mjs is corrected and now sweeps five sizes. Second: the game carries a flight recorder and a readout. inkViewport() - reachable from OPTIONS, from ?vp on the URL, or by name - draws a plain full-screen report of window, visualViewport, document, screen, DPR, orientation, real fullscreen, installed-app state, the bars' height, and the last twelve viewport CHANGES with timestamps, sized to be read in a screenshot. And vpFit gained a damper: a viewport that keeps flipping between two heights is latched to the TALLER one, so a bar-driven feedback loop cannot drag the game with it - proved by tools/test-vp-oscillation.mjs, which shows the game settling at the SHORTER height with the damper removed."],["v0.830","LUMEN INK — the side columns shrink and the board takes the room. The NEXT block is a tiny 22px chip under the inklet instead of a labelled box, and everything the run used to say in three rows is two small lines: the best chain (4x) and blocks cleared (cleared/sent in a duel). The rival gets the identical pair, mirrored — including THEIR next block, which now travels on the wire as its own event, and the room's bot sends one too. Both portraits on this screen are 55% of the house size, which is what was actually eating the field: on a folded phone the two columns were 186 of 416 pixels and the board was 214 wide; they are 49 each now and the board is 272 — a quarter bigger, and 36% bigger on the narrowest screen. Unfolded the board is height-bound so it is unchanged there, by design. The best chain is a multiplier now on both sides of the wire rather than a block count, so the two players are finally compared on the same quantity."],["v0.829","THE RIVAL PLAYS THEIR SHOWSTOPPER IN FRONT OF YOU, AND IT LANDS. Against ALPHA, BETA and OMEGA the rival's showstopper board opened, froze the battlefield, and then nobody played it - it scored zero and cost you nothing, every single time. The cause: the game chose who drives that board by asking 'is this an online match?' instead of 'is there a real person on the other end?'. The three bots live in the online room, so their turn was handed to the wait-for-their-keypresses path - and a bot has no machine sending keypresses, so the board just sat there animating itself while the score stayed at zero. Now it asks the right question: a real human rival is watched over the wire exactly as before, and a bot plays its own board in full view with its own AI. Measured over full 3-minute bouts: rival showstoppers went from 0, 0, 0 to real runs scoring up to 10 out of 10 and taking real health off you. New proof tool tools/test-foe-showstopper.mjs plays real lobby matches against all three bots and refuses to pass unless the rival's turn actually scores."],["v0.828","OCTATHON REWORK. Enemy pieces now visibly attack your inklet: a red damage figure with the ATTACKING PIECE'S NAME over it lands on whoever was hit, and the inklet flashes red. A piece that lands a blow LOCKS ON to what it hit and fights it until one of them dies, instead of re-picking the nearest target every frame. ALPHA, BETA and OMEGA are properly easy, medium and hard now: their cards are level 1, 2 and 3 (they were reaching level 15, which is why they never died), and their inklet's health is sized by difficulty instead of by your cup count (an easy rival had half again your health). A showstopper now visibly stops the world - the battlefield greys out and recedes behind whoever's board is up. The record AUDIBLY speeds up on a combo: a ten-chain is 1.25x and a twenty-chain hits the 1.50x ceiling, and a run of misses drags it UNDER its own speed to 0.82x, so a bad patch sounds like one. Dance Dance Ink and Ink-Tar Hero showstoppers are QUARTER NOTES now - no eighth notes at all, just the beat you can hear, with rare whole triplets for colour."],["v0.827","OCTATHON: the field rule was misread and is corrected. Each side may now put down as many DIFFERENT acts as it can pay for and never two of the same one — the ceiling of one act a side that v0.825 shipped is gone, the rule is one of each KIND, and it is the same rule for the rival as for you. The rival's beat is re-dialled to suit. The rival's showstopper was measured before anything was changed: it really does fire, really opens a board, and is really played out in front of you — what it was not was recognisable as the rival's, being pixel-for-pixel your own board announced by a 9px line. It now sits inside a pulsing rival-pink ring on a darker stage with the RIVAL'S TURN line stepped up to a readable size, and the battlefield stays frozen behind it."],["v0.826","OCTATHON — THE CLOCK, THE RIVAL'S HALF OF THE FIGHT, AND A SONG YOU CAN HEAR REACT. The match clock counts UP from 00:00 everywhere now: it already did during ordinary play, but the branch that keeps it running while a showstopper is on stage was still printing a countdown, so it flipped direction for the ~26 seconds of every single showstopper — the exact stretch you are staring at it. The rival can now actually PLAY two of the eight minigames it was drawing: on Dance Dance Ink and Ink-Tar Hero it was comparing a stopwatch against note times written in the song's own clock, so its hit window never once contained a note and it scored a flat zero every time; on Tetr-Ink it walked each piece down one row per beat, which is three and a half seconds a piece, so it never cleared a line and also scored zero. Both fixed, and Lumen's rival plays fast enough to finish a board now. Measured over full bouts: the rival used to score 0.0 on half the games it drew and now averages around 8 out of 10, landing showstoppers worth 140-235 damage against 23-a-hit ordinary chip. It also reaches for the stage earlier so the two of you trade turns from the start instead of it always answering second. And the song's combo speed-up is finally audible: it was +2% every 4 of combo, which put an ordinary chain at 1.06x — under the threshold where a human can hear a tempo change at all. It is +4.5% every 3 now, so a 12-chain plays at 1.18x and a big one tops out at 1.40x. The showstopper charts still sit exactly on the record's real 131 BPM grid, with fewer scattered off-beats so the middle of a run reads on the pulse instead of between it."],["v0.825","OCTATHON — ONE ACT A SIDE, NO TWINS, AND A RIVAL WHOSE SHOWSTOPPER ACTUALLY LANDS. The field ceiling drops from EIGHT pieces a side to ONE, so a fight is two acts facing each other instead of a crowd, and whoever is playing the mini-games better decides it. The no-duplicates rule now applies to BOTH sides: it already refused a second copy of an act on the player's half and refused nothing at all on the rival's, so the rival was quietly running twins — it is enforced at the one door both sides walk through now. And the rival's showstopper was being cut off at the knees: every Lumen run threw an error the instant it was won, killing the run mid-board, so the rival was scored on a fraction of what it played and its best hit read as ordinary chip damage. Fixed, and measured: the rival now lands full-strength showstoppers worth several times a normal exchange. The rival also replaces a felled act promptly again, since with a ceiling of one it can no longer flood the field."],["v0.824","YOU CAN SEE THE FIGHT NOW. Odaroo sent a screenshot of a battlefield he could not read, and all four notes were the same complaint: the health bar moves and nothing on the field explains why. Every attack now FIRES A VISIBLE SHOT across the field — a bolt that travels the real distance from the act that swung to the thing it hits, in cream for your side and red for theirs, landing exactly as the flinch plays. And every hit says what it cost: a damage figure pops on the act that took it, and on the inklet itself, which had never shown a number at all even though it is the bar everybody watches. The rival has also stopped flooding the stage. It always played exactly one card at a time; the problem was the beat — it dealt one every two seconds, so it hit the eight-act ceiling inside half a minute and simply sat there. It now waits four to seven seconds, the same pace the online bots have always used, and a harder rival presses faster rather than bursting. Cards before GO: the solo rival was already properly held through the announcement, but an act arriving from a real opponent over the wire walked straight on, because their intro is not your intro. Those now wait in the same queue a showstopper uses and arrive the moment the bell rings, in the order they were played, so the two boards never disagree. New tools/test-battlefield-legible.mjs proves all four at every screen size, with two mutations."],["v0.823","THE REST OF THE FLICKER — THE PORTRAIT AND THE NAME STRIP WERE ALSO BEING THROWN AWAY AND REDRAWN. v0.820 found the top bar being rebuilt from scratch on every screen change and stopped it; it was right about the cause and it only fixed one of four places doing exactly the same thing. The biggest one was the player's own face in the top-left corner: the home screen repainted all five portraits every time it drew itself, which is every single press of the carousel's arrows and every walk back to the menu. And it was worse than a blink — the mascot changes its expression on a timer, so wiping the portrait put the resting face back on top of whatever it had just pulled, meaning every arrow press reset the mascot's expression. The name strip under the top bar was the one you saw walking into OCTATHON: the entrance deliberately re-fits it twice, at 90ms and again at 620ms, and the second one was tearing it down and building it again right as the title card clears and you are looking straight at it. OCTATHON's own slim ink-and-cups bar was the third. All three now carry the same stamp the top bar got: the thing is only redrawn when the drawing would actually come out different, so buying a frame, wearing gear or changing colour still repaints instantly while simply walking around the game touches nothing. Proved by a new tool that walks the bill, enters OCTATHON and comes home at all four fold sizes and demands the HUD painters do not run at all, then puts the old behaviour back to prove the check can fail."],["v0.822","LUMEN INK — NO PAUSE. THE NEXT PIECE IS ALREADY UP THERE, WAITING FOR YOU. This reverses the 1.2-second wait that shipped in v0.819. The moment a piece locks, the next one is on top of the board in the same frame — nothing goes blank, nothing is taken away and handed back. But it does NOT start falling: it sits there, fully visible and fully steerable, until you touch it. The instant you press left or right (or rotate, or drop) it begins falling at the normal speed. So the moment of thinking is still there, it is simply not on a clock — it is as long as you want it and as short as a flick of the thumb, and the game reads as seamless either way. The very first piece of a run is held the same way, so there is no exception to learn. The hold is released at the one door every input in the game arrives at, so there is no route that can slide a piece sideways without starting its fall. Proof: node tools/test-lumen-field.mjs — it now checks the opposite of what it checked yesterday, in two halves that a wrong build can only pass one of: the board is never empty for a frame, AND an untouched piece has not moved a row more than a second later."],["v0.821","LUMEN INK GOES ONLINE. You can now challenge somebody to Lumen Ink from the room, exactly the way you challenge them to anything else. It rides the same engine the two rhythm duels already use rather than getting a private copy of one — so both machines are dealt the SAME record off the match seed with nothing about it crossing the wire, and both play their own board against their own audio clock. The screen wears the house VS HUD: both usernames on one film reel, an HP bar under each, the rival's inklet in the top-right corner, my run box on the left under my own inklet and THEIR figures on the right. Clearing is attacking — every crossing you erupt takes health off them, and a bigger chain hits harder, so the duel rewards exactly what the solo game rewards and there is no second skill to learn. Whoever's meter empties first loses; if the record plays all the way out with both still standing, the higher BLOCK COUNT takes it, and a dead tie is broken the same way on both machines so nobody can claim a win the other side did not see. Topping out loses the duel. The room itself learned the new game key (server/lobby.js, the fifth file) and got a Lumen bot that plays crossings and wears your attacks, so MASA and the others can be challenged to it right away. START still gets you out and still tells you what walking away costs. Proof: node tools/test-lumen-online.mjs — it talks to the real room, plays a real match, and checks the whole HUD at all four fold sizes; five mutations."],["v0.820","THE FLICKER WAS THE TOP BAR BEING THROWN AWAY AND REBUILT ON EVERY SCREEN CHANGE. Odaroo filmed the unfolded Fold 8 in fullscreen: walking into Octathon, and connecting anywhere, flickered. It was not the resize work from before — that is intact and still measures clean. The top bar was being rewritten from scratch every time the screen changed, and about sixty other times besides. The words on it never changed, which is why this hid for so long: what you actually see is the bar's animations — the marquee bulbs, the film reel, your inklet's portrait — and every one of them jumps back to its first frame when the bar is replaced. Five bars blinking together reads as the whole screen flickering. A bar whose contents would come out identical is now left alone: measured at five teardowns walking into Octathon before, zero after, on all four screen sizes. Also confirmed by running real matches: a brawl now genuinely lasts three minutes (a real one was still going at thirty-five seconds), the clock opens on 00:00 and counts upwards, and Plimsoll Glitches starts the instant the carousel lands on the Octathon tile and hands the theme back when it walks off. New tools/test-hud-flicker.mjs proves all of it on all four folds and can fail."],["v0.819","LUMEN INK — THE FIELD IS BARE, WIDER, AND KEEPS TIME UNDERNEATH. Everything painted behind the board is gone: the drifting cosmos, the sixteen spectrum bars, the dashed beat ticks and the faint cell gridlines. Every one of them drew a vertical line the full height of the field, which is the same shape as the sweep bar — the one line in this game that means anything — so the board now sits on flat ground and the bar is unmistakable. The board is SIXTEEN columns wide instead of twelve, which is Lumines' own width and gives a chain somewhere to grow. A landed piece is now followed by a real beat (1.2s) before the next one is dealt, instead of the next piece already falling before your eye had moved. The climb from record to record is gentle: song one is genuinely slow, and every step up is the same size relative to where it stands (about 19%) rather than the old 65% cliff between the first two songs — the last record is now roughly twice the first, not seven times. Under the board there is a new RGB progress bar that fills left to right with the record itself, so you can see exactly how far you have pushed the needle — and because the needle only moves forward when you clear something, that bar IS the score. It starts again with every track. The left rail gained a run box under NEXT reading TRACK, SPEED and BLOCKS, sized off its own column so it cannot clip. Proof: node tools/test-lumen-field.mjs — five mutations, all four fold sizes."],["v0.818","THE OCTATHON CLOCK IS A STOPWATCH, AND THE BOUT IS REALLY THREE MINUTES. Matches were ending at thirty seconds no matter what: v0.814 set the bout to three minutes, but one line in the online code — left over from the old thirty-second blitz — quietly stamped 30 back over it the moment a match started. Every reader said 180 and every fight lasted half a minute, which is also why the showstopper work of the last two builds went unseen. That line is gone. The clock itself is now what Odaroo asked for: it sits on 00:00 through WARNING and BATTLE START, starts climbing the instant the bell rings, and counts UPWARDS instead of down. The zoom-and-shine animation that made it lurch when it woke up is deleted outright. And Lumen Ink's showstopper is drawn with Lumen Ink's own tiles at last — the breathing gems, the white outline on a square the timeline is coming for, the bevelled falling block, the glowing sweep line and a real record's colours, instead of the flat squares it had been using. Proved by a new tools/test-clock-counts-up.mjs on all four folds with three mutations, plus a fifth check and a fourth mutation in the showstopper fidelity suite."],["v0.817","OCTATHON overhaul. The showstoppers were dealing boards at their MINIMUM cell size regardless of the room they had — every mini's fitter could only ever shrink, so one early bad measurement pinned it there for the whole run. Measured: a Tetr-Ink well of 64x128 inside a 400x299 stage. Boards are now SOLVED against the measured stage and fill it. Tetr-Ink's showstopper is the standalone's real 10x18 well and holding the pad slides the piece (the same 170ms/50ms DAS the full game uses) — it had no repeat at all. The rival's turn sign is a thin line at the top of the stage instead of a film banner laid across the board it was announcing, and the game-name chip above every board is gone into that same line. Your pieces on the field are BLUE and the rival's are PINK-PURPLE, so the two sides read at a glance. And the HP that drained with nobody attacking: v0.814 tripled the bout to three minutes but nothing capped the field, so the rival amassed 16 pieces by 45 seconds and upwards of fifty by the bell — both sides are now held to eight. DOES NOT COMPUTE is fetched while you are still looking at the tile, so it drops on the logo instead of after it."],["v0.816","LUMEN INK NO LONGER LOOKS ZOOMED IN. v0.815 won back every pixel it could and then spent all of them: the board pressed right up against the edges of the screen and, on the folded phone, a stale-size guard left it 324px tall inside a 313px box, so the cells were not even square. The board now keeps a margin of air on all four fold sizes, one cell is capped so a big screen shows a BOARD rather than a handful of enormous squares, and the field is re-sized whenever what is drawn disagrees with what was asked for."],["v0.815","LUMEN INK REWORKED. The board is a seamless playfield now: the TRACK n/6 counter in the top-right, the six progress pips under the board, the song title and the numbered 1-2-3-4 beat pips over the field are all gone, and nothing is printed on or around it. The board itself is bigger on every screen - the 54px of deleted labels, a max-width that had been quietly clamping it, and the inkling/NEXT rail now going wherever leaves the bigger board (a column beside it on a wide screen, a row above it on a narrow one, chosen by measurement rather than a breakpoint). The sweep takes TWICE AS LONG to cross - two bars, eight beats - while the record plays at exactly the same speed, so there is twice as long to build a square. Combos now multiply: every batch the sweep erupts inside one crossing is another link, 2x 3x 4x said over the field, and an Nx clears N times as many blocks. The D-pad glide is 10 percent slower and now waits 205ms before it starts repeating, so a tap is one cell and the piece no longer walks on by itself. The pre-flight itself now runs at all FOUR fold sizes instead of the Fold 6 pair."],["v0.814","OCTATHON IS A THREE-MINUTE BOUT NOW, AND THE RIVAL TAKES THE STAGE. The enemy's showstopper was never missing — it has played the real mini since v0.807 — but every brawl was a thirty-second blitz, so it first reached for one at 7-13s, the player usually got there first, and a 26-second mini could not fit inside a match that was already over. The card now reads 03:00, health is 1000 a side, and a flawless showstopper takes about a fifth of a bar, so roughly four or five of them decide a bout that runs its full length. Both sides are scored by the SAME formula for the first time (yours used to be worth half again as much as theirs), with no damage floor either way, so combos really are what settles it. The match clock also runs while somebody is on stage, which is what makes three minutes on the card mean three minutes in the room. Nothing can be placed on the field before BATTLE START any more. The eight showstoppers now come out of ONE bag shared by both players, so all eight cycle before any repeat, and the timer starts at 00:00 in every game instead of carrying the last one's figure. The letters and numbers on a turning field piece stay the right way round through the back half of its spin."],["v0.813","TWO SCREENS THAT WOULD NOT SIT STILL. Pulling the notification shade down to start a screen recording no longer blanks the game: a shade drag scrolls the viewport a little further on every frame, so the v0.582 'has anything moved' gate honestly answered yes sixty times a second and the whole screen was destroyed and rebuilt on each one — measured at over two thousand elements replaced per drag. The work is now split in two, because the two halves want opposite things: re-MEASURING (fitting text, sizing a canvas) stays immediate, and re-BUILDING (anything that throws markup away and makes it again) waits for the viewport to stop moving. A fold pays four hundred milliseconds nobody can see; the shade pays one rebuild instead of forty. Measured after: zero teardowns. And walking the carousel now swaps the ACT and nothing else — pressing left or right used to rebuild ALBUM, MART, the GIGS bar and all eighty bulbs of the side marquee so that one tile could change, which is the flickering Odaroo filmed while just browsing the bill. Proved at all four fold sizes by a new check, tools/test-shade-blank.mjs, which fakes a real shade drag and breaks both fixes on purpose to show it can fail."],["v0.812","OCTATHON: a win lets DOES NOT COMPUTE keep playing. Winning the vault brawl no longer lifts the needle — the record rolls on under the victory receipt right up until you leave the screen, and the house band no longer strolls back in over the top of it (that was two songs at once). Losing is unchanged and is now the only ending with the classic vinyl rip: the record is left turning for inkRecordDeath, which drags it down to a crawl and lifts the needle. tools/test-octa-music.mjs gained a proof for the win half — the loss check alone would bless a build that killed the song on every ending — and it mutates the old stop-on-win line back to prove it can fail."],["v0.811","LUMEN INK — THE METRONOME RESETS WHEN A NEW RECORD DROPS. The six tracks were in place but the seam between two of them was not: the sweep bar simply adopted the new song's phase and carried the old record's swept-column mark, its banked squares and its position across with it. Depending on where the new phase landed, the new track's first bar either cleared nothing at all or popped a whole board at once — and the bar arrived out of step with the music, because the sweep free-ran over the half-second a record spends decoding and was then snapped onto the downbeat. Now a new track PARKS the sweep on the bar line and leaves the downbeat WITH the music, and the interrupted bar is ended cleanly: score, blocks cleared and best combo all carry on, only the four beats start again, so you can keep comboing straight through the handover. The card roulette between two tracks re-syncs on the way out as well, since the audio does not pause while that wheel is up. The bar line is now read as the phase going backwards rather than as a column count, so it can no longer be missed — and that turned up a real fault underneath it: the one-bar put-back lands exactly ON a bar line, which is behind the phase just read, so it fired again on the very next frame and walked the record backwards bar after bar while the player stood still. tools/test-lumen-sync.mjs gained a handover check and a seventh mutation that restores the old carry-across; all seven can fail."],["v0.810","OCTA-THON: the splash silences everything. The moment the OCTA-THON title card lands, the menu vibe PLIMSOLL GLITCHES, the chiptune band and the rhythm deck all go quiet and DOES NOT COMPUTE is the only thing playing - no more bleed-through or two songs at once when you come in from the menu. The record used to drop 2.25 seconds later on the BATTLE START slam, and the vibe deliberately held over the WARNING card in that gap; that gap was also exactly where the screen change could quietly start the menu song again on top of the battle track. The battle record now stakes its claim the instant the splash appears, before it has even finished loading, so nothing can slip in behind it."],["v0.809","THE RIVAL'S TURN NOW WEARS THE CONNECTION SIGN. (Odaroo: 'just put a little film reel in the middle of the screen — the same one as the connecting/connected banner — saying Rival's turn, please wait. But then we get to see the actual gameplay underneath.') It is LITERALLY the same sign, not a copy: all 108 #crLineBadge rules in css/crown.css are now twinned onto #foePlayLbl, mechanically, and the twins strip back out to the original file byte-for-byte. That matters because of the standing rule that there are exactly two sizes of film in this game and no strip may declare a gauge of its own — four of them once did, and writing the recipe out a fifth time here would have been the fifth drift, on the one sign the player stares at mid-match. To restyle the connecting banner from now on you edit that block and BOTH change, which is correct. The sign sits dead-centre, says RIVAL'S TURN over the game and PLEASE WAIT with the banner's own cycling dots, and is see-through at 0.78 so the rival's run plays on underneath it. That transparency is a filter, NOT the opacity property: the banner's own entrance animation ends on opacity:1, and a running animation beats a plain declaration — the first cut set opacity:.82 and the sign came up completely solid. Same family as the animation-shorthand trap this project has hit three times. The old red RIVAL IS PLAYING ribbon is deleted rather than left lying around, and with it the 56px of padding and the 62px reservation it needed inside the showstopper window — the sign floats now, so that room goes back to the board, and it was making the WATCHER's board smaller than the PLAYER's on the same online showstopper. Proof: tools/test-octa-overhaul.mjs gained a group that compares the sign's sprockets against a real connecting banner rendered on the same page, computed style to computed style, plus its transparency, its pointer-events and how much of the board it covers; five mutations, all of which fail."],["v0.808","OCTA-THON OVERHAUL. The deck and the showstopper button are now MEASURED above the D-pad instead of pinned at a number written for a taller phone — on the Fold 8 the energy row was sitting 45px over the D-pad's cross and eating its up-arrow. That button is a STAR again: it has been drawing the crescent LUNE (the currency) since v3.90, on the one button the whole game calls 'the star'. THE RIVAL'S TURN IS A REAL GAME AGAIN — the 'THEIR TURN ON STAGE / let them have their moment' card is gone and you watch them actually play the mini, on a live board you cannot touch; a bot no longer gets a rolled number, it genuinely plays and is scored on what it did, through the same curve you are. INK-PUT's showstopper was never Ink-Put — a generic row of arrows that predates the game having a design — and is rebuilt as the real wave machine: an arrow group, a GREEN LIGHT with its window drawn as a draining ring, and the PENDULUM, using the real game's own numbers. DISC-INK's is the ORIGINAL parlour table now: the pale birch bed, brown rails and blue pockets off the real table's own palette, six pockets, the baulk line and D, and a CUE that draws back and strikes. THE RHYTHM MINIS ARE IN TIME: notes travelled as a percentage of a field whose receptors are a fixed pixel height, so the picture only lined up at one window size and drifted everywhere else — they are pinned to the measured hit line now, in layout units, the way the real Ink-Tar Hero does it. And the OCTA-THON tile stays INVERTED once you have unlocked it, with its lock sentence as plain text instead of a grey plate. New proof: tools/test-octa-overhaul.mjs, five mutations."],["v0.807","LUMEN INK IS ABOUT THE RECORD NOW. The stage numbers are gone - it is just the song, six of them, and that is the whole road. Clear nothing in a bar and the needle goes back one bar: the same four beats play again, the sweep re-crosses the same board, and the song does not move until you do. Clear something and it rolls on, so a record only ever reaches its end because you played it there - and when it does, a card roulette spins and the next one drops, with the LEGENDARY odds climbing every track (16% on the first, 36% on the sixth). Finish all six and it is END OF THE ROAD: a win, with cups, not a stack overflow. The four beats of every bar are now drawn on the field - the two bar lines, the three beat ticks between them, and four numbered pips along the top with the one you are on lit - so you can see the rhythm you are playing to."],["v0.806","THE OCTATHON VIBE PICKS UP WHERE IT LEFT OFF, AND THE SEALED VAULT SAYS NOTHING. Two follow-ups from odaroo on yesterday's music. Walking the carousel off the OCTATHON tile and back used to drop the needle in the first groove of PLIMSOLL GLITCHES every single time; it now carries on exactly where it was, the way the main theme has always behaved across the front of house. The reason it did not is worth knowing: the vibe belongs to a TILE rather than to a screen, so it had no row in the table the game uses to decide which records are front-of-house furniture, and it was quietly being treated as a game's record — and a game's record always opens from the top, on purpose. And tapping OCTATHON while it is still chained no longer opens a pop-up. The tile's own plate already reads UNLOCK ALL GAMES BEFORE UNLOCKING THIS ONE, so the dialog was the third telling of one sentence; the tap still answers with its sound, so a chained tile never reads as a dead button."],["v0.805","OCTATHON HAS ITS OWN MUSIC, AND THE SHOWSTOPPERS PLAY IN TIME WITH IT. Two of odaroo's own recordings join the game. PLIMSOLL GLITCHES is the vault's vibe: it starts the moment the carousel lands on the OCTATHON tile, carries straight through the SOLO/ONLINE lobby and the WARNING card, and only lifts when the match actually counts in — walk the carousel off the tile and the front-of-house theme comes back at the groove it was parked on. DOES NOT COMPUTE replaces the chiptune battle band and is the record the whole brawl is fought over. The timing minigames inside a showstopper are now charted against that record's real beat, measured off the file at 131 BPM rather than guessed, so every arrow and every fret note lands on something you can hear — and as the combo climbs the record speeds up, up to 1.30x, with the notes holding their beat instead of sliding. Drop the combo and the tempo comes straight back down. A lost brawl winds the new record down into the same vinyl rip every other game gets."],["v0.804","LUMEN INK NOW PLAYS THE SIX REAL RECORDS, AND THE SWEEP BAR IS THE MUSIC'S OWN BAR. The seventeen procedural chiptunes are out of Lumen Ink; it joins Dance Dance Ink and Ink-Tar Hero on the rhythm deck and plays odaroo's six recordings — INFLATE, TRIALS, MOON MATHEMATICS, ORBIS PARALYSIS, TELEGRAPH and IGNITION SEQUENCE START — one per stage, five levels each, read from the same set list the other two rhythm games use so the order can never drift. One full left-to-right sweep of the timeline bar is now exactly ONE BAR of the record playing: four beats at that song's own measured tempo, so the bar is 1.76 seconds on IGNITION and 2.79 on TELEGRAPH. Its position is read off the sound card's own clock every single frame rather than counted up, so a dropped frame cannot slide the bar out of time, and each record's measured first-beat offset is honoured — ORBIS starts nearly half a bar into the file, which would have put the whole song permanently off the beat. Because a real recording plays at its own speed and is never rate-shifted, the difficulty now lives entirely in the fall speed, which was re-derived for the shorter six-song ladder. The chiptune band no longer plays underneath the record, the spectrum bars behind the field are tapped off the record deck instead of the silent band, and losing winds the record down into the vinyl rip like every other game in the arcade. Proved by a new tools/test-lumen-sync.mjs, which drives the playhead to known musical positions and demands the bar be there, and which breaks four ways on purpose to prove it can fail."],["v0.803","THE BILL'S WAIT IS ONE SECOND NOW. It was five, then three, and Odaroo said three was too long - so the invisible guard on SAVE, SHARE and BACK is down to a single second. It is still enough to swallow the mash you were already doing when the game ended, which is the whole job. AND A LOSS IN DANCE DANCE INK AND INK-TAR HERO FINALLY DIES LIKE EVERY OTHER LOSS. Every game in Inkville answers a loss the same way - the turntable winds down to a crawl, the needle jumps the groove, silence - and those two were the only ones that just went quiet. The reason was a third deck: the wind-down knew about the records and the chiptune band, but a rhythm game's charted song plays on its own player, and both games were cutting that song dead before the bill was even built. There was nothing left to slow down. The song now stays turning through the ending and dies properly, needle skip and all, then the theme returns when you press HOME. A win still leaves the music playing, exactly as before. Both are covered by tests that were broken on purpose first to prove they can catch this coming back."],["v0.802","EVERY CARD IN THE GAME NOW WEARS THE HOLOGRAM. The new holographic card face was already on the album and the booster pack, but five places were still drawing the old painted pixel sprite - and one of them was the moment it matters most: the roulette reveal. Both prize wheels (the Ice-Ink floor clear and the victory-screen pull) now LAND on a hologram, so the card that spins up is the same card you go on to own. The Ice-Ink skater picker, the SKATE cycler and the TEN ORBS legend offer are converted too. Card wallpaper, falling confetti pieces and fighter portraits are deliberately left as they were - they are scenery and faces, not card faces. AND THE HOLD ON 3-2-1 ON THE BILL IS GONE. It is three seconds now instead of five, and completely invisible: SAVE, SHARE and BACK are drawn in place from the frame the bill lands and simply do not answer for three seconds. Nothing on screen announces the wait. This is for Ink Panik above all - a match that ends while you are still mashing A and B used to have the next press walk straight off the receipt before you could read it. The refusal still lives at the pad, the keyboard and now the buttons themselves."],["v0.801","THE ALBUM HOLDS STILL. Every card in the collection was spinning its hologram at once, and each one carried a GPU layer (will-change) plus a screen-blend sweep over the top — 60-odd promoted layers all re-compositing every frame, which is the flicker and lag Odaroo filmed. On the shelf a card now stands face front: no turn, no sweeping glass bar, no axis line, no blend layer, and no layer promotion. The black glass, the projector grid and the scan lines are untouched, so the look is exactly the same, just holding its pose. Tap a card and the expanded view still shows the piece turning as a full hologram. Deck slots and battlefield pieces are unchanged."],["v0.800","The browser tab icon is transparent now. It used to be the same black tile as the installed app icon, so every browser tab showed a small dark square that never quite matched the tab strip around it. The tab icon is now just the white neon cartridge with nothing behind it, so it sits cleanly on whatever colour the browser puts underneath. The home-screen app icon is untouched and keeps its black tile."],["v0.799","THE CARD ON THE FLOOR IS THE CARD IN YOUR HAND. Every piece deployed in OCTA-THON was still the old painted pixel sprite while its card face had long since become the turning neon hologram — so the cart you dragged and the fighter that landed were two different drawings of the same act. Units, the leader piece and the flip-onto-the-stage animation now all use holoArt(key,'field'): the same re-lit artwork, the same glow, the same endless turn on its axis, with the projector's black glass, grid, sweep and floor beam taken off so a fighter is a hologram standing on the arena floor rather than a black rectangle. The card's rarity bloom follows it out there too. AND NOTHING ON THE ALBUM SHELF IS CUT OFF ANY MORE: COUNTESS and STARBOUND were overrunning the 75px name plate and losing their last letters to the cartridge frame. Every name in the album is now one measured size that the widest of them sets — smaller type, but the same type on all 64 cards, re-measured for the folded and unfolded grids rather than written down, so it stays right when a card is added. Tap any card and the full name and detail expand as before."],["v0.798","THE TWELVE FACES, MEASURED OFF THE REFERENCE ITSELF. Odaroo's sheet is now in the project as sprites/expression-reference.png, so every face was checked against the drawing rather than against a memory of it, and two things were plainly wrong. The eye is a ROUND DISC — it has been wrong twice in two directions now, first as a wide bean that read as a permanent squint and then as a tall slot, and the sheet is quite clear that it is a circle about as wide as it is high. And the upset face's brows go UP at the inner end, not down: face three on the sheet is pleading, and inner-ends-down is face six, the angry one — drawn the wrong way round the two were the same expression wearing two different mouths. Everything else about the twelve stands: the top-left face is still the default, every mood word the game asks for still lands on one of them, and the cheek marks are still stamped on all twelve after the mood so none of them can forget."],["v0.797","THE MASCOT WEARS ODAROO'S TWELVE FACES AGAIN. He sent the reference sheet — twelve expressions, three across and four down — and asked to go back to exactly those. The kit had quietly grown to thirty-three drawings that were invented here rather than drawn by him, so the sheet is the canon again: the top-left face is the default one (two tall oval eyes, each with its brow swept into it, and a small smile), and the other eleven are the wink, the upset pout, the open laugh, the nervous one with its bead of sweat, the angry one, the quiet pleased one, the shocked one, the heart eyes, the wide-eyed surprise, the crying one with its tears, and the smug smirk. Nothing was taken out of the game's vocabulary: every other mood word it has ever asked for now lands on the nearest of the twelve, so every screen still asks for what it always asked for and gets one of Odaroo's faces back. The eyes were also redrawn as tall ovals — the old ones were wider than they were high, which read as a squint on the mascot's own resting face. Every one of the twelve still carries the cheek marks, one solid and one hollow, and the test that proves it now also proves no two of the twelve are the same picture."],["v0.796","THE CARD VIEW HAS ITS WORDS BACK. Tapping a card in the album opened a black screen with nothing on it: the hologram is drawn as an absolutely-positioned layer, its picture frame had never been given a position of its own, so the black glass resolved against the whole cartridge and painted over the name, the energy cost, the stats and the level bar. The frame is positioned now, the glass is smaller than it was, and the card reads like the ones on the booster-pack mat — artwork first, then the act's NAME and a FROM line saying which set it comes from (CHESS, POOL, DICE...), read straight off the album's own folders so there is no second table to keep in step. Every checker and roulette piece has its own name instead of being 'White X' and 'Black X': Chalky and Sooty the checkers, Duchess and Countess the crowned ones, Ivory and Ebony the wheels. The roster is exactly 64 cards now — the blank domino has left the bill. tools/test-card-view.mjs now hit-tests every word on the card and unpositions the frame to prove it can catch this fault again."],["v0.795","ALL 65 PIECES REDRAWN FROM SCRATCH AS LOGOS. This is not the old sprites re-lit - it is a second, purpose-built set of artwork in the new js/holo-art.js, every piece in the game drawn again as a brand mark for the hologram card: one bold white mass with its detail CARVED OUT of it as negative space, never lines drawn on top. Six house rules hold the set together: one 64px canvas, every standing piece on the same shared plinth, nothing thinner than 3 units so the neon bloom cannot swallow it, one angle that says the piece, personality in the proportion instead of added props, and one structural switch to tell pieces apart inside a family - white checkers are hollow, black checkers are solid; solid balls are discs, striped balls are banded. The chessmen are a real set now: an oversized-head pawn, a horse in profile whose mane is a stepped crest in the SILHOUETTE (it took four passes - drawn as dark wedges cut into the neck it read as a duck), a slit mitre, a crenellated tower, the widest coronet in the set for the queen and the only cross in the game for the king. Checkers are 3/4 pucks with milled walls, crowned ones are two stacked. The court cards carry an index and a suit and nothing else, because a playing card is already a finished logo. Dice are 3/4 cubes with carved pips, dominoes stand on end with the bar cut clean through, chips carry their denomination, pool balls have one specular sliver and a huge number roundel, the polyhedra are facet badges, and the spells are pictograms - a coin cut in two, a fallen star, a skull carved into a drop of ink. Proved by tools/test-holo-cards.mjs (every roster card has a mark, every mark carves something, 15 measured spinning at all four fold sizes, two mutations caught) and eyeballed with the new tools/holo-sheet.mjs contact sheet; a missing mark now also fails inkSelfTest."],["v0.794","EVERY CARD IS A HOLOGRAM NOW. All 65 acts' artwork is projected instead of painted: a black screen with a faint projector grid and scan lines, and the game piece itself re-lit as a glowing white neon silhouette that turns a full 360 degrees, for ever, like a holographic trading card from the future. It is not a new set of drawings - each piece's existing pixel art is re-lit on the fly by brightness into three tiers (near-black linework, pale cyan mid, white core), so every eye, die pip, ball number and card index survives instead of flattening into a white blob, and any card added later is holographic automatically. The rarity carries the bloom: cyan for rares, violet for epics, gold for legendaries. Album tiles, the big expanded card, pack rips, prize reveals, deck slots, hand carts and even the drag ghost all get it. The turn is a compositor-only rotateY on a plain wrapper with the glow painted once on the still child - no filter on the moving element, the same rule that fixed the screen transition - plus a thin neon axis beam so a card never reads empty as the plane passes edge-on. Proved by the new node tools/test-holo-cards.mjs at all four fold sizes."],["v0.793","THE MASCOT HAS EYEBROWS AGAIN, AND THIRTEEN NEW FACES FOR THE MOMENTS THAT MATTER. Every expression now carries the signature cheek marks (left solid, right hollow) and every eye is drawn the way the original picture draws it - the brow and the eye as ONE connected shape, sweeping in and coming down to meet the eye, never a floating stroke above it. The resting face had been missing its brows entirely since the face became a layer. Thirteen new expressions: ecstatic, triumphant and laughing for a win; devastated, sobbing and defeated for a loss; locked, beaming, starstruck and unhinged as a four-rung ladder that climbs with your chain; relieved and gasp for a clutch escape; and cocky for running your mouth. They are wired into the live director, so a chain now builds through four faces instead of stepping straight from a grin to stars - and for the first time the win and lose faces are actually FIRED, from the one door every ending in the game walks through, so the result screen finally has something to say. The clutch faces are triggered by reading the shape of the danger curve: a sharp climb is something nearly killing you, a sharp fall is you getting out of it. Also fixed: one of the eight glitch faces was pixel-identical to the ordinary startled face, and the crying mouths read as smiles at portrait size."],["v0.792","THE CARD VIEW IS A CLEAN COLLECTIBLE NOW, AND THE D-PAD WORKS ON IT. Tapping a card in the album used to open a viewer so tall you had to scroll to find UPGRADE — 514px of card inside a 332px window on the folded phone. The act's backstory plate is gone; what is left is the energy cost top-left, the name, the rarity and level, the ARTWORK as big as the screen allows, the stats, and the level-up progress with UPGRADE and CLOSE. The picture is measured to fit rather than guessed at, so it fills a tall screen and gives back only what a short one is missing — it never scrolls at any of the four fold sizes. And the dead D-pad on that screen is fixed: nothing was broken in the controls, there was simply nothing to walk to, because UPGRADE was a disabled button and the dialog cursor skips those, leaving one item and no way to move. UPGRADE is a greyed button that ANSWERS now — it tells you how many carts or how much ink you still need. That is the rule from here on: a dialog never greys out a choice with a dead control. Two new checks ship with it, tools/test-card-view.mjs and tools/test-dialog-nav.mjs, and both break themselves on purpose to prove they can fail."],["v0.791","THE INKLETS ARE ALIVE. The mascot's expressions have been dead since v0.760 — making it a photograph quietly stopped inkletSvg reading its mood, so every ginkFace call in the game did nothing for 27 builds. The face is rebuilt as a layer drawn over the picture, and every expression now carries the signature cheek blushes. On top of that, both inklets react to the match in real time: an emotion director reads each game's own state and picks the face, the sweat and the BREATHING SPEED to match — calm when ahead, faster under pressure, frantic when a stack is one row from the ceiling. Danger outranks a combo, so a huge chain about to top out draws the frightened face. The rival mirrors it: when you are winning they look scared, when they are ahead they get smug, and when you miss they taunt you."],["v0.790","TWO THINGS THAT WERE THROWING YOU OUT OF YOUR OWN RESULTS. First, the bill now holds for five seconds. A match ends while your hands are still mashing A and B, and the very next press used to land on the receipt and hit its HOME button — the run's own figures skipped by an input you aimed at the game. For five seconds after any ending, solo or online, nothing works: not the pad, not the keyboard, not the phone's back button. The way out is hidden and a HOLD ON countdown stands in its place, then the buttons come back. It is done at the one door every ending in the game opens through, so every game got it at once. Second, an achievement no longer takes you anywhere. A badge landing mid-run used to be a door to the badge wall, so a stray tap knocked you clean off whatever screen you were on. Tapping one now opens that badge's details in a window OVER where you are, and closing it leaves you exactly where you were."],["v0.789","CARD BACK, SIMPLER AND BOLDER. The inklet on the back of every card is BLACK now instead of white -- on cream stock a white mark barely showed, and black pops. The contact dots are black too, and there are three of them above and three below instead of five and five, tucked in close to the inklet so the whole back reads as one clean centred column: dots, inklet, dots. Nothing else on the card changed."],["v0.788","CARD BACKS ARE THE CARD'S OWN COLOUR NOW. The back of every Inkville cart was plain black; it is now the same cream stock the FRONT of a card is printed on, flat edge to edge with no grip ridges and no pattern - just the colour everywhere. The white inklet silhouette stays exactly where it was, dead centre between the two rows of contact dots, and is 20% bigger on both the big pack-reveal carts and the small album tiles."],["v0.787","THE CONNECTING ROULETTE'S EMPTY SQUARES — and it was the COLOUR, not the shuffle. v0.786 correctly stopped the roulette re-parsing an SVG every 85ms, but that was the wrong half of the fault, which is why Odaroo still saw empty squares and flickering while connecting to ALPHA, BETA and OMEGA. The mascot has been a painted PNG since v0.760, painted ONE COLOUR AT A TIME the first time anything asks for it, and the game warms exactly one colour at boot: the player's own. The roulette rolled its silhouettes from all 32 colours, so NINE OF THE TEN were built in a colour that had never been painted — and an unpainted drop is a full-size but PICTURELESS box. Measured: 9 of 10 silhouettes blank at mount, and the player was shown a literally empty square on 4 of 226 rendered frames. It happened 'at times' because it depended on which colours got rolled and how far the lazy painting had got. The roulette silhouette is BLACK anyway (brightness(0)), so its colour was never visible and rolling one bought nothing: every frame is now built in a colour that is already painted, the outfit/face/shiny variety you can actually see is untouched, and the shuffle is additionally fenced so it can only ever land on a frame that HAS a picture. The same trap was hitting the REVEAL — a rival's colour comes off the wire and is usually one this machine has never drawn — so their colour now starts painting at the top of the handshake and is put into the portrait when it lands. tools/test-roulette.mjs now drives the REAL crOnlineConnect screen and watches the frame actually showing, every rendered frame, at all four fold sizes; it mutates the random colour roll back to prove it can fail."],["v0.786","The screen change no longer stalls. Every transition was a vector ink-splat blown up 42x, which the browser had to redraw at full screen size on every single frame, so moving between screens froze on black for almost a second with only the D-pad showing. It is now a Persona-style diagonal slash made of plain coloured boxes that only slide, so it is over in 0.42s and costs nothing. The rival on the CONNECTING screen no longer flickers as it shuffles: every possible silhouette is now built once, up front, and stacked, so the shuffle just fades between pictures that are already there instead of tearing one out and drawing a new one 12 times a second. Rival inklets also stopped looking full of holes -- a rare branch was piling all 15 pieces of gear onto one bot, and the gaps between the outlying pieces read as gaps in the inklet; a bot now wears at most one thing per body zone. The glitch effect was rebuilt as a proper channel split instead of a hue spin, so it no longer blinks its shadow. The 'GET READY TO PRESS A' line under the countdown is gone from every game. And the challenge dialog, the colour picker, the skater picker and the legend offer can all now be walked with the D-pad and taken with A, so nothing in the game needs a touchscreen."],["v0.785","Transition fix: replaced SVG ink-splat wipe with compositor-only diagonal slash (three solid boxes, translate3d+skew, 0.42s). No more black stall on Fold 8. Added tools/folds.mjs with all four test viewport sizes."],["v0.784","INK-TAR's frets are the tall ones now — 96px, and the neck was raised the same amount so notes are never drawn behind the buttons. The A and B buttons are back to 72 on every other screen (v0.779 had grown them everywhere). New check tools/test-ith-frets.mjs proves both sizes and the clearance at both folds. The Panel-Ink bot wearing your own inklet, and the match clock starting more than once, were both fixed in v0.780 and re-verified here."],["v0.783","The browser tab now wears the app's own logo. The neon cartridge with the ink drop inside it - the same mark you see on your home screen when you install Inkville - is now the little icon in the browser tab too. It is not the home-screen picture shrunk down: that was the old trick and it turned the pixel art into a smudge. The mark is redrawn properly at 16, 32 and 48 pixels, plus a real favicon.ico at the site root for the browsers that go looking for one on their own."],["v0.782","INK-TAR HERO AND DANCE DANCE INK NOW WEAR THE SAME ONLINE HUD AS EVERY OTHER GAME. The bespoke information bar that used to run across the top of both rhythm duels is gone. In its place is the layout Tetr-Ink, Panel-Ink and Disc-Ink already use: both usernames on one film reel, yours top-left and the rival's top-right, with a health bar hanging directly under each name at exactly the width of that name's reel, and each inklet under its own bar. Your score, combo, max combo and best sit under your inklet on the left; the rival's score, combo and max sit under theirs on the right. The little window that used to show the other player's board in miniature is deleted outright — it cost a third of the column and told you almost nothing — so the screen belongs to your own arrows, which are centred between the two columns and are the only thing on the playfield. One clock, the house's own, in the middle of the reel."],["v0.781","THE BROWSER TAB WEARS THE CARTRIDGE AGAIN. The tab icon kept flicking back to a white inklet a moment after every page load, and it survived clearing the cache and even incognito - because it was never a cache at all. A leftover line in js/rink.js was rebuilding the icon 500ms after boot from the inklet wearing every piece of gear, stamping over the real icon the page had already loaded. That line is gone, and the note left in its place says why, so nobody 'restores' it later as a fix. The tab now shows the one true mark and keeps it: the neon cartridge silhouette with the ink drop inside, the same object that slides down the screen when the game powers on."],["v0.780","THE BOT WEARS ITS OWN FACE AGAIN. Panel-Ink and Tetr-Ink were both painting the rival's corner portrait from a field that has never existed on either match object, so the rival fell through to a rolled face — or to no look at all, which the face lens then repaints from YOUR inklet. That is the bot showing your own drop back at you. Both call sites are fixed, and vsFoeInk now asks the live match who it is playing before it rolls anything, so a game that forgets still draws the right rival. THE CLOCK IS STAMPED ONCE, AT GO, AND NOTHING MAY MOVE IT AFTERWARDS. Time zero is written by eight places in the game and every one of them is right while a run is being set up; any of them firing again mid-match sent the header back to 00:00 and took the bill's duration with it. A splash opens the latch, GO shuts it. THE GLOBAL A AND B BUTTONS ARE BACK TO 72px. What wanted to be taller was INK-TAR HERO'S OWN frets, so that is where the height went — 50 to 68, with the neck above them raised by the same amount so the notes are never drawn behind the buttons. A side effect worth having: the INFLATE label is no longer buried under the D-pad on the unfolded screen."],["v0.779","EVERY ONLINE BILL IS A VERSUS BILL NOW, ON THE SAME LINES. All six online games print your figure and the rival's on the one row — Ice-Ink's floors cleared, Tetr-Ink's lines and junk, Ink-Put's drain, Panel-Ink's junk, and the rhythm games' notes hit, max combo and ink. The rival's name moved into the subtitle as the legend and the old BEAT / WINNER row came off, so the card carries MORE information on FEWER lines. A DROPPED SUSTAIN NO LONGER BREAKS YOUR COMBO. You pressed the right note and the game counted it; letting go early now costs you the tail's points and nothing else. Only a real miss breaks the chain. THE COUNT-IN TELLS YOU WHAT TO PRESS. A small line under the 3-2-1 names the one control that matters on that screen — GET READY TO PRESS A on Panel-Ink, Tetr-Ink and Ink-Put, GET READY TO PULL BACK on Disc-Ink, GET READY TO SLIDE on Ice-Ink. A AND B ARE TALLER, NOT WIDER. The two face buttons grow 72 to 96 in height only, so they are easier to hit in a narrow space without pushing in over the playfield."],["v0.778","TWO D-PADS ARE ONE LINE, MIRRORED, EDGE TO EDGE. Every game that puts both thumbs on a pad now draws the two crosses on the same horizontal line, the same size, flush to the left and right glass. The right-hand pad had quietly fallen 44px out of step with the left one — it was missing the global lift and the phone's gesture-bar inset from its own arithmetic — so the pair only ever looked level on a desktop. THE RHYTHM DUELS NOW SAY WHO WON AND WHY. A Dance Dance Ink or Ink-Tar Hero match is decided on NOTES HIT first, score second, and the bill prints yours next to theirs: notes hit, max combo and ink, all three as YOU / THEM. DANCE DANCE INK IS TAPS ONLY. Every held arrow is gone — a freeze asks one thumb to stay down while the other works, which is not a hard step on a phone D-pad, it is an impossible one — and a beat may never ask for a third arrow. INK-TAR HERO KEEPS ITS SUSTAINS BUT STOPS PILING ON: while two of them are running, nothing new is spawned in between."],["v0.777","THE INKLET ON THE CARD BACK IS HALF THE SIZE. Odaroo asked for it smaller so it reads as a little maker's mark rather than the subject of the card: the white silhouette on every card back is now 50% of the width it was, everywhere it appears — the album's uncollected slots, the cards waiting to flip in a pack, and the big reveal. Nothing else about the back changed."],["v0.776","THE CARD BACK NOW WEARS THE INKLET. Every uncollected album slot and every card waiting to flip over used to show a generic white ink drop on the black cartridge back; it now shows the inklet's own silhouette in plain white — the same measured outline as the mascot on the PNG, so the back of a card is unmistakably one of ours. Nothing else about the back changed: still black, still the contact dots top and bottom, no lettering."],["v0.775","THE D-PAD MOVES EVERYWHERE. The 44px-up / 8px-left shift that was on the home carousel alone is now on every screen and every game — one position, one feel, no exceptions. Where a playfield or a label was built around the old floor (INK-PUT, INK-TAR's INFLATE) the cross now sits over it; that is the experiment Odaroo asked for, and both are banked as accepted so the pre-flight will not fight it. Revert is two numbers."],["v0.774","D-PAD EXPERIMENT — on the home screen only, the D-pad cross now sits about 44px higher and 8px further left, so Odaroo can feel whether a higher cross reads better under the thumb. Nothing about its style, size or colours changed, and the A/B buttons and SELECT/START have not moved at all. The pad's own box grows by the same amount it was lifted, so nothing on the carousel is covered. The lift is deliberately scoped to the home screen: applied everywhere it buried INK-TAR HERO's INFLATE label under the cross and pushed INK-PUT's playfield onto the controls, which the pre-flight caught, so every game keeps the floor it was built to. Both folds self-test clean."],["v0.773","EMERGENCY FIX — THE INTRO IS BACK. The cold open (the TAP TO LOAD cartridge, the ODAROO & CO. studio card and the INKVILLE title screen) had been skipped on every single load since v0.766. That build added a warm-resume shortcut meant to fire only when Android throws the backgrounded app away, but the test it used was simply 'was the game alive less than three minutes ago?' — and the game stamps that clock every five seconds, so the answer was yes after any reload, refresh or re-open. The shortcut is retired outright: an OS discard and somebody closing the app look identical to a browser, so there is no version of it that cannot steal the intro. The intro is the front door and it always plays now. A new check, tools/test-cold-open.mjs, drives the real page at both folds in every state that used to skip it and puts the old rule back to prove it can fail."],["v0.772","OCTATHON — the vault turns into a negative. The last game on the bill is now visible from day one and printed inside out: a WHITE room with a BLACK cartridge turning in it under the red curtain, its name in black, and the chains and padlock laid over the top so it still reads as shut. The logo is a plain stop sign now — the star has been knocked out of it. OCTA-THON is renamed OCTATHON everywhere the player can see it. And tapping it while it is still chained no longer mutters a notification: it plays a full-screen message, printed in the same negative — THE VAULT IS SEALED, THIS GAME IS ONLY PLAYABLE WHEN ALL GAMES HAVE BEEN UNLOCKED, and how many games are still chained."],["v0.771","THE ALBUM'S EMPTY SLOTS ARE THE BACK OF THE CART NOW, NOT A WALL OF QUESTION MARKS. Every card you have not collected yet shows the same card back that flips over when you pull one from a pack — black, one white ink drop, the little contact dots top and bottom — and the cartridge is genuinely turned over with it: the notch that sits on the top RIGHT of a card you own moves to the top LEFT on a card you don't. Same size, same shelf, so the album reads as a row of face-down carts waiting to be found instead of thirty question marks shouting at once. Tapping one still tells you what rarity it is and where to find it."],["v0.770","THE ALBUM IS ONE LONG SCROLL NOW, LIKE THE BADGE WALL. The nine family TABS are gone: every card in the game is on one page, separated by category headings (CHESS, CHECKERS, ROULETTE, SUITS, SPELLS, RANKS, DOMINOES, POOL, DICE) with each family's tally on the right. Every card you have collected but never actually looked at wears a RED DOT, and the heading of the family it is in says how many are new — so you scroll down until you see the dot instead of hunting behind nine tabs. Opening a card shows its full artwork and backstory and puts that one dot out, and the red count on the ALBUM poster on the home screen counts down with it. Walking into the album no longer clears everything at once, which is what used to make the home screen's dot a promise the album could not keep."],["v0.769","NOTIFICATIONS: letters only, and nothing is cut off. The badge card resizes ACHIEVEMENT UNLOCKED! down until it fits in one sitting on the folded phone instead of ending in three dots, and a long badge name now takes a second row rather than being clipped. Every message is filtered at the door by a whitelist, so music notes, stars and any other decoration can no longer reach the glass from any of the game's ~200 messages; the notes on the gig line and the rink's song titles are gone. A message written as a label and its value (GIG COMPLETE: THE MIDNIGHT SET) now breaks into the two lines it always should have been: GIG COMPLETE! over THE MIDNIGHT SET."],["v0.768","THE GLITCH CROWN'S WEATHER, TONED WAY DOWN — NO RAIN, JUST WHAT IT LEAVES ON THE FLOOR. The falling rain is gone entirely: nothing is drawn in flight any more, and the splashes no longer come from drops landing — they simply arrive on their own quarter-of-a-second clock at a random spot, which turns what used to be a side effect of forty-odd landings a second into one number that can be read and tuned. What is left is the part Odaroo liked: the expanding floor splash. There are half as many (thirteen on the glass at most, down from twenty-six, and about four at any moment), each one is LARGER (the ring opens out from 8px to about 35px instead of blinking at 6-14px), and every single thing the layer paints is capped at 50% opacity — the clear splashes and the hue-shifting ink stains alike, and each one now ebbs away instead of vanishing at full strength. The screen inversion is halved for the third time: the quiet gap between bursts is 3.4 to 9.4 seconds (was 1.0 to 4.8) and the burst itself is shorter, so an inversion lands about every six seconds and is on screen under 6% of the time; the crown's bonus on the ambient glitch is down to 1.15x with its follow-up firing one time in eight. The five looks themselves are untouched — it is the frequency that was the problem, not the character. New proof: node tools/test-glitch-crown.mjs drives the real weather loop by hand for a simulated two minutes with the crown really on, at both folds, watching every arc and every alpha the canvas actually paints, and mutates the falling rain, the old 26-splash cap and the old inversion gap back to prove each check can fail."],["v0.767","THE INKLET'S CUTOUT IS CLEAN. A thin vertical line of leftover grey pixels was still sitting in the far-right column of sprites/inklet.png - 128 pixels the original flood-fill never reached, in seven little runs down the edge - so the mascot carried a faint moving line beside it wherever it bounced. Everything that is not the drop itself is now gone (the picture is one connected shape and nothing else), and the canvas size is untouched so every wardrobe coordinate still lands where it did. The mascot is also asked for with the build number on the end now: the picture was cached for a year with no version on its address, so a fix to the PNG would never have reached a phone that had already seen it, and the offline cache learned to answer for sprites the same way it already did for icons."],["v0.766","COMING BACK IS NOT BOOTING. Minimising the game, or pulling the notification shade down to start a screen recording, was coming back to a black screen for five to ten seconds. Android was throwing the app out of memory while it was in the background, so returning to it was a full reload — and a reload played the whole cold open: the black cover, the TAP TO LOAD cartridge, and the studio card after it. Now the game stamps the clock every few seconds while it is running, and a page that loads within three minutes of that stamp skips the cold open entirely: no black cover at any point in the load, straight back to the home menu with the controls live. Sound waits for your first touch, because a phone will not let a page make a noise until you have touched it. A genuinely cold start, or one the next morning, still gets the full Odaroo & Co. opening exactly as before. Proved by a new tools/test-warm-resume.mjs, which watches the entire load at both fold sizes and breaks the fix on purpose to prove it can fail."],["v0.765","COLOUR 16, THE GLITCH INK, ACTUALLY CHANGES COLOUR AGAIN — AND SLOWLY. The glitch ink moves by one mechanism, a hue-rotate written onto every glitch drop from one shared clock, and a hue-rotate cannot move a grey: since the mascot became a photograph in v0.760 it was being painted the colour wall's own near-white #f4f4f7, so the wheel was spinning correctly on a colour that had nothing to spin and the drop just sat there white. It is painted a saturated tone now (inkPaintCol, js/core.js — the one place every path resolves a colour, so the screen and the saved share card can never disagree), while the wall's swatch stays a plain white dot on purpose. The drift is much slower: a whole trip round the colour wheel now takes 18 seconds instead of 2.2, about 20 degrees a second, so you can watch it change and never catch it flickering. And the old constant 1px twitch is gone: the drop is perfectly still for about six and a half seconds out of every seven and then tears for four tenths of one — a few frames of displaced pixels, a cyan/magenta split and the scanlines dropping out, all off the same shared clock so every drop on the screen tears on the same frame. New proof: node tools/test-glitch-ink.mjs measures the real painted picture, demands the wheel actually moves its colour, times the drift, counts the tears over a full minute, and mutates the old near-white paint, the old 2.2s strobe and the old non-stop twitch back to prove each check can fail."],["v0.764","THE WARDROBE IS BACK ON. v0.760 turned the inklet into a photograph and every hat, every pair of glasses and all sixteen costumes quietly went with the old drawing. All 32 pieces are now redrawn as a layer that hangs on the picture itself, in a new module js/wear.js. Every one of them is anchored to landmarks measured straight off the mascot — the two pupils, the flat crown of its head, the point that leans right, the smile, and the whole silhouette row by row — so the shades really sit on the eyes, the monocle rings the right one, the eyepatch covers the left, the moustache sits above the smile and the top hat sits on the crown rather than near it. They are drawn at HALF the mascot's own pixel, so each piece has folds, shading, trim, rivets and highlights instead of three flat boxes. Everything can be worn AT ONCE and each piece has its own lane: the cloak, the wings, the vampire collar, the slung cowboy hat, the devil's tail and the diver's hose all hang BEHIND the drop; the flight goggles are pushed up onto the forehead so the sunglasses can have the eyes; and the hats stack — a top hat with a chef's toque on it and a halo hovering over the pile, each one landing on whatever is actually underneath it rather than floating where a missing hat would have been. Anything worn low now follows the measured outline, because the drop narrows fast and straight bands used to hang in mid-air below the chin. Clean self-test at both fold sizes."],["v0.763","DISC-INK NO LONGER GLITCHES BETWEEN TURNS. Odaroo's recording showed the screen flickering and resizing at every turn handover in an online match, and it turned out to be two faults sitting on top of each other, both in the corner portraits. First: now that the mascot is a photograph inside its frame, every change of expression was throwing the whole portrait away and building a new one — so the picture had to be loaded from scratch again and the face went blank for a moment while it did. That was happening twice a turn, on both corners. The face is now swapped over while the picture itself stays exactly where it is, which makes every other game's inklet steadier too. Second: the losing corner's little wince shrank that portrait by a fifth and then SNAPPED back to full size in a single frame — that jump is what read as the screen resizing. It now eases back the same way it eased in, and the flinch is half as deep. A new check plays a real online table at both fold sizes and proves both, and breaks each fix on purpose first to prove the check can actually fail."],["v0.762","THE INKLET SITS IN THE MIDDLE. Odaroo: the last build over-corrected — the mascot went from almost touching the LEFT of its frame to almost touching the RIGHT. Its viewBox is now the exact arithmetic average of the two: the film-centred box it had before v0.761 and the eye-centred box it got in v0.761. Its margins inside the frame are near even on every side (dead even top-to-bottom), on every frame, every game, every animation, every item, the HUD portrait, the profile, the VS screen, the victory card and the saved share PNG — because all of them draw the one mascot through the one viewBox. tools/test-inklet-centre.mjs now aims at that midpoint and mutates to BOTH old boxes to prove it still catches either lean."],["v0.761","The Inklet is centred on its EYES now, everywhere. The mascot picture is 901px wide but the drop only fills 768 of them, so drawing it with a whole-file viewBox centred the FILM and left the face sitting 11% left of centre in every frame in the game — the lean Odaroo photographed on the title screen, the HUD and the result cards. The viewBox is measured off the pixels now (INKLET_VB) so the two eyes land dead-centre, and the frames shrink it about its own middle instead of the old drawn sprite's 62% anchor. The win/lose curtain call is just the frame and the Inklet: the paper coin that was clipping the mascot into a circle behind its own ring is gone, along with the bounce and the wobble. And the saved share picture has the Inklet in it again — an SVG-as-image cannot fetch a blob: url, which is what every drop became in v0.760, so the capture inlines them as data: urls now. Proved by tools/test-inklet-centre.mjs at both folds, which mutates all three back to prove it can fail."],["v0.760","THE MASCOT IS THE PICTURE NOW. sprites/inklet.png landed in v0.758 with inkTint() to paint it, and then nothing in the game ever asked for it — every screen was still drawing the old procedural pixel drop, which is why a reset changed nothing. inkletSvg() — the ONE function all ~97 call sites come through — now returns the photograph, painted in the player's chosen colour (white by default) and cached as a short blob URL so twenty inklets on a screen share one picture instead of carrying a copy of it each. It breathes and hops on a CSS squash-and-stretch rather than a sprite sheet. The old drawing kit (moods, 30 costumes, hats, the four facings) is retired intact as inkletSvgLegacy and referenced by nothing. The picture is also cached for offline play now."],["v0.759","THE MATCH CLOCK NOW STARTS ON GO! The timer used to begin the moment a game announced itself, so the 3-2-1 countdown was billed as time played and the number saved onto the result card was too long. It is now re-stamped at the exact instant the count reaches GO, in every game, solo and online: the shared 3-2-1 that Crown, Ink Panik, Tetr-Ink, the rink and all five online games walk through, and the two rhythm games' own count-in (which also stops the record shelf and the roulette from being billed as part of the song). New proof: node tools/test-clock-at-go.mjs plants an old stamp, runs the real countdown at both folds, and demands the clock come back to zero -- and puts the old behaviour back to prove it can fail."],["v0.758","New inklet mascot: transparent PNG cutout + color tinting system for player customization"],["v0.757","Ice-Ink: fixed scaling consistency between stages, removed floor number, centered rink on screen"],["v0.756","The studio splash is a full second shorter: the tiles land 32ms apart, the three flips are quicker and start sooner, the inverted line holds .7s, and the stand on the finished mark is about a second — 3.4s end to end instead of 4.4s. Same beats, same order, just tighter."],["v0.755","The studio grid now stands exactly where the title inklet is about to stand — measured off #titleAce, not tuned — so the two screens are registered to each other; and the way out is a clean dissolve: the white backlit flash and the glitch wipe are both retired, leaving only the splash's own 900ms fade onto the title."],["v0.754","Removed old v0.315 splash screen remnant — only current Odaroo & Co intro plays on boot"],["v0.753","The nine tiles ARE the logo: the ODAROO & CO. line that was spelled out under the grid is gone from the splash, because the grid already reads it."],["v0.752","Tetr-Ink online: removed stray Panel-Ink cursor from opponent's falling blocks"],["v0.751","The studio card's hold after the tic-tac-toe line is a second and a half now instead of three seconds — the same beat, just tighter on the way into the title."],["v0.750","Splash screen holds for three full seconds after the tic-tac-toe line inverts, so the Odaroo & Co. mark gets to breathe before the title; the music now starts at the end of the animation instead of riding the flash, so the extra wait is not silent."],["v0.749","Splash screen: removed lightbulb/target, 25% larger grid, tic-tac-toe diagonal Os spin green sequentially with glitch invert flash"],["v0.748","NOTIFICATION DOTS NOW LIVE OUTSIDE THE ARTWORK. Odaroo almost missed a notification because the red dot was tucked INSIDE the corner of the square instead of sitting on top of it. Three things were wrong and all three are fixed: the pip was offset a flat -4px (so 9 of its 13 pixels were inside the picture), it rode at z-index 0 (so anything else on the tile painted over it), and the ALBUM and MART posters were overflow:hidden — they were CUTTING THEIR OWN BADGE OFF at the corner, so it could never have escaped however it was positioned. Every badge in the game is now a phone-icon badge: its centre sits on the tile's corner, half of it hangs off the tile entirely, and it wears a cream ring so it reads on the tan wallpaper and on the act's pitch-black stage alike. The offset is arithmetic now (half the pip plus the tile's border) rather than a hand-typed number. The act's own badge moved to the top-RIGHT because the inklet's portrait was sitting on the top-left corner of the carousel at both folds. tools/test-notify-badges.mjs grew a fourth section that measures the overhang, the clipping and the paint order on every badge on the boulevard, and mutates both the old offset and the old clip back to prove it can fail."],["v0.747","NOTIFICATIONS NEVER CUT A WORD OFF, AND THE HEADLINE NEVER SHRINKS. If a detail line will not fit on one row it now takes a SECOND row of the same film at the same size and the sign simply gets taller - the three dots are gone from every message in the game. And line one is now the same size on every notification you will ever see: when there is too much to say it is only the detail underneath that comes down, and only after the cheaper moves have been tried (tighten the letter spacing, then take another row, then shrink the detail to an eleven pixel floor, and if it still will not fit it wraps on rather than hiding anything). Both of those reverse rules this project has carried for a dozen builds, so the pop-up test now measures the headline against the strip's own size and puts the old ellipsis back on purpose to prove the check can fail."],["v0.746","Every notification is now ONE sign: both lines the same font, the same size and the same colour, and the subject line always ends in an exclamation mark — CHEAT CODE UNLOCKED! / NEW CARD UNLOCKED! / ACHIEVEMENT UNLOCKED! — with the detail underneath. The badge card matches the strip exactly. Online challenges: the game no longer announces that somebody accepted — pressing YES puts you straight on the connecting stage and the rival simply arrives out of it, and the whole 56K handshake is now five seconds instead of nearly nine. If nobody answers, the spinning silhouette stops on a still, shadowed inklet and says UNAVAILABLE, instead of the dashed empty circle."],["v0.745","THE STUDIO SPLASH, TWO MARKS. Odaroo's original bulb-on-target logo is back on the boot card, standing on the TITLE INKLET'S OWN BOX — measured off #titleAce live underneath the splash, so the target's rings are exactly the contour the inklet fades up inside a moment later, on both folds. The nine-tile ODA/ROO/&CO. grid and the ODAROO & CO. wordmark are now HALF the size they were and hang underneath it; the animation is untouched."],["v0.744","THE ALBUM'S CARD MESSAGES ARE TWO LINES, AND NOTHING LANDS ON THE INKLET ANY MORE. 'White Queen LEAVES THE...' was being cut off because a card name plus a sentence cannot fit one row - the card's name is line one now, in capitals, and what it did is line two: WHITE QUEEN / LEAVES THE STAGE, and the same for joining the troupe, stealing a spot, already on the bill and switching decks. And the real reason messages looked like they were sitting ON the top bar: the inklet's own portrait is 92px centred on that bar, so it hangs about thirty pixels BELOW it on every screen in the game, and a message measured against the bar alone was parked across the bottom of your own face. The portrait is measured as top furniture now, so every message and every achievement card hangs below it - proved by removing the fix and watching six screens fail."],["v0.743","NOTIFICATIONS: TWO LINES, SMALLER TYPE, AND NEVER ONE ON TOP OF ANOTHER. Every message the game says is strictly two lines now - line 1 names what happened, line 2 is the detail - and a message about a person breaks after their name, so 'ODAROOOOOO' sits on the first line and 'HAS ACCEPTED YOUR CHALLENGE!' on the second instead of running off the edge of the folded phone. The whole strip is 80% of the size it was (it was too big), the badge card came down with it, and nineteen messages that were simply too long for one row at any readable size were re-worded so they fit without shrinking. And two pop-ups can no longer share the same piece of glass: whichever arrived first keeps the top slot and anything that lands while it is still up - including an achievement card - hangs underneath it, closing the gap again when one leaves."],["v0.742","The clock on the result card and the clock in the HUD are now the same number, always. The header read 00:21 over a bill reading 0:22 because one floored the seconds and the other rounded them, and because four games kept a second clock of their own — Tetr-Ink, Panel-Ink, OCTA-THON and Ice-Ink each measured the run from a different instant. There is one clock now: the run's length is captured once, at the ending, the header plate is re-stamped with that exact figure, and the bill prints it rather than taking its own fresh reading. Also fixed the TIME 0:00 that turned up on Ink-Tar Hero: the clock's own ticker was declaring a run FINISHED the moment the screen stopped looking like an online match — which on a solo game is half a second after the splash, so the record shelf ended your run before you had picked a song. A menu is no longer an ending, and the two rhythm games start their clock with the record rather than with the game, so TRACK 2 is timed as its own song. And the victory and defeat cards have lost their flanking stars and the INKVILLE in front of the game's name: the masthead now just says INK-TAR HERO. New proof in tools/test-endcards.mjs — it plays every game to a real finish, compares the header against the bill, walks the record shelf, and reproduces the 0:00 when the fix is taken out."],["v0.741","CATCH-UP SHIP. The result card reads THIS run's time, not the last one's. Every bill — Tetr-Ink, Ink Panik and the shared run card — used to grab TIME about 700ms before the receipt was actually drawn, which is earlier than the moment the run officially ends, so a card could print the PREVIOUS game's duration (a Tetr-Ink bill wearing Ice-Ink's five seconds). The figure is now read where the card is drawn, and the banked number carries the run's own start stamp as a token: same run, or the number is not ours."],["v0.740","DANCE DANCE INK AND INK-TAR HERO NOW FOLLOW TETR-INK. One set of arrows (and one neck) is the main event, filling the screen; everything else moved into a left-hand column — your inklet, SCORE, COMBO, MAX and BEST — and in an online duel the rival's board sits under them in miniature with their own COMBO and MAX, exactly where Tetr-Ink puts the rival's well. Solo and online are now the SAME shape: going online no longer halves your playfield. The rival's board syncs in far more detail — every lane they press now travels (they used to arrive one per poll, so bursts were silently dropped) and their best combo comes over the wire too. Solo announces itself as STAGE 1-1 and names the record it shuffled you. And a new game-wide rule: EVERY notification is two plain lines — the announcement, then what it was — with no stars, no rules and no decoration anywhere, badge cards included."],["v0.739","A CATCH-UP SHIP. Everything sitting on the desk since v0.736 goes out together. The headline fix: the match TIME on a result card could read as tens of millions of minutes — the run's start stamp was being squeezed through a 32-bit integer, and a millisecond timestamp does not fit in one, so it wrapped. It is read as a plain number now and the duration on every bill is honest again. Alongside it, the batch of carousel, profile, album and online-screen work that had been finished but not yet published — the tile furniture, the wardrobe and the lobby screens all move together. Ink-Put's wave overhaul from v0.736 is unchanged and still live: six kinds of wave, the 4/8/16/24 arrow grid, the 24-BIT challenge, the pendulum and the re-simulated bots."],["v0.738","NO MORE STARS, A CLOCK THAT CANNOT LOSE YOUR MATCH, ONE FILM REEL EVERYWHERE, AND NOTIFICATIONS YOU CAN TAP. Every star is gone from the game's words. The one on the victory screen came from a single line that was quietly flanking EVERY result card in the game with stars, so pulling it fixed all of them at once; 56 more were stripped from unlock messages, cheat calls, shop confirmations and prize labels. The only stars left are the ones that mean something: the star RATINGS in the rhythm games, the SHOWSTOPPER meter, and the little rarity marks that sit beside the diamond. The match clock stops losing your match. A bill reading TIME 0:00 after a forty-second game had been fixed twice and come back twice, because there are three different ways a game ends and each one tore the clock down differently - and a LOSS never froze it at all. The length of a match is no longer kept with the clock: it is stamped when the match starts and only ever overwritten by the next match, so whatever the ending does, the bill still knows. Every notification in the game is now two plain lines, always: the first says what happened, the second says what it was. No stars, no symbols, no decoration, and a thinner strip. Where the game only had one thing to say, it now says it in the house's own words - HOLD ON, ALL DONE, HOW IT WORKS - so the same kind of message reads the same way everywhere. Long messages shrink to fit instead of being cut off. The badge card had been saying CHEAT CODE UNLOCKED every time you earned an achievement; it says ACHIEVEMENT UNLOCKED now, in bigger type. And notifications are doors: tap a NEW CARD! and you land in the album with that card open on its full artwork and backstory; tap a badge and you land on the badge wall with that badge open. Finally, every strip of film in the game is the same film. The notification strip was printing wider holes in a warmer white than the bar right above it, and the credits reel was drawing dark holes at twice everyone else's spacing. There is one gauge now and every reel pulls from it."],["v0.737","SHOWSTOPPERS: two fixes Odaroo asked for. LUMEN INK can now be TURNED — under the dual D-pad dress there is no A or B button on the pad, and Lumen's only rotate was A/B, so the one showstopper that cannot be played without turning the block had no way to turn it. The right-hand D-pad now spins it: right/up clockwise, left/down anticlockwise, while the left pad still moves and drops. And EVERY showstopper now fits the stage: the window each mini is drawn into is measured on the way in, on every fold and after the game chip goes on, and the board — Ice-Ink's rink, Panel-Ink's panels, Disc-Ink's felt, Lumen's well, Tetr-Ink's well and both rhythm highways — is sized to the room it actually has and centred in it, instead of the fixed guesses that let Ice-Ink run off the bottom of a short screen. New proof: tools/test-showstopper.mjs walks all eight minis at both folds in a deliberately cramped stage and mutates the fix away to prove it can fail."],["v0.736","INK-PUT IS A WAVE MACHINE NOW. Every wave is drawn at random from six kinds of pressing and the run gets steadily meaner. ARROWS come in groups of 4, 8, 16 and 24, always four to a line: most waves open on one big row of four and grow a new row the moment you step into it, some show you the whole board up front, and some show you nothing ahead at all — one arrow at a time, pure reaction. The A and B buttons disappear during an arrow wave and the pad gives you two D-pads instead. THE 24-BIT CHALLENGE turns up every so often: twenty-four arrows, eight is safe, sixteen pays a bonus, and all twenty-four pays more again and hands over the 24-BIT frame. RAPID FIRE now tells you which button it wants on a big square — either thumb early on, then A only, then B only, then the two alternating. THE FILL BAR fills one way and you press when it is full, or it overcharges and you lose the wave. GREEN LIGHT is a lamp and a visible timer: press A in the window it shows you, and jumping the gun costs you. THE PENDULUM is back — sixteen swings over a circle, catch at least eight, HP for every one you catch, and one version of it glitches the record faster and faster with every hit before settling back on the next wave. Harder waves pay more HP. The bar drains gentler at the start and harder deep in, so a good run lasts a lot longer and gets a lot nastier. And the three bots were re-simulated rather than re-guessed: ALPHA now genuinely falls over on its own, BETA is a real race, and OMEGA is the wall it was always meant to be — its old settings were quietly making it the EASIEST of the three to outlast."],["v0.735","THE DOWNLOADED FRAME IS NOW THE INKVILLE CARTRIDGE, IN ORBIT. The little pixel download arrow that used to sit pinned at the bottom of the frame is gone. In its place the game's own cartridge — the same one from the boot screen, with the ink drop inside it — travels all the way around your inklet like a moon, and turns in 3D on its own axis the whole time it goes. The ink drop hangs dead still and square-on inside the turning shell, so the brand mark always reads clean. The cart is sized as a fraction of the ring, so it looks right on a tiny HUD portrait and on a big shop tile alike."],["v0.734","The main menu's carousel gets three fixes. The 'GAME READY TO UNLOCK' plate has left the top-left corner, where a loud frame or costume on the act could run under it and cut it off; it now sits in one evenly spaced row along the top right with the '?' and the 2x, on the same line, with matching gaps between all three. The act's stage stays PITCH BLACK at all times: putting the cursor on ALBUM, MART or GIGS used to fade the whole carousel a little, which on a black tile just read as the stage turning grey. And when the cursor IS on the carousel, the entire perimeter of the tile is now ringed in gold with a soft glow, so it is obvious at a glance that left and right will walk you through the games."],["v0.733","The nine studio tiles are corrected to Odaroo's own spelling and set in full capitals: O D A / R O O / and CO. on the bottom row, with the ampersand leading it and the full stop hung small off the last O so all nine letters stay one size. The wordmark underneath now reads ODAROO & CO. to match, re-measured to sit on one line at both fold sizes."],["v0.732","The studio splash is a new logo: 'Odaroo & Co' is nine characters, so the mark is those nine characters as a big 3x3 block of chunky pixel tiles - O d a / r o o / & C o - snapping in one tile at a time, with ODAROO & Co spelled out large in the 8-bit font directly underneath. The grid and the words are one mark now, centred as a pair on the screen; the old bulb-on-target PNG and the small studio label it replaced are retired from this screen."],["v0.731","MATCH TIME IS RECORDED PROPERLY AGAIN. Odaroo finished a 40-second online Panel-Ink match and the result card said TIME 0:00. The clock on screen was right; the bill was not. The reason: the moment a game ends the clock is FROZEN so the final figure stays on screen — and freezing wiped the only record of when the match started. Every result card in the game asks for the duration AFTER that, so every one of them was asking a clock that had just been erased. The elapsed time is now BANKED at the instant the clock stops, in the one place all nine games freeze it, and the result card, the ledger and the SHARE screenshot all read that banked figure. Solo and online, Panel-Ink through OCTA-THON. A second ending on top of the first (a forfeit after a loss) can no longer overwrite it with zero either. tools/test-endgame.mjs now proves it at both folds and breaks it on purpose to prove the check works."],["v0.730","BUBBLES NEVER PRESS WHAT IS BEHIND THEM. Tapping a floating ink/reel/star bubble now ONLY pops the bubble — if it was drifting over CANCEL, SAVE IMAGE, HOME or any other button, that button is not pressed. Tap the same spot again, with the bubble gone, and the button works normally. Every part of the tap is swallowed at the window (the click at the end of a press was the leak — all three bubble spawners were only stopping the very first event), so it holds everywhere bubbles appear: the connecting screens, the lobby, the victory and defeat screens, and the drops on the game screens. New proof: node tools/test-bubble-tap.mjs, which presses a real bubble parked over a real button at both folds and breaks the fix on purpose to show the check can fail."],["v0.729","THE STUDIO CARD IS SMALLER AND TIGHTER. 'Odaroo & Co.' on the opening splash is about a third of the size it was — a small studio label rather than a stand-in wordmark — and the words are closed up (negative tracking and tighter word gaps) so 'Odaroo' and '& Co.' read as one mark. Because it no longer fills INKVILLE's row by being the same size, it is now registered on INKVILLE by construction: the line sits in a box exactly the height of the wordmark's own line with the words centred in it, and an invisible copy of the tagline and version tag holds the space underneath. Measured on both folds: the label's centre lands exactly on INKVILLE's centre, so the two screens dissolve into each other."],["v0.728","ONLINE HUD: the FL next to the enemy's name is gone, and the inklets are in place from the first frame. In an Ice-Ink match the FLOOR strip was parked in the empty right-hand half of the header film reel — which is only empty in a solo run. Online that half is the rival's name plate, so the strip sat under it with its first two letters sticking out past ALPHA: FL. Online, the floor number now goes where every other stat in the game goes, stacked in the left column under your own inkling, re-shaped into a small FLOOR caption over a big number so it fits the narrow column. Solo is exactly as it was. Second fault, same screen: every new floor rebuilds the inkling box wholesale, which threw away the measured position the shared VS layout had just written onto your face — and the only thing that re-runs that measurement in a match had already gone by. So every floor was laid with your inklet at its stylesheet's seed position and it only snapped onto the rival's line at the next resize or handover. It is re-placed at the moment it is rebuilt now, so both faces are on one line, at one size, on the first frame. All five online modes checked at both folds by the new tools/test-online-hud.mjs, which mutates both fixes away to prove it can fail."],["v0.727","The installed app is now just INKVILLE. The PWA manifest's full name was still 'Inkville - A Rubberhose Rumble', so that is what showed on the home screen and in the app list once you installed it. It now reads simply 'Inkville', matching the short name, the browser tab title and the iOS home-screen title, which were all already correct. The subtitle is untouched on the title screen itself - it is still A RUBBERHOSE RUMBLE up there, it just is not part of the app's name any more."],["v0.726","The title screen is just the letters now: the teal ghost copy that sat behind INKVILLE is gone, so the wordmark is clean type with no coloured glow behind it. And the whole title block reads as one centred column — INKVILLE, the tagline, and the version number all lined up down the middle instead of the version hanging off to the right."],["v0.725","BOOT SCREEN AND THE INKVILLE SIGN. The TAP TO LOAD screen now sits UP where the Odaroo & Co. mark stands — the Game Boy, the arrow and the cartridge all lifted out of the lower half so the boot and the studio card read as the same place, and the two lines of TAP TO LOAD / タップしてロード are 20% smaller and tucked closer under the handheld. On the title screen the red copy of INKVILLE that sat behind the letters is gone (the teal glitch stays, so the sign still flickers), and the wordmark itself is 110% of its old size — INKVILLE is the flagship, so it is the biggest thing on the sign."],["v0.724","ONE CLOCK, AND THE CELEBRATION COMES FIRST. Two games were quietly showing the time twice: Disc-Ink still had its old film-reel clock band sitting on top of the header reel's clock, and Ice-Ink's FLOOR box was a second strip of film with a second running clock inside it, landing square on the header clock. Both are gone — Disc-Ink's band is hidden (it still books its room so the table cannot jump), and Ice-Ink's floor number moves onto the header row in the empty rival slot with its duplicate clock deleted. Every game now carries exactly one clock and one strip of film behind it, and a new check in the pre-flight fails the build if a ninth one ever appears. The clock also STOPS now: at a victory, a defeat or a curtain call it freezes on the figure the run ended on and stays on screen, instead of ticking on behind the result card or vanishing with the match. And the end of a game is the other way round from now on — the confetti is in the air within a few milliseconds of the win being banked, on the board you are still looking at, and the wheel and the bill open into a screen that is already celebrating. The dead beat before the victory screen is gone and the card wheel holds for less time, so the result arrives about a second sooner than it did."],["v0.723","THE STUDIO CARD IS NOW THE TITLE SCREEN WITHOUT THE TITLE. 'presents' is gone: the intro says just 'Odaroo & Co.', large, and it stands in exactly the spot INKVILLE is about to stand. The target mark hangs above it in exactly the spot the inklet is about to stand, a size bigger, so when the intro dissolves the inklet arrives INSIDE the target's rings and the two screens melt into one another instead of cutting. The alignment is structural, not tuned: the intro card now copies the title screen's own three-row grid and reserves a box the size of the inklet, so it stays registered at both folds and follows automatically if the title layout ever moves."],["v0.722","Every notification is now the SAME strip of film as the CONNECTING / CONNECTED banner: the same size sprocket holes, and they roll slowly from left to right instead of standing still, with the whole width of the screen to fit the words in. In OCTA-THON, messages no longer sit on top of your HP bar and your inklet — the placer now measures the health row as top furniture, so every pop-up in the brawl hangs safely below it. The SHOWSTOPPER window is measured rather than guessed: it starts under the health row and stops at the real top edge of the D-pad on both folds, so nothing is cut off at either end. The control lists are gone from the showstopper minigames — each one just states its goal in a line, no 'move with this, spin with that'. And the showstopper shuffle bag now carries over between matches, so you meet all eight games once before any of them comes round again."],["v0.721","The title screen is stacked the way it should be: INKVILLE, the tagline -- a rubberhose rumble -- tucked right up underneath it, and the version number hanging on the right-hand end under the word RUMBLE. The five animated bulbs above the wordmark now have five twins below the version number, blinking in step with them, so the whole title sits framed between two rows of lights."],["v0.720","THE INKLET NEVER HIDES BEHIND ITS OWN NAME AGAIN — in every game. When you score, the inklet doesn't just grow, it HOPS (8px up) and rocks; the gap under the username only ever booked room for the growing, so a good combo lifted the top of its head about ten pixels higher than anything had allowed for — and because the name strip paints in front of the portrait, the head didn't overlap the name, it vanished underneath it. The hop is measured and reserved now, from one shared number every game reads, so the face stays in its designated spot and only ever spills a little over its own FRAME. The portrait also paints in FRONT of the name strip now, so if a hop ever does reach it you see the inklet, never a swallowed head. Both corners still share one line, so you and your rival stay level. Ink-Put's two faces were a different version of the same fault — their round frames were cutting the top off the portrait on every hop; they spill over the frame now like everywhere else. The pre-flight was blessing all of this because a still measurement can't see a keyframed hop; it now adds the hop by arithmetic and would have failed the build."],["v0.719","CHANGING YOUR MIND NO LONGER MOVES THE CURTAIN. Walk into a game, press BACK without playing, and the boulevard is still showing that game — it used to snap back to whatever you last FINISHED, which was confusing. The carousel is now only ever re-aimed when there is real news: the page just loaded (still opens on Tetr-Ink), or you actually went into a game and came out (still shows that game). Idly browsing and backing out moves nothing. Proved at both folds by the new tools/test-carousel-memory.mjs, which also breaks the fix on purpose to prove the check can fail."],["v0.718","The gap at the very top of the screen is now DOUBLE what it was, everywhere. The usernames, the match clock and every film-reel HUD bar sit twice as far down from the top edge as before — on every board, in every game, solo and online. It was one number (--hudtop, 16px to 32px) because every reel, both names and the clock already asked for it rather than writing their own; only Dance Dance Ink and Ink-Tar Hero had to be nudged as whole stages, since their titles, star rows and lanes hang off hard pixel numbers tuned against each other. Two things the move exposed and this build also fixes: every pop-up message in the game was drawn flush ON the HUD bar for the first few frames (the 10px gap and the strip's 10px slide-in cancelled out exactly) - the gap is 20px now and clears it. And Disc-Ink's folded table loses those 16px of height, so it sits a little smaller on the narrow screen; that one is recorded and accepted deliberately rather than hidden."],["v0.717","THE PRESENTS LINE IS BACK TO ONE SMALL, PLAIN SENTENCE. Odaroo asked for it simple again, so every decoration is gone: no bars down the sides, no short dashes drawn as boxes, no diamonds, no gold engraving, no splitting the studio name onto a line of its own. It is one line at a small size — a dash, the words, a dash — and the dashes are characters typed into the sentence rather than anything laid out, so there is nothing left on that screen that can go wrong. AND THE BULB AND THE WORDS ARE NOW ONE CARD. They used to be two separate things each pinned to its own percentage of the screen height, which can only ever be right at one window size — that is why the gap between them kept needing re-tuning every time the wording changed shape, and why it was 16px on a folded phone but 8px unfolded. They now sit in one stacked group centred on the screen with a real gap between them, measured at exactly 19px on BOTH fold sizes, and the gentle swell they do as they fade into the INKVILLE title is one movement on the group instead of two that could grow into each other. Verified at both fold sizes, both completely clean."],["v0.716","The message strip now runs the WHOLE width of the screen, edge to edge, like one long reel of film — so a notification can never be squeezed into a narrow box or cut off. The font came down to the middle ground between the tiny old one and the very large one from last build: big enough to read as an important announcement, not big enough to fill the screen."],["v0.715","The spinning cartridges on the home carousel lost the little rectangle that used to appear on the back of the shell as it turned — both sides are now the bare cartridge silhouette, nothing else. And every game's logo inside the cart is 20% smaller, so it sits comfortably inside the shell instead of touching the edges, the way the Inkville mark does. Nothing else changed."],["v0.714","The language buttons are gone. The English / 日本語 pair under START on the title screen is removed, and with it the whole translation layer — the i18n module, its string table, the DOM observer that rewrote text, and every leftover hook in the boot, the server, the offline cache and the tools. Inkville is plain English everywhere, with one less module to load."],["v0.713","Every pop-up message in the game is now one calm film strip in one place. It hangs directly BELOW the top HUD bar instead of on it or above it, centred on screen, so it can never cover the username/timer/opponent row on any screen or in any match. The font is far bigger (a fixed 12px in css/menu.css had been quietly overriding the real size everywhere, so every notification in the game was tiny), and how long a message stays is now read off the message itself: a 2.6-second floor plus more time the more there is to read, up to 5.2s. The motion is calm now too - it settles down a few pixels, holds perfectly still, and fades, instead of banging in with a wobble and snapping shut. Challenge news (accepted, turned down, sent) joins the same strip rather than taking the connection line over, and the achievement badge card obeys the same placement and stays 4.6s. New check: node tools/test-popups.mjs proves all of it at both folds."],["v0.712","THE TIME IS A FILM REEL IN THE MIDDLE OF THE HEADER, AND THE HP BARS TAKE THE ROOM IT LEFT. The clock between the two usernames now wears the SAME strip of film they do — same ink, same sprocket holes, same borders, same thickness, same face — instead of sitting there as bare type, and there is more daylight either side of it so the row reads as three separate reels rather than one crowded bar. OCTA-THON's countdown was the last game still keeping its own timer down on the health row; it has moved up into that header reel like every other game's, which hands the whole middle of the health row back to the two HP bars — each one now runs from its fighter's portrait all the way to the centre of the screen, so you can actually watch the health drain. Proved at both fold sizes with worst-case names, and the three new promises (the reel matches the usernames', the countdown really arrives in it, no clock is left on the HP row) were each broken on purpose first to prove the check can fail."],["v0.711","The home carousel is a pitch-black room now. Every game preview has lost its drifting wallpaper and its glow — the tile is pure black, and the only thing in it is that game's cartridge turning slowly in 3D with the game's own logo hanging dead still and square-on inside it, both in neon white. The title and the Japanese line underneath are unchanged. Nothing else on the home screen, and no other screen, was touched."],["v0.710","The language picker is two SQUARE buttons now, evenly spaced under START — English and 日本語, same size, same lettering size, flat bottoms (the house skew is off these two on purpose), with clear air at both ends. And they only appear once the title screen is really there: they stay hidden through the whole boot, and hide again the moment you leave the title screen."],["v0.709","The flags are gone. The title screen's language picker is now two plain text buttons directly under START — English on the left, 日本語 on the right — sharing START's exact width between them, the same height as each other, cut in the game's own skewed ink-slab button style with gold marking the language you are in. All the flag artwork and the SVG that drew it is deleted."],["v0.708","THE LANGUAGE FLAGS MOVE UNDER THE START BUTTON — CANADA LEFT, JAPAN RIGHT. They are a row now instead of a stack, sitting directly below START and centred on it, both at the same height. The reds are the ones Odaroo asked for: pure bright red for Canada's bars and maple leaf, and the crimson of the real Hinomaru for Japan's disc. Both are still drawn as proper flags at their official proportions — Canada one-to-two with its true centre square, Japan two-to-three with the disc exactly three fifths of the height — so Canada comes out a shade wider than Japan, because forcing them into one identical box would stretch a real flag out of shape. Nothing else on the title screen moved: the flags are still positioned outside the layout entirely, and now take their place from the START button's own measured edge, so they follow it without ever being part of it. The check that measures every piece of the title screen with and without the flags still passes at both fold sizes. Worth knowing: there are only 52 pixels of clear screen under START on a folded phone and 16 on an unfolded one, so the flag height is worked out from the room that is actually there rather than assumed, and on the wide fold the row sits over the empty top strip of the D-pad, where it stays fully visible and tappable."],["v0.707","THE PRESENTS SCREEN IS A SUPER NINTENDO COLD OPEN NOW — black, the studio bulb, big clean words, one short dash before and one after. The two long bars that ran out to the sides are gone: Odaroo was right that they read as a frame around the words rather than punctuation beside them. In their place are two small dashes, exactly the way a Super Nintendo game says NINTENDO PRESENTS. ODAROO AND CO. IS MUCH BIGGER — 28px on a folded phone where it was 22, and 37px unfolded — because on a narrow screen the studio name now takes a whole line to itself and the dashes sit either side of the small word presents beneath it; on a wide screen the four run together on one line. AND THE BULB HAS COME DOWN TO MEET THE WORDS: the mark and the type are now positioned as one studio card with about 13px between them instead of drifting apart in the middle of the screen, and the gentle swell they do as they fade into the INKVILLE title has been eased back so the two can never grow into each other on the way out. The whole sequence was walked start to finish afterwards and still runs clean. Verified at both fold sizes."],["v0.706","NOTIFICATIONS THAT MEAN SOMETHING. Three fixes to the red dots. (1) The GIGS tab used to wear a red 1 while every gig on it still read 'working...' — it was counting the daily pull, which lives on the DAILIES tab next door, so there was nothing on GIGS you could collect to clear it. A tab dot now counts only what is collectable ON THAT TAB: finished-and-unpaid gigs, plus a finished flash gig. (2) NEW: when you have banked enough cups to unlock a game but have not broken the chains yet, a gold '1 GAME READY TO UNLOCK' plate appears on the top-left corner of the curtain on the home screen — and tapping it walks the bill straight to the game that is waiting. (3) The ALBUM's dot carries a NUMBER now: pull three new cards out of a pack and it says 3, and opening the album clears it. New proof: tools/test-notify-badges.mjs, which mutates every one of those rules away to show the check can fail."],["v0.705","ONE HEADER ROW, ONE TIMER, EVERY GAME. The second timer is deleted — the 0:02.00 that floated below the film reel on Panel-Ink is gone, and so are the duplicate TIME rows in Tetr-Ink's and Panel-Ink's side columns. There is now exactly one clock in the game and it lives on the header row: your username on the left in its film reel, the time bare in the dead centre, the opponent on the right, all on the same row at the same height. The time has no reel of its own any more and no label — just 00:00, counting up, printed at exactly the size the usernames ended up at, so if two long names shrink the clock shrinks with them. It is the standard header for every game screen now, online and solo alike. Two twelve-character names still fit whole on a folded phone with the red turn arrow keeping its room beside them, measured at both fold sizes, and both folds come back completely clean."],["v0.704","KEYBOARD PLAYERS CAN NOW PLAY THE WHOLE GAME, AND THE ONLINE PLAYER LIST FINALLY ANSWERS THE D-PAD. Two things for anyone sitting at a big screen with no touchscreen. FIRST, the online room: the list of players you can challenge could only ever be TAPPED - the D-pad walked straight past it. The reason turned out to be small and exact. The room is drawn as a dialog, and the game's dialog cursor only ever collected BUTTONS, while a player has been a whole tappable CARD since v0.460 - so the pad found REFRESH and CLOSE at the bottom of the window and nothing in between. The cards now join that same cursor, so up and down walk the names and A challenges the highlighted one. The highlight opens on the first player you can actually challenge (never on your own row), it scrolls the list along with it, and - this is the part that matters - it stays on the same PERSON when the room refreshes itself every two seconds and re-sorts as people go busy. Before, an index-based cursor would have quietly slid onto somebody else between two presses and the next press would have challenged them. SECOND, the keyboard is a full controller now: arrow keys are the D-pad, ENTER (either one) is A, and the numpad's dot key next to zero is B - including with NUM LOCK OFF, where that key reports itself as Delete and only its hardware code stays put. It is translated once at the door, so it works everywhere the pad works: menus, dialogs, the online room and every game, holding B for the climb in Panel-Ink included. While in there, every list-shaped screen that had no cursor at all - the profile, the badge wall, daily gigs and INKAMP - became walkable too. Proved by a new tool, tools/test-keyboard-nav.mjs, which presses real keys and then breaks the fix on purpose to prove the test can fail. Both folds sweep clean."],["v0.703","THE FLAGS ARE FOUR TIMES BIGGER AND THEY ARE REAL FLAGS NOW. Both are redrawn from scratch at their official proportions — Canada at its true 1:2 with the white centre square and the eleven-point maple leaf, Japan at its legal 2:3 with the crimson disc dead centre and exactly three fifths of the height across. The ink outline they used to wear is gone, because an outline is a stylisation and these are meant to be the actual flags; they sit on a soft shadow instead. They are drawn as vector art, so they are as crisp on a big screen as on a phone. Size went from 32px to 128px, and 112px on a folded phone. Japan still sits above Canada, still absolutely positioned in the top-right corner, and the title screen is still untouched — the check that measures every piece of that screen with and without the flags still passes at both fold sizes. At four times the size they are big enough to reach the artwork, so the pre-flight now also asserts they cover none of the inklet, wordmark, subtitle or START button. One thing found along the way: the redesigned install card is a large centred card now, and blindly stepping the flags below it parked them on top of the inklet, so the corner wins and the flags only move down when there is genuinely room. The install card's new line about unlocking a badge and a frame is translated too."],["v0.702","SMALLER FILM REELS, NO INSTRUCTION TEXT, AND A MATCH CLOCK THAT COUNTS UP. The in-game username reels are now smaller than the menu's (13px folded, 15px wide, against the menu's 17/19) — they were eating the room the board needs, and every playfield gets that space back because the two inklet portraits hang off the reel's measured height. All instruction text is gone from the top of every online game: Ice-Ink no longer says YOUR TURN / THEIR TURN / GET READY, and nothing says WAITING. Whose go it is, is the red arrow beside the name and nothing else. In the middle of every online game there is now one bare film-reel clock — just the figure, no TIME label — and it COUNTS UP from 0:00 the instant the 3-2-1-GO finishes, so it reads how long the match has been going. It is one clock shared by all five online games, started at the single door they all walk through, so they can never disagree. Disc-Ink already counted up with no label since v0.648; Ice-Ink, Tetr-Ink and Panel-Ink now match it. Both fold sizes come back completely clean, including the two faults that had been carried as known."],["v0.701","THERE IS ONLY ONE GLITCH CART NOW, AND IT IS THE SAME OBJECT EVERYWHERE YOU MEET IT. The cartridge on the boot screen and the cartridge on the install popup are no longer two drawings that happen to look alike — they are one thing, built in one place, so they can never drift apart again. Both show a cartridge shell turning in 3D, glitching as it goes with a chroma tear and the odd one-frame slip, while the ink drop — the exact mark that sits on your home screen — hangs perfectly still, flat and clean at the centre of it. The glitch is on the shell and ONLY on the shell: the drop never rotates, never shakes, never tears. And the way in has a beat it was missing. Tapping the cartridge used to start the slide immediately from whatever angle it happened to be at. Now the spin stops where it is and eases round until the cart is facing you square-on, the glitch cutting out with it, and only THEN does it slide down into the slot and the boot carry on. Turn to face you, then go in. Verified at both fold sizes."],["v0.700","USERNAMES NEVER CROSS THE MIDDLE ANY MORE, AND THE RED TURN ARROW ALWAYS HAS ROOM. In every online game the two name reels now share the screen with the match clock instead of running under it: each name is capped so it stops short of the centre, the clock (or Ice-Ink's turn sign) keeps the middle, and the red arrow keeps a booked gap on BOTH sides so it can appear for either player without ever being pushed off or sitting on a name. A name too long to print is SHRUNK rather than clipped, and both names always print at the same size as each other — two twelve-character usernames now fit whole on a folded phone, measured. If even the smallest face will not fit, the middle strip yields before a username does. And when the Disc-Ink coin lands and the screen says who breaks, the red arrow on that player's side blinks three times so you cannot miss whose turn it is."],["v0.699","THE BOOT CARTRIDGE NOW SPINS IN 3D — and the ink drop at its heart does not. The cartridge shell turns on its axis like it is being shown off, front and back, while the ink drop logo (the exact same mark as the app icon on your home screen) hangs perfectly still and flat in the middle of it, so it reads as floating in the air with the cart revolving around it. Tap and the spin cuts dead, the cart drops square into the slot, and the boot carries on as before. The 'Odaroo & Co. Presents' card has been rebuilt in the grand old title-screen style: the words are far bigger — nearly two-and-a-half times the size on a big screen — in gold with a dark engraved shadow, sitting dead centre of the screen with a decorative gold rule and diamond running out to the LEFT and to the RIGHT of them instead of a line underneath. Folded it reads as two big lines, unfolded it opens out to one, and either way it swells gently as it fades so it flows straight into the INKVILLE title instead of cutting to it. Verified at both fold sizes."],["v0.698","DANCE DANCE INK AND INK-TAR HERO GO ONLINE, AND SOLO IS PURE SHUFFLE. Both rhythm games have lost their lobby: pressing SOLO now spins a record at random and plays it, with no START TOUR, no CONTINUE and no set list. Four stars or better carries the shuffle on to the next record; anything less leaves RETRY and HOME. Both games also go ONLINE for the first time, with the same versus interface every other game has: two health bars that both fill from the left and drain from the right, an inklet beside each one, and the clock between them as the only clock on screen. Dance Dance Ink stands the two dance floors side by side, small and centred on every screen; Ink-Tar Hero keeps your neck exactly where it was, with the same five touch frets, and hangs the rival's as a ghost board above it so you can watch their combos build and their misses land. Whoever's meter empties first loses; if the record runs out with both still standing, the higher score takes it. MASA, MUNE and the rest of the room can play both."],["v0.697","TITLE SCREEN PUT BACK EXACTLY AS IT WAS — THE FLAGS NO LONGER TOUCH IT. The layout fault was a single line: mounting the flags set position:relative on the title screen, which overrode the rule pinning that screen to all four edges. The screen collapsed to its own content, which is why everything was shoved up and the bottom half went empty. That line is gone and the screen is back to being centred exactly as before — the inklet, the wordmark, the subtitle and START all sit where they always did. Nothing about the title layout is changed by the flags now, and that is no longer a matter of opinion: a new check measures every piece of the title screen twice, once with the flags and once without, and refuses to ship if a single box moves. The flags themselves are now SMALL and tucked into the top-right corner just inside the bulb frame, Japan above Canada, floating free of the layout. They are small to look at but carry a bigger invisible tap area so a thumb can still hit them. Neither one is clipped at the edge any more, and when the INSTALL card is showing they step down below it instead of hiding underneath it."],["v0.696","THE APP INSTALL IS AN EVENT NOW. The install invite is a full achievement-sized card — the Inkville cartridge (the very same mark as the home-screen icon, drawn in the page so it can never be a build behind the PNG) spinning on its own axis, big type, and a full-width INSTALL button. Put Inkville on your home screen and the game says so: a green celebration card reading HEY - YOU'VE DOWNLOADED THE APP!, a new ON THE HOME SCREEN badge on the GIGS wall, and a new DOWNLOADED frame — a mint ring with a download arrow tapping on its tray. Both are earned, never sold, and a player who installed before today gets them on their next load."],["v0.695","EVERY ENDING NOW CARRIES YOUR OWN NAME. The victory screen, the defeat screen, the curtain call, the bill and the shared PNG all printed the word ODAROO, for everybody, always — because the one function that names the player was reading two fields that do not exist in the save (S.player.name and S.name) and quietly falling through to a hard-coded word. It reads your inklet's real name now (the same S.buddy.nm the film-reel bar, the profile and every online VS card use), capitalised the same way, so the name on the end card matches the name that opened the match. A save with no name yet reads INKLET rather than somebody else's name. Nothing else on those screens moved."],["v0.694","THE LANGUAGE FLAGS, DONE PROPERLY — AND THE MIXED-TEXT BUG IS FIXED. The two flags on the title screen are real flags now, not pixel art: a proper Japanese sun disc and a proper Canadian maple leaf, drawn smooth at their official proportions, noticeably bigger, and stacked vertically down the right-hand side with Japan on top and Canada underneath. The unpicked one stays a real, readable flag — it only fades slightly, and the one you are on wears a gold ring. In English the title sign keeps its easter egg and still flickers through INK TOWN, INKOUNTRY, INKREDIBLE and INK INC. In Japanese it reads インクビル, thick and bold, at exactly the same size as INKVILLE, and it stays put: no cycling and no glitch layers. The big fix is the mixed text Odaroo was seeing. Two causes: the logo was built from two separate pieces, INK and VILLE, so it was being translated as two words and came out wrong — it is now set whole, per language. And anything the game drew WHILE Japanese was already on could not be turned back into English, because the translator was mistaking its own writing for the game's and forgetting the original English. Both are fixed, and a new sweep walks all twenty-one screens in Japanese and reports anything still in English — it now comes back clean apart from the word Claude in the credits, which is a name. Every reward line, day counter, floor number, deck number and the whole making-of story is translated too."],["v0.693","NO CHALLENGE SENT BOX — Odaroo cut it. Pressing YES on a challenge now draws the connecting screen and NOTHING else: no card, no message, no beat in between. Measured at 89ms from the press to the stage being on the glass, and against a bot, 89ms from the press to the match itself being under way. The card that v0.692 briefly showed is deleted outright, its CSS with it, and the rule is written down in both files because a style is the easy half to add back by accident. The pre-flight now arms a sentinel BEFORE the button goes down and watches continuously, so a card that shows itself for under a second cannot slip past a check that only looks once — proved by putting the card back and watching it fail."],["v0.692","CHALLENGE FLOW: pressing YES now GOES somewhere. Tap a name, confirm, and you get a brief CHALLENGE SENT card and then the connecting screen itself — the same VS stage, roulette and breathing dots every online match uses — instead of one line of text and a roster that does nothing. If the other player answers, the real handshake draws itself straight over the top and nothing jumps. If they do not answer within ten seconds, their side of the stage becomes an empty outline reading NOT AVAILABLE and you are put back in the room with your controls handed back. BOTS ARE INSTANT AND NEVER TIME OUT: the room already accepts for ALPHA, BETA and OMEGA in the same breath the challenge is sent, and the client now reads that answer out of the reply itself — measured at 250ms, before the CHALLENGE SENT card has faded. Bots were checked end to end and are intact: all three are in the room and all three accept in every game. New pre-flight tools/test-challenge-flow.mjs presses the real buttons for both cases, and was proved by breaking it."],["v0.691","The ink drop in the app icon is 75% of the size it was and sits dead centre inside the cartridge — centred on the shell's hollow, not on the image, which is what had it sitting slightly high. All five icon files redrawn. The deploy now also versions the manifest's icon URLs; it never did, so an installed phone was asking for icons at a build number three deploys old and getting them from cache."],["v0.690","Challenge news now appears on the film strip at the TOP of the screen, in the same band as CONNECTING / CONNECTED, instead of as a toast at the bottom of the glass. 'CHALLENGE SENT TO ...', 'CHALLENGE FROM ...', 'ACCEPTED YOUR CHALLENGE', 'TURNED YOU DOWN' and the rest all sit above the connecting animation now rather than over it. A live CONNECTING or CONNECTED sign always outranks a headline and keeps the band; long names shrink so the whole line stays on the glass. And the D-pad stands down for the WHOLE online handshake, not just the Game Boy link-cable overlay: from the moment the connecting spin starts, the controls (which are locked through the handshake anyway) get out of the way and the animation has the full screen, the same way the two handhelds already did. It comes straight back when the match unlocks, and it self-expires as a backstop so a handshake that dies can never leave a player without controls."],["v0.689","INKVILLE SPEAKS TWO LANGUAGES NOW. Every scrap of Japanese that used to sit as a decorative subtitle under the game names, on the tiles, in the splashes and on the tab labels is gone — the game is pure English by default. In its place is a real translation system: data/i18n.json holds 1,431 player-facing strings with a proper Japanese rendering for each, and js/i18n.js applies them to whatever is on screen. Two small pixel-art flags sit bottom-right of the title screen — a Canadian one and a Japanese one. Tap the Japanese flag and the whole game becomes Japanese on the spot: menus, HUD labels, buttons, dialogs, achievements, tutorials, game names, the lot. Tap the Canadian one and it is English again, exactly as it was. No reload either way, and the choice is remembered next time you open the game. A screen the game draws later comes out translated too, so nothing has to be visited twice."],["v0.688","THE ENEMY SCREEN IS LIVE NOW, IN BOTH GAMES. Odaroo: Tetr-Ink's rival board was faster than Panel-Ink's, which only moved every few seconds. He was comparing two real numbers — Tetr-Ink has pushed its board five times a second since v0.454 and Panel-Ink was still on the old twice-a-second pace, so a swap took up to a second to appear and the stretches where only the cursor moved were never sent at all. Both games now push at 150ms and poll at 200ms, and both send something they never sent before: Panel-Ink carries the opponent's CURSOR, so you watch their hands hunt for the next set instead of only seeing the shape their board ends up in, and Tetr-Ink now marks the piece they are still holding apart from the pile they have already built, so you can see them sliding, spinning and dropping it. The rival cursor is drawn on their miniature board above everything else, including the bars you land on them. The bots learned to move their hands too: the Panel-Ink bots now walk a cursor across their board toward the swap they are about to make, paced to arrive exactly as they play it, and their difficulty is untouched. Measured over real matches, the rival board went from changing every 850ms to changing on every single poll."],["v0.687","THE TWO INKLETS ARE ON THE SAME LINE — THE REAL CAUSE, FOUND AND FIXED EVERYWHERE. Odaroo has reported 'my inklet sits higher than the opponent's' on Ice-Ink more than once, and every previous look went to the placement — which was innocent all along: vsNamePlace gives both corners one measured top, and measured it does (both at 65px on Ice-Ink, Disc-Ink, Tetr-Ink and Panel-Ink). The fault was the REACTION. ginkReact added the 'sing' class at a fifteen-chain and nothing ever took it off again, and '.gink.sing' is an INFINITE animation that lifts the portrait six pixels. So the first big combo of a match floated your face off the line for the rest of that match, on every screen at once, while the rival's — which rarely reaches fifteen — sat still. Measured: yours oscillating 62.1 to 68.0 against theirs parked at 70.0. The classes are toggled off the combo now, so every game that already calls ginkReact(0) tidies up for free; a chain that is abandoned mid-flight (a match that ends, a socket that drops, a screen that swaps) self-expires after 2.6s; and swap() puts every portrait back on the line at the one door every screen change goes through. The bob also plays on EVERY combo again rather than only the first one of a match. THE USERNAME REELS CAN NEVER MEET: the half-screen ceiling is now written on before the fitter measures and re-asserted after it, so a first paint, a throw or a late-added cell can no longer leave a cell uncapped. Two twelve-character names ('ODAROOOOOOOO' and '123123123123') measure 174px each with 27px of daylight between them on a folded phone, both at the same size. AND THE PRE-FLIGHT CAN SEE IT NOW: inkVsLevelFaults checks, on every game, that the two corners share one top and one size, and that no portrait is stuck in an animation that never ends. All three failure modes were broken on purpose and all three were caught."],["v0.686","The carousel is black now. Each act stands on a black stage with its cartridge glowing neon white in the middle, its name in white underneath and the Japanese line under that. And every logo inside a cartridge has been simplified to a vinyl decal: the Ice-Ink snowflake is a proper classic six-arm flake instead of a bundle of fragments, and Disc-Ink, Panel-Ink, Ink-Tar and Lumen all lost the little bits that only existed to join other bits."],["v0.685","The home-screen icon is redrawn: the cartridge is a bare silhouette now — no window, no label strip, no shine — and the Inkville ink drop sits inside it, big and solid in the same neon white. Cartridge plus drop, nothing else. The icon files carry a version now too, so a phone that already installed the game actually picks the new one up."],["v0.684","The little movies behind the game tiles are gone. Every game now wears its own moving wallpaper instead — a pattern in its own colour that drifts, rises, slides or breathes, and no two games move the same way. And the cartridge logos are simplified: just the cartridge silhouette with its notched corner and the game's own symbol inside it, drawn 40% bigger. No label strip, no window frame, no extra lines on the cart."],["v0.683","PANEL-INK ONLINE: A CLEANER DUEL SCREEN, A CLOCK IN THE MIDDLE, AND THE CONNECTION LIGHTS UP BEFORE IT BREAKS. The left column is now SPEED, then JUNK SENT under it, then HIGHEST COMBO under that -- stacked, each label owning the full column, because thirteen characters cannot share a 72px row with another figure at any size worth reading. The STAGE box is gone from a duel entirely: a stage is a solo idea, hzAdvance already refused to advance one online so the number never moved, and it was the green square sitting directly under the inklet in the top-left corner. POPS is deleted everywhere it was printed -- your column, the rival's miniature, and the end-of-match receipt. A MATCH CLOCK now sits centred at the top, in the free band between the username reel and the two inklets, showing nothing but the time; it is measured against 59:59.90 rather than a fresh run, and it is placed off the live reel rather than at a guessed pixel. THE SHINE: when a clear is touching a wall of junk, every matched panel AND every cell of every wall it reaches now flares together as ONE lit object for half a second before anything comes apart, so you can see what your match is about to take down -- only then does the wall start turning over, bottom row first and left to right. And a long username on the in-game reel can no longer run past half the screen: a solo reel is width:max-content, so its own width was never a limit and the fitter always concluded the name fitted; it is measured against the screen now, with a hard half-screen ceiling in both modes."],["v0.682","BIG SCREENS: THE GAME SITS IN THE MIDDLE. On a desktop monitor four games were quietly leaning to the right — Ice-Ink, Tetr-Ink, Panel-Ink and Lumen Ink — and the reason was not a stray margin: every one of those screens centres correctly, but what it was centring was the stats column and the playfield TOGETHER, as one block. The field therefore landed exactly half a stats column right of the true centre, which on a wide monitor reads as the whole game shoved to one side with a dead half beside it. Measured at 1600x900 and again at 2560x1080 the lean was the same number on both screens, because it was never a function of the screen at all: Ice-Ink 64px, Tetr-Ink 80px, Panel-Ink 57px, Lumen Ink 40px. From 1024px wide upward the stats column now stands against the left edge instead of paying for the centring, so the playfield is centred on the SCREEN and the boxes sit beside it. Every game is now dead centre at 1280x800, 1600x900 and 2560x1080. Ice-Ink needed one more line because it places its ice by hand rather than by flex, and was reserving room for a column that is no longer in the row. The folded and unfolded phone layouts cannot be touched by any of this: the rule starts above both fold sizes, and both folds still test clean. A new pre-flight check, inkCentreFaults(), measures every playfield against the middle of the screen on every sweep, so this cannot come back unnoticed — with the fix removed it names all four leans, and with it in place it is silent."],["v0.681","Fullscreen is now forced ONCE, on the very first tap after the game loads, and never again. Before, if you left fullscreen -- Escape, the back swipe, switching apps -- the next tap dragged you straight back in, so there was no way to play windowed. Now leaving fullscreen sticks until you reload the page. A browser that refuses that very first tap still gets another chance, so a phone can never boot with no way in."],["v0.680","PANEL-INK: the rival's board can die too, the junk reveal skips the paper card, and nothing floats. THE CEILING NOW KILLS BOTH BOARDS ON THE SAME TERMS. Odaroo watched a bot sit packed to the top and play on while his own full board was instant game over — the asymmetry was TIME, not rows. The only thing that can kill either board is the rise arriving into an occupied row 0, and the rise comes on a ~16.6-second clock, so whichever board filled up just after one got the entire next cycle for free. Simulated against the room's own bot, an ALPHA board held row 0 for 19.6 SECONDS at a stretch and for over a minute across a match, quite safely. Now a board that has touched the ceiling hurries to its commit and is finished within HZ_CEIL_MS (2s) — the same constant written into js/panik-online.js and server/lobby.js, so the player's board and the bot's play by one rule. Longest survival at the ceiling across all three bots and every attack rate: 19.6s down to 2.4s. Canon rule 2 is untouched: a slab that cannot land still waits rather than killing anybody. THE JUNK REVEAL GOES STRAIGHT TO THE BLOCK UNDERNEATH. Odaroo asked for the paper animation to go, so it is gone: the cream .hjlit card that rotated edge-on in front of every cell is no longer drawn at all, and the cell simply IS the real panel from the first frame, with a single-frame bloom so you can follow which one just came free. Bottom row first, left to right across the whole wall, then everything drops on one gravity call, exactly as before. NOTHING FLOATS ANY MORE. A slab is placed by finding the lowest rectangle that FITS, which is not the lowest one everything can rest on — a wall straddling a step in the stack landed on the tall column and left whatever hung under its overhang exactly where it was, because nothing in that path ever ran gravity. It settles the moment it lands now, and the end of every chain sweeps the board once more, so a floating block is structurally impossible rather than fixed in the paths we happened to think of. Three new checks in hzSelfTest cover all of it, and all three were broken on purpose and watched to fail first."],["v0.679","DISC-INK: the whole screen is dressed before the coin flies, not after it lands. v0.674 fixed the colour coin sitting on the inklet's face; photographing the ceremony frame by frame showed that was only the part that overlapped. The real cause was bigger: nothing built the MATCH name bar until after the toss, so for the whole ceremony the screen wore the solo strip — your name alone, no rival — and because the shared layout only lays the two portraits out as a PAIR when it can see a second name, the rival's face was left wherever the stylesheet dropped it, a different size and a different height from yours. The toss now builds the two-name bar itself and lays the pair out. Two more faults fell out of the same session: the coin had quietly stopped landing on the table at all (it is placed 120ms after the screen is asked for, and the screen takes 435ms to arrive, so the felt could never be measured and it kept its centred fallback up among the name reels), and once it was back on the felt the disc covered the T of THE TOSS at both folds. The coin is now held invisible until it is genuinely on the board's centre spot, so there is no frame in which the player sees it anywhere else. Measured frame by frame at 375x812 and 906x832: zero overlapping HUD boxes at any point in the ceremony, against a check proven to fail on the old code."],["v0.678","ICE-INK NOW SHOWS THE SAME BOLD RED TURN ARROW AS DISC-INK. In an online Ice-Ink match a red triangle sits on the film-reel name bar and points at whoever is up — left at your name on your go, right at theirs on theirs — and it moves the moment the ice changes hands, alongside the clock that already zooms. It is literally the same arrow and the same CSS Disc-Ink uses, not a copy: it sits between the two name cells so neither username loses a pixel of width, it is removed in solo (where there is nobody to point at), and it is rebuilt on every repaint so a reconnect or a fold cannot lose it."],["v0.677","Comment correction only, no behaviour change: the v0.676 work was written up in its own comments as v0.674 (two other sessions shipped 674 and 675 while it was being tested), which would have sent a future session to the wrong builds.json entry. Seventeen references renamed across the five files touched."],["v0.676","DISC-INK RUNS AT 75% SPEED, AND THE RIVAL COMES ALIVE. Everything on the Disc-Ink table now takes a third longer — the discs rolling, the cue drawing back, the coin toss, the turn hand-overs, the combo pop, the moods. One dial (CR_SLOW) sets the whole screen so nothing drifts out of step, and the physics is slowed by taking three-quarters of a step per frame rather than by scaling the speeds, so an online table still settles identically on both machines. The rival's frame is fixed: crFoeRedraw — the repaint behind every reaction — was injecting the frame WITHOUT its stage, so the enemy portrait wore a proper circle until the first thing that happened to it and then a gold slab across the whole box for the rest of the match. That was the square golden thing. Online rivals were also losing their ring entirely: the look was hand-rebuilt from three fields and silently dropped 'fr', so ALPHA, BETA, OMEGA and every real player sat down wearing nothing. It goes through lookOf() now. And the enemy inklet reacts: doubles, fouls, dud shots, its own combos and the final result all move its face and its pop, where before it only ever moved when the player did something. A new check in crSelfTest re-draws the rival and proves its ring is still a staged circle — broken on purpose first, and it failed."],["v0.675","PANEL-INK RUNS AT 75% SPEED. Odaroo: the animations were too fast. Every movement and timing in Ink Panik now takes 33% longer, so the whole game is slowed to three-quarters of the pace it was — nothing was cut, everything just happens with more room to read it. The stack CLIMBS slower (riseEvery 12.5s -> 16.63s a row, all three copies of the pace, and the hold-B floor with it), the incoming slabs arrive further apart (950ms -> 1264ms), the panels POP slower (105ms -> 140ms each) with a longer breath after (260ms -> 346ms), a chain takes longer to come back round (420/720ms -> 559/958ms), and the junk wall UNWINDS slower — the crack (140 -> 186ms), the pause once it is fully revealed (260 -> 346ms) and the beat before gravity takes it (340 -> 452ms). On the CSS side the swap glide, the tile fall, the pop burst, the slab drop and squash, the two flip layers, the cursor blink, the combo card, the freeze shimmer and the rival board's landing flash all stretch by the same 1.33x, so the look stays exactly in step with the logic. The room's bot climbs on the player's number, so its clock moved in the same breath (12500 -> 16630ms) and a duel is still the same board on both sides; bot DIFFICULTY is untouched. Self-test clean at 375x812 and 906x832."],["v0.674","DISC-INK: the screen is dressed BEFORE the coin flies, and the turn arrow is a bold red triangle. Three things Odaroo pointed at on one screenshot. (1) During the toss the inklet, its colour coin and the stat column were piled on top of one another and only snapped apart once the coin had landed — because on the online path the table is only laid AFTER the ceremony, so for those two and a half seconds nothing had ever measured the portrait and the coin sat on its stylesheet default, straight across the inklet's face. The toss now places the HUD itself and keeps asking until the measurement lands. (2) The turn arrow next to the username was gold on a gold film reel and effectively invisible; it is now the same plain three-corner RED triangle the rest of the game uses to say whose turn it is, and half again as big. (3) It still moves to whichever username is up — left for you, right for the rival — which it did before and still does."],["v0.673","THE CURTAIN ARROWS WORK WHEN YOU TAP THEM. The two chevrons either side of the featured game did nothing on a tap — the bill would only move if you swiped it. The swipe handler was grabbing the pointer the instant you pressed anywhere on the featured tile, and a grabbed pointer delivers the click to the tile instead of to the button under your finger, so the arrow's own code was never run. A press that starts on a button inside the curtain is now left alone, so the tap lands where you aimed it. Left walks back a game, right walks forward, and holding and sliding still walks exactly one game as before. The little ? button on the featured tile was being swallowed the same way and now answers too."],["v0.672","A MOUSE CAN CLICK THE CURTAIN, AND A PLAYSTATION PAD READS THE RIGHT WAY ROUND. (1) Clicking the big featured game tile with a mouse did nothing — including the TAP TO BREAK! chained lock, which is why a game would sit there refusing to unlock on a computer while the same tap worked fine on a phone. The swipe gesture was grabbing the pointer the instant you pressed down, and a grabbed pointer hands the click to the carousel instead of to the tile, so the tile's own handler was never called. A touch is generated differently, which is exactly why it only ever looked broken on desktop. The grab now happens only once you have actually started dragging, so an ordinary click lands and a real swipe still steers the bill. (2) On a PlayStation 5 controller the X (cross) button is now A and the SQUARE button is now B, alongside the existing circle and triangle. Square used to be the old BEAM button, which belonged to a game that was deleted from Inkville, so nothing was lost."],["v0.671","EMERGENCY REVERT — ICE-INK IS THE ICE CAVE AGAIN. v0.661 turned Ice-Ink's solo run into a rhythm game; Odaroo called it in as an emergency, so the whole rhythm layer is deleted and the sliding-tile ice cave is back exactly as it was — the floors, the 30-second clock, the three hearts, the rocks, the key and lock, and the glide across the ice. Pressing SOLO goes through the ceremony to a real puzzle floor again (proved end-to-end: the skater slides 4,11 to 7,11 through the same door the D-pad presses). DANCE DANCE INK AND INK-TAR HERO ARE UNTOUCHED and remain the only two rhythm games — all 205 rhythm checks still pass. The online rink was never converted and is unchanged. Gone with it: the four ice tracks, the set-list menu and 70 lines of now-dead CSS. Clean at both folds."],["v0.670","Panel-Ink versus: the bots no longer wipe your junk the instant it lands. A wall you send now sits on their stack for a beat and a half before they will even start digging it out, digging out is a strong move rather than the only move they will ever consider, and a combo's worth of bars piles onto them two at a time instead of trickling in one per beat and being cleared just as fast. The rivals visibly struggle under your attacks, keep sending junk back, and top out in about a quarter of the time — so the fight is winnable."],["v0.669","FRAMES ARE CIRCLES, EVERYWHERE. The inklet portrait in the top-left and top-right corner of every VS and online screen is a width-only box that takes its height from the artwork, so every ring drawn on it came out a tall OVAL - measured at 71x97 on a 66x92 portrait. Frames now sit on their own square stage centred on the portrait (71x71, a true circle), on every game, solo and online, without moving anything the layout measures. OCTA-THON's HP-bar avatars had the same fault for a different reason - they positioned nothing, so their rings were painted as a huge ellipse across the whole health bar - and they are circles now too. AND THE TWO USERNAMES ARE TWO FILM REELS. OCTA-THON was the last online game printing its own pair of names in its top bar: two ellipsised spans that cut a 12-character name off, with the shared film reel painting straight over the top of them. Those names are gone; your name is the top-left reel and your rival's is the top-right, the same as every other online game, and the bar's remaining stage/wave label and chips are measured clear of the strip. The reel's own shrink-to-fit was also tolerating one pixel of overflow, which is one pixel of name behind an ellipsis - two 12-character names now step down together and both fit whole."],["v0.668","EVERY GAME NOW WEARS THE SAME CARTRIDGE. The nine crests were redrawn from scratch: each one is the exact silhouette of the boot cartridge — the same shape as the app icon and the cartridge that drops in on the title screen — in white neon on black, with ONE simple symbol inside its window. A T-piece for Tetr-Ink, a snowflake for Ice-Ink, a disc for Disc-Ink, a wall of panels for Panel-Ink, an arrow for Ink-Put, four chevrons for Dance Dance Ink, a guitar for Ink-Tar Hero, a starburst for Lumen Ink, an 8 for OCTA-THON, and a star for GIGS. The inklets are out of the logos entirely — three little faces at badge size read as monsters, and a logo is a logo. The badge wall follows: every medal's face went black so the neon crest sits in it like a lit porthole instead of a stamp glued on."],["v0.667","THE REAR-PROJECTION BEHIND EVERY GAME ON THE BOULEVARD IS NOW A HIGHLIGHT REEL OF SOMEBODY ACTUALLY PLAYING IT. Each of the eight games gets a scripted ten seconds of best-of moments instead of the old drifting still: Tetr-Ink builds a well with one column open, drops the I bar and takes FOUR ROWS AT ONCE, then rebuilds and takes another; Disc-Ink fires the striker and sinks three discs on the trot, ending on 3x; Ice-Ink skates the selector tile to tile and takes five gold ones without a wasted move; Panel-Ink swaps one pair, a green trio goes, what was above it drops onto two reds and takes THEM — a real chain; Ink-Put presses two whole waves clean; Dance Dance Ink lands sixteen notes on the receptors with the counter never resetting; Ink-Tar Hero strums a run and the frets light as they are hammered; Lumen Ink places three blocks and sweeps three runs. Every reel ends on its own score card, and the one cut it makes is hidden under the projector tear at the splice, the way a real reel change is."],["v0.666","INK-TAR HERO now plays the same six real records as DANCE DANCE INK. Its old seventeen chiptune tracks and the whole 8-bit chart factory behind them are gone: the set list is the shared one (rgSet), the ladder is the shared one (two records open, 4 stars opens the next), and every note is cut from the actual mp3 by tools/chart-songs.py. It is a GUITAR part, not a dance one - the fret is the pitch, so a rising lick walks up the neck; chords are two frets at once and sustains are notes you hold. The record plays at its own untouched speed with a count-in, and the notes are timed off the audio clock. Also fixed on the way past: there were two ddiUnlocked declarations and the later, retired one was winning, so DANCE DANCE INK's own menu was counting its records by the old chiptune ladder."],["v0.665","EVERY GAME'S LOGO NOW HAS AN INKLET IN IT. The nine marquee crests are redrawn so the mark for each game is the mascot PLAYING that game, not a picture of its furniture: a white inklet rides the Tetr-Ink stack between two coloured ones, skates the Ice-Ink track, flicks the Disc-Ink striker, swaps a Panel-Ink wall, presses the Ink-Put wave, dances the DDI floor, plays the Ink-Tar over its five real frets, waits under a Lumen block, and squares up against a red challenger under a gold 8 in OCTA-THON. GIGS & ACHIEVEMENTS gets a medal with the inklet's face on it instead of a clipboard. Two stale crests are put right at the same time: PANEL-INK had never had a crest of its own and was flying a film reel on both its tile and its badge wall, and ICE-INK's home tile was still flying an old spotlight stand — both now fly their own. Because the badge wall, the arcade log and the profile all read these same drawings, every achievement icon in the game updated with them."],["v0.664","DANCE DANCE INK AND ICE-INK ARE REBUILT AS REAL RHYTHM GAMES, SCORED AGAINST THE SIX RECORDS. Every arrow and every note is charted against the ACTUAL tempo of Odaroo's own mp3s — tools/chart-songs.py listens to each record, tracks its real beats, and writes data/charts.json. Nothing is sped up or slowed down: the song plays at its own speed and the game adapts to it. Dance Dance Ink is a classic four-panel stepchart — arrows scrolling up to receptors at the top, quarter notes on the beat, eighths where the record is busy, freeze arrows you press and hold, jumps on the accents, and left/right and staircase patterns like the originals. The arrows are shiny: a white/dark/white contour with a multi-coloured inside. Ice-Ink keeps its ice cave exactly as it was and skates the MELODY instead of the drums — taps, glides you hold, and spins on the big accents — so the same six records feel like two different games. Both run the same six-song reverse set list (Inflate, Trials, Moon Mathematics, Orbis Paralysis, Telegraph, Ignition Sequence Start), each with its own star ladder. Both games have new logos. The online rink is untouched and still plays the tile puzzle."],["v0.663","OCTA-THON: you no longer sit through the rival's turn. Odaroo asked for two things and this is both. FIRST, every showstopper now says which of the eight games it is in one small gold box — TETR-INK SHOWSTOPPER, DISC-INK SHOWSTOPPER, and so on — replacing the seven mismatched big titles some minis carried and the three that carried nothing at all; it is stamped in one place so a mini can never again forget to say what it is. SECOND, and much bigger: when the RIVAL takes the stage you now get a charming little card — their inklet up on stage, the game they rolled, and a line that changes every time (IT'S THEIR TURN — SIT TIGHT! / POPCORN TIME. / THEY'RE UP THERE HAMMING IT UP.) — instead of watching a CPU play a whole minigame at you. A bot's run was up to 30 seconds of frozen board animating a result that had already been decided; it is about three seconds now. Online is untouched where it counts: their score was always computed on their machine and sent over, and their live percentage now ticks along on the card. Also fixed a real flake in the pre-flight itself: the rink's playfield check was passing or failing on whether it happened to be the odd or even entry of the session, so builds were being graded by luck."],["v0.662","OCTA-THON. Bullet Ballet and the Deck-a-thon are deleted outright, and Bit-Brawl is renamed OCTA-THON — octa as in eight, as in an octave. That leaves exactly eight games on the ladder (Tetr-Ink and Ice-Ink free, then Disc-Ink 50, Panel-Ink 100, Ink-Put 150, Dance Dance Ink 200, Ink-Tar Hero 250, Lumen Ink 300), and the vault behind them now holds one showstopper for EACH of those eight: play all eight, unlock all eight, then fight with all eight. Two brand-new minis fill the gaps — DISC-INK is one disc and one shot at the corner pocket, LUMEN INK is the real timeline sweep clearing 2x2 squares — joining the Tetr-Ink well, the Ice-Ink slide, the Panel-Ink match, the Ink-Put row, the DDI dance and the Ink-Tar solo. The damage scale is now the advertised one: a fumbled showstopper really is 0% and does nothing at all, a flawless one is exactly 1000% and takes two of the rival's three bars. The count is load-bearing now — bbOctaCheck() fails the build if the ladder and the showstopper roster ever drift apart."],["v0.661","A CLEARED RUN NO LONGER SAYS LOSE. Odaroo cleared an Ink-Tar Hero song — ENCORE, four stars, a new record, a new track unlocked — and the bill underneath it stamped a red LOSE. The cause was one line in the shared bill (js/share.js): it printed WIN or LOSE unconditionally and read a win flag that NOT ONE of the eleven solo screens has ever passed, so it read undefined and every solo bill in the game stamped LOSE — Tetr-Ink, Ice-Ink, Panel-Ink, Ink-Put, Dance Dance Ink, Ink-Tar Hero, Lumen, Superstars, the Jams and Disc-Ink alike, and the little inkling on the card wore the surprised stepped-on face and was drained of colour along with it. Now a solo run carries its own verdict: a run that CLEARED says CLEAR in green with a happy inkling, and a run that simply ended says nothing at all — the screen headline above it (THE WELL IS FULL, THE ICE SHATTERS, BOOED OFF) is already the verdict and the bill has no business scolding a solo player twice. A real match against a real person still says WIN or LOSE exactly as before. The shared PNG matches its card. Every game that can be cleared now hands the card the answer: Ink-Tar Hero, Dance Dance Ink, Ink-Put, Superstars, the Wednesday Jams and the stage-clear wheel."],["v0.660","THE SCREEN TELLS YOU WHERE YOU ARE, AND THE BACK BUTTON IS GONE. Profile, Album, Mart and Gigs/Badges no longer carry a BACK button on their top bar — B on the D-pad walks you out of all four, and Gigs and the badge wall keep their own BACK at the foot of the list. (The badge wall's old BACK pointed at a screen the game redirects straight back to the badge wall, so it had quietly been a button that went nowhere.) In its place, hard right just under the film reel, every one of those screens now wears a little lit marquee: a neon sign with twenty-four bulbs chasing one lap around its edge, reading PROFILE, ALBUM, MART, DAILY GIGS, ODD GIGS or BADGES — and the badge screen's sign follows whichever of its three tabs you are on. The profile is a proper showcase now: the inklet and the username are both a quarter bigger, and two big yellow pens say exactly what you can change — one on the right-hand side of the frame, level with its middle, which opens the FRAMES rack, and one beside your name, which renames you."],["v0.659","THE SLIDING FRAME IS FIXED. The 24-BIT frame was drifting diagonally across the inklet instead of sitting on it and turning like every other frame. The cause was never in that frame's own styling, which is why the last attempt could not shift it: the rule that shrinks the INKLET SPRITE inside a frame excluded exactly one frame by name, and the 24-BIT ring is the only other frame drawn as a bare SVG, so it was being given the sprite's shrink. Its spin then interpolated from that shrink instead of from its centring, and the browser turned the mismatch into a slow diagonal slide that grew as it went, with no rotation in it at all. Measured at 36.6px of drift in a 64px box; it is 0 now, and it turns a clean quarter at a time at constant size. The same naming problem was also drawing it at 40.6px where every other frame measures 61-66px, so it sat as a small ring floating inside the inklet rather than a frame around it; it is 60.3px now, in line with the rest. Both exclusions are keyed on a shared class instead of a hand-written list, so a frame added later is exempt by construction rather than by somebody remembering. Also fixed a contradiction in the pre-flight, which reported DECK-A-THON's deliberate no-field entry as a stray key: both folds are clean."],["v0.658","The profile's wardrobe gets WEAR ALL and UNWEAR ALL. Under each of the three racks — GEAR, COSTUMES and FRAMES — there are now two buttons: a gold WEAR ALL that puts on every piece you own in that category, and a black UNWEAR ALL that takes them all off. They only ever touch the shelf you are standing in front of, so unwearing all your costumes leaves your gear and your frames exactly where they were. The old WEAR EVERYTHING button is untouched and still dresses you in the lot at once."],["v0.657","The 24-BIT frame no longer steps outside its ring. It was drawn 112% wide — bigger than every other frame's circle — and it advanced in 24 hard steps instead of turning, so it read as jumping out of bounds. It is now the same simple 104% circle on the same smooth linear spin as every other frame, with its gold glow eased back to match."],["v0.656","PANEL-INK: THE BOTS TURN UP, AND THEY PLAY BY YOUR RULES. Odaroo: \"none of them are fighting back… he has to play and not just stand there\", and \"I'm filling up the screen on his side, but he's still alive — five additional lines above the maximum line the bot survived on.\" Both were real and both are fixed in the room (server/lobby.js). (1) THE BOTS WERE PLAYING AT A FIFTH OF THE GAME'S SPEED, because Panel-Ink was borrowing Tetr-Ink's clock: stepMs is TIME OVER A PIECE, and one to two seconds is right for placing a tetromino but absurd for a swap — a person makes two to five of those a second. ALPHA moved once every 1.4-2.2s and hesitated another 1-1.5s on a third of them. Panel-Ink has its own clock now (HZ_STEP) and its own much shorter hesitation. Measured over four minutes: ALPHA 80 moves a minute and 27 attacks, BETA 123 and 49, OMEGA 191 and 109 — where the shipped build sent ZERO attacks in five. Difficulty is still sloppy, which square it picks, so ALPHA is still the friendly one; all three simply turn up. (2) THE BOT HAD NO CEILING. Your Versus board climbs on a clock and tops out at row 0 — v0.648 restored that — and the bot was never brought along, so for six builds you raced a ceiling your rival did not have and a board packed solid to the top played on happily. It rises on the same clock now and the rise is what kills it, exactly as it kills you. The per-bot dials said 2.6-5.2s a row against your 12.5s; using them would have drowned every bot in a minute, so both boards share ONE number (HZ_RISE_MS). Flooded with junk on purpose ALPHA now dies at 42s, BETA 43s, OMEGA 92s; in a fair match all three survive. (3) AND THEY DIG. A clear that touches a junk wall is scored far above one that does not, the idle move can push a panel sideways into empty space (it could not, which is how a board slid into a single column and left the bot with no legal move at all), and it looks one move ahead so it plays toward a set instead of stirring. (4) THE CLEAR ANIMATION IS COUNTED OUT AGAIN, ONE PANEL AT A TIME, bottom-left first and up to the right — the same order the junk wall unwinds in — then the board holds still for a breath before anything falls. That pacing is the window in which you can force a combo, not decoration. This reverses v0.624 on purpose: the complaint then was the direction, top-left to bottom-right, not the sequence."],["v0.655","THE FRAME GOLDEN RULE, AND THE INKLET FINDS ITS SEAT. (1) THE ONLY FRAMES ARE THE ONES THAT EXIST. A frame id the game does not know now draws NOTHING at all instead of falling back to an improvised ring — which is what turned a rival's frame into an oval or a square in an online match. The retired ids (beta, alpha, global, crew, ripple, satellite, reel) and the three invented bot rings are deleted from the drawing code and the stylesheet, a save carrying a dead frame quietly drops it, and a frame arriving over the wire is filtered before it can put a stray class on anybody. Bit-Brawl stopped rolling the enemy a RANDOM frame every re-render — your rival wears the frame they are actually wearing, or none. (2) ALPHA, BETA AND OMEGA WEAR REAL, LOCKED FRAMES: the HOUSE CHIP, the CHAMPION BAND and STELLAR — three of the earned ones, one each, never changing, and all three still locked for a new player. (3) THE POP WAS TWICE THE SIZE IT WAS MEANT TO BE. The combo reaction replaced the inklets resting scale instead of multiplying it, so a good run grew the face to double size, up over your username and 13px off the side of a folded phone — on seven of the eleven games. It is a real pop now, capped by one shared number, and the gap under the name reserves exactly the room that pop needs. New in the pre-flight: every game is checked with its inklet forced to its LARGEST animation — the name above it, the screen edges, the D-pad and the stats underneath all have to survive it — plus a check that proves no frame outside the list can ever be drawn."],["v0.654","THE GLITCH CROWN'S WEATHER, REWORKED (Odaroo). The rotating LINE rain is gone — no more streaks leaning over, blowing sideways and sweeping through an angle. What falls now is BIG ROUND DROPS, all of them large, straight down like rain on a window seen from above the street, each one landing at its own depth on the glass and bursting into a bead with a few fingers running off it. About one drop in five is INK: where it lands it leaves a coloured stain that spreads, leaks downward and shifts the hue of the game showing through it at 50% — it stains the picture rather than covering it, so you can still read the playfield under it. The colour inversions keep every one of their palettes but arrive HALF AS OFTEN: the quiet gap between bursts is doubled, and the crown's extra glitch bursts are halved too."],["v0.653","MATCHMAKING, TIDIED. Three things Odaroo asked for on the way into an online match. (1) NO FRAMES ON THE MATCHMAKING STAGE — v0.648 had put the worn frame ring around both inklets on the VS/CONNECTING screen, and a hard decorative circle punching over the roulette silhouette and then over the reveal is what was popping out. Both rings are gone; the stage shows the bare inklets, colour, gear and costume and nothing else. The ring is untouched everywhere else it belongs. (2) THE TWO LITTLE GAME BOY SCREENS ARE IN FULL COLOUR — the green handheld tint washed both inklets to the same pea-soup silhouette, so you could not tell yours from theirs. The well is still a dark handheld screen; the sprites on it are simply themselves now. (3) THE REAL D-PAD GOES AWAY FOR THE WHOLE LINK-CABLE ANIMATION, the OK and its zoom-in included — the drawn handhelds already carry their own crosses and buttons, so the live controls underneath were a third set nobody could press. It comes straight back the moment the overlay clears, including on the safety net, so a frozen tab can never leave you without controls."],["v0.652","DISC-INK's turn arrow is now GOLD and nearly twice the size. The small red mark was saying the same thing the two coloured discs under the portraits already say, and it disappeared into a table full of red discs; gold belongs to neither player, so it reads as the match pointing at whoever's shot it is, with your own colour surviving as a glow around it. The discs underneath are untouched. The name strip gives the arrow extra daylight whenever there is spare room and hands that room straight back to the usernames when there is not, so no name shrinks to pay for it. And the inklet can no longer hide behind the film reel: Lumen Ink, Dance Dance Ink and Ink-Tar Hero mount their portrait under their own class names, so every rule that pushes a face clear of the top strip had been missing all three - Lumen's sat at y=35 against a banner running 30 to 63, half under it and behind it in paint order. All three are measured down below the reel now, and any future game is covered by construction. Also un-stuck the Panik bot's own test, which was still asserting rows after hzBotFill started counting playable panels."],["v0.651","BIT-BRAWL's rear-projection movie no longer shows two smiling faces. The round, grinning cartoon fighters are gone; in their place two plain black stick-man silhouettes square up and trade jabs, cut out against a warm spotlight on the stage boards so they read clearly. The HP bars, the impact flash and the fan of cards are unchanged."],["v0.650","ONE HUD, EVERY SCREEN. The film-reel bar from the main menu — your inklet, your whole username, ink and cups — is now the top of the Album, the Mart, Daily Gigs, the badge wall and your Profile, identical on all of them: same height, same portrait, same name at the same size, same chips in the same place. Moving between screens no longer resizes or shortens anything. The shortened '12345…' on Gigs was a THIRD kind of name bar that could only ever clip rather than shrink to fit; it is deleted. Each screen's own BACK button and title (and the Mart's ink/lunes/reels purse) now live in a second black row underneath the reel, so the HUD itself is never negotiable per screen."],["v0.649","INK-PUT, rebuilt around Odaroo's four notes. THE ARROWS ARE PAGED: a wave is at most EIGHT arrows now (it was twelve) and the screen only ever holds FOUR of them — press the first four and the next four appear in their place, same size, same spot, with a small dot strip underneath saying how many pages are left. Because a page is always four on ONE line, the arrows no longer shrink to fit the worst case: the folded phone gets a calmer 61px arrow instead of 77px, the unfolded one keeps its full size, and the folded screen no longer stacks four arrows into a 2x2 block you cannot read left-to-right. TWO CHALLENGES ARE RETIRED BY NAME: the METRONOME (the ball running left and right — the only challenge in the bag that could charge you HP over and over instead of resolving on a single press, which is exactly why it felt unfair against a bot) and MEGATON SMASH (the two boxes closing on a middle line). Their share of the deal goes to the two Odaroo asked to keep, the mash and the charging bar. THE TIMING BAR'S SAFE AREA MOVES NOW: the band used to sit at the same height on every wave of every run, so after a few waves you were pressing a memorised spot rather than reading the bar. It is rolled fresh every wave, fenced so it can never hang off either end of the tube, and drawn from the shared seed so an online match puts both players' bands in the same place. AND THE THREE BOTS ARE RE-SPREAD: ALPHA is slower and fluffs more than half the time (it bleeds itself dry in about a minute — keep your own bar alive and you win), BETA is a genuine race that goes under as the drain steps up, OMEGA clears almost everything almost instantly and is the wall. The pre-flight grew with it: the pager, the page being one line, the eight-arrow ceiling and the moving band are all asserted now, and each was broken on purpose first to prove it can fail."],["v0.648","DISC-INK SOLO IS A SOLO RUN AGAIN. The stats box in the rival's corner is gone: stage, time, shots and shots-left are now plain text stacked under the inklet on the left, the way every other game does it, and the duplicate strip across the middle of the felt is gone with it. The reason solo felt like somebody else was playing was real — the shot handler was rebuilding the name bar as a two-player match bar naming THE RIVAL on every single shot, which is also why your username was clipped to ODAR: it was inheriting the half-the-screen cap meant for two names. The red and green disc no longer lands on the inklet's face; it is measured off the portrait now instead of being pinned at a guessed height. One swipe on the home carousel moves exactly one game — an ordinary flick was firing twice by construction, not by mis-tuning. The badge wall opens on THE HOUSE and then runs in ladder order, and INK-PUT WAVES is folded into a single INK-PUT section. And the username no longer shifts as you move between screens: it is centred between the white sprocket dots on every screen, always."],["v0.647","PANEL-INK's Versus rise put back, and the connecting screen cleaned up. THE RISE: v0.646 read \"big combos make blocks rise from underneath\" as a request to delete the auto-rise in a duel — it was not, and it took the B-lift with it. The board auto-rises in Versus exactly as it does in solo again, and holding B still hurries it along; the only Versus difference stays what v0.643 made it (no time ramp, so a duel cannot quietly accelerate). The pre-flight now asserts the opposite of what it did three builds ago: the stack MUST rise on its own, and holding B — pressed through the real controller door, which is what sets the hold flag — MUST be faster than waiting. THE JUNK YOU SEND: the bar landing on the rival's little board is drawn from state now instead of being appended to an element whose HTML is rewritten twice a second (that is why it was invisible), it has a minimum size, a gold rim and a glow so it reads at quarter-tile scale, and the whole board flinches white when one lands. And the real culprit is fixed: the room's own bot was three builds behind — it read \"4x1\" with parseInt and turned your bar into four forced rises, and its encoder could not report a junk cell even in principle, so against a bot nothing ever landed. It now plays your rules: slabs from the sky, junk that never matches, same-kind breaking, the six-second stuck rule and your exact four-block attack table. A new headless harness drives the room's own brain and gates the deploy. THE LINK CABLE: the only text on that screen is OK — the LINK CABLE caption and the two usernames under the handhelds are gone. The VS stage wears your real frame now, not just your colour and gear, and the rival wears theirs off the wire. The roulette is silhouettes only: the one-in-seven shiny was pulsing a white-gold glow around itself because the blackout was on the drawing and not on the container. THE MATCH CLOCK is static and dead centre, and the word TIME is gone — it was re-anchoring itself to the bobbing portraits once a second, which is exactly why it stepped sideways as the inklet animated."],["v0.646","PANEL-INK Versus, the three playtest fixes. (1) THE CURSOR IS ON TOP OF EVERYTHING. It was at z-index 3, which beat the junk blocks but LOST to every layer of the unwind — so the moment a wall started coming apart, the one thing telling you where your hands are vanished underneath it. Nothing in this game may be drawn over the cursor now, and the pre-flight measures it rather than trusting it. (2) YOU WATCH YOUR OWN ATTACK LAND ON THEM. Their board only comes back over the wire twice a second, and when it did the slab was already sitting there — so the one moment worth seeing was never drawn at all. Your bar now falls from above their miniature onto the top of their stack and thumps, using their board and the receiver's own landing math so it lands where the real one will; and junk on the rival board is crate-coloured with a gold rim instead of a near-black square you could not pick out. (3) NOTHING RISES FROM UNDERNEATH IN VERSUS, EVER. There was never any push-from-below in the attack path, but Ink Panik's auto-rise shoves a fresh row of six panels in at the bottom on a clock — and because it parks while a clear resolves and then resumes all at once, it read as though a big combo caused it. It is gone in a duel: the only thing that may grow your board is a slab falling from the sky. The peek row under the floor and the B-lift go with it, since both promise a climb that will never come. Solo is untouched — the rising stack IS the solo game. And because the ceiling can no longer be reached by rising, a board too full to take the slab trying to land is what ends a Versus match now: you get six seconds with the board flashing to make room first, so an attack still cannot kill you on a frame you never got to play, but two buried boards still produce a winner."],["v0.645","PANEL-INK's online junk fixed, four rules deep. (1) ONLY a four-block deletion attacks now — a plain three-in-a-row that happens to cascade sends nothing at all, where before it posted a wall on the other player; that runaway is why matches were over in ten seconds. A 4+ clear sends a small one-row BAR, and a combo adds a second, deeper bar that grows with the combo. (2) An incoming slab can no longer kill you: if there is no room for it, it WAITS at the front of the queue until you make room, so the only way to lose is still your own stack reaching the ceiling. (3) The unwind is ONE animation instead of two — each cell of the wall turns over showing the actual coloured tile it was hiding, bottom row first and left to right across the whole wall, and once everything has been shown the entire lot drops together on one beat. The whole block comes apart in one hit now, not one row of it, so you can dig out of junk before it catches up. (4) Junk only connects to junk of the SAME kind: connected crates clear as one wall, a piano sitting on a crate does not. And online the stage no longer creeps — the speed ramp is off in a duel, so a long match cannot quietly get faster the way it looked like the enemy was levelling up."],["v0.644","DISC-INK: the text box is gone, the coin is real, and the turn is an arrow. THE TOSS is no longer a flat disc that squashes to a line and then shrinks away into the corner — it is a proper pixel coin with a THICKNESS: two stepped pixel faces (RED and GREEN, so you can read which is which at a glance) held apart by eleven milled-gold rim slices, tossed up off the table, spinning end over end, and landing flat on the colour you play. THE TURN BANNER IS GONE. Nothing on the playfield spells out whose shot it is any more; instead a small pixel ARROW appears beside the username of whoever is on, in THAT player's own colour — the colour the coin just landed on for them, so if you are red your arrow is red and the rival's is green — and it nudges gently left and right to say it without shouting. It sits in the daylight between the two name strips rather than inside them, so no username loses a single pixel to it. AND THE MIDDLE STRIP IS NOW THE MATCH CLOCK: the same film reel the usernames ride, carrying the word TIME above the running match time at the same size the names print at, counting up from 0:00 the moment the table is racked."],["v0.643","THE FILM REEL MOVES DOWN, AND THE INKLET IS THE SHOWCASE. The gap above the reel is four times bigger and it is ONE number now (--hudtop, css/base.css) instead of a bare 4px copied into six rules — so the home bar, both VS corners in every minigame (you top-left, your rival top-right) and the CONNECTING/CONNECTED reel all sit on the same new line, and moving one moves all of them. The little brown camera around your inklet is gone: the frame IS the picture now, and the inklet on the home bar and on your profile is bigger to match (a separate showcase size, so no playfield loses ground to it). Two measurement bugs fell out of it, both older than this build and both silent: v0.640's D-pad ceiling for the Tetr-Ink and Ink Panik side columns asked for an element id that does not exist in this game, so it never once ran; and both columns were dropped below the inkling with a sum that forgot a margin is measured from the CONTENT box, double-counting the wrap's padding and wasting 53px that pushed the run box's clock under the controls."],["v0.642","The rival inkling comes alive. In every online and VS game the enemy's face in the top-right corner now reacts to its OWN play the way yours does — it pops, hypes, sings on a chain and pulls a face for a big clear — drawn from THEIR colours and gear, never yours. Usernames are one universal size everywhere: both corners now print at the main-menu size instead of quietly shrinking when a name runs long, because the strips share the empty daylight in the middle before the lettering is ever stepped down. Both inklings sit level and evenly inset on either side, at the same size as the menu's portrait. And ALPHA, BETA and OMEGA each keep their own frame for good — a dotted green ring, a teal ring with an orbiting spark, and a haloed red one — even when the game redraws them with nothing to go on. The pre-flight gained two new rules to keep all of it honest."],["v0.641","THE PIPELINE'S OWN SUGGESTIONS, ACTIONED. Four of the seven NEXT LEVEL items are built. The victory bill got faster without changing a pixel: the stylesheet cut that runs when you press SHARE is now indexed against what is actually on the card before the browser is asked anything (68ms to 17ms, and the result is byte-for-byte the same stylesheet as before - proven by diffing it against the original algorithm), and the picture is made ONCE per bill instead of once per button, so saving a card and then sharing it no longer draws the whole thing twice (1063ms to 0). Three new workshop tools: rename-game.js finds a game name on all thirteen player-facing surfaces and prints every hit for judgement before it writes anything, never touching the code names or the changelog; check-game-wiring.js proves every game has its splash, its arcade name, its own playability self-test and its playfield, AND that every table spells its name the same way, so a half-finished rename now fails the build; and sync-modules.js makes the four module lists GENERATED from one manifest instead of hand-maintained, so adding a module is one line in one file. The last two gate the deploy. The Pipeline page itself now marks what is built, what is still open and why, and says plainly that nothing in the MONEY section can be built by code because every lane starts with a decision only Odaroo can take."],["v0.640","EVERY GAME'S SPLASH SCREEN IS REBUILT. The name is now dead centre of the black screen, big, in shiny gold that catches the light, with the Japanese name right underneath it. Pixelated golden WINGS spread out behind the title at half opacity, spanning it left to right and breathing gently. The checkered flags no longer squeeze the name from the sides — they now cross as an X underneath the words, on their own poles, and each one waves through a real ten-frame flag animation that snaps pose to pose like a sprite sheet instead of sliding about. Every one of the twelve games gets it, because they all come out of the same card."],["v0.639","THE ONLINE SIDE IS NOW TESTED BY ACTUALLY PLAYING IT, AND THE PRE-FLIGHT HAS STOPPED RUBBER-STAMPING. Three things shipped. FIRST, the pre-flight plays three real bot matches every run — Tetr-Ink, Disc-Ink and Panel-Ink — and each one has to OPEN (which is the connecting screen proved end to end, the breathing black screen that never becomes a game), has to SURVIVE a ghost tab's implicit walk-out (the twenty-second freeze, written down as a test instead of as a comment), and where the room publishes a rival board the bot has to actually MOVE. A frozen rival now fails a build instead of reaching a player. It was broken on purpose first and it failed on all three counts, which is the only way to know a check is real. SECOND, the automated pre-flight itself was a green light with no bulb in it: it read the self-test's result object as if it were a list of faults, so every run it has ever done was pronounced CLEAN whatever was in it, and it accepted every new fault as already-known on top of that. It reads the real list now and only forgives a fault when somebody deliberately says so. THIRD, the door every online match walks through can no longer dead-end: if anything in the middle of the entrance throws, the curtain comes down, the controls come back and the match starts anyway, immediately rather than after a wait. One fault is now visible and deliberately carried: Ink-Put's playfield box crosses the controls by about twenty pixels on the unfolded screen. It is marginal, it is old, and it is named rather than hidden."],["v0.638","THE MART AND THE PROFILE ARE ONE SYMMETRICAL 4x4 SHELF. Both screens now draw the same grid: four across, four down, square cells, ART ONLY — no names, no prices, no stat tags cluttering the tile. GEAR is sixteen, COSTUMES is sixteen, and FRAMES now shows the WHOLE wall rather than only the ones with a price on them. Every tab pads itself out to full rows with empty shelf holes, so a half-empty profile rack still reads as a proper 4x4 shelf instead of a ragged edge, and it stays four across on BOTH folds — the unfolded screen gets bigger cells, not a different shape. Tap anything and you get a detail card: the item name, what it costs, and what it does, in plain words. No combat numbers anywhere yet — those arrive with Bit-Brawl. A locked frame tells you exactly how it is earned and how far along you are. The profile card that used to print an ATK/HP/SPD/NRG row now prints COST and EFFECT instead, and its text had to be pinned to cream because it was inheriting the dark page colour and drawing ink-on-ink at 1.1:1 inside its own dark card. Characters are called INKLETS now, not inklings, everywhere the player can read it."],["v0.637","THE WARDROBE IS REBUILT — SIXTEEN GEAR AND SIXTEEN COSTUMES, ALL REDRAWN. Every piece of gear and every costume was redrawn from scratch on a canvas 44% bigger, so the art has real detail now instead of three flat boxes: folds, trim, shading and highlights on all of it. The cape especially — it hangs BEHIND the inklet as a proper sheet of cloth that fans out as it falls, with fold lines and a scalloped hem, instead of the two side bars that read as boxy hands. Three retired pieces came back (cape, flight goggles, stomp boots) to round the gear rail out to sixteen, and ten new costumes joined the six: DREAD PIRATE, HEAD CHEF, TIN KNIGHT, SUSHI ROLL, PRICKLY PAL, DEEP DIVER, RANGE RIDER, TIN AUTOMATON, BUZZ SUIT and COUNT INKULA. That is exactly sixteen per tab, so the Mart shelf now draws a perfect 4x4 with no empty holes. Gear, costumes and frames all still mix freely — wear the lot at once if you like. THE GLITCH CROWN is now the flex it always claimed to be: put it on and ink RAINS on your screen at half opacity, as if you had left the phone out in the weather, the rain slowly swinging from straight down to fully sideways and back; the picture splices in half like a stretched VHS, the tracking rolls, and the whole palette drops through inverted hues. It is deliberately hard to live with. No bot can ever wear one — it is yours alone. And the town gets dressed fresh every session now, so rivals turn up in outfits you have actually not seen before."],["v0.636","The blueprint is now THE PLAYER'S GUIDE, and it answers to /guide and /players-guide. The page has been rebuilt from scratch as a scroll-driven fan broadsheet: nine full-bleed chapters with film grain, a gold projector strip that tracks your scroll, a chapter rail that lights up as you pass, and huge chapter numbers printed faint behind the words. The ten games each get their own cabinet card in the game's own colours, with a line on what makes it unlike the other nine; the unlock ladder, the sixty-five carts, your inkling, the Mart shelf, the online parlour and a full tips-and-cheats back page follow. It carries no build press, no costs and no workings any more - it is for players. Checked clean at both folds: nothing clipped, nothing off-screen and no text under 4.5:1."],["v0.635","PANEL-INK, three fixes from Odaroo. (1) The online stat that read PUSHED is now JUNK SENT. It was named after the forced rise retired in v0.594; what it has actually counted ever since is slabs posted at your rival, and the end-of-match bill already said JUNK SENT, so the two finally agree. (2) A CLEAR IS NOW ONE ANIMATION. Every matched panel used to pop one at a time, 260ms apart, walking the board top-left to bottom-right, so a clear at the bottom visibly unfolded before the top ever moved and a big chain link spent over two seconds dismantling itself. The white flash still gets its own beat so you can read which panels are going; then all of them pop on the same frame and gravity runs once. Measured on a match split between the top and bottom of the board: six panels, one step, no staircase. (3) THE CEILING IS THE CEILING. Being buried tested row 0 OR row 1, so you died with a visibly empty row still above the stack. That was a look-ahead, not a ceiling. It now ends on row 0. And the grey curtain had two blind spots, both at the bottom of the screen where Odaroo spotted them: the peek row under the floor was skipped outright, and a garbage slab is a different element entirely, so a board buried in junk kept every crate and anvil in full colour under a grey sky. Both now grey out and take an X with the rest. Also: JUNK SENT is two words in a half-width cell, so the online column sizes its cells to their own content instead of a forced half each. No wrap, no clipping, at either fold."],["v0.634","TWELVE NEW FRAMES, AND NOT ONE OF THEM IS A SQUARE. Every frame in Inkville is now the same circle the CLASSIC WHITE ring draws — the rings that used to inherit their shape from whatever box they sat in (which is why BETA wore a hard SQUARE neon frame in the lobby) are pinned round for good. On top of that: twelve brand-new frames, one for each game plus a secret GLITCHED and a final STELLAR, each a circle in its own colour with one small thing moving gently around its rim — falling blocks for TETR-INK, creeping frost for ICE-INK, a dealer chip for DISC-INK, sliding panels for PANEL-INK, a chasing arrow for INK-PUT, orbiting shots for BULLET BALLET, chasing floor lights for DANCE DANCE INK, an amp glow for INK-TAR HERO, a breathing halo for LUMEN INK and a champion belt for BIT-BRAWL. They are EARNED, never sold: win three rounds of a game to take its frame (five for Bit-Brawl), win in five different games for the secret GLITCHED, and earn every game frame for STELLAR. A locked frame now tells you exactly how to get it and how far along you are, instead of saying BETA GIFT. ALPHA, BETA and OMEGA each wear their own fixed circular ring that no player can buy or earn."],["v0.633","THE PIPELINE BECOMES THE ENCYCLOPEDIA OF INKVILLE - THE CREATOR'S OWN DOCUMENT, WITH THE MONEY IN IT. The board at inkville.odaroo.co/pipeline gained two sections, and a line at the top saying plainly what it is for: everything about RUNNING the studio lives on this page, and the blueprint stays purely the player's guide with none of it. MONETIZATION PLAN takes the web-only decision as settled - no native app, no store, no thirty percent - and walks the four lanes honestly. Ads between runs: rewarded video on the end-of-run bill, through Google's H5 Games Ads, never mid-run and never a banner. Supporter donations: Ko-fi first, because it takes an afternoon, takes no cut and needs neither accounts nor a consent banner. Purchases: bundles of three to ten dollars through a merchant of record that carries the tax, never ninety-nine cent items, because a fixed thirty-cent fee eats a third of them. And the portals - itch, Newgrounds, CrazyGames, Poki - which are the lane that actually matters. Three warnings are written in as hard rules: nothing sold or watched may ever buy power that reaches the online ladder, or the room becomes pay-to-win; nothing durable can be sold at all until the save stops living in localStorage, because a cleared browser is a refund you cannot verify; and the first advert is the end of the game's clean privacy story, with children's rules to read before it goes live. RESOURCES, COSTS AND REVENUE lists what the project runs on and what would break if it went, puts the whole burn at roughly eighty to two hundred and sixty dollars a year, and gives worked revenue examples at five traffic tiers - whose only real conclusion is that distribution, not the ad rate, is the entire business. Verified clean at both fold sizes, every nav link lands, and the wide money tables scroll in their own boxes rather than pushing the page sideways."],["v0.632","THE REAR PROJECTION — every game's tile on the boulevard now plays a little movie of itself behind its name. Tetr-Ink shows a half-played well with pieces still coming down; the Ink Rink a sheet of ice with the red arrow gliding across it; Disc-Ink the felt table and its discs; Panel-Ink a wall of panels creeping up; Ink-Put a ball rolling into the cup; Bullet Ballet a field of bullets pouring past the pilot; Dance Dance Ink four lanes of arrows climbing; Ink-Tar Hero notes running down the fretboard; Lumen Ink a beam finding its mirrors; Bit-Brawl two acts squaring up over a fan of cards; and the Deck-a-thon its wall of cartridges. Each one is a perfect five-second loop, blurred and dimmed like a rear projection thrown on the wall behind the curtain, with the projector's own scan lines, film grain, lamp flicker, a signal glitch and a dark-cornered vignette on top. It is drawn procedurally like everything else here and runs on nothing but CSS, so it costs no framerate. The vault keeps its secret: while Bit-Brawl is still locked it shows no movie at all."],["v0.631","THE PIPELINE IS A LIVE PRODUCTION BOARD, AND IT ANSWERS TO ITS OWN ADDRESS. inkville.odaroo.co/pipeline now opens the studio's internal dashboard directly - the bare name works, and so does /blueprint for the player's guide, because the room's file table gained a key for each rather than a new rule. The page itself was rewritten from the old audit report into the board Odaroo actually checks. PROJECT STATUS shows the current bill under its real names, front to back - TETR-INK and ICE-INK free, then DISC-INK, PANEL-INK, INK-PUT, Bullet Ballet, Dance Dance Ink, Ink-Tar Hero, Lumen Ink, with BIT-BRAWL as the vault at the end and Deck-a-thon parked. RECENT SHIPS lists the last ten presses in plain language. HEAVY ROLLERS names the five things that cost the most time per unit of visible change - the game renames, the online bot AI, the game-over flow, the jukebox, and the deploy gate itself - and says why each is expensive. EFFICIENCY WINS records what is already earning its keep: parallel tasks, the one-command deploy, the module split, and the memory that carries between devices. NEXT LEVEL turns each recurring cost into a one-time build, ordered by how much time it gives back. ROADMAP carries the backlog forward, and HOW WE WORK writes down the cycle - play, feedback, fix, deploy, play - and the standing rules it runs on. The build number now stamps itself from the changelog instead of being typed in, so the page cannot go stale the next time somebody ships. Verified clean at both fold sizes with no clipped or off-screen text, and the footer's small print was lifted off a 3.99 to 1 contrast that failed AA."],["v0.630","THE JUKEBOX IS A TWO-SIDED RECORD NOW. Side A is odaroo's own recordings, and Side B brings the 18 chiptunes back onto the shelf — they were delisted in v0.558 but never left the game, and they are the band Dance Dance Ink, Ink-Tar Hero and Lumen Ink are scored against and the music Bit-Brawl fights to. Every one of them is listed with where you actually hear it, worked out from the game's own tables so a renamed game re-labels itself. The whole deck speaks both machines: the transport, the flipping track number, the marquee and the 20-bar analyser all work on a chiptune exactly as they do on a record, with the analyser tapped off the band's own bus. Because a chiptune is a sequencer rather than a recording it has no needle to scrub, so on Side B the bar shows how far through the loop the band is and the readout gives the tempo and the loop count instead. Each side keeps its own drag-to-reorder order, and a row cannot be dragged across the divide."],["v0.629","TETR-INK: the game-over line is the very top row, and nothing higher. Odaroo spotted an invisible line above the stack that ended a run while the top row was still visibly empty, and he was right — there were two causes. A tetromino does not fill its rotation box, so spawning every piece at row 0 actually put an I-piece's only row on the well's SECOND row; and there was no room above the well at all, so the one spawn position had to be free or the run ended. Now every shape is normalised by its own topmost cell, and if that is blocked the piece comes in from the space above the well and drops into row 0 the way the real game does. A run only ends when the well is genuinely full to the very first row. And when it does, the piece that could not fit is left sitting on top of the stack it clashed with, drawn inverted with a hard ring and a slow blink, so you can SEE why it is over instead of the run just stopping — it survives the grey curtain until the ceiling row buries it. HOLD swaps in the same way, so a swap can no longer kill you either (a blocked swap simply does not happen). Tetr-Ink's own pre-flight now proves both halves for all seven pieces and proves the clash piece is actually painted; the old rule fails it on every shape."],["v0.628","THE RECORD DIES ON A GAME OVER. Lose a run in ANY game and the music now winds down like a turntable losing power, the needle jumps the groove with a real record-skip scratch, and the song stops dead. Press HOME and the main theme picks straight back up on the boulevard. WIN and nothing happens at all - your tune keeps playing under the victory bill until you walk out. It is wired into inkEndTop(), the one door all fifteen ending screens in the game walk through, so every game got it at once and any game added later inherits it for free."],["v0.627","The name goes back to TETR-INK. v0.622 dropped the hyphen; Odaroo changed his mind, so the falling-blocks game reads TETR-INK again everywhere a player sees it — the splash, the carousel tile, the how-to-play card, the arcade log and its challenges, the Bit-Brawl showstopper, the jukebox row for the Telegraph record, the online banners and the blueprint's game list. テトリンク never moved, and nothing about how it plays changed in either direction."],["v0.626","INKAMP, the Winamp jukebox, gets its full deck. A 20-bar spectrum analyser now bounces off the real audio the way Winamp's always did — logarithmic bands with a treble tilt so every bar moves rather than just the bass four, each with a peak cap that hangs and falls. The track number is a big lamp on the LCD that flips over when the record changes, and the title beside it scrolls as a seamless marquee when it is too long for the glass. The transport is complete: prev, play, a real PAUSE that holds its place instead of secretly stopping, stop, next, and a start-from-the-beginning button. The seek bar is a drag now, not a single click, so you can actually scrub. And the playlist can be dragged into any order you like by its handle — numbered, saved, and remembered next time."],["v0.625","INK PANIK IS NOW PANEL-INK. The rising swap puzzle keeps its Japanese name and everything about how it plays, but everywhere its English name appears it now reads PANEL-INK: the splash card on the way in, the carousel tile and its lock, the arcade log, the four achievements that name it, the how-to-play card, the jukebox row for its record, the online match name and the end-of-run bill, the Bit-Brawl showstopper that borrows it, and the blueprint guide. Internal names were left alone on purpose, so nothing that already works can break."],["v0.624","INK-PUT drops its exclamation mark. The game is called INK-PUT everywhere a player can see it now — the splash card on the way in, the home carousel tile, the unlock ladder, the arcade log in your profile, the badge wall's INK-PUT WAVES crest, the online match banner, the showstopper mini in Bit-Brawl, the card dossier and the blueprint guide. Nothing else changed: the same game, the same waves, just the tidier name."],["v0.623","CROWN DELUXE IS NOW DISC-INK. The parlour game has a new name everywhere you can read it: the carousel tile, the splash on the way in, the unlock ladder, the pause-menu how-to-play, the arcade log and its two badges, the jukebox row for MOON MATHEMATICS, the online room's game label and the end-of-match receipt. The Japanese subtitle is unchanged. Nothing about the table, the cue, the rings or the rules moved - this is the name and only the name."],["v0.622","TETRINK. The falling-blocks game is called TETRINK now — one word, no hyphen. The splash on the way in, the carousel tile, the how-to-play card, the arcade log, the challenge names in Bit-Brawl, the jukebox row that says where the Telegraph record plays, the online match banner and the blueprint's game list all read TETRINK; the Japanese subtitle テトリンク is unchanged. Nothing about how it plays moved."],["v0.621","ICE-INK — the Ink Rink is renamed. Everywhere the game says its name to you, the second free game is now ICE-INK: the splash on the way in, the carousel tile, the unlock ladder, the how-to-play card, the gigs that ask you to clear floors, the arcade log and badge wall, the jukebox row, the online challenge list, the Bit-Brawl showstopper title, the end-of-run bill, and the blueprint guide. The Japanese line under it is unchanged. Nothing about how the game plays has moved."],["v0.620","THE MART SHELF IS THREE OF THE SAME PACK, 1-2-3. The booster packs now stand side by side as one ladder of the same model, each grade dressed richer than the last: pack 1 is plain paper, pack 2 catches a shiny sweep, pack 3 is shiny AND glittering. Each tile carries its number, the pack art, its name and its PRICE directly underneath - 2,400 INK, 16 REELS, 8 LUNES - so you read the whole shelf at a glance. Tapping one opens a showcase: the pack itself zoomed in and tilted on its own little stage, still shining, with the carts per pack, the full rarity odds, the pity rules, and DO YOU WANT TO BUY THIS? with YES and NO. The price is now sized by its own column instead of a fixed number, so the longest one can never overrun the shortest tile on either fold."],["v0.619","HOME CURTAIN — BIGGER ARROWS AND A REAL SWIPE. Each side of the curtain now shows a DOUBLE gold chevron instead of one, and both sides are the same size. The tap area for left and right is far bigger than the arrow you can see: each side quietly owns about a third of the curtain (on BOTH folds, since it is measured as a share of the tile rather than a fixed number of pixels), so left and right together take more of it than the middle does — no more opening a game when you meant to scroll. The ? button still outranks it. And you can now PRESS, HOLD AND SLIDE anywhere on the curtain, from the top or the middle: the bill walks the moment the drag is unambiguous and keeps walking every 64px, so one long slide can cross several games. A short drag is still a tap and still opens the game."],["v0.618","The in-game keyboard's keys are about a quarter taller, so they are easier to hit with a thumb on the folded screen — 35px caps became 44px folded and 50px became 62px unfolded, with the letters, the shift/backspace symbols and the CLEAR/OK words scaled up to match. Everything still fits: the whole keyboard is 290px of the folded 812px screen and the name dialog above it is untouched. Verified clean at both fold sizes."],["v0.617","DECK-A-THON GETS ITS OWN LOGO - A GOLDEN CARTRIDGE STAMPED WITH A ROMAN TEN. The last unlock in the game had been flying Crown Deluxe's cue-and-rings since v0.446, because it was given MICON.crown() as a placeholder and never came back for one of its own. It now wears a gold version of the boot cartridge - the same rectilinear shell with the chipped top-right shoulder that the app icon is drawn from - with a big X across its cream label: the Roman numeral for the TEN games the gauntlet runs you through. Drawn on the same 24x24 pixel grid as every other crest on the boulevard and finished with the same black ink line, so it sits with the rest of the bill rather than beside it."],["v0.616","The connecting/connected banner stays still. It no longer slides in from the left or slides off to the right, the screen no longer inverts when the line comes back, and the glitchy stepped exit is gone: the strip simply fades up on the top line, sits exactly where it is, and fades away. CONNECTED is now written in GREEN, and the word flashes three times before it settles and goes. The only thing that moves on the sign is the white film dots rolling forward, at the home bar's own speed, and they no longer restart between connecting, connected and leaving."],["v0.615","The achievement badges on the GIGS bar march RIGHT TO LEFT again, the way they originally did. The strip itself is unchanged - same badges, same size, same seamless loop - only the direction of travel is flipped back."],["v0.614","INK-PUT! — MORE TIMING, SMALLER ARROWS, A HEALTH BAR THAT TALKS. The arrows no longer balloon on the folded phone: their size is capped against the playfield's own width now, so they come out about 77px folded and the full 112px unfolded, centred, one row where there is room. Two changes make the mode more of a timing game: the TIMING BAR turns up three times as often, and a brand new SQUARE MATCH joins it — a fixed square with a second one breathing through it, in from tiny and out past the edges, and you press on the frame where the two are the same size. Dead level pays a perfect. Every scrolling line across the top is gone; what replaces it is one figure that rises and fades over the field — +20% HP when you clear a wave, -8% when you fluff one. The bar is 100 HP so that figure is the percentage too. And a combo genuinely buys your life back: five clean waves in a row pays double the health, reset by any miss. Ink-Put's bots are re-tiered — ALPHA was the hardest of the three by accident, because every bot took its challenges on the same clock and only the hit rate differed, which left even the easy one comfortably ahead of its own drain. ALPHA is now slow and fallible and beatable by anybody, BETA is the fair race, OMEGA is the wall."],["v0.613","The username is the heading on the strip now, and it sits on the numbers' line. It was set at 11px - exactly the size of a cup count - so your own name read as one more figure on the bar; it is 17px folded and 19px unfolded now, clearly bigger than the numbers and clearly smaller than the CONNECTING banner. Two separate things were making it look off-centre and both are fixed: the name and the numbers were each perfectly centred but at different sizes, so their middles agreed and their bottoms could not - the name is now measured onto the numbers' bottom line whatever size it ends up at; and the bar's own padding was 10px above against 13px below, so the entire row - name, chips, everything - sat 1.5px high in its own strip. The padding is even now and its total is untouched, so the bar and the connecting banner are still exactly the same height. The banner and the menu reel already matched at 54px folded and 57px unfolded from the last build, so nothing needed switching there."],["v0.612","THE BADGE MARQUEE MARCHES AGAIN — the GIGS strip rolls left to right without stopping, showing every medal you have earned first, and the same badge can never be on screen twice."],["v0.611","The connecting/connected banner now IS the menu HUD bar. Its height was tied to a 9vw clamp, so it measured 64px folded and 110px unfolded against a bar of 54 and 57 — that is the 'sometimes bigger, sometimes smaller'. It now takes the home bar's own height (which itself turned out to be a stale 29px constant, wrong by almost double since the level chip joined the reel — it is shared arithmetic now, so it cannot drift again) and its POSITION is measured off the real bar, cached per fold, so the sign lands on the HUD line on every screen, folded or unfolded, and follows a fold even mid-match when the menu is not on screen to measure. The word is sized off the bar so it stays readable at both sizes. And it no longer flashes past: CONNECTING is held a minimum of 1.6s even when the room answers instantly, CONNECTED a minimum of 1.9s, and the exit is stepped and glitchy now to match the entrance. Reconnecting also snaps the whole screen to inverse for two hard beats, like a cheat code landing."],["v0.610","The ARCADE LOG's TIME is the BEST TIME RECORDED — one run, not the pile. It used to print the longest single VISIT to a game screen, which on a real sitting is the same figure as total playtime: open Tetr-Ink, play nine runs back to back, and the number was all nine plus the menus in between. The run clock is now stamped when a run starts and read the moment one ends, at the two doors every ending already goes through — bankRun for the arcade runs and recWin for the match games, so Crown Deluxe and Bit-Brawl get a best time too — and it restarts on the spot so the next run in the same sitting is timed on its own. A run under ten seconds still cannot become a record. The old inflated times are cleared once on load, since no honest single run could ever have beaten them. Same M:SS shape, every game."],["v0.609","THE SPLASH SCREEN IS A BLACK CARD AT THE TOP, WITH FLAGS THAT ACTUALLY WAVE. Every game — solo and online, all twelve — now announces itself the same way: the screen goes completely black, the game's name drops in at the TOP of the screen (never the middle any more), holds, and lifts away to reveal the game. The checkered flags now sit right beside the letters themselves instead of beside the whole block of text, and they are measured off the letters, so a flag is always exactly as tall as the name it stands next to. The flags were also supposed to have been waving since the code was split into modules and never were — the animation they asked for had been left behind in the old file — so they have been standing dead still this whole time. They now wave like cloth in wind, each side on its own beat. Long names like DANCE DANCE INK used to stack onto three lines and shove the flags out to the edges of the screen; the name is now kept on one line and sized by measurement so the whole flag-NAME-flag arrangement always fits, big on the unfolded screen and still clear on the folded one."],["v0.608","INK-PUT!'s waves are pure reaction now. Every memory mechanic is gone for good — SEQUENCE MEMORY is retired by name alongside the odd-one-out, mirror and pendulum waves that went before it, and nothing on screen is ever shown and then taken away. The instruction panel is deleted too: what you can see IS what is happening, so the run stats move under the inkling on the left and the playfield gets the rest. Plain ARROW INPUT is now the majority of what you get (a six-to-one weight in the bag), with rapid fire, the timing bar, megaton smash and the metronome as the change of pace. Waves are randomly generated and the difficulty steps up a gear every ten of them: one more arrow in the sequence, one more rung on the mash ladder, and a heavier drain, with a small creep inside each bracket so no two waves feel identical. The pause between waves is down from 800ms to 260ms. Online is unchanged in shape — one wave each, dealt identically to both players off the match seed, first bar to run dry loses."],["v0.607","No name over the ice. The Bit-Brawl showstopper was the last place in the game that printed THE INK RINK across the top of a live rink board; the title line is gone and the mini is just the animation and the one line telling you to slide to the gold exit. The rink's own screen has shown no wordmark since v3.63, so this closes the last gap in the rule that no game shows its name while you play it."],["v0.606","The app icon is now the boot cartridge — the same chipped-corner cart that slides down when the game powers on, in neon white on black."],["v0.605","BADGES CENTERED AND REORDERED — achievement logos centered in their frames, order now matches the unlock ladder (Tetr-Ink first, Bit-Brawl last)."],["v0.604","GIGS BADGES DOUBLED AND STATIC — the achievement badges on the GIGS & ACHIEVEMENTS bar are now twice the size, laid out left to right, and perfectly still: the rolling strip and the hover flip are gone. Two stale crests fixed — the Ink Rink badges wore an old spotlight icon and the retired Superstars group flew a carnival tower; they now show the rink and Ink-Put! crests."],["v0.603","BIT-BRAWL AGAINST THE BOTS, FIXED END TO END. The showstopper works against ALPHA, BETA and OMEGA now, and they use one back at you. Four separate faults were behind the report. (1) An unnamed save is called GUEST, and GUEST was also one of the room's own bots — so a player who had not named their inklet walked in wearing a bot's name and the room refused their challenges, overwrote their presence and dropped their match seconds in. GUEST is deleted from the cast and the default name is PLAYER. (2) A stage claim that did not answer left a flag standing that silently swallowed every later press of the star for the rest of the match — the filled showstopper that could not be used. It is cleared on every path now, with a watchdog behind it. (3) A showstopper freezes the brawl, but it was only freezing your screen: the bot kept clocking damage and playing cards straight through your performance and could knock you out mid-mini-game, which is the being kicked out of the match. The battlefield is genuinely frozen on both sides now, their cards wait their turn, and the seconds under the curtain are forgiven. (4) The bots never took the stage at all, because the online path stood the CPU down entirely. They perform their own showstoppers on your machine now, the way the rink already skates them — and if your star is full while one is on stage you can COUNTER: a SHOWSTOPPER CLASH, one mini-game, and only the gap between the two scores is paid. COSMETICS: every inkling in the game looks like its owner instead of like you. Wearing the glitch crown put a glitch crown on every rival, every rolled stranger and every silhouette in the connecting shuffle; the frames you wear were painted onto every rival portrait, every player card and every Crown Deluxe opponent. Frames travel over the wire with a look now, the bots have their own, rolled strangers roll their own, and a rival the room has never described wears none rather than yours. The Game Boy link-cable screen also built the rival's inkling only inside its reveal timer, so any path that skipped that timer showed a blank handheld — it is drawn up front now and always shows the rival you are actually playing."],["v0.602","ORIGINAL SMOOTH APP ICON RESTORED - no more pixelated 16x16 grid. The ink drop is now drawn at native resolution and anti-aliased, so the curve is smooth at every size instead of sixteen fat blocks scaled up. Same mark, same cream field and brown-black ink, same shine - just drawn honestly."],["v0.601","ICON FULLY REVERTED — original cream palette restored, no more color experiments."],["v0.600","CONNECTING BANNER MOVED TO TOP — same film reel style, fades in left-to-right, blinks twice, then the reel starts rolling. No longer mid-screen."],["v0.599","ICON REVERTED — same original inkling design with the blue dot, now extreme black on extreme white. The v0.598 redesign is gone."],["v0.598","CLEAN APP ICONS — the inkling is true black on pure white, wider to fill the tile, the old cream background and border ring are gone."],["v0.597","INK-PUT! IS THREE KINDS OF PRESSING NOW. Odaroo cut three challenges by name and they are gone: ODD ONE OUT, INK MIRROR and the PENDULUM. The first two were reading puzzles wearing an input game's clothes — you stopped and worked out which arrow to press instead of pressing arrows — and the pendulum was never the thing it was meant to be. What is left is meant to be simple, clean and satisfying. ARROW INPUT is the core of the mode and it has a real ladder now: FOUR arrows, then SIX, then EIGHT, growing slowly past that because the run never ends. And from the fifth wave some slots are not arrows at all but the FACE BUTTONS — and they are not lookalikes, they are the pad's own A and B, built from the same markup so they carry the same fill, the same keyline, the same cream letter and the same typeface as the buttons sitting at the bottom of the screen. They are placed by count rather than by a coin flip per slot, so a wave is always an arrow sequence with buttons mixed into it and never accidentally all buttons, and they never take the first slot. The arrow clock was the other half of the problem: it used to hand FOUR arrows ELEVEN AND A HALF SECONDS, so the core wave of the whole mode had no urgency in it. Time is per PRESS now — about a second an arrow at the start, tightening to a third of a second by the deep waves — so a short wave is short and a long wave is long and both of them are fast. RAPID FIRE runs Odaroo's ladder exactly: 8, 16, 24, 32, 64. Its clock GROWS with the rung instead of shrinking, because the old sum reached about thirty presses a second at the top and that is not a difficulty, it is a wall nobody gets over; the drain is what makes a late mash terrifying, and by wave twenty a seven-second mash costs eighty of your hundred HP. And the TIMING BAR is new — the Kirby Super Star power meter, the first of the old Superstars swings: a tall thermometer with a band across it, the fill running up and turning round at the top, and you stop it inside the band. Dead centre pays the most. The band narrows and the bar speeds up as the waves climb, with floors on both so the window never falls under two frames. SEQUENCE MEMORY, MEGATON SMASH and the METRONOME stay in the bag — they were not on the cut list and they are all distinct kinds of pressing, which is what a randomly mixed bag wants. Seven new pre-flight checks, every one of them broken on purpose and watched to fail first, including one that fails the build if a retired challenge ever finds its way back into the table and one that proves every rung of the mash ladder is reachable by a human thumb."],["v0.596","FULLSCREEN COMES BACK, AND FOLDING IS TESTED. Leaving the game for another app used to end fullscreen for good: Android drops it when the page is backgrounded, and the game read that as you deliberately walking out, so the status bar came back and stayed for the rest of the session. It now tells the difference — a loss while the page is hidden, or while the phone is being folded, keeps the game armed, so it slips back into fullscreen the moment you return (immediately where the browser allows it, otherwise on your very next tap). Leaving on purpose with a back swipe still latches, so it never fights you. Plus a new fold/app-switch stress test that runs on every build: it fires the storms a real phone fires — the notification shade, an app switch, a fold, a fold while you are away — and demands the screen, the save, the playfield scale and the D-pad all come back exactly as they were. Both checks were broken on purpose first to prove they can fail."],["v0.595","INK PANIK ONLINE IS A DIFFERENT GAME NOW — GARBAGE BLOCKS. The old online mechanic pushed a FORCED RISE at your rival: their stack jumped a row and there was nothing they could do about it except survive, which is a punishment rather than something to play. It is retired. Online is now Panel de Pon properly — the thing Pokemon Puzzle League and Tetris Attack are actually built on. A CHAIN or a fat COMBO drops a GARBAGE SLAB on the other player: a chain sends a full-width slab as deep as the chain is long (x2 is one row, x5 is four), a combo of four or more panels sends a wide one-row slab, and eight panels in one bite sends two. A slab is dead weight — it cannot be swapped and it will not match, it just sits on your stack as a solid 1930s crate, anvil, safe, piano, bomb, dynamite or film reel, drawn as one heavy signed object rather than a run of tiles, and it steals the room you need. YOU BREAK IT BY CLEARING PANELS AGAINST IT. The whole connected wall lights up cell by cell, accelerating as it goes — the unwind — and then every slab it touched hands back its BOTTOM ROW as real, playable panels and survives one row shorter. Those panels fall, and if they land in a match the chain carries on and takes the next row off. One lucky clear against a wall of junk can unwind the entire thing and fire the biggest counter-attack in the game. That is the whole mode: a tall stack is AMMUNITION, so deliberately riding your own board high with B is now the correct and terrifying way to play. There is no clear line online any more — a duel ends when somebody hits the ceiling and nowhere else — and the chain FREEZE is solo-only, because in a duel the clock was never the enemy. Two new procedural sounds: the Puzzle League switch, a very short square blip with a downward slide in it so a swap reads as a mechanical switch instead of a menu beep, and a bouncy two-note landing whenever anything comes to rest. Rival boards show their slabs too, so you watch the junk you sent land on them. Solo is completely untouched. Eight new pre-flight checks come with it, each one broken on purpose and watched to fail before it was trusted — including the one that catches a 3-wide slab quietly matching itself and evaporating the instant it lands, which would have made the whole attack a no-op that looked like it worked."],["v0.594","THE FACE IS BLACK INK AND NOTHING ELSE. Every expression redrawn to one rule: the eyes and the mouth are raw black shapes laid straight onto the face, with no contour, no edge, no outline and no white layer anywhere near them. The white inside the open eyes is gone (an eye is now a solid black bean or a curve, never a ring with something in it), the gold star eyes and the red heart eyes are black, the white teeth bar and the red tongue are out of every open mouth, and the glitch faces lost their magenta flecks. The costume masks used to punch two white windows over the face and hand-draw their own little eyes in them, wiping out whatever expression the inkling was wearing; the band is now painted AROUND the windows and the real face shows straight through. Both folds pass the pre-flight clean."],["v0.593","CROWN DELUXE GETS A REAL STAGE LADDER. Solo now runs five stages to a world — 1-1, 1-2, 1-3, 1-4, 1-5 — and clearing the fifth spins the roulette wheel before stage 2-1 opens. The worlds never run out: every stage adds a ring to the rack and every second world takes a spare shot away, so the climb keeps getting harder for as long as you can keep going. The stage you are on is shown in the corner box above the run clock. Lose — run out of shots with rings still standing — and the run simply ends with a curtain call and the door home; the ladder quietly starts again from 1-1 next time, with no checkpoint to come back to."],["v0.592","THE FILM REELS RUN NOW. The home menu bar's white sprocket holes scroll sideways on a continuous loop while the black bar, the inkling, the cups and the ink all stay exactly where they are — the perforations move THROUGH a stationary strip, which is what a projector actually looks like. The connecting bar has been rebuilt as the same piece of film: it was drawing a stretched 5px dash on a 13px period and is now the home reel's own 6px square on a 14px period in a 7px band, repeated rather than stretched, so it reads identically at both fold sizes. It is also the home bar's exact thickness now (29px, measured on both folds, named once as --filmbar-h) instead of the thinner game-HUD height it had been matched to. And its speed carries the connection state: the holes roll slowly to the right while CONNECTING, then the projector catches and they run three and a half times faster the moment it says CONNECTED."],["v0.591","The username on the home bar moved out of the middle and now sits right beside the inkling. The bar reads inkling, name, cups, ink, all packed to the left in one line instead of the name floating centred with the counters thrown to the far edge. Same font and size as before; a long name still shrinks to fit rather than clipping."],["v0.590","THE 20-SECOND KICK IS FIXED AT ITS SOURCE. Online matches were being torn down by the phone, not by the game. The browser fires a 'pagehide' event whenever it THINKS the page might be going away — and on Android that means backgrounding the browser, pulling down the notification shade, switching apps, or taking a screenshot. Inkville treated that as 'the player has quit' and told the room to end the match. Against a BOT that deleted the match outright, so the bot froze mid-rally and never moved again; against a person it forfeited the match, and about twenty seconds later the watchdog noticed the match was missing and sent the player home. That is both faults in one line of code. v0.584 hardened the watchdog, which was right, but the watchdog was the symptom — this build stops the teardown. A live match is now NEVER ended by a lifecycle event: the room already holds a five-minute grace for exactly this (a locked phone, a call, a buried tab), and a deliberate exit still goes through FORFEIT/HOME as it always has. The presence heartbeat also used to stop dead on that same event and nothing ever restarted it, leaving the client silent to the room for the rest of the session; it is left running now, and coming back to the page re-arms it either way. Proven at the protocol level: bot matches in Tetr-Ink and Crown Deluxe now play continuously for 50 seconds with the bot taking a move every beat, where before a single background event killed them instantly."],["v0.589","TWO FREE GAMES, AND CROWN DELUXE NOW OPENS THE LADDER. The Ink Rink no longer costs 50 cups — it is free, so a new player starts with two games rather than one: Tetr-Ink and the Rink. Crown Deluxe, which was never on the ladder at all, becomes the FIRST locked game at 50 cups, and the climb runs up from there: Ink Panik 100, Ink-Put! 150, Bullet Ballet 250, Dance Dance Ink 300, Ink-Tar Hero 350, Lumen Ink 400, and Bit-Brawl last as the vault that has no price. Because Crown is a real rung now it counts toward the brawl's 'unlock everything' price, it takes its carousel slot from the ladder table instead of being hand-inserted, and it moves from last to third in the profile's arcade log. The whole change is nine lines in one table — MODE_GATES in js/core.js — plus the two tiles whose chains swapped over. The blueprint's unlock ladder was several builds stale (it still listed Superstars at 100 and the Rink at 200) and has been rewritten to match, gate badges included."],["v0.588","THE USERNAME JOINS THE BAR IT SITS ON, AND THE CONNECTING SIGN IS A SECOND REEL. The username is no longer a headline: it is the same font and the same size as the cups and ink figures beside it (14px, 11px folded), centred on the same line, right after the inkling — and because that size fits even a 14-character name whole, every name is now genuinely ONE size instead of long ones being printed smaller than short ones. The connecting strip lost its inkling and its question mark: it is a bare film reel that lies exactly on top of the game's own name reel, same height to the pixel, with CONNECTING centred on it. It glitches in from the left in hard steps, sits centred while the dots cycle, then on CONNECTED flashes green three times and slides smoothly off to the right. The word RECONNECTING is gone from the game entirely — it is always CONNECTING, then CONNECTED. Also fixed a clipped name in Ink-Put that the smaller HUD exposed: a 12-character name was cut off at every size its fitter could reach, so its column is fluid now and its floor is a size you can actually read."],["v0.587","THE BILL IS YOURS NOW, WIN OR LOSE. Every online ending shows YOUR inkling big in the centre, WIN or LOSE small underneath it, and the rival reduced to a quiet credit line below that: VS, their name, and a 22px icon of their inkling — a quarter of your own figure. The rival's name is off the top of the card entirely; the big name up there is always yours. And the result is announced ONCE — the 敗北 DEFEAT and 勝利 VICTORY banners are gone from online matches, since the bill already says LOSE or WIN. Solo runs keep their CURTAIN CALL and VICTORY banners, because a solo bill has nothing else that says the run ended. The saved PNG follows the same layout: your face centred, your ring, the result under it, the rival small to the lower right."],["v0.586","REVERTED the v0.585 title-screen change. The player name that had been added under the INKVILLE sign is gone entirely — its markup, its CSS and the titleNameFit() fitter that measured it. The title screen is back exactly as it was: the inkling, the bulbs, and INKVILLE at its original size and position. Nothing else on that screen was touched."],["v0.585","THE TITLE SCREEN SAYS WHOSE INKLING THAT IS — and the rest of the list is proven live. The title was the one screen in the game that showed your inkling and never said whose it was: every other surface had been brought onto the one username size across v0.567 and v0.583, and this one had no name on it at all to bring. Your name now prints under the inkling on the way in, as big as its face — the cap is read off the sprite itself rather than typed, so it follows the shrink the title already does on a short screen instead of needing a second number, and it shrinks to fit the way every other name in the game does, which means a short name gets the full size and a fourteen-letter one lands wherever it fits rather than running off the edges. Measured on both folds at one, six and fourteen letters: never clipped, never off-screen, and the START button never moves. It re-measures on a real viewport move AND on the visual viewport, because the cap is keyed on a HEIGHT rule — the address bar and the notification shade are exactly the moves the plain resize event is least reliable about, and the first measurement was reading stale at 35px because of it. The rest of the batch was already standing and is now proven rather than assumed: the connecting and reconnecting sign is one film with the menu bar on both folds (24px folded, 28px unfolded, same top edge, same corner), wearing your own inkling with a blank face, a big question mark, the shake and the three cycling dots; panic arms at half the well and releases at 45 percent in both Tetr-Ink and Ink Panik; Ink Panik has no hearts and no continue; and every win and lose bill is one centred, static inkling with its frame dead centre and the word underneath at a quarter of its size. And the online door was walked end-to-end against the LIVE room: challenge, accept, the match comes back as the rink and not a Crown table, the controls lock through the handshake and release on entry, the match runs its full length without walking anybody home, and it ends on a real bill. The pre-flight is clean at both folds with all eleven games entered."],["v0.584","EMERGENCY — ONLINE MATCHES STOP THROWING YOU OUT. Every online match was walking the player back to the boulevard about twenty seconds in, on every game, with no message at all. It was a chain of four steps that each looked harmless. v0.583 let crInMatch answer NO while a game was running; the ghost-match check reads that answer and tells the room the match was abandoned; the room deletes a BOT match outright when it hears that, because there is no second player to hand a win to; and the watchdog that notices a vanished match calls the one route home that says nothing on the way. Fixed at the source: the question am I in a match is answered by looking straight at the six games again, and it is allowed to be wrong only in the safe direction, because a false yes is an annoyance and a false no destroys a game in progress. The stale-match check that started it is now READ-ONLY and can no longer mark a live match as ended — it may ignore an id, it may not end your game. And the watchdog itself is now hard to trip by accident: a bot match can never be declared gone (the bot runs on this machine and the room's copy is only bookkeeping, deleted by four everyday routes including the beacon Android fires for taking a screenshot), a run of polls must also be a run of fifteen real seconds so slow phones and fast ones get the same grace, and if it ever does send you home it says so out loud instead of teleporting you. Verified with full sixty-second bot matches in Crown Deluxe and the Ink Rink: nobody goes home."],["v0.583","THE NAME GOES BIG AND THE ONLINE DOOR STOPS JAMMING. The username reel sits FLUSH in the top-left corner and the amount it lifts is now MEASURED rather than guessed — it is exactly how far the inkling's lens overhangs the strip, so the head is fully on the glass with no dead air above it, and it re-measures itself whenever the name size changes. The username itself goes from 18px to 24px (28px unfolded), and the online opponent's name with it, because they were always one number. That raise had been blocked for three builds by the Tetr-Ink and Ink Panik wells, which the bigger text was drawing over; both boards now reserve the name strip's room the way Bullet Ballet already did, so the collision cannot come back. And the online connecting hang is found: a match object left behind by a teardown that missed a path answered YES FOREVER to the four places that ask am I in a match — so every later challenge was accepted by the room and silently dropped, with the door key never handed back. A match that claims to be live on a screen you are demonstrably not on is now scrubbed after a short grace, which heals all four at once. The panic threshold at 50 percent, Ink Panik losing its three hearts and the one-centred-inkling bill all shipped in v0.579 and were verified live."],["v0.582","THE SCREEN STOPS FLASHING, AND PULLING DOWN THE NOTIFICATION SHADE NO LONGER BLANKS THE GAME. This is one bug wearing several faces. Phones fire 'the window resized' constantly with nothing actually changing — scrolling shows and hides the address bar, and pulling down the Samsung shade fires a storm of them. Most of the game already knew to ignore that, but a handful of the heaviest jobs never got the message and answered every single one: the home screen threw away its light-bulb frame and its whole tile grid and built them again from scratch, measured at ten and eleven rebuilds for ten events in which the screen never moved. That is the white flash and the constant flickering. Worse, the same thing ran DURING PLAY: Tetr-Ink and Ink Panik were dumping their locked tile size and re-rendering the entire board mid-run, which is the most likely reason a game seemed to seize up after fifteen or twenty seconds. Every one of those jobs now checks whether the screen genuinely changed size before doing anything, and does nothing at all when it has not — measured at zero rebuilds across twenty events. A real fold still re-lays everything out exactly as before."],["v0.581","THE NAME REEL GOES BIGGER AND ACTUALLY SITS IN THE CORNER. Your username is printed larger everywhere it appears — the home bar, the profile and both names in an online match — and short names now get the full size instead of being shrunk for no reason. The bar itself stops dodging a status bar that true fullscreen does not have: the game goes fullscreen when you first tap it, but the rule that told the reel to ignore the phone's camera notch only ever applied to the installed app, never to the site opened in the browser — which is why the bar was still pushed down a build after it was supposed to be fixed. It now knows it is fullscreen either way and sits flush in the top-left, with the inkling whole and nothing clipped."],["v0.580","CROWN DELUXE PLAYS AGAIN — AND THE BROKEN HALF WAS MINE. v0.578 stopped the room ending a bot match by accident by DELETING it rather than forfeiting it, which is right and is what 'the room must close when someone leaves' asks for. But all six poll loops answer a match that is not in the room's reply with a bare return -- correct for one dropped poll, catastrophic for a permanent absence. So after v0.578 a torn-down bot match came back as NOTHING and the client sat on a live table forever with a bot that would never take another turn. That is the screen Odaroo photographed, and the trigger is everyday: the leave beacon rides pagehide, and Android fires pagehide for switching apps -- or for taking a screenshot, so photographing the bug was itself one way to cause it. There is now one shared answer, netMatchGone: a poll that SUCCEEDS but does not carry my match is the room saying that match is gone; one of those is a race, six in a row is the truth. It tears the table down, marks the id so the heartbeat cannot walk back into it, and goes home quietly -- no defeat, no forfeit, nothing charged. Measured: a deleted match is now noticed and cleaned up in 4.6s instead of hanging for ever. LEAVING NO LONGER SAYS YOU ARE STILL IN A MATCH. crOnlineConnect is reached as  -- the caller sets the flag one line before the door -- and the door had three ways to refuse without ever handing it back. The room then held a live match, the client refused to enter it, and every later challenge was accepted by the room and silently ignored here. The refusals that own nothing now release the flag; the two that DO own something (a handshake genuinely running, a match genuinely live on screen) deliberately keep it, because clearing that one is what dropped a MATCH FOUND card onto a running game in v0.398. The stuck-flag watchdog also drops from 10s to 3.5s, since it now only has to cover the genuinely unforeseen and covering it slowly has no value. AND THE TWELVE-SECOND QUIET WINDOW IS FOR A WALK-OUT, NOT FOR EVERY WAY HOME. netGoHome arms a window so a player who just pressed FORFEIT is not dragged straight back into a handshake -- right for that, wrong for a match the room simply forgot. Measured at 12.2s of a lobby refusing the game the player had just asked for. A player whose match was taken away from them is now free in the same breath. Verified end to end against a live room: a full Crown turn cycle through the real loop (my shot lands, the turn passes, the room is asked for ALPHA's shot, it comes back and is applied, the turn returns), crSelfTest and crSelfTest(true) both clean, and delete-the-match now goes home and lets you start another game immediately."],["v0.579","PANIC STARTS AT HALF, NOT THREE QUARTERS. Odaroo likes the music speeding up and wanted it to bite earlier, so the shared panic cue arms at 50% of the well filled and releases at 45% (was 75/70). The 5-point gap is kept because that is what stops a stack resting exactly on the line flapping the tempo back and forth several times a second; only the line moved. Tetr-Ink and Ink Panik both read the one function, so it is one number in one place and neither game knows the threshold exists. THE THREE HEARTS ARE GONE FROM INK PANIK. It was the last mode in the game with a continue -- being buried raised a prompt with three pixel hearts, spent one and put you back on the same stage, which is why that screen had a whole state machine behind it no other game has. Being buried is now simply the end of the run and it walks out through the same door every other solo mode uses: the curtain call, the figures, the ink payout and the share buttons are all the shared ones. The hearts row is gone from the HUD, the flawless-stage bonus heart is gone (a flawless stage still gets its shout), and online is untouched -- a net match still ends through the room, which is what decides who won. ONE INKLING, DEAD CENTRE, HOLDING STILL. The end-of-game bill was a big bouncing winner's circle deliberately pushed off-centre to make room for a mini shocked loser's circle pinned to the bottom-right, with confetti looping behind it -- three moving, off-centre things where one still one was asked for. Every bill is now a single centred figure with WIN or LOSE in small text underneath it: your own inkling either way, smiling on a win and genuinely surprised on a loss, measured at exactly 80px of clearance on both sides. Nothing on the card animates any more, which is what makes the SAVED picture centred and static -- the PNG is a capture of the card on screen, so the design and the souvenir cannot disagree. The stat rows are one font at one size with one tracking, centred on a line each. Two things that would have broken quietly three functions away and were caught: shFoeName's last-resort selector explicitly excluded the class every card now carries, so a poster shared after the VS strip had gone would have named every rival THE HOUSE; and inkShareRead decided solo-versus-match off that same class, so it would have called every online match a solo run. The rival now travels as a hidden name-only seal and its ABSENCE is what solo means."],["v0.578","THE BOTS CAN NO LONGER WIN BY DEFAULT. Odaroo kept being 'defeated' by ALPHA, BETA and OMEGA in games he never got to finish, and the v0.575/v0.577 fixes had closed only two of the four doors that could do it. The room could still end a bot match implicitly from 'quitmatch' (which every leave in the game fires TWICE, 900ms apart, with no match id -- so walking out of one bot match and immediately challenging another put the stray second knock straight through the brand-new match and handed the bot the win before the ice was dealt) and from 'endmatch' with a blank winner (which is what the heartbeat sends when it thinks it has found an abandoned match -- the client read it back, saw a winner that was not him, and put a DEFEAT receipt up). A bot match has exactly one client in it, so there is nobody to hand a win to: all four routes now DROP the match instead -- nothing announced, nothing charged, the room freed for the next challenge. A bot can still beat you, it just has to do it on the ice. Second lock on the same door client-side (netBotGhost, all six online games), because the room and the game deploy separately and this project has shipped a stale lobby before. THE USERNAME IS BIG AGAIN AND BACK IN THE CORNER. The name strip had been dodging a status bar that no longer exists: since true fullscreen there is no bar up there, but the safe-area inset still reports the CAMERA CUTOUT, so the strip and the inkling hanging under it sat ~40px down a screen with nothing above them. Corner-anchored HUD now uses a capped inset (--satnm) -- the cutout is a hole in the middle of the top edge, not a bar across it, and the corners are glass. With the level chip gone there was width going spare, so the name itself goes 13/16px to 17/21px everywhere at once. Found and fixed a second hand-typed copy of that number inside vsNameFit that writes font-size INLINE -- it would have silently overwritten the new size on every game HUD and match reel with no error at all. Bullet Ballet's 30px HUD clearance was measured against the old label and the bigger one overran it by 5px at 906; it is derived from the name size now, so it cannot drift again. THE CONNECTING SIGN IS THE NAME REEL EXACTLY. It was 51px tall with an 11px word folded and 67px with a 14px word unfolded -- three width breakpoints it had grown of its own that the reel beside it does not have. Restated in the reel's own terms: one face, one zoom, same corner, same portrait, same film. The inkling now wears the blankest face in the kit with a big gold question mark BESIDE it on the strip (never welded to the sprite -- v0.576 left that rule and this honours it), shaking on a step timing with a glitch tear across it, settling the moment it says CONNECTED. Three dots still cycle, sized off the word. Also fixed the exit, which still carried the centring transform from when the sign floated mid-screen and so jumped half a screen left every single time it faded."],["v0.577","THREE FIXES. (1) ONE HOME BUTTON, NOT TWO. Every online ending, Crown Deluxe, the rink, Tetr-Ink, Ink-Put, Ink Panik, the Deck-a-thon and Bit-Brawl were printing HOME twice: v0.560 put SAVE|SHARE over HOME inside the shared bill itself, and the six screens that build that bill were still adding their own HOME underneath it from before that change. The bill now carries the only way out, and it carries each screen's own exit with it. (2) THE BOTS NEVER WALK OUT AGAIN. ALPHA, BETA and OMEGA appeared to disconnect mid-match, and the room was doing it: whenever the player's presence lapsed for twelve seconds — a phone switching apps, one lost request, the split second at the end of a match — the housekeeper forfeited the match to whoever was left standing, which in a bot match is the bot. A bot match has only one client in it, so there is nobody to report a walk-out to: it is now simply dropped instead, nothing is announced, nothing is charged, and the room is free for the next challenge. The player pressing FORFEIT still works exactly as before. On top of that, the rink, Tetr-Ink, Ink Panik and Ink-Put used to say THEY LEFT on any walk-out at all, including the ones where the player was the one who went quiet — they read the winner first now, the way Crown and the brawl already did. (3) CONNECTING IS BARE TEXT. The film strip behind CONNECTING on the VS screen is gone in both places that build it — no box, no plate, no sprockets — just the word in white with its ink outline and the three dots breathing underneath."],["v0.576","THE FACE KIT, REDRAWN — every expression rebuilt with NO eyeballs and NO pupils. An open eye is now a clean ink RING with white inside and nothing floating in it; every other eye is a line or a shape (an arc, a lid, a slant, a lens, a cross, a spiral, a star, a heart), Ron's-Gone-Wrong style. Everything that used to float beside the head is gone: no brows, no blush, no sweat beads, no tears, no question marks. The range is cut from forty-one faces to TWENTY, each one instantly different from the other nineteen at HUD size, and every retired name is an alias onto one of them so nothing in the game had to change. The body, its outline and its curl are untouched."],["v0.575","THE BODY IS BACK TO EXACTLY WHAT IT WAS, AND THE FACES ARE TRIPLED. Odaroo: the drop, its outline, its proportions and its curl are finished — only the eyes and the mouth are mine to change. So v0.574's additions to the silhouette are gone: the hook of ink that grew off the back of the head in the side views is deleted, the back view's extra tuft is deleted, and the left-facing view no longer mirrors the whole sprite (which was also flipping the body's highlight to the wrong corner). All four facings now draw the SAME drop pixel for pixel — proven by a check that compares the silhouettes — and only the anchor the face is squashed toward changes. FORTY-ONE FACES, up from five. Determined, fired up, a perfect clear, cheering, proud, surprised, shocked, a close call, an oops, flustered, dizzy, stunned, crying, welling up, pleading, angry, raging, smug, sly, mischievous, bored, focused, confused, daydreaming, whistling, snoozing, shy and relieved — on top of the thirteen from the last build. Each one is built from a kit of eyes and mouths that all land on the same fixed boxes, so no two of them draw the same picture and the head never appears to change size when it swaps. THEY CYCLE, AND THEY REACT. The idle rotation went from four faces to sixteen. A combo rolls inside its tier instead of freezing on one picture, so a long chain stays alive. Dropping a chain now has a face in every game at once, rolled from the bad-news set and settling back a moment later, because a mascot that stays cross is sulking rather than reacting. And the big framed portrait on your profile — the one place you are looking straight at it — works through the whole range, the loud faces included, a couple of seconds apart. Verified with a clean inkSelfTest at 375x812 and 906x832, eleven games entered, zero faults on both, plus checks that no expression paints a pixel outside the body and that no two faces are the same drawing."],["v0.574","THE MASCOT GETS A NEW FACE. Every expression the inkling can wear has been redrawn from scratch around one fixed geometry — a 5x6 glossy pie eye with a white, a movable iris and a shine on it, and a mouth kit that can smile, laugh out loud with teeth and a tongue, gasp, frown or wobble. There are thirteen faces now instead of five, and each one is meant to be unmistakable at the size it is actually seen: hearts for a win, gold stars for a big combo, >< and a wobbling mouth when you are beaten, a tear and heavy lids for a loss, wide whites and a sweat bead for panic, a raised brow and a gold question mark for connecting, a cheeky wink with the tongue out, plus the eight corrupted glitch faces. THE FACE NOW ANSWERS THE GAME. A chain of six turns the corner inkling into a grin, fifteen lights the stars, every twentieth glitches it; the Crown table celebrates or sulks when the match ends; the Bit-Brawl leader worries, then panics, then goes down as its bar drains; the victory bill prints hearts on the winner and the squeeze on the loser; searching for a match wonders. FOUR REAL FACINGS. The inkling can now be drawn from the front, from either side — the face swung round the near cheek with a little curl showing at the back of the head — or from behind, all from the one sprite, so it wears your colour, your pattern, your gear and the same Paper-Mario paper edge in every direction. Bullet Ballet uses them: banking left or right was a squeezed front sprite rotated fifteen degrees, and is now an actual turn. The back view is the shared sprite too, so it finally wears your gear. Verified with a clean inkSelfTest at 375x812 and 906x832 — eleven games entered, zero faults on both."],["v0.573","The film reel is back on CONNECTING and CONNECTED, and the reconnect strip has moved into the HUD. It now sits on the same line as the game's own name strip at the top of the screen instead of floating across the middle, hard left where your face and name live, and it carries your own inkling with your colour and your frame: a question-mark face while it is finding the line, and a smile that blinks once when it says CONNECTED. The home screen's top reel wears the same white-holes-on-black film as that strip, so the two are one film instead of the home bar being the only gold one in the game."],["v0.572","The CONNECTING sign on the VS screen is plain text again — the film-reel strip Odaroo did not want is off it in both places that build that screen (the online handshake and Bit-Brawl's), while toasts and notifications keep the film. And the little CONNECTING caption at the foot of the Game Boy link-cable animation is deleted: it sat over the D-pad, and the two handhelds finding each other already say it without a caption. The LINK CABLE line at the top stays."],["v0.571","PANIC MODE, A CLEANER CURSOR, A LIGHTER PROFILE AND A BILL THAT FITS. (1) THE MUSIC SPEEDS UP WHEN YOU ARE IN TROUBLE — in Tetr-Ink and Ink Panik, once the well is 75% buried the record on the turntable pushes to 1.14x and your inkling drops into a wide-eyed panic face, sweat bead and all; dig back out and it eases home. The song never restarts and never changes track: the speed of the record that is already spinning is what moves, ramped over half a second so it reads as pressure rather than as a glitch. It arms at 75% and only releases at 70%, so a stack resting on the line cannot flutter the tempo. If you play with the 8-bit band instead of the records, the sequencer speeds up the same amount with no pitch change at all. Leaving a game by ANY route puts the tempo back. (2) THE LITTLE ARROW BESIDE THE SELECTED BUTTON IS GONE — the gold ring is the cursor and the blinking caret next to HOME was noise; it also used to measure as clipped text. (3) NO MORE INKLET STATS ON THE PROFILE — with player levels retired the fixed +ATK / +HP / +SPD / +NRG block said nothing, so the file is now CURRENCIES, THE RECORD and the ARCADE LOG. The boosts still work; each garment prints its own on the STYLE tab, where it changes when you change clothes. (4) THE BILL NEVER HANGS OUT OF ITS FRAME AGAIN — the ending measured 78px taller than the window it sits in on the folded phone, so the way out was below the fold. It now measures how much it is over and shrinks by exactly that, with a legibility floor; the stub was also sized against the whole screen instead of against its own dialog, which is fixed."],["v0.570","TRUE FULLSCREEN. The game now takes the whole panel of glass. In an installed copy running true fullscreen the artwork runs behind the camera cutout instead of stopping short of it in a dead black band -- every HUD element already holds itself clear of the hole, so text and controls stay readable while the art fills the screen. And the request for fullscreen is now re-armed until it actually lands: it used to mark itself as asked BEFORE the browser answered, so a single refusal on the very first tap locked the game out of fullscreen for the whole session. A refusal now keeps trying on the next tap; only walking out of fullscreen yourself stops it asking."],["v0.569","GAME OVER IS AN ANIMATION NOW, AND A LOSS STOPS TALKING BACK. Topping out in Tetr-Ink used to be a dead second: the piece froze, the well just sat there, and a receipt appeared out of nothing. Now the ink claims the well the way it always has in Ink Panik — every cell greys out and FILLS, row by row from the floor to the ceiling, wall to wall — and only when the curtain is up does GAME OVER appear over it. Ink Panik gets the same finish (it had the sweep but never a card at the end of it), and both games now play the animation ONLINE too, which was the one path that skipped it entirely. Separately, losing no longer comes with commentary: every online defeat used to be narrated at (the junk piled up to the ceiling, your ice gave way under you, the bar ran dry) — that line is gone from every mode at once, so a loss is now just DEFEAT and the figures. Bit-Brawl no longer docks you 10 cups for losing either, the last demotion left in the game; cups are an unlock ladder, not a league table. Solo runs keep their CURTAIN CALL receipt exactly as it was."],["v0.568","The D-pad nudge is dialled back. Last build moved the whole control deck 5mm up and to the right, which read as confusing under the thumb. It is now halfway: the lift is about 2.5mm instead of 5mm, and the D-pad sits 16px in from the left edge rather than 25px. Both sides also get real breathing room. The gap from the edge of the glass goes from 6px to 12px on the LEFT and on the RIGHT, so the D-pad no longer touches the left edge and the A button no longer touches the right one. That gap is a single variable now, so the two sides can never drift apart again."],["v0.567","THE PLAYER LEVEL AND XP ARE GONE. Odaroo asked for the whole level system removed, so it is: no LV badge anywhere (the home bar, the film-strip reel it had just moved into, the profile hero, the tab under every inkling portrait, the battle HUD, the rival cards in the room), no EXP on any receipt, no level-up toast, no billing ladder, and no XP curve. The five combat skills that came with it (SECOND STAR, QUICK INK, OPENING ACT, STAR POLISH, TRIPLE BILL) are removed with it, and their four badges are off the wall so nothing unearnable sits there. Everything a level used to quietly scale is now flat and fair on both sides: your inklet and an online rivals leader both start on 280 health, showstoppers bank one at a time, and the brawl energy comes from gear alone. Old cartridges have the level and XP wiped off them on load. CARD collecting and CARD levelling are completely untouched - feeding duplicates still levels a card exactly as before. The players guide is rewritten to match."],["v0.566","THE USERNAME IS ONE SIZE EVERYWHERE, AND EVERY STATUS BANNER IS A STRIP OF FILM. Odaroo's note was that the inkling's name should feel big and personal, and that the size it prints at during an online match is how big it should be on every screen. It was three separate numbers: the match reel at 13/16px, the home bar at 10/16px, and a hardcoded 10px on the gigs and badges bar — so the same name on the same phone was noticeably smaller the moment you left a match. There is now ONE number, --nmsz in css/base.css, and the reel, the home bar and the mini bars all read it. The long-name shrink loop is untouched: a name still steps down until it fits WHOLE rather than clipping. Second half: the film reel Odaroo liked in Crown Deluxe is now the house style for every status message. The toast — which every notification in the game passes through — is a black strip of film with cream sprocket holes instead of a cream-bordered plate, and the CONNECTING sign on the VS screen wears the same strip (a revealed name still goes back to plain white with its ink outline; the no-plates-on-names rule is not reversed). And the holes themselves are properly made now: the old tile started hard against the left edge, so a strip ended on a hole at one end and a gap at the other. The hole now sits in the middle of its own period and the run is centred, so every strip in the game is symmetric about its own middle and the top and bottom rows mirror each other exactly."],["v0.565","THE LEVEL MOVES INTO THE FILM REEL, AND NO NAME IS EVER CUT OFF AGAIN. Your level used to hang on a little tab underneath your inkling, costing a whole row of screen on every game. It now sits inside the film strip at the top, right at the start of the reel: LV3 then ODAROO on the left, and on the right the rival reads ALPHA then LV4, so the two levels bookend the top of the screen and the two names face each other across the middle. It is the same black box with cream lettering it always was, just in a better home — and the same box now appears on the home bar and on your profile, so the level looks identical everywhere you see it. The profile was quietly printing your level THREE times at once (a tab under the frame, and a LEVEL 9 line under your name); it shows it once now, before your name, like everywhere else. And every bar that carries a name now shrinks the writing rather than chopping the name in half: two long usernames on a folded phone step down together until both fit whole, the level box never shrinks, and the home bar stopped clipping long names entirely."],["v0.564","A CORRECTION TO THE RECORD, AND NOTHING ELSE. The notes left in the code beside the rink-arrow and bot-difficulty work were tagged with the build number they were written against rather than the one they actually shipped in — the sort of small lie that costs somebody half an hour a year from now when they go looking for why a difficulty dial is set where it is. They now say v0.563, which is where that work went live. No behaviour changed, not a line of it, and the game plays exactly as it did a moment ago."],["v0.563","THE RINK'S TURN ARROW STOPS SLIDING, AND IT IS NOT ALWAYS YOUR GO ANY MORE. The red selector that picks who skates first now stays dead centre — it only turns round to face one of you, the inklings just light up instead of growing, and when it lands it pulses on the winner. Nothing in that box moves an inch from start to finish. And the room used to tell both machines that the CHALLENGER goes first, which — since a bot never challenges anybody — meant you opened every single match you had ever played. It is a coin now, thrown once when the match is made, so sometimes they break and sometimes you do. ALPHA, BETA AND OMEGA ARE THREE PROPER DIFFICULTIES AGAIN, IN EVERY GAME THEY PLAY. Alpha is easy and visibly human: it stops to think for a second or so before a third of its moves, takes the long way round the ice, and shoves at walls. Beta is a fair fight with the occasional half-second pause. Omega is quick and very good, but it is never instant — even the wall at the end takes a breath, because a rival that answers the moment you move reads as a machine however well it plays. The hesitation is one function per side of the wire, so every game — Crown, the brawl, Tetr-Ink, Ink Panik, Ink-Put and the rink — got it in the same edit. The rink dial was measured against 200 real floors and the real solver, not tuned by eye: Alpha clears one in about eleven seconds, Beta in five and a half, Omega in three."],["v0.562","BADGE ALBUM — every game crest now sits dead centre in its rosette. The logo inside each badge was placed by eye (a 38% box pinned at 31%/26%), which put its middle five percent above the frame's, so all 54 badges across Crown Deluxe, Bit-Brawl, the Ink Rink, Ink-Put and the rest read as shifted up. The crest is now anchored to the exact centre of the medal and pulled back by half its own size, so earned and locked badges alike are perfectly centred and no future size change can knock them off again."],["v0.561","INKAMP REBUILT AS A PROPER WINAMP DESK. Folded, the three windows stack exactly as before; unfolded, the desk splits into two columns the way real Winamp docks — the player and the equalizer on the left, the playlist standing full height beside them. The split only happens at 820px, because measuring it at 640 gave a 333px deck and a 284px playlist and cut text in both. Every window title is now a short name plus a flavour tail that is dropped when there is no room for it, so no title bar is ever cut. The radio set is pinned to its own size instead of growing to 190px and eating the LCD, which is what was clipping the now-playing line. The record rows put the title on one line and where it plays underneath, the test-booth readout gets its own line, and the volume slider takes whatever room is left rather than a fixed 86px. Checked at 320, 375, 430, 540, 830 and 906: no cut text and nothing off-screen at any of them, and the booth readout green was lifted to clear WCAG on the panel grey."],["v0.560","JUKEBOX REWORK + THE EFFECTS COME BACK UP. The jukebox is now odaroo's real soundtrack and nothing else: six records (INKVILLE THEME, TETR-INK, CROWN DELUXE, INK PANIK, INK RINK, INK-PUT!) on one shelf, each row naming the recording and where it plays. The 17 procedural chiptune jingles are off the playlist — they are still the band the rhythm games are scored against, but they are not records. The deck drives the turntable now, so the clock counts the real position in the recording, the readout shows elapsed / total, the seek bar scrubs the tape and the spectrum is tapped off the record bus. The THEME: 8-BIT switch is gone — the recordings ARE the music now. And the effects volume goes 50% to 75%: the UI clicks, the screen stings, the connecting sting and every little chip effect all come up together, and existing saves are moved by a one-time migration rather than only new ones."],["v0.559","The saved PNG is now the bill itself. The card is no longer drawn a second time in canvas coordinates — the bill on screen is cloned and photographed by the browser's own layout engine, so what you see after a match IS the picture you save: same layout, same positioning, same centring, down to the pixel. The promo foot (Inkville, the free-to-play line, the QR code and the address) is added underneath it on the saved image only. Proved by comparing all 402 elements of the live card against the captured one — every box matches exactly."],["v0.558","The whole control deck moves up and to the right about 5mm, so fast thumbs land where they mean to. The D-pad takes the full 19px right; A and B were already 6px from the edge of the screen so they go to the edge and stop rather than hang off it. The pad's box grows by the same amount it lifts, which is what makes every playfield step back on its own instead of getting sat on -- and the six screens that guessed at where the pad starts with a hard-coded number now grow with it."],["v0.557","The share card is redesigned. The two inklings are now centred as a pair — the winner big in the middle, the loser tucked in close on their right — and BOTH wear a real frame ring. The winner's name sits big and centred underneath, and every stat line is centred on the card instead of ruled off into two columns. Around the whole card is a NEW marquee border in the title screen's own colours: an ink ground with a red lip and a gold hairline, gold-and-red bulbs walked once around the perimeter so the corners are shared points that cannot drift, and a bigger gold stud in each of the four corners. The QR code, the Inkville wordmark and the play-for-free line still close out the saved PNG."],["v0.556","THE SHARE CARD IS A RESULT CARD NOW, NOT A WANTED POSTER. The WANTED / CAPTURED header, the OUTGUNNED verdict band and its Japanese, the LEVEL and CUPS plate and the BEATEN stamp are all gone, and so is the marquee bulb frame — it laid its lamps to fit each edge independently, so all four corners disagreed with themselves, and the brief was perfectly-aligned-or-remove-it. The card now always features the WINNER: their inkling big in the centre with their name big underneath, the loser small and bug-eyed to the side with a smaller name, whoever is holding the card. Both portraits are round and both wear their equipped frame — the real frameDeco rings, the same ones the profile draws. The stats are a proper table: labels flush left, values flush right, one size, one baseline, laid on a fixed pitch so nothing can drift, and the block centres itself so a three-row bill has no hole in it. The QR and free-to-play foot stay on the picture only."],["v0.555","THE RECONNECTING STRIP IS BACK TO ITSELF, JUST THICKER. The film, the sprocket holes, the threading, the dots, the green flash on CONNECTED and the slide off to the right are all exactly as they were — v0.554 had stripped them out and that was wrong. The only change is the thickness: the strip is now as tall as the INKVILLE logo, taken from the logo's own arithmetic rather than eyeballed, so it is 50.6px on the folded phone (it was 44) and 66.7px unfolded, which is the logo's height to the pixel. And the bill flow from v0.554 stands: pressing B, SELECT, START or the phone's back button on a victory or defeat bill goes straight home with no LEAVE THIS SCREEN? question, and the button on every bill says HOME instead of COLLECT."],["v0.554","THE BILL IS THE END — no game asks you twice any more. Pressing B, SELECT, START or the phone's back button on a victory or defeat bill now goes STRAIGHT home instead of putting up LEAVE THIS SCREEN? — by the time the bill is showing, the wheel's card, the ink and the cups are already banked, so there was never anything left to give up. The button on the bill says HOME on every screen now (it used to say COLLECT on five of them, which is what made it read like there was still something to claim). AND THE RECONNECTING SIGN IS PLAIN TEXT: the strip of film is gone — no sprocket holes, no threading, no projector — it is a small dark plate that says RECONNECTING with three cycling dots, then CONNECTED in white with a single green flash, then it slides off the right of the screen and disappears."],["v0.553","TETR-INK ONLINE COLUMN — the rival's board was the biggest thing on your own side of the screen: 114x202 on the unfolded fold, 59% of the column, running to within two pixels of the D-pad. It may now be no taller than YOUR OWN boxes above it put together (NEXT, HOLD and the run box), so it is 84x148 and clearly the secondary thing it should be; the folded phone is untouched, measured. NEXT and HOLD were already made identical in v0.551 and are confirmed identical online at both sizes. The online run box holds three figures, so the last one takes the full width instead of sitting alone. And ttSelfTest was asserting a rule the game retired in v0.494 — it demanded a TETR-INK send one junk row when the game sends two — so it failed every build of the game that was actually asked for; it derives the number from TET_SEND now and cannot drift again."],["v0.552","THE WINNER'S NAME IS NOW THE HERO OF THE END SCREEN. On a victory or a defeat the winning player's username runs across the top of the stub at exactly the size of the VICTORY / DEFEAT header above it, with their inkling in the big circle underneath and the loser's name small beside their own mini circle. The green WIN and red LOSE stamps are deleted entirely. The WINNER row is gone from the figures too — it was saying the same thing a third time — so a brawl bill is now just INK, LINES and JUNK SENT. The big name sizes itself to its own length so a 14-character username still fits the folded stub instead of running off both edges."],["v0.551","TETR-INK STATS AND BOXES — the run box was laid out as ONE ROW of four when it was written for three, so on the wide screen STAGE / SPEED / LINES / TIME each got 32 pixels and TIME was clipping to 0:... on a fresh run. It is a clean 2x2 grid now (four separate rows on the folded phone), every figure measured against the longest value it can ever show, so speed and lines cleared are always readable. NEXT and HOLD are now exactly the same box at every size — online they were 108x91 and 70x73. And the defeat card no longer rains confetti: the burst is a win-only thing again."],["v0.550","FULL SCREEN — installed to the home screen, Inkville now takes the whole glass: the clock, battery and signal row is gone. The manifest asks for a fullscreen display (falling back to the old standalone mode on any browser that will not do it), and as a belt-and-braces second half the game also asks for fullscreen itself on the very first tap of the power-on screen — the same tap that unlocks the sound. It is asked once, quietly; if the phone says no, or you swipe out of fullscreen yourself, the game simply carries on and never drags you back in."],["v0.549","THE END OF A MATCH IS A RIPPABLE TICKET STUB NOW. The victory and defeat screens were rebuilt: the winner is one HUGE bouncing circle with confetti thrown out from behind them, and the loser is a MINI bug-eyed circle bumped out to its bottom-right — no more two equal portraits. The WINNER and BEATEN labels are gone, replaced by a single green WIN or red LOSE ink stamp. The bill itself is cut back to what actually happened: LEVEL, CUPS, DATE, SHOTS, the APPROVED stamp and the you-were-red subtitle are all off it, and the QR + free-to-play foot now appears ONLY on the picture you download or share, not on the screen you are looking at. The card is perforated top and bottom with a tear line at the foot, like a boarding-pass stub. Saving now says just IMAGE SAVED instead of printing a 40-character filename that clipped, and every card lands in an INKVILLE folder. The share message is down to Inkville and the address."],["v0.548","The film-reel bar that ran across the middle between the two usernames is gone from every game — each name keeps its own strip of film, and the empty screen between them is what tells them apart now. The usernames are noticeably bigger (13px folded, 16px unfolded), and your LEVEL is the same font at the same size, so name and level read as equally important. The level square no longer sits on the portrait: it hangs fully below the frame with room to spare, so a book-shaped frame like Bug Finder is never covered. Nothing you press does anything until GO! — the 3-2-1 countdown now locks the controls itself, in every game that has one, solo and online alike. And Ink-Put's instruction panel is dressed exactly like a username: same film strip, same face, same size, so what you are meant to press is as clear as who you are playing."],["v0.547","THE GAME NOW DRAWS ITS OWN KEYBOARD. Tapping a name field no longer opens the phone's keyboard — which on the Fold covered the colour palette and the CONFIRM button on CREATE YOUR INKLET. In its place a paper-and-ink QWERTY panel slides into the bottom of the game itself: big keycaps, a live echo of what you have typed with a character count, SHIFT for upper and lower case, backspace, CLEAR and a green OK. The dialog above it reflows so nothing is ever hidden, the D-pad's buttons all mean OK while it is up, and the same keyboard serves the create screen, EDIT NAME and the troupe name. Names now keep the case you actually typed."],["v0.546","GLITCHED INK — the 16th colour is a secret now. The last swatch on the ink wall used to be an obvious rainbow circle with a little 31 under it; it is now a plain white dot exactly like every other colour. Sit on the CREATE YOUR INKLET screen, or the profile's colour wall, for ten seconds and that one dot starts corrupting — flashing random flat colours, twitching off its centre, flickering. Pick it while it is doing that and a hidden achievement drops: GLITCHED INK, a colour that does not exist. It is a SECRET badge, so it never appears on the badge wall until it is earned. The glitch ink itself works as it always has once you have it — your inkling keeps shifting colour while you play. Both pickers now run off one shared watcher, so the creator screen and the profile screen behave identically."],["v0.545","INK-PUT!: BIG ARROWS, A REAL A BUTTON, AND WAVES. (1) THE Ⓐ BUTTON WAS PHYSICALLY MISSING and that was the real bug — the screen was wearing the dual-D-pad layout, which hides Ⓐ and Ⓑ altogether, while half the waves were asking you to tap Ⓐ. Ink-Put now wears the normal controller: the arrows answer the directional waves, Ⓐ AND Ⓑ both answer every timing wave (so you can alternate thumbs on RAPID FIRE), and the game switches between the two without the player doing anything. (2) THE ARROWS ARE HUGE NOW. They used to be a flat 30px on the folded phone — four small icons adrift in a big empty box. The size is solved against the playfield's real box instead: four arrows folded are now about 158px across, nearly five times the size, and a sixteen-arrow wave folds itself into rows rather than shrinking away. Unfolding zooms them further, to about 187px. (3) IT IS WAVES NOW, like floors in the Ink Rink — WAVE 1, WAVE 2, WAVE 3. One wave is one challenge, its type drawn at random from the whole bag every single time, so everything is mixed from wave 1. (4) Every trace of stages and levels is gone from the screen and from the code; the run readout is WAVE, SURVIVED, SCORE and DRAIN, and the receipt says which wave you reached. The curve is much harsher: by wave 20 you are on thirteen arrows with a 4.7-second clock and 11 HP a second draining, and by wave 40 it is sixteen arrows, a 2.8-second clock, a timing window a twenty-fifth of a swing and 20 HP a second — a full bar gone in five seconds. It is meant to end. The pre-flight now fails a build where the Ⓐ/Ⓑ buttons are hidden, where Ⓑ does not answer a tap wave, where the arrows are under 56px or under a seventh of the playfield, or where the words STAGE, LEVEL or WORLD reappear on the screen."],["v0.544","The CONNECTED sign is stripped back to what was asked for: the VHS treatment is gone — no LIVE tag, no red recording dot, no tape counter, no projector beam, no gate grain, no tracking wobble, and no projector sheen on the RECONNECTING strip either. Coming back online now reads CONNECTED in white on the same film strip, flashes green once, then the whole strip slides off the right-hand edge and fades. RECONNECTING is unchanged: the same threading sprocket holes and cycling dots."],["v0.543","INK-PUT!, REWORKED ON ODAROO'S OWN NOTES. (1) The black film-reel strip is gone from the top of the screen — that was the shared name band every game wears, and Ink-Put is deliberately off that list now because its own health row already carries both names. (2) Instructions are never a centred pop-up any more: what the current challenge wants is written in a small panel BESIDE the inkling, Crown-Deluxe style, and it stays up for the whole challenge instead of flashing for a second. The middle of the screen is the arrows and nothing else. (3) THE HEALTH ROW IS ONE LINE, fighting-game style: my inkling and name on the far left, then MY bar draining RIGHT TO LEFT, then THEIR bar draining LEFT TO RIGHT, then their inkling and name on the far right — each bar empties toward its own portrait, all four on the same line, with the run figures (survived, cleared, score, drain) UNDER the bar. A solo run simply has no rival half. (4) NO MORE NAMED STAGES AND NO MORE WAITING: every one of the eight challenge types is dealt from the very first challenge — arrows, pendulums, megaton timing, rapid fire, memory, mirror and odd-one-out all mixed together — and the difficulty now climbs with HOW LONG YOU SURVIVE rather than with a stage you have to grind up to. The run does not stop at a ceiling; it just keeps getting faster until the bar runs dry. (5) Anything that scrolls now runs across the TOP MIDDLE as a marquee instead of floating over the playfield. The pre-flight learned all five rules, so a build that puts the film strip back, centres an instruction card, unlines the bars or narrows the challenge pool fails before it ships."],["v0.542","Every ending in the game is now the same album page. Victory, defeat and the solo curtain call all print one passport-style bill: the inkling pressed onto it as a stamp of approval (two of them facing each other in an online match, winner and beaten each labelled), the game name and its Japanese, and every figure CENTRED with the value in exactly the same font and size as its label - no more big number shouting at a small word. Each bill also carries the house lines (level, cups, the date) and, along the bottom of every single one, the way back in: the Inkville icon and wordmark, Play for free - No sign-up - Download today, a QR code and inkville.odaroo.co. So a screenshot of any ending now advertises the game whether or not anybody presses SHARE, and the shared PNG prints the same promo foot plus the Japanese beside its verdict. The Ink Rink run bill gains a SLIDES / FLOOR figure."],["v0.541","SUPERSTARS IS RETIRED AND INK-PUT! HAS EATEN IT WHOLE. Ink-Put is no longer eight arrows on a clock — it is now the arcade's biggest game: an INPUT CHALLENGE with an HP bar that drains without stopping, and the only thing that puts anything back is clearing a challenge. Five stages of five levels, twenty-five in all, and every level drains faster than the last until 5-5 is very nearly unsurvivable. Eight kinds of challenge rotate as the stages climb: ARROW INPUT (four arrows growing to fourteen), SEQUENCE MEMORY (watch it, then repeat it), the PENDULUM (a real one, drawn with its pivot, its string and its weighted bead, swinging between two target boxes — dead centre pays the most), MEGATON SMASH (two slabs run at each other, press A the moment they overlap), RAPID FIRE (mash), the METRONOME (press on every beat, and the beat speeds up), INK MIRROR (press the OPPOSITE arrow) and ODD ONE OUT. Every one announces itself with a short card showing what to do. INK-PUT GOES ONLINE, modelled on Tetr-Ink: both players are dealt exactly the same challenges at exactly the same time from the match seed, each with their own HP bar on screen, and whoever runs dry first loses. SUPERSTARS is off the ladder, off the carousel and out of the Deck-a-thon — its pendulum, its converging bars and its strength tester all live inside Ink-Put now — and Ink-Put keeps its own 150-cup gate. The new game has its own bespoke pre-flight that plays all eight challenge types through the real D-pad handler."],["v0.540","Ink Rink curtain call, tidied. The end-of-run bill no longer prints the INK and ICE TAX lines, and the red BACK TO FLOOR 1 - THE ODDS RESET note under the RUN LOGGED stamp is gone; going back to floor one is obvious without being told. Floor, time, slides and score stay, and so does the personal best."],["v0.539","THE CONNECTION BANNER IS A REEL RUNNING THROUGH A PROJECTOR. While the line is down the sprocket holes now scroll left to right — the film is threading — with a faint projector sheen sweeping over it. The moment it reconnects the lamp strikes: a hard white beam sweeps across the strip, the picture goes grainy for a beat (scanlines and drifting noise, like a projector gate), and then it is LIVE — a red recording dot and a VHS tape counter running up in irregular jumps. It tracks, glitches with a red/blue split, and the whole strip runs off to the RIGHT out of the gate."],["v0.538","THE NAME BARS ARE ONE STRIP OF FILM. The black username strips across the top of every game screen no longer have the cream light-bars capping their inner edges — those were reading as a white break chopping the bar in two. The row itself now wears the film leader and the sprocket holes, so it runs unbroken from one side of the screen to the other with the two names sitting on it. The holes are WHITE now instead of the old cream/yellow, everywhere a strip of film appears — usernames, the turn reel, the rink's boxes and pop-ups, the connecting sign. And the usernames themselves are a size bigger (10px folded, 12px unfolded) so a full name reads at arm's length; the VS screen's big lettering is untouched, and the shared strip stays at its old size because the Crown turn bar is pinned to a measured height."],["v0.537","The RECONNECTING sign is now a strip of film across the middle of the screen: a black banner edge to edge, about as thick as a button, with the game's sprocket holes running along the top and bottom and the word in white in the centre. CONNECTED wears the same strip and flashes past twice as fast. The little bulb-ringed plaque it replaces is gone. On the home screen the two HUD counters (cups and ink) are now white instead of cream-yellow, so they stand clear of the gold-and-red marquee frame instead of blending into it."],["v0.536","INK RINK — the clock is one rule and the pad never drops a press. THE +10s PICKUP IS GONE: no clock item is generated on any floor, nothing on the ice grants time, and rkClockGrab is a retired no-op so neither you, nor a bot, nor an online rival can collect one. The run clock is now the whole time story — thirty seconds to start, plus three every time you clear a floor, hard-capped at thirty, and zero ends the run. INPUT BUFFERING: press a new direction while the inkling is still sliding and it is KEPT, then fired the instant the glide lands, so chained slides have zero dead time between them. Only the last press counts — mash left then right mid-slide and you go right, because the buffer answers what you want to do NEXT. A press thrown during the glide that clears the floor is discarded rather than replayed onto the next board. Both apply to solo and to Rink Royale online. rkSelfTest now proves the buffer with the slide lock genuinely on, and proves no floor still grows a clock item."],["v0.535","The wanted poster reads like a real bill now. A WIN says CAPTURED and puts the RIVAL you beat in the middle mugshot wearing a flat, done expression, with you smiling in the side box; a LOSS still says WANTED and puts you in the middle, shocked, with the winner smiling at the side. The stats plate no longer claims to be a REWARD - it is just your inkling's level and cups under your own name - and the figures below print one WINNER line instead of a duplicate BEATEN BY, all at one size, label left and value right. The foot of the card now runs app icon + INKVILLE, then A RUBBERHOSE RUMBLE - BY ODAROO, then SCAN TO PLAY - FREE, then the address, with the QR beside it. Sharing by text sends just the game name and inkville.odaroo.co, nothing else. And the inklings keep their real colours through the ink-stamp press instead of being washed to flat grey."],["v0.534","A SOLO RUN IS NOT A DEFEAT — IT IS A CURTAIN CALL, AND IT NOW ENDS ON A PROPER BILL. Every solo game used to close with the word DEFEAT, which never made sense: there is nobody on the other side of a solo run to lose to. The banner now reads 幕引き / CURTAIN CALL in the house gold — DEFEAT is kept for online matches, where somebody really did beat you, and the game works out which is which by itself. Underneath it, every solo mode now prints a real end-of-run bill in the style of the shared wanted poster: aged paper, a masthead, the run's figures down the card and your all-time bests under a rule, with a stamp across the bottom. Tetr-Ink lists stage, lines, score, time, ink and best chain; the Ink Rink lists floor, time, slides, score, ink and the ice tax; Ink Panik — which until now ended on absolutely nothing, no figures and no payout at all — now closes its own books, pays out half the pot the way fleeing a wave always did, and prints how deep you got, blocks cleared, score, best chain and time. Ink-Put!, Lumen Ink, Superstars, Bullet Ballet, Dance Dance Ink, Ink-Tar Hero and Wednesday Jams all get the same treatment with their own figures. The shared wanted poster follows suit: a solo card says RUN COMPLETE instead of DEFEATED, stamps CLOSED instead of BEATEN, prints the ink you banked where the rival mugshot used to be, and no longer draws a picture of an opponent who was never there."],["v0.533","SHARE CARDS NEVER ASK TO REPLACE A FILE AGAIN. Saving a win card used to write the same name every time for a given game, so the second save of the same mode made the phone stop and ask 'Download file again? File name already exists' — right in the middle of a victory screen. Every card now saves as Inkville_GameName_YYYYMMDD_HHmmss.png, stamped with the moment you pressed the button, so no two files can ever collide. Both buttons use it: the download arrow and the share sheet."],["v0.532","TETR-INK NOW SLIDES WHEN YOU HOLD LEFT OR RIGHT. Tapping the D-pad still nudges the piece exactly one cell, the way it always did - but lean on the button and, after a short beat, the piece keeps sliding across the well until you let go or it hits the wall. It is the same hold-to-repeat the DOWN button already had for the soft drop, and it is the standard feel of every competitive Tetris: 170ms before the slide begins, then a cell every 50ms. No more mashing to get a piece to the edge. Rolling your thumb from one direction to the other cancels the first cleanly, and a held button can never survive a lock, a game over, leaving the screen or the window losing focus."],["v0.531","The share card is a WANTED poster now, and half the size it was. Your inkling is stamped in black-and-white ink — full costume and gear, just no colour — under big old-west WANTED lettering, with the verdict underneath: DEFEATED when you win, OUTGUNNED when you don't. The rival you beat (or who beat you) is pinned in the corner with their name, your level and cups sit on a REWARD plate opposite, and the run's own figures — time, ink, floors, whoever it was — are printed down the bill. Win and your inkling grins with a CAUGHT stamp across it; lose and it is wide-eyed and shocked while they smirk back at you. The only colour left is the marquee frame around the outside of the SAVED picture — the title screen's gold and red bulbs, held still — and the INKVILLE wordmark, now one word with A RUBBERHOSE RUMBLE BY ODAROO under it. The in-game victory screen is unchanged; the frame is on the exported PNG only. Sharing now sends one short line and the link exactly once instead of printing the address twice. Every game's victory and defeat screen gets it."],["v0.530","ONLINE MATCHES END THE MOMENT YOU LEAVE ONE — ALL FIVE GAMES, BOTH SIDES OF THE WIRE. Walk out of a Crown table, a brawl, the rink, Tetr-Ink or Ink Panik and it is over instantly: the other player is handed the win and their cups, you get the DEFEAT receipt with what it cost, and the room is told before you have finished reading it — so you are back on the boulevard free to be challenged again straight away, with no ghost match and no YOU ARE ALREADY IN A MATCH. Four holes were doing that: the online BRAWL was walking out through the SOLO tear-down, so the one game most likely to be played against a person was the one that never told the room; the five poll loops that notice you have left the screen were freeing the room only if you happened to leave through a menu; the room kept answering the leaver with the match they had just quit for a full minute afterwards, which is the ghost itself; and abandoning a bot was quietly billed at the online price. Plus the online rules Odaroo asked for: SELECT is dead in an online match (the save ritual takes ten seconds and the other machine plays straight through it), START still opens the pause menu because it is the only way home, but nothing actually pauses — it says so on the menu — and burying the tab no longer throws a pause screen over a live board."],["v0.529","THE INK RINK — the online rival now GLIDES instead of teleporting, and ALPHA and BETA got a lot harder. Online, the game reads the wire every 0.6 seconds, so a rival who took three glides between two reads had all three written onto the ice in one frame: only the last one was ever drawn, and two chained straight slides shown as one look exactly like a diagonal jump. Their moves are now played back one at a time, each waiting out its own slide before the next begins — the same courtesy the CPU has always had — and their floor-clear waits for the last glide to land instead of re-dealing the ice out from under a skater mid-slide. On the bots: ALPHA takes the right move nine glides in ten now instead of barely half, never wanders further than second-best when it is wrong, and has almost stopped slapping into walls; BETA is up to 96%. Everyone breathes a little quicker between glides, but the slide itself is still one speed for every skater. Measured over 200 generated floors through the real solver: ALPHA clears a floor in 3.2s (was 9.8s, and it no longer runs the clock out), BETA 2.6s (was 4.2s), OMEGA untouched at 2.5s. Alpha and Beta are hard now; Omega is still the expert."],["v0.528","Verification build — the level-tab batch re-proved against a fresh inkSelfTest() pass at both folds rather than a forced gate: 375x812 completely clean, 906x832 carrying only the known Tetr-Ink re-measure phantom. No behaviour changes, no code changes; this build exists so the recorded pre-flight on record matches the files that are actually being served."],["v0.527","THE LEVEL LIVES ON THE FRAME — a golden rule for every game, every screen. The level is off the username entirely; it is now a small black tab with white text hung off the SOUTH of the inkling's circular frame, cream-bordered and drawn above the ring so it reads as part of the frame rather than a sticker on it, one fixed width from LV1 to LV25. It follows the inkling everywhere: all eleven game screens, solo and online, yours and the rival's, plus the home HUD and the profile. The two portraits in an online match now sit lower under their names with room for a tall hat and for the combo hop, and both are measured identical in size and seat. And tapping the rival no longer opens a screen: a small strip unrolls under the two faces with YOUR cups and wins beside THEIRS, four numbers and nothing else, closing on the next tap or by itself — it is not a modal, so the game keeps running and every button keeps working underneath it."],["v0.526","THE INK RINK: THE SECONDS SHOW UP NEXT TO THE CLOCK THEY WERE PAID INTO, AND THE FIRST-SKATER PICK IS A PLAIN RED TRIANGLE BETWEEN TWO REAL PORTRAITS. Picking up a clock on the ice, or clearing a floor, now flashes the number beside the timer that got it — yours on the RIGHT of your clock, your rival's on the LEFT of theirs, so the figure always says WHOSE. The +3 and the +10 were two different effects in two different places and are now one. The selector that decides who opens is a simple red triangle, the same three-cornered shape the exit wears on the ice, and it SNAPS left-right-left-right and stops — no gliding, no coin. And the two contenders wear their real portrait frames instead of the old coin's gold and blue faces, so you are watching two players being pointed at rather than heads and tails."],["v0.525","A GAME'S SONG ALWAYS STARTS FROM THE TOP; ONLY THE MENU THEME CARRIES ON. v0.524 stopped the theme restarting as you move around the front of house, but it applied the same courtesy to every game record — so walking back into a game you had just played picked its tune up halfway through, wherever the last run happened to leave it. A run that begins in the middle of its own music is wrong. There is now one place that decides which kind of record a file is, derived from the front-of-house list so a screen added there cannot forget to say so. The theme keeps its place; a game record never does — lifting the needle off it always sends it back to the first groove. On top of that, entering a game rewinds it outright, so a retry on the screen you are already on and an online rematch both open on the first bar exactly like a fresh start. Wandering the marquee, the menu, the carousel, the profile, the gigs, the mart, the album and the credits is still one unbroken performance, and coming out of a game still drops the needle back on the exact groove the theme was holding."],["v0.524","MUSIC PLAYS STRAIGHT THROUGH THE WHOLE FRONT OF HOUSE. Since the recordings moved onto the AudioContext the theme restarted every single time you changed screens — title to menu to profile to gigs to mart to album started the song six times over. The cause: asking for a record was never a no-op. THEME.load() had always refused to re-assert the same file, but THEME.play() spun a brand-new source every time it was called, and every screen change calls it. It now does nothing at all when the record it is being asked for is already the one on the turntable, so the theme is one unbroken performance from the moment the game opens. The mode carousel and the credits reel have also joined the front of house — they were missing from the list, so the record parked in the middle of the menu and picked up again on the far side. Minimising the app still pauses everything and coming back still resumes on the exact same note, and every game keeps its own record: walking into Crown or the rink swaps to that game s tune and remembers where the theme stood, then drops the needle back on that groove on the way out."],["v0.523","Tetr-Ink LINES stat, Ink Rink solo overhaul (floor reset, centering, scoring, no floor-clear popup, par removed), OK-to-game flash fix, music switched to Web Audio API (no Chrome notification, auto-pause on background)"],["v0.522","Tetr-Ink LINES stat, Ink Rink solo overhaul (floor reset, centering, scoring, no floor-clear popup, par removed), OK-to-game flash fix, music switched to Web Audio API (no Chrome notification, auto-pause on background)"],["v0.521","Reorder game ladder: Tetr-Ink, Ink Rink, Crown Deluxe, Ink Panik, Ink-Put, Superstars, etc."],["v0.520","Home carousel: default to Tetr-Ink on fresh restart"],["v0.519","Online: OK centered without exclamation, Japanese underneath, faster animation"],["v0.518","Gigs + Achievements: scale up text and badges on unfolded screen"],["v0.517","All games: black screen during splash, game loads hidden, reveal after splash completes"],["v0.516","Ink Rink: replace coin flip with red arrow random selector animation"],["v0.515","Ink Rink: remove clock overlay, fix online entry to black splash like all other games"],["v0.514","Victory/defeat passport share cards with QR code, card roulette on wins, download + share buttons"],["v0.513","Ink Rink zoomed in on the unfolded fold: the controls are measured as three islands rather than one bar, and the ice is centred on the corridor between them instead of on the screen — tile 43px to 58px, 91% of the screen height. inkPadTop now reports the highest control, which also lifted Bullet Ballet off the A/B buttons."],["v0.512","Ink Rink: faster slides, bot door finish, run-complete animation, bigger unfolded rink, clock pickup for all"],["v0.511","INK RINK — A BLOCKED PRESS NOW SHOWS THAT IT IS BLOCKED. The visible glide itself came back in v0.509 (a v0.500 CSS rule had quietly replaced the skater's left/top transition with an opacity-only one, so no duration in the code was being honoured at all and every move was an instant teleport); this build closes the last thing that still made a working button feel like an ignored one. Facing a rock that is already touching you, a press used to be answered by a sound and absolutely nothing else — and on ice, where every other press sends you the whole width of the rink, a press that moves you nowhere is indistinguishable from a press that was never received. It knocks against the wall now, the same knock ALPHA gives one, so a blocked press reads the same whoever makes it; and it deliberately does NOT lock the controls, because answering that press did nothing with and now your next one will not either is the wrong answer. Played through the real D-pad door to prove it rather than by poking at internals: four floors cleared in a row, every glide duration exactly on the dial (one tile 0.22s, three tiles 0.66s, anything six or longer capped at 0.90s, so a full-width slide takes most of a second and the eye can follow it the whole way), a second press during a glide correctly refused every time, and the knock landing with the skater staying exactly where it was. Note for the record: there is no INPUT NOT DETECTED message anywhere in this game and there never has been — the silent blocked press is what was producing that impression. Pre-flight clean at both folds, twelve games entered."],["v0.510","Solo games: remove retry button, always return to menu after win/loss"],["v0.509","Ink Rink: restore the visible slide. A v0.500 CSS rule had silently replaced the skater's left/top transition with an opacity-only one, so every glide was an instant teleport no matter what the speed dial said; the glide duration now rides a custom property and the rate is 220ms a tile for player, rival and bots alike."],["v0.508","Profile: rename best time to time, format as M:SS"],["v0.507","INK RINK POLISH — three things. (1) THE BOTS DIFFER ONLY IN HOW WELL THEY FIND THE DOOR, never in how fast they move. Every skater on the ice now glides at exactly one speed; the pace knob that used to make OMEGA quicker is deleted from the dial outright rather than set to 1, so nobody can tune a speed difference back in later. ALPHA takes the wrong turn a lot, doubles back, goes the long way round and now physically SHOVES INTO WALLS — a glide that goes nowhere, thuds and costs it the same beat a real glide costs, which is what struggling looks like on the ice instead of standing about. BETA loses the odd glide to second-best. OMEGA is near-optimal and a genuine race. All three were then run against the real generator and the real solver over 200 floors each rather than tuned by eye: ALPHA clears in ~9.8s, BETA ~4.2s, OMEGA ~2.8s. The first attempt at ALPHA failed to reach the door at all on 137 floors of 200 and would have looked broken, which is exactly why the sweep exists. (2) THE GLITCH INK IS THE SAME COLOUR IN THE CORNER AND ON THE ICE, FOR REAL THIS TIME. One clock has painted every glitch sprite since v0.502, but it only fires fifteen times a second and it will not re-arm while it is already running — so a sprite BORN between two ticks wore no colour at all for a moment. The corner avatar is drawn once and left alone; the skater is rebuilt on every single floor, so the one that kept being re-made kept flashing back to raw magenta beside a neighbour three-quarters of the way round the wheel. A glitch sprite is now stamped with the current frame of the shared wheel as it is built, so it is right on the first frame it is ever painted. All 33 ink colours were then checked to be identical in the avatar, on the field and on the coin. (3) THE EXIT ARROW IS A MARK, NOT A TILE. The framed plate and the Japanese went in v0.491; what was still reading as an extra square was the triangle own footprint, filling a third of a full tile dead centre. It is now a small red arrow tucked up under the gold door, touching it. Pre-flight clean at both folds, zero faults, twelve games entered."],["v0.506","THE INK RINK SLIDES AGAIN — YOU CAN SEE IT NOW. Everything on the ice was moving at fifty milliseconds a tile, which is twenty tiles a second, and the bots then multiplied that DOWN by their own pace on top of it, so OMEGA was gliding at thirty-six milliseconds a tile. That is not a slide, it is a jump cut, and it is why the rink read as a blur for both the player and the rivals. The figure was also written out in FOUR separate places: the players transition, the timer that unlocks the next press, the rivals transition, and the schedule the bots use between glides. There is one now, rkGlideMs, and everything asks it. A glide is a hundred and five milliseconds per tile with a floor so a single hop is still a movement and a ceiling so a full-width slide never drags: a one-tile nudge takes 0.15s and a four-tile slide 0.42s, where they used to take 0.05s and 0.20s. THE ANIMATION IS NOW THE SAME SPEED FOR EVERY SKATER. A bot being harder is how well and how often it moves, never how invisibly, so pace has come off the slide entirely and moved onto the breath between glides where it belongs. That also closes a real bug: the bots wait is derived from the same figure as their animation, so a glide can no longer be cut off mid-ice by the next one starting, which is what made a rival look like it was teleporting. OMEGA still clears a floor in about six decisive glides."],["v0.505","INK PANIK ONLINE NOW WALKS IN EXACTLY THE WAY THE SOLO RUN DOES. The online match was building the entire game in the wrong slot: the scene was laid in the callback that runs AFTER the splash and AFTER the 3-2-1, so the title card and the whole countdown played over a screen with no city, no side panel and no board on it, and then the game was constructed on the frame GO cleared. That is the board changing when GO appears, and it is why online looked glitchy while solo was fine. The match is now built while the connecting card still covers everything, which is where a scene belongs. The order is identical to solo, rival panel and all: the city, the side panel and an EMPTY board load first and are visible, INK PANIK plays on top of that loaded scene, 3-2-1-GO, and only then do the blocks appear. The board is measured once, before the card, and never moves again. The black curtain the online splash used to play over is gone for this game, because it was the one thing making the online entry look different from the solo one, and the VS instruction toast that fired over the ceremony is deleted. The INK PANIK card also rides HIGH now, centred just under the inkling avatars and more compact, like a movie title card, in both solo and online."],["v0.504","THE LINK CABLE IS NOW FOUR SECONDS SHORTER AND ONE IDEA LONG. Odaroo called a complete change of direction on the online entry, so everything between the two Game Boys and the game is deleted: the glitch, the dive into the wire, the whole Chrono-Trigger warp tunnel (a canvas of projected light streaks, three builds of work) and the arrival at the rival's handheld. What is left is the part he wanted kept and two beats: the two Game Boys sit there linked by their cable with each player's own inkling on the little screens, a huge OK! punches in over them to say the connection is good, and then the screen falls into the OK! and the match begins. It runs 2.4 seconds instead of 8.4, and it plays before every single online match, which is the whole argument for keeping it this short."],["v0.503","INK RINK, THIRD PASS ON THE WAY IN — and this time it is the ONLINE match that was wrong. The solo run got its ceremony in v0.500; the online one (which is the path a bot game walks through, and the only one with a coin) was never given it, so its ice tiles were readable through the whole coin toss and the whole 3-2-1. Worse, the opening floor was starting a SECOND countdown of its own behind the connecting card — it reached GO first, so the match was genuinely live and burning a clock while you were still watching the coin decide whose turn it was. There is one ceremony now and one owner of it: the stage loads in full with no ice, INK RINK announces itself, the coin flips with both players inklings on it, 3-2-1-GO, and only then do the tiles appear and the winners clock start. Both clocks sit at MAX, frozen, until GO. THE GLITCH INK IS ONE COLOUR EVERYWHERE AGAIN: it was cycled by a per-element CSS animation, and an animation starts when its element is first drawn, not when it is made — measured, the corner avatar was a fifth of a second behind the skater on the ice, which to the eye is simply two different colours. One clock now paints every glitch inkling on screen together, so they cannot disagree."],["v0.502","THE LINK CABLE, RE-CUT. Both Game Boys are now on screen TOGETHER from the very first frame — no zoom onto one and no staggered slide-in, just the finished picture: two handhelds, one cable, both inklings lit. The D-pads drawn on them got a bigger, properly symmetric cross, so the down arrow is a full arm instead of a stub. Then both handhelds GLITCH — a red/cyan chromatic tear, twice — to say the connection has caught. Only then does the camera dive into the wire between them, and that dive is now 2.6 seconds instead of 1.7, on a curve that barely moves at first so you can actually watch yourself go in. Inside there are no words at all, just the Chrono-Trigger warp tunnel, which now runs over two seconds at full speed before easing off as the rival handheld rises out of the vanishing point. The whole journey is 8.4s, all of it bought by the dive and the tunnel."],["v0.501","CROWN DELUXE — ENTRY, STICKS AND A ONE-TIME HINT. THE CARD IS NOW A REVEAL OVER THE TABLE. The splash used to be fired on the same line that laid the table, which is fine when the first paint lands in that same tick and a title over bare felt when it does not — the same race the rink and Ink Panik were just cured of. It now waits until the felt has genuinely been PAINTED, then the whole scene blurs slightly, CROWN DELUXE comes up sharp over the soft table, the blur clears, the coin flips, 3-2-1-GO, and play begins. THE SOLO TABLE GETS A REAL COIN TOSS and it decides for real: heads or tails, YOU BREAK or THEY BREAK, and if it lands on the rival they genuinely take the opening shot. Solo used to always break, which is why there had never been a coin here. BOTH STICKS ARE VISIBLE AT ALL TIMES AGAIN — this reverses v0.496 at Odaroo's request. Your cue is on the table while you place and aim, and the rival's is on it while they line theirs up, so you can watch them wind up and read what they are going for. AND THE FIRST SHOT A PLAYER EVER TAKES NOW COMES WITH AN ARROW. Crown's one non-obvious mechanic is that the cue is drawn AWAY from the ring to build power, so a small gold arrow runs down the cue's own line in the pull direction with PULL BACK under it. It points along the cue rather than down the screen, so it teaches the right direction at every angle, and it is retired the moment a shot is actually taken — once per save, never again."],["v0.500","THE ICE CAVE HAS BEEN BLANK SINCE v0.487 AND THAT IS THE EMPTY BACKGROUND. The rink's backdrop — the aurora, the stalactites, the frozen pool — was drawn beautifully and never once shown. Two faults, either one enough on its own: it was only ever SCHEDULED for an animation frame rather than painted, and its loop shut itself down on its very first frame because renderRink runs before the screen swap finishes, so it saw the wrong screen and stopped for good. It is painted on the spot now, and the loop gives the swap a second before it believes the screen has been left. No reordering of the splash was ever going to fix this. THE SOLO RINK NOW HAS A REAL ENTRY, AND IT NEVER HAD ONE BEFORE — every previous attempt rebuilt the ONLINE ceremony while the solo run laid the board, dealt the rocks and started the clock in one breath with the title card landing on top a second later. Now: the full stage loads, the splash waits until the cave is painted and the board is laid before the curtain goes up, then 3-2-1-GO, and only then do the ice tiles fade in and the clock start. THE CLOCK IS FROZEN AT 30 THE WHOLE WAY THROUGH — it used to be visibly ticking under the splash, measured running from 30.0 down to 28.1 before the player could move. ALL INSTRUCTIONAL TEXT IS GONE from the way in; the rules live in the pause menu's HOW TO PLAY. THE ONLINE COIN AND COUNT ARE UNCHANGED and verified again: coin with both inklings, then the count, both clocks frozen at 30, and only the skater's clock burns after GO. THE LINK CABLE KEEPS BOTH GAME BOYS IN FRAME — v0.498's dive aimed at your own handheld, which pinned it and threw the other off the screen, so it read as zooming in on one and losing the other. The camera goes to the middle, where the wire is, and both grow together into it. Still no text of any kind inside the cable."],["v0.499","INK PANIK OPENS ON A STAGE THAT IS ALREADY SET. The splash was landing on a blank screen and the real cause was a race nobody had looked at: the city backdrop was started on its own timer at exactly the same moment the title card was fired, and because the backdrop only ever ASKED for an animation frame it painted AFTER the card. So the title went up over an empty screen and the scene arrived behind it. Three things are fixed. The city is now painted SYNCHRONOUSLY, on the spot, as part of laying the scene — no waiting for a frame that a busy phone may be slow to give. The whole scene is laid by one function so the stage number, the side panel, the feature wall, the empty board and the city all go down together. And the splash no longer waits for a CLOCK, it waits for the STAGE: it polls until the screen is genuinely on, the side panel reads STAGE 1-1 with its speed and level, the board is laid out and the city has actual pixels on it, and only then does the curtain go up. The order the player gets is now background and panel visible, then INK PANIK over the top of it, then 3-2-1-GO with the board still empty, and the blocks appear on GO. Measured end to end: the card now goes up at 0.57s with everything behind it already there. A new pre-flight check fails the build if the splash would ever land on a half-built screen again, and it names which part is missing."],["v0.498","LINK CABLE POLISH. THE CUT-OFF DOWN ARROW IS FIXED, AND IT WAS NEVER THE REAL CONTROLS — it was the D-pad DRAWN on the two little Game Boys in the animation. Their cross was never symmetric: the upright and the crossbar were centred three pixels apart, which left an up arm nine pixels long and a down arm of three. All four arms are eight pixels now. THE WORDS OVER THE TUNNEL ARE GONE — no INSIDE THE WIRE, no TRAVELLING, nothing narrating the journey; the lines are removed rather than blanked so there is no empty neon box left sitting over the warp. LINK CABLE and CONNECTING stay on the way in, because that is the handshake telling you what is happening. THE ZOOM TAKES ITS TIME NOW: the dive runs 1.7 seconds instead of 1.15, its acceleration pushed later so most of it is spent close enough to watch, and it aims at YOUR OWN END of the cable rather than dropping into the middle of the arc from nowhere. AND THE JOURNEY NOW HAS AN ARRIVAL. You go into your end of the wire, fall down the time warp, the warp EASES OFF instead of being cut away at full speed, and their handheld rises up out of the vanishing point and settles at readable size with their real inkling lit on its screen and CONNECTED underneath. One continuous trip from your device to theirs, about six seconds end to end."],["v0.497","FOUR INK RINK FIXES. THE COUNTDOWN IS TETR-INK'S — the rink had a bespoke 3-2-1 of its own and now calls the very same shared curtain-raiser every other online game uses, so the font, the animation and the timing are the same thing rather than two things kept in step by hand. THE ICE IS VISIBLE BEHIND IT: the opaque cover over the floor is gone, the board is built at its final size before the ceremony starts, and nothing moves or reloads when the count lifts. THE COIN CARRIES BOTH PLAYERS' INKLINGS — heads is you, tails is them, each drawn in the costume they are actually wearing, and the line underneath names the face it came down on. NO CLOCK RUNS until GO, on either side. THE SOLO CLOCK MOVES OFF THE BOTTOM OF THE ICE and up under the inkling, into the very same slot the online match has hung its two clocks in since v0.451 — so solo and online now put the same readout in the same place instead of contradicting each other, and there is no timer at the bottom of the screen any more. AND THE GLITCH INK IS ONE COLOUR EVERYWHERE AT ONCE: its hue was rolled from the clock every nine-tenths of a second, so the corner avatar and the figure on the ice were genuinely born different colours, and their colour-cycling animations then ran permanently out of step because a CSS animation starts when its element does. The hue is fixed now and every glitch drop is phased off one shared timeline, so the avatar, the skater on the field and the coin are the same colour on the same frame. All 33 ink colours checked for avatar-to-field agreement."],["v0.496","Two fixes. THE INK RINK BOTS NEVER STAND STILL ANY MORE — Alpha, Beta and Omega all skate in constant motion, and what separates them is now DECISION QUALITY rather than how long they pause. Alpha is fast but scatty: less than half its glides are the right one and when it is wrong it can pick any direction at all, so it doubles back and takes the long way round while never stopping (about 7 seconds a floor, and sometimes it does not make it). Beta is fast and mostly right, slipping to second-best now and then (about 2 seconds). Omega is very fast and near-optimal and glides quicker across the ice as well (about 1 second a floor) — a genuine race. The longest any of them now stands still is a fifth of a second. CROWN DELUXE HIDES THE SHOT STICK UNTIL YOU REACH FOR IT — the cue is invisible while you are only sliding the ring, appears the moment you start aiming or pulling back, and vanishes again the instant the shot is away. There is no stick on the board at all during the rival's turn."],["v0.495","THE JUNK RULE SAYS WHAT IT DOES. Online Tetr-Ink has sent a junk row every TWO cleared lines since the constant was halved, but the comment sitting directly above that constant still described the old every-four-lines rule — so anyone reading the code was told the opposite of what it does, and the next person to trust the prose would have 'fixed' a number that was already right. The behaviour is unchanged and was already correct; this is the explanation catching up with it, alongside a note that a constant moving means grepping the words beside it for the old figure. The player-facing tutorial had the identical drift and was corrected two builds ago."],["v0.494","AUDIO REBALANCED, CROWN SOLO SIMPLIFIED, NO THIRD FORFEIT MESSAGE. The records now clearly lead and the effects complement them: the whole sound-effect bus drops from 0.55 to 0.34 while the music rises from 0.55 to 0.80, and the seven-second dial-up connecting sting takes a second duck on top of that because a long sustained noise is far louder to the ear than a short click going through the same number. Crown Deluxe solo is now one ring per stage across five stages, always five shots, so the stage number and the number of rings are finally the same number instead of reading 1-1 / 1-2 / 2-1 / 3-1 / 4-1. And leaving an online match no longer raises a toast on the way home: the confirmation already showed the price and the cups already tumble off the counter, so that was the same fact told three times."],["v0.493","TETR-INK'S ONLINE COLUMN USES THE WIDE SCREEN. On the unfolded fold, NEXT and HOLD now sit SIDE BY SIDE instead of stacked (the folded phone keeps them stacked, where a row would make both too small to read), HOLD is the smaller of the two since it shows a piece you have already parked, and every label and figure in that column goes back up to a size chosen for a 184px column rather than the tiny one written for the squeezed 82px case. All the height that frees up goes to the rival's board, whose ceiling rises from 13 to 17 pixels a cell — still only spent if the room genuinely measures, so nothing changes on the folded phone."],["v0.492","THE SUN COMES UP OVER INK PANIK, AND THE WIRE BECOMES A TIME WARP. Ink Panik opens in DAYLIGHT now. Its city was six different nights in a row from stage 1-1 onward, so the very first screen of the game was already midnight and there was nowhere darker left to go. It is a clock instead of a rotation: stage 1 is a bright blue afternoon, the middle stages take it down through a golden hour and a red dusk, and the deep stages are the night the game used to open on. The colours are mixed between the hours rather than switched, so the sky visibly drifts as a run goes on — and it does not loop, so once it is night it stays night. The stars only come out when it is actually dark. The whole scene is drawn at more than twice the detail as well (320x200 from 160x100), with the composition untouched to the pixel and the fine things — the lit windows, the stars, the light on the water — now half the size they were. Entering it follows the order Odaroo asked for exactly: the background and the board load and are VISIBLE first, then the INK PANIK card plays on top of a screen that is already there, then 3-2-1, and only then are any pieces dealt. The board is genuinely empty for the whole count, not hidden — the stack rises on a clock, so a board dealt at the start of the count would already have been playing for two and a half seconds by the time you were allowed to move. THE D-PAD WAS NEVER CLIPPED. Measured at both folds, the cross sits fully inside the pad with room under it; what was happening is that the link-cable animation is a full-screen overlay that was painted straight OVER the controls, so what shows at the bottom edge of a phone is the top half of a D-pad with its lower arm hidden. It sits UNDER the pad now — above the connecting card, below the controls — which also puts back the golden rule that the pad stays visible while connecting and only dims. THE TUNNEL IS A TIME WARP. The binary rain and the neon squares are gone; in their place is a real vortex built the way the SNES did it, a field of streaks placed in polar coordinates and projected so that depth comes from the projection rather than from anything drawn to look 3D. Each streak is a line between where it is now and where it was, so it stretches as it arrives; the far end of the tunnel turns more slowly than the near end, so the whole thing corkscrews. Blues, violets and white, and nothing in it flashes — every streak fades in and out over its whole life and there is no strobe of any kind. THE FLASH GIG STOPS INTERRUPTING. It still spawns, still runs its twenty minutes and still pays — it is simply found by opening GIGS rather than announced over whatever you were playing. And the connection sign is a THEATRE MARQUEE: a black card ringed with the title screen's own square bulbs, chasing round the frame while the line is down and settling into a green flash when it comes back. Same 10px square, same gold and red, same spacing, taken from the title frame's own arithmetic. Both fold sizes swept: twelve games entered, zero faults."],["v0.491","ONE SPLASH, A CLEAN SKY, AND THE RINK CLOCK ODAROO ASKED FOR. The splash really was playing twice, on the rink and at the Crown table both: back in v0.440 every online game was given its own announcement, and when v0.462 built the single shared door and gave the announcement to that, nobody took the old line back out of the three games that had one. So each of them announced itself, went round again, and announced itself a second time. There is one announcement now, it belongs to the shared door, and no individual game may have its own. It also plays over BLACK — a plain curtain goes up behind the card and comes down as it leaves, so the game is not visible behind its own name and any last settling of the board happens where nobody can see it. That settling was real: the rink was changing to its own screen a second time, running an ink wipe over a screen it was already on, which is the re-adjust in the recording. Its floor is now built once, at its final size, while the curtain is still up. The order into an online rink match is exactly as asked: INK RINK, then the coin, then 3-2-1, then the floor and the clock. The coin moved BEFORE the count deliberately — counting a player in to a turn they have not been told is theirs answers when without ever answering whose. THE CLOCK: thirty seconds is a hard ceiling now, not a display limit; a clear pays THREE seconds, the same figure the solo run has always paid; and a full clock reads MAX instead of a number, because 30.0 and 29.9 look like the same information when only one of them means a clear buys you nothing. The tile before the exit is gone — it was being handed the same dark bordered plate the HUD wears, so it drew as a framed panel sitting on the ice, a second thing to work out on a board whose whole puzzle is which squares you can stop on. One red triangle points at the way out. No Japanese, no word EXIT, and it is drawn rather than typed so it is the same shape on every phone. AND THE CROWN SKY IS ROLLED BACK. The day-night-galaxy-trippy cycle is deleted outright, along with the stars, the nebulae, the moon and the hue banding — not left switched off, because unreachable code that looks alive is how a feature gets half-revived by accident. What is left is one pale blue sky and clouds, and both are better: the sky is drawn at 256x192 instead of 120x96, and the clouds are built from overlapping round lobes resolved a row at a time instead of five stacked rectangles, so they have genuinely curved edges at half the old pixel size. Measured on the finished layer: three flat tones and a moving edge on eight rows in ten. Odaroo's point is the rule now — pixel art does not mean everything is chunky; the cast is chunky because it is read at a glance, the scenery behind it can carry four times the detail. Crown also gained the same 3-2-1 every other online game counts in with, between its coin and its first shot. Both fold sizes swept: twelve games entered, zero faults."],["v0.490","THE INK RINK TAKES TURNS AGAIN. Odaroo has corrected the design and the online rink is turn-based, not a race. A match now opens the way he described it: a 3 - 2 - 1 - GO over covered ice, then a COIN decides who skates first. From there there is one sheet of ice and you alternate — the player whose go it is skates while the other watches their glides land on the very same floor. THE CLOCKS ARE THE HEART OF IT: you each have your own, and only the skater's runs. The moment you clear the floor YOUR clock STOPS DEAD, the ice is handed over, and theirs picks up exactly where it left off; when they clear, yours resumes on the same second you left it. Clearing pays four seconds back onto the clock that earned them, so clearing fast is what keeps you alive, and your clock reaching zero is the one and only way to lose — your ice breaks and the match is theirs. Solo runs now start on a genuinely clean slate: an online match hangs a clock under each inkling, a floor readout and a turn banner on that screen, and several ways out of a match left them behind, so a solo run could open wearing the last match's furniture. The match is torn down first and the furniture comes down after it, which is what makes it stay down. Under the hood the rival bot stopped keeping a second private clock of its own — it was subtracting from the same number the match clock was already burning, so a bot's ice broke at twice the speed a person's did. Verified by playing it: my clock ran, I cleared, it froze to the tenth of a second while theirs burned, they cleared, mine resumed. Both fold sizes swept: twelve games entered, zero faults."],["v0.489","THE TAB ICON STOPS 404-ING. Every single page load has been asking the server for /favicon.ico — a file that is on the room's whitelist but has never actually existed on disk, so every visit took a wasted round trip and a 404 before the game had even finished loading. It stayed invisible because the game swaps its own live inklet in as the tab icon a moment later, so the picture always looked right; only the very first paint and the network log ever knew. The page points at icons/icon-192.png now — already drawn, already served, already cached for the home-screen install — and the dead whitelist entry is gone, so the deploy stops warning about a file nobody is ever going to add. Both fold sizes swept: twelve games entered, zero faults."],["v0.488","TETR-INK TELLS THE TRUTH ABOUT ITS JUNK LINES. The HOW TO PLAY card still said an online match sends the other player a junk row every FOUR lines you clear — the game has sent one every TWO since the online matches were sped up, so the only thing left saying four was the tutorial. Corrected. Everything else this build carries is a full sweep of the outstanding queue, verified line by line against the code rather than assumed: the link-cable entrance, controller support with its secret badge and frame, the vault tile showing Bit-Brawl behind its chains and breathing, the profile flicker, the single forfeit dialog, the online victory screen without a stage number or an odds table, the five-minute idle lobby, the connecting lock, the merged Tetr-Ink run box, Ink Panik's readable side column, Crown Deluxe's one-ring-per-stage solo ladder with its run clock, the trimmed effects mix and the trials/inflate tracks are all present and correct on this build. Both fold sizes swept: twelve games entered, zero faults."],["v0.487","A GLOWING ICE CAVE UNDER THE RINK, AND EVERY FIGURE IN THE ARCADE LOG IS NOW A PERSONAL BEST. Ink Rink plays in front of a cavern: an aurora of cyan, electric blue and violet moving slowly across the roof, stalactites and stalagmites in silhouette, ice crystals glinting on their own clocks, and a frozen pool along the bottom that reflects the whole thing upside down. It is drawn procedurally into a 140x100 canvas and blown up, the way Ink Panik's harbour is. TWO PERFORMANCE LESSONS ARE BAKED INTO IT. The reflection first copied the real aurora with getImageData and replayed it inverted — which looked perfect and cost SIX MILLISECONDS A FRAME, because a canvas readback is the most expensive thing you can ask a 2D context for; it is the same aurora maths run again with the y inverted now, and free. Then the ribbons were setting an hsla() colour FOR EVERY PIXEL — about ten thousand colour-string parses a frame — so they are drawn as three batched bands where every column of a band shares one colour. 9.84ms a frame became 1.85ms, and it is throttled to twenty frames a second because nothing in a slow aurora needs sixty. THE HUD GOT REAL PANELS to go with it: deep ice-blue plates with a frost edge behind every box, so nothing bleeds through the lights, and the side column was given a z-index — a positioned backdrop paints OVER any non-positioned sibling, which is exactly how Ink Panik's column went unreadable in v0.483. AND THE ARCADE LOG STOPPED MIXING TWO KINDS OF NUMBER: BEST was the ink from a single run while TIME beside it was every session ever added together, so one card could read BEST 12,400 and TIME 33m with no hint that they meant different things. TIME is now BEST TIME — the longest single sitting — so WINS, BEST and BEST TIME are all records of one run. A visit under ten seconds is not a run and cannot become a record."],["v0.486","INK RINK, AUDITED AND REBUILT AS A RACE. THE BIGGEST BUG WAS THAT IT WOULD NOT OPEN AT ALL: rinkEnter refused to start with 'COLLECT A CART FIRST' and simply returned, a guard written when every save began with eight cards — and v0.477 made a new save begin with ZERO. Pressing SOLO did nothing. The card it was protecting is vestigial: you skate as your own inkling and the floor wheel is what grants cards now. TWO SPLASH SCREENS became one: the rink is in SPLASH_NAMES, so the shared entrance already announced it, and rinkIntroBanner drew a second identical card straight on top. AND NO SOLO MODE SHOWS A VS SCREEN ANY MORE, anywhere — the flag that decided it was cleared game by game across three builds and two games still had it, so the mechanism is retired rather than the flags cleared. THE ONLINE RINK IS SIMULTANEOUS AGAIN. The file contained TWO designs at once: v0.444's comments described a race in which you are never off your own ice, while v0.448's code took turns, flipping the ice between players with a 3-2-1 over covered ice between every one and each clock frozen while the other skated. A state machine documented as one thing and implemented as another is exactly how a game feels buggy without any single line being wrong. Now: both players skate at the same time, each on their own countdown that never stops for the other, and clearing a floor lays the next one on the same frame — no handover, no count, no pause — and pays four seconds back, so clearing fast is what keeps you alive. Your clock reaching zero breaks your ice; last one skating wins. THE CEREMONY IS CUT: an ordinary floor clear no longer raises a locked dialog with two buttons between every single floor — six floors used to mean six dialogs — it is a banner that rides up over the ice while the next floor is already being laid. The card wheel every fifth floor keeps its moment. Also fixed: the rink's bot difficulty table was still keyed on MASA and MUNE after v0.485 renamed the cast, so all three difficulties skated identically. Verified by playing a full solo run and a full online match through the real controls."],["v0.485","ONE SPLASH, A COIN THAT STAYS PUT, THREE NEW BOTS AND A LOCKED PAD. CROWN DELUXE OPENED WITH TWO CARDS because two things were announcing one arrival: go() announces every screen change, and the shared online door deliberately runs its own card a beat later once the board is built. Measured at 74ms apart, on all five online games. The entrance that wants to time its own card now says so and go() stands aside — and solo Crown holds its card back until the rack is actually on the table, instead of playing it over bare felt. THE COIN WAS NEVER SPINNING SIDEWAYS: the flip is a pure vertical tumble, but its box was width:auto, so it re-measured itself every time the words under it changed — CALLING YOUR COLOUR to YOU PLAY RED to YOU BREAK — and the whole thing slid across the felt each time. Fixed width, coin centred on its own margins, and it now sits on the red centre spot for the entire toss. THE SKY IS DRAWN TINY AND BLOWN UP. The table's geometry was measured and is innocent — but the sky was repainting three million pixels once every 1.05 seconds, which is 1.4ms on a desk and a great deal more on a phone, landing on a beat the eye can lock onto. It now paints into a 120x96 canvas and is scaled up, which is 0.09ms, and it steps every four seconds instead of every one. The starfield also stopped jumping twice a lap (the nebulae and the stars were sharing one random stream, and the nebula block is conditional). AND THE RULE IS A CHECK NOW: the pre-flight walks the sky through a whole lap and fails the build if the table's scale, rails, centre or tilt move by so much as half a pixel. ALPHA, BETA AND OMEGA replace Masa and Mune — easy in lime, fair in ocean blue, and near-perfect in cherry red with a crown and wings. Each takes ONE match at a time: challenge one and it turns red on everybody's roster and refuses a second challenger until it is free, while staying visible. THE GOLDEN RULE: while the game is finding an opponent, nothing the player presses does anything — no direction, no A or B, and no START or SELECT, because pausing mid-handshake tears down a match the room has already agreed. The pad keeps its colours and its place and simply dims. It is enforced at the two doors every input comes through rather than by disabling buttons, so a route added later gets the rule for free. AND TETR-INK ONLINE USES THE WIDE SCREEN: the run box lies down into a single row, the column takes back the width it was not using (the well is bound by HEIGHT there — measured identical at an 82px column and a 220px one), and the rival's board is 63% bigger. Junk now goes over every TWO lines cleared instead of four."],["v0.484","THE TIME CLIPPING WAS INK PANIK ALL ALONG, PLUS FIVE MORE. The 'TIME 0:...' Odaroo photographed was never Tetr-Ink: that box stacks its label above its value and measured clean at every size. The screenshot shows the label and the value on ONE line, and that is INK PANIK's run box, where TIME and the clock had to share 71 pixels — so the clock clipped the moment a run passed 9:59 and the CHAIN row clipped at almost anything. It stacks now, the same way Tetr-Ink's was fixed in v0.464, and every figure has the full width of the column to itself. The pre-flight now writes the LONGEST value each figure can reach and measures that, because a layout that fits the opening second of a run was never evidence of anything. THE PROFILE HAS STOPPED FLICKERING, and the wearables rack was innocent: any resize event at all — and ten of them fire in four seconds with nothing whatsoever changing — scheduled a FORCED relayout that bypassed the 'nothing moved' guard by design, rebuilding the whole screen about three times a second. The forced pass now only runs when the first pass actually did something, which was its only real purpose, and the profile is re-measured rather than rebuilt. Every grid screen had this. THE BIT-BRAWL VAULT SHOWS WHAT YOU ARE WORKING TOWARD: the artwork and the name sit behind the chains now, dimmed and pushed back, with the lock and UNLOCK ALL GAMES BEFORE UNLOCKING THIS ONE on top, and the whole tile breathes on a slow three-and-a-half second swell. AN ONLINE WIN HAS NO STAGE: the Crown victory card says VICTORY! instead of STAGE 1-1 CLEARED! and drops the drop-rate percentages, because odds for a next stage mean nothing in a match with no ladder. Solo keeps both. THE LOBBY ONLY SHOWS PEOPLE WHO ARE ACTUALLY THERE — every client reports how long since a real touch, and five minutes without one takes you off the roster until you touch it again. AND FORFEITING IS ONE HONEST QUESTION: the price shown is now the price charged (it asked for 15 and took 25), and the second popup on the way home is replaced by cups tumbling off the counter with a red minus under it."],["v0.483","TWO FIXES FROM ODAROO'S SCREENSHOTS, AND A CONTROLLER THAT JUST WORKS. TETR-INK'S TIME NO LONGER READS '0:...' — the figures in the run box were sized from the WINDOW while the column they live in is sized from the STATE, so a wide desktop took them to 19px while an online match narrowed their column to 82px, and 19px figures in a 72px box get an ellipsis. The size now comes from the column's own width, so any rule that narrows that column brings the figures with it and no future state can drift out of step. INK PANIK'S SIDE BOXES ARE READABLE AGAIN, and they were never a colour problem: the nightscape was being PAINTED ON TOP OF THEM. The city canvas is positioned with z-index 0, and in CSS paint order a positioned element paints after the backgrounds AND the text of every non-positioned sibling — every other box on that screen is positioned, and the side column was the one thing that was not, so it was the one thing the city covered. Nothing caught it because the canvas ignores taps (so every hit-test check passed) and the contrast checker looks at a text node's ANCESTORS, so a sibling painted over the top is invisible to it. Both are fixed, and the pre-flight now checks paint order directly, on every game, so the next backdrop cannot repeat it. AND: PLUG IN A BLUETOOTH CONTROLLER AND IT SIMPLY PLAYS. D-pad and left stick steer, the face buttons are A and B, START pauses — on every screen, every game and every dialog, because the gamepad presses the same two functions the on-screen D-pad presses rather than carrying a second copy of the routing. There is no toggle and no settings row; the only sign it happened is a badge that pops the first time, and a secret frame that comes with it: two grey 32-bit pads orbiting your inkling. It is not on the badge wall, not in the Mart, and money cannot buy it."],["v0.482","EVERY GAME NOW BRINGS ITS OWN CHECK. Seven of the twelve games had no bespoke pre-flight test — BIT-BRAWL, INK-PUT!, DANCE DANCE INK, INK-TAR HERO, SUPERSTARS, LUMEN INK and BULLET BALLET — and the run said so in its notes every single time since v0.429. They all have one now, and the notes list is empty for the first time. The point of them is the failure the generic sweep cannot see: a game that LOOKS right and cannot be PLAYED. v0.323 shipped a build in which the Crown rival was physically unable to take a shot and it passed every layout check in the game. So each of these presses the same function the D-pad presses and demands the game answer: the right arrow in INK-PUT! must score and the wrong one must not and must cost time; a note sitting exactly on the bar must register and a press with nothing near the bar must not, or mashing would clear the song; all five SUPERSTARS acts must resolve, not only the ones a lucky bag happens to deal; a LUMEN block must steer, must be stopped by both walls and must land on a hard drop, and its cells must be square or the falling block and the settled gems are drawn by two different kinds of maths; BULLET BALLET must put a shot on the field that travels up it, with the pilot inside its own bullet field; and a BIT-BRAWL hand must be four cards with a deploy zone that is a real strip of the battlefield. Each was then deliberately broken to prove it actually fails — a check that cannot fail is not a check. Nothing a player can see has changed in this build; it is the net under every build after it."],["v0.481","THE LINK CABLE, A SKY THAT MOVES, AND A BOARD THAT SITS STILL. Every online match now opens on two Game Boys joined by a link cable — white-on-black neon with Japanese writing, each little screen carrying that player's own inkling — and then the camera dives INTO the wire: a tunnel of neon rings racing past, sparks cracking off the walls and binary streaming down it, before a white-out hands the screen to the game. Solo keeps the burning VS on purpose; a link cable means a real person on the other end of it. CROWN DELUXE PLAYS UNDER A MOVING SKY: the wall behind the table runs a slow ambient day — daylight, sunset, deep night with stars and a moon, a galaxy of nebulae, a stretch of genuinely peculiar psychedelic hours, then sunrise and round again, every four minutes, cross-faded so it is never a cut. The clouds fade out as it gets dark, because a white cloud at midnight reads as a hole in the sky. The table, the rings and every sum behind them are untouched. AND TETR-INK STARTS CLEAN: pressing RETRY used to leave the last game's blocks and the word BURIED sitting there for a beat and then resize the whole board under the countdown, because RETRY went through a different door than the front one — it now wipes every mark the last run left, builds the board held, settles once, locks the size and runs the same 3-2-1 GO over a board that does not move a pixel."],["v0.480","INK PANIK REWARDS THE SAME WAY EVERYTHING ELSE DOES: ONE SPIN, NO SPEECHES. The card-of-the-wave announcement is gone from the start of every fifth stage and the curated booster is gone from the end of it. Clear the wave and the roulette spins, you get a card, you move on — the same wheel Tetr-Ink spins, literally the same function, on Ink Panik's own odds. Those odds are richer at every world, because this is the harder, busier game: at world one it is 11 percent legendary against Tetr-Ink's 9 and 19 epic against 17, and the gap holds all the way up. One thing that had to be carried across rather than deleted with the pack: banking the run's ink and advancing the world were both tangled up inside the booster's code, so tearing that out without moving them would have quietly cost the player their pot and left them replaying the same wave forever. Both verified — the ink banks, the world moves on, and the wheel is the only thing on screen."],["v0.479","INK PANIK PLAYS IN FRONT OF A NIGHT PORT NOW. The green stripes are gone and the STAGE tag has come off the top-right corner, where it was printing the same figure the left column already carries. Behind the board there is a harbour: a lighthouse whose beam sweeps the water and lays a broken stripe of light across it, a skyline where every window keeps its own slow rhythm so somebody is always up, stars that twinkle on their own clocks, the town reflected in wobbling columns, and figures walking the front — some of them the game pieces themselves, straight off the card roster. THE PLACE GETS STRANGER THE DEEPER YOU GO. The palette turns over every stage — dusk, deep night, sodium, a green void, something pink and wrong, and finally black and white — and the glitches thicken with it: slices of the picture slide sideways, the colour separates, scanlines settle over everything, and every so often somebody on the promenade freezes mid-step or is quietly replaced by something else. It is one canvas drawn at 160 by 100 and blown up, which is what makes it read as pixel art and what keeps it cheap on a phone — no images, all of it drawn in code like the rest of the game."],["v0.478","TWO MORE RECORDS, AND THE MIX REBALANCED SO YOU CAN HEAR THEM. TRIALS is the Ink Rink theme and INFLATE is the Ink-Put! theme — six of odaroo's own recordings on the game now, each looping on its own screen. THE SONGS LEAD THE MIX FROM HERE. The effects were drowning them, and the connecting sting worst of all: measured at equal volume settings it was running 2.2 times LOUDER than the music underneath it. Every effect in the game now goes through one trim, and the records were lifted to meet them — that sting is 1.8 times quieter than the bed, a four-fold swing, while ordinary clicks and hits sit seven to twelve times under it, which is what a music-led mix sounds like. Two things had to be caught for that to hold: the zaps and thunder do not go through the ordinary sound path, and neither does the handshake score, which builds its own gain — and that score IS the connecting sting. Trimming only the obvious one would have left the loudest thing in the game untouched. The two figures are deliberately the only numbers involved, so the balance can be nudged by ear on a real phone without touching anything else."],["v0.477","THE ALBUM IS EARNED NOW. A new save starts with NO cards and no deck at all — the eight it used to be handed are gone, so the first pull actually means something. Cards come from playing solo: the wheel comes round every five levels cleared. Tetr-Ink, Ink-Put, Lumen and Bullet Ballet already worked that way (their stages ARE five levels, so their stage-clear wheel is the same rule under another name); Crown Deluxe was the one solo mode with no wheel at all, and it has one now, counting cleared rungs so replaying a level still moves you toward the next spin. CROWN DELUXE SOLO IS SIMPLER: one moving part. Every rung adds a ring and you always get five shots — 1-1 is one ring, 1-2 is two, 2-1 is three, 3-1 is four, 4-1 is five. The old twenty-five-rung table moved both the rings and the allowance and was hard to reason about; this reads off the HUD at a glance and is a plain table to extend. One thing the change caught: with no cards, Bit-Brawl refuses to open (it needs eight) — so the pre-flight silently stopped entering it and still reported clean, eleven games instead of twelve. The harness deals itself a deck before that one screen now, so the coverage hole is closed rather than left to turn up in a screenshot."],["v0.476","THE SOLO TICKER SITS ON THE INKLING ROW. It was pinned full width against the very top edge, above the faces and cutting into the board, and the cause was a missing anchor rather than styling: the strip is placed BETWEEN the two portraits, and in a solo run there is no rival portrait to measure against, so the placement fell through to its last-resort branch. The run clock is what occupies that corner now, so that is what it is measured against — the strip hangs between the inkling and the clock, vertically centred on the faces, below the name strip, with room either side. It is also sized for the gap it lives in: at the username strips size the readout clipped on every rung, so the solo one is smaller and now fits its worst case — stage 5-5 with two-digit counts — with forty-five pixels to spare on the folded phone. On THE RIVAL still showing: that was already fixed and live before this build. Checked on the live site — the top-right carries only the timer and the only name on screen is your own."],["v0.475","A SPEEDRUN CLOCK IN THE SOLO CORNER. There is no rival in a practice run, so the top-right no longer carries a level, a name or a face at all — it carries a classic h:mm:ss timer with your BEST underneath it. The clock starts when you begin stage 1-1 and keeps running across every rung of that sitting, through a stage clear and through a retry, so it times the whole ladder rather than one rack. Clear 5-5 and the run is timed, compared against your best and banked if it beats it — the receipt says RUN 0:01:18 and NEW BEST when it is one. Until a full ladder has been finished the BEST line reads dashes rather than a fake number. The hours never drop off the display, so the box keeps its width as a run passes a minute or an hour and nothing beside it reflows. One thing worth recording: removing the rival's name cell in code did not hold — something rebuilds that bar a beat later, so a per-tick removal and the rebuild simply raced and the corner flickered back. The screen wears a solo class now and the cell is hidden by a rule instead, which cannot lose a race."],["v0.474","CROWN DELUXE SOLO IS A PRACTICE LADDER NOW, NOT A MATCH. No VS screen, no rolled opponent, no coin toss for who breaks — tapping SOLO closes the doorstep and takes you straight to the table with the game's own splash on the way in. What is on that table is a rack of rings and a shot limit. TWENTY-FIVE RUNGS, numbered the way the rest of the game numbers things: STAGE 1-1 through 5-5, five levels to a stage. The stage sets how many rings are on the table — three at stage 1, seven at stage 5 — and every level inside it takes one more shot away, so 1-1 gives you nine shots for three rings and 5-5 gives you nine for seven. Clear the rack and the next rung opens; run out of shots and the rung keeps its place so you can learn it. The rack is laid out differently on every single rung — one wide ring, two nested rings, an arc across the far side or a spiral — chosen by the rung number, so it is the same rack every time you retry it but never the same rack twice in a row. The turn ticker between the inklings is the HUD: STAGE, RINGS LEFT, SHOTS LEFT."],["v0.473","THE SEAGULL IS FINALLY SILENT, AND EVERY FILM STRIP IS THE SAME FILM STRIP. Odaroo could still hear gulls on Crown Deluxe after the ambient sweep, and here is why: Crown has its OWN gull, drawn and voiced by its own draw loop in a different file, with nothing in its name connecting it to the surf that was retired last build. Silencing one soundscape said nothing about the other. It is mute now — the birds still fly, because the ask was to kill the sounds, not the sky. THE TURN TICKER MOVED BETWEEN THE TWO INKLINGS. No more yellow banner across the top: it hangs in the gap between the two faces, on their line, measured off the portraits themselves so it follows the fold. It reads real names now — ODAROOS TURN, MASAS TURN, MASA IS SHOOTING — never a generic your or their. AND THE RECONNECTING AND CONNECTED SIGNS WEAR THE SAME STRIP as the usernames and the ticker: one shared recipe, and all three measured identical on background, border thickness, font size, sprocket pattern and sprocket size. Two CSS traps behind that: a background SHORTHAND silently wipes the perforations a class paints, and the sign had a second rule further down the file quietly winning with a leader twice as thick."],["v0.472","THE RUN BOX GOES ONLINE, AND THE SPLASH STOPS FIGHTING THE COUNTDOWN. An online match now carries the same left-column box as a solo run, minus the stage: SPEED and TIME only, because a match has no 1-1 to be on but how fast the well is going and how long you have been at it are exactly what you want mid-match. The box is rebuilt when the mode changes, so a solo run never inherits a match box with no stage and a match never inherits a stage that means nothing. The clock had to be taught to tick during a match too — it used to stand down, from back when the box did not exist online. AND THE TETR-INK CARD NO LONGER SHARES THE SCREEN WITH THE 3-2-1. The two were counting off different clocks: the splash hands back after 1500ms but does not actually leave the screen until 2150, and the solo entry started counting from its own 470ms timer — so the numbers landed on top of the card. Both paths now ask the screen whether the card has gone rather than trusting any of those numbers. Measured frame by frame: zero overlapping frames, splash out at 2520ms and the count in at 2640."],["v0.471","LOCK DELAY, A LOCKED COUNTDOWN, AND A SNAPPIER WAY IN. TETR-INK HAS LOCK DELAY NOW: a piece that lands does not set for half a second, and sliding or spinning it while it rests buys another moment — up to a dozen, so it can be adjusted but never stalled forever. A hard drop still sets instantly, because that is what a hard drop means, and a soft drop brings the piece down without stealing that split second to place it. NOTHING MOVES UNTIL GO: the board stood still through the 3-2-1 but the controls were still live, so a piece could be slid and dropped before the count finished — which online is a head start over somebody watching the same countdown. Every control is gated now and comes alive on GO. The line-sending tooltip is gone from the board entirely; it belongs in HOW TO PLAY. AND THE ODAROO AND CO INTRO IS HALF THE LENGTH: the logo and the words arrive together on ONE click, one backlit flash, then the title — 1.7 seconds against the old 3.5, with the stack of bulb-flicker tones removed so there is a single sound at the top."],["v0.470","MOON MATHEMATICS, ONE PERSPECTIVE, AND A TURN STRIP AT THE TOP. Odaroo's MOON MATHEMATICS is now the Crown Deluxe theme, looping while you play and handing back at the door. All ambient nature sound is retired with it — the surf and the gulls were playing UNDERNEATH the new recording on exactly that screen, two soundtracks at once. CROWN NO LONGER CHANGES SHAPE WHEN YOU UNFOLD THE PHONE: the tilt was being multiplied by 0.66 on any screen 700px or wider, before a single sum was done, so the unfolded board was drawn from a seat a third flatter than the folded one — that is the stretch. One angle everywhere now; folding only ever scales the board. Measured: tilt 1.02, far-to-near 0.76 and an aspect of 2.543 on BOTH folds, with the unfolded board simply bigger. AND THE TURN TEXT IS A FILM STRIP ON THE TOP EDGE. YOUR TURN, THEIR TURN and THEIR SHOT used to float about 158px down the middle of the field because a build measured the portraits and parked it under them; it is pinned to the very top and runs the full width, which hands 55 pixels of height straight back to the board."],["v0.469","HUD POLISH AND A CLEAN TETR-INK START. The level now reads LV and comes before the name, the same on both sides — LV3 ODAROO on the left, LV5 MASA on the right — and the rival's level was simply missing before, because none of the five games passed one. Tapping the rival's face OR their name opens a small card with their level, cups and how many times they have won the game you are playing; it closes on its own button or on a tap beside it. Two things had quietly broken it: the look-book was throwing away the win figures the room had already sent, so the card always read a dash, and the card named the rival off a Crown-only variable, so in Tetr-Ink they were called RIVAL. TETR-INK ALSO STARTS CLEAN NOW. The word BURIED and the last game's blocks were carried into the next run because nothing ever cleared them — only the well's dead class came off — so a new game is now wiped outright before it draws. And the board no longer moves once you can see it: it is built and measured while the connecting card still covers the screen, then LOCKED, so the four staggered re-fits that used to land at 590 to 1370ms, squarely on the countdown and on GO, cannot twitch it. Measured frame by frame: zero blank frames, zero stale frames the player can see, and one single well size from the first visible frame to play. A real fold still resizes it."],["v0.468","TWO BUGS OFF ODAROO'S RECORDING. FIRST, COMING BACK TO THE GAME NO LONGER DRAGS YOU INTO A MATCH. It was never matchmaking — it was a ghost: the heartbeat starts by itself a few seconds after every load, and the room deliberately holds a match through five minutes of silence so a phone that locks mid-game does not forfeit, so a REFRESH looked exactly like a player coming back and the room handed over the match it was still keeping. Now a match can only be walked into by somebody who asked for one in this session — opened the room, sent a challenge or accepted one — and a match found on the way in is ended rather than joined, which frees the other player too. Closing the game also ends the match at the source now, sent as a beacon so it still arrives after the page is gone. The long grace stays exactly as it was for players who merely go quiet. SECOND, TETR-INK NO LONGER OPENS ON A BLANK ZOOMED SCREEN. The board was being built and measured against a screen that had not been swapped in yet and then re-fitted four times as the real one arrived — that re-fit was the zoom and the wait before it was the blank. The layout is now built, measured and drawn in full first, the 3-2-1 runs over a board that is already there, and only then do the pieces start falling. Solo and online both. The countdown does not count against your run clock."],["v0.467","TWO MORE OF ODAROO'S RECORDINGS, AND A RECORD PLAYER THAT CAN HOLD MORE THAN ONE. TELEGRAPH is the Tetr-Ink theme and ORBIS PARALYSIS is the Ink Panik theme; IGNITION SEQUENCE START stays the main theme across the whole front of house. Each one loops for as long as you stay on its screen and hands over the moment you leave. Underneath, the mp3 side of the music was a single song bolted to the title screen — it is a table now, one line per screen, so giving another game its own tune is one entry and nothing else. It is still ONE audio element, because that is the only thing Android's notification can see, and the notification names whichever record is actually spinning. A screen with no recording of its own still plays its chiptune exactly as before, and the 8-BIT switch still hands every screen back to the band. Both new files are on the room whitelist and pre-cached for offline play. Verified: each track loads and plays through its real front door, the chip stays silent underneath it, the theme resumes rather than restarts on the way back to the boulevard, and both new tracks were played at sixteen times speed to watch them wrap round and keep going."],["v0.466","THE THEME ACTUALLY SHIPS THIS TIME — AND SO WILL EVERY ASSET AFTER IT. v0.465 wired Ignition Sequence Start up correctly and passed every check, and the live site still answered 404 for it, because the deploy's copy list was hand-written and had never included the mp3s: press-start.mp3 only ever reached the server because somebody put it there by hand back in v0.391. A deploy tool whose whole promise is zero chance of stale files cannot have a list that a new asset must be remembered into. The copy list is derived from the room's own whitelist now, so whatever the server promises to hand out is exactly what gets shipped, and anything on the whitelist that is missing from disk is called out by name. Odaroo's new theme is genuinely live."],["v0.465","ODAROO'S NEW TRACK IS THE THEME. Ignition Sequence Start is now the tune that plays on the title screen and right across the front of house — the boulevard, the album, the mart, the profile and the gigs wall — on a loop, handing over to each game's own band at the door and picking up where it parked when you come back out. The file is renamed ignition.mp3 and sits at the root with the rest of the served assets, it is whitelisted on the room server, and the service worker pre-caches it so it plays with no signal and never flashes the browser up mid-song. The cache-buster is bumped with it, which is the whole reason that rule exists: without it every phone would keep playing the old tune for a week. The Android media notification names the real track now instead of a generic Inkville Theme. Verified end to end: the server hands it out as audio/mpeg, it loads to 116 seconds, and it genuinely loops — played at sixteen times speed it ran to 113 seconds, wrapped round to the start and kept going without ever firing an end."],["v0.464","THE RUN BOX READS PROPERLY ON THE FOLDED PHONE. Stage, speed and time were laid out as label-beside-value, which asked a word and a number to share an 82px column — STAGE broke across two lines as 1- and 1, and SPEED and TIME were cut off. Each figure now sits under its own label with the full width of the box to itself, the same way on both folds. Sized against the LONGEST value each one can ever show rather than a fresh run, and the clock rolls over to 1h40 past an hour instead of 100:11, so nothing clips even after a ninety-nine hour session. Folding the phone mid-game was tested for real this time, in both directions and eight times over: the well resizes 26 to 32 and back, the clock carries straight on, the piece keeps falling, the score and stage survive, and nothing overlaps. That test found something the pre-flight cannot see — v0.463's bigger unfolded column ended 19 pixels UNDER the D-pad, because the playfield rules watch the well and not the column beside it. The column is sized to end well clear of the controls now."],["v0.463","TETR-INK'S RUN BOX AND ONE PLAYER HUD FOR EVERY GAME. The STAGE 1-1 tag is off the top-right corner; stage, speed and a running clock now sit together in a box under NEXT and HOLD, and on the unfolded screen the whole left column doubles in width so the previews and the figures are big instead of leaving that space blank. The clock counts time actually PLAYED — it stops while the pause menu is up. AND THE PLAYER HUD IS THE SAME EVERYWHERE NOW: your name and your level on one line, your inkling directly underneath, at one standard size in solo and online alike. Solo used to show a bare face with no name at all, at whatever size that screen happened to say — 62px on Crown, 80px on the rhythm games, 46px only during a match. Online adds the rival on the right at that same size, and their face is tappable for a small card with their level, cups and how many times they have won the game you are playing. One honest note: the unfolded well could not be made bigger. Measured, it already uses 582 of the 592 pixels between the top of the screen and the D-pad, so the space either side of it is what a ten-wide upright well leaves on a short wide screen — the column now uses it instead."],["v0.462","THREE FIXES. TETR-INK's NEXT and HOLD are bigger and stacked one above the other instead of squashed side by side, and the piece inside each one is now genuinely centred — it never was: the old code centred the piece against its rotation grid rather than against the piece, so an I-piece sat low and a J sat low-left. Every one of the seven shapes now lands dead centre and grows with the box, on both folds and in the online column too. THE PAUSE MENU'S HOME BUTTON just says HOME; the forfeit price moved onto the confirmation where it is answered, as a big red -15 beside the cup rather than a figure buried in brackets, and it only appears when there is really a match to give up. AND THE MENU NO LONGER FLASHES ON THE WAY INTO AN ONLINE MATCH: every online game closed the room pop-up first and changed screen afterwards, so the boulevard was uncovered and the game's splash played over the top of it. The screen now changes underneath the connecting card and the card comes off after, so it goes VS to splash to 3-2-1-GO to play with the menu never once visible. All five online games take the same door."],["v0.461","THE CHALLENGE CONFIRMATION NO LONGER TAPS THROUGH TO THE ROSTER. Pressing YES or CANCEL was also pressing whichever player card happened to sit underneath the button — which is how a challenge aimed at one player went to somebody else, and how the same player got challenged twice into an already-in-a-match error. The cause was that those two buttons fired the instant a finger touched them AND removed themselves at the same moment, so the browser delivered the rest of the tap to whatever had just been uncovered. They now act on the completed tap instead, the whole roster is switched off while the question is up, and the overlay leaves an invisible shield behind for a fraction of a second to swallow anything still in flight. Mashing YES four times now sends exactly one challenge, and a tap beside the card cancels without closing the room."],["v0.460","THE LOBBY IS JUST FACES AND NAMES NOW. Every CHALLENGE button is gone and so is every status word — no more AVAILABLE, IN GAME or IN MINI-GAME written beside anybody. What is left is a face with a small dot on its corner: green means they are here and free, amber means you have already asked them, dull red means they are in a match. Tap anyone with a green dot and a short SEND CHALLENGE? blurb asks YES or CANCEL before anything is sent, because a whole card is a much easier thing to press by accident than a button was. Tapping somebody who is busy does nothing at all — those cards carry no handler rather than failing at you. Your own row keeps its record card. Checked on both fold sizes."],["v0.459","THE BOULEVARD ONLY SHOWS WHAT YOU HAVE EARNED, PLUS THE NEXT ONE. Games you have unlocked, the single next stage so you know what you are working toward, and BIT-BRAWL — and nothing else exists on the carousel until you get there. This was meant to be true already, and mostly was, but there was a hole: the bill was showing anything you could AFFORD rather than anything you had actually unlocked, so a player who banked cups without tapping the tiles to break the chains saw the whole rest of the ladder at once — at 400 cups with nothing broken, all nine games were on the carousel. Visibility now walks the ladder in order and asks whether a game is genuinely open, so the acts are revealed strictly one at a time. It also no longer depends on the cup prices happening to ascend in the same order Odaroo set."],["v0.458","THE UNLOCK ORDER IS REBUILT. TETR-INK is now the free game you start with, and the ladder climbs Ink Panik 50, Superstars 100, Ink-Put! 150, Ink Rink 200, Bullet Ballet 250, Dance Dance Ink 300, Ink-Tar Hero 350, Lumen Ink 400 — and then BIT-BRAWL, which is no longer the first free game but the LAST one, the vault at the end. It cannot be bought with cups at any price: it opens only once every other game is unlocked, and until then you are told nothing about it at all — its cabinet shows a question mark, its name reads ??? and the lock says UNLOCK ALL GAMES BEFORE UNLOCKING THIS ONE. Once it is open it stays open even if you spend back down. Underneath, the order now lives in ONE table in the code that the carousel, the gates, the Deck-a-thon and the profile all read from, instead of the four hand-copied lists that used to have to agree — so the next reorder is one edit. The player guide has been rewritten to match, cabinets and ladder both."],["v0.457","PROFILE — the sun is gone and so are the losses. The redesigned sun has been deleted outright, sprite and all, and the profile sky is clouds only again. Losses are off the whole profile: the top-level record now reads MATCHES and WINS with no loss line, and each card in the arcade log shows only WINS, BEST and TIME. They are not merely hidden — the game stops counting them, so nothing is quietly ticking up behind the screen. BEST INK is now just BEST wherever it appeared, on the profile and on the Tetr-Ink game-over receipt, because ink is the only score there is."],["v0.456","PROFILE — three fixes. The header bar (BACK / PROFILE / プロフィール) now SCROLLS with the page like the Album's and the Mart's instead of hanging there stuck to the top, and there is proper daylight between it and the STATS / STYLE / D-PAD tabs. The little pixel sun in the sky has been redrawn from scratch as a proper 1930s rubberhose character: 64x64 instead of 12x12, an eight-point tapering starburst, black pie-eyes with the classic wedge cut out and a shine, heavy brows, rosy cheeks and a big open smile with teeth and a tongue, all outlined in black and drawn procedurally in JS the way the rest of the art is. And the background parade no longer restarts when you switch tabs: the sky, the sun and the marching pieces are now written ONCE into their own layer that a tab press never touches, so the walk is genuinely continuous across STATS, STYLE and D-PAD."],["v0.455","ANDROID MEDIA NOTIFICATION + BACKGROUND MUSIC. The notification Android draws while Inkville is singing is now Inkville own artwork: the game home-screen icon instead of the Chrome one, the name of the tune actually playing, and PLAY/PAUSE buttons that go through the game own music router (the dead skip/seek buttons are cleared away). The record no longer stops when you minimise the app - the chiptune band still stands down while the app is buried (its timers are throttled to a crawl, so it would only stutter) but the theme is a real audio element and keeps playing, and coming back resumes anything Android paused behind our back, via visibilitychange, pageshow and focus. The icons, the manifest and the mp3 are all pre-cached and served from the app own storage now, so starting a song asks the network for nothing at all - which is what was making Chrome flash up."],["v0.454","TEN ITEMS IN ONE SHIP. THE SOLO BUTTON WALKS A TRAIL: pixel trees, cactuses and grass drift past on the SOLO button of every pre-game door, the way ONLINE drifts clouds - two parallax layers, one inline tile, no extra DOM. THE SOLO VS SCREEN IS ONLY FOR GAMES THAT ARE HEAD-TO-HEAD: pressing SOLO on Tetr-Ink met JADE.DASH and then played a score attack against nobody; Crown, the brawl and the rink keep their rival card, the eight arcade games go straight in, classic arcade. TETR-INK: the game-over receipt stacks one figure a line with BEST INK, BEST TIME and BEST LINES under it, instead of cramming STAGE 1-1 0 LINES TIME 0:27 onto one line that broke; and holding DOWN now soft-drops - a tap is still one cell, a hold accelerates after a beat, UP is still the hard drop. THE PROFILE: no win-rate or loss-rate percentages anywhere, the CONFIDENTIAL stamp is gone and the header reads ODAROO and CO. PLAYER with your own number and no longer clips, and the favourite game section is off the file pending its rework. THE LOBBY: baby-blue sky with drifting clouds and bright cream cards instead of dark purple, ONE universal heading - ONLINE LOBBY - for every game, ONLINE instead of HERE, player cards cut to name, level, cups and wins, MASA redesigned in mint with a cape, flower and boots, and a new permanent GUEST who is always mid-test and cannot be challenged. A ghost on the roster can no longer outstay its welcome: the five-minute grace for a quiet player now requires a match that actually exists. OPTIONS keeps every button inside its card on the unfolded screen and the dead TUTORIAL button is gone. THE CONNECTION SIGN is a proper film splice: twice the leader, the stray red side borders removed, RECONNECTING pulsing once a second, CONNECTED inverting to black-on-white and gone in half the time. THE VS SCREEN lost its baby-blue frame, MATCH FOUND lands without moving a pixel, and no game name is repeated during the handshake. ONLINE TETR-INK: the rival preview updates five times a second instead of under two, and your own well is now the exact same size online as it is solo - it was losing 42px of column and a 76px top inset to the match."],["v0.453","THE PLAYFIELDS THAT WERE NEVER CHECKED. The pre-flight has been passing clean while quietly skipping half the games. INK_FIELD - the registry that tells the master scale resolver which box each game actually plays in - had an entry for Bit-Brawl filed under the wrong name and pointing at an element that has never existed, and entries for Ink Panik and Lumen Ink whose selectors matched nothing at all. Six more games had no entry. So the rules Odaroo asked for (fill the space between the HUD and the D-pad, unfolding zooms IN) were being enforced on four screens out of twelve, and the other eight looked exactly like a pass. Every game is registered now, a selector that matches nothing is a FAULT rather than silence, and a key that names no game fails the build. What that uncovered, and what is fixed: Ink-Tar Hero, Dance Dance Ink, Ink-Put and Superstars all pinned their playfield to a flat pixel width, so unfolding the Fold drew the same small highway with 500px of empty screen either side - the highway now goes 35 to 85 percent of the width, Dance Dance 33 to 80, Ink-Put 38 to 74, and the folded layout is untouched. Bullet Ballet ran its bullet field the full height of the screen, so the bottom third - where your ship lives - was behind the controls. The Bit-Brawl arena floor sat under the controls too; that is the 30px overrun carried as a known fault since v0.423, and it is closed. Both folds pass with all twelve games genuinely checked."],["v0.452","THE PROFILE AND THE ALBUM. PROFILE: the stats have room to breathe — 'BEST INK 140TIME 5m' was two cells sharing a 74px column with no gutter, so the eye read one run-on string; each figure now sits in its own tinted box with a real gutter, and there is air between every line and every section. The header bar is thick and weighted like the Mart's and the Album's instead of a thin strip. The file scrolls fully clear of the D-pad, so FAVOURITE GAME is no longer underneath it. THE INKLING IS OFF THE STYLE AND D-PAD TABS — it was squeezing the name to 'ODARO' and taking a third of the width from a rack of clothes that wants all of it; it is one tap away on STATS, so showing it three times bought nothing, and both tabs now use the full width. THE PARADE WALKS instead of hopping: the keyframes stepped the sprites up and down 6px at every tenth of the loop, which on a linear timing function is a jerk rather than a bounce — that is the 'characters teleporting' Odaroo saw. And the parade is now built ONCE and the field element itself is carried across a tab switch, so STATS, STYLE and D-PAD show one continuous background that never restarts. ALBUM: the backdrop pattern behind the cards is gone — a wall of small art is the one thing this screen is for. LEVEL UP ALL only appears when something is actually ready, and it carries the same red count badge the gigs bar wears. And the shelf can be ordered: BEST (level, then rarity, then cost), RARITY, A-Z, plus a READY filter that appears only when there are cards to level and shows just those. Owned cards always sort above the silhouettes you have not found yet, whatever the order."],["v0.451","INK RINK — THE BOTS PLAY AGAIN, AND THE HUD IS THE ONE ODAROO DREW. ⚠ THE GAME-BREAKER FIRST: MASA and MUNE stood still on their own turn until the clock ran out and the match hung. The cause was rkBotDial() — the table holding each bot's speed and how often it settles for the second-best move. It was deleted in v0.444 when the ghost skater replaced the old bot, but rkGhostSkate still calls it on its FIRST line, so it threw a ReferenceError every single time — and the call is wrapped in a try/catch, so nothing was logged, nothing was scheduled, and the bot simply never moved. Restored, and the pre-flight now hands the ghost a real bot's turn and proves it takes a real move; every check before this drove the RESULT (rkOppCleared) rather than the thing that produces it, which is exactly how this survived three builds. A second fault fell out of the same session: a clock interval reads the CURRENT match, not the one it was started for, so a match replaced without being stopped left its tick burning the NEW match's seconds — a fresh 30-second match opened reading 0.0. Every clock is now stamped with its own match and dies on its next beat if that match is gone. THE LAYOUT: the timer moved down under the inkling where it belongs (name strip → inkling → timer → floor), and the TIME box on the ice is gone entirely — the two clocks under the two inklings are the only timers now. The rock count is gone; the floor number is the whole HUD, because the trajectory is the player's to discover. The RIVAL now appears top-right in solo and online alike — their name on a film strip, their inkling under it, their clock under that — which was missing because the rink never built a foe portrait at all. And YOUR TURN / THEIR TURN is a film reel centred between the two names. ⚠ The root cause of the overlapping timer: the rink mounts its inkling INSIDE #rkInk, so every ':scope >' portrait lookup in the shared VS layout missed it and the indicator slot fell back to a seeded offset — on top of the inkling's face."],["v0.450","THE MASTER SCALE RESOLVER — one answer to how big things are, for every game. inkStage() is now the single authority on the rectangle a playfield may use: it measures the real top HUD, the real top of the D-pad and the phone's own safe-area insets, knows whether it is running installed or in a browser tab, and reports that band plus a zoom factor taken against the folded Fold 6 (375x812) as the reference. The zoom is MONOTONIC by construction — the smaller of the two ratios, floored at 1 — so unfolding can only ever make the picture bigger, which is the zoom philosophy written as arithmetic rather than as an intention. It is cached on a signature built from the viewport, the fold, the insets and the pad, and nothing a word on screen can change, so asking it forty times a second while a message updates returns the same object: the whole class of zoom-flicker bug is now unavailable rather than merely fixed. Crown and the rink take their band from it. AND THE PRE-FLIGHT ENFORCES IT: every game with a registered playfield is checked at BOTH fold sizes for filling the room it has, staying inside the stage, not sharing pixels with the top HUD, and not re-scaling when content changes. It found two real faults on the way in — the rink was starting its ice 8px from the top, measured off a wordmark that has emitted nothing since v0.424, so it ran under its own HUD on the folded phone. Games with no playfield registered are NAMED every run so the gap cannot go quiet. PWA: installed, the system bars get their real room (the 16px cap on the bottom inset is a browser-tab compromise, lifted in standalone, and the app now starts below the status bar). AUDIO: the service worker only ever answered for js/css/data, so every mp3 went to the network — which is the Chrome flash Odaroo saw when a song started. Audio is pre-cached on install and served cache-first, matched with the query ignored. BACK BUTTON: it now walks BACKWARDS through the game — dialog, pause menu, doorstep, boulevard, title — with one spare history entry re-parked synchronously on every press, so Android never sees one it can turn into 'close the app'. Only the title screen offers to leave, and only a deliberate yes actually goes."],["v0.449","THE POLISH BATCH — the turn reel, the seagulls, the badges and the connection sign. (12) YOUR TURN / THEIR TURN is now a short film reel at the top centre, dressed in the same sprocket-hole strip as the two username tags, and the rival's name has come OUT of it — repeating a name that is already on their own corner strip is what made the bar long enough to collide with them. (13) THE BIRDS ARE SEAGULLS NOW: drawn about three times the size (they read as fruit flies on a phone at the old size), shaped like a gull with a body, a head, a beak and two beating swept wings, and they fly BOTTOM TO TOP so the whole scene reads as rising. Each pass calls once — a thin two-note cry through the game's own sound bus, so the mute setting owns it like everything else. (14) ACHIEVEMENTS LAND IN THE MOMENT: they were already firing during play, but a queue of more than three collapsed into a single '+N MORE BADGES' card and the gap between them was three and a half seconds. The collapse is now reserved for the one case it was written for — an old save meeting the badge wall for the first time — and anything a run can earn is shown properly, one at a time, with the full celebration: the screen glitches the way a cheat code does and the badge throws sparks. (15) ONE CONNECTION SIGN, and it is a film reel in the middle of the screen: RECONNECTING with three cycling dots while the game stays fully visible and playable underneath it, then CONNECTED for a moment before it fades. Going online for the first time says CONNECTED too, never 'back online'. The faint line of text at the top and the BACK ONLINE toast are both gone — there is exactly one indicator now."],["v0.448","INK RINK ROYALE, STRIPPED BACK — and one VS layout for every game. THE RINK: the whole left-hand panel is deleted (VS name, SKATE!, the timer box, the floor counts, the mini map, the CLEAR/WIN text, the instructions), the par stat is gone from the game, and there is no three-second look at the floor before it starts. What is left is what Odaroo asked for: ONE field filling the screen, players taking TURNS, a clock each of thirty seconds that only runs on your own turn, and the first player to run out breaks through the ice and loses. Between floors a 3-2-1 box counts over a COVERED floor — the ice is revealed and the clock starts on the same frame, so the map can never be studied. The HUD is two numbers, FLOOR and ROCKS. THE UNIVERSAL VS HUD: every VS game now uses the same corner stack, built once and reused — film-strip name on top, the inkling under it, and a game-specific indicator slot under that. The rink puts its clock in the slot (bigger and beating on your turn, red and bigger again under ten seconds); Crown Deluxe puts its colour coin there. Tetr-Ink and Ink Panik already worked this way; Crown, the rink and Bit-Brawl have been brought onto it. AND: pressing BACK on a pre-game doorstep no longer plays the ink wipe to arrive back at the menu it was already sitting on top of — a transition to the screen you are already on is a no-op everywhere in the game now, which covers all eleven doorsteps at once."],["v0.447","SEVEN FIXES FROM ODAROO'S SCREENSHOTS. (1) THE CROWN TABLE FILLS THE UNFOLDED SCREEN — it was 51% of the width, marooned in the middle, because the fit took its scale from the HEIGHT first and left 400px of glass unused either side. On a wide screen it now takes the WIDTH first and lays the table back until it fits the band, so the felt runs edge to edge between the portraits and the D-pad: 466px wide before, 879px now. The folded phone is untouched, pixel for pixel. (2) THE ZOOM FLICKER IS GONE — the table used to re-solve itself whenever the words changed, so it jumped every time it said YOUR TURN; the message plate and the turn banner are now fixed bands and the geometry never hears about text at all. (3) THE PAUSE MENU is HOME / HOW TO PLAY / OPTIONS / CANCEL, four buttons of one size, and HOW TO PLAY is one rules card with a BACK that returns to the pause menu — the old menu-inside-a-menu and its dead TUTORIAL button are gone. (4) THE ONLINE BUTTON AND THE ROOM wear a baby blue sky with pixel clouds drifting across them. (5) SOLO GETS A VS CARD — your inkling against a rival rolled on the spot, its own colours, gear and gamertag, then the same burning VS the online match falls through. (6) NO ZOMBIE MATCHES — one teardown now ends every match, and it runs on the way IN to every SOLO and ONLINE start as well as on the way out, so leaving a bot match and pressing SOLO can never resume it. (7) THE VICTORY CARD'S HOME BUTTON is no longer under the D-pad, and the D-pad works on it: the save and share icons were <button>s sitting first in the card, so the pad's cursor started on SAVE and A quietly saved a PNG instead of pressing HOME. ⚠ The pre-flight was hiding all of this: every clearance check skips itself when the D-pad cannot be measured, and a harness never runs the boot, so the pad was display:none and half the suite was theatre. inkSelfTest() now forces the controls on and FAILS if it still cannot see them. Same for CSS: ?dev only ever cache-busted the scripts, so a layout fix could read back as its old value."],["v0.446","DECK-A-THON — the ultimate mode. It opens only when every game on the boulevard is already unlocked, and then it is ten games back to back in a shuffled order: Bit-Brawl, the rink and the eight behind the cup gates. Every round is won or lost by one rule — you take the round if the run is a WIN, or if it pays out more ink than that round's target, which is set off your own personal best at that game. Six rounds takes it and ends it early; five all goes to a SHUFFLE, one game drawn at random, sudden death for the whole thing. The winner takes GLITCH CUPS, a currency won nowhere else, and a ten-nil sweep pays double. It scores through the games' own doors rather than reimplementing any of them, so a game added later joins the gauntlet simply by being listed — and it brings its own pre-flight check, dkSelfTest(), which now runs inside inkSelfTest() alongside the eleven."],["v0.445","UNFOLDING NOW ZOOMS IN. Odaroo's note — opening the phone should show the SAME view bigger, not pull the camera back — turned out to be literally true of the rink: it dealt a 17-row board folded and a 16-row board unfolded, so opening the phone gave you a different, wider rink seen from further away. The ice is now ONE shape on every screen (9 x 13) and the extra room only ever buys a BIGGER CELL — 30px folded, 52px unfolded, same board. That also closes a real Rink Royale bug: a folded player and an unfolded player were being dealt genuinely different ice from the same seed. Tetr-Ink, Ink Panik and Lumen already worked this way, so they are untouched. Also: a D-pad that measures nothing is no longer treated as a D-pad sitting at the top of the screen, which used to squeeze the rink to its minimum size in testing, and the rink's pre-flight now routes itself with the game's own solver instead of a greedy walker that could circle a floor forever."],["v0.444","RINK ROYALE REBUILT — the shared clock is gone. In an online Ink Rink match you now each get your OWN floor of the same ice at the same time, with your OWN clock, and the first player whose clock runs out breaks through the ice and loses. Every floor is tighter than the last (22 seconds on floor one, a second and a half off each floor after it, never below nine), and between floors a three-second 3-2-1-GO count lets you both read the ice before either clock starts. You watch your rival skate their floor LIVE on a small board in the left column beside your own, so you never have to look away from your own ice to see how close they are. MASA and MUNE now skate their own floor properly too — same slide rules, same solver, same clock — so a bot can break the ice and lose."],["v0.443","TAP SOMEBODY'S INKLING IN THE ROOM AND SEE WHO THEY ARE. THE PLAYER CARD. Odaroo asked for the record behind the face: how often they win, how often they lose, how many wins they have, and what they play most. Tapping any inkling on the roster — including your own — opens it. It costs no extra request: the record now travels WITH the look that already crosses the wire for the colour and the gear, so the card is already in hand by the time the face is on screen. Every figure on it is somebody else's data, so the name and the favourite game go on with textContent and never as markup, and the numbers are read as numbers and clamped at the room's door like everything else. A FAVOURITE GAME, SET IN YOUR PROFILE. It is a new section in the player file rather than a setting buried somewhere, because it is one of the things that describes you to other people rather than a preference about how the game behaves. Eleven games to choose from, one tap to change it, and it can be cleared again. Somebody who has not picked one reads NOT SET; on your OWN card it says so and tells you where to choose. Checked the whole path in one pass: the picker offers all eleven, choosing one saves it and the profile updates, the record and the choice both appear in what goes over the wire, and a card built from a rival's data shows the right win rate, the right counts and the right game. Both fold sizes clean through the headless harness."],["v0.442","EVERY GAME NOW OPENS THE SAME WAY, AND ONLINE IS BABY BLUE. ONE DOORSTEP, ELEVEN GAMES. Four games had a pre-game box and they were four copies of the same twenty lines; the other seven walked straight in with no choice at all. There is one door now — the game's name, then SOLO, ONLINE and BACK — and every game uses it. The reason the four copies had already drifted apart is the reason this matters: three different heading colours and two different handlers for the same shape of game, because they were copies rather than one thing. Adding a game to the bill is one line here, which is what DECK-A-THON will need. THE INKLING-VERSUS-QUESTION-MARK STAGE IS GONE, on Odaroo's word, and it is deleted rather than restyled. It promised an opponent before there was one, it took up most of the box to say nothing, and on the folded phone it pushed the three buttons — the entire point of the screen — down toward the controls. What is left is the choice. ONLINE IS BABY BLUE. The navy read as a second BACK sitting next to the black one; online is the invitation on this screen, not the sober option. THE SIX GAMES THAT HAVE NO ROOM YET SAY SO. Five games have a wire protocol and six do not, and the honest thing on a button is the truth: those six show ONLINE · SOON, in a paler blue, and tell you plainly that solo is the way in for now rather than looking live and doing nothing when pressed. Building the remaining six protocols is the next piece of work, and the door they will hang off is now in place. Checked: all eleven doorsteps carry exactly SOLO, ONLINE and BACK, none of them still has the versus stage, every one of them fits inside the window, and every SOLO button lands on its own game — measured by pressing each of the eleven in turn. Both fold sizes clean through the headless harness, which also played all eleven games and challenged both bots at all five online modes."],["v0.441","THE GAME NOW TESTS ITSELF IN A REAL BROWSER, UNATTENDED, AT BOTH FOLD SIZES. Two scripts — one folded, one unfolded — open a headless Chrome, load the game, run the full pre-flight, PLAY every one of the eleven modes through the real controls, challenge both bots at all five online games through the real room, and report anything that breaks to the error endpoint. They exit clean or dirty, so a scheduled task or the deploy itself can gate on them. ⚠ THEY USE NO PACKAGES, and that was a deliberate choice rather than a shortcut. Puppeteer would do this in twenty lines and would also drag npm and a second copy of Chromium into a project whose first rule is that it has no dependencies and no build step. Node already ships a websocket client and Chrome already speaks the debugging protocol over one — which is all Puppeteer is a wrapper around. So the scripts talk to the browser directly: nothing to install, nothing to keep updated, and they drive the Chrome that is already on the machine. IT EARNED ITS KEEP ON THE FIRST RUN. It immediately found something months of testing in the ordinary preview browser never had: Superstars' cue line — the one that names the stage, MEGATON PUNCH or SAMURAI INK — running off both edges of a folded phone. The preview browser had never caught it because it does not emulate a handset the way a real one reports itself. The cue now scales with the screen, and is capped so that even the 1.3x celebration pop it plays on every stage still lands inside the glass: cap the rest state FOR the pop, not for the rest state. TWO OF MY OWN CORRECTIONS ARE WRITTEN INTO THE CHECK, because both were wrong in instructive ways. A box measured mid-animation reports the size it is momentarily scaled to, so the first attempt stripped transforms off before measuring — which promptly reported eleven MORE false faults, because half this game's centred elements are positioned with a translate and measuring them without it puts every single one off the right-hand edge. The rect is right about centring and only misleading while something is animating, so that is the only case it now skips. AND THE HARNESS HAD TO LEARN TO TIDY UP AFTER ITSELF: the first online pass challenged the same bot five times and read four correct refusals as four failures, because it had left the bot in the match it had just started."],["v0.440","EVERY ONLINE MATCH ANNOUNCES ITSELF NOW, AND THE COIN LANDS ON THE TABLE. THE SPLASH CARD FOR ALL FIVE ONLINE GAMES. Every solo game opens with its name — the checkered flags either side, the English title, the Japanese underneath — and not one of the five online games did. The reason is worth writing down because it looked like an oversight and was not: the card is fired by the function that CHANGES screen, and an online match never changes screen at that moment. The connecting screen is already the game's own screen, so by the time the match begins the game is looking at the screen it is already on, decides nothing has changed, and says nothing. All five now show the card FIRST and set the match up afterwards — Crown Deluxe, Bit-Brawl, Tetr-Ink, Ink Panik and the rink — through one shared door rather than five copies of the same idea. The card is marked on the MATCH rather than on the game, so it cannot leak between matches or swallow the announcement on a rematch, and if the card ever fails to draw the match still starts: an entrance is not worth a game that will not begin. AND THE TOSS LANDS ON THE CENTRE SPOT. Odaroo asked for the coin to sit exactly where the red ring is drawn in the middle of the felt, rather than floating over the table. It does — and it is put there by projecting the middle of the board through the same camera the board itself is drawn with, rather than by guessing at pixels. That is the part that matters: the coin is anchored to a place on the TABLE, not to a place on the glass, so it sits on the ring at both fold sizes and would follow the camera if the camera ever moved again. Measured on the unfolded screen it lands nought pixels from the centre spot, and on the folded one, one. If the table's geometry has not settled at the moment of the toss it simply keeps its old centred position — a coin in the middle of the screen is a perfectly good fallback, and an exception is not. Both folds clean, eleven games, no excused faults."],["v0.439","THE TWO DOCUMENTS UPDATE THEMSELVES FROM NOW ON. Odaroo asked for the player's guide and the audit page to be brought up to date with every deploy. Asking a person to remember that is the same mistake as the cache-buster nobody bumped and the lobby file left behind, so it is not a person's job any more: the deploy writes them. THE BUILD PRESS IS CURRENT. Every build from v0.426 to this one is now in the guide, newest on top, each one boiled down to a sentence or two from the full entry that scrolls in the game's own credits. The version stamps across the page, the range in the heading and the running total all move on their own. The credits reel is written in shouting capitals because it scrolls like film titles; the guide is something you sit and read, so the shouting is brought down to ordinary prose on the way in — carefully, because the obvious way to do that capitalises every word and turns the whole thing into Title Case, which reads worse than the shouting did. AND THE AUDIT PAGE NOW SAYS WHAT WAS ACTUALLY DONE. It was a list of suggestions with no way to tell which had been acted on, and a suggestion list nobody ever marks off stops being a plan and becomes wallpaper. Seven of them are now marked green with what each one actually bought: the one-file monolith is gone (the largest file is 3,724 lines instead of 22,765, and the split was proved byte-for-byte identical before it shipped); the manual deploy is one command with seven gates; eyeball-only testing is a pre-flight that walks all eleven games at both fold sizes and currently carries no excused faults at all; the service worker, the analytics, the error reporting and the sharing card are all live. An eighth entry records two things that were never on the list but were asked for and built — save-and-reload during local work, and the changelog and card roster moving out of the code into data files, which took two hundred and forty-three kilobytes of prose out of a file that had no business holding it. One item is left standing as advice rather than work: design chat once on paper before building it again. The audit page is also SERVED now — it was sitting in the folder unreachable, so the one page describing the project's health was the one page nobody could open. Both folds clean, eleven games, no excused faults."],["v0.438","FOLDING THE PHONE RE-LAYS THE GAME OUT, AND BOTH FIGHTERS NOW START ON THE SAME FRAME. THE FOLD. Odaroo: closing and opening the Fold left things lost, misaligned, or stuck at the old size. The cause was not that resize was being ignored — a dozen screens listened for it — but that they listened PIECEMEAL: whoever had remembered to add a listener re-fitted, and everyone else kept the layout they were built with, so half the game moved to the new screen and half stayed behind. There is now ONE place that knows what to re-measure for whichever screen is actually up, and every screen is named in it — including the ones with nothing to do, which say so out loud instead of by omission. ⚠⚠ AND IT DOES NOT TRUST THE RESIZE EVENT, which is the part worth writing down. Measured while building this: the browser the game is tested in changes its viewport from 375 to 906 and dispatches NO resize event at all — not the window's, not the visual viewport's. The width simply becomes a different number. If a browser can do that on a desk it can do it on a hinge, and a game that only re-lays out when it is TOLD to would come out of the fold wrong on that device with no way back short of a restart. So the size is watched as well as listened for: one comparison a second on a heartbeat that already runs. Proved by folding with the event firing zero times — Tetr-Ink went from thirty-two-pixel tiles to twenty-six and back again, square, inside the width, clear of the controls, without a reload or leaving the screen. TWO EARLIER ATTEMPTS AT THIS WERE WRONG AND BOTH ARE WRITTEN DOWN: the guard recorded the screen size BEFORE re-fitting the app box, so the follow-up pass — the only one that could have measured against the corrected box — saw an unchanged size and returned immediately, and the well came out of a fold still wearing its unfolded tile size, squashed. It measures the window now, which owes nothing to our own layout. AND THE ENEMY NO LONGER MOVES FIRST. Odaroo: the rival places a card before the player. It did, and it was two numbers that had drifted apart. The curtain-raiser runs WARNING for two seconds then BATTLE START for another one and seven tenths, with the screen covered throughout — and the freeze that holds the match was set to two point three. So the match went live while BATTLE START still covered the field: the player had nothing they could see to tap, and the rival, which needs no eyes, took its turn into a screen the player could not act on. The freeze is now DERIVED from the banners rather than guessed alongside them, so they cannot drift again. Measured across the whole announcement: the rival's energy moved by zero, the player's moved by zero, the rival's timer moved by zero, and after the release both accrue together. The two banners also no longer share the screen for even a frame. Both folds clean."],["v0.437","THE D-PAD WAS NEVER GONE AFTER A WIN — IT WAS INVISIBLE, AND THE BOTS NEVER QUIT. THE CONTROLS ON A VICTORY SCREEN. Odaroo reported the D-pad missing after a win, with no way to navigate off the screen. It was there the whole time, on top of the dialog and perfectly tappable — but a victory lays an eighty-per-cent black curtain over the screen, and the pad at the player's default half strength over that curtain is very nearly nothing. You cannot aim at what you cannot see. Its brightness now has a floor whenever any dialog is open, exactly as it already did in the Crown Deluxe room where it was disappearing against the dark felt — same fault, same answer — and it drops back to the player's own setting the moment the dialog closes. A second bug fell out of writing it: the re-assert ran BEFORE the dialog was marked open, so the rule could never have seen it. AND THE BOTS ARE NOT QUITTERS. This one was a false accusation with a real cause. MASA and MUNE cannot walk out — they have no button to press — but the room forfeits whichever side has gone QUIET, so when the player's own phone locks or their signal dips for a moment, the room correctly hands the win to the bot, and the message on the way out said 'MASA LEFT THE BRAWL'. It blamed the opponent every single time, without ever checking who had actually gone. It reads the winner now and says the true thing. Belt and braces on the room's side too: a bot is never counted as missing, so a bot match can only ever end by being played out. MASA is labelled MEDIUM and MUNE HARD, per Odaroo. THE VICTORY BOX FITS THE FOLDED PHONE. The stage-clear dialog was drawn at one size on both screens and the narrow one does not have the room — BACK TO THE MENU hung off the bottom edge. Nothing is removed; on a short screen the slam, the receipt and the spacing all tighten so the whole thing lands inside the frame. Keyed off HEIGHT, because it is vertical room that runs out. TWO ICONS ON A WIN, beside the continue button rather than instead of it: a download that always saves the card, and a share that hands it to the phone's own sheet. They used to be one button that guessed, which meant SHARE silently did a download on any desktop. THE BADGE ALBUM LOOKS LIKE AN ALBUM. The achievement cards were big enough that a handful filled the screen; they are now the medals themselves, tiled tight — fifty-eight on a page instead of a few — and every word that was printed on a card moved into the tap that already opened it. A CLAIM ALL button pays every waiting badge at once instead of making you hunt each gold one. The count on the tab was half inside its own button and clipped; it is bigger, rounder, ringed so it separates from whatever it sits on, and properly outside the edge. THE ALBUM WALLPAPER STEPS BACK: the city stamps were competing with the cards, so they lose opacity and gain a blur rather than the cards having to shout over them. AND THE WHOLE VAULT NOW ASKS FOR SIXTY-FIVE CARDS, not thirty-seven — the roster grew and the number had been typed into the badge by hand. It reads the roster now, so it cannot go stale again. Both folds clean."],["v0.436","⚠ FIXES A BROKEN CROWN DELUXE IN v0.435 — SHIP THIS ONE. The build before this could open the parlour with NO TABLE ON IT: an unsized canvas, no felt, no rings, nothing to aim at. It is my fault and the cause is worth writing down because the mistake was a careful one. v0.435 stopped the table being measured against a screen that had not appeared yet, which was right — measuring a hidden screen was producing a one-frame sliver. But it stopped by simply giving up and waiting to be called again, on the assumption that the three re-fits already scheduled would cover it. They do not. They fire at nought, a hundred and twenty and four hundred milliseconds, and switching screens takes four hundred and thirty-five — so all three can land while the screen is still hidden, and then nothing ever calls the fitter again. The geometry stays empty, the drawing code correctly refuses to draw against nothing, and you get a three-hundred-by-one-fifty default canvas: the browser's, not the game's. It now keeps asking on a plain clock until the screen can actually be measured, and gives up only after a few seconds so a player who walked away is not left with a timer ticking. Checked both ways in: the ordinary route a player takes with the full screen wipe, and the instant one — table at full width, geometry present, layout check clean on both. AND THE CHECK THAT SHOULD HAVE CAUGHT IT NOW EXISTS, which matters more than the fix. Every single one of Crown Deluxe's existing checks passed on the broken build, because they all measure boxes that were present and correct — the portraits, the turn plate, the stat rack — while the one thing that was missing was the table itself. Nothing was asking the most basic question on the screen: is there a table here at all. It is now the FIRST thing asked, before anything that assumes one. It also explains why the pre-flight went green on a build that was broken: the walk happens to fire a resize on its way into each game, and that resize quietly fixed the very fault being looked for. A check that only holds when the harness nudges the page is not a check, and that lesson is written next to it. Eleven games at both fold sizes, clean, no excused faults."],["v0.435","THE TABLE STOPS BEING MEASURED AGAINST A SCREEN THAT IS NOT SHOWING YET. Crown Deluxe's own layout check kept reporting the table running off the side of the screen on the live site — on some runs and not others, with a careful re-measure a moment later always coming back clean. Chasing it properly turned up the real thing: sampled right through the moment the screen comes in, the table's canvas measured ONE HUNDRED AND SIXTY pixels wide on a nine-hundred-pixel screen, and then corrected itself a beat later. A hundred and sixty is not a coincidence, it is the code's own minimum — the floor it falls back to when it is handed nothing. Switching to a screen takes about four hundred milliseconds to actually happen, and the fitting code can be called by several different things before that lands. So it was measuring a screen that was still hidden, getting zero, and drawing the whole parlour into a strip. Nobody ever saw it, because the next re-fit a fraction of a second later put it right — but the check was looking during that window, which is exactly what a check is for. It now refuses to measure a screen that is not showing and simply waits to be called again, which it always is, moments later. Both of the other puzzle screens already worked this way for the same reason; Crown was the one that did not. Sampled fourteen times across the whole swap-in window afterwards: the canvas is the full width of the glass on every single frame, and the strip never appears. THE TWO GUARDS FROM THE LAST BUILD STAY, because both were right even though neither was the whole story: the canvas still may not be drawn wider than the box it lives in, and the pre-flight still lets a stray timer land before deciding a game would not open. AND THE HONEST NOTE ON HOW THIS WAS TESTED: the last three of these were all found on the live site after passing here, and the reason is now understood — the testing browser runs with its window hidden, which throttles its clocks, so the timing on this machine is not the timing on a phone. That is not a reason to trust the local run less; it is a reason to treat any margin thinner than the wobble as a fault in its own right, which is what all three of them turned out to be. Eleven games walked at both fold sizes, clean, with no excused faults carried."],["v0.434","TWO THINGS THE LIVE CHECK CAUGHT THAT THE LOCAL ONE DID NOT, AND WHY THAT KEEPS HAPPENING. THE TABLE CAN NO LONGER BE DRAWN WIDER THAN THE SCREEN. Crown Deluxe's layout check reported the table running off the side on the live site, on a run where measuring it again a second later was perfectly clean — so it was a flash rather than a permanent fault, but a real one. The canvas is sized from the box it sits in, and that box is measured while the screen is still being swapped in; a measurement taken mid-transition can come back a few pixels wider than the window, and for one frame the whole page can overflow sideways. The canvas is now simply not allowed to be wider than the box it lives in. It costs nothing and the flash cannot happen again. AND THE INK RINK WAS NEVER BROKEN — IT WAS BEING DRAGGED AWAY. The pre-flight intermittently reported that the rink would not open, and the rink was innocent: stopping every game stops every animation, but it does NOT cancel the pending timers Bit-Brawl leaves behind, so a stray one fires a second later and pulls the screen onto the battlefield from whatever has just been opened. Walking eleven games back to back is the only thing that provokes it — no player opens a brawl and three other games inside four seconds — so the check now lets a stray timer land and tries again, and the underlying gap is written down rather than papered over. ⚠ THE PATTERN IS WORTH NAMING, because it has now happened three builds running: a check that passes on this machine and fails on the live site is NOT noise. Every one of these has been a margin smaller than the jitter — a label clearing the controls by two pixels, a canvas a few pixels over during a transition, a game opening a moment after something else navigated. The local run was not disagreeing with the live one; it was landing on the lucky side of the same coin. When the clearance is thinner than the wobble, the check is telling you the layout is fragile even on the runs it passes, and the answer is to widen the margin rather than to re-run until it is green. All three of those margins are now wide. The pre-flight walks eleven games at both fold sizes and comes back with nothing, twice over at each size, and the deploy carries no excused faults at all."],["v0.433","THE DANCE DANCE INK TRACK TITLE, AND THE END OF A BUG THAT HAS NOW BEEN FIXED FIVE TIMES. The build before this one shipped with a pre-flight that reported nothing, and then the very first run against the LIVE site found something the local run had not: the song title on Dance Dance Ink, buried under the controls. It was not a fluke and it was not wrong. Measured on the live page, that label was clearing the D-pad by TWO PIXELS — so whether it was readable depended entirely on whether the layout had finished settling at the moment you looked, which is why it came and went between runs. Two pixels of clearance is not a pass, it is a coin toss. It clears by twenty-two now. THE REAL FIX IS THAT THE GAME NOW KNOWS HOW BIG ITS OWN CONTROLS ARE. This is the fifth time in eight builds that something has been found hiding behind the D-pad, and every single one had the same cause: a stylesheet reserving a CONSTANT for it. The pad is two hundred and forty pixels at rest, so all five constants were near-misses — two hundred and thirty-six in Ink Panik, two hundred and forty-two in Lumen Ink, two hundred and thirty-eight in Dance Dance Ink, two hundred and fifty and two hundred and ninety in two different rules of the same profile screen — and all five are wrong on the unfolded Fold, where the phone's safe area and the screen scaling make the controls taller than any of them. Rather than patch a sixth, the true figure is now published once, measured, as a value the stylesheets can simply ask for. A rule can say 'sit sixteen pixels above the controls' and be right on every screen there will ever be, instead of guessing a number that is right on one. It is a reservation only — nothing sizes a board by reading it mid-layout, which is the trap that made Ink Panik's board come out a different size on every call. ⚠ AND THE LESSON FOR NEXT TIME, WRITTEN DOWN WHERE IT WILL BE FOUND: a check that passes locally and fails on the live site is not noise. The local run was measuring the same two-pixel gap and landing on the lucky side of it. When a clearance is smaller than the jitter, the check is telling you the layout is fragile even on the runs it passes."],["v0.432","THE PRE-FLIGHT COMES BACK CLEAN FOR THE FIRST TIME, AND THE UNFOLDED CROWN TABLE IS HALF AGAIN AS BIG. THE TABLE LIES BACK ON THE WIDE SCREEN. Odaroo photographed Crown Deluxe on the unfolded Fold with the board marooned in the middle of a sea of empty sky, and the measurement agreed with him: it was using thirty-three per cent of the width. It could not simply be scaled up, because the width was never what limited it — the HEIGHT was, the band between the two portraits and the controls, and the table's proportions are fixed, so every extra pixel of width costs pixels of height that are not there. This is exactly the case the project's own rule was written for: when a shape cannot grow wider because the screen is short, change the SHAPE — in a perspective view, lay the table back — rather than leave the sides empty. A flatter camera angle spends less height per unit of width, and the same band of room now fits a board exactly one and a half times bigger: from a third of the width to half of it. It cannot affect how the game plays, and that is by construction rather than by hope — the physics runs in table units, and the projection, the reverse projection your finger aims through, and the squash on every ring are all DERIVED from the drawn height, so the whole camera stays self-consistent. Proved three ways before shipping: the projection still inverts to zero error across the whole table, every pocket is still on the glass, and a full match was played to its end through the real turn loop. The folded phone is untouched to the pixel, because Odaroo said the folded one is right. INK PANIK'S BOARD COMES OUT FROM UNDER THE CONTROLS — the same fault as Lumen Ink's last build and fixed the same way. The board is thirteen rows counting the peek row, and it was sized against a bottom margin of two hundred and thirty-six pixels standing in for controls that are two hundred and forty at rest and taller once the phone's safe area and the screen scaling are counted. On the unfolded screen that buried the bottom thirty pixels — the peek row, the one that tells you what is coming. The margin is measured now. AND THE REASON BOTH PUZZLE TOWERS KEPT CHANGING SIZE BETWEEN ONE MEASUREMENT AND THE NEXT turned out to be a single mistake made twice, in both games, with a warning comment sitting directly above it. Two earlier builds had written 'applied BEFORE the measurement' about the classes that widen the side column and add the top inset — and both had put those lines three lines BELOW the read that fetches the padding they change. So the first pass measured a four-pixel top inset and then applied a seventy-six pixel one, and the well came out thirty-one pixels one moment and twenty-seven the next. The toggles now genuinely come first, with a line saying nothing above them may measure anything. AND THE CONTRAST CHECKER CAN READ A GRADIENT. It only ever looked at background COLOUR, so it sailed straight past Superstars' dark cosmic sky — which is painted as a gradient — and judged gold text against the cream paper two layers further up, reporting four confident faults that were completely wrong. It reads gradient colours now. The obvious version of this fix was tried in v0.429 and was worse: bailing out on ANY background image blinded the check almost everywhere, because nearly every screen in this game has a halftone above it. The distinction that works is that a gradient is a backdrop whose colour can be read, while a texture is a pattern laid over whatever is behind it. Proved with four controls: cream on cream is still caught, dark-on-dark over the gradient is NOW caught where it could not be before, and two genuinely readable lines are correctly left alone. THE RESULT is that the pre-flight walks all eleven games at both fold sizes and reports nothing at all, so the deploy now carries no excused faults whatsoever — the next thing to go wrong, anywhere, stops the ship."],["v0.431","LUMEN INK'S TRACK TITLE COMES OUT FROM UNDER THE CONTROLS. On the unfolded screen the song name and the row of stage pips beneath the board were sitting behind the D-pad, so the one line telling you which track you were playing to could not be read at all. Nobody reported this: the pre-flight check that walks all eleven games found it on the build before this one, and it is fixed here. THE CAUSE IS THE SAME ONE THIS GAME KEEPS RELEARNING. The two labels hang deliberately BELOW the board — that is where they were put so they are always visible without stealing playfield — and the room for them came out of a bottom margin written as a flat two hundred and forty-two pixels. The controls are two hundred and forty at rest, which is where that number came from, but they also sit on the phone's safe-area inset and they grow with the screen, so on the unfolded Fold their top edge is HIGHER than the margin reserved for them: the board's bottom edge lands level with the controls and anything hanging below it lands underneath them. The margin is now measured from where the controls actually are, plus the room the two lines need, so it is right on any screen instead of right on one. THE FIX IS THE MARGIN, NOT THE BOARD, and that distinction is the whole reason this was safe to do. Sizing a board against a live measurement of the controls is a trap this game already fell into once: everything being read is still moving while the thing being sized is laid out, and the board comes out a different size on every call — thirty-seven pixels one moment and thirty-five the next. So the controls are measured once to set the margin, and the board is then fitted inside it by exactly the code that always did that. Checked by running the sizer eight times over: the same cell size and the same margin every single time. WHAT IT COSTS is about eight per cent of the board's height on the unfolded screen, and nothing at all on the folded one, where the board is limited by the width rather than the height and the extra room was going spare anyway. A slightly smaller board that tells you what you are listening to is the right trade. Both folds measured with the controls up: the title and the pips clear the pad on each, sit fully on screen, and the board still fills nearly three quarters of the width. The rest of the arcade re-checked at both sizes with nothing new."],["v0.430","THE PROFILE BECOMES A FILE YOU CAN ACTUALLY READ, AND CROWN DELUXE STOPS SHOUTING. FIRST, THE TURN BANNER. It was a solid gold band running edge to edge across the screen for the whole of your turn — the loudest thing on the table, saying the smallest thing on it. It is a small plate now that hugs its own words and sits centred between the two portraits: about a seventh of the width instead of all of it. How it is centred matters and is worth writing down, because this element has been broken this exact way before: the obvious way is to push it to the middle with a transform, and the breathing animation then clobbers that transform and throws the whole thing half a screen to the left every time it pulses. So the outer strip stays full-width and does nothing but centre, and the visible plate is a separate piece inside it. No transform is involved, so the pulse cannot break it — checked over ten frames, it does not move a pixel, and a ridiculously long rival name still stops at the screen edge instead of running off it. AND THE STAGE TAG IS GONE FROM THE TABLE. v0.424 kept it on the argument that a stage number is live information about the run rather than the game's name, which is true of the two rhythm games — they have nowhere else to put it. Crown Deluxe is not those games: it says the stage in the message line on the way in, the rung cannot change mid-match, and the corner it was sitting in belongs to the rival's portrait. THE PROFILE IS REBUILT AROUND ONE IDEA: nothing sits beside anything it can collide with. The portrait, the name and four boost figures were crammed into a band across the top and the stats were a narrow column beneath them, which is the overlapping mess in the screenshot. The inkling now stands on its own at the top, centred, the way it does on the home menu, with the name under it and the level under that — and everything else is a confidential file: four numbered sections, one subject each. CURRENCIES, then THE INKLET, then THE RECORD, then the ARCADE LOG. The figures are cells in a grid that uses the whole screen — two across folded, four across unfolded — so no label is ever squeezed against its own number. The four boosts were never header material; they are stats, and they are in the file with the rest of them now. AND THE CONTROLS STOP EATING THE BOTTOM OF IT. WINS, LOSSES and WIN RATE were disappearing behind the D-pad because the space reserved for it was a constant — and it was two DIFFERENT constants in two different places, 250 pixels in one and 290 in the other, for a pad that is only 240 at rest and TALLER than either on the unfolded screen. The pad is asked where its top edge actually is now, every time the screen is drawn and again whenever it changes size, and one measured number does the job both constants were failing at. Scrolled to the very bottom on both folds, the last row of the record finishes clear of the controls. THE WARDROBE ONLY SHOWS WHAT YOU OWN. It used to list every piece in the game and grey out the rest, which on a new save is a rack of thirty-odd locked tiles and nothing of yours. They are only ever bought at the Mart, so the Mart is where they belong; an empty rack now says which floor of the shop to go to and offers to take you there, rather than sitting there looking broken. Verified on both folds with the controls actually up: every tab measured for clipped text, off-screen boxes and overlapping elements, and all three come back clean."],["v0.429","ONE COMMAND NOW WALKS ALL ELEVEN GAMES, AND A WIN IS SOMETHING YOU CAN SHOW PEOPLE. THE PRE-FLIGHT COVERS THE WHOLE ARCADE. Four games had a proper check of their own — Crown Deluxe, the rink, Tetr-Ink and Ink Panik — and the other seven had nothing, so a clipped line in Superstars or Bullet Ballet could only ever be found by playing them, which in practice meant Odaroo finding it in his own screenshot. inkSelfTest() now opens every one of the eleven through its REAL front door, the same way a player does, and checks the same six things on each: no text cut off inside its box, nothing off the side, nothing hidden behind the D-pad, every line above the contrast floor, the playfield actually using the screen, and no game printing its own name on the playfield. Then it runs whatever bespoke check that game already had, on top. It reports in plain English and it names the seven games that still have no check of their own, so that gap is visible instead of assumed. WHAT IT FOUND FIRST WAS ITSELF, three times, and that is worth writing down. It opened with four hundred and forty-three faults, almost all of them invented: it was walking INSIDE the artwork, where a shape legitimately sticks out past the picture that holds it. It accused Crown Deluxe of a drifted power meter that was really just the game being measured before the page had finished settling — eleven games entered back to back is not something a player ever does, so each one is now nudged to re-measure the way a real phone would before it is judged. And it swore Superstars was unreadable at 1.3:1, which is false: that text is gold on a dark sky, and the contrast checker only reads background COLOUR, so it sailed past a sky painted as a gradient and compared the words to the cream paper behind it. I tried to fix that and made it worse — stopping at any artwork silences the check almost everywhere, and a cream-on-cream control proved it had gone blind — so the change was withdrawn, the limit is now written down where the next person will find it, and those four are carried as KNOWN. THE FOLD CHECK IS NO LONGER AN HONOUR SYSTEM. It used to be a variable you set to promise you had looked. The deploy now demands a RECORDED pass at both 375 and 906, fingerprinted against the exact files being shipped — edit anything afterwards and the recorded pass stops counting. Faults already known are carried so they do not block every future build, but anything NEW stops the ship. Tested by inventing a fault: it refused. AND YOU CAN SHARE A WIN. Every victory screen has a SHARE button that draws the result as a proper card — the wordmark, the sunburst, the game, your name, the figures off the receipt, and where to find the game — and hands it to the phone's own share sheet, or saves it on a desktop. It reads the receipt already on the screen instead of being told what happened, which is why one button covers all eleven games and not one of them needed changing. The picture is made on your device and goes nowhere until you send it. ALSO FIXED, FOUND WHILE DOING THIS: files were being cached for a year on development machines as well as the live site, so my own edits were invisible to me and the new save-and-reload would never have worked. Caching forever is now something only the real site does."],["v0.428","INKVILLE INSTALLS TO YOUR PHONE, PLAYS WITH NO SIGNAL, AND TELLS ME WHEN IT BREAKS. FOUR THINGS, NONE OF THEM VISIBLE IN THE GAME ITSELF. FIRST: IT IS AN APP NOW. Add to Home Screen and Inkville opens on its own, full screen, with no browser bar above it and its own ink-drop icon on the home screen — the icon is drawn by the project itself in the same chunky pixel style as everything else, at every size Android and iOS ask for, because there is still no image library anywhere near this project and there is not going to be one. SECOND: IT PLAYS WITHOUT A CONNECTION. Open it once and every file it needs is kept on the phone; after that it starts on the underground, on a plane, or with the wifi off. Only the online parlour needs a signal, which is as it should be. This was tested the only way worth testing it — the server was switched off and the game was loaded from a dead address, and it came up complete: all sixty-five cards, all two hundred and eighty-seven builds, every stylesheet, the home screen with its tiles. THE ONE RULE THAT KEEPS THAT SAFE is worth writing down, because getting it wrong is exactly the fault that stranded this game's players for a week once. The page itself is ALWAYS fetched fresh from the network and the stored copy is only ever a lifeline for when there is no network — so a phone can never be pinned to an old version with no way back. Everything else is stored forever, which is only safe because each file's address carries the build number and the deploy rewrites every one of them, so a new build asks for addresses the phone has never seen. THIRD: WHEN IT BREAKS ON YOUR PHONE, I FIND OUT. Odaroo cannot open a browser console on a handset, so until today a crash on his phone was invisible unless he happened to describe it. Whatever the browser itself reports — the message, the file, the line, the screen you were on, the size of the screen — is now sent to the room, which keeps the last two hundred. Nothing anyone TYPES is ever sent; there is no database and nothing is written to disk, exactly the bargain the lobby already makes with presence. It is installed before anything else can go wrong, so it even catches a game file that fails to load, which is precisely the failure that would otherwise leave no trace at all. FOURTH: WHICH GAMES ACTUALLY GET PLAYED. A plain count of opened, won, lost and abandoned per game, and how long each was played for. No third-party anything — no Google, no analytics company, nobody but this game's own server. It needed no changes inside any of the eleven games: the counters hang off the two functions the whole game already routes through. AND FOR ME, NOT FOR PLAYERS: saving a file now reloads the browser instantly during local work, and a stylesheet save restyles in place without losing the screen you were on. It only ever runs when the page is opened with a switch on the end of the address, so it cannot reach the live site. Both folds checked with everything above running: every screen reachable, nothing clipped, all four game layout checks clean, no console errors, and the lobby unaffected — the stored-file layer never touches it, because everything the parlour does is a POST and it only ever looks at plain page requests."],["v0.427","THE CHANGELOG AND THE CARD ROSTER STOP BEING CODE. Two things in Inkville were only ever data wearing a JavaScript costume, and both were making the files around them expensive to work in. The build history — this list you are reading — was two hundred and forty-three kilobytes of prose sitting in the middle of the Ink Rink file, sixty-four per cent of everything in it, which meant that changing one line of the rink meant reading the entire history of the game first. It is now data/builds.json. The sixty-five-card roster was another hundred and fifty lines in the middle of the core file; it is now data/cards.json. Between them the two files they came out of shrank from four hundred and fifty kilobytes to a hundred and ninety. NEITHER JSON FILE WAS TYPED OUT BY HAND, which is the part that makes this safe. A tool ran the OLD code in a sandbox and wrote down exactly what it produced, so there was no transcription to get wrong — and it was then checked back against the original single-file version of the game from before any of this started: every one of the sixty-five cards is identical down to the last stat and story line, and every entry in the history is identical word for word. Everything ABOUT the cards that is actually logic — classes, traits, level caps, upgrade costs — stayed in the code where it belongs. LOADING HAD TO CHANGE SHAPE TO ALLOW IT. The first script reads the card roster the instant it is parsed, so the data has to be in hand before anything runs. index.html now loads one small file, js/boot.js, which fetches both JSON files and only then starts the thirteen game scripts — in order, sharing one global scope, exactly as before. Still no modules, no bundler, no build step. The browser is told to start downloading all thirteen up front, so waiting for the data costs ordering rather than time. ONE REAL CONSEQUENCE WAS FOUND AND FIXED RATHER THAN DISCOVERED LATER. The viewport-fitting code — the thing that stops the game drawing itself underneath a phone's browser bars — waited for the page's load event. When the scripts were fixed in the page that event was always still to come; now that they start after a fetch, it has usually already gone, and the fit would never have run. It asks the page what state it is actually in instead of assuming, so it works either way. And if the data ever fails to arrive the game says so plainly on a black screen instead of dying silently. THE DEPLOY LEARNED THREE MORE CHECKS. The list of game scripts is now written down in three places — the preloads, the loader, and the server's whitelist — and a mismatch is invisible until something far away breaks, so shipping now proves all three agree on the same files in the same order, that both JSON files parse, and that the server will actually hand out every asset the page asks for. Both folds checked: every screen reachable, nothing clipped, the Crown Deluxe layout check clean twice over, no console errors."],["v0.426","THE ENGINE ROOM GETS REBUILT — SAME GAME, TWENTY-FIVE SMALL FILES INSTEAD OF TWO ENORMOUS ONES. Nothing about playing Inkville changes with this build; everything about working on it does. game.js had grown to twenty-two and a half thousand lines and two megabytes, and game.css to five and a half thousand, which meant that changing a single line anywhere meant reading the whole thing first. That cost is now gone: the code is thirteen script files and twelve stylesheets, each named for what is actually inside it — core, audio, ui, cards, brawl, rink, minigames, arcade, crown, online, selftest. THE SPLIT IS PROVABLY THE SAME PROGRAM, which matters more than it sounds. Every file is a contiguous run of the original, in the original order, and the tool that cut them refuses to write anything unless gluing them back together reproduces the old file BYTE FOR BYTE. That is the whole safety argument: the browser sees exactly the same statements in exactly the same sequence it always did. The same rule was applied to the stylesheets, where it matters even more — in CSS the winner of a conflict is decided by source order, so any reshuffle can silently change what the page looks like. Sheets are therefore named for what dominates each range rather than one-per-game. ONE REAL HAZARD HAD TO BE CHECKED FOR SEPARATELY. In a single file a function written on the last line can be called from the first, because the browser hoists it. Across thirteen separate scripts that stops being true — while the first is running, the thirteenth does not exist yet. Byte-identical reassembly does not catch that, so there is now a second tool that finds every statement which runs at load time, works out which names it touches, and fails the build if any of them is declared in a later file. It was tested against deliberately broken input to be sure it actually catches one. It reports clean. AND THE DEPLOY IS ONE COMMAND NOW. Two builds in this game's history shipped broken because of a human step in a checklist — a cache-buster nobody bumped, and the lobby server left behind so every online brawl opened the wrong game. Deploying now runs one script that reads the build number, syntax-checks every file, proves no file reaches forward, proves the server will actually hand out every asset the page asks for, rewrites all twenty-five cache-busters, writes this very entry, mirrors every file into the deploy folder and verifies both copies are identical, uploads, and then polls the live site until the new number appears rather than assuming. It refuses to run at all unless both fold sizes have been checked. THE PAGES ALSO LOAD BETTER. Twenty-five files could have meant twenty-five downloads every single visit, so the server now caches anything under js or css permanently — which is only safe because the cache-buster is generated rather than typed, so a new build asks for an address the phone has never seen. Checked on both folds: every screen reachable, no clipped text anywhere, the Crown Deluxe layout check clean twice over, and no errors in the console."],["v0.425","CROWN DELUXE GETS ITS TURN BAR AND ITS BALANCE. FIRST, THE TITLE: it was ALREADY GONE. v0.424 removed Crown's wordmark along with every other game's, and the screenshot behind this request was a phone still serving the previous build out of its cache — checked against the live site before touching anything, and there is no CROWN DELUXE anywhere on that screen. A hard refresh is the whole fix for that one. The other two were real. WHOSE TURN IT IS NOW RUNS ACROSS THE TOP OF THE FIELD. It was a small pill wedged between the two portraits with about 220 pixels to say 'THE THIMBLE'S TURN' in, riding close enough to the felt to read as part of the table. It is a full-width bar now, below both portraits rather than between them, spanning the whole playing field with the text centred in it — which is what you want the single most important fact on the screen to look like. Its height is measured off the portraits rather than set to a constant, because the portraits grow with the screen and a fixed number is right on one fold and wrong on the other. AND THE FIELD IS CENTRED IN ITS ROOM. This deliberately reverses v0.374 and v0.401, so the reasoning is worth keeping. Those builds pinned the near rail hard against the D-pad, on the argument that it put the board where your hands are, and at the time that was correct: the wordmark band was eating the top of the screen, there was no slack anywhere, and anchoring low was the only way to keep the cue off the controls. Taking every title away in v0.424 handed that height back — and the anchor then did the exact opposite of its purpose, because the table grew UPWARD off its pinned bottom edge until its top was against the HUD and the whole field read as shoved to the top of the screen. That is what Odaroo photographed. The slack is now split evenly instead of all being given to the top. The pad clamp still runs first and still wins: centring may only move the table up, never down into the controls. TWO THINGS THE MEASUREMENTS CAUGHT while this was being fitted. The bar was left out of the calculation that decides where the table starts — it used to be excluded on purpose, because a small floating pill should not shove the board around, but a full-width opaque bar is not furniture the table can slide behind; it is the bottom edge of the HUD, and without that it sat eleven pixels off the top rail with the board crowding it. And on the unfolded screen the far rail is deliberately allowed to ride almost to the top edge to use the glass, which drew the new bar straight across the back of the table and swallowed the rear rings — 114 pixels of hidden board, measured. The far rail still rides high; it now starts under the bar rather than under the top edge. Both folds finish at 40 pixels of daylight above the table and a full cue-clearance below it, with the layout check clean twice over and a whole match played to its end through the real turn loop."],["v0.424","NO GAME SHOWS ITS NAME WHILE YOU PLAY IT. THE RULE IS UNIVERSAL AND IT IS PERMANENT. Every game carried a wordmark band across the top for the whole time you were playing it — about forty pixels of the narrowest screen in the game, permanently, telling you the name of the game you were already looking at and had just chosen from a menu. Crown Deluxe was the one Odaroo photographed, but all eleven had one. They are gone. THE ENTRANCE IS THE ANNOUNCEMENT. Every game now opens with the same splash card: the English title big and centred, the Japanese beneath it, and the waving checkered flags to the LEFT and the RIGHT of the words — beside them, never over them — held for two seconds and then out of the way. Four games had no entrance at all before this (Crown Deluxe, the rink, Bit-Brawl and Bullet Ballet, which were the four leaning hardest on their permanent bands); now the whole arcade opens the same way. RATHER THAN VISIT TEN SCREENS AND RISK MISSING ONE, the function that built the band stopped emitting a title — so every caller lost its band on the same day, and a game added later cannot quietly grow an eleventh. It still emits the STAGE TAG: 'STAGE 1-3' is not the game's name, it is live information about the run you are in, and Dance Dance Ink and Ink-Tar Hero have nowhere else to put it. Crown Deluxe keeps its stage number the same way. THE '?' MOVED TO THE PAUSE MENU. It used to ride in the band, and since v0.407 it has been the ONLY route into a tutorial — so it could not simply be deleted along with the band that carried it. HOW TO PLAY is now the second thing under START in every game: the same press, always in the same place, and it costs nothing on the playfield. It does not appear on the home screen, where there is nothing to explain. AND THE RULE IS WRITTEN AS A TEST so the next session cannot undo it by accident: a check that walks whatever screen you are on and fails the build if it finds a wordmark band, Crown's old wordmark, or any element whose text is the name of the game you are currently in. The splash is exempt, because the splash is the entire point. It runs inside the Crown Deluxe and Ink Panik self-tests. TWO REAL FAULTS CAME OUT OF THE SPACE THIS FREED and both were caught by the pre-flight, not by a screenshot. Crown's strength meter rode up into the inkling: the meter was only ever clearing the two portraits by accident, because the wordmark hung lower than both and dragged the clearance down with it — the portraits are a proper floor for it now, which is what the wordmark was really doing all along. And Ink Panik's board grew nine pixels into the D-pad, because the peek row is drawn OUTSIDE the grid box: the board reserves thirteen rows of space but the box is twelve rows tall, so a wrap that centres its children hung the thirteenth below it. A bottom margin of exactly one cell makes the centring honest. A third attempt of mine was withdrawn before shipping and is written down where the next person will find it: I tried making the board measure itself against the live position of the D-pad, and it made the size NON-DETERMINISTIC — 37 pixels on one call, 35 on the next — because everything it read moves while the board being sized is laid out. The self-test named it in one line. If a board does not fit, change the padding, not the measurement."],["v0.423","THE PROFILE BECOMES A PLAYER CARD, AND EXP COMES FROM EVERYTHING YOU PLAY. THE THREE TABS MOVED TO THE TOP. STATS, STYLE and D-PAD were a vertical rail down the left, and being a rail they set the width of the entire left column — the portrait, the name and the four boost lines all had to live inside the width of three words, and the stats got whatever was left of a 375-pixel phone. Across the top they cost one line. On the STATS tab the header lies down with them: the inkling, the name and the boosts become a single band across the top and the record below runs the full width of the screen — 231 pixels of stats became 343 on the folded phone and 874 on the unfolded one. STYLE and D-PAD keep the old side-by-side arrangement on purpose; their content is a rack of tiles and it reads better beside the inkling it is dressing. THE ARCADE LOG IS A RECORD NOW, NOT A TALLY. It used to say how many times you had OPENED each game, and for some of them the most ink you had ever banked. Whether you had ever WON one was known for Bit-Brawl and for nothing else — because every other mode banked its cups by reaching into the purse directly and nobody was writing anything down. Every game is now a card of its own: wins, losses, win rate, best ink and time played, in a grid that reflows from two across on the folded screen to five on the unfolded one. Only figures that exist are printed, so a game you have never won does not get a proud zero. EXP NO LONGER BELONGS TO ONE GAME. Seventy for a brawl win, thirty for a brawl loss, and nothing at all for a night of Tetr-Ink — so the level on your profile measured one game rather than how much you actually play. Every win in the arcade now comes through a single door, and that door pays cups and EXP together, in proportion. The rate is not a number somebody liked the look of: a Bit-Brawl win has always been thirty cups and seventy EXP, so the rate is seventy-thirtieths, which is exactly what keeps every other mode in step with the game the whole level curve was built around — and it means the brawl still pays precisely the seventy it always did. Five modes that used to bank their cups themselves come through that door too, which is how they started being written down at all. PEAK CUPS IS GONE from the profile: cups go down as well as up, so a best-ever figure sitting beside the live one only ever reads as 'you used to have more'. The high-water mark itself is still kept and still hidden — the Bit-Brawl rivals scale their difficulty off it, and dropping it would quietly make every rival in the game easier. THE VAULT is untouched: ink, reels, lunes and cups, at the top, where they were. Both fold sizes checked on all three tabs with a full record loaded: nothing clipped, nothing overlapping, every line above the contrast floor."],["v0.422","THE RIVAL PLAYS IN FRONT OF YOU NOW, FROM AN EMPTY BOARD. MASA WAS NOT CHEATING — THE ROOM STARTED THEM EARLY. A match is made the instant a challenge is accepted, and the bot's clock started right there — but the PLAYER then sits through the connecting screen, which is eight and a half seconds long, and the bot's first piece comes three seconds in. So by the time your own well appeared, MASA had been playing a live game for five seconds and had anything from four to ten pieces already stacked up. It read exactly like the rival being handed a head start, because that is what it was. The answer is not a longer wait, which is only a better guess: the bot is ARMED BY YOU. Your game pushes its board to the room twice a second from the moment it starts, and the first of those pushes is proof you are looking at a board. Until then MASA and MUNE sit still with an empty well, exactly as you do. AND THE PIECE ACTUALLY FALLS. The bot used to choose a placement and write the finished board on the spot, so what you saw on their well was stacks APPEARING — never a piece moving, never a decision being made. Odaroo asked for the Crown Deluxe treatment: show every single move the rival makes, not just where they ended up. The choice is still made in one go and by exactly the same standard as before, so the difficulty is untouched — but what comes out of it now is a FLIGHT PLAN. The piece appears at the top, slides one column at a time towards the column it wants, then falls one row at a time until it lands, and only then does it settle and clear. About twenty distinct frames a piece instead of one jump. It needed a second, much faster clock in the room: the old one beats every four hundred milliseconds, which is right for deciding things and far too slow to watch somebody play, so movement got its own sixty-millisecond beat that makes no decisions at all. The junk a clear owes you is now paid on the beat the piece LANDS — being hit by rows from a piece you can still watch falling would be worse than the bug. Nothing changed on your phone to receive any of this: the rival's board already travelled as eighteen rows with the falling piece drawn in, which is the same shape your own board is sent in. THE NAMES ARE IN THE TOP CORNERS AND THE FACES SIT UNDER THEM. Both names were film strips parked below the portraits and hard against the sides, halfway down the screen with the boards. Now it reads like a scoreboard: your name top-left, theirs top-right, each inkling directly beneath its own name, both the same size. AND THE MARQUEE IS GONE FROM AN ONLINE MATCH. The TETR-INK band ran across the top for the whole game, which is the exact strip the names and faces want — and the game already announces itself with the splash card on the way in, which is the announcement. Solo runs keep the band, because it carries the '?' and nothing is competing for that strip. Ink Panik gets all of it too. Two faults of my own were caught before this shipped and both are written down: the rival's portrait is built as a gink-game as well, so a stylesheet rule meant for 'my inkling' dragged their face into my corner and stacked the pair; and the layout was being done with a later-sibling selector, which matched or missed depending on which got built first — one face came out at 68 pixels and the other at 39. Both folds measured with the controls up: no overlaps, all eighteen rows, every word inside its box."],["v0.421","THE BATTLEFIELD IS A BATTLEFIELD AGAIN. THE TWO INKLINGS ARE HALF THE SIZE. When the arena grew to fill the screen the fighters were told to grow with it, at thirty per cent of the field's height, so they would not be thumbnails at the edges — and they overshot badly. They ended up taller than the field could carry and dominated everything on it. Odaroo's word was 'way too huge'. Same rule, half the number: they still grow and shrink with the arena, at exactly half of what they were. THE FIELD FRAME IS BACK. The white trapezoid perimeter that marks out the playable arena — narrow at the enemy, wide at your feet — had been taken off, leaving only two faintly tinted halves at a quarter opacity, which over the boulevard art is very nearly nothing at all. There was no battlefield drawn to aim at. The perimeter is drawn again, and the green half and the red half are strong enough to see. AND CARDS LAND EXACTLY WHERE YOU DROP THEM. This one was real and it had two causes that were the same cause: the green side was painted from 2 to 46 per cent in the stylesheet and the drop was clamped from 12 to 46 in the code, and neither knew the other existed. Dropping outside the green did not fail — it SLID, silently, to the nearest legal spot, so a card let go on the right of the screen appeared a third of a screen away from the finger that dropped it. The game was quietly rewriting the player's aim. There is one boundary now, one number, and both the paint and the rule read it. Inside it, the piece lands on the pixel you released it. Outside it, the drop is REFUSED — it says so and gives the energy straight back — rather than being dragged somewhere you did not choose, and the card you are holding greys out while it hangs over the enemy's half so you can see the answer before you let go. TWO THINGS TAKEN OFF THE FIELD. The 'LIVE vs THEIR NAME' banner across the top of an online brawl is gone: the banner has one useful thing to say, which is who has the showstopper stage, and it says that now and is invisible the rest of the time — the rival's name is already on the health bar you are trying to empty. And the rival's play-by-play captions in the top-right corner ('QUEEN LV4', 'TAKES THE STAGE!') are gone with it. They stacked three deep over the corner their own scoreboard lives in, announcing things you can already see happen on the field. Both fold sizes measured with the controls up: nothing overlaps the pad, every word clears the contrast floor, and a full thirty-second match was played to its end through the real turn loop with eighteen cards dropped, every one of them landing where it was let go."],["v0.420","THE HELP STOPPED HIDING BEHIND THE CONTROLS. THE TOWN TOUR TALKS FROM THE TOP NOW. Every card the tour is made of — WELCOME TO INKVILLE, THE MARQUEE, ALBUM, THE MART, GIGS — was anchored fifteen per cent up from the bottom of the screen, unless the thing it was pointing at happened to sit low, in which case it jumped to the top. Fifteen per cent of a folded phone is about a hundred and twenty pixels, and the D-pad owns the bottom two hundred and thirty-six, so on the screen where the tour actually runs the card was BEHIND the controls: you got a title, half a sentence, and a gamepad. The cleverness that was supposed to save it could only ever pick one of two answers and it was picking the wrong one on the home menu every time. It is gone. The card is pinned under the top edge on every step, with no decision left to make, and it is capped in height so a long line can never grow down into the pad — it scrolls inside itself first. Measured on all five steps at both fold sizes: nothing overlaps the controls and no line is cut off. AND THE ‘?’ OPENS AT THE TOP TOO. HOW TO PLAY is not a decision, it is something you read WHILE looking at the board it is describing, so floating it in the dead centre of the playfield covers the very thing it is explaining. Both of the ‘?’ windows — the two-door menu and the HOW TO PLAY itself — now open against the top edge. This is deliberately scoped to those two and nothing else: every other dialog in Inkville is a question you have to answer, and a question belongs in the middle of the glass. Checked afterwards that a plain dialog still opens exactly where it always has."],["v0.419","ONE FACE PER PLAYER, EVERYWHERE. MASA is a coral inkling with a bell and a cape; MUNE is grape, in goggles. That has been true on the server for a long while and it travelled over the wire with every heartbeat — but the game only ever LOOKED at it at the very last moment, once you were already in the match. Everywhere else a rival appeared, it either showed nothing at all or invented somebody. The roster in the room was a list of bare names. The challenge card that pops up when somebody wants to play you was a bare name too. And when a look failed to arrive, five different places each rolled their OWN random cast member — so the same opponent could quite legitimately be three different inklings inside ten seconds, which reads as a bug even though nothing was broken. THERE IS A LOOK-BOOK NOW, and everything that draws a rival goes through it. Every heartbeat that brings a roster stamps each player's real look into it, and — this is the part that matters — it OUTLIVES the poll. The room's poll is switched off the instant a challenge is accepted, so by the time the connecting screen wants a face the roster it came from is already gone; the book remembers. A genuine stranger, from a room too old to send looks, still gets an invented face, but it is invented ONCE and then kept, so it stops changing between screens. THE ROSTER WEARS THEIR FACES. Every name in the room now has its own small round portrait at the head of its row, your own included, drawn from the same call that tells the room what you look like. THE CHALLENGE CARD WEARS THEIRS TOO, above their name, so the card matches the row it came from — and both match the inkling that lands on the connecting screen when the reel stops, and the one sitting across the table a moment later. Checked on both fold sizes with a full roster, a wrapping name and a live challenge card: nothing clipped, nothing scrolled, and the face is the same one at every step."],["v0.418","THE RIVAL'S BOARD IS THEIR REAL BOARD NOW, AND THE PLAYFIELD GETS THE SPACE BACK. BOTH RIVAL BOARDS ARE DRAWN WITH THEIR OWN GAME'S PIECES. They were painting their own flat coloured squares, which is why Ink Panik's rival board showed none of the hearts, stars, diamonds or triangles the game is actually played with — it looked like somebody else's game entirely. Both now emit the very same elements their own board builds: Tetr-Ink's rival well is made of Tetr-Ink blocks, bevels and palette swaps and all, and Ink Panik's rival board is made of Panik panels with the real icons inside them. Nothing new was drawn for either — they are the same sprites at a smaller size, which is the whole point of a miniature. And they ARE smaller: Tetr-Ink's is half what it was last build, and Ink Panik's is a quarter of the tile you are playing with, worked out from the live board rather than from a fixed number. THE BAR DOWN THE SIDE IS GONE from both. It was a column of notches counting what was on its way to you — but the same warning is already drawn on your own board, and the strip it stood in is width the boards can have instead. THE FORFEIT BUTTON IS OFF THE PLAYFIELD, in every online game including the rink. It was a whole button's worth of the narrowest part of the screen, permanently, for something you press once a match at most, sitting one thumb-slip from the board you were playing. START is the way out now, the way it is everywhere else: pause, HOME, and the confirmation tells you it costs you the match and fifteen cups before you agree to it. Walking out still hands the win to the other player properly — they are told, they are paid, and the room is left cleanly. AND THE COLUMN STOPPED SHOUTING: every label beside the boards is smaller, so more of that space is board and less of it is words. Two faults were caught by the pre-flight while this was being built and both were mine: the checks that prove the rival board is following the other player's real play were still looking for the old flat squares, and would have gone on passing while showing nothing at all."],["v0.417","THE SAVE RITUAL READS PROPERLY NOW. All four of its screens were setting their words at different sizes and letting the browser decide where the lines broke, which is how you end up with one long line and a single word stranded underneath it. THE FOUR SCREENS ARE ONE SIZE. The question was asking for one size and being quietly overruled by the dialog's own styling, so it was never the size it claimed; the DON'T TURN OFF THE POWER warning was set at two thirds of that; and the sign-off was smaller again and forbidden to wrap at all, which meant a long enough name simply ran out of its box. They now share a single class and a single size. THE LINES ARE WRITTEN, NOT GUESSED. Every message is split by hand into lines that fit the folded phone with room to spare and stay balanced on the unfolded one: 'Would you like to' and 'save the game?' rather than everything crammed onto one line and 'game?' left on its own underneath. The overwrite question reads across three even lines instead of a long one and a short one, and the sign-off breaks after your name. Nothing is left hanging. TWO THINGS THAT WERE NEVER RIGHT turned up once the text was big enough to look at honestly, and the readability check is what named them: the sign-off was dark gold on cream at 2.9 to 1 and the power warning was the house red on cream at 4.1, both under the readable floor and both there since the day they were written. The sign-off takes the same dark plate the cup payout wears, so the gold stays gold and reads emphatically; the warning goes a shade deeper red. Both clear the floor now, on both fold sizes."],["v0.416","THE INKLING STOPS JUMPING OUT OF ITS FRAME ON THE MENUS, AND THE BUG FINDER FITS INSIDE ITS OWN. THE RANDOM POP IS GONE FROM EVERY MENU. There is a lens that runs over every inkling on screen every couple of seconds and does two things: it changes their FACE, and it made them HOP — an eight-pixel lift and a six per cent swell. In a game that is the inkling reacting to something you just did. On the home menu it is nothing of the sort: the portrait in the top-left corner simply leapt out of its circle every so often for no reason anybody could see, which is what Odaroo filmed. The face still changes everywhere, because that is the part that makes the little thing feel alive. The hop is now limited to the screens you actually play on. The list is of GAMES rather than of menus on purpose, so anything added to Inkville later stays inside its frame unless it is deliberately let out. THE BUG FINDER'S BOOK AND MAGNIFYING GLASS ARE HALF THE SIZE AND FULLY INSIDE THE FRAME. Measured on a 69-pixel portrait, the case file was hanging seventeen pixels below the bottom of the frame and the glass twenty-six — which is why they were clipping out of anything that held them. Both are drawn at half their old size now and pinned to the bottom edge from the inside. The pipe came in with them: it was hanging sixteen pixels out on the same frame and there was no sense fixing two of the three. All three checked at small, medium and large portraits on both fold sizes, and nothing crosses its frame on any of them."],["v0.415","THE CONTROLS GET THEIR SPACING AND THEIR CENTRING RIGHT. THERE IS DAYLIGHT UNDER THE BUTTONS NOW. The B button was not merely close to START — it was four pixels INTO it, sitting on top of it, which is why that corner always looked slightly broken. Three small moves in two directions fix it: A and B come up eight pixels, SELECT and START go down six, and the D-pad cross comes up three and no further. Three is deliberate — the cross's box already sat four pixels below the top of the control strip, and pushing it any higher would poke it up out of the strip and over the game, which is the very edge every screen measures its playfield against. The result is ten pixels of clear space under B and seven under the cross, and on a phone with a gesture bar the whole row still lifts itself clear exactly as it did before. AND THE LETTERS ARE CENTRED ON THEIR OWN INK. A, B and X were centred the way the browser centres anything — by the box the text sits in — and in this pixel typeface that box is not where the letter actually is: the face carries its ink high and left inside the square it is given. Measured off the font's own metrics, every one of those three glyphs was sitting exactly two pixels up and two pixels left of the true middle of its circle. Two pixels is small enough to be hard to name and big enough to look wrong, which is exactly how it was described. They are nudged back onto centre now, and the correction is written as a fraction of the letter's size rather than a flat number, so it stays true on the folded screen, on the unfolded one, and at any size these buttons are ever given. The gamepad is shared by every screen in the game, so all of this lands everywhere at once."],["v0.414","A SOLO RUN STARTS WITH NOBODY ELSE ON IT. Come out of an online Tetr-Ink match, start a solo run, and your last opponent was still sitting in the top-right corner — MUNE watching over a game they were not in. The pieces of an online match were only ever taken down by the match's own ending, which sounds reasonable until you count the ways a match can end: you top out, they top out, you forfeit, they forfeit, the room drops, or you close the tab halfway through and come back later. Every one of those had to remember to tidy up, and the ones that forgot left a rival's name on your screen. THE INK RINK NEVER TIDIED UP AT ALL: it put both names across the top during an online race and had nothing anywhere that took them down again, so its version of this had been there since the day the rink went online and simply had not been noticed. So the rule is turned around. Rather than trust every exit to clean up behind itself, every solo START now wipes the slate before it draws anything — the names, the rival's inkling, their board, the incoming meter, the whole online column. A start cannot be skipped, it does not care how the last match ended, and it does not care whether there was one. Proved by taking a match away with no ending at all, in all three games, and starting a solo run on the wreckage. Crown Deluxe is deliberately left out: its solo opponent is a real named character off the cast — THE THIMBLE, MADAME SPINNER — and naming them is the point."],["v0.413","YOU CAN READ YOUR RIVAL'S BOARD NOW — IN TETR-INK AND IN INK PANIK. Their board was drawn into the same narrow column that carries NEXT and HOLD, and what was left over gave it a five-pixel cell: a fifty-by-ninety thumbnail of a ten-by-eighteen well. That is not a board, it is a texture. You could tell they had blocks in there and nothing else — not whether their well was filling up, not whether a line was about to go — so there was no reason to look at it, which rather defeated the point of having it. Three things were in its way and all three are fixed. The column is WIDER during a match, because width was what was strangling it: the cell size is the smaller of what ten columns can have across and what eighteen rows can have down, and across was losing by a mile. NEXT and HOLD sit SIDE BY SIDE instead of stacked, which hands the board another sixty pixels of height — and in Ink Panik the STAGE and SPEED boxes do the same. And the panel stopped repeating things: the rival's name has come off it (it is on the strip at the top and their face is in the corner — three times was two too many), and so has the reminder of what a win pays, which does not change mid-match. The two numbers worth having, their lines and what you have sent them, share one line under the board. The result is a rival well more than twice the size in each direction and about five times the area — roughly the cell size of your own NEXT piece. THEIR FACE IS IN THE TOP-RIGHT CORNER, the way Crown Deluxe has always done it: your inkling in one corner, theirs in the other, and it is their real inkling when the room sends one. AND THE STAGE TAG IS GONE FROM ONLINE TETR-INK. A stage number is a solo idea — an online match is one well against another until somebody tops out, there is no 1-1 to be on — and it was sitting in exactly the corner their inkling wanted. All of it reverses cleanly when the match ends, so a solo run finds its column exactly as it left it. One real bug turned up while this was being measured and the pre-flight check is what caught it: the board was being sized before the column had been told it was in a match and again afterwards, so it came out two pixels different depending on when you asked."],["v0.412","THE CHAT IS GONE, AND SO IS THE CUP THAT ATE THE VICTORY SCREEN. THE WHOLE CHAT SYSTEM IS REMOVED from every game — no button, no emoticons, no text box, no SEND, and no speech bubbles. It went through five redesigns in a dozen builds and never earned the room it took on a phone, so rather than shrink it a sixth time it comes out completely and will be started again from scratch later. Nothing else about online play changes: you still see your rival's real moves, the room still works, and LOBBY still gets you out — the button beside COLLECT and the box on the match receipt were always the other two ways to use it. THE CUP ON THE STAGE-CLEAR SCREEN WAS DRAWING AT 184 PIXELS. Every currency icon in this game is an inline drawing with no size of its own, which is fine everywhere it is used because every one of those places sets the size in the stylesheet. The stage-clear wheel was the one that did not — and an icon with no size does not fall back to something small, it takes all the width it is offered. So the cup came out taller than the prize card, and it pushed the odds, the payout and the NEXT STAGE button off the bottom of a panel you then had to scroll to finish the game. It is a small gold badge beside the words now, the whole panel fits on the glass at both fold sizes with nothing to scroll, and two guards make sure an icon dropped into a caption or a receipt line can never do this again. All four games that spin that wheel — Ink-Put, Tetr-Ink, Ink Panik and Lumen Ink — were checked."],["v0.411","THE CHAT IS A BUTTON NOW, AND IT IS ON TOP OF EVERYTHING. Every version of table talk until this one was a bar that sat on your screen whether you were talking or not — twelve emoticons and two boxes, over the game, all match. It is three states now and it starts out of the way. AT REST there is nothing but a small ••• button. TAP IT and six emoticons open above it with a CHAT button beside them — six, because twelve was a wall and nobody used the back half of it. TAP CHAT and the six are replaced by a box you type in and SEND, with the keyboard under it, so you can see your own words as you write them. Say anything — an emoticon or a sentence — and the whole thing folds back to the button. It never stacks: you get one row at a time, never two. THE CHAT WAS BURIED BEHIND THE ENERGY BAR ON THE BRAWL FLOOR, and that was not a near miss. Some builds ago it was given its own position on that screen — pinned into the same strip as your cards, at a stacking order UNDERNEATH the deck — so it was not merely awkward to reach, it was behind the bar and could not be tapped at all. The whole chat now rides above every piece of furniture any game puts up, and where it parks is MEASURED rather than guessed: it finds whatever the screen keeps along the bottom, the D-pad and the brawl's card deck included, and sits clear above the highest of them. AND OPENING IT MOVES NOTHING. The panel is painted over the game rather than inserted into it, so the board, the table, the well and the ice are pixel-for-pixel identical whether the chat is shut, open or being typed into — checked at both fold sizes on all five games that have chat. Two related faults went with it: leaving one online game for another used to leave the chat parented to the screen you had left, so the new game got a chat with no size in no place, and tapping an emoticon with no match running left the panel hanging open with no way to tell whether anything had happened."],["v0.410","BIT-BRAWL OPENS THE SHOW AGAIN, AND THE UPDATES ACTUALLY LAND. THE CIRCLE IS GONE. Last build gave Bit-Brawl a round seat of its own between ALBUM and MART; on second look it belongs on the bill with everything else, so it is back under the curtain as the FIRST act — the one standing there when you walk in — with CROWN DELUXE second and the rest of the arcade behind it in unlock order. The row underneath is the two posters again, ALBUM and MART, an even pair with nothing between them. THE D-PAD FINDS THE POSTERS NOW. Pressing DOWN on the marquee used to sail straight past ALBUM and MART and land on the GIGS bar two rows below, because the old rule scored a tile by how far it was as the crow flies — and the full-width bar is dead centre while the two posters sit either side of it. It measures the ROW first now, and the tile on it second, so DOWN means the next row down and LEFT and RIGHT stay on the row you are already on. AND THE GAME STOPS SERVING YOU AN OLD COPY OF ITSELF. Three faults reported this week — a chat box that still said SAY SOMETHIN, a speech icon and a green arrow that were taken out two builds ago, and the whole screen sliding down when the keyboard opened — were all one thing: the phone was quietly holding on to an old build and never fetching the new one. The page was asking browsers to CHECK whether their copy was still current, and some of them were happy to answer that question from their own pocket. It now tells them not to keep a copy at all, so what you open is always what was last shipped."],["v0.409","THE PARLOUR TIDIES UP: NAMES ON FILM, TALK OFF THE TABLE, AND CONTROLS YOU CAN ALWAYS SEE. THE TWO NAMES MOVED OFF THE INKLINGS. Yours and your rival's were being written at a fixed height near the top of the screen, and on the Crown table that height happened to be the middle of both round portraits — so the name sat across the face of the very inkling it was naming. The portrait is measured now and the name is parked just underneath it, and it is dressed for the place: a strip of black film with a row of sprocket holes along the top and bottom, running off its own edge of the screen — yours to the left, theirs to the right — the same reel motif that greets you at the front door. The two colour coins follow it down. THE COMBO COUNT IS HEAVIER. At pixel-font size the × sign is a thin little cross that reads as a smudge; it is a proper chunky x now, with a stroke on top of the outline so x2 is unmistakably x2, and it lands in the middle of the felt rather than up where the chat sits. TABLE TALK IS OFF THE BOARD. Everything to do with chat was pinned to the bottom of the screen, and the table takes nine tenths of it — so the typing bar sat across the near rail and every speech bubble floated up over the felt from underneath. The bar is now squeezed into the clear strip between the rail and the D-pad, where the keyboard belongs and where it covers no part of the table at all; the bubbles have moved to the TOP, under the two inklings and their names, and grow downward from there. AND THE D-PAD DOES NOT DISAPPEAR ON THE RIVAL'S SHOT. Nothing was hiding it — there was simply nothing left to see: the parlour is the one room the game deliberately runs the pad OVER, so it was knocked back on top of the player's own half-strength setting, and half of a half over a dark green felt in a dark bar is invisible. The pad has a floor in this room now, and a soft shadow under it so it can never sink into the table. Your own opacity setting still counts everywhere it always did — it just cannot take the controls away from you here."],["v0.408","THE MART ASKS BEFORE IT SPENDS. Tapping a pack on the shelf used to buy it on the spot, with nothing in between — and because the card reveal is dismissed with a tap of its own, that same tap could land straight back on the shelf and buy a SECOND pack you never meant to open. Now every paid pack asks first: what it is, what it costs, what you are holding, and a plain YES or NO. Only YES spends anything, NO simply puts you back on the shelf, and if you cannot afford it the pack says so instead of offering a button that would fail. On top of that the shelf is deaf for a moment after the reveal closes, so the tap that dismissed your cards can never be read as a purchase — not for a paid pack, and not for one of your free ones either."],["v0.407","NOTHING MOVES WHEN THE KEYBOARD COMES UP, AND NOTHING ASKS YOU ABOUT TUTORIALS ANY MORE. THE BOARD NO LONGER SLIDES UP THE SCREEN WHEN YOU TAP THE CHAT BOX. That was the game doing what it was told: a software keyboard shrinks the viewport, and on the browsers that shrink the LAYOUT viewport rather than just the visible part of it, the whole game was being re-sized to the strip that was left and every screen shifted up into it. There was a guard against this but it could only ever catch the other kind of browser. So the fit is now FROZEN outright while any text box has focus: the game keeps exactly the size it had, and the keyboard simply covers the bottom of it — which is what a keyboard is supposed to do. No resize, no shift, nothing to put back afterwards, and a genuine screen change (turning the phone, opening the fold) is still honoured the moment you are done typing. THE D-PAD ALSO STAYS PUT NOW. The last build hid it for every text field; it does not need to, because the keyboard covers it anyway. It is hidden only in the one case where it would genuinely be in the way — when the box you are typing into would otherwise sit underneath it — and that is measured rather than assumed. THE FIRST-PLAY TUTORIAL PROMPT IS GONE. Being stopped at the door of a game you have just unlocked to be asked whether you would like a tutorial is annoying, and it is worst for exactly the new player it was meant to help. The ? in the top corner carries HOW TO PLAY and the full walkthrough, it is on every game, and it is there the moment anybody wants it — so nothing opens a tutorial unless it is asked to. AND THE CHAT BOX IS TWO EQUAL BOXES. The green arrow is gone (a button that says SEND says what it does), the placeholder is simply TYPE, and the two sit side by side at exactly the same size with the emoticons on a single row above them — no icon, no three-dots button, nothing hidden behind anything."],["v0.406","BIT-BRAWL GETS ITS OWN SEAT, EVERY GAME PAYS CUPS, AND THE PAD GETS OUT OF THE WAY WHILE YOU TYPE. BIT-BRAWL IS OUT OF THE CAROUSEL. It is the game the whole place is built around and walking three arrows to reach it was wrong, so it now sits in a circle of its own between ALBUM and MART — logo and name on one line with the Japanese underneath, the two posters curving where they meet it so the three read as one control rather than three boxes. The bill is ten acts now and the arrows, the count and the dots all follow automatically. THE PAGE DOTS ARE BIG ENOUGH TO MEAN SOMETHING. Five-pixel dots told nobody anything: you could not count them and you could not tell there was more to browse. They are proper squares now, and the one you are on is half again as wide and lit in the house red. AND THE BOULEVARD SHOWS OFF WHAT YOU JUST UNLOCKED: earn the cups for a new game and the curtain walks straight to it when you come home, with a gold ring and a shake so there is no missing it — once, not every time. THE WHOLE HOME SCREEN IS ON THE D-PAD. Left and right walk the bill, up and down move between the marquee, the three buttons and the gigs bar, and every option is reachable without touching the glass. You can also just SWIPE the act itself — a short drag still counts as a tap and opens the game, so nothing was taken away. THE D-PAD STANDS DOWN WHILE YOU TYPE. A software keyboard already takes half the screen; the pad underneath it was taking most of what was left. Now any text box — chat, your inkling's name, anything — puts the pad away until you are done, and it comes straight back. Nothing is paused and no game is touched: it only stops the pad being drawn. EVERY GAME PAYS CUPS NOW. Cups are the one currency that opens the rest of the arcade, and until this build only Bit-Brawl and online wins paid any — so somebody who liked Tetr-Ink or the rink could play all night and never move a single gate. A stage clear in any mode is a win and pays exactly what a Bit-Brawl win pays. BOTH NAMES ARE ON EVERY VS SCREEN: yours top left, theirs top right, in Crown Deluxe, the rink, Tetr-Ink and Ink Panik — you could previously be several minutes into a match with no idea who you were playing. AND THE CHAT IS ONE LINE. It used to be a fold-away tab with a grid of emoticons stacked on top of a text row — a two-storey box thrown over the board every time you wanted to say hello. It is now a single bar: icon, text box, SEND, and a ··· that opens the emoticons above it. The bubbles lost the little spike hanging off the corner, the speaker's name moved to the top of the bubble where you can actually read it, and they clear after five seconds instead of ten."],["v0.405","THE BOTS PLAY IN FRONT OF YOU, ONE PENALTY IS ONE PENALTY, AND THE BILL REMEMBERS WHAT YOU PLAYED. YOU CAN WATCH MASA AND MUNE TAKE THEIR SHOT NOW. A person at the far rail streams their cue over the wire while they aim, so you see the shot coming — the bots sent no such thing, so the ball simply fired itself with no cue anywhere on the table. Their shot already contains everything the picture needs, so the cue is rebuilt from it: it lines up, holds a beat, draws back, and then fires the very same shot. Nothing about the table itself changed — the cue is a picture and the physics never reads it. ONLY ONE RING EVER COMES BACK. There were two separate penalties — one for sinking the striker, one for sinking the wrong colour — written independently, so a single unlucky shot that did both put TWO of your rings back on the table. Two back for one bad shot outruns any rate you can sink them at, which is exactly why matches were becoming unwinnable. Both fouls still cost you the turn and still cost you a ring; what they can no longer do is stack. AND A RING GOES DOWN THE HOLE INSTEAD OF BLINKING OUT OF EXISTENCE. Nothing ever animated a pot — the moment a ring touched a pocket it was gone from the next frame. On your own colour nobody minded; on a wrong-colour ring it read as broken, because the ring vanished and the penalty ring flashed into the middle in the same breath. Every ring now slides the last of the way into the pocket, shrinks and fades, and the penalty ring waits until it has finished before announcing itself. THE RINK BOTS FOLLOW THE RULES. Masa and Mune were creeping one square at a time and turning whenever they felt like it, because the room has never had the faintest idea what the ice looks like — no rocks, no key, no lock, no exit. But your own machine does, so they are skated here now, through the same slide the D-pad goes through: cardinal only, all the way until something stops them, exactly like you. And they are sharp — every possible slide is scored by running the floor's own solver from where it would land, so they take the move that genuinely leaves them closest to the door. MASA is hard, MUNE is expert and quicker with it, and both clear floors in half the time they used to. THE CAROUSEL REMEMBERS THE LAST GAME YOU PLAYED. Walk out of Tetr-Ink and Tetr-Ink is what is under the curtain when you get back — v0.399's always-rewind-to-Crown-Deluxe is withdrawn. It follows what you PLAYED, not what you last browsed past. AND THE ARROWS ARE UNMISSABLE: big faceted gem triangles in the Zelda-rupee spirit, glinting and breathing, pulled out over the edge of the curtains instead of tucked behind them. THE MART WEARS THE ALBUM'S BAR. Same shape as the album — BACK hard left, the title hard right — with a second row underneath carrying INK, LUNES and REELS across the full width. The separate black purse block that used to sit below the bar and eat a strip of the shelf is gone, and so are the name and the level: in a shop the only numbers that matter are the ones you can spend."],["v0.404","WALKING OUT COSTS YOU, THE CUE CAN BE PUT DOWN, AND EVERY MATCHUP RUNS ON ONE CLOCK. LEAVING AN ONLINE MATCH IS A FORFEIT NOW, in all five games. It used to cost nothing at all: you could walk out of a game you were losing, pay no price, land back in the room and be challenged straight back into the same match — which quietly made every online result optional. Leave now and the other player takes it, you drop 25 cups, the match is cancelled on the spot, and you go to the boulevard — not to the room, not through a connecting screen, and with a quiet window in which nothing can pull you back in. THE CUE HAS TWO HALVES AND YOU CAN CHANGE YOUR MIND. The pale shaft nearest the ring slides the ring; the dark grip is what you pull for power — and pulling used to be measured from the RING rather than from where your thumb landed, so the instant you touched the grip you were already past the minimum and every release fired a shot. There was no way to back out. Power is now how far you actually drew the cue back, so a press and a release with no pull behind it fires nothing: the cue goes down and the ring is yours to move again. EVERY CONNECTING ANIMATION RUNS AT THE SAME SPEED. Bit-Brawl's solo search took 8.6 seconds and every online matchup took 4.6, so the same screen felt unhurried in one game and snatched away in another. Bit-Brawl solo was the right one; everything now runs on its clock, MATCH FOUND lands at the same moment in all of them, and the playing-field perimeter is drawn behind the two inklings so they are standing somewhere instead of floating. AND THE BUBBLES ACTUALLY PAY. This is a real bug and it has been there since v0.400: the tap handler marked a bubble spent and THEN asked the collector to collect it, and the collector's first line is to ignore anything already marked spent. Every bubble popped on a connecting screen paid absolutely nothing. Fixed — three bubbles on every connecting screen, five or six on a victory, one or two on a defeat, and all of them pay. A TUTORIAL YOU CHOOSE. The first time you open any minigame it asks whether you would like the tutorial, once, and never again; say no and it tells you where to find it. Every game now wears a ? in the top corner with HOW TO PLAY and TUTORIAL behind it. The Bit-Brawl lesson teaches your HANDS first — you have four cards, drag one onto the stage — before the word showstopper is ever mentioned, and the town tour no longer ambushes you with a brawl lesson nobody asked for. THREE TABS ON THE GIGS WALL: DAILIES, GIGS, ACHIEVEMENTS, side by side. The 7-Day Jackpot has its own tab now instead of sitting on top of the gig list pushing the heading off the screen and the rows down behind the D-pad — and the tabs were never laid out as a row in the first place, which is why they always looked cramped. THE THEME PLAYS ALONE. The chiptune band could still strike up underneath the record on the title and home screens, because five different places can start it and it only takes one of them firing in the wrong order. The refusal now lives at the band's own front door, where no caller can get around it. The record is also renamed press-start.mp3, after the song."],["v0.403","TETR-INK: THE WELL YOU CAN ACTUALLY SEE. Odaroo photographed four faults in one screen and they turned out to share a single root. THE WHOLE PLAYFIELD IS ON SCREEN NOW. The well was being sized against a height that secretly included the 236 pixels of empty space reserved for the D-pad, so on the unfolded screen an eighteen-row well was built 582 pixels tall inside 572 pixels of room and then CENTRED in it — the top row sat a pixel off the top of the phone and the bottom row sat underneath the pad. That one arithmetic slip is every symptom at once: pieces seemed to fade in out of nowhere as they fell into view, the floor you could see was not the real floor, and rows filling and clearing down at the bottom happened where nobody could watch them — which is why lines looked as though they never cleared. The room is measured honestly now, right up to the top of the pad and no further, and every one of the eighteen rows is on screen on both folds. PIECES ARRIVE WHOLE, AND IN THE MIDDLE. Every piece used to start at the same column with its top row above the ceiling, so a square appeared as its bottom two pixels and grew into itself on the way down, sitting left of centre while it did. Each piece now starts from its own width — dead centre of a ten-wide well — with all four blocks on the board from the first frame. JUNK IS ODAROO'S RULE NOW: EVERY FOUR LINES YOU CLEAR SENDS THE OTHER PLAYER ONE ROW, banked across drops so four singles are worth exactly as much as one TETR-INK and nothing is ever wasted; clear back-to-back and the meter fills faster, so playing quickly genuinely buries them sooner. And the rows themselves are proper junk — solid blocks with one or two holes punched in at random, challenging but always clearable, instead of the same single gap every time. THE FORFEIT DOORS MATCH. FORFEIT and KEEP PLAYING are one size on both folds, with a green that can actually be read. And the column beside the well reads like a scoreboard rather than a shopping list: each stat is a small caption with its number big underneath it, ruled apart, and FORFEIT no longer hangs out over the edge of its own button. Under all of it, three new checks that could not exist before — the game now proves to itself that a full row clears, that a piece arrives whole and centred, and that every row of the well is above the D-pad, at both screen sizes, before anything can ship."],["v0.402","PRESS START — A NEW THEME TUNE. The record on the turntable is a different song now: PRESS START, one odaroo wrote years ago, replacing the old Inkville theme as the music of the whole front of house. It plays the same way it always did — one unbroken performance across the marquee, the boulevard, the album, the mart, the profile and the gigs wall, lifting the needle when you step into a game and dropping it back on the same groove when you come out — at the same quarter volume, looping seamlessly. The one thing underneath: the recording now carries its own cache stamp, because the room hands the audio out with a seven-day cache and without that stamp every phone would have kept humming the old tune for a week. The 8-BIT switch in the equalizer still plays the chip cover of the ORIGINAL theme, so the two voices are now two different songs — pick RECORD for Press Start."],["v0.400","THE BOTS PLAY IN FRONT OF YOU, NOBODY INTERRUPTS YOUR MATCH, AND ONLINE TURNS NAVY. The online room got the pass it needed. FIRST, THE THING THAT KEPT HAPPENING: a CONNECTING screen and a MATCH FOUND card could drop on top of a game you were already playing. The room itself will no longer make a second match for anybody who is already in one — whoever asks and however they ask — MASA and MUNE cannot send a challenge at all (they only ever answer one), and the game refuses to draw a connecting screen over a live match even if something upstream gets it wrong. Three locks on one door. SECOND, YOU CAN ACTUALLY WATCH THEM PLAY. MASA and MUNE keep a real Tetr-Ink well and a real Ink Panik board of their own now — real pieces, real swaps, real chains — and they publish it several times a second, so the rival board beside your own is their game as it stands, not a box that breathes and shows nothing. Junk you send lands in their well and genuinely buries them; junk they send is what their own clears earned. And on the ice they SKATE: their inkling glides across your copy of the floor while the shared clock runs down, instead of standing perfectly still for ten seconds and then announcing a cleared floor out of nowhere. THIRD, THE SMALL ONES. The waiting-screen bubbles are yours alone — no race, no instructions, no caption; they float, you tap them, they pay. The rink's mid-match LOBBY button was the last one in the game and it is now a FORFEIT that asks first, like Tetr-Ink's and Ink Panik's. Every game's doorstep reads the same three words — SOLO in green, ONLINE in navy, BACK in black — and the whole online room, the roster, the challenge card and all, has moved from purple to a deeper navy. Ink Panik's stats can no longer end up behind the D-pad on a folded phone."],["v0.399","THE FILM REEL FOLLOWS YOU IN, THE PAGE ALWAYS OPENS AT THE TOP, AND THE BILL REWINDS TO CROWN DELUXE. Three small things that make the place feel tidier. THE GIGS & ACHIEVEMENTS SCREEN NOW WEARS THE BOULEVARD'S OWN HEADER — the same film-reel bar, with your inkling sitting in its little camera at the left, your level chip, your name and your cup and ink counters, sprocket holes and all. It is not a copy of that bar, it IS that bar, drawn by the same code, so the two screens can never drift apart from each other; and because it is the real reel, collecting a badge reward makes the ink counter climb right there in front of you instead of somewhere you cannot see. THE SCREEN ALWAYS OPENS AT THE TOP. However far down the badge album you scrolled last time, walking back in puts you at the first thing on the tab again — nothing is remembered, nothing is restored, and switching tabs does the same. AND THE MARQUEE REWINDS. The featured-game carousel on the boulevard used to leave you wherever you had stopped browsing; coming home now always brings the curtain back up on CROWN DELUXE, the first act on the bill. The arrows still walk the whole bill exactly as before once you are there."],["v0.398","GIGS AND BADGES SPLIT INTO TWO TABS — AND THE 7-DAY LADDER BECOMES A CASINO FLOOR. One screen, two tabs across the top: GIGS and ACHIEVEMENTS. The first holds the daily pull and the day's objectives; the second holds the badge album. The strip is pinned above the list so it never scrolls away under your thumb, each tab wears a red counter when something is waiting on it, and switching is instant — no screen wipe, so the theme tune does not even blink. Every old route into the gigs screen now lands on the GIGS tab automatically, so nothing can send you to the wrong place. THE SEVEN-DAY LADDER IS NOW A JACKPOT RUN. Six lit drums sit in a row under a marquee of chasing bulbs, and DAY 7 runs the whole width beneath them as a gold JACKPOT bar with its own racing lights. The payout roughly doubles as the week goes on — 1,000 ink on day one, 12,000 by day six — reels join the payout at day four, and day seven pays 25,000 ink, 8 lunes, 5 reels AND the GLITCH CROWN. Days already taken turn green and check themselves off; today's drum glows gold and pulses TAP! until you pull it; and the panel tells you plainly that missing a day drops you back to rung one. AND THE ICE GETS ITS OWN MUSIC BACK. The theme tune was playing OVER Ink Rink's soundtrack — the record had been given the rink on purpose back in v0.391 and it simply sat on top of the game's own band. The rule is absolute now: the theme owns the FRONT OF HOUSE only — the marquee, the boulevard, the album, the mart, your profile and the gigs screen — and every game mode without exception gets its own band while the record parks at the door and waits, picking up from the same second when you come back out. Ink Rink also has a proper track of its own for the first time, CHASE REEL, instead of the 8-bit cover of the theme it had been quietly playing."],["v0.397","THE BADGE WALL BECOMES A TROPHY ROOM — AND EVERY BADGE NOW PAYS. Fifty-eight achievements, and not one of them is just a tick any more. Each badge is a proper stamped ROSETTE: ribbon tails, a fluted starburst, a milled rim and its game’s own crest pressed into the middle — in BRONZE, SILVER or GOLD depending on how hard it was to earn. They hang two to a row, always in pairs, never one stranded on its own, and every group on the wall now holds an even number of badges so the pairing never breaks. TAP ONE and it opens as a full card: the medal blown up under a slow rotating sunburst, the name, what it took, how far along you are if you have not got it yet, the day you earned it if you have — and THE REWARD. Because every badge pays now. An EASY one hands you 100 to 500 ink. A MEDIUM one pays 500 to 1,000 ink plus a reel or two. A HARD one — a thousand cups banked, all 37 carts collected, sixty seconds untouched in Bullet Ballet — pays 1,500 to 3,000 ink, three to five reels AND a lune. Press COLLECT and the money flies up to the reel; the card turns to COLLECTED with a green tick and can never be claimed twice. Anything you have already earned is sitting there waiting to be collected right now. AND THE GIGS BAR ON THE BOULEVARD SHOWS OFF. It used to just say its name. Now a strip of rosettes rolls across it — the ones you own in full colour, the rest greyed out — with your running count underneath and a gold line when there are rewards waiting. Land the cursor on it, by D-pad or mouse, and the strip speeds up and the medals take a bow. The theme tune also drops to a QUARTER of the music volume (half was still too loud over the band), and it now keeps playing straight through both the GIGS and the ACHIEVEMENTS screens instead of cutting out at the door."],["v0.396","ONE DOOR OFF THE RECEIPT. The end-of-match card used to hand you three ways back to the room at once — a LOBBY button, a little box asking you to TYPE LOBBY, and a GO beside it — stacked under the result on every online game. It was clutter on the one screen that should feel like a curtain call. All of it is gone. Every victory and defeat receipt in town now shows exactly what it should: COLLECT your winnings, or HOME. Bit-Brawl, Crown Deluxe, Rink Royale, Tetr-Ink Online and Ink Panik Online all read the same way. Nothing is lost — the way out of a match that is still running is untouched, so nobody can ever be stranded mid-game."],["v0.395","THE BOULEVARD BECOMES A MARQUEE — AND 50 BADGES GO UP ON THE WALL. The home menu is no longer a wall of boxes. ONE act now stands under a red theatre curtain at the top of the screen — Mario-3 drapes, a scalloped valance, gold ropes — with its crest big and its name underneath, and the arrows either side walk you along the whole bill: Crown Deluxe, Bit-Brawl, Ink Rink, Superstars, Ink-Put!, Tetr-Ink, Ink Panik, Dance Dance Ink, Ink-Tar Hero, Bullet Ballet, Lumen Ink. Everything you have unlocked is on the bill, and after the last of them stands the ONE next locked game with its price in cups, so you always know what you are saving for. The D-pad walks it too. Beneath the curtain, CARTS is renamed the ALBUM and shares a row with the MART, and a full-width GIGS & ACHIEVEMENTS bar runs along the bottom. Behind that bar is the new part: FIFTY achievements, spread across every single game in town and the house itself. Each one is a Steam-style pixel badge wearing its game’s own crest — grey and stamped ? until you earn it, in full colour with a green tick once you have, and a progress bar underneath for the ones you are part-way through (3/10 wins, 22/50 lines). Earn one mid-game and it drops in from the top of the screen like a cheat code unlocking, sparks twice, and lifts away on its own. Everything is remembered in your save."],["v0.394","THE THEME FOLLOWS YOU INTO THE PROFILE — AND PICKS UP WHERE IT LEFT OFF. Two more pieces of the same idea. Your inkling’s PROFILE joins the marquee, the boulevard, the CARTS album and the MART as a screen the record owns, so the tune carries on unbroken while you are changing gear, costumes and frames. And the bigger one: the theme no longer starts over every time you come back from a game. Walking into a match now LIFTS THE NEEDLE AND LEAVES IT WHERE IT IS — the game’s own music takes the room — and the moment you step back out onto any of the theme’s screens the record drops onto the same groove and carries on from that exact second. Finish a brawl at the two-minute mark of the song and you come home to the two-minute mark, not the opening bar. The same is true if you flip between the RECORD and the 8-BIT voice in the equalizer: switch back and the recording resumes where it stood instead of rewinding."],["v0.393","THE MART BECOMES A SOUVENIR SHOP, THE CARDS GET A PLAIN BLACK BACK, AND THE THEME TUNE STOPS RESTARTING. The MART is dressed like the CARTS album now — the same perforated stamp wall behind it, only the captions read like a gift-shop counter: SOUVENIR, DUTY FREE, KEEPSAKE, TRADING POST. The two screens finally look like one room, one selling what the other collects, and the old sunburst behind the shelves is gone. THE CARD BACK IS SIMPLE AT LAST: a black card, one white ink drop, and the same little contact dots the cartridge artwork wears, one row along the top and one along the bottom. No INKVILLE lettering, no pattern, no ornament — and it is the same face on the small carts, the big ones and every flip in between, so the whole unfold reads clean. AND THE RECORD PLAYS THROUGH THE WHOLE FRONT OF HOUSE. odaroo’s theme now owns the marquee, the boulevard, the CARTS album AND the MART as one unbroken performance — walking between any of them never restarts it and never gaps it. Step into a game and it hands over to that game’s own band, exactly as before. The record also sits at HALF volume now, so it stops shouting over the 8-bit music instead of sitting level with it."],["v0.392","MASA AND MUNE ARE ALWAYS IN THE ROOM — AND NOBODY KNOCKS WHILE YOU PLAY. Two new players live in the online room and never leave: MASA, who is an easy game, and MUNE, who is a real fight. They stand on the roster like anybody else, they accept instantly, and they can be challenged to ANY of the five online games — Crown Deluxe, Bit-Brawl, Ink Rink, Tetr-Ink and Ink Panik. MASA misses shots, dawdles on the ice and plays cheap carts; MUNE lines its shots up properly, clears floors fast and pushes junk at you twice as often. Each has its own inkling: MASA in coral with a bell and a cape, MUNE in grape with goggles, an antenna and a medal. They are not pretending — every move they make travels the same wire a person's moves travel, which also makes them the game's own testers: they play every mode all day and write down anything odd they meet, so bugs are found by them instead of by you. AND THE SECOND HALF: A CHALLENGE CAN NO LONGER INTERRUPT A MATCH. An invitation arriving mid-game used to pop up over the top of whatever you were playing. Now, while you are in an online match, the room tells everyone you are IN GAME and the card is held back — not thrown away. Finish the match and, if their challenge is still open, it pops up then and you can take it. If it expired while you were busy, you are told afterwards who knocked and to go and check ONLINE for them, instead of never finding out at all. (Being in an online Tetr-Ink or Ink Panik match also finally reads as IN GAME to the rest of the room, which it never did.) AND THE THEME TUNE PLAYS PROPERLY AT LAST. The record now starts the instant the cartridge goes into the Game Boy and runs unbroken from there — through the boot, through ODAROO PRESENTS, onto the INKVILLE marquee AND straight on into the boulevard, without stopping, restarting or gapping between screens. The 8-bit band no longer starts up underneath it: the end of the intro used to wake the chiptune on the title screen no matter what, so odaroo’s song and the square-wave band were playing over each other. And if you have chosen the 8-BIT voice, the home menu now plays the chip cover of the theme too — whichever voice you pick, the title and the boulevard are singing the same song."],["v0.391","INKVILLE HAS A THEME TUNE — ODAROO’S OWN. The song he wrote for the game is now the game’s music. It plays on the TITLE SCREEN, under the flickering marquee, and it plays on the ICE in Ink Rink, looping, from the moment you press the power button on TAP TO LOAD — the same touch that has always woken the sound up, so nothing changed about how you start it. AND IT COMES IN TWO VOICES. The chip learned the song: the whole tune was taken off the recording note by note — its key, its tempo, the low riff it opens on and the big hook the record lifts an octave — and rebuilt on the same square-wave band that plays everything else in Inkville, so the 8-bit cover is unmistakably the same song, just born in 1989. Both versions live in the game at once. In the INKAMP equalizer there is a new THEME switch: RECORD plays odaroo’s track, 8-BIT hands it to the band. The music slider rides both, MUSIC: OFF silences both, and if the recording cannot be reached for any reason the chip picks the song up without a gap of silence. The 8-bit cover also sits on the shelf like any other track, so the jukebox can play it on its own."],["v0.390","INK PANIK GOES BIG — AND GOES ONLINE. The board was a postage stamp with nothing around it; it now sits in the same frame Tetr-Ink wears and is built to the same size, so the two puzzle towers finally read as a pair. On the LEFT, under your inkling, a proper column of boxes: the STAGE you are on, the SPEED LEVEL you are fighting, and a third, longer box that carries your run — time, best chain and the ink in the pot. AND THAT THIRD BOX IS THE RIVAL. Ink Panik is the FIFTH game in the online room: PLAY, ONLINE or BACK on the doorstep, the same connecting screen the others dial — the dots, the silhouette roulette, your rival stepping out of the dark with their real name — and then two boards, side by side, theirs drawn live in miniature in that third box while you play. THE CHAIN IS THE WEAPON. Every chain you land FORCES THEIR STACK UP: a x2 pushes one row at them, a x3 pushes two, and one fat bite of six panels or more is worth a row of its own. Their rows arrive on yours half a second apart, announced before they land, and a FREEZE will not save you from them — a freeze holds off the clock, not the other player. First stack to touch the ceiling loses; the winner takes 25 CUPS and the ink. TWO THINGS THAT WERE BROKEN EVERYWHERE ARE FIXED. Opening a pack no longer hides your haul: the bottom row of carts and the TAP TO CONTINUE line were being painted underneath the D-pad, so the overlay now reserves the exact height of the pad and a big haul shrinks its carts to fit. And HOLDING A CART TO READ IT NO LONGER STOPS THE GAME. There is only one dialog box in Inkville, so a card opened over a stage-clear receipt or a game-over screen REPLACED it — the CONTINUE and DIP buttons were gone for good and you were left parked on a frozen screen. A card view now remembers whatever it covered and puts it straight back when you close it, in every mode, every time."],["v0.389","THE MART GETS ITS SHELVES BUILT PROPERLY — AND HANDS YOU FREE PACKS. The wallet used to be three bits of text floating over the wallpaper, which is a hard thing to read at a glance when it is the whole reason you are in the shop. It is a BLACK BOX now, sat across the top: three lit chips, each with its own coin — the ink drop, the lune and the film reel — the number big and gold above its name. You can tell what you are holding and what you are short of without squinting. THE PACKS COME OFF THE WALL AND ONTO A SHELF. They were a jumble — two side by side, one stranded underneath. Now they are a single column, cheapest at the top and dearest at the bottom: the NEWSREEL, then the FEATURE FILM, then the PREMIERE GALA. Each one is a full-width row with its artwork on the left and, on the right, everything it actually comes with — how many carts, the exact odds for every rarity, and its price on a slanted ink tag. No more tapping the little question mark just to find out what you are buying. AND THEY LOOK LIKE WHAT THEY COST. The Premiere Gala sparkles: six little stars twinkling around its edges and a bright sweep of light passing across it, purple and gold and quite obviously the good one. The Feature Film catches a softer silver sweep — shiny, but it knows its place. The Newsreel is plain red paper, because it is the daily rag. YOU NOW START WITH TWO FREE PACKS. There is a green slot at the top of the shop holding them, with two pips showing how many are left. Spend one and it refills on a four-hour clock — the slot tells you exactly how long until the next one lands, and when one is waiting, a RED DOT appears on the MART tile back on the boulevard so you know to come and get it."],["v0.388","TETR-INK GOES ONLINE — AND THE WELL STOPS PLAYING SMALL. Two players, two wells, ONE bag of pieces: the deal comes from the room, so nobody wins because they were handed all the long bars. Clear two lines and a row of junk rises on their side; three lines sends two; a full TETR-INK sends three. The junk does not appear from nowhere — it is painted across the top of their well as a warning first, and only comes up once they have placed their next piece, so there is always one move in which to answer it. Under NEXT and HOLD there is now a THIRD box: their well, in miniature, live — you watch their pieces fall and their lines clear while you play your own, and they are watching yours. Get buried and it is over; win it and you take 25 cups, the same as the table, the ring and the ice. It walks in through the same door as the rest: a doorstep with PLAY and ONLINE, the same connecting screen, the same waiting-room bubbles, the same room. AND THE WELL IS THE BIG ONE FROM THE FIRST GAME. Tetr-Ink used to open small and only grow after you lost — because the very first measurement was taken while the screen was still hidden behind the ink wipe, so the game sized itself for a phone that does not exist, and only a RETRY ever measured the real one. Odaroo liked the bigger well; it was the honest one all along. It is now the only one there is, in game one and in game one hundred. The NEXT and HOLD boxes also moved down, because a worn frame draws outside the inkling and its bottom edge was landing straight across the word NEXT."],["v0.387","ONE RULE BOOK FOR BOTH PLAYERS AT THE CROWN TABLE. The rival could stand its cue BEHIND the ball and fire backwards over its own shoulder — a shot you are simply not allowed to line up, because your aim has always been folded into the half-circle in front of your own base line. It was never given that rule at all; its angle went straight from its own arithmetic to the cue. Now there is one rule and it is mirrored for whichever rail you are sitting at: swing anywhere through the forward half-circle, left, across or right, and never back behind the ball. It is applied to the rival before it winds up, so the cue you watch it draw is the cue it fires, and it is checked again at the trigger for both sides. AND THE WRONG COLOUR IS A FOUL AT LAST. Sinking a ring that is not yours used to cost nothing but the turn — so a shot that dropped your last ring and one of theirs in the same breath just won you the match outright. Now any pot of a colour that is not yours brings one of YOUR OWN rings straight back onto the table, blinking itself in the way a sunk striker always has, and it comes back BEFORE the table is counted — so an illegal pot can never be the shot that wins it. Only a clean pot of your own colour keeps you at the table."],["v0.386","THE BOULEVARD GETS ITS RULER OUT. The home menu was a jumble of sizes — six half-width tiles up top, six full-width bars underneath, and the album and the shop stranded at the very bottom. Now the two things that ARE NOT games open the screen: CARTS and MART sit on the top row as one wide pair, and every single game below them — CROWN DELUXE, BIT-BRAWL, INK RINK and all the rest — is the exact same box as the next, two to a row, a fixed height so a two-line name can never make one row taller than its neighbour. THE 2x SHOUT LOST ITS WORD. The little comic starburst on an unplayed tile said 2x INK in two cramped lines; it now says one thing, big — 2x — and still bounces the way it always did. It is still the same bonus: the first run of any game each day pays double, and it comes back at midnight. AND THE PROFILE WAS PUT IN ORDER. The D-PAD switch was buried inside STYLE as a fourth rack tab, which is a strange place for the one control that can bring the controls back; it now sits in the left rail directly under STATS and STYLE, always one tap away. Your name moved DOWN so a worn frame can no longer clip the top of the letters, and a small pen sits beside it — the same pen now marks GEAR, COSTUMES and FRAMES, so it is obvious those can be changed. Those tabs lost their colour: they are plain paper with an ink underline on the one you are in. Colour belongs to the inkling, and you get to it by tapping the inkling itself."],["v0.385","THE BLACK BAR UNDER THE GAME IS GONE FOR GOOD — AND NO BROWSER IS TREATED AS A SPECIAL CASE EVER AGAIN. On Samsung Internet the game finished sixty to eighty pixels above the bottom of the screen and left a black strip underneath it, most obvious on TAP TO LOAD. On Chrome, on the very same phone, it never happened once. Five builds in a row tried to fix this by RECOGNISING Samsung and taking a strip off the bottom of the game on purpose, and the strip they took off was the black bar. The last attempt only took it off when it thought the browser had not admitted to its own navigation bar — but Samsung subtracts that bar from both of the numbers the test compared, so the test saw no difference, decided nothing had been reported, and took the strip anyway. Same bar, one build later. So all of it is deleted. There is no longer a single line anywhere in Inkville that asks which browser you are using in order to decide how tall to draw the game. The game is now exactly as tall as the window the browser says it has, in every browser, which is precisely what Chrome was doing right all along — and the only breathing room left at the bottom is the phone's own gesture bar, which the device reports itself and which works the same everywhere. The self-test changed sides to match: it used to prove the strip was being taken, and now it FAILS the build if the game ever stops short of the bottom of the screen by even a couple of pixels. Whatever browser this is opened in — Chrome, Samsung Internet, Firefox, Edge or something that does not exist yet — it fills the screen it is given."],["v0.384","THE ARROWS COME ALIVE — AND THE RAIN FINALLY FALLS ON TIME. In INK-PUT! the whole card cast tumbles down behind the arrows, and for months it only ever showed up AFTER you had lost a run and hit RETRY. The reason was a single line: the falling-cast pump checked which screen you were on 120 milliseconds after entering, but the screen swap does not finish until well after that, so the pump saw the OLD screen, decided the game was not running, and quietly killed itself forever. Only a retry — where you were already standing on the screen — survived it. Now nothing but the end of the run can stop the rain, and the sky is SEEDED at the deal, so the very first arrow you hit already has a downpour behind it. THE SCREEN WAS REARRANGED. The wordmark moved out of the right corner and up to the very top, centred beside the inkling, and the arrows now sit in the middle of the stage with nothing underneath them. THE STANDING TEXT IS GONE — the instruction line, the TIME! notice and the +INK payout lines that used to live along the bottom are all retired. A banked row simply locks in gold and says SAFE, one word, every row. And every arrow still waiting on you now BREATHES: a slow swell in and out, once every 1.6 seconds, with the one you must hit next breathing bigger and faster. Nothing tells you what to do; the row shows you."],["v0.383","THE ROOM COMES TO YOU. Online used to be a place you travelled to: tap a game, pick ONLINE, and the whole home menu was swapped out for a separate roster screen — so backing out had to walk you home and re-open the doorstep again, three screens to answer one question. The roster is now a POP-UP that opens on top of the home menu, exactly the way the doorstep does. Close it and you are simply home, with nothing loaded behind you. It is deliberately small and it never scrolls: who is here, a green lamp when the room is answering, REFRESH, one CHALLENGE button beside each name, and CLOSE. Anybody who is free sorts to the top, and if the room is ever fuller than the window it says how many more are waiting rather than growing a scrollbar the CLOSE button could hide behind. All three games — CROWN DELUXE, BIT-BRAWL and INK RINK — use it. The connecting screen was FIXED TOO. The roulette of silhouettes that cycles before your rival steps into the light was being drawn in a frame barely taller than one inkling, so every bounce clipped their head off the top and their feet off the bottom, and the name underneath sat on the artwork instead of below it. The stage now keeps a proper height on both the folded and the unfolded phone, the inklings stand on the floor with room to hop into, and the name — and the breathing dots under it — have a clear strip of their own. AND THE HOME MENU LOST ITS WELCOME LINE. \"LET'S PUT ON A SHOW.\", \"THE INK IS STILL WET.\" and the rest are retired: the tiles say what they are, and the first screen you see is quieter for it."],["v0.382","THE FRONT DOOR CALMS DOWN. The home menu no longer advertises that the games are online. CROWN DELUXE and BIT-BRAWL had a little pixel world with two messengers standing in front of it in their top-left corner, and a green ONLINE light stacked under their names. All of that is gone. The whole game is online now, so saying so on two tiles only made the first screen busier than it needed to be — the tiles read as the plain, clean signs everything else on the boulevard uses. Nothing about online play changed: the rooms, the roster, the chat and the challenges all work exactly as before, you just meet them when you walk in the door instead of being told about them from the street."],["v0.381","THE BLACK BAND UNDER THE GAME IS GONE. Samsung Internet opens at 50% zoom by default, and every fix in this game for Samsung was measured with it sitting there. Turn it up to 100% and Samsung starts telling the page the truth about its own navigation bar. The game was still taking a flat strip off the bottom on top of that, as if it had not been told, so it drew itself sixty to eighty pixels short of the glass and left a black band underneath. That is most obvious on TAP TO LOAD, where the cartridge and the handheld also sat too high, because they are centred in a box that was short at one end. The game now checks whether the browser has already accounted for its own bar: if it has, nothing more is taken and the game reaches the bottom of the screen; if it has not, the old clearance still applies exactly as before, so a phone left at 50% does not move a pixel. TAP TO LOAD ALSO GROWS WITH THE SCREEN. On an unfolded phone the cartridge and the Game Boy were drawn at folded-phone size, marooned in the middle of a big screen. The old scale correction only ever rescued a browser that lays out too wide, and an unfolded Fold is not wrong, just big. The boot screen now takes the room it is given, measured off both the width and the height so it can never outgrow the glass. It is done inside the page, not by telling the browser a lie about how wide the phone is: that road ends at v0.372 and it stays closed. And the game menu now clears the D-pad by a real margin instead of finishing four pixels inside it."],["v0.380","THE INK RINK GOES ONLINE — \"RINK ROYALE\", and it is hot potato. The rink now has a doorstep like Crown Deluxe and Bit-Brawl: you and a question mark facing off, SKATE for the solo climb you already know, ONLINE for the same room the other two games use — one roster, one chat, one challenge system. An online match is one shared clock and one floor each. It starts at twenty seconds and only ever runs down while somebody is actually skating. You take a floor while your rival watches; clear it and THREE SECONDS go back on the clock and the ice is theirs. Clear yours fast and you hand them a clock that has barely moved; dither, and you hand them one that is nearly out. Whoever is holding it when it reaches zero has lost, and the ice gives way under them. A win pays 25 CUPS — the same currency the other two online games pay, so the rink is no longer walled off from the gates that open the rest of the arcade — plus ink that grows with the floors you cleared. WATCHING IS REALLY WATCHING. Both machines build the identical floor, dealt from the match’s own seed and the floor number, and your rival’s real glides arrive over the wire and replay on your copy with their own inkling on the ice. You are not shown a summary of their turn; you watch them take it, the way Crown Deluxe lets you watch a cue being lined up. While it is their floor the board reads as untouchable, the D-pad does nothing, and the panel says WAITING FOR RIVAL — INK RINK PLAYING with 待機中 under it. Everything about the match — who you are playing, whose floor it is, the shared clock, the floor number, what a win is worth, and the way out — lives in the left column under the inkling, which is where every game in Inkville keeps its stats, so nothing can ever end up sitting on top of the ice on a folded phone. Accepting a challenge plays the same connecting screen the other two got in v0.375: the silhouette roulette, the breathing dots, 通信中, the bubble scramble, and the rival stepping into the light with their real name. And the rink has its own pre-flight check now — rkSelfTest() — which lays the screen out at both fold sizes, reads every line for contrast and clipping, proves a watcher cannot move the skater, proves the same floor builds the same ice twice, and plays a whole match through the real D-pad handler rather than poking at the game from the side."],["v0.379","THE SECOND MATCH. Playing one online game and then asking for another was broken, and all of it came down to a single line. When two players are put together, the game shows a connecting screen — your inkling, theirs, the dots — and there is a guard on it so that the three different things which all notice the same accepted challenge cannot each start it over. That guard was remembered against the RIVAL’S NAME, with no clock on it, and walking out of it early skipped the step that actually opens the table. So the first time a handshake did not finish cleanly, that person’s name stayed marked forever: the next match against them started nothing at all — no connecting screen, no table, a blank screen — while on their side a real game was already underway and the roster behind you kept announcing “ACCEPTED YOUR CHALLENGE” every couple of seconds. It is now remembered against the MATCH, not the person, it expires by itself, and the connecting screen is guaranteed to end in a game no matter what happens in the middle of it. Alongside it: the flag that says “I am already in a match” is now cleared when a match ENDS rather than only when you walk back to the room (press COLLECT on the receipt, as most people do, and it used to stay up forever, silently refusing every later challenge), and it lets go by itself after ten seconds of nothing being live. The repeated announcement is fixed at the source too — it was marking the challenge itself as read, and the challenge list is thrown away and rebuilt on every poll, so the mark never survived; it is now kept on your own machine and each answer is announced exactly once. NOTHING GOES QUIET AND KICKS YOU OUT ANY MORE. The room used to give your game away after ninety seconds of silence and let a challenge expire after thirty; a locked phone, a phone call, or a browser freezing a background tab all counted as silence. A challenge now lives three minutes and a match five, and an answered challenge clears itself in six seconds instead of hanging around to be re-offered. THE WAITING ROOM IS A GAME NOW. While the two machines find each other, bubbles of ink, reels and lunes float up over the connecting screen — and both players see the SAME bubbles, dealt from the match’s own seed. Whoever taps one first takes it and the other watches it fizzle out; the room settles the race, because it is the only one that can. Crown Deluxe and Bit-Brawl share the whole screen, so the couronne table now gets exactly what the brawl has always had: the roulette of silhouettes, the breathing dots, 通信中 under them, and the rival stepping into the light with their real inkling and their real name."],["v0.378","THE BATTLEFIELD TAKES THE SCREEN BACK. Bit-Brawl had quietly turned into a landscape painting with a game running along the bottom of it: the sky, the clouds and the mountains were eating about seven tenths of the screen and the actual field — where your cards land, where your inkling stands, where the fighting happens — had been squeezed into a strip above the cards. It is the other way round now. The arena runs from the cards all the way up to roughly four fifths of the screen and the wallpaper is a strip across the top, the way a stage has a backdrop rather than a backdrop having a stage. Both inklings are drawn much bigger and stand properly out on the field instead of sitting tiny in the corners, and they scale with the field, so they are the right size on a folded phone and on an unfolded one. Pieces you play now spread across the whole depth of the field rather than huddling in the old thin band, and flyers ride above them with room to spare. The reason it went wrong is worth writing down: the mountain line was pinned a fixed number of pixels above the cards and measured exactly once, a fraction of a second after the match began — so if the screen had not settled yet, the field was mis-measured for the entire match. It is now measured as a fraction of the real screen, several times on the way in, and again whenever the phone is turned or the fold is opened mid-match. The cards themselves are a touch smaller with a gutter down each side, so the last card in your hand can no longer run off the edge of a folded screen. TETR-INK NO LONGER LOSES A ROW WHEN YOU ARE WATCHING. During an online showstopper the spectator’s screen carries a RIVAL IS PLAYING ribbon across the top, and the well was being laid out as if that ribbon were not there — so the bottom line of blocks fell off the edge on the watcher’s screen only, and the two players were looking at different boards. The board itself was always identical; it was purely the well being drawn too tall to fit. The ribbon is now accounted for, the well is locked so the layout cannot squash it, and after it is drawn the game measures the real box and shrinks the blocks until all sixteen rows are genuinely on screen. Both players see every line. Also: the rival’s name in the versus bar and the cups-and-level line under each health bar were both too faint to read against their backgrounds, and are now properly legible."],["v0.377","THE SUPERSTARS SIGN STEPS OFF THE STAGE. Walking into SUPERSTARS, the big SUPERSTARS card dropped into the dead centre of the screen — right on top of the swinging pendulum and the sliding squares you are supposed to be timing. The card now holds in the empty strip along the top instead: under the inkling and the FIVE ACTS banner, above where the swing gauge lives. Same entrance, same fade, nothing sitting on the game."],["v0.376","THE D-PAD CAN NEVER GO MISSING AGAIN. Odaroo kept losing the on-screen controls after playing online — leaving a match, coming back to the menu, or the moment the BACK ONLINE message appeared — and once they were gone the only way back was refreshing the whole game. The rule that the pad is always there had been written down for builds but never actually enforced: anything that reached past the one function meant to manage it hid the pad for good, because nothing ever looked again. So it is a guard now instead of a note. One check owns the answer to should the pad be on screen, and the only things allowed to say no are the player’s own switch, the boot-up cartridge sequence and the secret Wednesday Jams stage. Everything else is overruled. It clears every way the pad can be hidden — hidden outright, made see-through, left carrying a class from a screen that tore itself down, or knocked clean out of the game box — and it also repairs the sneaky one: when the phone sleeps, or the chat keyboard opens and closes, the game can be left believing the screen is taller than it is, which parks the pad just below the bottom edge where it is present, perfect, and completely invisible. That now gets measured and put back. The guard runs on a heartbeat every second, on every screen change and dialog, every time the app wakes up or the network comes back, and on every single way out of an online match — leaving, forfeiting with the word LOBBY, the other player walking out, or losing the connection. And because a control you cannot get back is the worst kind of bug, there is now a door to it that never moves: a new D-PAD tab in your inkling profile, beside GEAR, COSTUMES, FRAMES and COLOR, with a plain ON/OFF switch and the opacity slider. ON is the default and stays the default; the setting is saved, so it survives a refresh. If the pad ever does vanish, that switch brings it straight back."],["v0.375","THE HANDSHAKE, AND A METER YOU CAN ACTUALLY SEE. Two things. First, both online games now share ONE connecting screen. Accepting a Crown Deluxe challenge used to drop you straight onto a table with no beat in between and nothing telling you who you were about to play; now you get the same handshake Bit-Brawl has always had — your inkling on the left with your name, a silhouette flickering through every colour and outfit in the game on the right, CONNECTING with three dots breathing underneath, and then your rival stepping out of the dark. What steps out is the REAL thing: their actual colour, their actual gear, their actual name, straight off the wire — the flickering before it is only silhouettes, so nothing false is ever shown lit. MATCH FOUND, and the same burning VS dives into the game. Bit-Brawl online gets the identical screen, because there is now only one of them: whatever is true of one is true of the other. It is deliberately short — about two and a half seconds — because online the other player is already sitting there waiting for you, and both screens are burning the same seconds. Names are also pinned to one line now, everywhere: a long name used to wrap and shove the whole stage about. Second, CROWN DELUXE MOVED THE STRENGTH METER TO THE TOP OF THE SCREEN. It used to sit just under the near rail — which is exactly where your thumb is while you are pulling the cue back, so you were charging a shot with your own hand over the one thing that tells you how hard. It now sits above the table: thumb at the bottom, reading at the top, nothing between your eye and it. It is measured off the HUD rather than dropped at a guessed height, so it can never end up under the inkling or the wordmark on either fold."],["v0.374","SAMSUNG WORKS AGAIN — AND THE PARLOUR GETS A POLISH. The big one first: v0.372 tried to make the game fill an unfolded screen by telling the browser the page was narrower than the glass, so the browser would blow the whole thing up. Chrome went along with it. Samsung Internet did not, and the game became unplayable — which is a far worse fault than the one it was fixing, so it is withdrawn completely. A big screen draws the game at its honest size again, exactly as it did up to v0.371. The reason it will not be tried again this way: asking for a width AND a scale at the same time is a contradiction, and every browser is free to settle it differently. Filling a big screen properly is a job for the page itself, not for lying to the browser about how wide the phone is. THE LINE COMES BACK BY ITSELF NOW. Glance at another app and the browser freezes this page, the room stops hearing from you, and you used to come back to a game that only looked connected. Every knock on the room is now counted; three misses and the game says RECONNECTING out loud and keeps trying every six seconds until it gets through, and the instant you come back to the app it knocks immediately instead of waiting. The room also waits a minute and a half before giving your match away, instead of forty-five seconds, so a short interruption no longer costs you a game you were winning. CROWN DELUXE: the cue GLIDES. Both cues used to be drawn straight from figures that only change in jumps — yours once per touch, theirs twice a second off the wire — so a swing read as a stack of separate frames. The picture now eases toward the real thing every frame, so it is one continuous movement; the shot itself still fires from the real aim, so nothing can drift. A penalty ring coming back to the table no longer lands on top of the rings already there — it walks outward from the middle and takes the first spot with real daylight around it (the same spot on both machines). The four dots on the table are gone: four pips on a square read like a domino, so each corner now wears a small quarter-circle contour instead, the way a real board is marked. Winning at the table finally pays CUPS (+25) — the currency that unlocks the rest of the arcade — so the parlour is no longer walled off from your progress; a loss still costs nothing. And on the unfolded screen the table is drawn at four fifths the size and lifted clear of the controls, so the cue stops fighting with the D-pad. The folded phone is untouched, pixel for pixel. On the boulevard, CROWN DELUXE and BIT-BRAWL have swapped seats: Crown is on the left now."],["v0.373","YOU ARE WATCHING THEM, NOT A STAND-IN. In an online brawl, when your rival took the stage, your screen played the same mini-game — but the hands on it were a computer’s. The score at the end was really theirs; everything you actually watched was invented on your own machine. Not any more. The moment they claim the stage, both machines deal the SAME board — the same falling notes, the same tetrominoes, the same panels, the same rink — and then every single button they press is sent across and pressed again on your copy, at exactly the moment they pressed it. Their run, their fumbles, their save at the last second: you see the real thing, a beat behind, the way a spectator does. Their live percentage climbs on the ribbon as they make it, and the damage that lands at the end is the damage they earned. This is the same standard Crown Deluxe has always held — both players looking at the same table — now applied to the brawl. A solo brawl is untouched: the computer rival still plays the mini-games itself."],["v0.372","THE GAME FILLS THE BIG SCREEN NOW. Opened unfolded, Inkville used to sit there as a postage stamp — a tiny inklet, tiny title, tiny menu cards squeezed into the top of the screen with a great empty gap above the D-pad — while the same game folded looked exactly right. The reason was that everything in the game is drawn against a phone-sized page, so on a screen more than twice that wide it simply came out small and marooned. Instead of redrawing every screen, Inkville now tells the browser how wide the page is MEANT to be, and lets the browser blow the whole thing up to fill the glass — about a third bigger unfolded, so the inklet, the title, the START button and the menu cards all grow together and the empty space goes away. It works out the size from BOTH the width and the height, so making things bigger can never push the bottom row off the screen, and it never shrinks anything: the folded phone is untouched, pixel for pixel. Like the last fix, nothing in it asks which browser you are using — every browser on every phone gets the same, correctly sized game — and the self-test now fails the build if the game is ever left drawn too small for the screen it is on."],["v0.371","ONLINE, EVERYWHERE. A challenge no longer needs you to be sitting in the online room waiting for it — the game keeps a quiet line open to the parlour from the moment it opens, so a challenge from a friend pops up over whatever you happen to be doing: the title screen, the shop, halfway up a Tetr-Ink stack. It says who is knocking and which game they want, and ACCEPT walks straight into the match. CROWN DELUXE now lays the table BEFORE it throws the coin: the board, both colours and all twelve rings are on screen first, and the toss lands over the top of them — no more black screen while a coin spins. And an online BIT-BRAWL finally reads as two people fighting: the round-trip between the two machines is nearly twice as fast, every card they lay down is announced by name on their side of the field as it lands, and their showstopper plays out in full on your screen — the whole mini-game, then the real damage they actually scored."],["v0.370","THE GAME IS THE SAME SIZE IN EVERY BROWSER. On the very same phone, Chrome drew Inkville big and thumb-friendly while Samsung Internet drew the whole thing at about half size — a small inkling, a small D-pad you could barely aim, tiny A and B buttons and a lot of empty screen around it all. The last two builds chased the symptom by shaving strips off the bottom; this one fixes the actual cause. The two browsers were laying the page out at different widths — Chrome at the real width of the phone, Samsung at a much wider imaginary one — and because every button in the game is drawn at a fixed pixel size, the same button covered half the screen in one browser and a fifth of it in the other. Inkville now measures the phone itself, tells the browser exactly how wide the page really is, and carries whatever difference is left through to the controls, so the D-pad, A and B, SELECT and START, the inkling and even the TAP TO LOAD screen all come out at the same size under your thumb. It is not a Samsung patch — nothing in it asks which browser you are using, so Chrome, Samsung Internet, Firefox, Opera and Edge all get the identical game. Chrome and desktop do not move a single pixel. And the self-test now fails the build if the controls ever come out too small for the screen again."],["v0.369","THE TOWN SIGN KEEPS ITS JOKE. The flickering sign that turns INKVILLE into INK TOWN, INKOUNTRY, INKREDIBLE or INK INC. for a heartbeat is an easter egg, not a fault — it was mistaken for one and removed for a single build, and it is back exactly as it always was, with a note in the code so nobody deletes it again. Everything the last build did for your thumbs stays."],["v0.368","ROOM FOR YOUR THUMBS ON THE UNFOLDED FOLD TOO. SELECT and START were still tucked under Samsung Internet’s navigation bar when the phone was open, because the fix before this one took the same amount off both screen sizes — and the wide screen gets a taller bar. The game now measures that bar instead of guessing, and gives the bottom row a gutter of its own. The self-test finally watches it: the build fails if the bottom controls come anywhere near the edge, with a Samsung bar simulated on purpose so it can be proved without a phone in hand."],["v0.367","THE BIT-BRAWL CHALLENGE FINALLY OPENS A BIT-BRAWL. Challenging someone from the Bit-Brawl door dropped both players onto the Crown Deluxe table instead. The game side was right all along — the room was the problem: the copy of the parlour running on the server was an older one that had never been taught that a challenge belongs to a particular game, so it forgot which game you picked and every match came back looking like a Crown match. The room is now the current one (it remembers the game, and it carries the live brawl between the two machines), and the game no longer takes silence for an answer either — if a room ever fails to say, it trusts the door you walked in by. Bit-Brawl challenges open brawls; Crown challenges open tables."],["v0.366","ROOM FOR YOUR THUMBS ON SAMSUNG INTERNET. Samsung’s browser paints its own navigation bar (back, home, tabs, menu) straight over the top of the page, and it does not always tell the page it is there — so SELECT and START were sitting underneath it, cut off at the very bottom edge. The game now recognises Samsung Internet on sight and hands the whole control deck an extra strip of clearance, so the D-pad, A and B, and SELECT/START all sit comfortably above the browser’s bar with real breathing room, folded and unfolded alike. Chrome and desktop are untouched — not a pixel moves."],["v0.365","BIT-BRAWL GOES ONLINE. The room is one room: the same roster, the same chat, the same challenges — a challenge now simply says which game it is for, and accepting a BIT-BRAWL one drops you both onto the boulevard together. Two real players, two real decks: your rival fights with the cards THEY own, at the levels THEY raised them to, led by their own inkling — their colour, their gear, their level, their cups — and there is no CPU anywhere in the match. Every card you play appears on their field the moment you play it. Showstoppers are real on both sides: the stage can only be taken by one player at a time, the room hands it to whoever knocks first (and quietly gives the loser their star back), and you watch the rival’s mini-game play out and then feel the exact score they actually made. A banner under the health bars says who has the stage — YOUR SHOWSTOPPER, THEIR SHOWSTOPPER, or LIVE vs their name — and the roster reads IN GAME while you are in one. Table talk rides along, LOBBY takes you back to the room from the chat or the receipt, and walking out mid-brawl hands the other player the win. Under it all: each player keeps ONE number — how much damage they have dealt — and the other machine takes it as gospel for its own health bar, which is what stops two screens ever disagreeing about who is winning."],["v0.364","THE ONLINE TABLE FINALLY TELLS YOU WHAT IS HAPPENING. The coin toss now calls WHO BREAKS as well as your colour, on both screens at once. A turn banner sits under the wordmark all match — YOUR TURN in gold, their name when it is theirs, THEIR SHOT while the rings are still rolling — so nobody is ever left guessing whether to shoot. The rival cue is live again: you watch them slide along their line and wind up, painted as a ghost that the physics never reads, so it cannot pull the two tables apart the way the first attempt did. Their combo run pops on your screen too. Table talk clears itself after nine seconds instead of piling up all match. Typing LOBBY takes you back to the room — from the chat, or from the box on the end-of-match receipt beside the new LOBBY button. And the roster says what everyone is DOING: AVAILABLE, IN GAME or IN MINI-GAME, kept true by a heartbeat that follows you into the other games instead of dropping you off the list the moment you leave the lobby screen. Fixed on the way: a rival walking out filed the win as a SOLO result and moved your single-player climb."],["v0.363","THE SHORT ADDRESS CAN PLAY ONLINE TOO. inkville.odaroo.co now points at the same host the room lives on, so opening the game there gets you the game AND the parlour together — ONLINE works from the short address exactly as it does from the long one. Until now the game assumed anything ending in odaroo.co was the static shopfront and quietly refused to look for a room. The published neocities shopfront and the bare odaroo.co address are unchanged: still solo, still saying so plainly, because their host genuinely cannot reach a room."],["v0.362","THE ONLINE TABLE GETS ITS MANNERS. Four things, all of them about making a match between two people feel like a match between two people. THE COIN FLIES ONLINE NOW - the same toss you get on your own, centre screen, tumbling end over end - except the room called it in advance from the number both machines share, so the two of you watch the same coin land on the same colours at the same moment. YOU BOTH LOOK LIKE YOURSELVES: your inkling is the one you dressed, and the one across the table is THEIRS - their colour, their costume, their gear - carried over with every knock on the room rather than invented on the spot. WHILE IT IS NOT YOUR TURN the message tells you so with three quiet dots, so an unfamiliar pause reads as \"they are thinking\" instead of \"has this frozen\". AND THERE IS A CHAT AT THE TABLE: a small tab down the left that opens into a log, six one-tap reactions and a short line if you want to type one, and folds itself away the moment you send so it is never in front of the board. A line that arrives while it is shut still slides past the tab so you never miss one. It sits clear of the D-pad on both screen sizes, checked at both. Held back deliberately: watching the other player slide their striker about in real time. The wiring works and the message crosses, but moving a piece on the waiting player’s table while a shot is being replayed nudged the two boards a tenth of a unit apart in testing, and this game has spent three rounds chasing exactly that kind of drift. It stays switched off until it can be shown not to disturb the table."],["v0.361","THE ROOM HAS A PERMANENT HOME. Crown Deluxe online no longer depends on a machine in Odaroo’s front room being switched on: the room now lives on a proper host, at its own address, awake around the clock. The game knows where to knock without being told, so ONLINE just works from wherever you opened it. One thing worth saying plainly, because it decides where you play: the published shopfront on neocities can never join a room. Their security policy forbids any page they host from calling another machine - it is their rule, enforced by the browser, and no amount of hosting gets around it. So the shopfront stays the place for solo play, and online play happens at the room’s own address, which serves the game and the room together as one."],["v0.360","THE BOARD, THE COMBO, AND THREE PROPER BUTTONS. The red lines are drawn straight off the close-up, mark for mark: ONE square with ROUNDED corners that curve around each pocket, one small oval tucked inside each corner, and ONE oval at the centre. Nothing else. There is no separate striker line any more - the square’s near edge IS the line you slide along, which is what finally kills the doubled line for good: there is only one line down there to draw. Scanned the finished board across and down with the pieces lifted off: four crossings through the middle, the corner ovals where they belong, and nothing at all above or below the square. NEW - THE COMBO. Pot your own colour shot after shot and the count lands over the table: x2, x3, x4, growing bigger each time, the chime climbing a note and a half with every step, and your inkling getting more wound up the longer the run goes. Miss, or sink one of theirs, and it is back to nothing - and only your own rings and your own shots ever count. THE LOBBIES MATCH. Both doorsteps now read SHUFFLE in green, ONLINE in purple and BACK in black, in that order. Bit-Brawl has its own online room too - the same roster, the same refresh - and it says plainly that online brawls are not open yet, rather than offering a button that does nothing; Crown Deluxe is the one you can actually play. The VS dive also comes to the FRONT at last: it was being drawn behind the lobby pop-up, so the most dramatic moment in the game was happening out of sight. And the scene change between screens takes half again as long now - the ink blot swells and clears at a pace you can actually feel."],["v0.359","CROWN DELUXE IS PLAYED BETWEEN TWO MACHINES. Accept a challenge and a real match begins - the placeholder about live play being wired up is gone, because it is wired up. Both players dive through the same VS into the same table, with the coin already called. How it works, in plain terms: the room does not run the game. It carries the SHOTS, in order, and after each one the player who took it posts the table exactly as it came to rest. The other machine replays the shot - so you watch it happen, the discs really roll - and then settles onto those figures. That last part matters more than it sounds: two computers adding up the same bounces part company in the fifteenth decimal place, and a table full of ricochets grows that into a real difference within a few shots, so the shot alone is not enough. One shot, one truth, taken from whoever played it. Everything else follows from a single number the room hands out at the start, which makes both machines call the coin the same way and drop a penalty ring in the same spot. Shots are numbered so a retry cannot fire twice, and a shot that fails to land says so instead of quietly drifting. Walk out, lock your phone for too long, or lose the line, and the player still at the table is given the win. Online results pay ink and leave your solo climb exactly where it stands. Proven end to end before shipping: two complete clients, a full forty-four shot match played to a finish through the real room, both tables identical on every single shot, one winner, no errors - plus a declined challenge and a mid-match walkout. AND THE CRASH IS FIXED: backing out of the online room used to walk you onto the table and build a game behind you, which looked exactly like a crash. Leaving now goes home and knocks on the Crown Deluxe door again, with nothing left running."],["v0.358","THE MP3 THEME IS PULLED, AND THE DOORSTEP FITS THE GLASS. The transcribed main theme is gone - the beat sat wrong and the notes were off, and a theme you can hear is wrong is worse than no new theme at all. The title screen and the boulevard are back on the music they had before it, untouched, and the reference recording has been deleted from the project. Parked for another day, with everything learned about the tune written down for when it is picked back up. The bigger fix is the LOBBY DOORSTEP: on both BRAWL and CROWN DELUXE the buttons needed scrolling to reach, which is exactly the kind of thing that should never leave the workshop. The cause was that these boxes were built against a roomy desktop window - on a real phone the browser address bar quietly eats a hundred pixels, and the bottom button dropped into the strip reserved for the D-pad. Both doorsteps are compact now - shorter versus stage, smaller portraits, slimmer buttons - and the box measures itself against the room it actually has, shrinking a notch rather than ever handing you a scrollbar. Tested down to a viewport barely half the height of the folded phone: BATTLE, ONLINE and DIP all on screen at once, all pressable, no scrolling anywhere. The rival roulette also takes its time now - six seconds instead of four and a half, at a slower flip - and Crown Deluxe dives into its match through the SAME burning, glitching VS that Bit-Brawl uses, instead of its own quieter fade."],["v0.357","THE LAST EXTRA LINE, FOUND AND GONE. Odaroo has been pointing at a doubled red line for three builds and he was right every time - it just was not where either of us was looking. The striker base line sat at 139 and the square edge sat at 138: ONE unit apart, so the two painted straight on top of each other and read as a single thick double line along the bottom. The base line is now set a clear twelve units inside the square, where the original has it, and it reads as its own mark. Two other marks were quietly pretending to be lines too: the corner arcs stood so far off their pockets that they looked like a second line cutting each corner, so they hug the hole now; and the little inner mark at centre was an outlined circle, which read as a second circle - it is a solid dot, as it should be. Scanned the finished board pixel by pixel across and down: ONE square, ONE circle with its dot, one small arc at each hole, ONE base line, and nothing else anywhere. THE PENALTY RING ALSO ANNOUNCES ITSELF now: sink the striker and the piece coming back to the middle FLASHES THREE TIMES at a steady beat before it settles, so you can see what the miss cost you instead of a piece just appearing. And the marquee finally wears the waving checkered flags either side, like every other game in the arcade."],["v0.356","A NEW MAIN THEME - \"INKVILLE BOULEVARD\". Odaroo handed over a track and asked for it back as real chip music, and that is what this is: the recording was taken apart note by note and rebuilt out of the game’s own square, triangle and noise voices. Nothing is sampled - the mp3 never ships. Reading it off the tape turned out to be the whole job. The true tempo is 115 beats a minute with the first downbeat a third of a second in; the key is E flat major sitting in its relative C minor; and thirty-two bars in it GEAR-SHIFTS up into E major for the finish, which is the moment the tune lifts. The form came out as verse, lift, verse, the lift again an octave higher, then that final section - forty-five bars, ninety-six seconds, and it loops. The melody was read at every single sixteenth note and agrees with the loudest note in the recording 88 times out of 100; the bass was read twice by two different methods that agreed on every note landing on a beat; and the chord under each beat was fitted to the recording rather than guessed. It plays on the TITLE SCREEN and the HOME BOULEVARD as one unbroken performance - walking between the two never restarts it. Enter a game and the theme parks itself exactly where it stood while that game’s own music takes over; come home and it picks up from that same bar. Every other screen keeps the song it already had."],["v0.355","THE LINE DIALS UP, AND THE NIGHT ENDS LIKE A BRAWL. Three things at the couronne table. The rival roulette now dials the same 56K handshake Bit-Brawl does, rebuilt so you hear every stage of it as its own sound: the line opening on a real dial tone, seven touch-tone digits you can count off one at a time, the far modem answering, the two of them warbling notes back and forth, the chirp where they agree on a language, and then the carrier screech over a bed of static - all of it timed to finish exactly as your opponent steps out of the dark. Second, the spin shows NO names now. Just a silhouette cycling through costumes, gear and colours; the name arrives with the reveal, not before it. Third, the end of a match is Bit-Brawl’s, beat for beat: the same VICTORY banner over falling confetti, a freshly-composed fanfare, bubbles to pop through the celebration and the same till receipt with its APPROVED stamp - or DEFEAT and the VOID stamp when the table holds. One locked door out, and the ink counter climbs on the boulevard the way it does after a brawl. The wheel still spins on a win; it just waits behind COLLECT so the receipt gets its moment. Also: the green on every confirm button and badge went a shade deeper, because cream on the old green measured below the readable line - and the readability tester itself had a blind spot, judging text on its own coloured chip against the panel behind the chip instead of the chip."],["v0.354","THE WALL YOU SEE IS THE WALL THEY HIT. The discs were bouncing before they reached the wood at the near and far ends, and the reason was that the frame was only ever painted down the LEFT and RIGHT of the table. The bed therefore ran all the way to the top and bottom edges while the rails it bounced off stopped nine units short, so a disc turned around in the middle of open felt. The frame is now painted on all four sides, and the visible bed is exactly the rectangle the physics uses - felt right up to the bounce line and honest wood immediately past it, on every side. Measured off the actual pixels of the table, all four walls land within half a unit of the line, and the check now lives inside the table’s own self-test so it can never quietly drift again."],["v0.353","THE CONTROLS NEVER GO DARK AGAIN. Every pop-up in the game used to grey out the D-pad and stop it taking taps, and the cause turned out to be one number: the dim wash behind a dialog was painted ON TOP of the pad. So the pad was still working underneath - the keys still steered - but it looked switched off and your thumb landed on the wash instead of the button. The pad now sits above every dialog in the game: game over, victory, stage cleared, the wheel, the save screen, the lobbies, the card window, everything. It stays at the brightness you chose, the arrows steer the buttons, A confirms, B backs out, and the credits reel keeps its pad too instead of hiding it. The one thing that can turn the pad off is you turning it off. While the save message is still typing itself the keys stay lit but hold their fire, so a mashed button cannot cut the sign-off short."],["v0.352","THE RIVAL STOPS TURNING INTO YOU. A proper gremlin, this one: a lens runs across the whole game every couple of seconds to keep every featured inkling breathing and blinking - and it redraws them with YOUR inklet. It had been quietly repainting the rival, so over a match the enemy drifted into a copy of you. Rival portraits now sit outside that lens entirely: the inklet the roulette rolled - colour, costume, gear, face and name - is locked for the whole match, and when the rival reacts it re-draws as ITSELF, happy or wincing, never as you. It also properly wears the same circular portrait frame you do, top-right. And a night at the table is ONE match now, like Bit-Brawl: win or lose, you get the result, the wheel pays out if you won, and then it is back to the menu - your rung is already banked, so walking in again starts you on the next one."],["v0.351","THE STRIKER CANNOT SIT ON A HOLE. A real bug, and a simple cause: when the pockets moved inward the base line kept its old hand-typed ends, which left them barely two units from the near pocket centres - close enough to set your striker straight down a hole. The line is now measured FROM the pockets themselves, starting a full disc clear of each one, so it can never drift out of step with them again, and every placement path runs through one gate that pushes the striker off any hole it touches. Drag as far as you like: the striker stops on honest wood, between the two near pockets, exactly where the painted line says it may go."],["v0.350","CROWN DELUXE KNOCKS LIKE BIT-BRAWL. The splash page is retired: tap the tile and a POP-UP opens over the home marquee - you on the left, a question mark on the right, and three ways to go: BATTLE, ONLINE, DIP. Press BATTLE and the mystery spins through the whole cast right there in the window - a far bigger pool now, costumes and gear and faces and names all rolling, never the same rival or the same name twice running - then steps out of silhouette, and the table loads with the coin already in the air. The rival in the corner now wears the same portrait frame you do, and the wordmark moved to the TOP CENTRE, sitting squarely between the two of you where it can be read. The board also got another pass against the reference: a paler birch bed and a warmer mid-brown frame, closer to the wood in the original."],["v0.349","THE SAVE SCREEN MINDS ITS MANNERS. The typewriter now finishes at its own pace, always: pressing A or B mid-sentence does nothing at all - no skipping, no closing, no stutter - while the pad stays fully lit so the controls never look switched off. The moment the last letter lands, A confirms and B backs out, and the D-pad picks between them as usual. And the stage-cleared screen stacks its choices the way every other dialog does: CONTINUE on top, DIP beneath it, chosen with UP and DOWN instead of left and right."],["v0.348","MEASURED, NOT GUESSED - THE CORNERS ARE OPEN. The reason discs could never reach the gaps beside the pockets was arithmetic, not code: the lane between a hole and the wall was seven and a half units wide, and a piece is eleven and a half across. It simply did not FIT. So the holes were made a little smaller and moved further in, and the lane is now fourteen and a half units - comfortably wider than a disc. A piece can slide behind a pocket, PARK in the corner gap and sit there all match; ricochet out of a corner; run the full length of either wall. The walls bounce, the holes swallow, and every other inch of that board is open wood. And the markings were counted off the original one final time: ONE square of four single lines pocket to pocket, ONE small ninety-degree arc where the square meets each hole - the full red circles around the pockets are DELETED - ONE centre circle with its dot, and ONE striker line at your end. Four kinds of mark. Nothing else on the wood."],["v0.347","SAVING LEAVES THE MUSIC ALONE. A save used to stop the band and start it again, which meant the song restarted from its first bar - and on the seaside screens it woke up a track that had no business playing at all. Saving now touches nothing but your data: whatever is playing keeps playing straight through the cartridge ritual, bar after bar, and the hung save note simply sings over the top of it. Verified on the home marquee, mid-run in a minigame, and at the Crown Deluxe table where only the sea should ever be heard."],["v0.346","THE POCKETS COME OFF THE CORNERS. The big one: on the real board the holes sit INSET from the corners, and that gap is the whole trap - so the pockets moved inward and the lane behind each one is now open, walkable board. A disc can slide behind a hole, park in the gap, ricochet out of a corner and live to tell it; the only things that stop a piece are the four walls, and the only thing that swallows one is falling in. The red marks were stripped back to the authentic five and nothing more: ONE square through the pockets, ONE small arc at each corner, ONE centre circle with its dot, and the TWO base lines - the doubled lines and the stray rings are gone. Crown Deluxe also got its own lobby in sea-green and brass, where a roulette rolls a whole rival - colour, costume, gear and face - and the inklet it lands on is precisely the one you face in the corner. The board no longer shifts a hair after the coin toss (the room is measured before the coin ever leaves the table), the colour discs under both inklings sit STILL now, and the sky filled out: nearly three times the clouds drifting on two slow staggered passes so the loop never shows itself, with the rare pixel gull crossing between them. In Bit-Brawl, the button says BRAWL."],["v0.345","NO DIALOG CAN BE BROKEN AGAIN. The recurring game-over trap is closed at the source: tapping the darkened background does NOTHING now, in every dialog, in every game. A prompt is a prompt - its own buttons, A to confirm, B to back out, and the D-pad to move between them are the only ways through, so a stray tap can never strand a finished run with no way forward. The D-pad was audited across the dialogs and re-armed everywhere a box rewrites itself in place - the save flow had two such moments where the pad went quietly dead. The floating currency bubbles stay in front of the grey and stay poppable, always. And the save ceremony was tightened: it runs THREE AND A HALF seconds instead of five, the DO NOT TURN OFF THE POWER warning holds its one line, and the sign-off is now a small single line - ODAROO HAS SAVED THE GAME!"],["v0.344","THE BOARDS WAKE UP FULL SIZE. Tetr-Ink had a quiet bug with a good ending: after a game over and a restart, the well came back BIGGER - because the restart measured the settled screen, while the very first load had measured itself mid-transition and kept that small size for the whole run. The restart size was the correct one all along. Both Tetr-Ink and Ink Panik now re-measure the moment the screen has settled, before play ramps up - so the board fills the screen from the very first frame you can act on, first load and restart identical, nothing cut, no wasted floor below the well."],["v0.343","THE TABLE BECOMES A DUEL. Crown Deluxe opens like Bit-Brawl now: a versus card with YOUR inkling facing a fresh-faced rival, BATTLE and DIP side by side, and pressing BATTLE spins the rival through a reel of faces and names before the match begins. The coin toss got its close-up - a BIG coin tumbling dead centre stage - then it glides up and settles as a larger spinning disc under your inkling, no label needed. In play the wordmark is gone and BOTH corners are alive: you on the left, the rival on the right, each with their spinning colour underneath - and both of them LIVING the match: swelling and beaming on their own pots, shrinking and wincing at fouls and at the other side scoring. And the sea grew calmer: fewer gulls, deeper rolling waves, a standing breath of wind, and once in a while the faintest whisper of rain - an atmosphere that now follows you unbroken into the ONLINE room."],["v0.342","BACK TO THE ORIGINAL BOARD. Crown Deluxe was tuned against its 2003 ancestor, line by line. The view relaxed into the original GENTLE three-quarter angle - a square board seen naturally from just above, not down a gorge. The red marks are THIN and precise now: the border square, graceful corner ARCS curving around each pocket, the double centre circle, and the twin base lines - drawn fine, like paint, not tape. The pockets became real HOLES cut into the wood: a routed darker edge, depth falling away to the far side, a sliver of light on the near inner wall - no more floating rings. And the drop rule is the couronne rule: a piece whose centre rides well over a hole FALLS, no teetering on rims - while the lanes between pockets stay honest and free, and a piece hugging the rail into a corner drops exactly as it would on the wooden original, because a corner IS a pocket."],["v0.341","THE CORNERS OPEN UP. Found it - the invisible wall that has haunted the corners for builds: the pocket test was so wide it overlapped the whole passing lane, so any disc sliding beside or behind a pocket was silently swallowed the moment it drew level. The drop test is now the true one - a piece falls ONLY when its centre is genuinely over the hole. Discs travel the entire board now: hug a rail past a corner, park in the pocket lane, ride the space behind the holes - the only thing that ever catches a piece is really falling in, exactly like the wooden original. And a full uniformity audit confirmed the set: every piece - green, red and the yellow striker - is the same diameter, the same thin coin, drawn by the same hand at the same angle; colour is the only difference between them."],["v0.340","THE BOARD BECOMES THE REAL THING. Crown Deluxe was redrawn from the reference photo up. The playing field is CLEAN now - the YOURS/RIVAL counters, the shot tally and every line of text are gone from the board; nothing overlays the wood but the discs and the action. The board itself is a BOARD, not a box: one flat plywood face in a single tone, a thin frame lip instead of a deep crate, four hard edge lines, the red border square seated on the pockets, authentic DOUBLE striker base lines with their end rings, and the centre circle - nothing else. Every piece is the same size now, the yellow striker included, and all of them are thin flat wooden coins the way real carrom men are. And your colour badge under the inkling grew a quarter larger and SPINS like a coin, always turning, so whose colour you are is never in question."],["v0.339","HOUSEKEEPING ACROSS THE HOUSE. Crown Deluxe dropped the word PARLOUR from every screen - it is simply CROWN DELUXE now - and the online room lost every trace of plumbing: no addresses, no connect boxes, no technical talk. The lobby is one clean list - who is online right now, a REFRESH button, a CHALLENGE button beside every name - and nothing else. After the coin toss, the coin now GLIDES up and settles under your inkling as a small badge, so your disc colour stays in view for the whole match; and the inkling itself finally plays along - a happy pop for every ring of yours you sink, growing with multi-pot shots, and a real celebration on a double or better. The SAVE screen grew a spine: stray D-pad presses and background taps can no longer knock it down mid-sentence - only A confirms and B cancels - while the floating currency bubbles stay tappable right over it. And the SELECT and START buttons got their little pictures back: the floppy disk and the pause bars, just like the old days."],["v0.338","A PROPER CARROM BOARD AT LAST. Two passes on the parlour. THE MARKS: the red border used to be a rectangle floating twelve units shy of the pockets - which is why the corners always looked off. It is now ONE clean square whose corners ARE the four pockets, with the two striker base lines, their little end rings and the centre circle - and nothing else. Simple, seated, seamless. THE FRAME: the stripe salad of mismatched wood tones is gone - one honest wood face all the way round, one darker band on the skirt, one hard edge line, and a calm two-tone plywood bed underneath, the way a real board is finished. And the unfolded view zoomed the rest of the way in: the table now runs the FULL width of the big screen, the far rail six pixels from the top, eighty-eight percent of the height pure board. Unfold the phone and the game fills it."],["v0.337","UNFOLD THE PHONE, UNFOLD THE TABLE. On the big screen the parlour now plays like it was built for it: the red border of the playing field runs practically edge to edge - ninety-nine percent of the width, the far rail kissing the top of the glass, the near rail riding down at the bottom behind the see-through pad clusters. Almost no sky, all table, the whole unfolded canvas given to the game. The folded view keeps its own tuning untouched - rail, pockets and cue clear of the pad exactly as before. One screen, two seats, each one the best in the house."],["v0.336","THE TABLE COMES UP FOR AIR. Two touches on the seaside parlour: the board rose back above the D-pad - the close-up zoom stays, but the near rail, the bottom pockets and the cue now sit fully clear of the overlay, usable on both screen sizes (v0.335 sank them too deep). And the sky came alive: the clouds now DRIFT gently DOWNWARD behind the table, an endless slow scroll, as if the whole parlour were floating up through the morning - serene, continuous, and running even while you line up a shot. The sea stays exactly as it was."],["v0.335","THE PARLOUR MOVES TO THE SEASIDE. Crown Deluxe got its close-up: the table is dramatically BIGGER now - zoomed in past the edges of the glass on the folded phone and filling the wide screen top to bottom - with the near rail running down behind the see-through pad, so the red-bordered board simply dominates the view. The dark purple arcade wall is gone; the parlour now sits against a soft SKY - light blue melting into white with fat pixel clouds drifting behind the wood. And the band packed up: no chiptune plays here at all. Instead you hear the SEA - the same rolling surf and gulls as the credits beach, a calm ocean room unlike anywhere else in the game. The table itself is untouched: same perspective, same plywood bed, same red border and blue pockets - just big, close, and quiet."],["v0.334","NIM TAKES ITS FINAL BOW. The 1-3-5-7 ink-drop duel has left the marquee - its screen, its code, its coin flip and its elevator shaft are gone from the cartridge entirely, and the arcade now stands at TEN minigames plus the brawl and the parlour. The ladder closed ranks: BULLET BALLET moved down to 350 cups and LUMEN INK, still the finale, now crowns the climb at 400 - every gate an even fifty-cup step from SUPERSTARS to the top. The home marquee was retiled so everything sits in clean pairs, with TETR-INK stepping up beside INK-PUT. Old saves are tidied automatically, and the PLAYER GUIDE at blueprint.html was reprinted to match: ten cabinets, the new gates, the new press number."],["v0.333","ONE SEAT, ONE LADDER, AND THE REAL RULES. THE PERSPECTIVE IS NOW FIXED. The tilt used to slacken off on a wide screen to buy width, which meant the folded phone and the unfolded one were looking at the table from two different heights and the wide one read as flat and far away. The angle is the same on every screen now and the table is simply scaled to whichever of width or height runs out first. AND THE TABLE SITS DOWN AT THE PAD: it used to float in the middle of the room with a dead floor beneath it, because the message line and a reserved strip for the cue were both sitting under it. The message moved to the top, the cue lost its strip - the pad is see-through, so the cue just carries on behind it - and the near rail now settles about thirty pixels above the buttons on both folds. THE CUE IS A STUB, not a pole: it was a fraction of the whole SCREEN and swept corner to corner, burying the table. It is long enough to read which way you are pointing and how hard you have drawn, and no longer. THE REAL RULES ARE IN. You may only play the striker INTO the table from your own base line - angle it as sharply as you like, but you cannot fire it backwards off your own rail, and a wild drag folds to the nearest legal line rather than doing nothing. And sinking one of THEIRS ends your turn, even if you sank one of yours in the same shot: you keep the table only on a clean pot of your own colour. THE LADDER RUNS 1-1 TO 1-5, THEN 2-1. Clear rung five and the next world opens; lose and you start the climb again. The rival tightens with every world, the payout grows with it, and the wheel keeps getting richer - a legendary runs 6 percent at 1-1, 34 at 1-5, and past 50 in the deeper worlds."],["v0.332","CROWN DELUXE PUT BACK THE WAY THE ORIGINAL LOOKS. The 2003 board tells you its own colours in its own instructions - put the YELLOW ring on your base line, aim at the GREEN rings - so the striker is yellow now, not white, the bed is light plywood instead of green cloth, the frame is pale wood, and the four pockets are BLUE with the pale rim painted round them. The board is far plainer too: three tones of wood, three of bed, one hard line where the frame meets the bed, and nothing else, because the original has almost no detail on it and every extra line stands between you and where the rings are. THE ROOM NOW RUNS UNDER THE D-PAD. The picture covers the entire screen and the pad floats on it at a little over half strength, so the carpet carries on behind the buttons instead of stopping dead against a big pale slab - that hard dark-to-light edge across the middle was the least comfortable thing about sitting with this game for a while. With the whole screen to work in, the table takes 95 to 99 percent of the width on both folds and lays back to the original angle. The base line runs nearly the full width as it does on the real board, so the corners are reachable - a striker pinned to the middle of a short line could never cut into them. And YOU CAN SEE THE RIVAL SHOOT: they settle in, draw the cue back over half a second and follow through, instead of the shot simply having happened by the time you look up."],["v0.331","THE ROOM LEARNS TO TELL PLAYERS APART. Behind a tunnel every visitor arrived at the server looking like 127.0.0.1 - because it is our own tunnel process handing the request over - so the per-caller rate limit had quietly become ONE allowance shared by the entire room, and a single noisy client could have locked everybody out. The server now reads the real caller from the address Cloudflare passes along, and it only believes that header when the connection came from the machine itself, so nobody can forge one to walk past the limiter. Proven both ways: a noisy caller burns its own allowance at 120 while another player walks straight in, and 140 requests each claiming a different address were correctly treated as one."],["v0.330","CROWN DELUXE IS PLAYABLE OVER THE INTERNET. The parlour server now trusts the page it served itself - it compares the Origin against the Host - which sounds obvious and was not: behind a tunnel the game reaches a player over https from the tunnel hostname, which was neither a plain-http page nor on any allowlist, so the server was turning away the very page it had just handed out and the lobby read CANNOT REACH THE ROOM while sitting one call from the answer. Fixed, and proven: the game served from a public address, two players standing in the same room from different machines, chat and a challenge passing between them. ALSO WORTH KNOWING, and it is not a bug to be fixed: the copy on neocities.org can never join a room. Neocities sends connect-src self in its security policy, which forbids any page it hosts from talking to any other machine on the internet. That is their rule, enforced by the browser, and no amount of hosting gets around it. Neocities stays the shopfront for solo play; online play is played at the address of whoever is hosting the room."],["v0.329","THE ONLINE PAGE GETS OUT OF ITS OWN WAY. It had grown a signboard, a YOU ARE card, a paragraph about itself and a settings panel, all before you could see a single name. It answers one question now - who can I play right now - so the roster IS the page: YOU are always its first line, marked and highlighted so you never hunt for your own name, everybody else follows underneath with a CHALLENGE beside them, and REFRESH sits right next to the heading with a plain line saying the list also refreshes itself every two seconds. Table talk keeps its box. Where the room lives is one small line at the foot with a CHANGE button that unfolds the address field only when you actually want it."],["v0.328","THE NAME STAYS CROWN DELUXE. A brief detour under another title is undone: the tile, the title band, the dialogs, the receipts, the lobby sign and the server all read CROWN DELUXE again, in every language. Nothing else moved - the table, the pieces, the room, the cue and the house band are exactly as they were in the last build."],["v0.327","THE CROWN COMES OFF THE TABLE - AND THE BAND MAKES IT UP AS IT GOES. THE GOLD CROWN IS GONE: the table is twelve rings, six a side, and no piece to cover or hold in reserve - sink your six and it is yours. The striker is a plain WHITE RING now, the same shape as every other piece rather than a different kind of object. The board is the real couronne board: the two coloured base lines are retired and in their place is the painted red rectangle with a ring at each corner and the circle at its heart - PURE DECORATION, not one line of physics reads it, the rails and the pockets collide exactly as they always did. The frame gained real depth: visible left and right faces lit and shaded, a near plank the full depth of the wood, and the shadow it throws on the floor. The arcade cabinets and the papered wall are gone; what is left is one cinema carpet running edge to edge, with the odd tile carrying a popcorn, a soda, a hot dog, nachos or a film reel, laid out by a seeded shuffle so no two matches look alike. THE PICTURE NOW OWNS THE WHOLE SCREEN - no strip of page above it - and the table takes 99 percent of the width folded and 85 unfolded, laying further back on the wide screen because that is what buys width. The cue is cut to fit the glass, so the whole stick from tip to butt is on screen at every draw and nothing is ever chopped off by the D-pad. AND THE MUSIC: this is the only game in Inkville with a house band instead of a record. Every match gets a brand new tune - key, mode, tempo, metre, chord road and melody all rolled fresh out of pools that are already musical, so it always sounds written - and when one runs out the band simply plays another. Six hundred matches without hearing the same title twice."],["v0.326","THE PARLOUR CAN NOW LIVE ANYWHERE. Neocities is a shelf of files, not a machine - it can serve the game but it cannot run a room, so the room has to live somewhere that runs code. The lobby screen now has a WHERE THE ROOM LIVES panel: paste the address of a parlour and this copy of the game knocks on that door instead, whether it is a machine on your desk, a tunnel, or a small host somewhere. It tells you plainly which address it is using and whether you set it or it came with the page. A secure page refuses to call an insecure parlour and SAYS so, rather than failing silently the way browsers do. A dead address now gives up after six seconds and admits it, instead of sitting on KNOCKING ON THE DOOR forever, and the room shows KNOCKING while it rings so a stale ONLINE can never be left on screen. The server side learned who is allowed to call it: any plain-http page - that is somebody who typed the host machine address - plus a named list that already includes inkville.neocities.org, so the published game can reach a parlour the moment one is standing behind a real certificate. Every other https site is still turned away at the door. Set your own with ALLOW_ORIGINS when you run it."],["v0.325","THE PARLOUR OPENS TO OTHER PEOPLE, AND EVERY WORD IN IT IS LEGIBLE. The lobby server now serves the GAME as well as the room, on one port, and listens on every interface - so run node server/lobby.js, hand somebody the address it prints, and they land in the same room as you. It hands out four files and no others: a path that is not on the list does not exist as far as it is concerned, and traversal attempts come back as plain 404s. It refuses any https page reaching in, rate-limits per address, caps every input, keeps nothing but the name you already play under and writes nothing to disk. Opening this to the wider internet still needs you to forward the port yourself, and there are no accounts - whoever has the address can walk in. Stop the server and the parlour is shut. THE LOBBY IS REBUILT FOR READING. Every line now sits on its own solid panel instead of floating over the backdrop: a signboard with a pixel crown, a YOU ARE card, a WHO IS IN THE ROOM panel with a REFRESH button and a line telling you it refreshes itself every two seconds, the table talk in its own dark box, and a plain-English note about what the room is. AND READABILITY IS NOW TESTED, NOT EYEBALLED: crReadable() walks every word on screen, works out the colour it is really sitting on and the WCAG contrast ratio, and reports anything too faint - it understands that this game rings its text in black to sit over artwork, so it judges outlined text and bare text by different rules. It found five real faults in this very build: cream on the green confirm button at 3.2:1, a gold heading on cream paper at 1.8:1, the stage tag at 1.3:1, the Japanese title line at 1.5:1, and a fourteen-character name overrunning its card. All five are fixed."],["v0.324","PLAIN PIECES, HONEST CONTROLS, AND THE PARLOUR OPENS ITS DOOR. The rings are flat and plain now - one red, one green, a dark edge and nothing else. The shine is gone, because a highlight made identical pieces look like different sizes the moment you glanced at the table, and every mark under a piece is gone too, shadow and base line both: a piece IS where it is drawn, which is the one thing you need when you are lining up. THE CONTROLS SPLIT INTO TWO BIG ZONES. Touch the TABLE - anywhere, the ring itself included - and you are moving the ring: drag it along your base line and drop it, and nothing can fire while you do. Touch YOUR SIDE, past the near rail where the cue lies, and you are shooting: pull back and let go. Grabbing the ring used to start the shot, so a fumbled tap fired one you never meant; now the whole felt is the move target and the whole of your side is the shoot target, and a nudge under a threshold is not counted as a shot at all. The D-pad matches: arrows slide the ring, up and down wind the cue, A shoots. AND CROWN DELUXE GOES ONLINE - for real, on your own machine. Run `node server/lobby.js` and the ONLINE button opens THE PARLOUR: who is in the room right now, a challenge you can send and they can accept or decline, and a line of table talk. Presence means presence - walk out and you are off the list at once, and a client that stops answering fades out on its own within twelve seconds. The server keeps nothing but the name you already play under, writes nothing to disk, listens only to this machine, and every word another player types is put on screen as text and never as markup."],["v0.323","CROWN DELUXE WAS UNPLAYABLE - AND NOW IT HAS A LADDER. The rival could never take its shot. Its turn set the phase to \"roll\", and crFire opens by refusing to fire when the phase is already \"roll\" - its own guard against double-firing - so every single CPU shot was thrown away and the match sat on THE RIVAL LINES ONE UP forever. The guard was right; the phase was wrong. The rival now thinks in its own phase and actually shoots. The pre-flight test missed this because it poked the AI and the trigger by hand instead of driving the real turn loop; it now plays the game the way the game plays it, and it fails loudly if either side ever stops being able to shoot. THE TITLE BAND WAS SLICING ITS OWN TEXT - VERSUS - YOU ARE GREEN ran off the left edge and read RSUS. The band now carries only the stage number; your colour is announced in the message line, which has the whole width to say it in. The test now checks inside the band too, because a container that does not overflow can still be full of text that does. AND THE LADDER IS BACK: five matches against the house, STAGE 1-1 up to 1-5, the rival tightening its wrist on every rung - win and you climb, lose and you hold. EVERY VICTORY SPINS THE PRIZE WHEEL now, with the odds climbing as you go: a legendary runs 6% at 1-1 and 34% at THE CROWN MATCH."],["v0.322","CROWN DELUXE - SOLID RAILS, NO SHADOWS, ONE MATCH. The rails were leaking. Each corner pocket was clearing a sixteen-unit hole in the woodwork, so pieces slid straight past the rail and came to rest OUTSIDE the bed - a striker was measured parked at 162.2 with the rail at 161. Being over the mouth of a pocket is now the EXACT same test as dropping into it, so there is no gap left to slip through, and a backstop keeps anything from living in the woodwork whatever route it took. All four rails now bounce like the original, the near one under your hands included, and they are a little livelier. THE SHADOW UNDER EVERY PIECE IS GONE - it made it impossible to read where a ring actually sat, which is the one thing you need when lining up. In its place is a single hard line at the contact point that says this is the base and nothing more. YOU NO LONGER PRESS A TO SHOOT: grab the striker and pull, and it fires when you let go. Touch anywhere else on your base line to slide it, and letting go arms it so the next pull fires too. THE PARLOUR IS THREE BUTTONS - START, ONLINE, BACK. The red/green picker is gone; choosing a colour re-entered the whole screen, splash and all, just to redraw two swatches. Your colour is now a COIN TOSS, red on one face and green on the other, tumbling end over end and called fresh at the start of every match, a straight fifty-fifty. Training and the stage ladder are retired: Crown Deluxe is one game, a match against the house, and a tidy win pays for every shot you did not need."],["v0.321","CROWN DELUXE MOVES INTO THE ARCADE BAR - AND GETS TWICE THE PIXELS. The black nothing around the table is gone. You are now in the back room of a retro arcade bar: a papered wall with two neon signs, a row of cabinets standing along it with lit marquees and glowing scanlined screens, and a chequered floor that runs in perspective from the far wall right up under your feet. It is all drawn with the SAME projection the table uses, so the cabinets genuinely stand on that floor at a believable distance. One lamp hangs low over the felt and it is the only warm light in the room. THE PICTURE IS NOW DRAWN AT TWICE THE DETAIL, and at the same detail on BOTH folds - a ring is 40 pixels across folded and 80 unfolded instead of 20 and 27, so it reads as a circle, not a handful of cubes. Density follows the display now, never the layout width; tying it to width had quietly been drawing the unfolded Fold at half the quality of the folded one. The table also FILLS the screen on both: 99% of the width folded, and on the wide screen it now lays back rather than shrinking, so it spans 81% instead of being marooned in the middle. The soundtrack is the PAPER MOON WALTZ - a slow three-four for a quiet parlour. The menu tile lost its Christmas tree and is now a cue laid across a red ring and a green one. And the machine tests itself before it ships: crSelfTest() checks every HUD box for clipping, off-screen text, D-pad collisions and overlaps at both fold sizes, and crSelfTest(true) also plays a full match to a finish. It caught four real faults in this very build. The versus shark was re-tuned from measurement rather than feel - it clears four tables out of four in about twenty shots."],["v0.320","CROWN DELUXE SITS DOWN AT THE TABLE. The whole game has been redrawn in PERSPECTIVE - no more looking straight down at it. You now see the table the way you would from your own chair: a wooden box receding away from you, the far rail small, the near rail wide and right under your hands, the four holes as dark ovals sunk into the corners, and every ring standing on the felt with a real edge you can see. A cue rides in from your side of the table, lines up behind the striker, draws back as you wind up and lets fly. Above it all hangs the parlour lamp that lights the whole scene. The table now takes the ENTIRE screen on both folds - 369x257 folded, 558x388 unfolded - with the rings half again as big as before, the base lines painted on properly, the strength meter sitting on the near rail where a real table would print it, and the whole HUD floating over the room instead of stealing space from the board. Under the hood it is one-point perspective done for real: inverse depth is what runs linear, so the far rows bunch up and the squash of a ring falls out of the same maths rather than being faked. Every pixel is still hand-placed from a fifty-colour palette - no gradients, no blending, shading done by dithering two flat tones. And the foul rule was fixed: only sinking the striker costs you a ring now, because charging one for every air shot meant a scrappy player put pieces back faster than they could sink them and no match ever finished."],["v0.319","CROWN DELUXE OPENS ITS DOORS. A whole new game joins the board, sitting right beside Bit-Brawl with its own ONLINE light on from day one - no cups, no chains, open to everybody from the first boot. It is a pixel remake of COURONNE, the old parlour ring game: a felt board with four corner holes, a crown of RED and GREEN rings around a gold CROWN in the middle, and a cream STRIKER you slide along your own base line. Pull it back like a slingshot and let go. Sink one of yours and you shoot again; sink the striker and one of your rings comes back to the middle; the CROWN only counts once you cover it with one of your own. Pick your side - red or green - then take on TRAINING, five solo stages on a shrinking shot budget, or VERSUS against the parlour shark. Clear stage 5 and the prize wheel spins. Every ring, hole, plank and hilite is drawn one real pixel at a time on a 170x170 board and blown up whole, so nothing is ever soft - it looks like it came off a cartridge, because it may as well have. The online seat is wired and waiting."],["v0.318","THE PLAYER GUIDE GETS A GRAND REPRINT. blueprint.html was rebuilt from the ground up as a proper retro guide site: a marquee-lit cover with chasing bulbs, smooth-scrolling chapters, eleven tappable game cabinets that unfold with real numbers - exact payout formulas, stage ladders, cup gates, the roulette law - plus the full 65-cart card system with animated rarity bars, the dupe ladder and pity maths, the economy and EXP skill timeline, the unlock ladder, the trimmed style racks, Mart pack odds, the daily 2x, all eight cheat rituals behind reveal tabs, and the one-number build press. Every figure is pulled straight from the live machine at this very build. Read it at inkville.neocities.org/blueprint.html."],["v0.317","THE SECRET JAM ANNOUNCES ITSELF PROPERLY. Tap the credits inkling ten times and the call-out now reads the way every cheat should: CHEAT CODE UNLOCKED on its own single line, TURN HER TUNES TO GOLD on its own single line beneath it - no wrapping, ever. The lettering sizes itself to the screen, so it fits the folded phone and the big unfolded canvas alike, and even folding mid-game re-fits it on the spot."],["v0.316","THE CREDITS STOP REPEATING THEMSELVES. The top bar of the credits now reads it plainly - 316 BUILDS, the days, one person, dictated and designed by Odaroo - all on one strip, and the big gold repeat of the very same numbers below it is gone. What remains under the bar is just the motto in italics - the light is on, a whole game spoken into being, one wish at a time - and then straight into the build history. Once, cleanly, and on with the show."],["v0.315","ONE NUMBER TO RULE THEM ALL. The version scheme grew up - or rather, admitted it has not launched yet. The old v-numbers are retired; from today the game is simply v0.BUILD, where the number IS the total count of builds ever shipped: this one is v0.315, the next will be v0.316, and so on until launch day makes it v1.0. Every entry in this list was re-stamped with its true build number, the title screen, the tally bar and the credits all read the same single figure, and the version and the build count can never disagree again - because they are the same number."],["v0.314","THE TOUR REMEMBERS WHERE YOU PARKED. Both rhythm games now open with two doors: START TOUR plays the setlist from the top, and a golden CONTINUE - which only appears once you have made progress - picks the tour back up at the furthest track you have reached, saved to your file, so a seventeen-song campaign no longer restarts from square one every session. Ink-Tar Hero got two polish passes with it: the combo counter moved to the TOP RIGHT, stacked neatly under the logo and the STAGE tag where the inkling can never sit on it again, and the setlist dropped its stage numbering - just clean track titles with your stars beside them, lined up exactly like the Dance Dance Ink list, on both screen sizes."],["v0.313","NIM GETS ITS SOUL BACK. The corner inkling returned to the duel - and it actually WATCHES the game now: it grins when your move leaves the CPU in a losing position, frets when the CPU turns the tables, celebrates a win and slumps at a loss, reading the real mathematics of the board every turn. The instruction text that was crashing into the NIM title up top is gone; a permanent gold how-to line now sits right UNDER the board, with the play-by-play log in clean white beneath it - You took 2 from row 3, CPU took 1 from row 4 - updating every move. And the stage ladder finally plays fair: every win climbs you one level FOR GOOD, and a loss simply holds your floor instead of hurling you back to 1-1. No more five-wins-in-a-row wall - the climb is yours to keep."],["v0.312","THE PASSPORT ALBUM + BULLET BALLET GOES ON TOUR. The card album got its collector look: smaller cards - four across on the folded screen, six unfolded - centred on the page with the whole collection scrolling underneath, and the GALLERY button is gone for good (PAGES is the album). Behind it all, a proper PASSPORT WALLPAPER: thirty-five postage stamps from Inkville to Tokyo, Rio, Kyoto and beyond, tiling the entire background edge to edge on both screen sizes. Bullet Ballet cleaned up its victory: the receipt shows just your card, its rarity call, BEST and the ink - the stat clutter is gone - and LEGENDARY finally fits its gold band on every card size. And the show goes ON: beat the stage 1-5 boss and STAGE 2-1 opens right from the victory screen - every world spawns hecklers faster, volleys hotter, bullets quicker, and each boss arrives about half again as tough as the last. BEST now tracks how deep across worlds you have ever flown."],["v0.311","THE ROULETTE LAW. One rule, every game, no exceptions: the card wheel NEVER spins on a loss, and it ONLY spins for finishing a full stage. Lose anywhere and you still bank every drop of ink - you just do not get a card for falling over. Tetr-Ink stopped spinning a wheel on GAME OVER (its mid-run stage-5 wheel remains the card moment). Lumen Ink dropped the card-drop button from its end screen. Bullet Ballet only spins when the STAGE 1-5 boss actually falls - a downed run goes straight to the receipt. The Ink Rink now saves its wheel for every FIFTH floor, with a little countdown on the ordinary clears so you always know how close the next spin is. And Ink Panik pays its bonus round in straight ink - its cards come from beating the X-5 boss, as they should. The rhythm games and Superstars already followed the law: cards on cleared stages only, never on a fail."],["v0.310","BULLET BALLET STRAIGHTENS ITS MARQUEE - AND THE RULE BECOMES LAW. The BULLET BALLET wordmark was spilling out of its corner - the first B and the left flag clipped clean off - because this one game skipped the shrink-to-fit pass every other title runs; it fits itself now on both screen sizes, flags and all. The stage also stopped changing its clothes mid-entrance: wave one’s sky backdrop is up from the very first frame, so the game opens on exactly the background you play on - no flash of the bare default first. And behind the scenes the fold check is now BAKED INTO THE DEPLOY ITSELF: the publish pipeline physically refuses to ship a build unless every changed screen has been verified on both the folded and unfolded sizes first. No exceptions, by construction."],["v0.309","THE SONG TITLES SETTLE IN DOWNSTAIRS. In Lumen Ink the track name no longer flashes and vanishes - it lives permanently at the BOTTOM of the field, right beneath the trajectory strip, so you always know what is playing and where you are on the road. Ink-Tar Hero and Dance Dance Ink follow suit: the current song now reads in small clean text at the bottom of the play frame itself, inside the game, all run long. Their splash pages were squared away too - the big titles sit dead centre and wrap to extra lines rather than ever clipping, on both screen sizes. And the last of the little music-note symbols were swept out of both rhythm games: the setlists, the results cards, the song roulettes and the floating stage dressing all show plain clean titles now."],["v0.308","EVERY WORDMARK GETS ITS HEADROOM. The LUMEN INK title was kissing the top edge of the unfolded screen - and on a real phone, the browser bar and the camera cutout can shave the top few pixels right off. So every minigame wordmark across all eleven games now keeps a proper cushion from the top edge, and on phones that report a notch or cutout the titles automatically slide down below it. A full audit ran across Bit-Brawl, Ink Rink, Ink-Put, Tetr-Ink, Ink Panik, Dance Dance Ink, Ink-Tar Hero, Nim, Bullet Ballet, Lumen Ink and Superstars on BOTH screen sizes: every title, stage number, Japanese line and checkered flag measured fully on screen, with the stage tags still riding neatly underneath."],["v0.307","THE ALBUM BUTTONS STEP OUT OF THE SHADOWS. On the unfolded screen the white-and-red PAGES and GALLERY buttons had wandered into the gallery wall - stuck on the left, half swallowed by the layout and impossible to tap. They now sit centred on their own strip that STICKS to the top of the album as you scroll, floating above every card and every layer, always visible and always tappable on both screen sizes. The big centred card view stays exactly as it was."],["v0.306","THE STORY GETS ITS FACTS STRAIGHT - AND A NEW SIGN-OFF. The Making of Inkville was retouched: the game was built by talking - dictated out loud, wish by wish, described and reshaped until it looked right - and the story now says exactly that, no more, no less. And the old drawer line stepped aside for a sign-off borrowed from the studio mark itself, the bulb that opens every boot: THE LIGHT IS ON. IT IS NOT GOING OUT. The BUILDS tally wears the matching line - the light is on, a whole game spoken into being, one wish at a time."],["v0.305","THE CREDIT WHERE CREDIT IS DUE. The tally over the credits now tells the whole story on one strip: the live build count, the days since the very first spark, ONE PERSON - and the line that explains how any of this exists: DICTATED AND DESIGNED BY ODAROO. The same byline joins the big tally card at the top of the BUILDS list, and on the folded screen the strip simply wraps to a second line instead of squeezing."],["v0.304","TETR-INK PAYS LIKE IT MEANS IT. The stage-clear wheel got a clean-up and the game got a raise. The screen after each stage roulette is short and simple now: the odds, one line - NEXT STAGE ODDS - and one line with your ink so far. Below them sit TWO equal buttons side by side: green CONTINUE to keep stacking, red DIP to cash the run out right there - dipping banks every drop of ink you have earned and shows the receipt on the spot. And the earnings themselves TRIPLED: score pays three times over, every line is worth 150 ink and every stage adds 1,500, so a solid Tetr-Ink run now out-earns an Ink Panik session the way a higher rung on the ladder should."],["v0.303","INK PANIK GOES BIG-SCREEN. On the unfolded screen the board was a little postage stamp adrift in green spirals - it now GROWS to more than double its old size, diving into the empty centre between the D-pad and the buttons where nothing ever lived, tiles half again as large so the action reads from across the room. And the NEXT and HOLD boxes on the left are gone entirely - the rising row already previews itself at the bottom of the board, so the column was just furniture. The folded layout keeps its familiar fit, board clear of the inkling and the pad as always."],["v0.302","SEAMLESS STAGES + THE ROAD AHEAD. Lumen Ink transitions are invisible now - the pixel shatter is gone entirely, the next stage just flows in. A new song announces itself with its title in SMALL clean text (no note symbols), holding on screen a few seconds so you can actually read it, then fading out. And under the field sits the new TRAJECTORY STRIP: every song you have cleared shows as a gold star, the one you are on glows with its number, a little arrow points at the locked chip beside it, and the rest of the locked road stretches to the right - seventeen chips, so you always know exactly how far you have come and how far there is to go. Meanwhile the rhythm games got their tempo corrected: the MUSIC plays at its true, original speed again - it was the ARROWS that were meant to be faster, and now they are. In both Dance Dance Ink and Ink-Tar Hero the notes travel 1.2x quicker down the screen while the song keeps its real groove, and the note spacing guarantee stays exactly as it was."],["v0.301","THE RHYTHM GAMES GET THE FULL DISCOGRAPHY. Dance Dance Ink and Ink-Tar Hero stopped rationing the jukebox: both now run the ENTIRE 17-song soundtrack - town themes, brawl reels and the Colossus suite - as a seventeen-track setlist (the Hero still plays it in reverse, opening where the dance floor ends). Your earned stars carry over untouched. And both got a tempo pass: Dance Dance Ink plays every track 20 PERCENT HOT - faster arrows, faster music, more exciting. Ink-Tar Hero runs at 1.25x speed with a new SPACING GUARANTEE: it is a timing game, so notes are never allowed to pile on top of each other - a strict minimum gap thins the chart and the challenge comes from pace and precision, not visual clutter. Long holds always survive the thinning; they anchor the phrase."],["v0.300","LUMEN INK, LEGIBLE TO THE LAST LINE. Two small readability fixes: the little music-note glyphs are gone from song titles in Lumen Ink, freeing that space back to the words - and the end-of-run card was tightened up so every line fits on the folded screen. The song title sits on its own line now, the gaps between rows are trimmed, and the BEST line - which used to be clipped behind the AGAIN button - is always fully visible above the buttons, even on the deepest runs with the card-drop button on the card."],["v0.299","THE PIXEL WIPE MINDS ITS MANNERS. The stage-change shatter in Lumen Ink now stays strictly INSIDE the game field - no more stray squares over the inkling, the stage tag or anything else on screen - and it runs at exactly DOUBLE speed, a quick half-second flip and the new stage is in front of you. Snappy, contained, and gone before you miss a beat."],["v0.298","LUMEN INK: ONE BLOCK, AND A SONG THAT WAITS FOR YOU. The rotating gem cuts are retired - every piece is now the same plain pixel BLOCK, a flat slab with a hard bevel, so nothing morphs on the way down and the whole field reads as one set. The blocks no longer swell as they breathe either (they just brighten), the + is a slim one-pixel cross instead of a chunky slab, and everything is drawn crisp and pixelated - retro, not glossy. A piece already falling KEEPS the colours it was dealt in: change level mid-drop and the block under your hand stays as it was, while the new skin takes over from the next piece on. And the change itself is announced properly - the entire screen shatters into big coloured squares and rebuilds, the retro way of saying the stage just turned over. Best of all: THE MUSIC NOW WAITS FOR YOU. Clear nothing in a bar and the song repeats that same bar, again and again, until you finally erase something - the track only moves forward when you do."],["v0.297","THE X BUTTON HOLDS STILL. Two faults, both gone. First, B and A had quietly shifted for Bullet Ballet only - they are back on the exact classic diagonal they hold in every other room, pixel for pixel, and the X is simply added above B and beside A as an even triangle. Second, the charged X was PULSING - the old animation grew it by nearly a fifth and shrank it again, which is what looked like a frame popping in and out at its edge. It now glows in place and never moves a pixel. It still appears only when the beam is fully charged, and it sits well inside the pad with room to spare."],["v0.296","SUPERSTARS: THE WORDMARK STOPS LANDING ON THE OPENING BAR. Arriving at the carnival, the SUPERSTARS logo was sitting right on top of the FIVE ACTS - ONE MEGATON FINISH banner and its checkered flags behind it. The logo now rides a touch higher in its corner, and the opening bar drops below the whole HUD row - flags and promise line together, clear of the wordmark, clear of STAGE 1-5, and clear of the framed inkling on the left. Same entrance, nothing stacked on anything."],["v0.295","THE INK RINK GETS ITS WHOLE SHEET OF ICE BACK. The wordmark and its Japanese line were sitting ON the rink — on the folded phone the top row of the board ran underneath the title and the right-hand wall ran clean off the edge of the screen. The ice now measures itself against the room it actually has: it starts below the wordmark, keeps a clear lane beside the framed inkling on the left, holds a margin off the right edge, and stops above the D-pad. Then it grows into every pixel that is left — the folded board is a fifth taller than before (a genuinely bigger rink, not a stretched one), and on the unfolded screen it sits centred with room all round. Nothing is cut off on either fold anymore."],["v0.294","BULLET BALLET: THE HEADLINER GETS A HEALTH BAR. The boss fight had lost its HP readout entirely — the eight little hearts up top could not represent a hundred-and-fifty-point boss, so they simply never moved and the headliner looked invincible. In its place: a wide multi-coloured bar across the top of the stage with the name of the headliner above it, draining smoothly with every hit exactly like the rink clock, and flashing red past the last quarter. The hearts up top are YOURS again, and only yours. The fight is balanced too — the boss no longer scales without limit as your trophy count climbs, and your shots finally count your ATTACK power-ups. The laser is now genuinely devastating: a much wider column that vaporises monsters on contact and carves roughly a third of the bar of the headliner in one hold. And the X button moved to its final home — square above B, with A riding the middle on the right, the three of them identical circles."],["v0.293","THE ALBUM, TWO WAYS — AND THE 3D CARD RETIRES. The tilt-and-glare 3D inspector is gone: long-press any small card anywhere in the game and you get the ONE flat expanded card — full art, stats, story, UPGRADE and CLOSE all on a single screen, no scrolling, ever. A short press on an album card still just moves it (drag to the deck); the long press is for reading. The album pages got denser — three carts across on the folded phone, four unfolded — because the close-up now lives one press away, and all EIGHT deck slots fit in ONE row on the narrow screen. YOUR TROUPE 1 is plain DECK 1 now. And the PAGES / GALLERY toggle returns, done right: GALLERY is a vertical flip-book, one big card per row, everything you own top to bottom, with the ? carts you haven't signed waiting at the very bottom of that list only."],["v0.292","THE CREDITS TELL THE REAL STORY. The credits screen now opens on the true tally — the actual number of published builds (counted from the version ledger itself, not just the highlights list), the number of DAYS since the drawer opened on July 5, and ONE PERSON — with a line underneath that says how this game was really made: spoken into being. The Making of Inkville was rewritten as a proper story — more of Odaroo's own backstory, the kid who said he'd be a game designer, the drawer of ideas, the $400,000 quote, and the part that still sounds made up — in easy flowing paragraphs instead of a wall of section headers. And the little inkling on the credits beach stepped up above the SELECT and START buttons where she belongs."],["v0.291","THE GIG AUDIT — EVERY JOB ON THE BOARD IS NOW DOABLE. A pile of gigs pointed at rooms that no longer exist (the old Arcade's High Striker, Shell Game, Tug-o-War, the Midnight Show Colossus) — impossible to finish, quietly holding the GIGS badge hostage. All retired; any old save still carrying one re-rolls it instantly. Payouts got real: house gigs pay thousands now and the board speaks in k (6k INK, not 6000), FLASH gigs pay a fat 10k. Elsewhere: bonus bubbles stay tappable even while a message box is up and pop ONCE, clean, with their icons flying to the top-right reel — which is now the law for every currency gain in the game, nothing drifts toward the inkling anymore. Bullet Ballet's X button parks in a perfect triangle with A and B. And the title-screen cheats got their manners: INK×10 announces itself like every other cheat with +100,000 INK in plain words, VILLE×10 signs the CURRENT cast of 37 — no ghosts from old printings."],["v0.290","THE MART LEARNS TO BE SIMPLE — AND THE STARS BECOME LUNES. The shop is now two clean tabs: CARTS (the three booster packs — the singles rack and legendary rack are retired) and STYLE (frames, gear and costumes, everything buyable in ONE place, with the BUY EVERYTHING key living here now). The vault strip up top reads INK · LUNES · REELS — yes, LUNES: the star currency became a golden crescent moon with two little pixel eyes, renamed everywhere. Buying gear or a costume now asks if you want to WEAR IT NOW. The PROFILE stopped selling things: its Style tab is a pure wardrobe for what you own, unowned pieces point you to the Mart, and a WEAR EVERYTHING button appears as soon as you own two pieces. The Mart's red dot also watches the style racks now, and the jackpot orb receipt reads as a proper list — the headline first, each prize on its own line."],["v0.289","ONE SPLASH TO RULE THEM ALL. Every minigame now opens the exact same way: the Japanese name over the English one, dropping in from the top, holding dead centre, then riding down toward the HUD and melting away — no boxes, no square edges left behind (the Ink Rink frame ghost and Bullet Ballet's glitchy old intro are both gone). Ink Panik borrows Tetr-Ink's side column with a live NEXT preview and a tap-to-stash HOLD box, and both games' boxes sit lower so a fully dressed inkling never overlaps them. Ink-Put's stage rains the cast from the first deal, finished rows lock their arrows in GOLD with +SAFE! / +INK! / +24 BIT! riding the right edge, and a 24-run pays extra ink once the frame is already earned. NIM's top line became a looping typewriter that teaches the game. Dance Dance Ink's title no longer clips on the folded screen, and both rhythm games wear their STAGE 1-N under the title while the INK-TAR HERO page got amps, bolts, and a wordmark that actually rocks."],["v0.288","THE SAVE THAT FINALLY SAVES + A TIDIER CURTAIN-UP. The big one: a bug from the score-retirement era was quietly overwriting the save file with a BLANK one on every boot — progress vanished whenever the game reloaded. Found, fixed, and double-locked so no future code can ever write a save before the real one is read. Also: the studio bulb on the boot splash slimmed to 80%, the little icons over SELECT and START came off, and HOW TO PLAY is now simply TUTORIAL — a quick guide, no seats required, green to continue, red to cancel."],["v0.285","THE PRESENTS LINE STEPS UP TO THE LIGHT. Small polish on the intro card: the Odaroo and Co. Presents line moved up to sit right beneath the bulb — about the same cozy gap INKVILLE keeps on the title screen — and its lettering grew a size, trading a little letter-spacing for taller type so it reads bigger while still fitting on ONE line on the folded screen. No wrapping, no clipping, on either screen size."],["v0.284","THE INTRO GOES CLEAN AND SIMPLE. The studio splash was stripped back to its essence: the alligator lady has taken her bow and left the stage — her artwork, her walk-in, her wink and her glitch-out are all removed. What remains is the pure moment: one second of black, the lightbulb logo FLICKERS ON like a real light finding its current, and then it simply holds — steady and still above the Odaroo and Co. presents line. No halo, no glow, no breathing, no sparkles. Just the mark, lit. Then the usual flash and glitch-wipe carry you to the title screen on the same beat as always. As a bonus the game got lighter too — removing her embedded artwork trimmed real weight off the download."],["v0.283","THE CUTOUTS ARE FINALLY REAL CUTOUTS. The intro rectangles are gone for good — not hidden with a blending trick this time, but removed at the source. Both intro images were reprocessed pixel by pixel: the black backdrop was lifted out of the lightbulb logo and the white backdrop out of the leading lady, every stray edge pixel scrubbed, and the results saved with genuine transparency baked into the art itself. That means there is no rectangle left to show — on ANY phone, in ANY browser, at ANY moment of the animation, including the glitch-out where her red and cyan ghosts now split apart as clean silhouettes. All the blending tricks the old approach needed are deleted, the golden glow returned to hugging the bulb instead of a box, and the artwork inside is untouched — same colors, same detail, just floating free on the dark the way it always should have."],["v0.282","THE LEADING LADY GETS HER CLOSE-UP. Three intro fixes in one: she is TWICE the size now, standing tall beside the mark with her claw landing right on the bulb’s glass — real contact, not a reach into space. And the rectangles are gone: the logo’s glow was being drawn as a literal glowing FRAME (a shadow that follows a borderless image follows its rectangle), and the flicker effect was quietly making the logo’s black backdrop stop melting into the dark (a technicality of how browsers isolate blended images inside filtered containers). Both mechanisms are removed — the flicker now lives on the artwork itself, the halo carries the glow, and both PNGs sit on the black with zero visible edges. Her cutout also lost its last whisper of white fringe. One real bug fell out of the pass: her walk-in was riding the logo’s own fade, so in the dark phase she was actually invisible — the silhouette moment never showed. She truly steps out of the dark now, every time."],["v0.281","SOMEBODY HAS TO TURN THE LIGHTS ON. The studio intro gained its leading lady: Odaroo’s alligator dame — dark green suit, flower hat, white mane, little wings — embedded exactly as drawn, background lifted away so she sits on the dark. The card opens BLACK now: she steps out of the shadow on the right, a silhouette reaching up toward the bulb… touches it — and the light SNAPS ON, washing over the logo, the presents line, and her all at once, a white pop right at her claw. She beams, a star winks off her eye with a little two-note chirp… and then she GLITCHES OUT — red and cyan ghosts splitting off, scanline slices, a static crackle — gone, her job done. The lit logo holds the stage and the boot rolls on to the title, right on the usual beat."],["v0.280","THE STUDIO LOGO, THE REAL ONE. The bulb-on-target on the boot splash is no longer a redraw — it is Odaroo’s original artwork itself, embedded pixel-for-pixel exactly as supplied, sitting big and centred above Odaroo & Co. Presents. A screen blend melts the image’s black background into the dark card so it sits seamlessly, without touching a single pixel of the art. The flicker-on, the warm bloom, the breathing halo and the timing all stay exactly as they were."],["v0.277","THE ALBUM DRAG WORKS ON A REAL THUMB. Dragging carts into the deck was broken on the phone for a plain reason: the browser was claiming every touch as a SCROLL the instant a finger moved, killing the drag before it began — desk testing never caught it because synthetic pointers skip that fight. The gesture is rebuilt for touch: HOLD a card about a third of a second and it lifts (a little buzz, a ghost under your finger), then drag — the target slot lights up, drop to place, drop on an occupied slot to REPLACE its occupant, and toss a deck card anywhere away from the deck to REMOVE it. A quick flick still scrolls the pages, and keeping the hold perfectly still for a second escalates into the 3D inspector instead. The GALLERY view is retired — PAGES is the album, full stop. And the home screen dots got smarter: CARTS lights up when you own a card you have never laid eyes on in the album (opening it marks everything seen), and THE MART lights up when you can afford anything on its shelves and have earned ink since your last visit — a nudge to go spend, never a permanent glow."],["v0.276","FOUND IT: THE ×10 PERFECT SHRINK. The last piece of the mid-combo resize, caught in the act: the showstopper HUD keeps a PERFECT counter that only wakes up at ten — and when it appeared, its line of text wrapped onto a second row, and the play field (which flexes to fill the leftover space) handed those pixels over and visibly SHRANK, notes and all. Exactly at ×10, exactly when PERFECT lit up, in both rhythm showstoppers, both folds. The counter now owns its space from the very first note — PERFECT on one line, the ×count on its own line beneath, invisible until earned — and both HUD lines are bolted to a fixed height, so the board cannot give up a single pixel no matter what the text does. It fades in without so much as a scale pop. Measured to the pixel through the ×10 crossing on both fold sizes and swept across every standalone minigame combo display as well: byte-identical geometry before, during and after."],["v0.275","THE COMBO JOLT STOPS MOVING THE BOARD. Hitting a hot streak mid-brawl — right as the PERFECT calls stacked up — could make the whole screen lurch, skew and seem to overlap itself. The culprit was the glitch effect: for the aesthetic it physically SHIFTED the entire game a few pixels and skewed it, and it fires both on combo milestones and on a random ambient timer, so it kept landing right in the middle of play. On any game screen the glitch now works purely with colour — the hue jolt and the tear bar — and never moves a single pixel of layout: the board, your cards and the HUD stay bolted down through any combo, any showstopper, any celebration. The full physical jolt still lives on the menus, the title and the cheat rituals, where nothing is mid-play. Verified through a fourteen-hit PERFECT streak with glitches striking between hits: zero movement, before, during and after."],["v0.274","THE VICTORY SCREEN STOPS SWALLOWING TAPS. Tapping the background of the Bit-Brawl victory screen — easy to do while chasing the bonus bubbles — quietly dismissed the whole receipt and left you stranded on a frozen battlefield with nothing to press, which looked exactly like a crash. Two fixes, belt and braces: the end-of-match receipt (victory AND defeat) is locked now, so background taps do nothing and its buttons are the only doors — the bubbles still float above it and still pay when popped — and if ANY path ever closes the last dialog on a finished battle, the game now walks itself home automatically instead of leaving a dead screen. Your rewards were already banked either way; nothing is ever lost."],["v0.273","THE ALBUM BECOMES AN ALBUM. The Carts pages stopped cramming: two big cards across on the folded screen, three unfolded, every one showing its FULL artwork with room to breathe. Behind the pages the screen finally feels like a collector’s book — postage stamps from around the world, each carrying one of the cast, with faint character silhouettes scattered between them. AUTO BEST and AUTO FILL are gone; in their place a single hint — DRAG & DROP TO YOUR DECK — with a little arrow bobbing toward the slots, and the drag itself works as it always did: pull a card up to place it, drag it off to bench it. And the big one: HOLD ANY CARD, anywhere in the whole game — the album, your deck, a fresh pack pull, the card a roulette just landed on, the shop rack — and it rises into a full 3D inspector. Tilt it with your finger like a real TCG pull: the card leans under your touch, a light glare sweeps across it, and EPIC and LEGENDARY cards carry a holographic sheen that shifts as you turn them. The act’s story reads underneath, and holding a card that’s in your deck offers REMOVE FROM DECK right there. The home screen learned to point at things too: CARTS wears a red dot when any card has a level-up waiting, a freshly unlocked game wears one until you play it — and every game tile now carries a little comic-book “2x INK” shout. The FIRST run of each game every day pays DOUBLE ink; play it once and the shout disappears until tomorrow."],["v0.272","THREE GAMES GROW UP: NIM, BULLET BALLET, LUMEN INK. Nim looks like the rest of the arcade now — one inkling in the top-left corner, the title with its kanji and waving flags up top, STAGE 1-1 on the right, and the two old duel portraits are gone. Your opponent is simply the CPU, it tells you when it is thinking, and every match opens with a real coin flip: a two-faced coin tumbling end over end, slowing, and landing on YOU or CPU. Wins climb the stage ladder and pay more the deeper you go; a loss resets it. Bullet Ballet stopped flashing a stray inkling on its first frame — the curtain now rises on the BULLET BALLET splash with checkered flags waving on both sides, and the pilot only appears once the card clears. Its five stages are a true difficulty ladder now: stage 1 is approachable and stage 5 is a near-impossible swarm — bullets twice as fast, triple volleys, hecklers arriving four times as often. Surviving deep pays accordingly: the stage wheel now spins after EVERY run, and its legendary odds climb from 6% at stage 1 to a monstrous 78% at stage 5. Lumen Ink, the 500-cup finale, finally earns like one — payouts are roughly seventy times what they were, built from your blocks, level, and combos, because the last unlock should be the best earner in the house. Its songs settle in properly too: a track now plays until you have cleared 250 blocks (it used to flip every few combos), the sweep bar locks to the BEAT — one column per beat, so a four-beat bar sweeps 1-2-3-4 with the music — and every five songs the stage wheel spins with the kindest odds in the arcade. It wears the same title bar as everyone else, stage number included, and shows only ink — no score anywhere."],["v0.271","ONE NUMBER: INK. Score is gone from the whole game. Every mode used to keep two records — a score and an ink payout — which meant chasing a number that bought you nothing. Now whatever a run would have scored is paid straight out AS ink, and the only record any game keeps is BEST: the most ink you have ever banked in a single run of it. Every end screen, every stat line and the profile’s arcade log all read the same way, and your old high scores were carried across so nothing was lost. TETR-INK got the biggest correction — its payout was being divided by twelve on the way out, so a strong run paid about a tenth of what it should; it now pays roughly ten times more, with a bonus for every line and every stage reached. Tetr-Ink also plays properly now: a level is EIGHT lines, five levels to a stage, and the speed no longer drops back a rung when you cross into a new stage — it climbs one unbroken ladder for the whole run. Stage 1-1 always opens on the original Game Boy green (the random palettes only start from 1-2), the STAGE number wears a hard outline so it stays readable whatever colour the screen turns, and the card wheel now spins at the end of EVERY game with better odds the deeper you got. And the old profile screen is finally deleted: picking the BUG FINDER frame used to summon a pop-up and a whole dead screen from many builds ago. That entire legacy file — screen, pop-up, animation and all — is gone."],["v0.270","INK-PUT! GETS A DOWNPOUR, A SAFETY NET, AND A FRAME WORTH CHASING. The whole cast now rains down behind the arrows — every card's artwork tumbling past — and it answers to your combo: the further you climb, the more pieces fall, the faster they drop and the harder they spin, so a full run turns the backdrop into a proper downpour. The bars read at a glance now: clear your first eight arrows and a GREEN \"SAFE!\" seal stamps the bar, telling you it is banked and you can push on; every bar after that seals GOLD, because from there it is pure profit — and the third one seals 24-BIT! And that third bar is worth chasing, because the very first time you ever chain twenty-four arrows on one clock you earn the 24-BIT FRAME. It is built from twenty-four blocks of solid gold, one for every arrow of the run — deliberately sat between the eras, chunkier than a smooth 32-bit ring but shaded in three golds so it never reads flat, and it advances one block at a time like a counter ticking over rather than gliding round. It cannot be bought, it is not on the shop wall, and even BUY EVERYTHING will not hand it to you. Twenty-four arrows, one clock. That is the only way in."],["v0.267","B STOPS THROWING AWAY YOUR RUN + THE HOME FRAME FINDS ITS EDGE. A stray B press could quietly end a game: Superstars, Nim and Dance Dance Ink all fell through to a plain \"go home\", so one wrong button and the run was gone with no warning. Now B refuses to leave ANY game in progress and points you at the only real exit — START, then HOME, then the are-you-sure. Chasing that turned up a worse one: leaving Ink-Tar Hero or Lumen without formally finishing left the game marked as still running, and those flags were checked without asking WHICH screen you were on — so B went dead across the entire game until you replayed that one mode. Leaving a game now properly ends it. On the home screen, the light-bulb frame was wrapping the game TILES instead of the screen, and its top row of bulbs sat directly on the welcome line, punching letters out of it. The frame now hugs the screen edge exactly like the title screen, and the D-pad draws over its bottom run so no bulb ever lands on a button. The welcome line has its own clear band between the reel and the tiles, in bigger type with room to wrap onto a second line — and it is a fresh RANDOM greeting every time you arrive, seventeen of them, some of which call you by name."],["v0.268","BIGGER GAME NAMES UP TOP + INK PANIK FITS THE WHOLE BOARD. Every minigame's wordmark moved to the top-RIGHT corner and grew — bigger, racing-flag framed, with the STAGE 1-1 tag tucked directly beneath it, and it still shrinks itself to stay fully readable on the folded Fold. And Ink Panik got the fix it needed: its board used to run off the bottom of the screen and hide its lowest rows behind the D-pad, because it never reserved room for the gamepad the way Tetr-Ink does. It now sizes to the space ABOVE the pad and sits in a clean framed well, so the entire 6×12 field — plus the next-row peek — is always visible on a narrow phone, nothing tucked behind the controls."],["v0.269","TETR-INK TAKES CENTER STAGE ON BIG SCREENS. On a wide screen (like the unfolded Fold), the Tetr-Ink well and its NEXT/HOLD column used to slide over to the left edge; they now stay centered in the middle of the screen at every size, matching how Ink Panik presents its board."]]]]