Es geht weiter!

Nach fast einem Jahr Pause geht es nun weiter mit dem Projekt OctoAwesome! Das NoobDevTv-Team versucht wieder regelmäßig Donnerstags um 19 Uhr einen OctoAwesome-Stream auf den Streaming-Kanäle von NoobDevTv: Twitch, Youtube und Mixer. zu veranstalten! Die neu produzierten Folgen der nun dritten Staffel werden ab jetzt auf deren Youtube-Kanal veröffentlicht.

Extensions

Aus OctoAwesome Wiki
Wechseln zu: Navigation, Suche

In diesem Artikel geht es um das Entwickeln von Erweiterungen für das Projekt OctoAwesome.

Zur Zeit lassen sich (im master-Branch)

  • Blocktypen
  • Map Populators
  • Baumtypen (in Verbindung mit der Basiserweiterung)

durch eigene Erweiterungen ausbauen. Weitere Typen (z.B. Items, Resources, NPCs) sind für die Zukunft geplant.

Erweiterungen müssen in allen Fällen eine eigene .dll Dateien sein, die entweder direkt im Programmverzeichnis oder im Unterverzeichnis Plugins liegen müssen. Zur Entwicklung verwendet man am besten VisualStudio oder MonoDevelop. Der Namespace- und Assemblyname sollte im Format OctoAwesome.* oder OctoAwesome.Plugin.* sein. In einer einzelnen Datei können mehrere erweiternde Typen definiert sein.

Blocktypen

Benötigte Verweise
OctoAwesome.dll
Beispielimplementierung(en)
SandBlockDefinition.cs auf GitHub: Einfacher Blocktyp
GrassBlockDefinition.cs auf GitHub: Komplexerer Blocktyp

Blocktypen erben implementieren die Basisschnittstelle IBlockDefinition oder erben von der Basisklasse BlockDefinition. Der Vorteil der Basisklasse ist, dass sie bereits viel Standardcode enthält, der nicht in jeden Blocktyp kopiert werden muss.

Die Texturen des Blocks werden als Array von Bitmaps dem Spiel übergeben. Diese können entweder im Dateisystem liegen (besipielsweise im png-Format, wie bei der Basiserweiterung) oder als Resourcen in der dll-Datei des Plugins. Zum Laden aus dem Dateisystem sollte die Verzeichnisstruktur eingehalten werden. Insbesondere sollte im Assets-Verzeichnis auf die Verwendung des Assemblynamens (ohne Dateiendung) als Unterordner geachtet wird. Unterhalb dieses Ordners dürfen beliebige Ordner verwendet werden.

Die Methoden GetPhysicalProperties() und Hit() müssen zwar implementiert werden, werden aber nicht vom Spiel verwendet. Das Icon und der Name werden im Spiel angezeigt, aber nicht zur internen Identifikation eingesetzt, können also lokalisiert werden.

Map Populators

Benötigte Verweise
OctoAwesome.dll
Beispielimplementierung(en)
TreePopulator.cs auf GitHub

Blocktypen implementieren entweder die Basisschnittstelle IMapPopulator oder erben von der Basisklasse MapPopulator.

Order definiert die Reihenfolge, in der die Populatoren auf die Welt angewendet wird. In der Methode Populate() wird ein Chunk mit Dingen versehen.

Baumtypen

Benötigte Verweise
OctoAwesome.dll
OctoAwesome.Basics.dll
Beispielimplementierung(en)
CactusTreeDefinition.cs auf GitHub

Blocktypen implementieren entweder die Basisschnittstelle ITreeDefinition oder erben von der Basisklasse TreeDefinition.

Über MinTemperature, MaxTemperature und GetDensity() werden die Minimal-/Maximaltemperaturen für diesen Baum und die Häufigkeit des Auftretens ermittelt. In der Methode Init() können die benötigten Blocktypen herausgesucht werden und dann schließlich in der Methode PlantTree() zum "Pflanzen" eines Baumes verwendet werden.

Texturepacks

Wenn einem die Texturen einer Erweiterung nicht gefallen, muss man nicht sofort eine eigene Erweiterung erstellen. Häufig reicht dafür ein Texturepack aus.

Man sollte eine Kopie des Assets-Ordners der entsprechenden Erweiterung kopieren und kann dann in dieser Kopie Texturen mit Dateien mit exakt dem gleichen Dateinamen ersetzen. Wenn man diesen Ordner dann wieder über das Original drüberkopiert (oder direkt am Original arbeitet), sind die Texturen ersetzt. Wenn man davor den alten Ordner umbenennt kann man sogar wieder zurückwechseln. Man sollte aber darauf achten, dass die neuen Texturen genau die selben Abmessungen haben, wie die alten.