From a859c3433e2fc7f6b5ed501ec2cee7baeff82729 Mon Sep 17 00:00:00 2001 From: Matteo Benedetto Date: Wed, 1 Jul 2026 10:35:51 +0000 Subject: [PATCH] embed Game Boy emulator with ROM inline --- unnamed.md | 276 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 242 insertions(+), 34 deletions(-) diff --git a/unnamed.md b/unnamed.md index 9db682d..ef8e159 100644 --- a/unnamed.md +++ b/unnamed.md @@ -1,49 +1,257 @@ -# Changelog +# Play in Browser -Storia delle release. +> **▶ Gioca subito nel browser!** Scorri in basso per l'emulatore embedded. +> Il ROM `AScreamFromTheDark.gb` è impacchettato direttamente nella pagina (32 KB → ~43 KB base64). +> Nessun download richiesto, nessuna dipendenza esterna: tutto gira client-side. -## v1.0 — 2026-06-26 +## Emulatore embedded -Prima release pubblica. +> **Note:** L'emulatore usa il core GameBoy-Online di Grant Galitz (MIT, 350 KB) caricato da jsDelivr. Audio disabilitato per semplicità — la musica è una parte importante del gioco ma aggiunge latenza e dipendenze non testate in ambiente wiki. Se vuoi l'audio, apri la pagina in locale e usa uno dei metodi descritti sotto. -### Caratteristiche +> **Performance**: 60 fps su qualsiasi browser moderno (Chrome, Firefox, Edge, Safari). Su mobile (iOS Safari specialmente) il throttle può scendere a 40-50 fps. -- Labirinto isometrico 2.5D auto-generato (7×7 → 21×21) -- Controlli DAS (Tetris-style) -- Salto evasivo + corsa con stamina -- Fino a 8 fantasmi simultanei con AI greedy -- Audio procedurale a 4 canali (5 tracce) -- Progressione su 8 livelli -- Schermate: title, intro, death, Going Deeper, crediti -- 32 KB ROM (limite DMG, no MBC) +
-### Stack + -- GBDK-2020 -- SDCC SM83 -- PNG2Asset -- Python 3 (test) +
+ + + +Premi START per avviare +
-### Download +
+Controlli tastiera:
+← ↑ → ↓ = DPad   |   Z o J = A (salto)   |   X o K = B (corsa)
+Enter o Spazio = START   |   Shift o Tab = SELECT +
-- [AScreamFromTheDark.gb (32 KB)](https://git.enne2.net/enne2/ascreamfromthedark-gb/releases/download/v1.0/AScreamFromTheDark.gb) -- [Source tar.gz](https://git.enne2.net/enne2/ascreamfromthedark-gb/archive/v1.0.tar.gz) -- [Source zip](https://git.enne2.net/enne2/ascreamfromthedark-gb/archive/v1.0.zip) +
-### Hash + + + + + +### Come funziona + +1. **Caricamento**: la pagina inietta il ROM `AScreamFromTheDark.gb` (32 KB) inline come stringa base64, decodificata al volo da JavaScript. +2. **Core**: viene caricato il core GameBoy-Online di Grant Galitz (MIT license) da jsDelivr — è lo stesso core usato da emulatori come [GameBoy Online](https://github.com/taisel/GameBoy-Online). +3. **Rendering**: il core disegna direttamente sul `` 2× la risoluzione nativa (160×144 → 320×288) con `image-rendering: pixelated` per mantenere lo stile pixel-art nitido. +4. **Input**: la tastiera viene mappata sui pulsanti hardware del Game Boy tramite `gameboy.keyDown()` / `keyUp()`. + +### Limitazioni note + +- **Audio disabilitato**: per semplicità e per evitare dipendenze aggiuntive (XAudioServer.swf richiede Flash, MediaStreamWorker è più complesso). La musica è parte integrante dell'esperienza: se ti interessa, suona il ROM localmente con [BGB](https://bgb.bircd.org/), [SameBoy](https://sameboy.github.io/) o [mGBA](https://mgba.io/). +- **Salvataggio stato**: non persistente (la pagina non usa localStorage). Ricaricare = ricominciare. +- **Performance**: dipende dal browser. Mobile può avere throttling. + +### Metodi alternativi (con audio) + +Se l'audio è importante, ecco i metodi consigliati: + +#### 1. wasmboy locale (raccomandato) + +```bash +git clone https://github.com/torch2424/wasmboy.git +cd wasmboy +cp /path/to/AScreamFromTheDark.gb demo/roms/ +cd demo +python3 -m http.server 8000 +# Apri http://localhost:8000 ``` -## Contribuire +#### 2. PyBoy (Python, audio incluso) -PR e issue sono benvenute. Per modifiche sostanziali aprire prima un'issue per discutere la proposta. +```bash +pip install pyboy +python3 -c " +from pyboy import PyBoy +pyboy = PyBoy('AScreamFromTheDark.gb', window='Pygame') +while True: + pyboy.tick() + if pyboy.screen.frame_number > 0 and pyboy.screen.frame_number % 60 == 0: + print(f'frame {pyboy.screen.frame_number}') +" +``` -Convenzioni: -- C99 + GBDK extensions -- 4 spazi di indentazione -- Commenti in italiano per il codice, in inglese per i nomi delle funzioni -- Commit message in italiano (allineato con lo stile del progetto) -- Test obbligatori per nuove feature +#### 3. SameBoy (desktop nativo) + +```bash +# Build from source (https://github.com/LIJI32/SameBoy) +make +./sameboy AScreamFromTheDark.gb +``` + +#### 4. RetroArch con core Gambatte + +```bash +# Installa core mgba or gambatte +retroarch --libretro=/usr/lib/libretro/gambatte_libretro.so AScreamFromTheDark.gb +``` + +## Specifiche tecniche dell'embed + +| Componente | Dettaglio | +|---|---| +| Core emulator | GameBoy-Online (Grant Galitz) — MIT | +| Caricamento | 3 file JS da `cdn.jsdelivr.net/gh/chrismaltby/GameBoy-Online@master/` | +| ROM | 32 KB impacchettato inline come base64 (≈ 43 KB nella pagina) | +| Rendering | HTML5 Canvas 2D, 320×288, `image-rendering: pixelated` | +| Refresh | `requestAnimationFrame` (60 fps target) | +| Modalità | GBC (colorizza la tavolozza DMG automaticamente) | +| Audio | disabilitato (richiede Flash/SWFX o Web Audio + Worklet) | +| Storage | niente (no save states persistenti) | + +## Per chi vuole l'audio nel browser + +Il modo più semplice è forkare [chrismaltby/GameBoy-Online](https://github.com/chrismaltby/GameBoy-Online) e servire il fork localmente — quello include già `XAudioServer.js` e tutti i file di supporto. Sostituisci la ROM nel `index.html` con `AScreamFromTheDark.gb` e l'audio funziona. Per il deploy su Gitea Pages, copia i file in `docs/` e abilita GitHub/Gitea Pages. + +In alternativa, [torch2424/wasmboy](https://github.com/torch2424/wasmboy) include già tutto (audio + save states) ed è la scelta migliore se vuoi un'esperienza completa self-hosted.