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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A Hebrew word-guessing mobile game, Mastermind-style: guess the target word letter by letter and get בול (bullseye — right letter, right position) / פגיעה (hit — right letter, wrong position) feedback after each guess. Each level increases the target word length, starting at 2 letters. Built with Expo (React Native + TypeScript) — a single codebase for iOS, Android, and web, fast local iteration via Expo Go, and a straightforward Jest setup for testing pure game logic without a device or simulator.檢視完整 README ↗
A Hebrew word-guessing mobile game, Mastermind-style: guess the target word letter by letter and get בול (bullseye — right letter, right position) / פגיעה (hit — right letter, wrong position) feedback after each guess. Each level increases the target word length, starting at 2 letters.
Built with Expo (React Native + TypeScript) — a single codebase for iOS, Android, and web, fast local iteration via Expo Go, and a straightforward Jest setup for testing pure game logic without a device or simulator.
src/logic/game.ts — scoring (bulls/hits) and win-check logic, fully
unit tested. Final-form ("sofit") letters (ך ם ן ף ץ) are normalized
to their regular form before comparing, so either form counts as a
match.src/logic/hebrew.ts — the sofit-letter normalization helper.src/data/wordBank.ts — generated Hebrew word bank (~23k words),
grouped by word length, covering lengths 2-10.src/data/words.ts — word-length helpers (getWordsForLevel,
getStageTarget, getStageCount) plus isValidWord, which checks a
guess against the dictionary (sofit-normalized) so only real words are
accepted.src/state/progress.ts — persists the player's selected word length and
completed-stage counts locally via
@react-native-async-storage/async-storage.src/screens/GameTypesScreen.tsx — lets the player pick how many
letters to play with.src/screens/StagesScreen.tsx — shows stage-by-stage progress for the
chosen word length.src/screens/GameScreen.tsx — the main game screen: guess input
(rejecting non-dictionary words with an inline error), guess history
with bull/hit feedback, and stage completion.src/components/GuessRow.tsx — renders one past guess as a letter
grid plus its score.npm install
npm start # opens Expo dev tools; press w/a/i for web/Android/iOS
npm test
The in-app report forms — "דיווח על באג" in Settings and "דיווח על מילה שגויה" in the game — submit to Web3Forms, which forwards them to your inbox.
The Access Key ships as the default in app.json (expo.extra.web3formsAccessKey).
It's meant to be public — Web3Forms is designed for the key to live in client-side
code, and protects against abuse with its own rate limiting plus the honeypot field
already sent by src/utils/web3forms.ts. This works out of the box in Expo Go, EAS
builds, and the Vercel web export with no extra setup.
To use a different key (e.g. after rotating it), get a free Access Key at https://web3forms.com and override the default without touching code:
.env.example to .env and set WEB3FORMS_ACCESS_KEY, then
restart the dev server.eas env:set --name WEB3FORMS_ACCESS_KEY --value <key> --environment productionWEB3FORMS_ACCESS_KEY under Project Settings →
Environment Variables.app.config.js checks the env var first and falls back to the app.json default.
This is an MVP covering level 1 (2-letter words) end-to-end, with the scoring engine and level progression generalized to any word length. The word bank now covers real Hebrew dictionary words for lengths 2-10, and guesses are validated against it. Remaining work: polish the win/level-transition UI.
app.json is "בול-מילה"; the slug
(bullseye-words) stays as-is since it's just the internal Expo
project identifier, not user-facing.https://github.com/yovelamirtech/bullseye-words/blob/main/PRIVACY.md
— when filling out App Store Connect / Play Console privacy fields).
It documents the real AdMob banner ad unit already wired in
app.json / src/ads/adUnitIds.ts.app.json has real ios.bundleIdentifier / android.package
(com.yovelsys.bullseyewords), starting build numbers, and an
ios.infoPlist.NSUserTrackingUsageDescription string (required by
Apple because the app links Google Mobile Ads / accesses IDFA).src/ads/adsInit.ts runs once on launch: it gathers GDPR consent via
AdMob's AdsConsent API (required by Google for EEA/UK/Switzerland
users regardless of where the publisher is based) and, on iOS, asks
for App Tracking Transparency permission before the SDK initializes.
Run npx expo install expo-tracking-transparency once to make sure
the version pinned in package.json matches your installed Expo SDK
exactly, then run a real build (not Expo Go) to see the consent/ATT
prompts — they don't appear in Expo Go.eas.json defines development, preview, and production build
profiles plus a submit.production target. Before the first build,
run eas init (requires an Expo account) to link the project and
populate extra.eas.projectId in app.json, and set the owner
field if building under an Expo organization account.