Making of „Adventskranz“
Dieses “Making of...” soll Dir zeigen, was alles nötig ist, um einem Objekt neue Funktionen zu verpassen. Ich möchte dabei ganz besonders auf den Operation Code 0x006D Change Material eingehen. Ein einfach zu verstehender Code mit dem sich aber tolle Dinge anstellen lassen.
Dieser Code bewirkt, dass eine Meshgroup ein anderes Material annimmt.
1. Einzelne Meshgroups in der GMDC
Bei meinem Adventskranz war es wichtig, dass ich jede Flamme des Kranzes, die ich ein- oder ausschalten wollte, einzeln in der GMDC vorliegen habe. Hier sind die Namen der Flammen orange hervorgehoben.
2. Zwei verschiedene Material Definitions
Beim Change Material Code ist es nötig, dass zwei (oder auch mehr) verschiedene Material Definitions vorliegen zwischen denen wir nachher auf Befehl wechseln können.
Das Material xxx_flame_off_txmt unterscheidet sich nur im stdMatAlphaMultiplier, der auf 0.000000 gesetzt wurde. Die Textur ist damit unsichtbar. Auch möglich wäre, zwischen zwei verschiedenen Texturen zu wechseln, aber das hier ist definitiv die bessere Variante, weil hier das gewünschte schon mit der Material Definition erzielt werden kann.
Jetzt haben wir schon das nötigste; verschiedene Meshgroups und zwei Material Definitions.
Vielleicht ist hier noch die Shape zu erwähnen. Welches der zwei Materialien ordne ich denn nun grundlegend einer Meshgroup zu? Die Antwort ist einfach, dieses Material, welches beim Kaufen des Objektes im Spiel erscheinen soll. Ich habe den Flammen das Material teko.christmascrown_flame_txmt zugeordnet. Alle Kerzen werden also sofort brennen, wenn ich das Objekt im Spiel platziere.
3. Text Lists anpassen
Diese Resourcen waren vielleicht für dich noch nie so richtig interessant. Doch jetzt spielen sie eine wichtige Rolle für den Operation Code. Der Code muss die Meshgroups und Material Definitions irgendwie finden – das macht er über die Text Lists. Für uns sind genau zwei von Bedeutung; die „Material Names“ und „Mesh Groups Names“. Achte bitte auch auf die Instanz der beiden Text Lists. Diese werden uns gleich wieder begegnen.
In die Text Lists: Material Names tragen wir unsere zwei Material Definitions ein.
Achte darauf, dass du die sogenannte Hash (##0x1C050000!) auch mit einfügst und das „_txmt“ weglässt. Die Hash bewirkt, dass damit ein Material innerhalb einer Package gezogen wird.
Reihenfolge spielt hier keine grosse Rolle. Wenn du zu wenig Zeilen zum Eintragen hast, klicke auf „Add String“. Möchtest du eine Zeile wieder löschen, klicke auf „Delete String“.
In die Text Lists: Mesh Group Names tragen wir unsere einzelnen Mesh Groups ein (das heisst, die Flammen).
Hier zog ich es vor, die Flammen in der Reihenfolge zu schreiben, wäre aber nicht nöitg. Dient lediglich der Übersicht.
Bei beiden Text Lists nicht vergessen, auf Commit File zu klicken und das Ganze abzuspeichern.
Nun haben wir alles, um die nötigen Behaviour Functions zu erstellen.
4. Behaviour Functions erstellen
Ich brauchte für meinen Adventskranz fünf verschiedene Behaviour Functions. Eine um alle Flammen auszulöschen und vier für die einzelnen Advente.
Du fragst dich jetzt sicher, warum da immer noch mein Name dahinter steht. Wenn du eine Behaviour Function geschrieben hast, trage ruhig deinen Namen dahinter ein. Es soll deutlich werden, wer der Verfasser ist.
Ich möchte jetzt speziell die Behaviour Function: Second advent genauer erläutern. Die anderen Bhav’s werden sich dann von alleine erklären.
Um eine neue Behaviour Function zu erstellen, klicken wir einfach rechts auf eine vorhandene, wählen „Klonen“ und geben der neuen Bhav eine Instanz, die noch keine andere Behaviour Function besitzt.
Bitte gehe beim Instanzen vergeben nach dem Schema vor, welches ich dir jetzt gleich zeigen werde. Besitzen zwei schon vorhandene Behaviour Functions die Instanzen 0x00001000 bzw. 0x00001001 wird deine unbedingt 0x00001002 heissen müssen! Klonst du eine weitere Bhav, dann wird diese die Instanz 0x00001003 bekommen usw. Die Instanzen spielen nachher eine bedeutende Rolle.
Hast du einmal eine neue Behaviour Function, dann lösche die vorhanden Zeilen mit „Delete“ und füge die nötigen neuen mit „Add“ ein.
Ich brauchte für meine Bhav vier neue Zeilen. Das entspricht der Anzahl Meshgroups, deren Material ich auf Befehl wechseln möchte.
Jetzt muss für diese Zeilen nur noch ein sogenannter OpCode definiert werden. In unserem Fall möchten wir den OpCode Change Material (0x6D). Den wählen wir wie folgt aus.
Wir werden diesen „Resource Chooser“ später noch einmal antreffen. Jetzt hat die Zeile einen OpCode und wir können damit anfangen, unsere Materialien und Meshgroups einzutragen. Jedoch wollen wir zuerst die Bhav als Ganzes betrachten und lernen, die OpCode-Beschreibung zu lesen.
Bei Filename geben wir einen gescheiten Namen ein, so dass wir diese nachher auch wieder schnell finden werden und wissen, wozu sie eigentlich da ist.
Wir haben die Zeile 0 angeklickt. Bei Instruction Settings können wir so ziemlich alles an der Zeile editieren.
Gucken wir uns zuerst das grün gefärbte an. Es ist wichtig, dass die Zeilen verknüpft sind und somit der Ablauf bestimmt ist, wie das Spiel die Bhav nachher lesen soll.
Wir möchten also von der Zeile 0 auf die Zeile 1 eine Verknüpfung erstellen. Dabei tragen wir bei True Target die Nummer der nächsten Zeile ein, dass ist 0x0001.
Bei Zeile 1 tragen wir einfach 0x0002 ein um die Zeile 2 zu erreichen usw.
Wir haben immer noch die Zeile 0 angeklickt und gucken uns jetzt das Orange in den Instruction Settings an.
Den OpCode kennen wir bereits, doch ist der viele Text unten neu. Dieser Text wird uns beim Eintragen unserer Komponenten sehr hilfreich sein und ist ein Feature der neueren SimPE Versionen. Versuchen wir, den Text zu interpretieren. Das Unwichtige lasse ich dabei bewusst weg.
0x006D Change Material
Material from: Me
STR# 0x0088: 0x0000
Mesh from: Me
STR# 0x0087: 0x0000
Jetzt ist alles nötige erklärt, dass wir nun mit der Erstellung der Bhav’s beginnen können. Ich zeige das wie gesagt an der Behaviour Function: Second advent.
Zeile 0
Zeile 1
Zeile 2
Zeile 3
Bei der letzten Zeile ist wichtig, dass bei True Target: Return True steht. Damit wird bestätigt, dass die Bhav richtig durchgeführt wird und hier zu Ende ist.
5. Pie Menu Strings anpassen
Ähnlich wie die Catalog Description und Text Lists funktioniert Pie Menu Strings. Hier können wir den Text bestimmen, der im sogenannten Kuchenmenü auftauchen wird. Wenn man will, kann man sogar in verschiedenen Sprachen diesen Text eintragen.
Auch hier, achte auf die String Nummern, sie spielen gleich eine bedeutende Rolle.
6. Pie Menu Functions erweitern
Pie Menu Functions ist die Brücke zwischen den Behaviour Functions und den Pie Menu Strings. Hier werden die zwei miteinander verknüpft.
Bei Punkt 1 fügen wir eine neue Interaktion hinzu. Bei Pie String ID (2) können wir per DropDown Menü den Text auswählen, den wir in Pie Menu Strings erstellt haben. Die ID ist lediglich die String Nummer. Danach klicken wir bei Action BHAV auf den Pfeil (3). Es öffnet sich der Resource Chooser, den wir bei den Behaviour Functions schon einmal angetroffen haben. Wir klicken auf das Tab This Package (4) und wählen unsere eigens erstellte Behaviour Function aus (5). Die Nummer dahinter ist übrigens die Instanz, die wir vorhin den verschiedenen Bhav’s gegeben haben. Diese muss hier wirklich eindeutig sein. Am Schluss auf Okay klicken (6).
Anmerkung: Guckt man bei Flags, scheint es so, dass Maxis Hunde und Katzen schon eingeplant hat. Wir dürfen uns deshalb auf ein Tier-Addon freuen.
Dass der Interaction Function Table dem Objekt zugeordnet wird, müssen wir uns die Instanz der Pie Menu Functions merken.
Lass dich nicht verunsichern, weil dort nur 0x1 und nicht 0x00000001 steht. Du kannst natürlich 0x00000001 eingeben. SimPE wird dies jedoch auf 0x1 kürzen.
Wenn wir nun alles richtig gemacht haben, sollte das Kuchenmenü im Spiel erscheinen und auch richtig funktionieren.
Wir sehen, dass ziemlich viel nötig ist, um doch recht einfache Funktionen einem Objekt hinzu zu fügen. Ich hoffe, dass ich mit diesem „Making of...“ Grundlagen gezeigt habe, auf denen sich nun experimentieren lässt.
Schöne Grüsse
Teko
Dieses “Making of...” soll Dir zeigen, was alles nötig ist, um einem Objekt neue Funktionen zu verpassen. Ich möchte dabei ganz besonders auf den Operation Code 0x006D Change Material eingehen. Ein einfach zu verstehender Code mit dem sich aber tolle Dinge anstellen lassen.

1. Einzelne Meshgroups in der GMDC
Bei meinem Adventskranz war es wichtig, dass ich jede Flamme des Kranzes, die ich ein- oder ausschalten wollte, einzeln in der GMDC vorliegen habe. Hier sind die Namen der Flammen orange hervorgehoben.
2. Zwei verschiedene Material Definitions
Beim Change Material Code ist es nötig, dass zwei (oder auch mehr) verschiedene Material Definitions vorliegen zwischen denen wir nachher auf Befehl wechseln können.
Das Material xxx_flame_off_txmt unterscheidet sich nur im stdMatAlphaMultiplier, der auf 0.000000 gesetzt wurde. Die Textur ist damit unsichtbar. Auch möglich wäre, zwischen zwei verschiedenen Texturen zu wechseln, aber das hier ist definitiv die bessere Variante, weil hier das gewünschte schon mit der Material Definition erzielt werden kann.
Jetzt haben wir schon das nötigste; verschiedene Meshgroups und zwei Material Definitions.
Vielleicht ist hier noch die Shape zu erwähnen. Welches der zwei Materialien ordne ich denn nun grundlegend einer Meshgroup zu? Die Antwort ist einfach, dieses Material, welches beim Kaufen des Objektes im Spiel erscheinen soll. Ich habe den Flammen das Material teko.christmascrown_flame_txmt zugeordnet. Alle Kerzen werden also sofort brennen, wenn ich das Objekt im Spiel platziere.
3. Text Lists anpassen
Diese Resourcen waren vielleicht für dich noch nie so richtig interessant. Doch jetzt spielen sie eine wichtige Rolle für den Operation Code. Der Code muss die Meshgroups und Material Definitions irgendwie finden – das macht er über die Text Lists. Für uns sind genau zwei von Bedeutung; die „Material Names“ und „Mesh Groups Names“. Achte bitte auch auf die Instanz der beiden Text Lists. Diese werden uns gleich wieder begegnen.
In die Text Lists: Material Names tragen wir unsere zwei Material Definitions ein.
Achte darauf, dass du die sogenannte Hash (##0x1C050000!) auch mit einfügst und das „_txmt“ weglässt. Die Hash bewirkt, dass damit ein Material innerhalb einer Package gezogen wird.
Reihenfolge spielt hier keine grosse Rolle. Wenn du zu wenig Zeilen zum Eintragen hast, klicke auf „Add String“. Möchtest du eine Zeile wieder löschen, klicke auf „Delete String“.
In die Text Lists: Mesh Group Names tragen wir unsere einzelnen Mesh Groups ein (das heisst, die Flammen).
Hier zog ich es vor, die Flammen in der Reihenfolge zu schreiben, wäre aber nicht nöitg. Dient lediglich der Übersicht.
Bei beiden Text Lists nicht vergessen, auf Commit File zu klicken und das Ganze abzuspeichern.
Nun haben wir alles, um die nötigen Behaviour Functions zu erstellen.
4. Behaviour Functions erstellen
Ich brauchte für meinen Adventskranz fünf verschiedene Behaviour Functions. Eine um alle Flammen auszulöschen und vier für die einzelnen Advente.
Du fragst dich jetzt sicher, warum da immer noch mein Name dahinter steht. Wenn du eine Behaviour Function geschrieben hast, trage ruhig deinen Namen dahinter ein. Es soll deutlich werden, wer der Verfasser ist.

Ich möchte jetzt speziell die Behaviour Function: Second advent genauer erläutern. Die anderen Bhav’s werden sich dann von alleine erklären.
Um eine neue Behaviour Function zu erstellen, klicken wir einfach rechts auf eine vorhandene, wählen „Klonen“ und geben der neuen Bhav eine Instanz, die noch keine andere Behaviour Function besitzt.
Bitte gehe beim Instanzen vergeben nach dem Schema vor, welches ich dir jetzt gleich zeigen werde. Besitzen zwei schon vorhandene Behaviour Functions die Instanzen 0x00001000 bzw. 0x00001001 wird deine unbedingt 0x00001002 heissen müssen! Klonst du eine weitere Bhav, dann wird diese die Instanz 0x00001003 bekommen usw. Die Instanzen spielen nachher eine bedeutende Rolle.
Hast du einmal eine neue Behaviour Function, dann lösche die vorhanden Zeilen mit „Delete“ und füge die nötigen neuen mit „Add“ ein.
Ich brauchte für meine Bhav vier neue Zeilen. Das entspricht der Anzahl Meshgroups, deren Material ich auf Befehl wechseln möchte.
Jetzt muss für diese Zeilen nur noch ein sogenannter OpCode definiert werden. In unserem Fall möchten wir den OpCode Change Material (0x6D). Den wählen wir wie folgt aus.
Wir werden diesen „Resource Chooser“ später noch einmal antreffen. Jetzt hat die Zeile einen OpCode und wir können damit anfangen, unsere Materialien und Meshgroups einzutragen. Jedoch wollen wir zuerst die Bhav als Ganzes betrachten und lernen, die OpCode-Beschreibung zu lesen.
Bei Filename geben wir einen gescheiten Namen ein, so dass wir diese nachher auch wieder schnell finden werden und wissen, wozu sie eigentlich da ist.
Wir haben die Zeile 0 angeklickt. Bei Instruction Settings können wir so ziemlich alles an der Zeile editieren.
Gucken wir uns zuerst das grün gefärbte an. Es ist wichtig, dass die Zeilen verknüpft sind und somit der Ablauf bestimmt ist, wie das Spiel die Bhav nachher lesen soll.
Wir möchten also von der Zeile 0 auf die Zeile 1 eine Verknüpfung erstellen. Dabei tragen wir bei True Target die Nummer der nächsten Zeile ein, dass ist 0x0001.
Bei Zeile 1 tragen wir einfach 0x0002 ein um die Zeile 2 zu erreichen usw.
Wir haben immer noch die Zeile 0 angeklickt und gucken uns jetzt das Orange in den Instruction Settings an.
Den OpCode kennen wir bereits, doch ist der viele Text unten neu. Dieser Text wird uns beim Eintragen unserer Komponenten sehr hilfreich sein und ist ein Feature der neueren SimPE Versionen. Versuchen wir, den Text zu interpretieren. Das Unwichtige lasse ich dabei bewusst weg.
0x006D Change Material
Das ist unser OpCode, mit dem der Text anfängt.
Signalisiert, dass das Material aus der eigenen Package stammt.
Das bedeutet, dass von der Text Lists(Material Names) mit der Instanz 0x0088 der String 0x0000 gezogen wird. Automatisch erscheint nun der Name der Material Definition ##0x1C050000!teko.christmascrown_flame. Wie aber wählen wir eine andere Material Definition aus? Dies tun wir bei den Operands und für das Material im ersten orange gefärbten Kästchen. Geben wir in das Kästchen 01 anstatt 00 ein, wird unten im Text gleich ##0x1C050000!teko.christmascrown_flame_off angezeigt. Die Zahl 02 wäre ungültig, weil dafür kein String angelegt ist.
Signalisiert, dass das Mesh aus der eigenen Package stammt.
Von den Text Lists wird diese mit der Instanz 0x0087 gezogen. In unserem Fall ist das die Text Lists: Mesh Group Names, in welche wir unsere Meshes eingetragen haben. Bei den Operands können wir im vierten Kästchen (das zweite orange gefärbte) zwischen den Meshes wechseln. Mit der Zahl 00 wird der Mesh first_advent gezogen. Mit der Zahl 01 der Mesh second_advent usw. Die Zahl 04 wäre ungültig, weil dafür kein String in der Text Lists mit der Instanz 0x0087 vorliegt.
Hier ein Bild zur genauen Erläuterung.
(Text Lists: Mesh Group Names)
Hier ein Bild zur genauen Erläuterung.

(Text Lists: Mesh Group Names)

Für die erste Flamme (Zeile 0), wir das reguläre Material gezogen. Wie auch für die zweite Flamme (Zeile 1).

Die erste und die zweite Flamme wird also weiterhin brennen. Da dies die Bhav für den zweiten Advent ist, müssen wir die dritte (Zeile 2) und vierte (Zeile 3) Flamme ausschalten.


Bei der letzten Zeile ist wichtig, dass bei True Target: Return True steht. Damit wird bestätigt, dass die Bhav richtig durchgeführt wird und hier zu Ende ist.
Wir haben soeben eine neue Behaviour Function geschrieben. Jetzt müssen wir die im Spiel aber irgendwie auswählen können.
5. Pie Menu Strings anpassen
Ähnlich wie die Catalog Description und Text Lists funktioniert Pie Menu Strings. Hier können wir den Text bestimmen, der im sogenannten Kuchenmenü auftauchen wird. Wenn man will, kann man sogar in verschiedenen Sprachen diesen Text eintragen.
Auch hier, achte auf die String Nummern, sie spielen gleich eine bedeutende Rolle.
6. Pie Menu Functions erweitern
Pie Menu Functions ist die Brücke zwischen den Behaviour Functions und den Pie Menu Strings. Hier werden die zwei miteinander verknüpft.
Bei Punkt 1 fügen wir eine neue Interaktion hinzu. Bei Pie String ID (2) können wir per DropDown Menü den Text auswählen, den wir in Pie Menu Strings erstellt haben. Die ID ist lediglich die String Nummer. Danach klicken wir bei Action BHAV auf den Pfeil (3). Es öffnet sich der Resource Chooser, den wir bei den Behaviour Functions schon einmal angetroffen haben. Wir klicken auf das Tab This Package (4) und wählen unsere eigens erstellte Behaviour Function aus (5). Die Nummer dahinter ist übrigens die Instanz, die wir vorhin den verschiedenen Bhav’s gegeben haben. Diese muss hier wirklich eindeutig sein. Am Schluss auf Okay klicken (6).
Anmerkung: Guckt man bei Flags, scheint es so, dass Maxis Hunde und Katzen schon eingeplant hat. Wir dürfen uns deshalb auf ein Tier-Addon freuen.

Dass der Interaction Function Table dem Objekt zugeordnet wird, müssen wir uns die Instanz der Pie Menu Functions merken.

Bei der Object Data ist es wichtig, dass wir diese Instanz bei Interaction Table ID eintragen. Sonst wird kein Kuchenmenü für unser Objekt im Spiel erscheinen.
Lass dich nicht verunsichern, weil dort nur 0x1 und nicht 0x00000001 steht. Du kannst natürlich 0x00000001 eingeben. SimPE wird dies jedoch auf 0x1 kürzen.
Wenn wir nun alles richtig gemacht haben, sollte das Kuchenmenü im Spiel erscheinen und auch richtig funktionieren.

Wir sehen, dass ziemlich viel nötig ist, um doch recht einfache Funktionen einem Objekt hinzu zu fügen. Ich hoffe, dass ich mit diesem „Making of...“ Grundlagen gezeigt habe, auf denen sich nun experimentieren lässt.

Schöne Grüsse
Teko
Zuletzt bearbeitet: