managarten/NewAppIdeas/Roblox Reimagined/GAME-PLAN.md
Till JS 22a73943e1 chore: complete ManaCore → Mana rename (docs, go modules, plists, images)
Final cleanup of references missed in previous rename commits:

- Dockerfiles: PUBLIC_MANA_CORE_AUTH_URL → PUBLIC_MANA_AUTH_URL
- Go modules: github.com/manacore/* → github.com/mana/* (7 go.mod files)
- launchd plists: com.manacore.* → com.mana.* (14 files renamed + content)
- Image assets: *_Manacore_AI_Credits* → *_Mana_AI_Credits* (11 files)
- .env.example files: ManaCore brand strings → Mana
- .prettierignore: stale apps/manacore/* paths → apps/mana/*
- Markdown docs (CLAUDE.md, /docs/*): mana-core-auth → mana-auth, etc.

Excluded from rename: .claude/, devlog/, manascore/ (historical content),
client testimonials, blueprints, npm package refs (@mana-core/*).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 12:26:10 +02:00

1019 lines
35 KiB
Markdown
Raw 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.

# ManaVoxel: Der Gesamtplan
## Eine Voxel-Plattform fuer handgefertigte Miniaturwelten -- im Browser, ohne Download
---
## 1. Die Vision
ManaVoxel ist eine Plattform, auf der Spieler **detaillierte Miniaturwelten aus Voxeln** erschaffen, jedes Objekt darin **zum Leben erwecken** und mit Freunden **teilen und bespielen** -- direkt im Browser.
```
Was ManaVoxel NICHT ist: Was ManaVoxel IST:
✗ Minecraft (riesig, grob) ✓ Klein, dicht, detailliert
✗ Roblox (externer Editor) ✓ Alles entsteht IM Spiel
✗ Download noetig ✓ Ein Link, sofort spielen
✗ Texturen geben Detail ✓ Voxel SIND das Detail
✗ Items sind Icons ✓ Items sind 3D-Skulpturen
✗ Nur bauen ODER spielen ✓ Bauen, programmieren UND spielen
```
### Der Kern-Loop
```
┌─────────────────────────────────────────┐
│ │
▼ │
ERSCHAFFEN │
Voxel setzen, formen, │
Raeume einrichten │
│ │
▼ │
BELEBEN │
Items Properties geben, │
Trigger-Actions definieren, │
Scripts schreiben │
│ │
▼ │
TESTEN │
Sofort spielbar, im gleichen │
Fenster, kein Moduswechsel │
│ │
▼ │
TEILEN │
Link senden, Welt veroeffentlichen, │
Items im Marketplace anbieten │
│ │
▼ │
ENTDECKEN & SPIELEN │
Welten anderer besuchen, │
Items finden, inspiriert werden │
│ │
└─────────────────────────────────────────┘
```
### Referenz-Aesthetik
```
MagicaVoxel (stilisierte Voxel-Kunst)
+ Teardown (Detailgrad, Zerstoerung)
+ Minecraft (sozialer Sandbox-Loop)
+ Roblox (UGC-Plattform, Creator-Economy)
+ Portal/Zelda (kleine, handgefertigte Level)
```
---
## 2. Das Dreistufige Voxel-System
### Uebersicht
```
┌─────────────────────────────────────────────────────────────┐
│ │
│ STUFE 1: Welt-Voxel (10cm) ← MVP │
│ Die gesamte Spielwelt │
│ 32m × 32m × 16m (erweiterbar bis 64m) │
│ Raeume, Gaenge, Terrain, Moebel, einfache Items │
│ │
│ STUFE 2: Detail-Zonen (5cm / 2.5cm) ← Post-MVP A │
│ Vom Creator platzierte Bereiche in der Welt │
│ Max 5 Zonen, je max 4m × 4m × 4m │
│ Altaere, Vitrinen, Raetsel, Mechanismen, Inschriften │
│ │
│ STUFE 3: Sculpting-Modus (1cm, isoliert) ← Post-MVP B │
│ Separater Modus fuer Einzelobjekte │
│ 64³ Grid (0.64m × 0.64m × 0.64m) │
│ Kunstvolle Items: Runen, Gravuren, Juwelen, Figuren │
│ │
└─────────────────────────────────────────────────────────────┘
```
### Stufe 1: Welt-Voxel (10cm) -- Das Fundament
```
Resolution: 0.10m (10 Voxel pro Meter)
Chunk-Groesse: 32³ = 3.2m × 3.2m × 3.2m
Max Welt: 32m × 32m × 16m = 500 Chunks
Speicher: ~30 MB (komprimiert ~5 MB)
Mesh-Dreiecke: ~1.5 Millionen
```
**Was man bei 10cm bauen kann:**
- Raeume mit Moebeln (Tische, Stuehle, Regale, Betten)
- Treppen mit echten Stufen (2 Voxel hoch, 3 tief)
- Fensterrahmen, Tuerklinken, Lichtschalter
- Schwerter (3×1×15), Aexte, Schilder, Traenke
- Charakter-Koerper mit erkennbarer Form
- Gaerten mit Blumen, Baeumen, Zaeumen
**Items bei 10cm:**
- Items = Voxel-Gruppen direkt in der Welt
- Kein separater Editor noetig
- Schwert: 3×1×15 Voxel (Klinge + Parierstange + Griff)
- Krone: 5×5×3 Voxel (Zacken sichtbar)
- Fackel: 1×1×8 Voxel (Stab + leuchtender Kopf)
### Stufe 2: Detail-Zonen (5cm / 2.5cm) -- Wow-Momente
```
5cm: 20 Voxel/Meter -- Gravuren, Praegungen, feine Muster
2.5cm: 40 Voxel/Meter -- Inschriften, Zahlen, kleine Mechanismen
Max 5 Zonen pro Welt, je max 4m × 4m × 4m
Zusaetzlicher Speicher: ~10 MB
```
**Wofuer Creator Detail-Zonen nutzen:**
- Schatzkammer: Goldmuenzen mit Praegung, Juwelen mit Facetten
- Altar mit Inschriften die ein Raetsel ergeben
- Mechanismus: Kleine Hebel, Zahnraeder, Schluesselform erkennen
- Galerie: Voxel-Portraits an der Wand
- Werkbank: Feine Werkzeuge, Materialien, Baupflaene
**So platziert man eine Detail-Zone:**
```
1. "Detail-Zone" Tool waehlen
2. Box in der Welt aufziehen (max 4m × 4m × 4m)
3. Resolution waehlen: [5cm] oder [2.5cm]
4. Innerhalb der Zone: feineres Voxel-Grid erscheint
5. Bauen mit erhoehtem Detail
6. Nahtloser Uebergang zur 10cm-Welt
```
### Stufe 3: Sculpting-Modus (1cm) -- Meisterwerke
```
1cm: 100 Voxel/Meter -- Skulptur-Qualitaet
Isoliertes 64³ Grid = 0.64m × 0.64m × 0.64m
262.144 Voxel = 512 KB (trivial)
In der Welt als vorgerendertes Mesh platziert
```
**Was man bei 1cm sculpen kann:**
- Schwert mit Runen auf der Klinge und Edelstein im Knauf
- Ring mit filigraner Fassung
- Schachfigur mit erkennbarem Gesicht
- Schriftrolle mit lesbarem Symbol
- Schluessel mit einzigartigem Bart-Muster
**Workflow:**
```
1. Sculpting-Werkstatt oeffnen (eigener Modus)
2. Im 64³ Grid arbeiten (Zoom, Rotate, Schicht-fuer-Schicht)
3. MagicaVoxel-aehnliche Tools (Pinsel, Spiegeln, Extrudieren)
4. "Fertig" → Item wird zum Mesh kompiliert
5. In der Welt platzieren (als Mesh-Objekt, kein Chunk-Overhead)
6. Properties und Verhalten zuweisen
```
### Performance-Budget (alle drei Stufen zusammen)
```
Komponente Voxel RAM Dreiecke
──────────────────────────── ────────── ───────── ──────────
Welt (10cm, 500 Chunks) 50M ~30 MB ~1.5M
Detail-Zonen (5×, 5cm) 5M ~10 MB ~200K
Sculpted Items (20 Stueck) 5M ~10 MB ~100K
──────────────────────────── ────────── ───────── ──────────
TOTAL 60M ~50 MB ~1.8M
→ 60fps Desktop (WebGPU)
→ 30fps Mobile (WebGPU, mit LOD)
→ Passt in Browser WASM Memory
```
---
## 3. Programmierbare Items & Artefakte
### Drei Programmier-Ebenen
#### Ebene 1: Property Sliders (ab 6 Jahre)
```
┌─────────────────────────────────────────┐
│ ITEM EIGENSCHAFTEN │
│ │
│ Schaden: [████████░░] 80 │
│ Reichweite: [██░░░░░░░░] 20 │
│ Geschwind.: [██████░░░░] 60 │
│ Haltbarkeit: [██████████] 100 │
│ │
│ Element: [Feuer ▼] │
│ Sound: [Schwert-Treffer ▼] │
│ Partikel: [Funkenspur ▼] │
│ Seltenheit: [Legendaer ▼] │
│ │
│ [Testen] [Speichern] │
└─────────────────────────────────────────┘
```
Kein Code. Werte einstellen → Item funktioniert sofort.
#### Ebene 2: Trigger-Action System (ab 8-10 Jahre)
```
┌─────────────────────────────────────────┐
│ VERHALTEN EDITOR │
│ │
│ WENN [Spieler beruehrt ▼] │
│ DANN [Spieler bekommt Item ▼] │
│ │
│ WENN [Item benutzt wird ▼] │
│ DANN [Feuerball schiessen ▼] │
│ UND [Sound abspielen: boom ▼] │
│ UND [5 Schaden an Ziel ▼] │
│ WARTE [0.5 Sekunden] │
│ DANN [Partikel an Ziel ▼] │
│ │
│ WENN [Haltbarkeit = 0 ▼] │
│ DANN [Item zerstoeren ▼] │
│ UND [Voxel-Explosion ▼] │
│ │
│ [+ Neue Regel] [Testen] [Speichern] │
└─────────────────────────────────────────┘
```
**Trigger:** Beruehrt, benutzt, aufgehoben, abgelegt, Timer, HP unter X, Tageszeit, Item in Naehe, Custom Event
**Aktionen:** Schaden, Heilen, Partikel, Sound, Teleportieren, Voxel setzen/loeschen, Nachricht, Variable, Event senden
#### Ebene 3: TypeScript Scripting (ab 12+ Jahre)
```typescript
import { onHit, damage, particles, sound } from '@manavoxel/api';
onHit((event) => {
damage(event.target, 10 + this.properties.enchantLevel * 2);
particles.spawn('fire_burst', event.target.position, {
count: 20, lifetime: 0.5, color: '#ff4400'
});
this.durability -= 1;
if (this.durability <= 0) {
this.destroy();
sound.play('shatter');
}
});
```
### Wie die Ebenen zusammenhaengen
```
Ebene 1 (Sliders)
→ generiert automatisch Trigger-Actions
→ kompiliert zu TypeScript
→ kompiliert zu WASM (Wasmtime Sandbox)
Spieler kann jederzeit "eine Ebene hoch" schauen:
Slider → "Zeig mir die Regeln" → Trigger-Actions sichtbar
Trigger-Actions → "Zeig mir den Code" → TypeScript sichtbar
Nahtloser Lernpfad: Kind startet mit Slidern,
entdeckt irgendwann Trigger-Actions, lernt TypeScript.
```
### Items in der Welt definieren
```
1. Spieler baut einen Tisch aus Voxeln (direkt in der 10cm-Welt)
2. Selections-Tool: Voxel-Gruppe markieren
3. "Als Item speichern" → Voxel-Gruppe wird zum tragbaren Item
4. Properties zuweisen (Slider, Trigger-Actions oder Script)
5. Item im Inventar → kann platziert, benutzt, geteilt werden
Fuer Sculpted Items (1cm):
1. Sculpting-Werkstatt oeffnen
2. Im 64³ Grid formen
3. "Fertig" → Mesh generiert
4. In der Welt platzieren + Properties zuweisen
```
### Cross-Game Item-Portabilitaet
```
Item "Flammenklinge" hat:
├── Visuals (reisen immer mit)
│ └── Voxel-Daten, Farben, Mesh
├── Identity (reist immer mit)
│ └── Name, Creator, Rarity, Beschreibung
├── Platform-Properties (vom Ziel-Game interpretiert)
│ └── Damage: "tier3", Element: "fire", Speed: "fast"
│ └── Ziel-Game mappt "tier3" auf seine eigene Schadens-Skala
└── Scripts (bleiben im Ursprungs-Game)
└── Ziel-Game kann eigene Verhalten zuweisen
In Game A (RPG): Schwert macht Feuer-Schaden
In Game B (Parkour): Schwert ist kosmetisch, Rarity = Glow-Effekt
In Game C (Diorama): Schwert liegt in Vitrine als Dekoration
```
---
## 4. Welt-Typen & Templates
### Vordefinierte Startpunkte
| Template | Groesse | Chunks | Beschreibung |
|----------|---------|--------|-------------|
| **Zimmer** | 8m × 8m × 4m | 75 | Escape Room, Puzzle, Diorama |
| **Wohnung** | 16m × 12m × 4m | 200 | Roleplay, Mystery, Verstecken |
| **Haus + Garten** | 20m × 20m × 8m | 400 | Simulation, Abenteuer |
| **Dungeon** | 32m × 32m × 16m | 500 | RPG, Erkundung, Kampf |
| **Arena** | 30m × 30m × 10m | 400 | PvP, Sport, Wettbewerb |
| **Dorf** | 48m × 48m × 16m | 1.125 | Social, Open World (klein) |
| **Insel** | 64m × 64m × 20m | 2.800 | Exploration, Survival |
| **Leer** | Waehlbar | Variabel | Volle Freiheit |
### Was in diese Welten passt (Beispiele)
**Dungeon (32m × 32m × 16m):**
```
Erdgeschoss: Eingangshalle mit Falltuer
→ Gang mit Fallen (Pfeil-Voxel an der Wand, Trigger: Spieler geht vorbei)
→ Raetsel-Raum (Detail-Zone 2.5cm: Inschrift an der Wand)
→ Schatzkammer (Detail-Zone 5cm: Muenzen, Juwelen, Krone)
Untergeschoss: Labyrinth
→ Geheimgang hinter drehbarer Wand (Trigger-Action)
→ Monster-Spawner (Timer-Trigger + Entity-Spawn)
→ Boss-Arena (gross, offen, Saeulen als Deckung)
Belohnungen: Sculpted Items (1cm)
→ Legendaeres Schwert mit Runen
→ Amulett mit leuchtendem Stein
→ Schluessel fuer den naechsten Dungeon
```
**Haus (20m × 20m × 8m):**
```
Erdgeschoss:
Kueche: Herd (funktional: Trigger bei Interaktion → "Kochen"-Animation)
Wohnzimmer: Fernseher (Item mit Script: zeigt Bilder-Slideshow)
Flur: Briefkasten (Item: "Wenn geoeffnet → Nachricht anzeigen")
Obergeschoss:
Schlafzimmer: Bett (Trigger: "Wenn benutzt → HP wiederherstellen")
Geheimzimmer: Hinter Buecherregal (Trigger: bestimmtes Buch antippen)
→ Detail-Zone (5cm): Miniatur-Modell der Stadt auf dem Tisch
Garten:
Beete mit Pflanzen (Timer-Trigger: "Alle 60s → wachsen")
Briefkasten der Post empfaengt (Cross-Game Item-Austausch)
```
---
## 5. Der Technische Stack
### Architektur-Diagramm
```
╔═══════════════════════════════════════════════════════════╗
║ BROWSER (Zero Install, PWA, Offline-faehig) ║
║ ║
║ ┌────────────────────┐ ┌─────────────────────────────┐ ║
║ │ Bevy Engine (WASM) │ │ Svelte 5 UI │ ║
║ │ │ │ │ ║
║ │ wgpu → WebGPU │ │ Editor (Voxel + Properties) │ ║
║ │ Rapier (Physik) │ │ Trigger-Action Builder │ ║
║ │ Greedy Meshing │ │ Code Editor (Monaco) │ ║
║ │ Chunk-System │ │ Sculpting-Werkstatt │ ║
║ │ Wasmtime (Scripts) │ │ Inventar, Chat, Social │ ║
║ │ Quinn (WebTransport)│ │ Marketplace │ ║
║ └──────────┬─────────┘ └──────────────┬──────────────┘ ║
║ │ │ ║
║ ┌──────────▼────────────────────────────▼──────────────┐║
║ │ Dexie.js (IndexedDB) -- Local-First ║║
║ │ Welten, Chunks, Items, Inventar, Settings (offline!) ║║
║ └────────────────────────┬─────────────────────────────┘║
╚═══════════════════════════╪═══════════════════════════════╝
│ WebTransport + REST + WS
╔═══════════════════════════╪═══════════════════════════════╗
║ GAME SERVER (Rust, Bevy headless) ║
║ Gleicher Engine-Code wie Client ║
║ Server-autoritative Physik + Script-Execution ║
║ Orchestriert von Go-Service ║
╠═══════════════════════════════════════════════════════════╣
║ BACKEND (bestehende Mana-Services) ║
║ Go: Orchestrator, Matchmaker, Sync, Notify, Search ║
║ Hono: Auth, Credits, User, Subscriptions, Analytics ║
║ Python: LLM (NPCs), Image Gen, STT, TTS ║
╠═══════════════════════════════════════════════════════════╣
║ DATA ║
║ PostgreSQL │ TigerBeetle │ Dragonfly │ MinIO │ Dexie.js ║
║ Users,Game │ Economy │ Sessions │ Assets│ Offline ║
╠═══════════════════════════════════════════════════════════╣
║ INFRA (Self-Hosted auf Mac Mini + Cloudflare) ║
║ Forgejo, Grafana, Loki, GlitchTip, Meilisearch ║
╚═══════════════════════════════════════════════════════════╝
```
### Sprach-Verteilung
| Sprache | Anteil | Domaene |
|---------|--------|---------|
| **Rust** | 30% | Game Engine, Server, Physik, WASM Runtime, Networking |
| **Go** | 25% | Orchestrator, Matchmaker, Sync, Notify + 6 bestehende Services |
| **TypeScript** | 30% | Svelte UI, Hono Services, User-Scripting (→ WASM) |
| **Python** | 15% | AI: LLM-NPCs, Image Gen, STT, TTS, Moderation |
### Schluessel-Technologien
| Schicht | Technologie | Warum |
|---------|-------------|-------|
| Rendering | Bevy + wgpu → WebGPU | Browser-nativ, gleicher Code Client+Server |
| Voxel Meshing | Greedy Meshing (Rust, rayon parallel) | 0.5ms/Chunk, bewaehrt |
| Physik | Rapier (nativ in Rust) | Deterministisch, WASM-faehig |
| Scripting Sandbox | Wasmtime (WASM) | Hardware-Level-Isolation, Fuel Metering |
| Networking | Quinn (QUIC) → WebTransport | Unreliable Datagrams + Reliable Streams |
| Editor UI | Svelte 5 | Bestehende Expertise, 19 Apps |
| Local-First | Dexie.js + mana-sync | Bestehend, 19 Apps migriert |
| Economy | TigerBeetle | Double-Entry, 1M+ TPS, 70% Creator Share |
| AI NPCs | Ollama (Gemma 3 4B) + mana-llm | Bestehend, self-hosted |
| Asset Gen | FLUX (mana-image-gen) | Bestehend, Texturen/Farb-Paletten |
| Voice | Whisper (mana-stt) + Kokoro (mana-tts) | Bestehend, self-hosted |
| Suche | Meilisearch | Instant, Typo-tolerant, self-hosted |
| Analytics | ClickHouse | Milliarden Events, Echtzeit |
---
## 6. Chunk-System & Datenmodell
### Voxel Encoding
```
Jeder Voxel = 16 Bit (u16):
Bits 0-7: Material-Index (256 pro Chunk-Palette)
Bit 8: Transparent
Bit 9: Emissive (leuchtet)
Bits 10-11: Rotation (0°, 90°, 180°, 270°)
Bits 12-15: Flags (Custom-States, zerstoerbar, etc.)
Material 0 = Luft (leer)
```
### Chunk-Struktur
```
Chunk (32³ bei 10cm = 3.2m × 3.2m × 3.2m):
position: IVec3 // Chunk-Koordinaten
resolution: f32 // 0.10, 0.05, oder 0.025
voxels: [u16; 32*32*32] // 64 KB
palette: Vec<Material> // Chunk-lokale Palette (max 256)
dirty: bool // Mesh muss regeneriert werden
mesh: Option<GpuMesh> // Cached GPU-Mesh
```
### Kompression
```
Roh: 32³ × 2 Bytes = 64 KB
RLE: ~5-15 KB (80-95% Reduktion)
RLE + LZ4: ~2-8 KB (fuer Netzwerk)
Leerer Chunk: ~10 Bytes
Flacher Boden: ~500 Bytes
Moebel-Raum: ~5-10 KB
Maximal dicht: ~30 KB
```
### Datenbank-Schema
```sql
-- Welten
CREATE TABLE worlds (
id UUID PRIMARY KEY,
creator_id UUID NOT NULL,
name TEXT NOT NULL,
description TEXT,
template TEXT DEFAULT 'dungeon', -- zimmer, wohnung, dungeon, arena...
max_size SMALLINT[3], -- z.B. {32, 32, 16} in Metern
max_players INTEGER DEFAULT 20,
is_published BOOLEAN DEFAULT false,
play_count INTEGER DEFAULT 0,
settings JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- Chunks
CREATE TABLE chunks (
id UUID PRIMARY KEY,
world_id UUID REFERENCES worlds(id) ON DELETE CASCADE,
pos_x INTEGER NOT NULL,
pos_y INTEGER NOT NULL,
pos_z INTEGER NOT NULL,
resolution REAL DEFAULT 0.10, -- 0.10, 0.05, 0.025
voxel_data BYTEA NOT NULL, -- RLE + LZ4 komprimiert
palette JSONB DEFAULT '[]',
version INTEGER DEFAULT 1,
updated_at TIMESTAMPTZ DEFAULT now(),
UNIQUE(world_id, pos_x, pos_y, pos_z)
);
-- Items
CREATE TABLE items (
id UUID PRIMARY KEY,
creator_id UUID NOT NULL,
name TEXT NOT NULL,
description TEXT,
-- Voxel-Daten
voxel_data BYTEA NOT NULL, -- Komprimiert
dimensions SMALLINT[3], -- z.B. {3, 1, 15}
resolution REAL DEFAULT 0.10, -- 0.10 (Welt) oder 0.01 (Sculpted)
-- Properties
properties JSONB DEFAULT '{}', -- Schaden, Element, Haltbarkeit...
behavior JSONB DEFAULT '[]', -- Trigger-Action Regeln
script TEXT, -- TypeScript Quellcode
wasm_binary BYTEA, -- Kompiliertes WASM
-- Meta
rarity TEXT DEFAULT 'common',
capabilities TEXT[] DEFAULT '{}', -- ["weapon","throwable","fire"]
portability TEXT DEFAULT 'functional',
is_published BOOLEAN DEFAULT false,
thumbnail BYTEA, -- Gerendertes Preview
created_at TIMESTAMPTZ DEFAULT now()
);
-- Detail-Zonen
CREATE TABLE detail_zones (
id UUID PRIMARY KEY,
world_id UUID REFERENCES worlds(id) ON DELETE CASCADE,
position REAL[3] NOT NULL, -- Welt-Position (Meter)
size REAL[3] NOT NULL, -- Max 4×4×4m
resolution REAL NOT NULL, -- 0.05 oder 0.025
CHECK (resolution IN (0.05, 0.025)),
CHECK (size[1] <= 4.0 AND size[2] <= 4.0 AND size[3] <= 4.0)
);
-- Inventar
CREATE TABLE inventories (
player_id UUID NOT NULL,
item_id UUID NOT NULL,
world_id UUID, -- NULL = globales Inventar
slot INTEGER,
quantity INTEGER DEFAULT 1,
instance_data JSONB DEFAULT '{}', -- Haltbarkeit, Zustand pro Instanz
PRIMARY KEY (player_id, item_id, world_id, slot)
);
```
### Dexie.js (Local-First, Client)
```typescript
const db = new Dexie('manavoxel');
db.version(1).stores({
worlds: 'id, creatorId, name, isPublished, updatedAt',
chunks: 'id, worldId, [worldId+posX+posY+posZ], updatedAt',
items: 'id, creatorId, name, rarity, isPublished, updatedAt',
detailZones: 'id, worldId',
inventories: 'id, playerId, itemId, worldId',
materials: 'id, name, type',
settings: 'key'
});
```
---
## 7. Creator Economy
### Revenue Split: 70% Creator / 30% Plattform
```
Spieler kauft 100 Mana fuer 1,00 EUR
Stripe Fee: 0,03 EUR (2.9%)
Server/Infra: 0,01 EUR
Plattform-Marge: 0,26 EUR
──────────────────────────────
Creator erhaelt: 0,70 EUR
Zum Vergleich:
Roblox: Creator erhaelt ~0,25 EUR (24.5%)
Apple: Developer erhaelt ~0,70 EUR (70%)
Epic: Developer erhaelt ~0,88 EUR (88%)
Wir: Creator erhaelt ~0,70 EUR (70%)
```
Moeglich weil: Browser-Distribution (0% App Store), Self-Hosted, TigerBeetle.
### TigerBeetle Account-Struktur
```
Platform Treasury
├── User:alice
│ ├── Wallet:purchased (gekaufte Mana)
│ └── Wallet:earned (verdiente Mana)
├── Game:bobs-dungeon
│ └── Revenue (Einnahmen)
├── Marketplace:escrow (Treuhand)
└── CreatorPayout:pending (Auszahlungs-Queue → Stripe)
```
### Monetarisierung fuer Creator
| Was Creator verkaufen kann | Wie |
|---------------------------|-----|
| Zugang zu ihrer Welt | Einmal-Kauf oder Abo |
| In-World Items | Spieler kauft im Marketplace |
| Item-Blueprints | Andere koennen das Item nachbauen |
| Detail-Zone Zugang | Premium-Bereich in der Welt |
| Sculpted Items | Hochdetaillierte 1cm-Items |
| Welt-Templates | Vorgefertigte Welten zum Klonen |
---
## 8. Multiplayer & Networking
### WebTransport (QUIC)
```
Unreliable Datagrams (Position, Rotation):
Spieler-Position: 20Hz, ~20 Bytes/Paket
Kein Retransmit bei Verlust → fluessig, kein Lag
Reliable Stream 1 (Voxel-Aenderungen):
SetVoxel { chunk, pos, material }
Delta-komprimiert, batched pro Frame
Reliable Stream 2 (Chat + Social):
Textnachrichten, Emotes
Reliable Stream 3 (Economy + Inventar):
Item-Kauf, Item-Transfer
→ Server-autoritativ, TigerBeetle-validiert
Reliable Stream 4 (Game Events):
Trigger-Aktionen, Schaden, Effekte
```
### Server-Autoritaet
```
Client sendet: "Ich will Voxel setzen bei (15, 3, 7)"
Server prueft: Hat Spieler Baurechte? Material im Inventar? Zone editierbar?
Server setzt Voxel → Broadcast an alle Clients im Bereich
Client sendet: "Ich benutze mein Schwert auf Spieler B"
Server prueft: Reichweite? Cooldown? Script-Ergebnis?
Server berechnet: Schaden, Effekte → Broadcast Ergebnis
Alles Spielrelevante laeuft auf dem Server.
Der Client rendert nur und sendet Inputs.
```
### Bandbreite
```
Initial Load (500 Chunks × ~5 KB komprimiert): ~2.5 MB
→ Bei 10 Mbit/s: ~2 Sekunden
→ Progressiv: Nahe Chunks zuerst, spielbar nach ~0.5s
Laufend (20 Spieler):
Positionen: 20 × 20 Hz × 20 Bytes = ~8 KB/s
Voxel-Aenderungen: ~1-5 KB/s
Chat + Events: ~0.5 KB/s
→ Total: ~10-15 KB/s pro Spieler
→ Trivial
```
---
## 9. AI-Integration
### NPCs mit Persoenlichkeit (mana-llm + Ollama)
```
Creator definiert NPC:
Name: "Thorin der Schmied"
Persoenlichkeit: "Muerrisch, aber gutherzig. Liebt sein Handwerk."
Wissen: "Kennt alle Waffen im Dorf. Hasst Magie."
Verhalten: "Verkauft Schwerter. Gibt Quests."
Spieler spricht NPC an:
→ mana-llm (Gemma 3 4B, lokal auf Ollama)
→ Structured Output: { dialog, emotion, action }
→ Dialog wird angezeigt, Emotion steuert Animation
→ Action: z.B. "gib_quest" oder "oeffne_shop"
```
### Textur-/Palette-Generierung (mana-image-gen)
```
Creator: "Generiere eine mittelalterliche Stein-Palette"
→ FLUX generiert Farb-Samples
→ 8-16 Farben werden als Material-Palette importiert
→ Sofort im Voxel-Editor verwendbar
```
### Voice Chat + Moderation (mana-stt)
```
Spieler spricht im Voice Chat
→ Whisper transkribiert (lokal, <2s Latenz)
→ Text-Classifier prueft auf Verstoesse
→ Bei Verstoss: Warnung + Mute
→ Transkript optional als Chat-Text anzeigen
```
---
## 10. Sicherheit
### WASM Sandbox (User-Scripts)
```
Jedes Item-Script laeuft in eigener WASM-Sandbox:
├── Linear Memory: Max 4 MB (Hardware-isoliert)
├── Fuel: Max 10.000 Instructions pro Tick
├── Timeout: 5ms dann Abbruch
├── API: Nur deklarierte Capabilities
│ ├── damage() → Server-Event (nicht direkt)
│ ├── particles() → Client-only (kosmetisch)
│ ├── sound() → Client-only
│ └── voxel.set() → Server-validiert
└── Kein Zugriff auf: Filesystem, Netzwerk, andere Scripts
```
### Voxel-Content-Moderation
```
Bei Welt-Veroeffentlichung:
1. Render Welt aus 8 Winkeln zu Bildern
2. Vision-Classifier prueft auf unangemessene Formen
3. Text-in-Voxel-Erkennung (Schimpfwoerter aus Bloecken gebaut)
4. Bei Flag: Human Review Queue
5. Community-Reporting im Spiel
```
---
## 11. Self-Hosting & Infrastruktur
### Alles auf dem Mac Mini
```
Mac Mini M4 16 GB (bestehend):
├── PostgreSQL, Redis/Dragonfly, MinIO ~2 GB
├── Alle Hono Services (auth, credits, etc.) ~0.5 GB
├── Alle Go Services (sync, notify, etc.) ~0.5 GB
├── 30-50 Game Server Instanzen ~5-10 GB
├── Ollama (Gemma 3 4B, on-demand) ~3 GB
├── Monitoring (Grafana, Loki, etc.) ~0.5 GB
└── Headroom ~1-2 GB
= ~200-500 gleichzeitige Spieler
Spaeter: Mac Mini M4 Pro 48 GB (~$1.200)
= ~1.000-2.000 gleichzeitige Spieler
Cloud-Burst: Fly.io fuer Spitzen
Go-Orchestrator spawnt automatisch bei Bedarf
```
### Was bereits existiert und wiederverwendet wird
```
DIREKT NUTZBAR (0 Aufwand):
mana-auth, mana-credits, mana-subscriptions, mana-user,
mana-analytics, mana-notify, mana-search, mana-llm,
mana-image-gen, mana-stt, mana-tts,
Forgejo, Grafana, GlitchTip, MinIO
ANPASSBAR (geringer Aufwand):
mana-sync (+ Chunk-Sync, Item-Sync)
@mana/local-store (+ Voxel Collections)
@mana/shared-auth (unveraendert)
@mana/shared-ui (+ Editor-Komponenten)
NEU ZU BAUEN:
Bevy Voxel Engine (Client + Server)
Svelte Editor UI
Go Game Orchestrator
Go Matchmaker
TigerBeetle Integration
Meilisearch Integration
Content Moderation Pipeline
```
---
## 12. Build-Plan
### Phase 0: Proof of Concept (6-8 Wochen)
```
Ziel: Bevy rendert Voxel-Welt im Browser, ein Block setzen/loeschen
Woche 1-2: Bevy + wgpu im Browser
□ Rust/Bevy-Projekt aufsetzen
□ WASM-Build → WebGPU-Rendering in Chrome
□ Kamera (Orbit + WASD + Fly)
Woche 3-4: Chunk-System + Greedy Meshing
□ Chunk-Datenstruktur (32³, u16, 10cm)
□ Greedy Meshing implementieren (block-mesh-rs)
□ Flat-World (eine Ebene Stein)
□ 5 Materialien (Stein, Holz, Gras, Sand, Wasser)
Woche 5-6: Voxel Editing
□ Raycast (Mausklick → welcher Voxel?)
□ Platzieren + Loeschen
□ Material-Palette (Svelte Overlay)
□ Undo/Redo
Woche 7-8: Spieler + Physik
□ Capsule-Collider, Gravitation
□ AABB-Kollision mit Voxel-Welt
□ Laufen, Springen
□ First-Person + Third-Person
Ergebnis: Minecraft Creative im Browser bei 10cm, 60fps
```
### Phase 1: Item-System (6-8 Wochen)
```
Ziel: Items aus Voxeln formen, Properties geben, benutzen
Woche 9-10: Item-Definition
□ Voxel-Gruppe selektieren (Box-Select)
□ "Als Item speichern" → Item-Entity erstellen
□ Item im Inventar anzeigen (Svelte UI)
□ Item halten (Third Person, Hand-Attachment)
Woche 11-12: Property Sliders (Ebene 1)
□ Property-System (ECS Components)
□ Slider-UI (Svelte): Schaden, Element, Haltbarkeit...
□ Standard-Verhalten basierend auf Properties
□ Item benutzen → Effekt sichtbar
Woche 13-14: Trigger-Actions (Ebene 2)
□ Trigger-Action Editor UI
□ 10 Trigger + 15 Actions
□ Trigger-Action → WASM Kompilierung
□ Wasmtime Sandbox Integration
Woche 15-16: Items in der Welt
□ Items ablegen / aufheben
□ Partikel + Sound System
□ Item-zu-Item Interaktion
□ Voxel-Manipulation durch Items (Welt veraendern)
Ergebnis: Schwert formen → Feuer-Schaden geben → benutzen → Funken fliegen
```
### Phase 2: Multiplayer (4-6 Wochen)
```
Ziel: 2-20 Spieler in einer geteilten Welt
Woche 17-18: Game Server
□ Bevy headless Server (Rust Binary)
□ Go-Orchestrator spawnt Prozesse
□ WebTransport (Quinn ↔ Browser)
Woche 19-20: Welt-Sync
□ Chunk-Transfer bei Verbindung (komprimiert)
□ Delta-Sync bei Voxel-Aenderungen
□ Spieler-Positionen synchronisieren
□ Server-autoritative Validierung
Woche 21-22: Multiplayer-Features
□ Item-Sync + Inventar-Sync
□ Item-Interaktionen zwischen Spielern
□ Text-Chat
□ Welt-Link teilen (manavoxel.mana.how/world/abc)
Ergebnis: Freunde bauen zusammen, bekaempfen sich mit selbst-gebauten Waffen
```
### Phase 3: Platform (4-6 Wochen)
```
Ziel: Login, Persistenz, Welt-Discovery
Woche 23-24: Auth + Speichern
□ mana-auth Integration
□ Welten in PostgreSQL
□ Local-First Sync (Dexie.js ↔ mana-sync)
□ Guest Mode (spielen ohne Account)
Woche 25-26: Discovery + Economy
□ Welt veroeffentlichen
□ Welt-Suche (Meilisearch)
□ TigerBeetle: Mana-Waehrung
□ Item-Marketplace (einfach)
Woche 27-28: Polish
□ Onboarding Tutorial
□ Welt-Templates
□ Performance Tiers (Desktop/Mobile)
□ Adaptive LOD
□ Bug Fixes
Ergebnis: MVP! Spielbare Voxel-Plattform im Browser.
```
### Phase 4: Detail-System + AI (Post-MVP, 8-12 Wochen)
```
□ Detail-Zonen (Stufe 2: 5cm, 2.5cm)
□ Sculpting-Modus (Stufe 3: 1cm)
□ TypeScript Scripting (Ebene 3)
□ AI NPCs (mana-llm Integration)
□ Voice Chat (mana-stt + WebRTC)
□ Cross-Game Items
□ Voxel-Destruction Physik
□ Advanced Beleuchtung (Schatten, AO)
□ Mobile PWA Optimierung
```
---
## 13. Differenzierung: Warum ManaVoxel?
### Gegenueber Minecraft
| Minecraft | ManaVoxel |
|-----------|-----------|
| 1m Bloecke | 10cm Voxel (10× detaillierter) |
| Riesige generierte Welten | Kleine handgefertigte Welten |
| Texturen geben Detail | Voxel SIND das Detail |
| Modding braucht Java/externe Tools | Programmierung IM Spiel |
| Download (300+ MB) | Browser, ein Klick |
| Items = 2D-Icons | Items = 3D-Voxel-Skulpturen |
| Kein Creator-Revenue | 70% Revenue Share |
### Gegenueber Roblox
| Roblox | ManaVoxel |
|--------|-----------|
| Mesh-basiert, externer Editor | Voxel-basiert, alles in-game |
| Roblox Studio (Desktop-App) | Browser, kein Download |
| Luau (Nischensprache) | TypeScript (Mainstream) |
| 24.5% Creator Revenue | 70% Creator Revenue |
| Kein Offline | Offline-Editor, Local-First |
| Cloud-only | Self-Hosted moeglich |
| Proprietaer | Open-Source moeglich |
### Gegenueber Teardown
| Teardown | ManaVoxel |
|----------|-----------|
| Singleplayer | Multiplayer |
| Vordefinierte Level | User-generierte Welten |
| Fotorealistisch | Stylisiert (MagicaVoxel) |
| Nur Destruction | Bauen + Programmieren + Zerstoeren |
| Nativer Client | Browser |
| Kein UGC | Vollstaendige UGC-Plattform |
### Die einzigartige Kombination
```
Kein anderes Spiel/Plattform hat:
✓ 10cm Voxel + Multi-Resolution (Detail-Zonen + Sculpting)
✓ In-Game Programmierung mit 3 Ebenen (Slider → Trigger → Code)
✓ Browser-nativ (Zero Install)
✓ Local-First (Offline-Editor)
✓ Self-Hosted (DSGVO, volle Kontrolle)
✓ 70% Creator Revenue
✓ AI-nativ (NPCs, Asset-Gen, Voice)
✓ Cross-Game Items mit Voxel-Portabilitaet
ManaVoxel ist: MagicaVoxel + Minecraft + Roblox + Teardown
im Browser, mit programmierbaren Items,
offline-faehig, self-hosted, 70% Creator Share.
```
---
## 14. Zusammenfassung
```
WAS: Voxel-Plattform fuer handgefertigte Miniaturwelten
WIE: 10cm Basis + 5cm/2.5cm Zonen + 1cm Sculpting
WO: Im Browser (WebGPU + WASM), kein Download
WARUM: Alles entsteht im Spiel, alles ist programmierbar
FUER WEN: Creator ab 6 Jahre (Slider) bis Profi (TypeScript)
TECH: Rust (Bevy) + Go + TypeScript (Svelte) + Python (AI)
HOSTING: Self-Hosted (Mac Mini) + Cloudflare CDN
ECONOMY: TigerBeetle, 70% Creator Revenue, Mana-Waehrung
MVP: 7 Monate (1 Person)
BUDGET: ~50 MB RAM, ~1.8M Dreiecke, 60fps Desktop, 30fps Mobile
```
---
*Erstellt: 28. Maerz 2026*
*Projekt: ManaVoxel -- Teil des Mana-Oekosystems*