LUMORA – NEUE INHALTE HINZUFÜGEN

Alle IDs müssen eindeutig sein. Vor einer Änderung Quelle und Saves sichern. Startwerte verändern keine bereits gespeicherten Figuren automatisch. Die Autorenskripte author_initial.py/author_slice.py/author_world.py/polish_content.py sind historische Erstellungswerkzeuge. NICHT ungeprüft erneut ausführen: mehrere überschreiben ältere Datenstände. Die JSON-Dateien sind die aktuelle Quelle.

Gegenstand: Content/Data/items.json um id/name/category/rarity/weight/price ergänzen. Ausrüstung hat slot und stats; Waffen zusätzlich weapon/damage/speed/range. weapon wählt sword/greatsword/axe/hammer/spear/dagger/bow/crossbow/staff. stats ist additiv; resist enthält Anteile0..0.8 pro Element. sold und min_reputation steuern Handel. Beispiel: {"id":"bronze_ring","name":"Bronzering","category":"armor","rarity":"ungewöhnlich","slot":"ring1","weight":0.1,"price":30,"stats":{"armor":1},"sold":true}. Neue Slotarten benötigen eine bewusste Code-/Savemigration.
Gegner: enemies.json mit id/name/hp/damage/speed/rate/xp/gold/loot. ranged/boss/flee/armor/element/resist/kind wählen Verhalten. kind animal/flying/monster wählt eigene Körper; übrige erhalten Humanoidmodelle. world.spawn_enemy(type, eindeutige_instance_id, position) registriert Spawn und Persistenz. Boss-ID an einen Dungeon binden, damit clear ausgelöst wird. Normale Gegner kommen am nächsten Tag zurück; Bosse bleiben besiegt.
Quest: quests.json mit id/title/description/giver/requires/objectives/xp/gold. Ziele bestehen aus type,target,count,text. Vorhandene Ereignisse: collect,kill,talk,visit,read,open,craft,rescue,escort,enter,puzzle,clear,defend. handover entfernt Gegenstände bei der Abgabe. choices enthält text und reputation; flags/recipes/items vergeben Belohnungen. repeat ist einmal pro Spieltag wiederholbar. Neue Ereignistypen im auslösenden Gameplay gezielt an quests.event senden. Keine Belohnung vor erfolgreich validierter Abgabe vergeben.
Dialog: dialogues.json mit id/name/text/quests und optional voice_file. Dann NPC mit dialogue-ID registrieren. Dialogtext und Questantworten gehören in die Daten, nicht in die UI. Ein NPC kann mehrere annehmbare/abgabebereite Aufträge anbieten. Eine Audiodatei wird erst nach tatsächlicher Implementierung einer Wiedergabe als gesprochen beworben.
Fähigkeit: skills.json mit id/name/tree/type/cost/requires/mana/cooldown/element/effect. Unterstützte Typen active/passive/sustained/charge/channel. Effekte projectile/area/heal/ward/dash; charge/channel verwenden Projektile. Passive stats werden addiert. Ein neuer Effekt benötigt Verhalten in main.cast sowie einen realen Test.
Handwerk: recipes.json mit id,name,trade,station,inputs,output,amount,tool,level. station muss zur vorhandenen Werkbank passen. Rezepte über Aufträge und Lehrer/Handel verfügbar machen; eine bloße JSON-Zeile erzeugt keine Werkbank.
Biom: regions.json mit center, Boden-/Baum-/Felsfarbe, weather-Liste, resource und music-Grundton. Terrainhöhe/Wasser und besondere Modelle sind in world.gd konfigurierbar. sites.json enthält Typ capital/city/village und regionale Lage; vorhandene handgebaute Orte tragen existing=true. Nur das Erhöhen einer Zahl erzeugt keine eigenständige Geschichte.
Dungeon: dungeons.json mit id/name/region/position/index/boss/puzzle/clue. Die elf modularen Dungeons haben getrennte Innenraumkoordinaten und eigene Apparaturen. Verfügbare Rätseltypen: weights/light/wind/mirror/water/platform/time/shadow/runes/music. Neue Mechaniken brauchen sowohl Zustandslogik in realm_world als auch sichtbare/physische Reaktionen und eine unmissverständliche Tafel. Existing-Wurzeltempel bleibt in adventure.gd.

Danach: Config/content_check.py, BUILD.ps1 -Render. Relevante Ablauf-/Kampftests ergänzen, neue Inhalte durch echte Interaktion prüfen. PHP-Katalog über skrabi-lumora-20261003/author_api.py neu erzeugen, falls Online-Saves die neuen IDs zulassen sollen. Anschließend exportieren, Webdateigrößen über prepare_web.py aktualisieren und nach Backup atomar veröffentlichen. Daten-IDs existierender Saves nicht einfach umbenennen oder entfernen. Schema erhöhen und Migration mit realen Altspielständen testen.
