diff --git a/Play-in-Browser.-.md b/Play-in-Browser.-.md deleted file mode 100644 index f78a94d..0000000 --- a/Play-in-Browser.-.md +++ /dev/null @@ -1,134 +0,0 @@ -# Play in Browser - -Come eseguire **A Scream from the Dark** nel browser con un emulatore Game Boy compilato in WebAssembly. - -## Soluzione 1 — wasmboy (consigliata) - -**wasmboy** è un emulatore GB/GBC scritto in AssemblyScript e compilato in WebAssembly, con un piccolo frontend HTML/JS. - -Repository upstream: https://github.com/torch2424/wasmboy -Demo live: https://torch2424.github.io/wasmboyTest/ - -### Setup locale (5 minuti) - -```bash -# 1. Clona wasmboy accanto al tuo fork di A Scream from the Dark -git clone https://github.com/torch2424/wasmboy.git -cd wasmboy - -# 2. Copia il ROM -cp ../ascreamfromthedark-gb/build/AScreamFromTheDark.gb demo/rom/ - -# 3. Avvia un server statico -cd demo -python3 -m http.server 8000 - -# 4. Apri http://localhost:8000 nel browser -``` - -> **IMPORTANTE**: serve via HTTP (non `file://`) perché il browser blocca il fetch del file `.wasm` da file locali. - -### Build personalizzata con il tuo ROM - -Puoi anche impacchettare il ROM direttamente dentro `demo/`: - -```bash -# Modifica demo/index.html per puntare al tuo file -sed -i 's|roms/testrom.gb|roms/AScreamFromTheDark.gb|' demo/index.html -``` - -## Soluzione 2 — PyBoy headless (CLI) - -Se vuoi solo validare che il ROM giri senza browser: - -```bash -pip install pyboy -python3 -c " -from pyboy import PyBoy -pyboy = PyBoy('build/AScreamFromTheDark.gb') -pyboy.set_emulation_speed(0) # max speed -for _ in range(600): - pyboy.tick() -pyboy.stop() -print('ROM runs cleanly for 600 frames') -" -``` - -## Soluzione 3 — GameBoy Online (no WASM build) - -Per una soluzione zero-build esiste **GameBoy Online** (https://github.com/binji/gameboy-online), un emulatore GB interamente in JavaScript (nessuna build WASM necessaria). - -```bash -git clone https://github.com/binji/gameboy-online -cd gameboy-online -cp /path/to/AScreamFromTheDark.gb roms/ -# Apri index.html (sempre via http-server) -``` - -## Soluzione 4 — Mini embed HTML/JS self-contained - -Se vuoi un mini-emulatore tutto-in-uno per il wiki, ecco uno snippet HTML funzionante basato su **JSGB** (https://github.com/Siorki/jsgb) o simili. Esempio: - -```html - - - - A Scream from the Dark - - - -

A Scream from the Dark

- -

Controlli: ←↑→↓ muovi, A salto, B corsa, START pausa, SELECT istruzioni

- - - -``` - -## Hosting del ROM sul Gitea - -Il file `AScreamFromTheDark.gb` è già pubblicato come asset della release v1.0: - -``` -https://git.enne2.net/enne2/ascreamfromthedark-gb/releases/download/v1.0/AScreamFromTheDark.gb -``` - -Puoi usarlo direttamente da una pagina HTML ospitata altrove: - -```html - - Scarica AScreamFromTheDark.gb (32 KB) - -``` - -## Performance - -| Browser | FPS tipico | Note | -|---|---|---| -| Chrome / Edge | 60 fps | consigliato | -| Firefox | 60 fps | ok | -| Safari | 50-60 fps | ok, audio leggermente ritardato | -| Mobile (Chrome Android) | 45-55 fps | giocabile | -| iOS Safari | 30-45 fps | throttle audio | - -Per il refresh a 60 fps usa `requestAnimationFrame`, non `setInterval` (che si desincronizza). - -## Controlli in browser - -- ←↑→↓ o WASD = muovi -- Z o J = A (salto) -- X o K = B (corsa) -- Enter = START -- Shift = SELECT - -Vedi [Controls](Controls) per il mapping completo su Game Boy fisico. diff --git a/unnamed.md b/unnamed.md new file mode 100644 index 0000000..ef8e159 --- /dev/null +++ b/unnamed.md @@ -0,0 +1,257 @@ +# Play in Browser + +> **▶ 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. + +## Emulatore embedded + +> **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. + +> **Performance**: 60 fps su qualsiasi browser moderno (Chrome, Firefox, Edge, Safari). Su mobile (iOS Safari specialmente) il throttle può scendere a 40-50 fps. + +
+ + + +
+ + + +Premi START per avviare +
+ +
+Controlli tastiera:
+← ↑ → ↓ = DPad   |   Z o J = A (salto)   |   X o K = B (corsa)
+Enter o Spazio = START   |   Shift o Tab = SELECT +
+ +
+ + + + + + +### 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 +``` + +#### 2. PyBoy (Python, audio incluso) + +```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}') +" +``` + +#### 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.