個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A CS2-style case opening simulator that rolls Pokémon from Gen 1–9. Plain HTML + CSS + JavaScript, no backend required.
index.html?nomotionindex.html the page; lists every stylesheet and script in load order
src/js/core/ configuration and timings, rolling and odds logic, Pokémon catalog, storage, shared state
src/js/ui/ parts used across pages: gen grid, odds table, reel, transition fallback timer,
popups, recent drops, sound, images, motion
src/js/pages/ the Case, Collection and Custom pages, and switching between them
src/js/modes/ Custom modes: shared wheel code and custom pool editor, then one file per mode
(type-roulette.js, biome-roulette.js, letter-roulette.js, minigame.js), then one file
per Minigame case (minigame-pokemon.js, minigame-megastones.js)
src/js/boot/ desktop footer and app start-up
src/css/ fonts.css, plus base/, layout/, components/, popups/, pages/ and modes/ styles;
each file also holds its own phone, tablet and reduced-motion rules
data/ generated data files (Pokémon, spawns, Special group, Mega Stones)
assets/ bundled images and fonts
electron/ desktop app: main process and preload
scripts/ data generators and the release script; scripts/data/ holds the Mega Stone CSV
tests/ logic tests (Node) and UI tests (Electron)
build/ icons used when packaging the desktop app
The site has no build step and uses plain <script> tags so it also runs from file://. Scripts load folder by folder: core → ui → pages → modes → boot. When you add a JS or CSS file, add its tag to index.html in the right position: a script must come after any file its top-level code depends on (code inside functions runs later and can use any file), stylesheets apply in the order they are listed, and src/js/boot/init.js stays last. The tests read the file list from index.html, so a file without a tag is not tested either.
Download the latest version from the Releases page:
PokeRoll-Setup-x.y.z.exe. The installer lets you choose the install folder and adds Desktop and Start Menu shortcuts; uninstall from Settings → Apps.PokeRoll-x.y.z-linux-x86_64.AppImage. Make it executable (chmod +x) and run it.The app isn't code-signed, so Windows SmartScreen may warn the first time: click More info → Run anyway.
After that the app updates itself. A few seconds after it starts, it checks for a new version and asks before downloading and before restarting to install. You can also click Check for updates at the bottom of the page. Your collection and roll history are kept across updates (and even if you uninstall).
In the browser: double-click index.html.
Desktop app (Electron) — requires the LTS version of Node.js:
npm install
npm start # run in development (no update checks)
npm run dist # build the Windows installer → dist/
npm run dist:linux # build the Linux AppImage → dist/
Every push to main and every pull request runs the tests on GitHub Actions (CI workflow), split into 4 shards that run in parallel. CI is green only when every shard passes. Nothing is built or published.
To publish a new version:
main and wait for CI to pass on that commit (CI runs).npm run release -- patch # 1.1.0 → 1.1.1 (fixes)
npm run release -- minor # 1.1.0 → 1.2.0 (new features)
npm run release -- major # 1.1.0 → 2.0.0
The script only goes ahead when everything is committed, main matches GitHub, CI has passed on that exact commit, and the new version is higher than every existing tag (a version is never reused). If CI is still running or has failed, it stops without creating a tag, so a red build never costs a version number. Checking CI uses GitHub's public API and needs no login.
It then bumps the version in package.json, commits, tags vX.Y.Z and pushes. The tag starts the Release workflow: it waits for CI on that exact commit to pass (it doesn't run the tests again, and stops without building if CI fails or never ran), builds the Windows installer and the Linux AppImage, and publishes them as a GitHub Release together with latest.yml and latest-linux.yml, which the installed apps read to find updates. If anything fails, nothing is published. Progress: Actions tab.
Requires npm install (the UI tests run the app in a hidden Electron window).
npm test # run every test suite
npm test -- roulette # only suites whose name contains "roulette"
npm test -- -v # print every check, not just failures
npm test -- --shard 2/4 # only shard 2 of 4 (what each CI job runs); add --list to just print its suites
tests/logic/ checks the rolling logic and odds in Node; tests/ui/ drives the app in Electron. Test data and screenshots go to a temporary folder (pokeroll-tests in the system temp directory), never to your own save data.
New suites go in the list in tests/suites.js. CI splits that list into 4 shards of about the same run time, using the times recorded there; a suite with no recorded time still runs (it is counted at the average time). The Release workflow doesn't run the tests again: it waits for CI on the release commit (see Releasing).
node scripts/build-data.js # data/data.js — Pokémon info from PokeAPI
node scripts/build-spawns.js # data/spawns.js — spawn locations from the Cobbleverse Wiki
node scripts/build-images.js # assets/images/ — Pokémon images bundled with the app (works offline)
node scripts/build-special.js # data/special.js + assets/images/special/ — Special group, read from the mod file in special-src/
node scripts/build-megastones.js # data/megastones.js — Mega Stones, read from scripts/data/mega-stones.csv
node scripts/build-megastone-images.js # assets/images/megastones/ — Mega Stone item images, read from the mod files in megastone-src/
build-megastone-images.js needs the three mod files (mega_showdown-*.jar, zamega-*.jar, mushiromega-*.jar) in megastone-src/. That folder is not committed. The script finds each stone's image from the mod's own data, not by guessing the image name: the Mega definition whose showdown_id is the stone id (its file name is the item id), then that item's model, then the texture the model points to, copies the original 16×16 PNG unchanged, and stops without writing anything if any stone has no image.
build-special.js needs the mod file (e.g. Kazeran_Eeveelutions_v1.6.1.zip, downloaded from Modrinth) in special-src/. That folder is not committed.
Kazeran Eeveelutions by Kazerio (https://modrinth.com/datapack/kazeran-eeveelutions), licensed CC-BY-NC-4.0.
The Kazeran forms (designs, names and images) belong to their original author, Kazerio. They are included here for non-commercial use only, under the terms of the CC-BY-NC-4.0 license.
Mega Stone data and images from the Cobblemon mods Mega Showdown and ZA Mega (YajatKaul, Navas) and Mushiromega. The stone images (assets/images/megastones/) are the mods' original item textures, copied unchanged. They belong to the mods' authors and are included here for non-commercial use only.
PokéRoll is a non-commercial fan project and is not affiliated with Nintendo, Game Freak or The Pokémon Company. Pokémon and Pokémon character names are trademarks of © Nintendo / Creatures Inc. / GAME FREAK inc.
Data: PokeAPI · Cobbleverse Wiki · Mega Stone data and images: Mega Showdown and ZA Mega (YajatKaul, Navas), Mushiromega, non-commercial use only — Created by Bubi