docs: Skill Mastery & Fusion System Konzept dokumentiert + RMB Target-Fix
- PROJEKTDOKU: Vollständiges Konzept für organisches Skill-System (Skill Memory, Mutationen, Sockel, Verheiratungs-Phasen, Ressourcen) - player.gd: RMB auf leere Fläche entfernt Target nicht mehr (clear_on_miss=false) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
3766be4017
commit
70c2ea7188
2 changed files with 75 additions and 4 deletions
|
|
@ -478,7 +478,78 @@ Charaktermodelle stammen von Mixamo (castle_guard_01.fbx) und werden mit separat
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Skill Mastery & Fusion System (Konzept)
|
||||||
|
|
||||||
|
Ein organisches Skill-System bei dem Skills sich wie Lebewesen verhalten — sie erinnern sich, wachsen und können Beziehungen eingehen.
|
||||||
|
|
||||||
|
### Kern-Konzept: Skill Memory
|
||||||
|
Jeder Skill speichert Kontext-Schnappschüsse jeder Nutzung:
|
||||||
|
- `hp_percent` — Wie viel HP der Spieler bei Nutzung hatte
|
||||||
|
- `was_opener` — War es der erste Treffer im Kampf
|
||||||
|
- `target_hp_percent` — HP des Ziels bei Nutzung
|
||||||
|
- `was_moving` — Ob der Spieler sich bewegte
|
||||||
|
- `time_since_last_skill` — Zeit seit dem letzten Skill
|
||||||
|
- `last_skill_used` — Welcher Skill davor benutzt wurde
|
||||||
|
|
||||||
|
Nach genug Nutzungen erkennt das System **dominante Muster** und der Skill bekommt eine **Mutation** (eigenständig, ohne Spielereingriff):
|
||||||
|
|
||||||
|
| Muster (60%+ der Nutzungen) | Mutation |
|
||||||
|
|---|---|
|
||||||
|
| Bei <30% HP | "Verzweiflung" — Schaden skaliert mit fehlendem HP |
|
||||||
|
| Als erster Treffer im Kampf | "Hinterhalt" — Bonus nur beim Opener |
|
||||||
|
| Im Stehen | "Standoff" — Channeling-Effekt, mehr Schaden |
|
||||||
|
| Direkt nach demselben Skill | "Rhythmus" — Combo-Bonus bei Wiederholung |
|
||||||
|
| Selten genutzt | "Verblasst" — schwächer, irgendwann weg |
|
||||||
|
|
||||||
|
### Sockel-System
|
||||||
|
Spieler können Edelsteine mit Elementen in Sockel-Slots eines Skills einsetzen:
|
||||||
|
- **Elemente:** Feuer, Eis, Blitz, Dunkel, Licht
|
||||||
|
- Nach X Nutzungen **verschmilzt** der Edelstein mit dem Skill — der Skill trägt das Element dauerhaft
|
||||||
|
- **Neuer Sockel** entsteht automatisch bei hoher Resonanz (Element passte zur Spielweise), sonst per Soul Dust erzwingbar
|
||||||
|
- **Rarity** bestimmt maximale Sockel-Slots: Common=1, Rare=2, Epic=3, Legendary=4
|
||||||
|
|
||||||
|
**Hybrid-Elemente** durch Verschmelzung zweier Skills:
|
||||||
|
| Kombination | Ergebnis |
|
||||||
|
|---|---|
|
||||||
|
| Feuer + Eis | Dampf / Schmelze |
|
||||||
|
| Dunkel + Licht | Gleichgewicht |
|
||||||
|
| Blitz + Erde | Magnetismus |
|
||||||
|
| Feuer + Blitz | Plasma |
|
||||||
|
|
||||||
|
### Verheiratungs-Phasen (Skill Linking)
|
||||||
|
Zwei Skills können verlinkt werden und entwickeln sich gemeinsam weiter:
|
||||||
|
|
||||||
|
```
|
||||||
|
VERLOBT → VERBUNDEN → FUSIONIERT ★
|
||||||
|
```
|
||||||
|
|
||||||
|
| Phase | Beschreibung |
|
||||||
|
|---|---|
|
||||||
|
| **Verlobt** | Beide Skills bleiben einzeln spielbar. Teilen Kontext-Erinnerungen. Zusammen gespielt = mehr Resonanz. Jederzeit kostenlos trennbar. |
|
||||||
|
| **Verbunden** | Nach ausreichend gemeinsamer Nutzung verschmelzen beide zu EINEM neuen Skill. Trennbar gegen Kosten (Erinnerungssplitter, nicht beide Skills zurück). |
|
||||||
|
| **Fusioniert ★** | Spieler markiert bewusst als untrennbar. Kein Zurück. Kleiner permanenter Bonus als Belohnung fürs Commitment (z.B. extra Sockel-Slot, CD-Reduktion). |
|
||||||
|
|
||||||
|
**Scheidung** (nur für verheiratete/verbundene Skills, nicht für eigenständig mutierte):
|
||||||
|
- Verbundene Skills trennen kostet **Soul Dust** + Verlust der während der Ehe entwickelten Elemente
|
||||||
|
- Organische Mutationen beider Skills bleiben erhalten
|
||||||
|
- Fusioniert ★ = endgültig, keine Scheidung möglich
|
||||||
|
|
||||||
|
### Ressourcen
|
||||||
|
| Ressource | Herkunft | Verwendung |
|
||||||
|
|---|---|---|
|
||||||
|
| **Soul Dust** | Auflösen ungenutzter Skills | Neuen Sockel erzwingen, Scheidungskosten |
|
||||||
|
| **Edelsteine** | Gefunden / Gegner-Drops | In Sockel einsetzen für Elemente |
|
||||||
|
| **Erinnerungssplitter** | Scheidung verbundener Skills | In anderen Skill "einpflanzen" um Kontext-Geschichte zu übertragen |
|
||||||
|
|
||||||
|
### Rarity-System
|
||||||
|
Rarity steigt durch Skill-Generationen (Verbindung/Fusion) — nicht durch Grinding:
|
||||||
|
- Kind-Skills aus Verbindungen starten automatisch mit höherer Rarity als ihre Eltern
|
||||||
|
- Mehr Rarity = mehr Sockel-Slots = mehr Potential für Elementar-Kombinationen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Geplante Features
|
## Geplante Features
|
||||||
|
- [ ] Skill Mastery & Fusion System (siehe Konzept oben)
|
||||||
- [ ] Wut-Ressource für Krieger
|
- [ ] Wut-Ressource für Krieger
|
||||||
- [ ] Spell-System (Feuerbälle etc.)
|
- [ ] Spell-System (Feuerbälle etc.)
|
||||||
- [ ] Schadenstypen (Physical, Fire, Ice, Lightning, Poison)
|
- [ ] Schadenstypen (Physical, Fire, Ice, Lightning, Poison)
|
||||||
|
|
|
||||||
|
|
@ -717,7 +717,7 @@ func clear_target():
|
||||||
autoattack_active = false
|
autoattack_active = false
|
||||||
print("Ziel aufgehoben")
|
print("Ziel aufgehoben")
|
||||||
|
|
||||||
func _try_select_target(start_attack: bool = false):
|
func _try_select_target(start_attack: bool = false, clear_on_miss: bool = true):
|
||||||
var space_state = get_world_3d().direct_space_state
|
var space_state = get_world_3d().direct_space_state
|
||||||
var viewport = get_viewport()
|
var viewport = get_viewport()
|
||||||
var mouse_pos = viewport.get_mouse_position()
|
var mouse_pos = viewport.get_mouse_position()
|
||||||
|
|
@ -728,8 +728,8 @@ func _try_select_target(start_attack: bool = false):
|
||||||
var result = space_state.intersect_ray(query)
|
var result = space_state.intersect_ray(query)
|
||||||
if result and result.collider.has_method("take_damage"):
|
if result and result.collider.has_method("take_damage"):
|
||||||
set_target(result.collider, start_attack)
|
set_target(result.collider, start_attack)
|
||||||
else:
|
elif clear_on_miss:
|
||||||
# Klick auf freie Fläche → Target entfernen
|
# Klick auf freie Fläche → Target entfernen (nur bei LMB)
|
||||||
clear_target()
|
clear_target()
|
||||||
|
|
||||||
# ═══════════════════════════════════════════════════════════════
|
# ═══════════════════════════════════════════════════════════════
|
||||||
|
|
@ -1008,7 +1008,7 @@ func _physics_process(delta):
|
||||||
if _lmb_press_pos.distance_to(release_pos) < 5.0:
|
if _lmb_press_pos.distance_to(release_pos) < 5.0:
|
||||||
_try_select_target(false)
|
_try_select_target(false)
|
||||||
if Input.is_action_just_pressed("ui_right_mouse"):
|
if Input.is_action_just_pressed("ui_right_mouse"):
|
||||||
_try_select_target(true)
|
_try_select_target(true, false)
|
||||||
|
|
||||||
# ── Aktionsleiste (Tasten 1-9) ────────────────────────────
|
# ── Aktionsleiste (Tasten 1-9) ────────────────────────────
|
||||||
for i in range(9):
|
for i in range(9):
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue