[TUT] Pflug Mod einbauen

  • Hallo,
    heute ein neues Tutorial von mir. Es geht in diesem Tutorial um den Einbau des Pflug Mod.

    Dieses Tutorial darf ohne meine Genehmigung nicht weiter verbreitet werden, weder im Original noch in irgendeiner abgeänderten Form.


    Pflug Mod einbauen


    In diesem Beitrag versuche ich die Vorgehensweise zu erklären, wie man den Pflug Mod einbaut. Dieses Tutorial basiert dabei auf der auf MH erhältlichen Verion 1.0 Beta, eine andere Version habe ich nicht gefunden.
    Als Hilfe dienten mir dabei sowohl die englische Original Anleitung wie auch eine deutsche Anleitung von MH.

    Ich empfehle an dieser Stelle dringend, von dem Mod ein Backup zu machen, man weiß nie ob etwas schief geht. ;)

    Für alle Leser eine kurze Info, was der Pflug Mod überhaupt ist / macht.

    • simulierte Furche durch das Einsinken der Räder an Stellen wo durch das Pflügen eine Furche sein sollte.
    • simuliertes unebenes Gelände auf gepflügten Bereichen
    • Erhöhung der Motordrehzahl beim pflügen
    • zusätzliches Abgaspartikelsystem, welches beim pflügen angezeigt wird.

    Inhaltsverzeichnis

    1.1 Was wird benötigt?

    1.2 Dateien kopieren

    1.3 Bearbeiten der Dateien
    1.3.1 Bearbeiten der moddesc.xml
    1.3.2 Bearbeiten der .i3d
    1.3.3 Bearbeiten der fahrzeug.xml


    Den fertigen Hürlimann aus diesem Tutorial findet ihr hier:
    Hürlimann XL 130 Version 2.0


    Patrick

  • 1.1 Was wird benötigt?

    Um den Pflugmod einbauen zu können, benötigt man:

  • 1.2 Dateien kopieren

    Es gibt eigentlich nur zwei Dateien die kopiert werden müssen:

    • components.i3d
    • PloughingSpec.lua

    Die PloughingSpec.lua ist im Mod selbst nur in den beiden Beispielen enthalten. Man muss also eines der Beispiele entpacken. Ich habe die "DeutzAgrotronX720_PloughingSpec.zip" entpackt.

    Danach habe ich die components.3d direkt in das Verzeichnis des Traktors kopiert.
    Die PloughingSpec.lua wurde in ein Unterverzeichnis "scripts" des Traktors kopiert. Anbei ein Screenshot zur Veranschaulichung, die Pfeile zeigen die Kopierrichtung, im Titel habe ich jeweils auch den Pfad markiert. Der vordere Teil des Pfades ist natürlich bei jedem User anders.


    Das war es schon, weiter geht es mit der Bearbeitung der Dateien.

  • 1.3 Bearbeiten der Dateien


    Nun kommt der wohl langwierigste Teil. Je nach Größe und Komplexität des Modells kann die folgende Arbeit einiges an Zeit
    in Anspruch nehmen, wobei die Änderungen an der moddesc.xml. noch die kleinste Arbeit ist.
    Bearbeitet werden die moddesc.xml, die .i3d und die fahrzeug.xml. Bei meinem Beispiel sind dies:
    - moddesc.xml
    - huerlimannXL130.xml
    - huerlimannXL130.i3d


    1.3.1 Bearbeiten der moddesc.xml


    Zunächst also die moddesc.xml. Hier muss die neue Specialization "PloughingSpec" eingetragen werden.
    Dazu sind folgende Änderungen nötig.
    Im Abschnitt: <specializations> muss vor dem Eintrag </specializations> folgendes eingetragen werden:
    <specialization name="PloughingSpec" className="PloughingSpec" filename="scripts/PloughingSpec.lua"/> Wichtig: Pfad beachten. Bei mir liegt die .lua im Unterverzeichnis scripts.

    Im darauf folgenden Abschnitt <vehicleTypes> muss vor dem Eintrag </type></vehicleTypes> folgendes eingetragen werden:
    <specialization name="PloughingSpec" />

    Im englischen Tutorial steht ein wichtiger Hinweis, den ich auch umgesetzt habe. Die Specialization PloughingSpec sollte an oberster Stelle stehen. Ansonsten kann es zu Problemen kommen, wenn das Fahrzeug Elemente benutzt, die auf Hydraulik Scripten basieren, wie zum Beispiel Zylinder. Da ich nicht sicher bin ob das in beiden Abschnitten nötig ist, habe ich es halt mal in beiden gemacht.

    Die fertigen Änderungen in der moddesc.xml schauen nun in meinem Beispiel so aus:


    Wichtig: Der Eintrag bei type name= - im Beispiel ist das XL130 - muss identisch sein mit dem Eintrag in der fahrzeug.xml unter vehicle type.
    Diese Bezeichnung muss bei einem Standardfahrzeug / Gerät geändert werden. Bei einem Ladewagen steht da zum Beispiel "forageWagon".


    Das war es schon in der moddesc.xml. Weiter geht es mit der i3d.

  • 1.3.2 Bearbeiten der .i3d

    Dies ist beim Pflug Mod vermutlich die aufwändigste Arbeit. Zuerst öffne ich den Traktor im GE. Ist der Traktor im GE geladen, ist zunächst nur die
    Hauptkomponente ausgewählt und zu sehen. Alle anderen Komponenten sind innerhalb dieser Hauptgruppe.
    Dies ist wichtig, die nachfolgend zu importierende components.i3d muss unterhalb dieser Hauptkomponente angeordnet werden.

    Ein Screenshot vom importierten Traktor:

    Nun importiere ich die components i3d, die sich ja bekanntlich im Hauptverzeichnis des Traktors befindet, anschliessend befinden sich die 4 Kompontenten unterhalb der Hauptkomponente.

    Danach beginnt das kopieren und einfügen der Räder. Zunächst wird das erste Rad in der Hauptgruppe des Traktors komplett ausgewählt. Im Beispiel des Hürlimann ist dies die Gruppe "fenderRightFront".
    Diese wird mit "Edit / Copy" kopiert. Danach die neue Gruppe "Wheel_front_right" auswählen und mit "Edit / Paste" das zuvor kopierte Rad einfügen. Dabei die Werte des eingefügten Rades
    für Translate X, Y und Z auf 0 setzen. Hier die zugehörigen Screenshots zur Verdeutlichung:

    Hat das Rad eine zusätzliche Kollision, muss diese ebenfalls in die neue Gruppe kopiert werden. Anschließend ist beim "alten" Rad in der Hauptgruppe die Kollision zu entfernen. Dazu beim "alten" Rad im Attributes Fenster den Haken bei "Rigid body" entfernen. Ein löschen der Kollision ist NICHT zu empfehlen, da ansonsten die Indexe komplett neu geordnet werden. Andere Komponenten, welche in der Fahrzeug.xml eingetragen sind, funktionieren dann nicht mehr und erzeugen Index Fehler in der Log.


    Eine Anmerkung zur "neuen" Kollision:
    Es ist ein wenig komplizierter zu erklären. Schaut Euch mal den Beispiel Deutz aus dem Pflug Mod Pack an. Oder den Hürlimann den ich mit diesem TUT umgebaut habe.
    Die neu angelegten Collis bekommen nicht die gleichen Koordinaten wie die originalen.


    Angenommen das originale vordere Linke Rad (ich nehme jetzt als Beispiel den Hürlimann) fenderLeftFront hat die Translate Werte:


    X 0.8314
    Y 0.70252
    Z 1.40127


    Die zugehörige originale Colli wheelLeftFront_col:


    X 0.63446
    Y 1.01923
    Z 1.40155


    Jetzt muss man den X Wert des Rades 0.8314 MINUS den X Wert der Colli 0.63446 rechnen = 0.19694. Das ist der X-Wert für die neue Colli Vorne Links. Beim Hürlimann habe ich das noch gerundet (0.2).
    Das gleiche für Y und Z.


    Z ist allerdings beim Hürlimann komischerweise 0, keine Ahnung warum, bei einem anderen Schlepper auch die Differenz der beiden Werte.
    Dafür ist bei einem anderen Schlepper Y = 0, beim Hürlimann dagegen die Differenz.
    Da hatten die berechneten Werte nicht gestimmt und ich musste durch experimentieren den richtigen Wert finden. Dabei fange ich immer mit Null an und das hat gleich gepasst.


    Aufpassen wenn man negative Werte hat. Dann muss man beispielsweise -0.8314 PLUS 0,63446 rechnen (obwohl es -0.63446 wäre) = -0,19694 und dann das Minus weglassen. Klingt kompliziert, nach dem zweiten oder dritten Traktor geht es aber recht einfach.


    Nun muss die neue Gruppe "Wheel_right_front" an exakt der gleichen Stelle positioniert werden, an der das alte Rad ist. Dazu notiere ich mir einfach die Werte des alten Rades und übernehme diese dann für die neue Gruppe.
    Zur Verdeutlichung wieder zwei Screenshots.


    Nun muss das alte Rad "unsichtbar" gemacht werden. Dazu einfach das alte Rad selektieren und den Haken bei "Visibility" entfernen. Auch hier gilt: Das Ras sollte unsichtbar gemacht werden. Löschen wäre möglich ist aber NICHT zu empfehlen, ebenfalls wegen der neuen Zuordnung der Indexe.
    Ich liebe Screenshots, schon erwähnt?

    Dies war das erste Rad. Das vorangegangene Prozedere wird nun für die anderen Räder wiederholt. Dabei kann die Reihenfolge der Räder je nach Traktor variieren, also nicht wundern wenn es mit meinem Beispiel nicht übereinstimmt.

    Ein letzter Screenshot. Es sind nun alle Räder kopiert, alle alten Räder unsichtbar und die Kollisionen wurden auch kopiert / angepasst.

    So, das war es im Giants Editor. Nachher benötigen wir diesen nochmals um die Indexe der neuen Komponenten abzulesen.

    Patrick

  • 1.3.3 Bearbeiten der fahrzeug.xml

    Kommen wir zur fahrzeug.xml. Im Falle meines Hürlimann XL 130 heißt diese konkret huerlimannXL130.xml.
    Zunächst ist es wichtig, dass der Vehicle Type mit dem Eintrag in der moddesc.xml übereinstimmt. Dieser steht in einer fahrzeug.xml in Zeile 2:

    XML
    <?xml version="1.0" encoding="utf-8" standalone="no" ?>
    <vehicle type="XL130">

    Zuerst muss der Abschnitt wheels angepasst werden. Dabei sind die Indexe zu ersetzen.
    So schaut es vor der Änderung aus:

    Code
    <wheels autoRotateBackSpeed="2">
            <wheel rotSpeed="70" rotMax="30" rotMin="-30" driveMode="2" repr="0>0" driveNode="0>0|0" radius="0.72" deltaY="0.20" suspTravel="0.23" spring="40" damper="50" mass="0.15" longitudalStiffness="0.9" lateralStiffness="2" />
            <wheel rotSpeed="70" rotMax="30" rotMin="-30" driveMode="2" repr="0>1" driveNode="0>1|0" radius="0.72" deltaY="0.20" suspTravel="0.23" spring="40" damper="50" mass="0.15" longitudalStiffness="0.9" lateralStiffness="2" />
            <wheel rotSpeed="0" driveMode="1" repr="0>2" radius="0.992" deltaY="0.1" suspTravel="0.14" spring="80" damper="50" mass="0.26" longitudalStiffness="0.9" lateralStiffness="2" />
            <wheel rotSpeed="0" driveMode="1" repr="0>3" radius="0.992" deltaY="0.1" suspTravel="0.14" spring="80" damper="50" mass="0.26" longitudalStiffness="0.9" lateralStiffness="2" />
        </wheels>

    Um anschließend zu wissen, welches Rad zu welchem Eintrag gehört, arbeite ich mit Kommentaren.
    Es müssen diese Einträge angepasst werden:

    Code
    repr="0>0" driveNode="0>0|0"

    repr="0>0" ist der Index des "alten" rechten vorderen Rades. Dieser muss durch den Index des neuen rechten vorderen Rades ersetzt werden. Gleiches gilt für den Eintrag "0>0" bei driveNode.

    Beispiel Alt:

    Code
    repr="0>0" driveNode="0>0|0"

    Beispiel Neu:

    Code
    repr="1>1" driveNode="1>1|0"

    Fertig schaut dies dann so aus:

    Code
    <wheels autoRotateBackSpeed="2">
    <!-- Wheel_front_right (wheelIndex = 1) -->
            <wheel rotSpeed="70" rotMax="30" rotMin="-30" driveMode="2" repr="1>1" driveNode="1>1|0" radius="0.72" deltaY="0.20" suspTravel="0.23" spring="500" damper="500" mass="0.15" longitudalStiffness="0.9" lateralStiffness="2" />
    <!-- Wheel_front_left (wheelIndex = 2) -->
            <wheel rotSpeed="70" rotMax="30" rotMin="-30" driveMode="2" repr="2>1" driveNode="2>1|0" radius="0.72" deltaY="0.20" suspTravel="0.23" spring="500" damper="500" mass="0.15" longitudalStiffness="0.9" lateralStiffness="2" />
    <!-- Wheel_back_right (wheelIndex =3) -->
            <wheel rotSpeed="0" driveMode="1" repr="3>1" radius="0.992" deltaY="0.1" suspTravel="0.14" spring="170" damper="120" mass="0.26" longitudalStiffness="0.9" lateralStiffness="2" />
    <!-- Wheel_back_left (wheelIndex = 4)-->
            <wheel rotSpeed="0" driveMode="1" repr="4>1" radius="0.992" deltaY="0.1" suspTravel="0.14" spring="170" damper="120" mass="0.26" longitudalStiffness="0.9" lateralStiffness="2" />
        </wheels>


    Nachtrag am 05.12.2013 Problembehebung


    Ich weiss nicht ob auch andere dieses Problem haben / hatten.
    Nachdem ich den Pflugmod eingebaut hatte habe ich den Hürlimann zwar getestet. Aber ich bin immer direkt eingestiegen, ohne einmal rund herum zu laufen. Und als ich ihn mir mal angeschaut habe, ohne vorher einzusteigen fiel mir auf, dass die Vorderräder im Boden eingesunken waren. Nach dem einsteigen waren sie zwar wieder normal, dafür aber die Achse außerhalb der Felgenmitte.
    Nach etlichen Stunden suchen und Fragen bei anderen Usern habe ich folgende Lösung gefunden.

    Es müssen die Werte für "spring" (Federweg) und "damper" (legt fest wie hoch ein Fahrzeug springt, wenn man über eine Kante fährt) angepasst werden.
    Dank Cornel B. habe ich die fertigen Werte nicht durch langes ausprobieren herausfinden müssen. Die Änderungen gegenüber dem Original (Code bei "So schaut es vor der Änderung aus") habe ich in der bearbeiteten Sektion (Code bei Fertig schaut dies dann so aus) eingetragen. Diese Werte gelten für den Hürlimann.

    Ich habe auch den verlinkten Download im DL Bereich im Forum ersetzt.


    Nachtrag Ende


    Ein Screenshot, anhand dessen ich zeige, wo ihr den richtigen Index für den "repr" Eintrag ablesen könnt:


    Danach geht es weiter in den Abschnitt "components". Wenn das Fahrzeug nur eine Hauptkomponente hat (siehe "Screenshot vom importierten Traktor"), steht hier nur ein Eintrag:

    Code
    <components count="1">
            <component1 centerOfMass="0 0.01 0.1" solverIterationCount="10" />
    </components>

    Das Fahrzeug hatte bisher also nur eine Hauptkomponente. Nun haben wir durch den Import der components.i3d 4 weitere Komponenten hinzugefügt.
    Somit erhöht sich die Anzahl der Komponenten auf 5, wir ändern also die entsprechende Zeile:

    Finde:

    Code
    <components count="1">

    Ersetze mit:

    Code
    <components count="5">

    Danach müssen die vier neuen Komponenten eingetragen werden, diese folgen mit aufsteigender Nummerierung der "component1". Wir fügen also folgende Zeilen unter "component1" ein.

    Komplett schaut der Abschnitt "components" dann so aus:


    Wichtig, hier lauert die erste Falle. Die Indexe von "componentJoint":

    Code
    <joint component1="0" component2="1" index="1>0" rotLimit="0 0 0" transLimit="0 0 0" breakable="false"/>

    Wenn ihr nur eine Hauptgruppe hattet und nun mit den importierten Komponenten weitere 4 Gruppen, passen die Indexe. Habt ihr allerdings weitere Hauptkomponenten, ändern sich die Indexe für diese componentJoint Einträge. Im folgenden Screenshot zeige ich Euch wo die Indexe abgelesen werden:

    Auch die Nummern für "component2"="1" usw. können abweichen wenn weitere Komponenten verbaut sind. Also kontrollieren.


    Nun muss in der fahrzeug.xml im Anschluss an den components Abschnitt folgendes eingetragen werden:

    Code
    <!-- main ploughing mod code -->
    	<frontRightWheel wheelIndex="1" componentJointIndex="1" furrowDepth="0.20" fallSpeed="0.25" tireWidth="0.3" />
    	<frontLeftWheel wheelIndex="2" componentJointIndex="2" furrowDepth="0.20" fallSpeed="0.25" tireWidth="0.3" />
    	<backRightWheel wheelIndex="3" componentJointIndex="3" furrowDepth="0.20" fallSpeed="0.25" tireWidth="0.35" />
    	<backLeftWheel wheelIndex="4" componentJointIndex="4" furrowDepth="0.20" fallSpeed="0.25" tireWidth="0.35" />
    <!-- end main ploughing mod code -->

    Die Nummerierung bei wheelIndex="x" entspricht der Nummerierung im Abschnitt wheels (siehe weiter oben).
    Der Wert furrowDepth="xxx" bestimmt, wie tief der Traktor einsinkt. Das ist sicher ein wenig Tüftelei bis das einigermaßen hinhaut.


    Als optionale Specialization können nun noch folgende Einträge in der fahrzeug.xml gemacht werden, direkt im Anschluss an den "main ploughing mod code":

    Code
    <!-- optional ploughing mod code -->
        <workExhaustParticleSystems count="1">
            <workExhaustParticleSystem1 node="25" file="$data/vehicles/particleSystems/exhaustParticleSystemBig.i3d" />
        </workExhaustParticleSystems>
    
    	<increaseRpmDuringPloughing value="true" />
    <!-- end optional ploughing mod code -->

    Der erste Teil fügt ein Abgas Partikelsystem ein, das während des Pflügens angezeigt wird. Dazu wird auf ein Standard Partikelsystem im Installationsordner zugegriffen.

    Wichtig: Hier muss der Wert "node="25" angepasst werden.
    Dieser ist vom Beispiel Deutz aus dem Pflug Mod Archiv. Den richtigen, benötigten Wert findet man in der fahrzeug.xml in folgendem Abschnitt:

    Code
    <exhaustParticleSystems count="1">
            <exhaustParticleSystem1 node="0>26" file="$data/vehicles/particleSystems/exhaustParticleSystem.i3d" />
    </exhaustParticleSystems>


    Der zweite Teil sorgt dafür, dass während des pflügens die Drehzahl des Motors angehoben wird.

    Wir haben es fast geschafft.

    Da die Pflüge im Spiel darauf ausgelegt sind, dass sie auf ebenem Gelände genutzt werden, tritt nach Einbau des Pflug Mod ein kleines optisches Problem auf.
    Da sich der Traktor nun in eine Furche neigt, ragt der Pflug hinten über den Boden hinaus. Je größer / länger der Pflug ist, um so mehr fällt dies auf.
    Abhilfe schafft da eine Anpassung des Wertes "maxRotLimit" im Abschnitt "attacherJoints" in der fahrzeug.xml. Somit erlauben wir dem Pflug eine größere Drehung um de X-Achse (in Anhängerichtung).

    Das Original vor der Bearbeitung:

    Code
    <attacherJoint index="0>11|0|0" rotationNode="0>11" minRot="42 0 0" minRot2="-34 0 0" maxRot="10 0 0" rotationNode2="0>11|0" maxRot2="-10 0 0" maxTransLimit="0 0.5 0" maxRotLimit="0 0 20" moveTime="2.5" ptoOutputNode="0>20" ptoFilename="$data/vehicles/steerable/powerTakeoff.i3d">
                <bottomArm rotationNode="0>12" translationNode="0>12|0" referenceNode="0>12|0|0" zScale="-1" />
                <topArm baseNode="0>13" filename="$data/vehicles/steerable/upperLinkMedium.i3d" zScale="-1" />
            </attacherJoint>
            <attacherJoint index="0>16|0|0" rotationNode="0>16" minRot="-30 0 0" minRot2="22 0 0" maxRot="2 0 0" rotationNode2="16|0" maxRot2="-2 0 0" maxTransLimit="0 0.4 0" maxRotLimit="0 0 20" moveTime="2.5" ptoOutputNode="0>22" ptoFilename="$data/vehicles/steerable/powerTakeoff.i3d">
                <bottomArm rotationNode="0>17" translationNode="17|0" referenceNode="17|0|0" zScale="1" />
                <topArm baseNode="0>18" filename="$data/vehicles/steerable/upperLinkSmall.i3d" zScale="1" />
            </attacherJoint>

    Wir sehen bei "maxRotLimit" die Werte "0 0 20". Die englische Anleitung ändert dies auf die Werte "8 0 20", ich habe mir die beiden Beispiele und zwei weitere Traktoren (ein Xerion 3800 und der Fendt 724 von TIF) angeschaut, diese nutzen ebenfalls diese Werte.

    Wir ändern also diese beiden Einträge.
    Alt:

    Code
    maxRotLimit="0 0 20"

    Neu:

    Code
    maxRotLimit="8 0 20"


    Das war nun alles an Änderungen. Bevor der Mod nun wieder gepackt wird, kann die components.i3d wieder aus dem Ordner gelöscht werden, die wird nicht mehr benötigt.


    Patrick