Modding , eine kleine Anleitung wie Ihr selbst eigene Blöcke für cyubeVR erstellen könnt

Stand 19.07.2021

Neu Probleme beim erstellen von Blöcken

Diese Anleitung ist für Anfänger gedacht die mit der englischen Sprache nicht soviel anfangen können ist aber nicht als Ersatz zu der Anleitung die der Entwickler bei Steam gepostet hat, die Beispiele könnt Ihr dort downloaden, hier der Link 

https://steamcommunity.com/app/619500/discussions/3/1640917625019543783/

Die Beschreibung habe ich in Kurzform abgefasst sie wird die nächsten Wochen um weitere Beispiele erweitert


Wo werden die erstellten Blocks gespeichert ?

Die Blöcke werden auf dem Laufwerk gespeichert wo Ihr Steam installiert habt und das ist nicht zwingend c: . Bei mir sind die System SSD und die Game SSD aus Gründen der Performance getrennt, so ist Steam bei mir auf Laufwerk g: installiert.

In dem Falle sind die Blocks hier untergebracht g:/steam/steamapps/common/cyubeVR/Mods/Blocks,

habt Ihr Steam auf c: installiert kann der Pfad so aussehen c:/steam/steamapps/common/cyubeVR/Mods/Blocks,

Solltet Ihr Steam z.B. im Verzeichnis ProgramFiles installiert haben müsst Ihr den Pfad noch davor setzen.

Wo kommen die Blocks nicht hin ?

Beim Punkt  zu den Rezepten wird ein weiterer Pfad erwähnt der auch /cyubeVR heißt, der heißt bei mir

c:/User/Admin/AppData/Local/cyubeVR/

Hier gehören die Blocks nicht hin, das Saved Verzeichnis ist das Verzeichnis in dem cyubeVR Eure Spieldaten speichert, dort findet Ihr z.B. auch die Sreenshots die Ihr erstellt hab und darin sind auch Eure aktuellen Welten gespeichert, von diesem Verzeichnis mache ich nach jedem Spiel eine automatische Sicherung auf meinem Server, natürlich könnt Ihr dafür ein USB Laufwerk nutzen.


Was Ihr braucht um einen Block zu erstellen

1. Einen Namen für den Block

2. Eine Texture oder mehrere Texturen

3. Ein Rezept das den Block beschreibt

4. Ein Bild oder eine Grafik die zeigt wie der Block zusammengesetzt ist

 

Zuerst erstellt Ihr einen Ordner in dem oben genannten Verzeichnis "[GameInstallDirectory]/cyubeVR/Mods/Blocks" wobei der Name beliebig ist aber es macht Sinn es so zu benennen wie auch die "Name": Benennung in der Properties.json Datei gewählt wird, das ist dann auch der Name der zu Eurem Block im Spiel und im Steam Workshop erscheint.

Ladet Euch dazu am besten den Beispielblock von "cdn.discordapp.com" runter, den Link findet Ihr in der englischen Beschreibung des Entwicklers, entpackt die zip Datei und kopiert den Inhalt in Euren Ordner, als Beispiel wenn Ihr Euren Block "My first new Block" nennt und das Verzeichnis den gleichen Namen hat sehe das so aus

"[GameInstallDirectory]/cyubeVR/Mods/Blocks/My first new Block/Properties.json"

Öffnet jetzt die Properties.json Datei mit einem einfachen Texteditor z.B. Notepad.exe von Windows, versucht es nicht mit MS Word oder anderen mächtigen Textprogrammen, die haben die dumme Angewohnheit unsichtbare Formatierungs-Zeichen einzufügen mit den das Spiel evt. nicht zurecht kommt.

Die Datei sollte dann so aussehen:


{
    "Name": "Template Custom Block",
    "CreatorName": "Stonebrick Studios",
    "UniqueID": 82323470,
    "Recipe": {
        "Array" : [33,33,33,33],
        "SizeX": 2,
        "SizeY": 2,
        "SizeZ": 1
},
    "Yield": 50,
    "SimilarTo": 1,
    "Textures": {
        "Mode": 1,
        "WithNormals" : false
    }
}


Die zweite Zeile der Properties.json könnt Ihr dann also z.B. so ändern

    "Name": "My first new Block",

den Namen könnt Ihr aber jederzeit beliebig ändern.


Die Zeile 3 der Properties.json Datei enthält den Namen des Erstellers, dieser Name erscheint z.B. bei Eurem Block wenn Ihr ihn bei Steam für die Community uploadet, bei mir sieht das dann so aus

    "CreatorName": "roehrensockel",


Die Zeile 4 der Properties.json Datei enthält eine einzigartige Nummer zwischen 0 und 2147483648 mit der der Block einzigartig wird, ihr könnt Euch eine Nummer ausdenken, einen Zufallsgenerator benutzen, ich selbst benutze einfach immer 8 Ziffern meiner Versandquittungen da die auch nie doppelt vergeben werden.

sowas wie

    "UniqueID": 12345678,

solltet ihr aber nicht nehmen.

hier ein guter Zufallsgenerator im Web der werbefrei ist

https://www.matheretter.de/rechner/zufallszahlengenerator/

Wichtig, hab Ihr das Rezept einmal erstellt und benutzt darf alles verändert werden nur diese Nummer nicht !


Die Zeile 5 bis 10 der Properties.json Datei enthält das Rezept, hier ein Beispiel

"Recipe": {
        "Array" : [33,33,33,33],
        "SizeX": 2,
        "SizeY": 2,
        "SizeZ": 1
},

mit vier Blöcken in einer Ebene der Z Achse mit der Seitenlänge von je 2 Blöcken, befinden sich in einer Ebene eine 11 ist das ein leerer Platz, die anderen Nummern geben das Material an, ich füge später noch eine Liste an wie die zugeordnet sind.

Die einfachste Methode ein Rezept zu bekommen habt Ihr im Spiel selbst, baut Euch ein sinnvolles Konstrukt zusammen und legt es vor Euch ab( sollte es grün glühen existiert es schon und Ihr müsst es abändern bis das Glühen aufhört ) dann wechselt Ihr ins "Setting" Menü und wählt das Tab "Stats", wenn Ihr ganz runter scrollt findet Ihr den Button "Generate Recipe", hab Ihr ihn angeklickt speichert das Spiel die Datei "Recipe.txt" solltet Ihr Eure Konstruktion ändern und den Button erneut betätigen wird keine weitere Rezept Datei erzeugt, die alte Datei wird mit dem gleichen Dateinamen überschrieben, die Datei findet Ihr hier.

 [%localappdata%]/cyubeVR/Saved/Dev/Recipe.txt

bei mir sieht der Pfad so aus

c:/User/Admin/AppData/Local/cyubeVR/Saved/Dev/Recipe.txt

Ganz so einfach ist die Sache aber nicht weil Windows 10 in der Explorer Ansicht die Verzeichnisse eindeutscht, das User Verzeichnis heißt dann Benutzer und der Benutzer der bei mir Admin heißt hat natürlich bei Euch den Namen unter dem Ihr Euch bei Windows angemeldet habt, und dann werdet Ihr den Ordner AppData wahrscheinlich nicht finden er ist vom System nämlich versteckt worden, ich benutze dazu einen Dateimanger wie TCPowerPack oder Speedcommander, die zeigen den richtigen Pfad an, wollt Ihr die Daten sichern muss das Atribut "versteckt" abgeschaltet werden, das ist auch wichtig wenn Ihr später in cyubeVR ein Rezept speichert, je nach Einstellung Eurer Rechte würdet Ihr die Datei sonst selbst mit der Windows Suchfunktion nicht finden, das betrifft wahrscheinlich aktuelle Windows 10 Versionen, bei meinem Windows 7 und Windows 8.1 Rechnern hab ich das Problem nicht.

Ein Rezept ohne diese Automatik zu erstellen ist nicht so einfach, ich habe Blöcke mit den Zahlen von 0 - 9 erstellt wobei die Eins eine Reihe von 4 Steinblöcken mit einem roten Blütenblatt ist, die Zwei mit einem Blatt auf dem zweiten Stein und die Drei ein Blatt auf Stein 1 und 2 also wie beim Binärcode der bei 4 Steinen so aussieht wobei das rote X ein Blütenblatt auf einem Stein darstellt

1- x x x x

2- x x x x

3- x x x x

4- x x x x

5- x x x x

6- x x x x

7- x x x x

8- x x x x

9- x x x x

dann habe ich das Rezept für die 1 vom Spiel erzeugt und für die restlichen Zahlen als Kopie erzeugt und nur die Blütenblätter in dem Code so geändert, Theorie und Praxis ! das hat überhaupt nicht geklappt weil das Spiel z. B. die 1 und die 8 mit je einem Blütenblatt nicht unterscheiden kann, letztendlich habe ich die Zahlen 1 - 3 so belassen und restlichen Zahlen mit einem Stein seitlich noch mal neu codiert und die Rezepte vom Spiel noch mal automatisch erzeugen lassen, das klappte dann von 4 - 9 aber nicht bei der 3, obwohl die Rezepte eigentlich einzigartig sind, setze ich zuerst das Blatt auf Stein 1 und dann auf ein Blatt auf Block 2 sollte eigentlich eine 3 kommen, es kommt aber eine 1, setze ich zuerst Blatt 2 und dann Blatt 1 kommt wieder keine 3 sondern eine 2, es funzt aber doch. Setze ich zuerst nur drei Steinblocks zusammen und platziere Blatt 1 und 2 und setze dann den vierten Steinblock dazu bekomme ich endlich eine 3.

Es ist also wichtig das nicht nur die Nummern einzigartig sind es sollten auch möglichst wenig ähnliche Konstrukte erzeugt werden.


Die Zeile 11 der Properties.json Datei "Yield" ist einfach, die eingesetzte Zahl kann zwischen 1 und 50 liegen und gibt die Menge der Blöcke an die erzeugt werden.


Die Zeile 12 der Properties.json Datei der "SimilarTo" , dieser Wert beschreibt auf welche Weise und mit welchem Werkzeugen der Block ausgebrochen werden kann:

Mode 1 Blöcke haben die Eigenschaft Stone, können also mit einer Pickaxe oder einem Sledgehammer zerstört werden.

Mode 2 Blöcke haben die Eigenschaft Wood, können also mit einer Axe oder einem Sledgehammer zerstört werden.

Mode 3 Blöcke haben die Eigenschaft Dirt, werden zerstört bei der Nutzung einer Schaufel.


Ab Zeile 13 der Properties.json Datei, der Unterbereich "Texturen" beinhaltet die Informationen wie die Texturen die sich im Unterordner /Textures befinden behandelt und dargestellt werden.

Das wichtigste Setting ist "Mode", es gibt 4 Modes die beschreiben an welchen Seiten die Texturen dargestellt werden.

- Mode 1 ist der einfachste Modus, bei ihm befindet sich im /Textures Ordner eine Texture die an allen Seiten des Blocks dargestellt wird dafür werden 2 Dateien benötigt:

all.dds - mit einer Texture in der Größe 2048 x 2048 Pixel

all_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

 

- Mode 2 bei diesem Modus befinden sich 2 Texturen im /Textures Ordner, eine Texture wird auf der linken, rechten, Front- und Rückseite dargestellt, die 2 Dateien heißen:

sides.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

sides_small - mit einer Texture in der Größe 512 x 512 Pixel

eine weitere Textur wird auf der Ober- und Unterseite dargestellt, die 2 Dateien heißen:

updown.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

updown_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

 

- Mode 3 bei diesem Modus  befinden sich 3 Texturen im /Textures Ordner, eine Texture wird auf der linken, rechten, Front- und Rückseite dargestellt, die 2 Dateien heißen:

sides.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

sides_small - mit einer Texture in der Größe 512 x 512 Pixel

eine weitere Textur wird auf der Oberseite dargestellt, die 2 Dateien heißen:

up.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

up_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

eine weitere Textur wird auf der Unterseite dargestellt, die 2 Dateien heißen:

down.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

down_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

 

- Mode 4 bei diesem Modus  befinden sich 6 Texturen im /Textures Ordner, es befinden sich dann fogende 12 Dateien im /Textures Ordner:

für oben:

up.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

up_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

für unten:

down.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

down_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

für links:

left.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

left_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

für rechts:

right.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

right_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

für die Front:

front.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

front_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

und für die Rückseite:

back.dds - mit einer Texture in der Größe 2048 x 2048 Pixel und

back_small.dds - mit einer Texture in der Größe 512 x 512 Pixel

 

Zur Erstellung dieser Dateien können Bilder und Grafiken verwendet werden im Dateiformat PNG, JPG und TGA, damit sie von cyubeVR erkannt werden müssen diese in das DXT5 konvertiert werden, in der englischen Beschreibung des Entwicklers bei Steam findet Ihr einen Link bei dem Ihr einen "dds-converter" und einen "dds viewer" (Der ist von NVidea und crasht mit AMD Grafikkarten) downloaden könnt. Habt Ihr die benötigten Dateien erstellt und konvertiert müsst Ihr in Euren Blocks Ordner im dem sich auch die "Properties.json" den Ordner "Textures" erstellen und Eure dds Dateien dort hineinkopieren


"Recipe prewiew"

In der "crafting receipe overview" Liste findet Ihr unter den fest im Spiel gesetzten Rezepten eine Liste der "custom blocks" die Ihr abonnieren könnt wenn andere Spieler eigene Blocks gepostet haben, in dieser Liste erscheinen auch Blocks die Ihr fehlerfrei erstellt habt und in das oben genannte Verzeichnis kopiert habt.

Die normalen Rezepte zeigen wenn Ihr ein Rezept anwählt eine rotierende 3D Ansicht, so eine eigene 3D Ansicht zu erstellen ist schwierig. Für eigene Blocks reicht es aber nach dem Zusammensetzen des Rezepts im Spiel wenn Ihr davon einen Screenshoot macht der gut erkennbar den Aufbau zeigt, zusätzlich wird unter einem Blockrezept die Menge angezeigt und wenn Ihr den Pointer darauf platziert das Material falls das aus eurem Screenshoot nicht klar erkennbar ist.

Um so eine Rezeptvorschau zu erstellen braucht es ein bestimmtes Format, da die Screenshots einen sehr großen Bereich erfassen macht es Sinn mit einem Grafikprogramm einen quadratischen Ausschnitt ins Clipboard zu kopieren und ihn als neue Grafik wieder einzufügen, diese muss dann dann in das Format 512 x 512 Pixel gebracht werden und ins "dds" DXT5 konvertiert werden wie Ihr das schon von den Texturen kennt, sie wird dann in das gleiche Verzeichnis wie die "Properties.json" kopiert und muss immer RecipePreview.dds heissen.

Einen Link zum Rezept Image Beispiel findet Ihr in der englischen Beschreibung des Entwicklers.


Fertig ! damit sollte der Block erkannt werden und Ihr könnt Ihn im Spiel nutzen als einfachste Blockform, wenn Ihr alles richtig gemacht habt sollte Euer Block in der Liste der "custom blocks" zu finden sein und Ihr könnt ihn verwenden wie alle anderen Rezepte.

Weiter mit den speziellen Blocks "Normal", "Glow Map" und "Animated".


"Normal Texturen"

Texturen kann man normal maps zufügen, die sehen aus wie eine blaue Münzprägung und verleihen der Textur der Blocks eine gewisse Tiefe, das kann man auch auf selbst erstellte Blocks anwenden allerdings funktioniert das nur im Sonnenlicht, im Licht der Fackeln hat es keinen Effekt.

Einen Wiki Link zu Normal mapping findet Ihr in der englischen Beschreibung des Entwicklers.

Nachdem Ihr eine Texture mit Normal mapping erstellt habt müßt Ihr noch die "Properties.json" Datei anpassen und bei der Zeile "WithNormals" : den Wert von "false" nach "true" ändern, das könnte dann so aussehen.


"Textures": {
        "Mode": 1,
        "WithNormals" : true
}


Die Normal Textur müsst Ihr mit dem Anhang "_normal" abspeichern, das würde dann z.B. so aussehen "all_normal.dds", die Normal Textur wird auch im Format 2048 x 2048 dds erstellt aber Vorsicht sie muss im ATI2/3DC Format erzeugt werden, das findet Ihr im DDS Converter unten im Output Format Menü.


"Glow map"

Texturen kann man eine "Glow map" zufügen, der Teil der glow map texture der abgesetzt dargestellt ist leuchtet dann im Dunkeln, Links dazu wie das aussieht findet Ihr in der englischen Beschreibung des Entwicklers und auch eine Beispiel Texture.

Nachdem Ihr eine Glow map Texture erstellt habt müßt Ihr noch die "Properties.json" Datei anpassen und bei der Zeile "WithGlowMap" : den Wert von "false" nach "true" ändern, das könnte dann so aussehen.


"Textures": {
        "Mode": 1,
        "WithNormals" :true,

        "WithGlowMap" :true

}


Die Glow map Textur müsst Ihr mit dem Anhang "_glow" abspeichern, das würde dann z.B. so aussehen "all_glow.dds", die Normal Textur wird auch im Format 1024 x 1024 nicht 2048 x 2048 dds erstellt aber Vorsicht sie muss im DXT1 Format erzeugt werden, das findet Ihr im DDS Converter unten im Output Format Menü.


weiter gehts mit "Animated Blocks"

mailto:  info@roehrensockel.de

Autor: Manfred Werner