Making of "Adventskranz" - Ein kleines Hackingtutorial

Murano

Member
Registriert
September 2003
Ort
Schweiz
Geschlecht
m

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.



(Zum Vergrössern klicken)



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.


(Zum Vergrössern klicken)

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.


(Zum Vergrössern klicken)

In die Text Lists: Material Names tragen wir unsere zwei Material Definitions ein.


(Zum Vergrössern klicken)

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).


(Zum Vergrössern klicken)

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.


(Zum Vergrössern klicken)

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.


(Zum Vergrössern klicken)

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.


(Zum Vergrössern klicken)​

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.


(Zum Vergrössern klicken)

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.


(Zum Vergrössern klicken)​

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.

Material from: Me
Signalisiert, dass das Material aus der eigenen Package stammt.

STR# 0x0088: 0x0000
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.

Mesh from: Me
Signalisiert, dass das Mesh aus der eigenen Package stammt.

STR# 0x0087: 0x0000
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.
picture109vi.jpg

(Text Lists: Mesh Group Names)



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.


picture111my.jpg
Zeile 0

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

picture125gv.jpg
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.

picture137vm.jpg
Zeile 2

picture146qn.jpg
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.



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.


(Zum Vergrössern klicken)

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.


(Zum Vergrössern klicken)

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.

picture170gv.jpg



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.


(Zum Vergrössern klicken)




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:
Ich streu das mal hier rein :) Schonmal vorab nach dem 1. Posting danke, ich werd das jetzt im Tipps-Thread oben verlinken.

Solander
 
Oh mein Gott wie kompliziert...aber zum Glück gibts ja Leute wie dich, die das super draufhaben =) Danke
 
Nicht zu danken, habe ich gerne gemacht. :)

Wenn ihr etwas nicht versteht oder unklar ist, fragt! Ich versuche dann so gut wie möglich zu helfen.


Schöne Grüsse und ein gutes Nächtle


Teko
 

Zur Zeit aktive Besucher

Zurück
Oben Unten