Item - Bastelschublade/trinity GitHub Wiki
Das alte Item system (json) wurd durch eine Datenbank Scene ersetzt, um einfacher Itemdaten ändern und ergänzen zu können. Da Items auf unterschiedliche Weise im Spiel verwendet werden (inventar, text, tooltip, händler, in kisten, als physischer gegenstand...), sollten die Metadaten zu jedem Item zentral gesammelt und für jede Komponente (World, Safe, Inventar, Character, Combat) des Spiels zugängig sein: Global.ItemDB
Die Datenbank enthält Nodes vom Typ Item
welcher eine Reihe Eigenschaften bereitstellt, die für jedes Item gesetzt werden 'müssen':
-
item_name
Itemname, der für die Anzeige im Spiel verwendet wird (Tooltips, Quests usw..) -
item_alias
Itemname (Englisch, Einzigartig!, zusammengeschriebenundklein) der zur identifikation (anstelle einer id) des objekts und zum abfragen dessen eigenschaften verwendet wird. (nicht ingame sichtbar) UPDATE: wird nun automatisch aus dem Nodenamen übernommen. item_price
-
item_body
Verweis auf die physische Komponente des Items (scene), wird zum generieren des items in der Welt (drop/spawn/equip) benötigt. UPDATE: wird nun automatisch aus dem Nodenamen erzeugt (items/bodies/.tscn) oder auf default. -
item_icon
Verweis auf ein Bild, das zB im Inventar angezeigt wird. 256x256 transparenter hintergrund. UPDATE: wird nun automatisch aus dem Nodenamen erzeugt (items/icons/.png) oder auf default. -
item_sellable
Yes/No -
item_stackable
bisher werden nur items die man stacken kann vom inventar benutzt
Dem Item in der ItemDB können "Typen" als Unterpunkte hinzugefügt werden. Dies sind Klassen, die weitere Eigenschaften und Funktionalitäten bereitstellen. Beispielsweise ergänzt der Typ "Seed" das item um die möglichkeit es auf dem Feld anfplanzen zu können, benötigt dafür aber zustätzliche Informationen zB seed_grow_time
und seed_crop
als Verweise auf die Pflanze, die daraus entstehen soll.
Einem Item können mehrere Typen untergeordnet werden, zB ist ein Kürbis sowohl Food
als auch Seed
. Die typen müssen nur zum Item hinzugefügt werden, die Implementierung ins Spiel (Buttons, Funktionen etc.) erfolgt automatisch.
Bisherige Typen:
Seed
Food
Equip
-
Weapon
ergänzt automatisch Equip (Vererbung) -
Quest
noch nicht implementiert
Die wesentlichen Schritte zur Erstellung eines nicht animierten Items werden im folgenden kurz Anhand eines Beispiels gezeigt. GGf. können Schritte übersprungen werden, wenn zB schon ein Modell vorliegt, oder sich das Item aus anderen bereits vorhandenen Assets zusammensetzt (zB Blumenstrauß oder Obstkiste):
Anmerkung: Das zuordnen der ItemBodies (3D) und ItemIcons (2D) zu den Items (Text) funktioniert jetzt automatisch, das erspart etwas Arbeit in Schritt 4, dafür haben sich die Pfade minimal geändert, die Dateinamen der icons und bodies, müssen jetzt zum alias (eigenschaft vom body) sowie zum namen des nodes in der ItemDB passen.
items/dice/dice_icon.png
->items/icons/dice.png
(selbsterklärend wenn man es sieht, aber abweichend von den Bildern unten)
Das ist kein Blender tutorial: Mit loopcuts die augen zu erzeugen ist natürlich nicht super elegant, aber es soll ja nur den Prozess veranschaulichen ;)
Das Blender (v2.8+) plugin um direkt in godot scenen zu exportieren gibt es hier. Und ist sehr zu empfehlen!
Da ich vergessen habe die default camera in blender zu löschen bzw. nicht zu exportieren, hab ich sie direkt verwendet um einen screenshot für den nächsten schritt zu erstellen. Über das [+] links oben kann auch eine eigene Kamera hinzugefügt werden, wenn noch nicht vorhanden (und danach wieder löschen!).
Das ist erstmal der quick and dirty weg den ich zur zeit verwende, später kann dieser schritt vielleicht automatisiert werden, durch ein Script, das ein Bild des objectes rendert.
Items die einfach rumliegen sollen, können per drag and drop oder durch den instance button (gif) der World.tscn hinzugefügt werden. Durch schritt 4 ist es aber auch möglich, die Items im Spiel zu generieren zB als Questbelohnungen oder beim Ernten von Pflanzen, dazu muss nur der item_alias
im entsprechenden Feld (in der quest, loottabelle, pflanze ...) angegeben werden.
Achtung: Durch einen ungelösten Bug, fallen kleine Objekte gerne mal durch die Map, das liegt an der Map nicht am Item und wird noch gefixt, bis dahin können items um sicher zu gehen auf Tischen oder anderen Objekten abgelegt werden.