Single source of truth for the whole game. Updated on every change. Single-player third-person action-adventure, browser (Three.js, no build step). Desktop + gamepad + mobile touch. Character GLBs stream from R2; everything else ships in the zip.
0 Β· Live tuning LOADINGβ¦
Every number below is imported from assets/js/config.js at page load β the exact values the running game uses, so this section can never drift. Change a value and hit Save: the diff is written to assets/config.overrides.json, which the game overlays on its defaults at boot (and which ships with the next deploy zip). Reset returns to the in-code defaults. Editing needs the local server β run PLAY_LOCAL.bat and open http://localhost:8231/assets/breakdown.html.
1 Β· Story & characters
John Cammarano drinks Flip 7 and becomes Quantum Flip to battle six unhealthy versions of himself sent by his older self, finally confronting Old John.
| Character | Role | Model file | Rig / animation |
| Civilian John | Hub form / pre-transform | Civilian_John.glb | DONE fully animated β idle, run + directional runs, jump, transform, pickup, mirror sequence, victory cheer |
| Quantum Flip | Hero combat form | Quantum_Flip.glb | DONE fully animated β idle, runs, jump, transform, 3-hit jab combo (Left Jab β Right Jab β Left Short Hook), blast, nova, overdrive, 2 hit reactions, death |
| Couch John | Boss L2 | Couch_John.glb | PLACEHOLDER static |
| Bloated John | Boss L3 | Bloated_John.glb | PLACEHOLDER static |
| Sugar John | Boss L4 | Sugar_John.glb | PLACEHOLDER rigged, static clip β procedural |
| Foggy John | Boss L5 | Foggy_John.glb | PLACEHOLDER static |
| Hangry John | Boss L6 | Hangry_John.glb | PLACEHOLDER static |
| Fast Food John | Boss L7 | Fast_Food_John.glb | PLACEHOLDER static |
| Old John | Final boss L8 | Old_John.glb | PLACEHOLDER static |
| Flip 7 Bag | Collectible | Flip_7_Bag.glb | static (spins) |
2 Β· Dialogue β all voice lines
Quantum Flip (voice: Liam)
- Transform: βFlip seven... let's flip the script!β
- Overdrive / quip: βAging? Not on my watch.β
- Low health: βI'm getting old fast... need a drink, now!β
- Mission clear: βStay fresh. Stay flipped.β
Bosses (plays on mission start)
- Couch John (Mortimer): βWhy stand... when you can just sink in?β
- Bloated John (Hank): βMmf... there's always room for one more bite.β
- Sugar John (Vinny): βSweet now, crash later, sucker!β
- Foggy John (Clive): βCan't think straight, can you? Heh heh...β
- Hangry John (Derek): βI am starving, and it is all your fault!β
- Fast Food John (Craig): βWould you like fries with that?β / βOrder's up, hero!β
- Old John (Hades): intro βLook at you. So young. So foolish. I am what you become.β Β· phase 2 βTime always wins, boy.β Β· phase 3 βTick. Tock. You are already too late.β
TODO more Fast Food barks, per-boss taunts, hub/ambient lines, mission-complete variety.
3 Β· Controls
| Input | Action |
| WASD / arrows | Move (camera-relative) β the hero turns to face the way he runs and turns fully around when moving backward |
| Mouse | Look (pointer lock; click to lock) |
| SPACE | Jump (land on small props) Β· double-tap SPACE while moving = dodge roll (brief i-frames) |
| SHIFT | Sprint |
| LMB | Quantum Jab (melee combo) |
| RMB (hold β₯2s) | Superfood Blast β charge then release; must be held at least 2s to fire (a quick tap only previews the aim cone) |
| F | Drink shaker |
| R | Shaker Overdrive |
| 1 / 2 | Protein Dash / Mega-Blend Nova |
| TAB / ESC | Objectives / Pause |
| Z | Cycle camera zoom: default β close (β40%) β first-person |
| Gamepad | Left stick move, right stick look, A jump, X jab, RB/RT (hold) blast, B interact, Y drink, LB sprint |
| Touch (PUBG-style) | Landscape: left thumb-stick moves (outer ring = auto-sprint); drag the right half to look; double-tap the right side to jump; VIEW zoom (top-left); PAUSE + GYRO (top-right); abilities are the HUD icons themselves (Dash/Nova, Jab/Overdrive, Blast hold-to-charge, Drink) in a cluster that wraps around the shaker bottom-right; HP/body meters are nudged right of the front-camera notch. Tutorial & menu Controls auto-switch to touch wording. |
Portals are walk-in (no button). Bags auto-collect on contact.
Mobile layout (PUBG-style, landscape): move joystick bottom-left; narrow HP + body meters sit above the joystick; right ~58% is a free multi-touch look-drag zone (look while holding a button with another finger) and double-tapping it jumps; abilities are the HUD icons doubling as buttons in a spaced diagonal staircase (Dash/Nova β Jab/Overdrive β Blast β Drink) that wraps around the shaker bottom-right (shaker slimmed to bottle + count); objectives are a wide white bubble pinned to the bottom-center (always visible); the boss bar is narrowed so it never reaches the player HP; the lifetime Flip 7 total shows at the top of the hub; PAUSE + GYRO top-right, VIEW zoom top-left; pause works from the hub and the pause menu has a NEW GAME (2-tap confirm); fullscreen is requested on every interaction (so it returns after the phone screen sleeps/wakes, not just the first tap); menus shrink/scroll so rotation never clips them; saves are device-local (localStorage + partitioned-cookie fallback) and survive refresh; tutorial/hub/Controls text uses touch wording and the menu CONTINUE loads the last save; tilt-to-look (iOS asks permission on first tap); a portrait overlay prompts rotation to landscape. The first tap requests fullscreen (Android/desktop). On iPhone/iPad the browser can't fullscreen the page, so the game requires Add to Home Screen: iOS Safari that isn't running standalone is blocked at a branded gate (Share β Add to Home Screen β open from the icon); launched from the Home Screen it runs full screen with the dvh / viewport-fit=cover fill, and it hides the Higgsfield wrapper's 44px top bar (via the wrapper's same-origin hf-embed class) so it's edge-to-edge like Android. The gyro toggle is a GYRO β RESET button: tap GYRO to activate tilt (lights up, reads RESET); tap RESET to deactivate and snap the camera back to the default over-the-shoulder view. A VIEW button (top-left, opposite the gyro) cycles the 3 camera levels (VIEW 1 β VIEW 2 β FPV); pushing the move-stick to its outer ring auto-sprints (the ring glows gold). Tuning: CONFIG.touchLookSens, CONFIG.gyroGain, input.gyro.invX/invY.
4 Β· Player abilities
| Ability | Key | Cost | Damage | CD | Notes |
| Quantum Jab | LMB | β | 13/hit (3rd Γ1.6) | 0.36s | Short arc; reduced by ARM aging |
| Superfood Blast | RMB (hold β₯2s) | β | 12 / sec held β 2Γ (24) at the 2s min, up to 5Γ (60) at 5s | 3β7s (hold-scaled) | Hold β₯2s to fire (a quick tap only previews the cone β bright cyan until it arms green, shown in first-person too β sloped toward the ground, with the charge orb scaled down in FPV); can't be charged while on cooldown (the button greys out); hits everything in a ~90Β° forward vision cone, a visible orb chains nearestβfurthest until spent |
| Protein Dash | 1 | 1 bag | 30 (= half blast) | 0.6s | Lunge; physically stops at the first wall/prop (can't dash through objects) and only hits enemies in a clear lane, vacuums bags |
| Mega-Blend Nova | 2 | 5 bags | 60 (= full blast), r 6.5 | 1.0s | Also heals 10% aging |
| Shaker Overdrive | R | 7 bags (full) | +20% all dmg | β | 20s; faster; no limb aging, ~1% HP chip per hit |
| Drink Shaker | F | 1 bag | β | β | Heals worst part first; all clean β +30 HP |
Numbers live in assets/js/config.js. Overdrive's +20% applies to jab, blast, dash and nova.
5 Β· Shaker / bag economy
- Shaker holds up to 7 charges. 1 Flip 7 bag = 1 charge.
- Shared currency β Drink 1 Β· Dash 1 Β· Nova 5 Β· Overdrive 7.
- Bags respawn steadily (field kept ~5) every mission incl. boss.
- Collecting when full leaves the bag on the field.
- HUD: bottle fill = charges/7; hotbar slots show cost, dim when unaffordable, glow + chime when usable; Overdrive slot drains over its 20s.
6 Β· Body-aging system
Enemy hits age the struck part +16% and apply a debuff. Drink (F) reverses the worst part first.
| Part | Debuff at full |
| Legs | β45% move speed |
| Arms | β45% jab damage |
| Torso | +40% damage taken (max HP now constant) |
| Head | Vision vignette + aim sway (loopy) |
Passive HP regen 1.6/s after 4s without a hit. Lose at HP 0 β βYOU'VE AGED OUTβ. PLACEHOLDER rigid meshes can't wither per-limb β aging shows via HUD panel + vignette only.
7 Β· Hub β Flip Ranch Wellness Center
- You are Civilian John here (idle / walk / run animated).
- 8 portals in an arc β walk into an unlocked one to start.
- Portal colors: gold = unlocked, green = completed, gray = locked.
- DEV MODE toggle on the menu (persists) unlocks every portal for testing.
- Warm-wood ranch, glowing gold pillars, Flip My Life logo, mirror.
8 Β· Missions
Mission 1 is the tutorial; each combat mission = transform cinematic β one boss + minions + Flip 7 bags β return to ranch.
| # | Title | Villain | Environment | Boss HP | Min | Bags | Ages |
| 1 | Mirror Moment | Holographic echoes | Ranch mirror room | β | echo | 1 | tutorial |
| 2 | The Comfort Crisis | Couch John | Decaying living room | 220 | 4 | 4 | Head |
| 3 | Gut Check | Bloated John | Messy kitchen | 260 | 5 | 5 | Torso |
| 4 | Crash & Burn | Sugar John | Candy shop | 240 | 6 | 5 | Arms |
| 5 | Into the Fog | Foggy John | Foggy streets | 250 | 5 | 5 | Legs (+head) |
| 6 | Rage on an Empty Stomach | Hangry John | Diner | 300 | 6 | 5 | Torso |
| 7 | Grease Lightning | Fast Food John | Fast-food lot | 320 | 5 | 6 | Torso (+head) |
| 8 | The Mirror Reckoning | Old John | Distorted ranch + mirrors | 520 | 4 mix | 6 | All |
Tutorial (Mission 1 = Quantum Boot Camp): the experience question ("played games like this before?") is asked on the menu BEFORE the level loads (so you see the transform animation + first objective uninterrupted), plus an always-available Skip training. The objective then reads through (controls frozen, enemies held) before the level officially starts. Both answers run the same 14 stages β move β sprint β look β jump β zoom β jab β blast β bag β dash β nova β aging+drink β overdrive β exam β done β "yes" is a standard run-through, "no" is a fully guided version (run through floating rings; hold aim on an orb for 3s while a cyan ring fills + a tone rises; jump onto the box with the orb on top of it β the orb vanishes on landing, the box stays; cycle to first-person β both modes now cycle all the way to FPV) with a small, slim, thin solid red 3D arrow (an extruded, lit block-arrow) pointing at each objective. The dash & nova drills make you clear EVERY echo with that ability (reuse it freely; dash only hits a clear lane and stops dead at walls/props). During the Jab / Blast / Dash / Nova / Overdrive drills only that power works β every other button greys out. The aging explanation and the drink-to-heal step are now ONE objective: it shows the full-aged dizzy head with all abilities locked until the line finishes, then you drink to heal (only DRINK is enabled and there's always something to heal, so the lit button always works). While any objective is being read aloud the controls are frozen (now on every level, not just training) so you listen first. A new objective loads CENTERED behind a dark full-screen veil during the read, then minimizes straight to the bottom pill (no bottom-bubble step; tap the pill to re-open the normal bottom bubble); it auto-sizes to the text (no scroll). Every stage is voiced aloud, gated, and device-aware, with a "β Objective complete" beat between stages. There is no auto-skip timeout β every objective must be completed; holograms take 3+ jabs to drop.
PLACEHOLDER environments are procedural geometry + generated tiling textures + primitive props (not modeled scenes).
9 Β· Enemies
Minions (melee-only)
- Chase + melee lunge, 0.7Γ contact damage. Now separate (no stacking) and collide with props.
- Fast Food minions: some carry a soda and spill it β slows your legs PH.
- Old John minions: start as one of each of the six Johns, then respawn as a random mix; all deal only 20% damage, and each ages the body part its own boss does (couchβhead, bloatedβtorso, sugarβarms, foggyβlegs, hangry/fastfoodβtorso).
Boss signature attacks PLACEHOLDER (basics; awaiting real anim/props)
| Boss | Attacks | Ages |
| Couch John | Throws pillows | Head |
| Bloated John | Belly-bump dash + belly-slam AoE (knockdown) | Torso |
| Sugar John | Super-sprint dash + donut projectiles + candy-cane melee | Arms |
| Foggy John | Banana throw (slip β knockdown) + colander frisbee (head) | Legs/Head |
| Hangry John | Pitchfork rage dash + thrown pitchfork; eats Flip 7 bags to heal (beelines when hurt) β you compete | Torso |
| Fast Food John | Fry daggers (βWould you like fries with that?β, not every throw) + giant cheeseburger telegraphed AoE (knockdown) | Head + Torso |
| Old John | Mix of every boss's attacks + staff slam (radius AoE with a sand-gold ring) ages all four parts a quarter each only if you're within range; 3 phases (time-warp at transitions) | All |
All bosses approach to a preferred range then strafe (no longer freeze on you). Projectile placeholder shapes: pillow=box, donut=torus, banana=capsule, colander=disc, pitchfork=cone, burger=sphere.
10 Β· UI / HUD
- Main menu: gold logo, βQUANTUM FLIP / SHAKER PROTOCOLβ, flavor βDrink up. Flip back. Stop yourself.β, NEW GAME / CONTINUE / CONTROLS (+ GAME BREAKDOWN when DEV MODE is on), DEV MODE toggle, version βQuantum Flip v1.0β. CONTINUE appears only after a game has been started.
- HUD: crosshair with a blast-cooldown ring (fills after a blast β on touch the BLAST button also greys out while cooling down) plus a cyan aim-hold ring during the guided look drill; health bar; body panel (legs/arms/torso/head, worst highlighted); shaker bottle + charge count + next-heal label + βOVERDRIVE READYβ; hotbar (1 DashΒ·1, 2 NovaΒ·5, R O.DrvΒ·7); Flip 7 bag-icon counter by the VIEW button (lifetime total in the hub, mission count in a level); boss HP bar; objectives (TAB; a new objective loads CENTERED behind a dark full-screen veil while it's read β controls frozen, then minimizes straight to the bottom pill on touch (no bottom-bubble step), tap to re-open the bottom bubble; auto-sizes to the text, no scroll); during a power drill the hotbar greys out every button except the one being taught; a ββ Objective completeβ beat between tutorial stages; hit vignette; captions/toasts.
- Overlays: PAUSED β in a mission: Resume / Restart / Back to Ranch; in the hub: Resume / New Game (2-tap confirm) / Quit. MISSION COMPLETE (bags, shaker efficiency %, time), βYOU'VE AGED OUTβ (Retry / Return to Ranch), βClick to lock the mouseβ.
11 Β· Audio
- Music (loops): hub theme, combat theme, Old John finale theme.
- Generated SFX: bag pickup, shaker drink, jab, blast release, aging crack, fry dagger.
- Synth cues: jump, dash, nova, overdrive, hit, hurt, UI/ability-ready, win, transform, blast charge-up tone.
- Voice: full cast (section 2). Every objective is read by a pre-rendered "Sterling" voice clip (all 14 tutorial stages, desktop + touch wording, plus each mission objective) β keyed by the exact text (
assets/js/voiceobj.js) so the audio matches the on-screen line, and the read-lock ends exactly when the clip finishes (perfect timing). Browser TTS is the fallback. The music ducks for the whole read and returns to normal when the objective first minimizes.
- TODO dedicated charge/release SFX, per-attack boss SFX, more barks, per-villain music.
12 Β· Art direction (locked style)
Realistic modern Florida ranch + wellness aesthetic blended with vibrant superfood energy; warm wood browns, sun-bleached stucco, charcoal shadow; heroic accents glow lime-green and Flip gold; per-level tint (couch=dim amber, candy=pink/cyan, fog=blue-gray, fast food=greasy orange, Old John=sand-gold + mirror silver). Generated tiling textures: ranch floor/wall, living carpet, kitchen tile, candy floor, wet asphalt, diner floor, cracked sand.
13 Β· Physics / collision DONE v19
- Square arena (corners reachable); props are circle colliders with a height.
- Player and enemies pushed out of props + clamped to arena.
- Jump onto small props (couches/counters/booths ~0.8-1.2); tall props (pillars, mirrors) stay solid.
- Enemy-enemy separation (no stacking).
- Projectiles + fry daggers stop and embed in walls/props ~1s then vanish; on a hit they disappear immediately.
- Dash steps along its path and stops at the first wall/prop (can't teleport through objects), and only damages enemies it has a clear line of sight to.
14 Β· Save / progression
- Device-local save: highest unlocked mission + completed set + lifetime Flip 7 total + a
started flag; completing a mission unlocks the next and banks its bags.
- Stored in localStorage with a partitioned-cookie fallback (plus a Storage Access API attempt), flushed on hide, so progress survives a refresh even in an embedded iframe; the menu CONTINUE loads the last save.
- DEV MODE flag stored separately (
quantumFlipDev).
15 Β· Tech / pipeline
- Three.js r160 (vendored) + GLTFLoader + SkeletonUtils; importmap maps
three.
- Character GLBs stream from R2, lazy per mission, with a stall/timeout watchdog β fallback capsule (a βfloating brown pillβ in-game = a model failed to load β usually a wrong filename or bad upload).
- Animation: AnimationMixer + an explicit logicalβclip-name map (
CONFIG.ANIM per model). Locomotion crossfades idle / run / directional runs; standing still + turning the camera plays a brief walk-step (scaled to turn rate) so the feet don't slide. Combat actions (jab combo, blast, nova, overdrive, hit reactions) play on the UPPER body as a 2-layer split β the legs keep moving, so you never freeze or get stuck (single-layer fallback is interruptible by movement). Full-body actions (jump, transform, death, victory) take the whole body; only death/transform/victory lock movement. The jab combo is always Left Jab β Right Jab β Left Hook (looping; resets to Left Jab when the combo timer lapses, Left Hook is the heavy finisher), speeds up the faster you click, and upper-body jabs where the hips/legs follow your movement; each punch is aimed by yawing that arm's shoulder (setArmAim, per-stance SHOULDER_COMP) while the lower spine only handles aim-vs-movement and the head twists independently to follow his body; gated by a small jabCd delay, opening Left Jab snappy. All jumps use one slowed leap clip. Superfood Blast aims the right arm STRAIGHT along the QB-vision cone while charging (two-pass IK: point β straighten elbow β re-aim, + partial torso twist; asymmetric right-arm limits with behind-left aims wrapping around his right side β never through the body) with a procedural recoil on release; FPV hides from the neck up, eye above the shoulder line (+1.74, 0.30 fwd) with a 74Β° FOV so arms show at full extension, orb in the palm (camera aim only when standing still, so punches go where you're moving); the jump uses a running-jump clip when moving / in-place when standing and the hero faces the way he leaps (fit to the airtime, cut on landing); the heavy hit-reaction only fires at β€30% health; the objective read-lock freezes movement during the read but a drill's allowed ability still fires, with a watchdog that always releases the lock. Blast orb emits from the right-hand bone. Static-pose exports β procedural fallback.
- Replacing a character: rig + animate in Meshy, export GLB with real motion (verify in gltf-viewer.donmccurdy.com; no Draco/Meshopt/KTX2 required), upload to R2, tell me the exact filename.
16 Β· Placeholder / TODO board
- Rig + animate Quantum Flip (idle/walk/run/jab/blast/dash) β currently procedural
- Rig + animate the 6 mid bosses + Old John (locomotion + signature attacks)
- Held props: candy cane, pitchfork, knife, banana, colander (head), hourglass staff, fry container, cheeseburger, soda
- Real knockdown / fall animation (currently a speed-stagger)
- Charge orb anchored to hand + real VFX; dedicated charge/release SFX
- Modeled environments (currently primitive set-dressing)
- Per-limb aging visual on the character
- More dialogue (boss barks, hub lines)
17 Β· Changelog
- v100 β Two overhaul showcases + contained mobile doc tables. The features deck's finale tracks the latest gameplay overhaul (Quantum Boot Camp) AND the latest performance overhaul (Mobile Performance) separately; and the live-tuning inputs no longer blast past their boxes on mobile β async-injected tables are now re-wrapped (MutationObserver) so the page never scrolls sideways.
- v99 β Deck mobile nav out of the way + touch-mock scaling. Dot rail is desktop-only (mobile: compact β/β + "n / 13" counter, bottom corner, safe-area); the touch-controls mock zoom-scales to its container in portrait instead of jumbling its fixed-px controls.
- v98 β Deck actions tuck away on phones. The full-screen / PDF / PowerPoint bar collapses into a β― corner button on mobile (tap to drop the actions down; tap-away closes) so it never covers slide content; desktop bar unchanged.
- v97 β Deck fullscreen edge-to-edge + portrait cone polish. `viewport-fit=cover` + safe-area padding kills the fullscreen-landscape letterbox bar (deck was shifted right of a black bar on the notch side); portrait QB-vision stages resized with proportional triangles (fixed-size CSS cones didn't scale when stacked full-width).
- v96 β Features deck reflows on phones. Mobile no longer zoom-shrinks the desktop layout: β€820px/β€540px viewports get a re-arranged bigger layout (2-up cast grid, stacked ability cards, larger type, full width; landscape goes multi-column), snap relaxes to proximity so tall slides scroll naturally, and the shrink-to-fit engine is desktop-only. Print/PDF untouched.
- v95 β Features Showcase ships inside the game. DEV MODE unlocks a second menu button β FEATURES SHOWCASE β opening the cinematic 13-slide feature deck (
assets/features.html) in the same framed viewer as GAME BREAKDOWN (one iframe, src swaps per doc). Deck: menu/HUD recreations, config.js ability numbers, campaign + villain tables, changelog + Mobile Performance Overhaul finale, fullscreen/arrows, print-to-PDF, native features.pptx, fit-to-viewport (never clips). Auto-adds a REAL FOOTAGE slide from assets/docs-media/manifest.json when captures are dropped there. Docs are phone-viewable at docs.appolis.app and on the live game URL once deployed; breakdown docs gained the mobile section navigator (β° Sections bottom sheet) + responsive table guards.
- v94 β Camera under-floor fix + ceilings for indoor stages. (1) Looking fully up sank the orbit camera β2u BELOW the floor (one-sided plane β it vanished from beneath). The camera now clamps just above floor level and slides along it; the floor also renders double-sided so a transient frame at floor height can never show a hole. (2) Ceilings for the three indoor stages β Couch John's living room (dim plaster), Bloated John's kitchen (pale), Hangry John's diner (dark) β at wall-top height, camera-blocking like walls. Open-air stages (ranch, candy land, foggy street, parking lot, desert) intentionally keep their skies. Per-mission
ceiling color in the mission config, tunable per level.
- v93 β Gyro button root cause + last of the touch-spam lag. (1) The gyro permission request was made from
touchstart β but iOS only honors DeviceOrientationEvent.requestPermission() from a COMPLETED gesture (touchend/click), and our touchstart preventDefault suppressed the synthetic click, so the prompt silently never appeared on ANY iOS device. Now bound to touchend; plus a 3s race for the promise-hangs-forever case with its own toast ("iOS never showed the motion prompt β fully close the app and reopen"). (2) All 15 procedural cues (jump/dash/hit/hurt/novaβ¦) pre-rendered to audio buffers at load β each jump/dash previously built an oscillator+envelope graph on the main thread; playback is now one cheap buffer source (verified: 5 rapid cues β 0 live graph builds). (3) Per-frame look-delta object reused instead of allocated 60Γ/s (less GC during heavy simultaneous touch input).
- v92 β Touch-start hitch two-pronged + gyro watchdog. (1) The silent iOS audio-unlock could re-run
src= + play() on EVERY gesture when iOS left its promise unresolved (~100ms media stall per touch) β now max once/3s, never mid-narration, never re-assigns an identical src (verified: 4-gesture burst β 1 media op). (2) Shaders pre-compiled at level entry (renderer.compile in hub + cutscene end) β first-draw compiles during the first look-around were a mid-drag stall; the cost now lands in loading. (3) Gyro watchdog: permission granted but no tilt data within 2.5s β toggles off + reports "no tilt data arrived" (separates denied / no-prompt / no-events).
- v91 β Look-drag start hitch + smarter gyro messages. (1) The iOS hitch fires at the START of every look-drag β the per-gesture audio resume retried
music.play() on every first touch (synchronous media work on iOS = a frame stall); now rate-limited to 1/second. (2) Gyro correction: newer iOS DOES prompt in Home-Screen apps (works on iPhone) β a dead iPad button most likely means a remembered denial, which iOS never re-prompts; the toast now says so ("remove & re-add to the Home Screen to get the prompt back") vs. the generic drag-look fallback.
- v90 β iPad gyro feedback + jump-hitch hunt round 2. (1) GYRO button no longer plays dead on iPad β iOS won't show the motion prompt in Home-Screen apps; the button now toasts "Tilt look is blocked by iOS here β drag the right side to look instead" when permission can't be granted. (2) Animation variants pre-built at load β the filtered upper/lower clips (jump, jabs, hits) were constructed lazily on first use = a mid-game hitch; now built during load/cutscene. (3) Dev meter shows worst frame ("58 FPS Β· 150% Β· pk 87ms") so hitches can be reported precisely.
- v89 β Jump-tap hitch on iPhone/iPad. A jump is a double-tap, and every tap fired
goFullscreen() on FIVE event types (~10 fullscreen requests per jump; on iPad each does real browser work before rejection) via non-passive window listeners iOS must wait on. Now: one event per interaction, rate-limited to 1/1.5s, skipped entirely in standalone mode, rejections swallowed; fullscreen + audio-unlock tap listeners all passive; audio unlock fast-paths once warm. Behavior unchanged.
- v88 β Real build number on the menu. The footer said "v1.0" forever; it now shows the actual build ("Quantum Flip Build v88") via a
VERSION constant in config.js β single source of truth, bumped every deploy.
- v87 β Mobile attack lag + win/death race + blast arm v5. (1) Mobile combat lag = shader-recompile storm, fixed: every projectile/bag/charge-orb carried a dynamic PointLight, and any light-COUNT change makes THREE recompile all lit materials β every boss attack hitched. All transient lights removed (glow kept via emissive + additive discs), projectile/fry/burger/ring geometries+materials cached & shared, bursts halved on phones. No moves changed. (2) Win + death mutually exclusive β whichever lands first stands (the boss-death timer could fire after you died, stacking overlays). (3) Blast arm v5: trails the aim naturally to fully-behind on his right; past his left shoulder it switches to a bent-elbow reach across the FRONT (verified ~59Β° elbow bend, no back-winding β the "double-jointed" look was the straight-arm IK rotating through the back).
- v86 β Six-fix batch (v85 feedback). (1) iPhone jump-spam drops fixed β the adaptive loop over-reacted to single hitches (resize β hitch β resize feedback); now median-of-4 + 2.5s cooldown, only sustained slowness resizes. (2) Blast arm per spec β tracks the aim across the front-left (β69Β°) and around his right to behind (+138Β°) while backpedaling; crossing the through-back dead zone flips it to reach across the FRONT of the chest, never through the body. (3) Echoes always take 3+ jabs (HP > a full 1-2-3 combo). (4) Blast lit at the start of its own drill (stale grey from the prior drill cleared on transitions). (5) Vocals never overlap β lines during a read queue and play after; a read silences mid-sentence lines; one voice at a time. (6) Victory hand no longer sticks β finished overlays fade out + release the arm layer.
- v85 β Adaptive resolution (desktop lag fix) + real menu replica + local play. (1) Reported desktop fps (menu 35-40, hub 4-5) = GPU pixel overload (fullscreen high-res Γ 1.5 ratio β up to 19M px/frame). Now: ~3.2M render-pixel budget (4K starts at 0.62 scale β 6Γ fewer pixels), no MSAA at 4K-class sizes, and an adaptive loop (sustained <45fps β scale down to a 0.5 floor; >57fps β sharpen toward the cap; background samples ignored). Dev meter shows the live scale. (2) Lander excerpt now replicates the real dark Share menu: icons left, dimmed Quick Note / Find on Page, bright Add to Home Screen at the bottom where it really is. (3) PLAY_LOCAL.bat (repo root): serves the local build at localhost:8777; as Administrator it also prints a LAN address for phones on the same Wi-Fi.
- v84 β Lander example no longer looks like a button. The pulsing "Add to Home Screen" row read as tappable. It's now clearly an illustration: a static excerpt of the Share menu with the target row between two dimmed rows (Copy / Markup), no pulse, italic caption "what the Share menu looks like". Tapping it anyway flashes step 1 gold + shows "βοΈ That's just a picture β tap Safari's Share button β¬".
- v83 β Lander button removed + perf pass + FPS meter. (1) The gold button is gone β field testing proved the programmatic share sheet (
navigator.share) does NOT contain "Add to Home Screen" (it shows Amazon/Walmart/Lens app actions); only Safari's own toolbar Share button opens the right menu, so the lander now points straight at it (bouncing β¬, replica row always pulsing gold). (2) Perf: static world matrices frozen after build (~40 objects, no per-frame matrix math; animated decor exempt) and the camera-collision ray tests only walls+props (12 flat meshes) instead of the whole world incl. the 512-tri sky sphere. (3) Dev-mode FPS meter top-left for precise real-session numbers (hub/mission measured 60fps un-throttled).
- v82 β Lander scrolls when it needs to. Short screens (landscape phones) now scroll properly: fixed the centered-flex-column overflow trap (flex-start + auto margins β centered when it fits, scrollable when it doesn't), steps don't squish (
flex-shrink:0), and iOS gets touch-action:pan-y + momentum scrolling. Verified landscape end-to-end + portrait still centered.
- v81 β Safari lander rebuilt (conversion pass). iOS still has no API to add to the Home Screen from a button (the share sheet is the legal maximum), so the lander makes the manual path unmissable: (1) a pixel-replica of the exact "Add to Home Screen" share-sheet row (white row + β icon); (2) tapping the gold button opens the share sheet AND flips the page to "NOW SCROLL DOWNβ¦" with the mock row pulsing gold; (3) in-app browser detection (IG/FB/Messenger/Snapchat/TikTok/Line/WeChat/X/Google app) β those webviews have no Add to Home Screen at all, so they get "OPEN IN SAFARI FIRST" steps instead of instructions that can't work; (4) menu-title branding + tighter two-tap copy.
- v80 β Blast arm never crosses the body. Turned fully around, the aim arm cut through his torso β the old Β±83Β° limit was symmetric, but a right arm isn't: big sweep on its own side, yet ~30Β° across the chest goes through the body. Limits are now asymmetric (~115Β° past the twisted chest to his RIGHT, ~20Β° to his LEFT) and a behind-left aim wraps the long way around his right side (torso twist follows) β a turned-around blast points back over his right shoulder (~149Β°), never through the chest. Verified across the full aim circle.
- v79 β First-person reframed. The FPV camera sat right on his shoulders, so a punching fist was centimeters from the lens and filled the frame. The eye now sits above the shoulder line (1.62β1.74) and further back (0.30 fwd, was 0.52) so arms extend away from the camera at full extension, and FPV uses a wider FOV (62Β°β74Β°) so near objects read smaller (restored in third person). Neck-up stays hidden β nothing clips.
- v78 β Start on VIEW 2 everywhere. Every mission start and hub return begins on VIEW 2 (close camera); a
_setZoom helper keeps the touch VIEW button label in sync whenever the game force-sets the view (tutorial zoom/jab drills included).
- v77 β Blast-aim polish (v76 feedback). (1) The pointing arm is straight now β v76 aimed the shoulderβhand line but left the elbow bent from the run swing; the forearm is straightened + re-aimed in the same pass (verified: both segments align to the target). (2) FPV no longer clips through the body β hidden from the neck up (not just the head) and the eye pushed forward (0.28β0.52) clear of the shoulders. (3) Charge orb in his palm β the hand bone origin is the wrist; the orb is offset 0.16 along the forearm into the hand.
- v76 β Superfood Blast overhaul. (1) The QB-vision cone turns GOLD at full charge (cyan preview β green armed β gold maxed, matching the orb). (2) First-person arms β FPV shows the body with the head hidden: arms pump while running, punches extend, and the blast charges in his right hand; the body follows the camera so you never see your own front. (3) The right arm points along the QB vision while charging (one-bone IK + partial torso twist, slight pitch follow); aiming behind you bends the arm as far as natural (~83Β° past the torso) β never through the body; movement never locked. (4) Release recoil β the old cast clip is gone; firing kicks the pointed arm up as the blast leaves his hand, then it settles back. All procedural.
- v75 β Blast-drag fix + black-floor guard + camera snap. (1) BLAST hold-and-drag wigged out with two fingers down β batched touch events could deliver the STICK's finger to the blast handler (giant camera deltas; lifting the stick fired the blast early). The blast finger is now tracked by touch identifier β only the finger that landed on the button aims or releases. (2) Hub floor can never load black β a failed/stalled texture load left an empty map bound (renders black, seen after Skip Training). Failed loads evict from the cache and a 6s guard drops a never-arriving texture to a solid color. (3) Camera snaps into place on scene entry (hub/cutscene/mission) instead of lerping from a stale spot.
- v74 β Drink culprit found + hub VIEW + hitch-free transform. (1) The recurring "can't drink with a full shaker" bug was never input: every bag pickup changes the objective text, and the bubble treated that as NEW and re-expanded on top of the DRINK button (z20 over the buttons' z10, eating taps) β full shaker = you'd just picked up bags. Text-only refreshes now keep the bubble minimized (only a real new-objective read expands), and the touch buttons sit above the bubble (z26). (2) Hub VIEW restored β v71's queue drain was eating the hub 'zoom' press; the drain now only runs in missions (and honors VIEW during read-locks). (3) Transform swap hitch-free β Quantum Flip is pre-built during Civilian's cast (clone + mixer ready) and warmed at microscopic scale so the GPU compiles his materials early; the swap just switches objects.
- v73 β Full-codebase hardening pass. (1) GPU memory leaks fixed β VFX geometries/materials, killed enemies' & collected bags' cloned materials, the old hero model on transform, and
world._dispose's no-op material loop (+ leaked sky/label textures) are all properly disposed now; long sessions no longer degrade. Bursts share one particle geometry. (2) Bursts fade (material was missing transparent:true β they popped). (3) SFX β Web Audio buffers: correct iPhone volume (element volume is ignored on iOS), lower latency, no per-play cloning; fallbacks kept. (4) Audio auto-recovers after phone sleep β context resumes + music restarts on visibilitychange and any gesture. (5) HUD diff-guarded β ~20 style/text writes per frame reduced to writes-on-change only. (6) Transform nova shockwave β gold + green ground waves, rising energy ring, light flash, dual burst at the Civilian β Quantum Flip swap.
- v72 β Punch-aim tuning. Stronger shoulder correction on the Left Jab & Left Hook (still landing left) β
SHOULDER_COMP idle {LJ 0.78, RJ β0.6}, running {LJ 0.85, LH 0.85} β and a softer aim-vs-movement torso twist (clamp 1.1β0.6) so running backward no longer wrenches his upper body around.
- v71 β Drink reliability + lander button + shoulder-aimed punches + leap jump. (1) Drink-to-heal is processed directly in a mission before any ability gating (
input.take('drink')) so it's never blocked by a read-lock/knockdown/ability-lock; _drink still only refuses with no bags or nothing to heal. (2) Safari lander gets an Add to Home Screen button β iOS has no direct API, so it calls navigator.share() to open the share sheet (manual steps stay as fallback). (3) Punches aimed by yawing the punching arm's shoulder (setArmAim, per-stance SHOULDER_COMP) instead of the whole torso. (4) All jumps use one slowed leap clip (running-jump @ 0.55Γ) so his legs don't sprint in mid-air.
- v70 β Transform stays planted. The transform cast clip has root motion (stepped him forward/back), so Civilian drifted and Quantum Flip picked up from a different spot. The Animator now strips the clip's horizontal root motion during the cast (
anchorRoot, set in playCast / cleared in _endCutscene, vertical kept), so he stays in the exact same position and the two models line up. Gameplay locomotion untouched. (Nova-style transform VFX noted for later.)
- v69 β iPhone right-side look β the actual fix. The look handlers were on
window (bubble phase), so iOS swallowed a lone finger's touchmove as a page gesture before preventDefault ran (hence only working with the stick also down). Moved touchstart/move/end onto the canvas (the real touch target, touch-action:none) and preventDefault in its touchstart, so a single right-finger drag is delivered immediately.
- v68 β Head follows his body + per-stance punch tuning + drink + iPhone look. (1) The head now follows his body instead of chasing the crosshair β runs backward β looks at you, idle β faces forward (v67 over-rotated left / looked over his shoulder); still kept independent of the punch (counters the torso twist). (2) Punch aim tuned per stance Γ per jab (idle vs running each get their own Left Jab/Right Jab/Left Hook nudge) via
JAB_COMP. (3) Drink works even when knocked down β only "no bags" or "full + nothing to heal" block it. (4) Another iPhone look fix β a lone right finger was canceled by iOS selection/callout gestures; added user-select:none/touch-callout:none atop touch-action:none.
- v67 β Punch aim (measured), head look-back, iPhone look. (1) The punch now measures his chest's real facing (from the shoulder bones, handedness auto-resolved) instead of assuming it matches his body, so idle & running aim the same way; per-jab Left Jab/Hook comp bumped to 0.45/0.55. (2) The head can look much further back (over the shoulder) when he's turned around, instead of sticking sideways. (3) iPhone right-side look fixed properly β the canvas was missing
touch-action:none, so iOS gesture-delayed a lone finger; now works without holding the move stick.
- v66 β Combat/heal/mobile polish (7 fixes). (1) Combo delay (
jabCd 0.22s) so you can't frame-spam; opening Left Jab always snappy; combo still Left/Right/Hook, resets on timer lapse. (2) Charge BLAST then slide to aim the camera on mobile; release fires (or cancels if under ~2s). (3) iPhone right-side look fixed (was passive, iOS hijacked a lone finger β now preventDefaults). (4) Drink heals a part and gives +15 HP (all-clean = +30). (5) DRINK works even during the objective read-lock β always heal if there's something to heal. (6) Per-jab aim compensation (Left Jab/Hook nudged to match the Right Jab) + independent head twist keeping the head on the camera. (7) No more wild/by-the-side run after a jab or the victory cheer (arms/legs kept in phase on loco resume).
- v65 β Punch from a torso twist (legs follow movement). Instead of holding the hips neutral, the hips/legs now point the way you're running (correct gait) and the punch is aimed by procedurally twisting a lower spine bone (Spine01) toward the camera while you jab. Run one way + aim another β feet go where you're moving, torso rotates to strike the crosshair. Eases in/out with the punch, jab-only. (Experimental β twist axis/amount tunable.)
- v64 β Fast-click combos + hips-neutral punches. (1) A fast double-click does a quick 1-2 and a fast triple-click a quick 1-2-3 β the per-jab cooldown gate was dropped from the click paths so rapid clicks no longer hang on the first jab (combo timer still resets to Left Jab on a pause). (2) Punches keep the legs running but no longer plant: the hips/pelvis are now treated as upper-body, so a jab overlay holds them facing the camera (no run-stride twist) while the legs keep running β the strike lands straight at the camera AND you can run while punching.
- v63 β Transform hand-off + full-body punches + click-per-jab. (1) The Civilian β Quantum Flip swap now happens at the arms-out peak of the cast (~45% in) and Quantum Flip finishes the same cast from that pose (was: Civilian played the whole cast, then popped into Quantum Flip). (2) Jabs are full-body actions so the idle/run stance no longer twists them β every punch lands straight toward the camera at any move speed/direction (movement not locked; he plants for the punch). (3) You must click for each jab β holding left-click no longer auto-combos.
- v62 β Menu art full-screen + separate title. The menu background (
assets/menu_bg.jpg, now title-free) fills the whole screen (cover) on any device, and the title is a separate transparent PNG (assets/menu_title.png) overlaid top-center (~82% width, matching the original reference) with a soft scrim. Verified desktop + portrait.
- v61 β Punches map to the camera. Every jab/hook now faces and lands toward where the camera is looking, standing or running (was: a running punch followed your movement, and the idle/run stance leaned jabs off to one side). The hero snaps to the crosshair direction on each punch and tracks it faster through a combo, so strikes go straight ahead.
- v60 β Menu hero-art background is live. The 1376Γ768 hero image (
assets/menu_bg.jpg, title baked in) backs the main menu: full art on desktop, and on portrait phones it shows complete over a blurred fill of itself (no bars, title never cropped) with the buttons below on a dark scrim. The menu's own logo/title text is hidden to avoid duplication.
- v59 β Aim orb + voice quality + victory + boss timing. (1) Guided aim-drill orb reliably visible β spawns just off-center (on-screen now), pulses, and re-spawns if it ever goes missing. (2) Objective voice clips pre-cached on load so the first play isn't a streaming stutter ("low quality"). (3) Victory cheer is interruptible β upper-body overlay, so the legs follow you the moment you move. (4) Boss intro taunt waits for the first objective read to finish (not a fixed timer). (5) Menu background-art system β full hero image (title baked in) over a blurred fill that works on desktop + portrait phones, hiding the menu's own title; auto-activates once
assets/menu_bg.jpg is bundled.
- v58 β Jump button removed + desktop blast HUD + turn-step. (1) Removed the dedicated JUMP button β jump is the right-side double-tap again (lenient detection kept). (2) BLAST cooldown now shows in the desktop HUD β the BLAST slot (RMB hint + cooldown bar) appears in the ability cluster on desktop like Dash/Nova/Overdrive (plus the crosshair cooldown ring). (3) Turning the camera in place steps the legs β a brief walk shuffle scaled to the turn speed instead of sliding feet (driven by real look input, so head-sway doesn't trigger it).
- v57 β Mobile jump + HUD + punch direction. (1) Added a dedicated JUMP button to the touch hotbar (cyan, next to BLAST) since double-tap-to-jump was unreliable on iPhone; it presses-and-holds so even a quick tap registers (double-tap kept, but more lenient). (2) HP bar + body-part meters shifted right (
env(safe-area-inset-left) + 34px) to clear the phone's front camera / notch in landscape. (3) Punches go in the direction you're running β while jabbing the hero faces + strikes toward his movement direction (camera aim only when standing still), instead of always punching forward or off to the side while strafing.
- v56 β iPhone bar fix + audio mix + drill redesign. (1) The Higgsfield top bar is actually removed on iPhone now β v55's class toggle lost to the bar's inline
display:flex, so the bar element is hidden directly (!important) and the iframe stretched to fill. (2) Music is quieter and ducks/returns smoothly (0.6s ramp, not a hard step). (3) Boss/character voices are quieter + consistent on iPhone β routed through their own Web Audio gain node so they don't blast at full system volume on iOS. (4) Fast Food John says "would you like fries with that?" only every 5th fry throw. (5) Aim-training tone vs Superfood Blast charge tone are now distinct + quieter (separate sounds, each with an A/B variant via audio.chargeOpt). (6) Punches face your aim β no more striking off-axis while strafing. (7) DRINK-to-heal drill redesigned β shaker starts empty, so you go collect a Flip 7 bag, then drink (objective text + Sterling voice updated).
- v55 β iPhone full-screen + combat/audio polish. (1) The Higgsfield top bar is gone on iPhone β the game hides the platform wrapper's 44px bar via its own same-origin
hf-embed class, so a Home-Screen launch is edge-to-edge like Android. (2) Jab combo locked to Left Jab β Right Jab β Left Hook, looping, and resets to Left Jab when the combo timer lapses (Left Hook is the heavy finisher). (3) Jump looks right when moving β a running-jump clip plays and the hero faces the direction he leaps (standing jump still uses the in-place clip). (4) DRINK-to-heal training works on mobile β a drill's one allowed ability now fires even while the objective is being read, and a watchdog guarantees the read-lock can't stick. (5) Sterling's voice is quieter + consistent on iPhone β routed through a Web Audio gain node (like the music) so its level applies on iOS instead of varying clip-to-clip.
- v54 β iOS "Add to Home Screen" gate. iPhone/iPad Safari can't run a web page truly full screen unless it's launched from the Home Screen (standalone). The game now detects iOS Safari that isn't standalone and blocks play, showing a branded overlay with steps: tap Share β Add to Home Screen β open from the icon (arrow points to the bottom bar on iPhone, top-right on iPad; a note tells in-app/other-browser users to open in Safari). Launched standalone β or on any non-iOS device β it starts normally.
- v53 β iOS audio fixes. iPhone Safari ignores
<audio>.volume, so music played at full volume and never ducked. Music now routes through a Web Audio gain node (works on iOS) β mixed quieter and ducks under narration on iPhone. Objective voice plays from a single reusable element unlocked on first tap so it works reliably on iOS. (iOS Safari can't fullscreen a web page β use Add to Home Screen for fullscreen.)
- v52 β Voiced objectives. Every objective is now read by a pre-rendered "Sterling" voice clip (all tutorial stages in both wordings + each mission objective) instead of robotic TTS; clips are keyed by the exact text so the voice matches the on-screen line, and the read-lock ends exactly when the clip finishes. TTS stays as the fallback.
- v51 β Clip-name fix: the export names the cast clips
mage_soell_cast_1/7 (misspelled), so blast, nova and transform animations weren't playing β now fixed. The 3-hit jab combo is restored β Left Jab β Right Jab β Left Short Hook (replacing the Spartan Kick).
- v50 β Jab now alternates Left/Right (Spartan Kick removed). The jump animation is fit to the airtime and cut on landing (no stuck mid-air pose on the ground). The objective read-lock is short (β€4.5s) with a shorter aging line + softer dizzy, so the DRINK challenge becomes tappable quickly.
- v49 β Animation refinements + fixes. Combat actions now play as an upper-body overlay so the legs keep moving β run/strafe while punching, never frozen/stuck. Jab plays faster the faster you click. The jump animation plays. Hit reactions: heavy waist-stagger only at β€30% health, else a quick Block. Training Yes/No sits on a solid black overlay; Skip training loads the ranch model (was the fallback βbrown pillβ); and a stale tutorial lock that gated regular levels to drink-only is cleared (all ability buttons work).
- v48 β Full character animation pass. Civilian John + Quantum Flip are fully rigged/animated via a named-clip controller (
CONFIG.ANIM): idle, run + directional runs, jump, transform, plus Quantum Flip's 3-hit jab combo (jab β jab β Spartan Kick), blast, nova, overdrive, two hit reactions, and death; Civilian cheers on returning to the ranch after a win. Action animations lock movement until they finish (no sliding mid-punch) and the hero turns to face the way he moves, fully around when going backward. Also: blast orb emits from his right hand; thinner/shorter beginner arrow; the training Yes/No is asked on the menu before the level loads; enemies hold and the objective only starts after the first read-through; and the mobile objective-read lock is bounded (~9s) so the lit DRINK button responds.
- v47 β Training-choice buttons now read just "Yes" / "No" (standard/guided sub-line kept); the beginner arrow is 50% smaller and ~25% slimmer; and after the read the objective minimizes straight to the bottom pill (no brief bottom-bubble step) with a shorter post-read hang.
- v46 β Objective read overhaul (every level). A new objective now loads CENTERED behind a dark full-screen veil and is read aloud, then minimizes down to the bottom (a pill on touch; tap to re-open the normal bottom bubble). The read-through control freeze now applies on every level (pause still works) β controls are locked until the objective finishes reading. Combat missions read their objective at the start too.
- v45 β Beginner objective arrow remade as a solid, chunky 3D arrow β an extruded + beveled block-arrow with a lit (shaded) red material, replacing the flat billboard; floats above the player and points toward the objective.
- v44 β Tutorial batch. Beginner jump text fixed ("the box with the orb on top of it"); the aged-body-part explanation + drink-to-heal are now one objective (fixes the unresponsive lit DRINK button β always something to heal, only DRINK enabled); music returns to normal when the objective first minimizes (stays ducked through the whole read + hang); the player's controls are frozen while a training objective is being read aloud so you listen first; and the beginner objective arrow is now a red, camera-facing 3D arrow (reads as an arrow from any angle, replacing the cone+cylinder).
- v43 β Tutorial polish. Beginner objective pointer is now an actual 3D arrow; the standard zoom drill requires cycling to first-person too; the aging explanation waits for the narration to fully finish (+~1s) instead of a fixed 8s timer and locks all abilities while it plays (and the drink challenge always has something to heal so its lit button works); Jab and Blast drills now lock you to that ability like the others; the FPV blast cone slopes down toward the ground (was tilted up into the orb) and the charge orb is scaled down in FPV; and music stays ducked for the whole objective read.
- v42 β Tutorial UX batch. First-person blast cone restored (raised + tilted so it isn't edge-on); jump drill uses an existing arena box (beginner orb on a real box, clears on landing); beginner aim ring no longer lingers after the look drill; the objectives bubble holds until the narration finishes reading (+~1s) and auto-sizes to its text (no scroll); dash physically stops at objects (steps along its path); beginner arrow points at each objective; during the Drink/Dash/Nova/Overdrive drills only that power works (all other buttons grey out); and the aim orb is fully removed on completion (no stray orb in the hub).
- v41 β Tutorial + blast/dash batch. Beginner aim drill is now 3s with a cyan crosshair ring + rising tone; beginner jump orb vanishes on landing (box stays); fullscreen re-requests on every interaction so it returns after the phone screen sleeps; blast can't be charged on cooldown and the BLAST button greys out, with a brighter cyan preview cone; the aging explanation is info-only (a pause, no "β Objective complete"); the dash & nova drills make you clear every echo with that ability (reuse freely; fixed the Nova "clears the area" wording β it damages in a radius + heals aging); dash only hits enemies in a clear line of sight; tutorial objectives show only in the bubble (no duplicate centre caption); and the per-stage safety timeout was removed β every objective must be completed (whole-tutorial Skip stays).
- v40 β Superfood Blast now needs a 2-second minimum hold to fire. A quick tap (e.g. just to preview the vision cone) and release does nothing β no orb, no cooldown. While charging, the wedge and charge orb are dim grey until they arm at 2s, then turn green (with a soft "ready" tick), so the armed point is obvious; a real blast ranges 2Γβ5Γ (24β60). Reflected in the tutorial blast drill and the controls/abilities text (
CONFIG.blastMinHold = 2). Also corrected a stale abilities-table blast row that still showed the pre-vision-cone 0.5s / "slows 2s" values.
- v39 β Doc audit: reconciled this breakdown 1-to-1 with the deployed game. Dodge is double-tap SPACE while moving; the boot camp is 15 stages with Sprint listed; removed the obsolete "move β jab β blast β bag β drink" tutorial line; pause overlay is context-aware (mission: Resume/Restart/Back to Ranch Β· hub: Resume/New Game/Quit); HUD section now notes the blast-cooldown crosshair ring, bag-icon counter, collapsible touch objectives, and the "β Objective complete" beat; menu lists GAME BREAKDOWN (dev) and the started-gated CONTINUE; save section documents the lifetime total + cookie fallback; audio notes tutorial TTS narration; corrected the gamepad mapping. No game-code behavior changed.
- v38 β Enabling DEV MODE on the main menu reveals a Game Breakdown button that opens this living doc inside the game (framed page with a Back button) β no tab-switching.
- v37 β Blast now only hits enemies in a forward vision cone (Madden-style wedge shown while charging), a visible orb chains through them nearestβfurthest, and the cooldown shows on the crosshair. Tutorial: restored the Sprint drill (15 stages), jump-on-a-box no longer disappears, aim drill is 5s with the orb turning cyan on lock, dash both echoes, condensed blast/aging text, and a "β Objective complete" beat between stages. New Game requests fullscreen.
- v36 β Superfood Blast reworked: auto-locks the nearest enemy and chains leftover power to the next-nearest (closestβfurthest) until spent, with a hold-scaled 3β7s cooldown. New Game goes straight into training; you spawn facing the arena centre on every level. Tutorial: jump is its own land-on-a-box drill, beginner run-throughs are floating vertical rings, the aim drill needs a 2-second centred hold, and zoom resets to view 2. Mobile fullscreen on rotate / start-menu tap; desktop frees the mouse for the training-choice question. Fixed mid-word text wrapping.
- v35 β Tutorial upgrades: voiced narration per stage, an always-available Skip, holograms now take 3+ jabs, and the aging stage explains every limb at full damage with a full-aged head dizzy-camera preview. Both choices run the same 14 stages β "yes" is the standard run-through, "no" is a fully guided version (reach/look at glowing targets to finish movement, look, jump, zoom).
- v34 β In-depth Quantum Boot Camp tutorial: a startup experience check branches into a 7-stage quick refresher or the full 14-stage gauntlet (move, look, jump, zoom, jab, blast, bags, dash, nova, aging, drink, overdrive, final exam). Every stage is gated and device-aware with a safety timeout.
- v33 β Arms aging reverted to jab-only; desktop HUD enlarged & re-spaced (health bar no longer overlaps the body panel; bigger HP/body/hotbar/shaker/boss-bar/bag-counter), scoped to non-touch so mobile is unchanged.
- v32 β Aging effects per-part & damage-scaled: arms = less damage on all attacks, torso = take more damage (max HP now constant, which fixes the health bar jumping), legs = slower, head = loopy. Removed the green "saves on this device" line. Restored the desktop HUD (bag counter back to top-center) β mobile sizing no longer affects desktop.
- v31 β Portal labels now depth-test (occluded by the player/geometry, no more X-ray overlay); objectives no longer show large (caption) and in the bubble simultaneously β caption plays first, clears, then the bubble appears (then collapses to the pill as before); no-caption objectives still show immediately.
- v30 β Dash now damages bosses & minions (hits along the whole path); drinking is blocked at full health (no wasted shakes); every level/Retry starts at full health; in-mission pause is Resume / Restart / Back to Ranch; frame-rate-independent camera (fixes mobile jitter); menu save-status line + a "started" flag so CONTINUE appears after beginning a game.
- v29 β Save hardened with the Storage Access API (unlocks first-party storage in the embed) atop the cookie fallback; objectives bubble auto-collapses to a thin centered pill after ~4.5s (tap to reopen); added a 4th zoom level (40% closer than view 2); bag counter is now a bag-icon + number next to the VIEW button (hub total / mission count) so it no longer pushes the boss bar down.
- v28 β Mobile fullscreen on first interaction; hardened device-local save (partitioned-cookie fallback + flush-on-hide) so progress survives refresh; objectives moved to a wide white bottom-center bubble (dropped the OBJ toggle); lifetime Flip 7 total now shows at the top of the hub too.
- v27 β Two Flip 7 bag totals (lifetime saved + current-mission, banked on completion); migration-safe save (survives updates/new levels); collapsible OBJ objectives bubble; narrowed boss bar (no HP overlap); pause from the hub; NEW GAME in the pause menu; rotation-safe menus; more spacing between the wrap buttons.
- v26 β Mobile polish: ability buttons wrap diagonally around the shaker (slimmed); objectives moved top-center (never overlap); tutorial/hub/Controls text switches to touch wording; added a mobile PAUSE button; menu CONTINUE loads the last save.
- v25 β Mobile control overhaul: HP/body meters narrowed & moved above the joystick; old right-side button pad removed; HUD icons double as ability buttons (Dash/Nova, Jab/Overdrive, Blast, Drink β ~50% smaller, 2-column); double-tap the right side to jump.
- v24 β Three-level camera zoom (default β β40% close β first-person) via Z or a top-left VIEW button; mobile move-stick auto-sprints at the outer ring.
- v23 β Mobile fullscreen on first tap; gyro direction fixed (was inverted); GYRO button is now a GYROβRESET toggle (lit when RESET) that recenters to the over-the-shoulder view when turned off.
- v22 β PUBG-style mobile controls: left move-stick, right-half drag-to-look, GYRO (tilt) toggle, action buttons, landscape prompt. (Mobile previously had no camera look.)
- v21 β Old John minions now age the body part of their own source boss (instead of all hitting the head).
- v20 β Old John's staff slam is now a radius AoE with a visible ring (was a global no-radius age-all that hit you anywhere).
- v19 β Projectiles stick/embed in obstacles ~1s (vanish on hit); jump onto small props; Old John starts with one of each boss as minions; fixed stale shaker count at level start.
- v18 β Collision overhaul: square corners, enemy separation, prop collision for all, projectiles blocked by geometry.
- v17 β Civilian John rigged + animated (idle/walk/run + mage-cast transform); fixed filename.
- v16 β Overdrive cost β 7 bags; wired Civilian cast-clip transformation.
- v15 β Ability economy: shaker 7, Dash 1 bag (30 dmg), Nova 5 bags (60 dmg), Overdrive 5 bags/20s/+20%/1% chip; ability-ready HUD + chime.
- v14 β Hub = Civilian John; final-boss minions 20% dmg; bosses strafe (dashT bug fix); Hangry seeks bags when hurt.
- v13 β Superfood Blast chargeable (1Γ/sec to 5Γ) + charge orb + sounds; Hangry bag collection restored (compete).
- v12 β Per-boss signature attacks, boss HP bar, soda/mixed minions, age-part remap.
- earlier β base build, all 8 missions, shaker/aging, audio + voice, dev mode, camera collision.