ps5upload
Send games, apps and homebrew to a jailbroken PS5, and manage the console from your computer, phone or browser.
CS2-style case opening simulator that rolls Pokémon from Gen 1–9. Pick generations, 5 rarity tiers with real CS2 odds, 1/100 shiny, collection tracker. Plain HTML/CSS/JS. Non-commercial fan project.
Translation pending
GamesJavaScript · CSSGitHub @Bubi274OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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