Descent3fischlein.de Ship
MenTop
News D3Edit Levels Mods Tools Links Lan-Pic's Gästebuch Kontakt Fischlein
403778 seit 24.09.2000

Micro-D3-Edit Tipps 3 ( V1.0 ) Atan
Geschrieben von (LL)Atan
Wenn Ihr Euch diese Anleitung ausdrucken wollt,
Deutsch:
Word,
PDF
Englisch:
Word,
PDF

ToCB der TextureBar verwenden
ToCB ist als Unterstützung für das DALLAS Scripting gedacht.
Es geht hier um das Austauschen von Roomtexturen per DALLAS Script und findet Anwendung
wenn man sehr viele Texturen eines Rooms auf einmal austauschen möchte.
ToCB generiert alle dafür benötigten Bestandteile auf Knopfdruck.
Das fertige Produkt befindet sich im Clipboard und kann ganz einfach, z.B. mit Notpad der
yourlevel.cpp zugefügt werden. Beim nächsten DALLAS Start steht die neue Funktion dann zur
Verfügung.

Es folgt ein kleines Beispiel wie man vorgehen muss um diese Funktionalität zu nutzen.
Wir wollen die Texture der Plakatsäule im Spiel verändern.
Dazu öffnen wir einen Level und wählen ein Face mit der Texture aus die per Script im Spiel
getauscht werden soll. Die Texture darf in diesem Room nur auf der Säule vorkommen!

Bild 1

Nun betätigen wir den ToCB Schalter (siehe Pfeil). Sollten wir dem Raum noch keinen Namen
gegeben haben erfolgt ein entsprechender Hinweis. Nach dem Benennen des Rooms in dem
RoomProperties Dialog betätigen wir den Schalter noch einmal. Es scheint nichts zu geschehen,
das täuscht aber, denn alles was wir benötigen befindet sich nun bereits im Clipboard.
Sollten wir noch keine yourlevel.cpp per DALLAS angelegt haben sollten wir das nun nachholen.
Einmal DALLAS starten, alles mit OK bestätigen, speichern und dann DALLAS beenden.
Wir finden die erzeugte yourlevel.cpp Datei in dem D3-SDK/Osiris Ordner wieder und öffnen
diese mit dem Editor. Wir suchen nun nach dem folgenden Bereich in der yourlevel.cpp Datei:

Code:
// ===============================================================
// Start of Custom Script Block - DO NOT EDIT ANYTHING BEFORE THIS
// ===============================================================
/**{CUSTOM_SCRIPT_BLOCK_START}** DO NOT EDIT! **/
// Enter your custom script code here


Nun setzen wir den Cursor in die Zeile unter diese Zeile und fügen den Inhalt des Clipboards ein.
Das Ergebnis sieht zum Beispiel so aus:

//Place the generated code inside your level.cpp Custom Script Block
#define NUM_FACES 11
typedef struct {
char *room_name;
int room_id;
int face_num;
} tTextureInfo;
tTextureInfo texture_info[NUM_FACES] = {
{"Testraum", 0, 92 },
{"Testraum", 0, 97 },
{"Testraum", 0, 102 },
{"Testraum", 0, 107 },
{"Testraum", 0, 112 },
{"Testraum", 0, 117 },
{"Testraum", 0, 122 },
{"Testraum", 0, 127 },
{"Testraum", 0, 503 },
{"Testraum", 0, 507 },
{"Testraum", 0, 514 },
};
/*
$$ACTION
Custom
Change texture on faces inside Room Testraum to [u:Texture]
aSetTextureForRoomFaces
Sets the faces to a given texture
Parameters:
TextureName: the texture to assign
Room: Not needed
$$END
*/
bool TextureInfoInitialized = false;
void aSetTextureForRoomFaces(int texture_id)
{ int j;
if(!TextureInfoInitialized) {
for(j=0;j < NUM_FACES;j++)
texture_info[j].room_id = Scrpt_FindRoomName(texture_info[j].room_name);
TextureInfoInitialized=true;
}
for(j=0;j<NUM_FACES;j++)
aRoomSetFaceTexture(texture_info[j].room_id,texture_info[j].face_num,texture_id);
}


Jetzt speichern wir die yourlevel.cpp und öffnen den DALLAS Scripteditor.

Hier nun ein kleines Beispiel-Script um per Timer zwischen 2 Texturen hin und her zu schalten.
Die Pfeile zeigen den Einsatz der von uns in der yourlevel.cpp gepasteten Custom-Funktion.
Wir finden sie unter Action->Custom und sie heisst:
Change texture on faces inside Room Testraum to [u:Texture].
In DALLAS bietet das [u:Texture] einen Auswahldialog für Texturen an und wir wählen damit 2
Texturen unserer Wahl aus. Nachdem das Script kompeliert wurde müssen die erzeugte
yourlevel.dll und die yourlevel.msg mit in die Missiondatei (mn3/hog) gepackt und das Ganze
dann als Level abgespeichert werden. Dananch können wir einen Probeflug machen und uns das
Ergebnis anschauen. Die Zeiten des Timers sollte man kürzer, als im Beispiel angegeben, wählen.

Bild 2

Bild 3

Bild 4

Hinweis:
Wenn diese Funktion öfter im Level benötigt wird müssen einige Anpassungen per Hand
vorgenommen werden. Hier die entsprechenden Zeilen:

#define NUM_FACES xx => #define NUM_FACES_2 xx

} tTextureInfo; => } tTextureInfo_2;

tTextureInfo texture_info[NUM_FACES] = { => tTextureInfo_2 texture_info_2[NUM_FACES_2]

aSetTextureForRoomFaces => aSetTextureForRoomFaces_2

bool TextureInfoInitialized = false; => bool TextureInfoInitialized_2 = false;

void aSetTextureForRoomFaces(int texture_id) => void aSetTextureForRoomFaces_2(int texture_id)

if(!TextureInfoInitialized) { => if(!TextureInfoInitialized_2) {

for(j=0;j < NUM_FACES;j++) => for(j=0;j < NUM_FACES_2;j++)

texture_info[j].room_id = Scrpt_FindRoomName(texture_info[j].room_name); => texture_info_2[j].room_id = Scrpt_FindRoomName(texture_info_2[j].room_name);

for(j=0;j<NUM_FACES;j++) => for(j=0;j<NUM_FACES_2;j++)

aRoomSetFaceTexture(texture_info[j].room_id,texture_info[j].face_num,texture_id);
=> aRoomSetFaceTexture(texture_info_2[j].room_id,texture_info_2[j].face_num,texture_id);


Erhöhe _2 zu _3 wenn die Funktion 3 mal benötigt wird, usw.
Das sollte funktionieren.

Zurück