Underground 2 Revived
Chrome과 Firefox에서 Need for Speed Underground 2를 WebGPU로 두고 팬 프로젝트입니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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