个人 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