87 lines
3.5 KiB
Markdown
87 lines
3.5 KiB
Markdown
# 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/1–4 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, 1–4
|
||
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`)
|