Six enchanted worlds, a boss, and a clock.
A fairy-tale time-attack platformer: pick a heroine, run and jump through six themed worlds (forest, coral depths, eastern rooftops, snowy peaks, twilight garden, royal castle), beat a multi-phase boss, and reach the royal ballroom before your three lives run out. Built with the KAPLAY engine; every sprite, tile, background and sound is procedurally generated.
Made by Vito D'Elia. Released under the MIT license — original source.
Changes for this platform: Storage: routed every localStorage read/write (best time/run time, score, lives, checkpoint, audio on/off + volume sliders, language, Coccoline tallies) through a tiny ArcadeSDK.storage-first wrapper in src/state.js, src/audio.js and src/i18n/index.js, falling back to the original try/catch-guarded localStorage when ArcadeSDK is absent (standalone use). Leaderboard: deleted the fetch()-based global leaderboard outright — src/leaderboard.js (the API client), src/ui/leaderboard.js (the nickname-entry + paged-standings DOM overlay) and api/leaderboard.js (the Vercel/Upstash Redis endpoint, not copied into this port) are all gone, along with the menu's read-only 'Classifica' button and the finale's invite-gate flow. Wired ArcadeSDK.submitScore in their place (see arcade-bridge.js window.__ppFinale): net play time (ms) is inverted into a score via Math.max(0, 1000000 - elapsedMs) since this is time-attack (faster = better) but the SDK ranks higher = better. Service worker: removed the navigator.serviceWorker.register('./sw.js') block from src/main.js entirely; sw.js and manifest.webmanifest were not copied into this port (both were PWA-install-only and meaningless inside a sandboxed iframe that never navigates top-level). PWA install hint: deleted src/ui/installHint.js and its index.html markup/CSS and main.js binding (the iOS 'Add to Home Screen' banner). WhatsApp share removed too: deleted src/ui/shareButton.js (the menu's navigator.share 'Sfida un amico' button, plus its clipboard fallback) and the window.open(...) WhatsApp payoff button in src/ui/receipt.js/index.html (receipt.pay) — the finale's Coccoline receipt is now a purely cosmetic summary card with a single Close button. Personal-content strip: the game was built as a personalized gift — one of the three selectable heroines was literally named 'Anna' (id/sprite/i18n keys), the finale's closing letter was titled 'Per Anna'/'For Anna', and several code comments described it as 'the gift'/'a gift for Anna'. Renamed the heroine (id, sprite asset celeste.png, animation keys, i18n keys/text) to the neutral 'Celeste', retitled the finale letter to 'Un Nuovo Capitolo'/'A New Chapter' (the letter body itself was already a generic second-person recap, so it was kept), and reworded the comments that named her. The game's own rendered title ('Pixel Princess Platformer') was already generic, so the slug/title were kept. Kept, deliberately: the 'Coccoline'/'Cuddles' in-game currency name and its comic bill framing — a whimsical gameplay term, not personally identifying. Removed dead social/SEO meta (absolute og:/twitter: URLs pointing at the original Vercel deployment) and the now-orphaned CSS for all of the above (share button/toast, install hint, leaderboard card, pay button). Added arcade-bridge.js (new file, not patched into the original game code): ArcadeSDK.ready() once the menu/title screen draws, score() on every pickup/stomp, gameOver({score,won,level}) both on a game-over loss and on reaching the finale, submitScore() at the finale (see above), onPause/onResume wired to the SAME idempotent freeze/thaw src/backgroundFreeze.js already uses for tab-hide, and a KeyM listener that clicks the game's own existing #audio-toggle mute button. Confirmed already compliant, no change needed: KAPLAY is vendored locally (vendor/kaplay-3001.0.19.mjs, no CDN), no build step, no absolute '/...' asset paths, Pixelify Sans is already a local woff2 (not Google Fonts), pixel-art rendering (crisp/nearest sampling), audio starting only after first input, and pause-on-tab-hide were all already correct. Added one small CSS belt-and-suspenders rule (image-rendering: pixelated on #game) on top of Kaplay's own crisp-texture setting.
Comments 0
Log in to comment.