VorwortHallo, CNDG-Gemeinde. Nachdem hier schon des öfteren die Frage aufkam wie die Ersteller des InExantros-Packs es geschafft haben die Ausrüstung zu zeichnen und die Antworten leider immer sehr unbefriedigend waren, habe ich mich entschlossen jetzt mal ein komplett Tutorial zu schreiben. Ich werde das ganze jetzt im Bezug auf Hazard-Ausrüstung beschreiben, jedoch kann jeder halbwegs fähige Scripter das ganze auf jeden Clonk übertragen.
Benötigt:
Blender, den
Blenderclonk und das
Hazard-Pack.
Vorwissen:
Blenderclonk, etwas Wissen über Materials,
Attach,
Effekte.
Schwierigkeit:
Das Blendertutorial ist wirklich nur eine kurze Erklärung, den Rest sollte man mit Grundwissen abdecken. Allgemein setzte ich hier ein gewisses Wissen und eine gewisse Kenntnis voraus und erkläre nicht alles bis ins Detail. Dafür sind ja auch die Tuts verlinkt. Die Bilder sind auf Dropbox gehostet, wenn sie wer nicht sehen kann solls sagen, dann such ich nen anderen Host.
Blender Quick&DirtyWir wollen heute einen Helm für den Hazardclonk erstellen und diesen zeichnen lassen. Als erstes brauchen wir eine Overlaygrafik die wir mit Blender anfertigen. Wir öffnen Blender, laden den Hazardclonk und beginnen alle Materials transparent zu machen. Wir drücken auf F5. Unter "Link to Object" (Pfeil) können wir das ganze durchschalten. Wir stellen bei allen Einträgen, außer "Helmet" den Alpharegler auf Null und schalten ZTransparency ein (Pfeile).
Nachdem dies erledigt ist wählen wir "Helmet" an. Hier können wir jetzt eine tolle Textur draufklatschen oder einfach nur die Farbe ändern, ganz abhängig wie gut man in Blender ist. Sind wir fertig rendern wir das ganze Full. Nun sollte etwa sowas rauskommen. Nicht schön, aber das wirds tun. Falls die Füße auch drauf sind, entfernt ihre Vertices, dann sind sie weg.
Das OverlayobjektOkay, dann haben wir ja mal die Graphics, dann wirds Zeit fürs Scripten.
Machen wir uns zuerst ans Hilfsobjekt. Dazu erstellen wir, wie gehabt ein neues Objekt, wichtig ist das das Objekt einen Vertex bei 0/0 hat, nicht einsammelbar ist, und 20 Pixel hoch sowie 16 breit ist. Eben die Maße eines Hazardclonks. Desc und Names.txt ist uns auch erstmal egal. Die Standardgrafik lassen wir drin, das vermeidet Errors. Nun ziehen wir unsere Grafik in dieses Objekt hinen und nennen sie "GraphicsHelmet". Als nächstes kommt die Actmap. Wir kopieren die des Hazardclonks rüber und modifizieren sie folgendermaßen: Wir ersetzten alle Prozeduren durch die Prozedur "ATTACH". Dies ist notwendig da das Objekt nachher an den Clonk attached wird. Wir setzen Delay auf Null da wir mit SetPhase arbeiten wollen und entfernen zu Errorvermeidung alle Start und EndCalls. Beispiel an der Action "Walk".
- Code:
-
[Action]
Name=Walk
Procedure=ATTACH
Directions=2
FlipDir=1
Length=16
Delay=0
Facet=0,0,16,20,0,0
NextAction=Walk
Das wars damit auch schon. Kommen wir nun zum Script. Dies wird natürlich in #strict 2 geschrieben.
Wir haben eine local, die den Clonk, an den das Overlayobjekt geklebt wird, speichert. Die Funktion Attach wird später vom Helmobjekt aufgerufen, pObj ist der Clonk und szGraphics ist der Name der Grafik die gesetzt wird, in unserem Falle "Helmet". Der Effekt sorgt dafür das immer die richtige Action mit der richtigen Phase vorhanden ist. Am Anfang muss erst eine Action gesetzt werden, denn bei Idle kann nicht attached werden. SetActionData sagt dem Objekt wo es sich attachen soll, mit SetGraphics wird die Helmgrafik gesetzt. Dann wird noch der Effekt geaddet und der Clonk gespeichert. Der Effekt sorgt lediglich dafür das das Objekt immer die gleiche Action und die gleiche Phase wie der Clonk hat und in die richtige Richtung gedreht ist.
- Code:
-
/*-- Overlay --*/
#strict 2
local pClonk;
func Attach(object pObj, string szGraphics)
{
SetAction(GetAction(pObj), pObj);
SetActionData(0,this());
SetGraphics(szGraphics);
AddEffect("Draw", this, 101, 1, this, 89OY);
pClonk = pObj;
}
func FxDrawTimer()
{
SetAction(GetAction(pClonk));
SetPhase(GetPhase(pClonk));
SetDir(GetDir(pClonk));
}
Den HelmNun wir ein Helmobjekt. Natürlich in #strict 2 und GEAR muss includiert werden. Wir benötigen eine Variable um das Overlayobjekt zu speichern. IsHazardGear ist Pflicht, GEAR_Helmet auch, das ist übrigens von Hazard aus vordefiniert. GearEffekt wird beim Anlegen aufgerufen, hier wird das Overlay erzeugt (Die ID muss passen) und Attach mit den entsprechenden Parametern aufgerufen, den Rest übernimmt das Overlayobjekt selbst. Bei GearResetEffekt wird nur das Overlay wieder entfernt, dass es nicht weiterhin am Clonk klebt. Hier gehört natürlich noch die OnClonkDmg Funktion rein, aber damit will ich nun wirklich niemand nerven. Genausowenig wie mit DefCore&Co. das könnt ihr auch selber.
- Code:
-
/*-- Helm --*/
#strict 2
#include GEAR
local Overlay;
func IsHazardGear() { return(true); }
func GetGearType() { return(GEAR_Helmet); }
func GearEffect(object pHazard)
{
Overlay = CreateObject(89OY);
Overlay->Attach(pHazard, "Helmet");
}
func GearEffectReset()
{
RemoveObject(Overlay);
}
ErgebnisseSo wenn wir nun vernünftig gescriptet haben und alles stimmt können wir die Engine starten und den Helm aufsetzten. Schau mer mal.
Laufen tut er schonmal richtig.
Und auch beim Backflip funktioniert diese Technik.
Zusätzliches-Mit
SetObjDrawTransform() lässt sich das Overlay zusätzlich anpassen, kann nützlich sein.