Why a person: the sound engine matches the cartridge byte for byte in reference tests, and the synthesizer matches the reference emulator by spectrum, but only a person can hear whether it sounds right, and only real phones show whether audio unlocks, keeps time and stops when it should.
Setup (on a machine with the user's Crystal 1.1 ROM)
Run MAKE_TEST_SAVES=1 npx vitest run tests/playthrough.test.ts (writes test-saves/).
Run npm run dev -- --host and open it from the phone over HTTPS or the local network (the app needs a secure context on another device), or serve a build. Load the ROM, then Savegames → Import native backup → test-saves/goldenrod-city.crystal-save.json, then Play. The backups must stay local.
For comparisons by ear, open /reference.html with the same ROM on a computer.
Steps and expected results
iPhone (Safari) and Android (Chrome): after Play, music starts within a second; the first press of a button also starts it if it was silent. Note whether the iPhone's silent switch mutes it.
Walk between Goldenrod, the department store and Route 35: doors play their sound, the music fades to the next map's, the Bicycle has its own music and getting off brings the map's back.
Battle a wild Pokémon in Route 35's grass: battle music, the Pokémon's cry when it appears and when sent out, the faint sounds, the victory jingle, then the map's music. With low HP, the danger beep repeats until healed or the battle ends.
A trainer battle (Route 35): the trainer's encounter music when spotted, the trainer battle music and the trainer victory music.
Heal at the Pokémon Center: a sound per Poké Ball, the healing jingle, then the Center's music.
Get an item (talk to someone who gives one, or a ball on the ground): the item jingle plays as its text appears, and the text box stays on screen while it plays.
Open the Pokédex on a caught Pokémon: its cry; CRY plays it again.
Switch to another app or lock the phone: the sound stops. Come back and press Play: it resumes with no stuck notes.
Settings → Sound: Off silences everything, Quiet/Medium/Full change the volume.
OPTION → SOUND: STEREO with headphones moves battle cries to their side and songs that pan.
Compare a few songs (Goldenrod, Route 35, a battle) with /reference.html by ear: tempo, notes, drums and loudness balance between channels. Long play (10+ minutes): no drift, crackles or gaps.
Known boundaries: no move animation sounds (there are no move animations), no experience bar, ball throw or wobble sounds, no Game Corner or Unown puzzle sounds, no battle transition, no title screen music, no radio or phone ringing yet. Absolute loudness differs from the console. Do not report those as regressions.
Report: tick the checks completed, give the device, OS, browser and commit tested, and describe any failure with what you heard and expected. Leave this card in A tester until a person has performed the checks.
Implementation: #34 (7f30c3f).
Why a person: the sound engine matches the cartridge byte for byte in reference tests, and the synthesizer matches the reference emulator by spectrum, but only a person can hear whether it sounds right, and only real phones show whether audio unlocks, keeps time and stops when it should.
**Setup** (on a machine with the user's Crystal 1.1 ROM)
1. Run `MAKE_TEST_SAVES=1 npx vitest run tests/playthrough.test.ts` (writes `test-saves/`).
2. Run `npm run dev -- --host` and open it from the phone over HTTPS or the local network (the app needs a secure context on another device), or serve a build. Load the ROM, then Savegames → Import native backup → `test-saves/goldenrod-city.crystal-save.json`, then Play. The backups must stay local.
3. For comparisons by ear, open `/reference.html` with the same ROM on a computer.
**Steps and expected results**
- [ ] iPhone (Safari) and Android (Chrome): after Play, music starts within a second; the first press of a button also starts it if it was silent. Note whether the iPhone's silent switch mutes it.
- [ ] Walk between Goldenrod, the department store and Route 35: doors play their sound, the music fades to the next map's, the Bicycle has its own music and getting off brings the map's back.
- [ ] Battle a wild Pokémon in Route 35's grass: battle music, the Pokémon's cry when it appears and when sent out, the faint sounds, the victory jingle, then the map's music. With low HP, the danger beep repeats until healed or the battle ends.
- [ ] A trainer battle (Route 35): the trainer's encounter music when spotted, the trainer battle music and the trainer victory music.
- [ ] Heal at the Pokémon Center: a sound per Poké Ball, the healing jingle, then the Center's music.
- [ ] Get an item (talk to someone who gives one, or a ball on the ground): the item jingle plays as its text appears, and the text box stays on screen while it plays.
- [ ] Open the Pokédex on a caught Pokémon: its cry; CRY plays it again.
- [ ] Switch to another app or lock the phone: the sound stops. Come back and press Play: it resumes with no stuck notes.
- [ ] Settings → Sound: Off silences everything, Quiet/Medium/Full change the volume.
- [ ] OPTION → SOUND: STEREO with headphones moves battle cries to their side and songs that pan.
- [ ] Compare a few songs (Goldenrod, Route 35, a battle) with `/reference.html` by ear: tempo, notes, drums and loudness balance between channels. Long play (10+ minutes): no drift, crackles or gaps.
Known boundaries: no move animation sounds (there are no move animations), no experience bar, ball throw or wobble sounds, no Game Corner or Unown puzzle sounds, no battle transition, no title screen music, no radio or phone ringing yet. Absolute loudness differs from the console. Do not report those as regressions.
**Report**: tick the checks completed, give the device, OS, browser and commit tested, and describe any failure with what you heard and expected. Leave this card in A tester until a person has performed the checks.
kawa
added the parity label 2026-10-15 15:54:29 +02:00
kawa
added this to the Pokemon Crystal - Web project 2026-10-15 15:54:29 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Implementation: #34 (
7f30c3f).Why a person: the sound engine matches the cartridge byte for byte in reference tests, and the synthesizer matches the reference emulator by spectrum, but only a person can hear whether it sounds right, and only real phones show whether audio unlocks, keeps time and stops when it should.
Setup (on a machine with the user's Crystal 1.1 ROM)
MAKE_TEST_SAVES=1 npx vitest run tests/playthrough.test.ts(writestest-saves/).npm run dev -- --hostand open it from the phone over HTTPS or the local network (the app needs a secure context on another device), or serve a build. Load the ROM, then Savegames → Import native backup →test-saves/goldenrod-city.crystal-save.json, then Play. The backups must stay local./reference.htmlwith the same ROM on a computer.Steps and expected results
/reference.htmlby ear: tempo, notes, drums and loudness balance between channels. Long play (10+ minutes): no drift, crackles or gaps.Known boundaries: no move animation sounds (there are no move animations), no experience bar, ball throw or wobble sounds, no Game Corner or Unown puzzle sounds, no battle transition, no title screen music, no radio or phone ringing yet. Absolute loudness differs from the console. Do not report those as regressions.
Report: tick the checks completed, give the device, OS, browser and commit tested, and describe any failure with what you heard and expected. Leave this card in A tester until a person has performed the checks.