Artillerie mit Gamestudio!

Hallo!
In dem folgenden Tutorial zeige ich euch wie man einen Artillerieschlag Programmiert!
Die Granaten werden in
zufälligen Zeitabständen erstellt und schlagen zufällig irgendwo in dem angegebenen Rahmen ein!
Ich versuche es so gut wie möglich zu erklären aber wenn ihr noch fragen habt
oder ähnliches stehen am Ende noch Kontaktdaten!
Aber jetzt gehts erstmal los^^
1: Das Granatenmodell!
Nun nehmt dafür irgendein geignetes Modell! Z.b. eine Pistolenkugel und vergrößert sie.
Damit es ungefähr so aussieht(Dieses Modell ist aus einer Aum):

2: Die function:
Also damit die Granaten auch erstellt werden ect brauchen wir eine Funktion diese sieht so aus:
function artillerie2()
{
while(1)
{
ent_create (mg_bullet, my.x, bullet23);
wait(1);
sleep(random(10));
wait(1);
}
}
Diese Function bewirkt das die Granaten erzeugt werden.
Zuerst müssen wir die Kugel erstellen.
Das machen wir mit ent_create(entity_name,wo wird es erstellt?, function);
Also nehmen wir unser Kugelmodell und packen es in den Projekt Ordner.
Wenn euer Kugelmodell nun bullet.mdl heißt müsst ihr an den anfang der Scripts diese Zeile einfügen:
string mg_bullet = ; Damit die engine auch weiß was sie erstellen soll ;)
Als Position wählen wir einfach my.x damit werden die Kugeln an der Position des Würfels erstellt.
Damit wir aber auch nicht jede Sekunde eine granate erstellen schreiben wir diese Zeile noch hinzu:
sleep(random(10));
Damit wird immer eine zufällige Zahl zwischen 1 Sekunde und 10 Sekunden gewählt.
So nun haben wir die Function um die Granten zu erstellen
Jetzt brauchen wir noch eine Action um es dem Würfel im Wed zuzuordnen
action artillerie
{
art=me;
artillerie2();
}
In dieser Aktion sagen wir der Engine das art der Würfel ist und starten unsere Artillerie function!
So nun kommt der etwas schwierigere Teil!
Jetzt müssen wir der Engine auch noch sagen das die Granaten aufschlagen und explodieren sollen!
Dazu habe ich ein Waffenscript aus der Aum etwas verändert!
Das ganze sieht sieht so aus:
function bullet23()
{
bullete=me;
//Ich bin die Kugel
my.pan = art.pan;//die Kugel nimmt den Pan des Würfels an
my.tilt = art.roll;//sowie den Tilt
my.x +=random(1000);//Der x,y Wert wird zufällig erzeugt damit schlagen die Granaten im Umkreis von 1000 Quants irgendwo auf.
my.y +=random(1000);
my.enable_impact = on;
my.enable_block = on;
my.enable_entity = on;
my.transparent=1;//ich habe die Kugel unsichtbar gemacht das könnt ihr machen wie ihr wollt
my.event=explode_rocket3;//der explosionseffekt
my.skill5 = 1; // used for vertical movement
art_speed.x = 0;
art_speed.y = 0;
art_speed.z -= 10;//meine Fallgeschwindigkeit ist 10 quants pro Sekunde!
art_speed *= time;
while (my != null)
{
my.skill5 += time;
if (my.skill5 > 20)
{
mg_speed.z -= fall_speed * time;
}
move_mode = ignore_you + ignore_passable; // ignores the barrel -> can't collide with it
ent_move (art_speed, nullvector);
my.transparent=1;
wait(1);
}
}
Explosion:
Ich habe hier einfach einen einfachen Sprite verwendet ihr könnt das natürlich auch durch Partikelwolken ect ersetzen.
function animate_explosion()
{
wait (1);
my.passable = on;
my.ambient = 100;
while (my.frame < 7)
{
my.frame += 1 * time;
wait (1);
}
ent_remove (me);
}
Die obige Function bewirkt das der Sprite animiert wird.
function explode_rocket3()
{
wait (1);
exclusive_global;
// the following piece of code replaces A5's ent_playsound with a linear function
my.skill10 = vec_dist (player.x, my.x);
if (my.skill10 < 1000) {my.skill10 = 1000;} // all sounds below 1000 quants will be played with maximal volume
my.skill10 = 100000 / my.skill10; // bigger distance -> lower volume;
vec_set (temp, my.pos);
temp.z += 50; // create the explosion sprite a little higher
ent_create(explosion_pcx, temp, animate_explosion);
snd_play(stein,100,0);
ent_remove (me);
}
Diese Function bewirkt die Ertellung des Explosionssprites und spiel einen sound ab (Stein) den Sound könnt ihr natürlich nach belieben ändern.
Ich habe ihn aber trotzdem hinzugelegt genau so wie das kompl. Script und die Modelle.
So ich hoffe ihr habt alles verstanden !
Wenn nicht könnt ihr mich hier erreichen:
www.hahnspiele.de
icq:205395547
email:info@hahnspiele.de
viel Spaß und danke fürs lesen!