- JavaScript 40.7%
- Python 29.9%
- HTML 27.5%
- Shell 1.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| docs | ||
| issues | ||
| tests | ||
| .gitignore | ||
| AGENTS.md | ||
| index.html | ||
| README.md | ||
Pulse Sprint
Ein Auto-Runner im Stil einer lebenden Kreidezeichnung auf dunkler Tafel: eine Datei
index.html, prozedurale Canvas-Grafik mit Linien statt Flächen, alle Sounds prozedural
über die Web Audio API. Läuft offline, ohne Installation, ohne Build, ohne Netzwerk.
Starten
- Doppelklick auf
index.html, oder - statischer Server, z. B.
python3 -m http.server 8000→ http://localhost:8000
Es gibt nichts zu installieren und nichts zu bauen. Das Spiel lädt keine externen
Ressourcen (keine Fonts, Bilder, Sounds, CDNs, kein fetch) und funktioniert vollständig
offline.
Was das Spiel ist
Der Läufer rennt automatisch, das Tempo steigt mit der Strecke. Gespielt wird im Wechsel aus Sprung, Rolle und Schwung an Haken; der Fokus-Zeitmodus bremst die Zeit für genaue Eingaben. Der Lauf endet mit dem ersten Aufprall.
- Zehn Sektoren mit eigenem Look und eigener Mischung an Hindernismustern: Morgenlicht, Cyan-Schaltkreis, Violetter Tunnel, Neonregen, Orange-Industrie, Tiefraum, Kristallfeld, Digitale Ruinen, Sonnensturm, Puls-Kern. Ab Sektor 11 läuft der Endlosmodus weiter (das HUD zeigt es dauerhaft an).
- Wertung: Punkte durch Ausweichmanöver, Schwünge und Fragmente; eine Grube, die nur überschwungen wird, zählt als Saubere Linie. Dazu Strecke und Bestleistung.
- Bestleistungen und Einstellungen liegen ausschließlich im
localStorage(SchlüsselpulseSprintSaveV1) und immer intry/catch– blockierter oder beschädigter Speicher bricht das Spiel nicht. - Jedes Levelmuster ist verifiziert: die Generierung legt ein Muster erst, wenn der eingebaute Solver es mit echten Eingabestrategien durchkommt – inklusive Zeitfenstern für Sprung und Seilhaltezeit. Es gibt kein unmögliches Muster.
Steuerung
| Taste | Aktion |
|---|---|
Leertaste / ↑ |
Springen (halten = höher und weiter, im Aufstieg loslassen = kürzer) · in der Luft: erreichbaren Haken greifen · am Seil entscheidet die Haltezeit |
S / ↓ |
Rollen (halten = länger, loslassen = Ende) · hängend: loslassen |
E / K |
Haken greifen oder loslassen (explizit) |
W |
Beim Schwingen das Seil holen |
F / Shift |
Fokus-Zeitlupe |
P / Esc |
Pause · zurück aus Einstellungen und Hilfe |
R |
Runde neu starten |
M |
Ton an / aus |
Leertaste / Enter im Menü |
Hauptaktion des Bildschirms: starten, fortsetzen, nochmal spielen, zurück |
| Maus / Touch | Linke Hälfte: Sprung/Haken · rechte Hälfte: Rollen/loslassen · Haken direkt anklicken = genau diesen greifen |
Die vollständige Tabelle steht im Spiel hinter dem Knopf Steuerung.
Barrierefreiheit
Vollständige Bedienung per Tastatur, aria-label an allen Knöpfen, Game-Over-Meldungen
über aria-live, Touch-Ziele ≥ 44 CSS-Pixel, keine Information nur über Farbe,
prefers-reduced-motion reduziert Wackeln, Partikel, Parallax und Tintenschweif.
Projektstruktur
| Ort | Inhalt |
|---|---|
index.html |
das Produkt: Spiel, Simulation, Renderer, Sound – handgeschrieben, ein Dokument |
AGENTS.md |
verbindliche Leitlinie für Coding-Agenten (Regeln, Invarianten, Testkommandos) |
tests/ |
runnable Testsuiten: Node ohne Browser, Playwright-Suiten gegen den echten Loop |
docs/ |
historisches Lastenheft (spec-pulse-sprint-v1.md, kein Arbeitsauftrag) |
issues/ |
dokumentierte Befunde mit Messprotokoll und Abarbeitungsstand |
Tests
./tests/run-all.sh # alles: Node-Suiten, Soak, Browser-Suiten
./tests/run-all.sh 1 # Soak auf 1 Minute verkürzt
node tests/issue2.mjs # eine Node-Suite (braucht keinen Browser)
python3 tests/browser_smoke.py # eine Browser-Suite (braucht Playwright + Chromium)
Die Node-Suiten extrahieren die Simulation über die __CORE_START__-Marker aus dem
Dokument und laufen ohne Browser. Die Browser-Suiten bauen eine Testseite mit
Zustands-Bridge (tests/testpage.py) und messen das echte Spiel im echten
requestAnimationFrame-Loop – das ausgelieferte index.html selbst enthält bewusst
keinen Hook und keine window-Zuweisung.
Dieselbe Suite läuft als CI auf Forgejo Actions (Push auf main, workflow_dispatch,
nächtlicher Cron mit vollem 5-Minuten-Soak) – wie man den Workflow verifiziert und den
Runner wiederhergestellt, steht im Runbook docs/ci.md.
Änderungen beitragen
Bitte vorher AGENTS.md lesen: es regelt, was unverrückbar bleibt (eine Datei, kein
Build, keine Netzwerkzugriffe, Barrierefreiheit, Artstyle) und wie Änderungen ablaufen
(erst Tests laufen lassen, dann ändern, dann erneut laufen lassen; Physik- und
Balancing-Zahlen nur in CORE.K als einziger Quelle). Fehler und Befunde werden im
Forgejo-Tracker geführt: https://git.g1ll1.com/gilli/pulse-sprint.