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에서 읽을 수 있습니다. 저장소 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