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
翻譯準備中
製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Which board game fits tonight's group? You say how many of you there are, what you are in the mood for, how much thinking you are up for and how much time you have — the page sorts your collection by that and suggests what to put on the table. Whatever does not fit is not dropped silently: it is listed below with the reason.
An Android app, and underneath it a single HTML file: no build system, no dependencies, no account and no request to the internet unless you ask for one — even the fonts are baked in. The same page runs as a web app (for iPhone and iPad, or any browser) and opens from a local file by double-clicking it.
The shelf starts empty: you add your own games. To try the app first, the empty shelf offers Load example games — nine well-known titles you can remove one by one later.
On your phone: download the latest Android app.
In the browser / on iPhone: https://dr-nerdlove.github.io/board-game-recommender/ — the same application, no installation. How to keep it on an iPhone is described below.
game-night-1.2.3.apk (the number is the version).A newer version installs over the old one and the collection survives. Exception: anyone still on a version up to 1.2.0 has to uninstall once — back up the collection first, uninstalling deletes it. The reason is in the changelog under 1.2.1.
Every version gets its own release, which stays unchanged afterwards. What changed is written there and in the changelog. Which version you are running is at the very bottom of the page.
The app contains everything and needs no network (only Find data does). Your collection lives in the app's storage, on this phone.
Backup — important before switching phones. Under Edit collection → Backup & moving:
.json file goes. "Save to files" puts it in the Downloads folder,
for example; mail, Drive or a chat work just as well. In a browser it lands in
the Downloads folder directly.The app reminds you after 30 days without a backup (from 5 games on; the first reminder comes two weeks after you start, at the earliest). Later snoozes it for a week.
Building a new version:
v1.2.3 does the same thing. The APK never builds on its own.main that touches the web
files publishes it again (Web-Version veroeffentlichen).The app is signed with a fixed key of its own; the fingerprint is given with every release. Because it does not come from the Play Store, Android still shows a warning when installing.
Free, and without the App Store (which would need a paid Apple developer account): the page is also published as a web app.
After the first visit it runs offline.
Important — two things on iPhone:
For everyone using the web version (iPhone, Android browser, computer):
The Android extras (Material You colours, the back button, per-app language) are simply absent. "Save as file" puts the backup in the Files app.
At the bottom of the page: Edit collection.
Next to the name field sits Find data. It looks the title up on Wikidata, the free knowledge base behind Wikipedia, and fills in what it finds:
If several games match, the app shows a short list to pick from. Nothing is saved until you tap Put on the shelf.
What Wikidata does not know: difficulty and Shines at. Those stay with you — the Look up on BGG ↗ link right next to it gets you there quickly. Well-known games are covered well, niche titles sometimes not at all; then the app says so instead of guessing.
This is the only time the app talks to the internet, and only when you tap the button. Why not BoardGameGeek directly? Since 2025 BGG requires a personal, registered key for its interface, and that key must not be shared — so it cannot ship inside an app that other people install.
Find data cannot supply difficulty or "Shines at". BoardGameGeek has both:
The page cannot query BGG itself (see above), hence the detour via the link and the form.
On the device you are using — in the app's storage on Android, in the browser's storage for the web version. Nothing syncs and nothing leaves the device; the line above the form says so. Moving to another device works through Backup & moving.
The example games live in BEISPIELSPIELE in index.html; they only reach the
collection when someone taps Load example games. An entry looks like this:
{ name:"Azul", min:2, max:4, best:[2,2], dur:[30,45], weight:1.8,
moods:["gruebeln","entspannt"],
note:"Fliesen ziehen und Muster legen. Sieht friedlich aus, ist es nicht.",
noteEn:"Draft tiles, build patterns. Looks peaceful, isn't." },
min/max — player count as printed on the boxbest — the range in which it really shinesdur — length from/to, in minutesweight — 1 (filler) to 5 (heavy); the three pips follow from thismoods — keys from the MOODS object above it. These keys stay German in
every language (schnell, gruebeln, …): they are stored in the collection
and in every backup, so translating them would make existing backups
unreadable. Only the labels on screen change.note/noteEn — the sentence on the card, German and English. Only the one
matching the language is ever stored.Backups use the same fields (without noteEn), so a backup file is also the
easiest way to hand a whole collection to someone else.
The app speaks English and German. By default it follows the system language — a German device gets German, everything else gets English.
On Android 13 and newer you can also set the language for this app alone, without touching the rest of the phone: Settings → Apps → Game Night → Language. The app picks that up straight away.
There is deliberately no language switch inside the app: Android already has one, in the same place for every app.
What the language switch does not touch is your data. Mood and difficulty keys are the same in both languages, so a backup written on a German phone reads perfectly on an English one and the other way round. Notes you have typed yourself stay exactly as you typed them; only the example games pick their notes by language, at the moment they are loaded.
The name under the app icon follows the same rule.
Numbering follows Semantic Versioning: in X.y.z something fundamental changes, in x.Y.z something is added, in x.y.Z something is fixed. What happened in which version is in the changelog; every version also has its own release with the matching APK.
The two bundled fonts are under the SIL Open Font License 1.1; attribution is in
FONTS.md.
This project is under the GNU General Public License, version 3 or any later
version — the full text is in LICENSE.
In short: you may use, pass on and change the application. If you pass it on — changed or not — it must stay under the same licence and the source has to come with it. There is no warranty.
Excepted are the two bundled fonts: they keep their own licence, the SIL Open Font License 1.1 (see above). The GPL does not change that.