diff --git a/PROJEKTDOKU.md b/PROJEKTDOKU.md index 8fed09c..ce22b5f 100644 --- a/PROJEKTDOKU.md +++ b/PROJEKTDOKU.md @@ -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 +- [ ] Skill Mastery & Fusion System (siehe Konzept oben) - [ ] Wut-Ressource für Krieger - [ ] Spell-System (Feuerbälle etc.) - [ ] Schadenstypen (Physical, Fire, Ice, Lightning, Poison) diff --git a/player.gd b/player.gd index 400bcc6..d1fe86a 100644 --- a/player.gd +++ b/player.gd @@ -717,7 +717,7 @@ func clear_target(): autoattack_active = false 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 viewport = get_viewport() 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) if result and result.collider.has_method("take_damage"): set_target(result.collider, start_attack) - else: - # Klick auf freie Fläche → Target entfernen + elif clear_on_miss: + # Klick auf freie Fläche → Target entfernen (nur bei LMB) clear_target() # ═══════════════════════════════════════════════════════════════ @@ -1008,7 +1008,7 @@ func _physics_process(delta): if _lmb_press_pos.distance_to(release_pos) < 5.0: _try_select_target(false) if Input.is_action_just_pressed("ui_right_mouse"): - _try_select_target(true) + _try_select_target(true, false) # ── Aktionsleiste (Tasten 1-9) ──────────────────────────── for i in range(9):