In diesem Tutorial möchte ich mal alles zusammenfassen, was man machen muss, damit man ein fertiges Objekt hat.
Hier spezialisiere ich mich auf Flints.
Schwierigkeit
*****
benötigte Vorkentnisse:
->Grundfunktionen in Blender
->grundliegende Skriptbefehle
Also, fangen wir an:
Als erstes erstellen wir in einem 3D Programm (ich werde hier Blender verwenden) eine Kugel, wie diese hier:
Man kann auch eine UVSphere erstellen und abrunden.
Nun können wir uns überlegen, ob wir sie rund lassen, oder in eine andere Form bringen wollen:
ich habe sie mal als Beispiel mit der Funktion Fractal=10 bearbeitet und sie sieht jetzt so aus:
Hier werde ich kein Wunderwerk der 3D Grafik Technik vollbringen, sondern den zukünftigen Flint noch rot färben, das Licht ausrichten und woala:
Er gefällt mir jetzt ganz gut, aber das habt ihr letzt endlich selbst zu entscheiden.
Als nächstes brauchen wir ein 2D Grafikprogramm, wie Gimp 2.6 welches ich für dieses Tut verwende.
Wir öffnen mit Gimp die in Blender als PNG exportierte Grasfik.
Dann schneiden wir das Bild so zurecht, dass der Kugelumfang den Bildrand berührt.
Sieht jetzt so aus:
Nun skalieren wir das Bild auf 70X64 Pixel.
Nachdem das getan ist, skalieren wir nur die Flintebene auf 64X64 Pixel und legen sie an den rechten Bildschirmrand.
Jetzt stehen links noch 6X64 Pixel neben der Flintebene über.
Diesen Platz brauchen wir, um die Ingamegrafik zu bestimmen.
Das große Bild rechts ist die Inventar/Menügrafik und das Bild was wir jetzt nach rechts packen, ist die Ingamegrafik (im Spiel auf Boden).
Um das zu erreichen, verdoppeln wir die Flintebene.
Nun haben wir zwei deckungsgleiche Ebenen.
Die verdoppelte skalieren wir nun auf 6X6 Pixel und setzen sie oben links hin.
Der zukünftige Flint ist jetzt Grafisch schon mal fertig und sieht nun so aus:
Als letztes speichern wir es als Graphics.png im Clonkverzeichniss ab.
Auf Wunsch von Gamer werde ich es noch mal für die erklären, die mit Blender nicht so vertraut sind.
Bildschirmausschnitte konnte ich leider nicht einfügen.
Bei Zeiten könnte mir vielleicht jemand ein Tool zum fotografieren des Bildschirms senden.
Danke
>Also erstmal Blender öffnen
>der grundwürfel muss aktiviert sein (wenn nicht, dann mit rechter Maustaste drauf) und "ENTF-Taste" drücken->Enter-Taste
>Leertaste drücken und Add->Mesh->UVSphere wählen
>im kommenden Fenster einfach Ok drücken
>jetzt habt ihr eine Kugel aus Vierecken, die rosa umrandet/markiert sein sollte
>jetzt drückt ihr Tabulator und gelangt in den Edit Mode
>die Kugel ist jetzt rosa mit gelben strichen/Kanten
>jetzt drückt F9
>unten in der Funktionsleiste sind nun andere Funktionen aufgeführt
>dort geht iht unter Mesh Tools->Subdivide, damit verdollelt ihr die Eckpunkte und man kann das Ding genauer bearbeiten
>auch unter Mesh Trools geht ihr auf To Sphere (einfach OK drücken), dadurch wirds abgerundet
>jetzt ganz links unter Link and Materials auf Set Smooth, dadurch werden alle restlichen Kanten abgeflacht
>nun wieder unter Mesh Tools aber diesmal Fractal (einfach OK), das zerknittert den Kreis etwas
>jetzt F5 drücken und dann in der Funktinsleiste unter Links and Pipeline auf Add New, dann einfach rumprobieren
>wer eine genaue Beschreibung will:
-links sind drei Farbstreifen: grau, weiß, weiß
-grau= Grundfarbe
-weiß 1= Glanzfarbe
-weiß 2= Spiegelfarbe
(ist noch nicht ganz fertig, hatte keine Zeit, kommt noch)!!!
Nun gehts im Clonk Editor weiter:
Wir gehen als erstes auf den Button "Neu" und erstellen ein neues Objekt.c4d Verzeichniss.
In dem finden wir folgendes:
>DefCore.txt
>DescDE.txt
>DescUS.txt
>Names.txt
>Graphics.png
>Script.c
jetzt arbeiten wir alles nacheinander ab:
1.die DefCore:
>[DefCore]= nur Überschrift
>id= ein Abkürzungsname des Objekts. Sollte nur 4 Buchstaben, Zahlen und/oder Bindestrichen bestehen. Wir nehmen einfach mal: RDST steht für red Stone
>Name= der Name des Objekts. Nicht Feuerstein oder Flint nehmen, denn den gibts ja schon. Ich nehme einfach red Stone
>Version= ist jetzt unwichtig. Einfach stehen lassen, wie es ist!
>Category= ist eine Nummer, die bestimmt, wo man das Objekt findet: Fahrzeuge, Objekte, Gebäude, u.s.w. Ist schon auf Objekte gestellt.
>MaxUserSelect= wie oft man das Objekt auswählen kann (Im Editor).
>Width, Height= die Ingameobjektgröße. Bei unserer Grafik einfach so lassen!
>Offset= einfach so lassen!
>Value= Wert des Objekts.
>Mass= Gewicht des Objekts.
>Components= das sind die Baumaterialien, die das Objekt braucht. Nehmen wir mal 3 Schwefel: Components=SPHR=3;
>Den Rest so lassen, das würde sich nur bei anderen Grafiken ändern (Z.B. Häuser).
Könnte jetzt so aussehen:
- Code:
-
[DefCore]
id=RDST
Name=red Stone
Version=4,9,5
Category=18960
MaxUserSelect=10
Width=6
Height=6
Offset=-3,-3
Value=40
Mass=25
Components=SPHR=3;
Picture=6,0,64,64
Vertices=1
VertexY=1
VertexFriction=20
Rebuy=1
Collectible=1
Nun gehts weiter:
2. DescDE ist die deutsche Objektbeschreibung.
3. DescUS ist die englische Objektbeschreibung.
4. In Names kommen der englische und der deutsche Name rein.
sieht dann so aus:
DE:roter Stein
US:red Stone
5. Nun finden wir eine Graphics.png.
Die überschreiben wir nun mit unserer Grafik,
also dem eben in Blender und Gimp erstellten Objekt.
6. Ohjee.
Wir sind beim letzten Element, beim Script angekommen.
Das zweitschwerste, nach der Grafik.
Öffnen wir das Script.c Dokument nun, sehen wir das:
- Code:
-
/*-- Neues Objekt --*/
#strict
func Initialize() {
return(1);
}
>erst ändern wir den Namen in: red Stone
>der Script wird durch #strict eröffnet
>func Initialize() sagt, was passiert, wenn das Objekt entsteht, ins Spiel kommt
>{} öffnet und schließt den Befehl.
in diesem Fall eröffnet es func Initialize() und wird durch return(1); geschlossen.
Jetzt lassen wir ihn explodieren.
Dafür legen wir einen neuen Befehl an: func Hit()
In func Hit() kommt das, was passieren soll, wenn das Objekt aufkommt.
Jetzt schreiben wir unter:
- Code:
-
/*-- red Stone --*/
#strict
func Initialize() {
return(1);
}
Noch den Befehl:
- Code:
-
func Hit() {
explode(-_-_-);
return(1);
}
In (-_-_-) kommt die Größe, in der der Flint explodieren sill.
Der normale Feuerstein explodiert mit einer Größe von 18, also würde ich sagen, dass unserer so mit 60 explodieren soll, oder?
Wenn der Stein eine Waffe werden soll, kann man ihn noch Objekte oder Flüssigkeiten versprühen lassen:
Objekte schleudern:
CastObjects(1111, 2222, 3333);
1> id des zu schleudernden Objekts
2>Menge der Objekte die fliegen sollen
3>Speed der zu schleudernden Objekte
also z.B:
CastObjects(WOOD,100,80);
jetzt fliegen 100 Holz mit einer Geschwindigkeit von 80 vom Objekt weg.
Einfach mal rumprobieren!!!
Flüssigkeiten schleudern:
CastPXS("Water/Acid/Lava/Durolava", 2222, 3333);
>das, was das Objekt schmeißen soll: Wasser, Säure, Lava oder nicht trocknende Lava. Müsst ihr euch aussuchen.
Man kann auch Materialien nehmen: Earth(Erde) und andere.
2>die mange der zu verschleudernden Pixel
3>die Geschwindigkeit der Pixel
also z.B:
CastPXS("Water", 5000, 50);
jetzt fliegen 5000 Pixel Wasser mit einer Geschwindigkeit von 50 vom Objekt weg.
Einfach mal rumprobieren!!!
Ich würd sagen, das reicht erst mal, aber wir sind noch nicht ganz fertig:
Wenn das Objekt in der Chemiefabrik herstellbar sein soll, dann machen wirs dem Feuerstein nach:
/* Kann in der Chemiefabrik hergestellt werden */
public func IsChemicalProduct() {
return(1);
}
func IsAlchemContainer() { return(true); }
func AlchemProcessTime() { return(100); }den Kommentar zwischen den /**/ würde ich auch schreiben, damits übersichtlicher ist.
Ansonsten ists ein normaler Befehl, den wir unter den func Hit() Befehl schreiben.
In der roten Zeile kann man noch in den Klammern hinter return die herstellungsdauer schreiben.
Das Objekt kann auch erforscht werden.
Wenn man eine bestimmte Reihenfolge beim Forschen will, sagt man im Script, nach welchem Objekt, deins erforschbar sein soll:
public func GetResearchBase() {
return(FLNT);
}
in return muss die id, des Objekts, das zuerst erforscht werden muss.
In diesem Fall der Feuerstein.
Sooooo.
Das war jetzt wirklich alles.
Sollte am Ende so aussehen:
- Code:
-
/*-- red Stone --*/
#strict
func Initialize() {
return(1);
}
func Hit() {
explode(60);
CastObjects(WOOD,100,80);
CastPXS("Water", 5000, 50);
return(1);
}
public func IsChemicalProduct() {
return(1);
}
func IsAlchemContainer() { return(true); }
func AlchemProcessTime() { return(100); }
public func GetResearchBase() {
return(FLNT);
}
Zum guten Schluss noch die Datei selber (den Ordner des Objekts) benennen und in ein Sceen einfügen.
Die fast perfekte Waffe.
Wenn einem etwas nicht gefällt, oder jemand noch Fragen hat:
per PM an mich oder als Post in diesen Thread.
PS.
Werds auch wirklich lesen.
PPS.
War ne Menge Arbeit und ist mein erstes Tut, also bitte beachtet das, ja?