Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Tools for Players and Dungeon Masters: generate Player Characters, NPCs, maps, and in time a companion for building worlds. The first public product is the Player Character generator.
The living handbook is the Wiki.
Tickets (questae) live in Documenta/Questae/ (new) and Curia/Questae/ (older, being merged into Documenta). Decisions live in the Agora.
make setup builds .venv from requirements.txt the first time (Python 3.10+, 3.14 recommended). make dev reloads on edits. The server is app.main:app; there is no other entry point.README 전문 보기 ↗Tools for Players and Dungeon Masters: generate Player Characters, NPCs, maps, and in time a companion for building worlds. The first public product is the Player Character generator.
The living handbook is the Wiki.
Tickets (questae) live in Documenta/Questae/ (new) and Curia/Questae/ (older, being merged into Documenta). Decisions live in the Agora.
make run
make setup builds .venv from requirements.txt the first time (Python 3.10+, 3.14 recommended). make dev reloads on edits. The server is app.main:app; there is no other entry point.
make smoke-player
Boot and generate seed 42. make replay-player proves a seeded request replays exactly; make sweep-player builds every Guild at levels 1 and 5 (WIDE=1 builds every level, Species, Background and Specialization and renders every sheet, about nine minutes). The pre-push hook runs the smoke.
mainorigin/main on GitHub is the product. There is no other remote branch. Local main tracks it and is never force-moved (Decree 0008).
Every piece of work is a questa branch, fast-forwarded into main when its gate passes:
git fetch origin
git worktree add ~/Desktop/DnD-session-<short> origin/main
cd ~/Desktop/DnD-session-<short>
git checkout -b questa/QST-####-short-slug
make install-hooks once per clone. Older lines from the 2026 recovery are local archive tags (archive/*, salvage/*, safepoint/*); they are evidence, not product, and are not pushed.
Merging a pull request into main publishes the site. That is the whole procedure. GitHub proves the code first, then deploys it. The change is live in about five minutes.
To republish without changing code: Actions → Prove and Publish → Run workflow, branch main.
Two jobs run. Prove checks every pull request and every push to main. Publish deploys, and only from main, and only once Prove is green.
A green tick means the robot finished, not that the site changed. Open genlegend.eu and look at the thing you changed. Hard-refresh (Ctrl+Shift+R) before believing the page is unchanged.
Publish showing skipped in grey is not a failure. It skips on every pull request, by design, because only main publishes. If it skips on a push to main, the three variables below are missing.
Settings → Secrets and variables → Actions → Variables. Variables, not Secrets: none of them is a password, and hiding them only makes the next failure harder to read.
| Name | Value |
|---|---|
GCP_PROJECT_ID | gen-legend |
GCP_SERVICE_ACCOUNT | [email protected] |
GCP_WORKLOAD_IDENTITY_PROVIDER | projects/1068852386499/locations/global/workloadIdentityPools/github/providers/github |
Set once, on 21 September 2026, by scripts/setup-github-deploy.sh. No key exists anywhere. GitHub proves who it is, and Google answers with a token good for minutes — so there is nothing long-lived to leak. If the variables are ever lost, re-run that script from Cloud Shell; it is safe to repeat and prints them again.
Only when GitHub cannot, or to test a build before it is committed:
gcloud run deploy gen-legends --source . --region us-central1 --allow-unauthenticated
The service is gen-legends, with an s. genlegend.eu maps to it, and to nothing else. Deploying to gen-legend builds fine and changes nothing a visitor sees, because it quietly creates a second service the domain does not point at.
gen-legend, without the s, is the Google Cloud project — the box that holds the service, the billing and the permissions. Both names are correct, one layer apart. The service URL spells the nesting out: gen-legends-1068852386499.us-central1.run.app is the service, then the project's number. The s is a plural somebody typed in 2023, not an abbreviation for anything.
--source . uploads the working directory as it stands, not the last commit, so deploy from a clean checkout of main or you ship whatever you were editing. The GitHub route has no such trap: it always deploys the commit.
If the deploy stops on Missing required argument [--clear-base-image], the service is still set to let Cloud Run manage a base image for it, which a Dockerfile build cannot do. Add --clear-base-image once; the setting stays cleared.
docker build --build-arg BUILD_SHA=$(git rev-parse --short HEAD) -t gen-legends .
docker run -p 8080:8080 gen-legends
Cloud Run builds this same Dockerfile.
By default main publishes by itself. To make it wait for your word instead: Settings → Environments → New environment, named exactly production, then tick Required reviewers and add yourself. Publish then stops and emails you until you approve. Untick to go back to automatic.