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。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Bewegungsspiele für den Fernseher (Kurvenflitzer gratis, weitere Spiele kostenpflichtig). Das Handy ist die Kamera, der Körper ist der Controller – ohne App, ohne eigenen Server.
| Pfad | Inhalt |
|---|---|
/ | Startseite: Start, Spiele, So funktioniert’s, Deine Bewegung (Seiten über die Leiste links) |
/kurvenflitzer/ | 🏎️ Kurvenflitzer – Go-Kart-Rennen (1–4 Spieler am gleichen TV) |
/boxring/ | 🥊 Boxring – Boxen & Kickboxen (1–2 Spieler, allein gegen die KI) |
/skicross/ | ⛷️ Skicross – Ski-Rennen mit Schanzen (1–4 Spieler, KI füllt auf 4 auf) |
/controller.html?g=… | Handy-Seite für alle Spiele (Kamera, Körpererkennung, Spieler-Karten) |
js/, css/ | Gemeinsamer Plattform-Code (siehe unten) |
Gemeinsam für alle Spiele (nichts davon ist an ein Spiel gebunden):
| Datei | Aufgabe |
|---|---|
controller.html, js/controller.js, css/controller.css | Handy: Kamera, MediaPipe, mehrere Personen, Name/Figur, «Bereit». Texte je Spiel in GAMES |
js/tracker.js | Mehrere Personen in einem Kamerabild unterscheiden, Glättung, Tiefe (z) |
js/character.js, js/avatar2d.js, js/avatar3d.js | Figuren-Daten, Editor, gezeichnete Figur (2D), Chibi-Figur (3D) |
js/net.js, js/audio.js | Verbindung (PeerJS), Klänge |
css/tv.css, css/game.css | Grundstil TV, Lobby mit Spielerplätzen, Banner, Resultate |
index.html | Startseite; Spiele-Liste + Statistik je Spiel in GAMES |
Neues Spiel: eigener Ordner mit index.html + Spiel-Code, Eintrag in GAMES (Handy-Texte in js/controller.js, Statistik in index.html), Kachel auf der Startseite.
Die Verbindung läuft direkt zwischen Handy und TV (WebRTC über den kostenlosen PeerJS-Vermittlungsserver). Das Kamerabild verlässt das Handy nie.
Repo → Settings → Pages → Deploy from a branch → main / (root). Danach läuft alles unter https://<name>.github.io/<repo>/. HTTPS ist Pflicht, sonst gibt der Handy-Browser die Kamera nicht frei.
kurvenflitzer/Go-Kart-Rennen in der Ich-Perspektive. Du hältst ein unsichtbares Lenkrad vor der Brust und drehst es: Der Winkel zwischen deinen Händen ist der Lenkeinschlag. Gas gibt das Kart von selbst.
Auf der Strecke stehen vier Reihen ?-Boxen. Wer durchfährt, bekommt ein Item – aber nur 1 Item pro Runde; ab der Ziellinie gibt es wieder eins (höchstens 2 auf Vorrat, links oben angezeigt).
| Item | Wirkung beim Getroffenen |
|---|---|
| 🔀 Spiegel-Lenkung | links und rechts vertauscht (7 s) |
| ↩️ Rückwärtsgang | Kart dreht sich um, fährt rückwärts in Fahrtrichtung, Blick nach hinten, oben ein Rückspiegel zeigt die Strecke vor dir (6 s) |
| ⛔ Vollbremse | sofortiger Stillstand (ca. 2,5 s) |
| 🔧 Motorausfall | Motor aus, bis die getroffene Person 3× beide Arme über den Kopf hebt (Tastatur: ← → abwechselnd) |
Wer getroffen wurde, ist 20 Sekunden geschützt (im Menü ausgegraut; ein Wurf in dieser Zeit prallt ab und das Item kommt zurück). Über getroffenen Karts schwebt das Symbol, damit alle sehen, wen es erwischt hat. KI-Gegner sammeln und werfen auch.
Zwei Wege, auch gemischt:
Fahrer & Name: Jede erkannte Person bekommt einen Namensvorschlag und fährt sofort mit. Ändern auf dem Kamera-Handy unter Spieler: pro Person eine Karte mit Namensfeld, Fahrer-Auswahl und «Charakter genau einstellen». Wer allein spielt, wird beim nächsten Mal mit gespeichertem Namen übernommen.
Der Bildschirm teilt sich automatisch (2 = nebeneinander, 3–4 = Viertel). Wer während eines Rennens dazukommt, fährt ab dem nächsten Rennen mit.
boxring/Kampf im Ring. Die Figur folgt deinem Körper; was du Richtung Kamera machst, geht in der Figur nach vorne zum Gegner (MediaPipe liefert dafür die Tiefe).
Q/E Gerade, Z Haken, C Uppercut, W Deckung, A/D ausweichen, S Tritt, Pfeile laufen · P2 U/, , , , /, , /// laufen · bereit · / Boxen/Kickboxen · Ansichtskicross/Vier am Start, eine Piste (ca. 1,2 km) mit Steilkurven, Wellen und drei Schanzen. Kamera hinter der eigenen Figur; zu zweit geteilter Bildschirm, zu dritt/viert in Vierteln. Leere Startplätze fährt die KI.
←/→ lenken, ↓ Hocke, ↑ springen/anschieben · P2 A/D, S, W · Leertaste bereitskicross (Sekunden), skiRaces, skiWins, skiBest, Verlauf mit g: 'ski'| Teil | Wo |
|---|---|
| Kurvenflitzer gratis, Boxring und Skicross je CHF 2, Pass CHF 9 (alle Spiele + 300 Juwelen), Juwelen-Pakete | Tabelle products (Preise in Rappen), Gratis-Spiele: games.free |
| Schalter «Kaufen» (aus = alles gratis) | Admin-Seite → Verkäufe, Tabelle app_settings |
| Sperre für nicht gekaufte Spiele | js/gate.js → has_access(game), sonst kaufen.html?p=<spiel> |
| Bezahlseite | kaufen.html → Edge Function create-checkout → Stripe Checkout (TWINT, Karte, Apple/Google Pay) |
| Gutschrift | Stripe → Edge Function stripe-webhook (Signatur geprüft) → grant_purchase() |
| Rückerstattung | In Stripe ganz zurückerstatten → Webhook (charge.refunded) → revoke_purchase() entfernt Freischaltung bzw. Juwelen. Teilrückerstattungen ändern nichts. |
| Münzen | automatisch pro gespeicherter Runde (Trigger award_coins): 1 pro 30 s, max. 20 pro Runde, +10 Sieg, +5 Podest, max. 200 pro Tag |
| Münzen und Juwelen anzeigen | Profil → «Münzen und Juwelen» |
Datenbank-Änderungen liegen in supabase/migrations/, die Funktionen in supabase/functions/.
Einrichten (einmalig): In Supabase unter Edge Functions → Secrets STRIPE_SECRET_KEY und STRIPE_WEBHOOK_SECRET setzen. In Stripe einen Webhook auf https://viqonxeoaaffqigpwami.supabase.co/functions/v1/stripe-webhook mit den Ereignissen checkout.session.completed, checkout.session.async_payment_succeeded und charge.refunded anlegen und TWINT aktivieren.
Handy und TV verbinden sich direkt (WebRTC). Am zuverlässigsten ist es, wenn beide im gleichen WLAN sind.
npx serve . # oder: python3 -m http.server 8080
Am Laptop http://localhost:8080 öffnen und ein Spiel wählen. Ohne Handy: im Kurvenflitzer «⌨️ Tastatur». Für den Handy-Test braucht es HTTPS, also am einfachsten direkt über GitHub Pages.
| Teil | Bibliothek |
|---|---|
| 3D | Three.js 0.170 (CDN) |
| Körpererkennung | MediaPipe Pose Landmarker 0.10.14, Modell full (Fallback lite), läuft auf dem Handy |
| Verbindung | PeerJS 1.5.4 (WebRTC) |
| QR-Code | qrcode-generator 1.4.4 |
| Sound | eigene WebAudio-Synth (js/audio.js), keine Dateien |
Performance: Die TV-Seite reduziert automatisch Auflösung und Schatten, wenn das Gerät ruckelt. Eingebaute Smart-TV-Browser sind oft schwach. Am flüssigsten läuft es auf einem Laptop, Chromecast/Google TV oder Fire-TV-Stick.
Datenschutz: Das Kamerabild verlässt das Handy nie. Übertragen werden nur 15 Körperpunkte (x/y-Koordinaten) pro Bild.
.glb laden)?peer=host:port)OHNIJLK8456LeertasteBXV