Files

87 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Wackelpeter
Browser-Port des 2012er jMonkeyEngine-Spiels "Wackelpeter" (Blobtest).
## Übersicht
3D Arena-Survival-Spiel: Der Blob "Wackelpeter" kämpft mit Schwert und
Feuerball-Stab gegen Wellen von Monstern. Bei 10% Kill-Chance droppt ein
heilendes Kreuz. Cel-Shading-Look, Wellen werden alle 10 Sekunden stärker.
Monster: Spinnen (ab Welle 1), Geister (ab 3), springende Frösche (ab 4),
Schleime (ab 5, teilen sich), Fledermäuse (ab 5), Pilz-Türme (ab 6),
Krabben (ab 7), Bienenschwärme (ab 7) und alle 5 Wellen ein Boss-Golem.
## Restaurierung
Das Original lag nur kompiliert vor (Blobtest.exe + JME3-Libs). Der Source
wurde per CFR-Decompiler wiederhergestellt (siehe `decompiled/`), die Modelle
aus dem JME3-Binärformat `.j3o` extrahiert und nach glTF/GLB konvertiert.
### Konvertierungs-Pipeline
1. `j3o_converter/` — Java-Programm (JME3 via Maven) lädt `.j3o`-Dateien und
exportiert Mesh, Skeleton, Animationen und Materialien als JSON.
Ausführung via Podman:
```
podman run --rm -v $(pwd)/j3o_converter:/work:Z \
-v $(pwd)/extracted:/extracted:Z \
-v $(pwd)/web/public/models:/output:Z \
-w /work docker.io/library/gradle:8-jdk17 bash -c '
gradle --no-daemon installDist &&
java -cp "build/classes/java/main:build/install/j3o-converter/lib/*" \
J3OConverter /extracted/Models/spider/spider.mesh.j3o /output/spider.json'
```
2. `j3o_json2gltf.py` — konvertiert das JSON zu glTF 2.0 (.glb) mit
Skeleton und Animationen (Keyframes werden mit der Bind-Pose kombiniert,
da JME3-Tracks relativ zur Bind-Pose sind).
3. `ogre2gltf.py` — Alternative für Modelle mit Ogre `.mesh.xml`/`.skeleton.xml`.
4. `j3o_parser.py` — experimenteller Python-Parser für das `.j3o`-Format
(durch die Java-Lösung ersetzt).
## Web-Version
```
cd web
npm install
npm run dev
```
- Three.js + TypeScript + Vite
- Steuerung: WASD bewegen, Space springen, Maus zielen,
Linksklick Schwert, Rechtsklick Feuerball (per Skill),
Q/E/14 Skills (Hotbar, siehe unten), ESC Pause, H Hitboxen (Debug)
### Skillsystem
Kills geben XP, bei Level-Up pausiert das Spiel und bietet 3 Skill-Karten
(neue Skills oder Upgrades). Seed (Startmenü) steuert die Angebote,
„Nochmal spielen" behält den Seed bei.
| Skill | Art | Effekt |
|---|---|---|
| Feuerball | Aktiv (Rechtsklick) | Explodierender Feuerball |
| Teleport | Aktiv (Hotbar) | Teleport zum Zielpunkt |
| Kettenblitz | Aktiv (Hotbar) | Blitz springt auf mehrere Gegner |
| Falle | Aktiv (Hotbar) | Hält 1 Gegner fest und fügt Schaden zu |
| Gaswolke | Aktiv (Hotbar) | Bleibt am Boden, Schaden über Zeit |
| Aura | Passiv | Bodenkreis um den Spieler, Schaden + Wegstoß |
| Bumerang | Passiv | Kreist um den Spieler (ab Stufe 3 mehrere) |
| Reichweite / Schärfe | Passiv | Schwert-Range/-Schaden |
| Regeneration / HP-Absorption | Passiv | Heilung |
| Schild | Passiv | Absorbiert Schaden, lädt nach 8 s neu |
| Vitalität / Dornen / Flinke Füße | Passiv | Max-HP / Kontakt-DPS / Tempo |
- **Hotbar**: Aktive Skills werden in Erwerbs-Reihenfolge auf Q, E, 14
verteilt; Cooldown-Anzeigen zeigen Taste + Name, Level-up-Karten die
künftige Taste.
- **Schadens-Feedback**: Blutpartikel, roter Vignette-Flash, Blob blitzt rot
auf, ab <30 % HP pulsierende rote Vignette.
## Verzeichnisse
- `Original/` — Original-Build (Blobtest.exe, JME3-Libs)
- `extracted/` — Aus dem Original extrahierte Assets
- `decompiled/` — Decompilierter Java-Source
- `web/` — Browser-Version (Code-Struktur: siehe `AGENTS.md`)