Pinned Tutorial - Anleitung - Howto: Neue Fruchtsorten ins Spiel integrieren - Raps, Hafer, Custom1 (Zuckerrübe)

    • Tutorial - Anleitung - Howto: Neue Fruchtsorten ins Spiel integrieren - Raps, Hafer, Custom1 (Zuckerrübe)

      Hallo,

      ich habe mich einmal daran versucht zu schauen, ob und wie es möglich ist, neue Fruchtsorten in Cattle and Crops zu integrieren. Es besteht dazu leider keine Anleitung oder sonst eine Dokumentation, so dass ich es einfach nach bestem Wissen und Gewissen probiert habe. Es gab auch einige Hilfestellungen im Discord und auch hier im Forum, die ich versucht habe irgendwie für mich zu nutzen.

      Editiert werden müssen mindestens folgende Dateien:
      Diese Dateien definieren die neue Frucht, was man damit machen kann (Dreschen, häckseln, schwaden und auch, welche Nährwerte die jeweiligen Produkte diese Frucht haben sollen.
      • C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Data\Base.zip\config\fruits\filltypes.xml
      • C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Data\Base.zip\config\fruits\fruittypes.xml



      Die Datei "fruittypes.xml" hat eine interne Dokumentation, die wie folgt lautet:
      Fruit typeName:
      "Wheat", // 1
      "Grass",
      "Rape",
      "Barley",
      "Maize", // 5
      // reserved for further AGM Fruits, don't use
      "Grass2", // 6
      "Rye", // 7
      "Oat", // 8

      // for modding:
      "Custom1", // 9
      "Custom2",
      "Custom3",
      "Custom4",
      "Custom5",
      "Custom6",
      "Custom7",
      "Custom8" // 16
      Das bedeutet nach meinem Verständnis, dass es die Slots 1- 8 gibt, welche CNC "intern" genutzt werden. Diese sind auch bereits vordefiniert, was dort einmal für eine Frucht entwickelt werden sollte. Neben den bekannten wie Weizen, gerste, Mais, Roggen und "Grass" (Feldgras)!? sind dort noch 3 weitere Sorten definiert. Einmal "Raps" und einmal "Hafer" und einmal "Grass2".

      Weiterhin wird dort geschrieben, dass es die Slots 9 bis 16 gibt, welches mit "Custom", also beliebigen Fruchtsorten belegt werden können, durch Modifikationen. Insgesamt also maximal 16 Fruchtsorten (Dazu zählen nicht die Untervariationen, wie "gehäckselt" oder "Schwad" oder "Heu" oder "Stroh". 5 von 16 Sorten haben wir. Zwei sind mit Raps und Hafer "vordefiniert". "Grass2" ist entweder ein Platzhalter für irgendetwas oder er ist für die "Landschaft" reserviert, also das Gras am Feldrand etc.

      Meine Idee war es nun, dass ich einmal die zwei "reservierten" Fruchtsorten Raps und Hafer implementiere als auch einmal eine Frucht des Typs "Custom1". In diesem Fall habe ich einfach die "Zuckerrübe" genommen, da ich dafür die Wachstumswerte, NPK, BBCH etc. in einem anderen Zusammenhang schon erstellt hatte. Es kann aber auch jede andere Frucht sein.

      Ich habe dort also meine neue Frucht definiert und zwar wie folgt:
      <FruitType typeName="Custom1" fruitName="custom1" modelNamePrefix="vegetation/fruits/sugarbeet/sugarbeet" >
      <FruitStageFillType stage="Seed" path="Solid,Seed,Corny,Custom1" />
      <FruitStageFillType stage="Fruit" path="Solid,Fruit,Corny,Custom1" />
      <FruitStageFillType stage="ThreshedFruit" path="Solid,ThreshedFruit,Corny,Custom1" />
      <FruitStageFillType stage="Chaff" path="Solid,Chaff,Custom1" />
      <FruitStageFillType stage="Swath" path="Solid,Swath,Custom1" />
      <!--
      <FruitStageFillType stage="Crown" path="Solid,Crown,Custom1" />
      <FruitStageFillType stage="ChaffedWholePlant" path="Solid,ChaffedWholePlant,Custom1" />
      -->
      </FruitType>

      Meines Erachtens müsste die erste Zeile und die letzte Zeile ausreichen, da dort auf die custom1.xml verwiesen wird und dort die "FruitStageFillType" nochmals definiert werden. Irgendwie "doppelt". Beides habe ich getestet uns es ging, ich habe es aktuell aber so umgesetzt, wie es die Datei auch als Beispiel vorgibt, wer weiß, welche Abhängigkeiten es gibt.

      A propos Abhängigkeiten. Ich hatte hier meine ersten Probleme, dass die Früchte nicht im Spiel im Feldmenü sichtbar waren. Es scheint etwas Konflikte zu geben, wenn ich die Fruchtsorten "Rape" und "Oat" dort eintrage. Vermutlich, weil diese Fruchtsorten bereits in den ersten Slots 1 - 8 im Gamecode definiert sind, jedenfalls musste ich es dort weg lassen, damit es klappte. Custom1 muss aber immer drin stehen und ist vermutlich auch das, was zukünftige Modifikationen nutzen werden




      Im nächsten Schritt habe ich mir aus dem folgenden Ordner die "barley.xml" Datei kopiert und eine "rape.xml", eine "oat.xml" und eine "custom1.xml" erzeugt.

      C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Data\Base.zip\config\fruits\barley.xml <--- Originaldatei
      C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Data\Base.zip\config\fruits\rape.xml
      C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Data\Base.zip\config\fruits\oat.xml
      C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Data\Base.zip\config\fruits\custom1.xml


      In diesen Dateien muss man lediglich den Kopfbereich anpassen, indem man dort den neuen Fruchtnamen vergibt, einen neuen "stringId" Eintrag erstellt und die FruitStageFillTypes definiert, die für diese Frucht gelten sollen, also "Schwad", und "threshedFruit" (gedroschen) und natürlich die Saat (seed).
      Die Dateien sind in der Regel eine Kopie der "barley.xml". Am besten öffnet Ihr Euch die Barley.xml und eine der neuen Früchte und vergleicht die Dateien, an welchen Stellen etwas geändert wurde.

      Der restliche Teil der Datei sind dann die Wachstumsparameter, welcher Bodentyp, welche Temperatur, wieviele Sonnenstunden, wieviel Ertrag, wieviele Gradsummen, wieviele Wachstumstage, ...




      Im dritten Schritt habe ich die Datei "filltypes.xml" angepasst. Dort wird definiert, was die Frucht alles "kann", d.h. welche Inhaltsstoffe hat die Saat, der Schwad, die Frucht, das Gehäckselte. Auch wird dort definiert, wie die Animation aussieht, wenn überladen wird, abgekippt, gehäckselt, gedroschen. Und es wird eine "stringId" definiert, welche dann den text angibt, den man im Spiel lesen kann. Das ist auch für die Lokalisierung notwendig, so dass es für alle verschiedenen Sprachen möglich ist. Ich habe nur Deutsch und Englisch testweise angepasst bisher.

      Auch hier empfehle ich, die original xml gegen die modifizierte zu vergleichen. Ganz einfach gesagt, habe ich in jedem Abschnitt den teil "Barley" kopiert und dann für "Rape", "Oat" und "Custom1" verwendet. Minimale Anpassungen durchgeführt, also den Namen und den Pfad zur "Animation" und eben den stringId Eintrag.





      Im vierten Schritt habe ich mir die mitgeliefetren "String-Tables" angeschaut, also die .csv Dateien, welche alle Übersetzungen des Spiels beinhalten. Diese Datei liegt hier:
      C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Import\Base\strings\game.csv

      Diese Datei öffne ich in einem Notepad++ mit UTF-8 Codierung. In den oben genannten .XML Dateien habe ich StringIDs definiert für Raps, hafer, Custom1.
      Ich suche in den game.csv den passenden String Eintrag für "Barley" und erstelle dann passend dazu eine neue Zeile für den Eintrag von z.B. Raps, wenn es nicht schon existiert:

      z.B. diese Zeile für "Raps" und für" Gerste.
      Base/strings/game,FRUT-RAPE,Raps,Rape,Colza,Colza,Colza,Rzepak,Рапс,Repce
      Base/strings/game,FRUT-BARL,Gerste,Barley,Cebada,Orzo,Orge,Jęczmień,Ячмень,Árpa

      Anschließend speichere ich die game.csv wieder ab, sollte ebenfalls im UTF-8 Format sein, sonst meckert er Zeichenverlust an.

      Diese "game.csv" Datei kopiere ich in meinen "Mods-Import" Ordner im Benutzerprofil:
      C:\Users\Nachtfalke\Documents\My Games\Cattle and Crops\Mod-Import\game.csv

      Ich starte anschließend Cattle and Crops ins Hauptmenü und öffnet mittels "SHIFT+^" die Konsole. Links unten klicken und dann "Import CSV String-Table" auswählen und die game.csv angeben. Er importiert nur die csv und generiert für jede Sprache eine neue .txt Datei. Diese Dateien findet Ihr hier:
      C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Import\Base\strings\game.de_DE.txt

      Alle .txt Dateien kopiert Ihr wieder in Euren "Mod-Import" Ordner.
      C:\Users\Nachtfalke\Documents\My Games\Cattle and Crops\Mod-Import\game.de_DE.txt

      Öffnet Erneut Cattle and Crops, öffnet die Konsole "SHIFT+^" und wählt dann "Import String Table". Daraus werden dann ".str" Dateien erzeugt, welche die C4 Engine von Cattle and Crops lesen kann. Ihr findet die Dateien nun in Eurem "Mod" Ordner:
      C:\Users\Nachtfalke\Documents\My Games\Cattle and Crops\Mods\game.de_DE.str

      Ihr erstellt also von allen .txt Dateien eine .str Datei.





      Im letzten Teil kommt nun die Anpassung der bestehenden Map .wld (albergtal.wld). Das ist leider notwendig, weil die ganzen Händler dort die neuen Fruchttypen nicht kennen. Wir müssen also nach aktueller Erkenntnis mindestens folgende Anpassungen vornehmen:
      • Genossenschaft anpassen um Saatgut anzubieten, inkl. des Preises, des Vorrats, ..
      • Hafen Getreideverkauf um die "Frucht" anzunehmen und anzubieten, inkl. des Preises, des Vorrats, ...
      • Hafen Silos (Silagehändler), damit wir den ganzen gehäckselten kram loswerden, ebenso das lose Stroh
      • Hafen Ballenhändler, damit wir die Strohballen aus Hafer und Raps dort abgeben können, inkl. Preis
      • BGA Bunker (theoretisch ja, aber dieser nimmt alles an, was "Solid,Swath" ist oder "Solid,ThreshedFruit", er unterscheidet also nicht nach einzelnem Fruchttyp, sondern nimmt einfach alles einer Art an. Dadurch keine Anpassung notwendig.
      • Hof Getreidelager ist analog dem BGA Bunker, keine Anpassung notwendig.
      • Es kann durchaus sein, wenn wir mal "Kartoffeln" haben oder wirklich "Zuckerrüben", dann haben wir statt "Chaff" ein "Crown" und dann müssen wir dies auch woanders ergänzen.
      Die albergtal.wld befindet sich hier:
      C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Data\MAP-Albergtal.zip\world\albergtal\albergtal.wld

      Ich habe die Erfahrung gemacht, dass diese Datei alleine im "Mod" Ordner dann nicht im Editor geöffnet werden kann. Ich verfahre deswegen wie folgt, dass ich die gesamte "MAP-Albergtal.zip" Datei in den "Mod" Ordner entpacke. Auch ist es unbedingt notwendig, dass die modifizierten und neuen .xml Dateien der Früchte bereits verfügbar sind, da sonst der Editor bei Anpassungen der .wld die Anpassungen nicht speichert, da er die Frucht nicht kennt.

      Also die XML Dateien im korrekten Ordner-Pfad hier ablegen:
      C:\Users\Nachtfalke\Documents\My Games\Cattle and Crops\Mods\config\fruits\fruittypes.xml
      C:\Users\Nachtfalke\Documents\My Games\Cattle and Crops\Mods\config\fruits\filltypes.xml
      C:\Users\Nachtfalke\Documents\My Games\Cattle and Crops\Mods\config\fruits\rape.xml
      C:\Users\Nachtfalke\Documents\My Games\Cattle and Crops\Mods\config\fruits\oat.xml
      C:\Users\Nachtfalke\Documents\My Games\Cattle and Crops\Mods\config\fruits\custom1.xml


      Ich starte dann Cattle and Crops, öffne mit "SHIFT+^" die Konsole und wähle dann "Open World" und wähle die "albergtal.wld" aus.

      Das sieht dann wie folgt aus:


      Wichtig ist, dass wir das Fenster links unten haben, mit der Baumstruktur, das nennt sich "Scene Graph". Sollte der nicht da sein, mal irgendwo in ein anderes Fenster Klicken, rechtsklick und versuchen, dass man dort "Scene Graph" zur Auswahl bekommt.

      Im Baummenü suchen wir "harbor" und dann "TRADER" und sehen dort 5 Kästchen, die alle an der rechten Seite in Grau "Trader" hinterlegt haben.


      Dort einen Doppelklick auf den "harbor_grain_trader", also den Getreidehändler am Hafen. Dort in den Reiter "Properties" wechseln und ein neues "Trading Item" hinzufügen, bzw. 3 neue "Trading Items" für Raps, hafer und Custom1. (Solid,ThreshedFruit,Corny,Rape oder Solid,ThreshedFruit,Corny,Custom1) Hier definiert Ihr auch den Preis für An- und Verkauf. Ihr definiert, wie groß der Lagerbestand des Händler ist, ab welchem Füllstand der Händler nachkaufen soll und wie lange es dauern soll, bis nachgekauft wurde.


      Die anderen Trader dann analog bearbeiten und eben schauen, ob dort "Swath" oder "Chaff" angenommen werden soll. Am besten mit den bereits dort bestehenden "Trading Items" vergleichen.


      Die nächste Anpassung erfolgt dann bei "trader - cooperative", also der Genossenschaft. Dort geben wir an, dass wir Saatgut kaufen wollen. Saatgut ist "Solid,Seed,Corny,Custom1" oder "Solid,Seed,Corny,Rape"




      Abschließend auf "Save world" gehen um die Änderungen an der albergtal.wld zu speichern.



      Leider bin ich nun wollkommen hilflos und bekomme diese Dateien nicht als "Mod" in eine .zip gepackt. Deswegen behelfe ich mir damit, dass ich dise Dateien in die original "Base.zip und "Map-Albergtal.zip" packe. Ich überschreibe also die Originaldateien mit meinen modifizierten Dateien.



      Bekannte Probleme / Known Issues:
      • Raps, Hafer und Zuckerrübe haben keine eigenen Modelle, d.h. er wächst optisch auf dem Feld wie "Gerste". Es müsste also jemand die passenden Modelle erzeugen, denn ich habe weder die Software dafür noch die Kenntnisse darin so etwas zu tun.
      • Die Frucht "Zuckerrübe", welche als "Custom1" definiert ist, kann nicht geerntet werden. Eigentlich wächst sie genauso wie Gerste, müsste also "ThreshedFruit" sein und mit dem Tucano dreschen gehen, klappt aber nicht. Vielleicht findet jemand den Fehler und hilft mir.
      • Raps und Hafer können gedroschen werden, aber der Schwad kann nicht aufgenommen werden, weder im Silagewagen, noch in der Ballenpresse.
      • Die Wachstumsstufen für Raps und Hafer sind eine Kopie der Gerste, müssen also angepasst werden, mache ich aber erst, wenn die Ernte klappt. Die Wachstumsstufen für "Zuckerrübe" ist angepasst, aber nicht geprüft, ob es auch wirklich so passt, Stichwort: "Balancing".
      • Die Zuckerrübe ist als "Getreide" definiert, also "ThreshedFruit" und als "Chaff" und "Swath", also gehäckselt und geschwadet. Das ist natürlich Unsinn, es müsste gerodet (Fruit) und geköpft "Crown" sein, aber das bedeutet auch, dass man extra Maschinen dafür benötigt, deren "Cutting Controler" dann auch "Crown" kann. Lässt sich aber lösen.
      • Preise von der Früchte sind willkürlich gewählt, meistens sehr hoch, damit ich erkennen konnte, dass es "funktioniert" hat.




      Anbei die XML Dateien um die neuen Früchte zu integrieren. Sie reichen alleine nicht aus, helfen aber bei der Veranschaulichung. Ebenso die Strings zur Übersetzung:
      New_Fruits_XMLs.zip


      Den "CNC Gameplay Mod" findet Ihr hier mit angepassten Gebäuden und Händlern, die diese Früchte anbieten.
      CNC-Gameplay-Mod




      Grüße
      Nachtfalke
    • Es gibt Fortschritte. Im Discord konnte man mir gute Tips bzw. die Lösung für mein Problem nennen. In den Maschinen und Schneidwerken muss der "Cutting Controller" bzw. dort wo er verwendet wird noch angepasst werden. Um genau zu sein, muss man dort angeben, welche Früchte denn geschnitten werden dürfen. Ein Vario Schneidwerk kann z.B. Gerste, Raps, Weizen dreschen, aber kein Mais. In den Standardeinstellungen hatte das Vario bereits "Hafer" und "Raps" definiert, weswegen es schneiden ging, aber kein "Custom1".

      Schwad ging gar nicht aufnehmen, weil die Ballenpresse weder Raps, Hafer noch Custom1 im Cutting Controller definiert hatte.

      Ich werde versuchen, in den nächsten Tagen (oder länger) nochmal
      • Die Anleitung zu erweitern
      • Die XML Dateien und String Tables (Sprachen) zu erweitern
      • Einige Maschinen einmal anzupassen und bereitstellen, so dass man es einmal testen kann
      • Perspektivisch auch die NPK Werte, den Ertrag, die Preise, die Wachstumsstufen für Hafer und Raps anzupassen. Zuckerrüben (Custom1) haben bereits eine mehr oder weniger gut passende XML, aber noch keine Preise.


      Was ich jetzt definitiv noch suche ist:
      • 3D Modelle für Hafer, Raps und Zuckerrüben
      • Maschinen für diese Früchte, vor allem Zuckerrüben
    • Hallo,

      hier nun die Anleitung, wie man die bestehenden Maschinen anpassen muss, dass diese auch Raps, Hafer und Custom1 Früchte dreschen können.

      Ich zeige dies am Beispiel eines
      • Claas Vario Schneidwerks für den Tucano
      • Der Claas Quadrant Ballenpresse


      Zuerst einmal kopiert Ihr Euch diesen ordner wieder in Euren "Mod" Ordner:
      C:\Program Files (x86)\Steam\steamapps\common\Cattle and Crops\Assets\Data\Base.zip\machines\

      Anschließend startet Ihr CNC und öffnet im Menü die Konsole und klickt auf "Open World". Ihr wählt dort dann das Vario Schneidwerk aus, 930.wld



      Im Editor geht Ihr oben auf "Editor", dann links im Menü runter Scrollen und "Controller" anhaken, dann "Cutting" auswählen und unten "Find Next" klicken. Es wird dann im "Scene Graph" das "Teil" angezeigt, was diesen Cutting Controller nutzt. Es können, je nach Maschine, mehrere Cutting Controller eingebaut sein, dann eben alle entsprechend anpassen:


      Ihr führt einen Doppelklick aus und wechselt in den Reiter "Controller". Dort seht Ihr, dass der Cutting Controller vorausgewählt ist, Ihr scrollt ganz nach unten und setzt die Haken entsprechend. Das anhaken, was Eurer Vario Schneidwerk "ernten" können soll.



      Bei der Ballenpresse müsst Ihr das Gleiche durchführen wie oben. Auch dort gibt es einen "Cutting Controller" und Ihr definiert jetzt alle die Früchte deren Schwad Ihr einsammeln wollt.




      Diesen "Cutting Controller" haben sehr viele Maschinen, hier eine möglicherweise unvollständige Liste:
      • Heuwender
      • Schwader
      • Ballenpresse
      • Silagewagen
      • Mähwerke
      • Maisgebiss
      • Direct Disc Schneidwerk
      • Vario




      ######## EDIT 2021-10-29 22:20 ############

      Bisher gibt es im Spiel keinen Fruchttype der "Solid,Crown", also das geköpfte einer Rübe oder Kartoffel, verwendet, da es weder die Frucht noch die Maschinen dafür gibt. Deswegen muss man es anpassen:

      In der Frucht "Custom1", was einmal eine Zuckerrübe werden kann, die man (a) säen (Solid,Seed) können muss, (b) die Frucht unter der Erde ernten (Solid,Fruit) und (c) das Grünzeug von der Pflanze abschneiden, also köpfen muss (Solid,Crown).

      In der XML definieren wir das wie folgt:

      XML Source Code

      1. <FruitType typeName="Custom1" fruitName="custom1" modelNamePrefix="vegetation/fruits/barley/barley" stringId="FRUT-SUGA-SUMM"><!-- path in folder -->
      2. <FruitStageFillType stage="Seed" path="Solid,Seed,Custom1" />
      3. <FruitStageFillType stage="Fruit" path="Solid,Fruit,Custom1" />
      4. <FruitStageFillType stage="Crown" path="Solid,Crown,Custom1" />
      Um das ernten zu können, muss erst einmal der "Tank" des Erntefahrzeuges, auch der zukünftigen Anhänger, diesen Fruchttype kennen.
      Dazu müssen wir, wie hier beispielhaft, nicht realistisch, am Tucano den "TankController" anpassen:



      Wir müssen weiterhin dem "Erntewerkzeug", also in diesem Fall dem Vario sagen, wenn es die Frucht geerntet hat, welcher Typ es ist. Das muss zum Tank passen. Bei getreide ist es "ThreshedFruit", bei der Zuckerrübe oder Kartoffel wäre es die Frucht im Boden (Fruit) oder eben das abgehackte Grünzeug (Crown). Das ist im Screenshot der "Output Filltype". Das gibt man im "FruitCollector" an.







      Grüße
    • Es ist auch erst einmal nur eine Anleitung, damit die Modder, die damit etwas anfangen können, hoffentlich schneller wissen was zu tun ist, wenn nicht sowieso schon bekannt.

      Abgesehen davon sind aktuell auch noch keine sinnvollen Wachstumsstufen bei Hafer, Raps und Zuckerrüben hinterlegt und vor allem keine Grafiken, es sieht also noch aus wie Gerste.

      Du verpasst also noch nichts ;)