Hallo aztec,
ich habe mir gedacht ich schreibe Dir mal ein kleines Skript wie es in Snake
oder Worm verwendet werden könnte. Und zur besseren Verständnis habe ich Dir
ein Tutorial dazu geschrieben. Hier nun das Skript und darunter die
Download Adr. für das Tutorial.
//// Variablen ////
var worm_speed[3] ;
var var_id_list = 0;
var the_result = 0;
var torso_nr = 800;
var i = 80; // Abstand zwischen den Objekten kommt auf die Grösse der Objekte an
var array_torso[401]; // Array der Torso Entities maximal 100 Entities
var t = 0;
var time_off = 0; // Timer für Freigabe Tastensteuerung
var time_set = 10; // Zeitdauer für neuen Anschlag der Tastatur zum steuern
//// Definitionen ////
define Abst_1,skill30;
define ID_list,skill31;
define worm_cor_x,skill32;
define worm_cor_y,skill33;
define worm_pan,skill34;
define torso_speed,skill36;
define id_handle,skill39;
define pan_alt,skill40;
////////////////////
//// String Definitionen ////
string torso_neu = <ball1.mdl>; // MDL Modell für den Körper des Wurms
////////////////////////////
entity* worm;
function camera_worm()
{
camera.x = worm.x;
camera.y = worm.y;
camera.z = worm.z + 700;
camera.tilt = -90;
}
function torso()
{
my.narrow = on;
my.fat = off;
t += 4; // Hochzählen der Torsonummer
torso_nr = t;
array_torso[torso_nr*4+0] = handle(me); // Handle der Torso werden im Array gespeichert
my.id_handle = torso_nr; // Speichern der Torsonummer im Entity Skill
my.Abst_1 = i; // Abstand zwischen den Objekten kommt auf die Grösse der Objekte an
if(torso_nr > 3) // Abfrage ob neuer Torso nicht Worm ist
{
you = ptr_for_handle(array_torso[(torso_nr - 4)*4+0]);
my.pan = you.pan;
my.x = you.x - cos (you.pan) * my.Abst_1;
my.y = you.y - sin (you.pan) * my.Abst_1;
my.z = worm.z;
}
else // Abfrage ob voriger Torso Worm war
{
my.pan = worm.pan;
my.x = worm.x - cos (worm.pan) * my.Abst_1;
my.y = worm.y - sin (worm.pan) * my.Abst_1;
my.z = worm.z;
}
while(1)
{
my.pan %= 360;
my.torso_speed = 10 * time;
torso_nr = my.id_handle;
you = ptr_for_handle(array_torso[(torso_nr - 4)*4+0]); // Abruf der Parent Entity
if(my.pan != you.pan)
{
if(you.pan == 90 || you.pan == 270)
{
if(my.x <= you.worm_cor_x + 2 && my.x >= you.worm_cor_x - 2)
{
my.pan = you.worm_pan;
my.x = you.worm_cor_x;
}
}
if(you.pan == 0 || you.pan == 180)
{
if(my.y <= you.worm_cor_y + 2 && my.y >= you.worm_cor_y - 2)
{
my.pan = you.worm_pan;
my.y = you.worm_cor_y;
}
}
}
if(my.pan != my.pan_alt)
{
array_torso[(torso_nr)*4+1] = my.pan; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+2] = my.x; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+3] = my.y; // Verwaltung im Array wird noch nicht verwendet
my.worm_cor_x = my.x;
my.worm_cor_y = my.y;
my.worm_pan = my.pan;
}
my.pan_alt = my.pan;
ent_move (my.torso_speed,nullvector);
wait(1);
}
}
function wormtorso_event()
{
if(event_type == event_impact && you == worm)
{
ent_remove(me);
ent_create(torso_neu,worm.x, torso);
}
}
action worm_move
{
worm = me;
my.narrow = on;
my.fat = off;
torso_nr = 0;
array_torso[torso_nr*4+0] = handle(me);
my.id_handle = torso_nr;
while(1)
{
torso_nr = my.id_handle;
my.pan %= 360;
camera_worm();
time_off += 1 * time;
if (key_cul == on && my.pan != 270 && time_off >= time_set)
{
my.worm_cor_x = my.x;
my.worm_cor_y = my.y;
my.pan = 90;
array_torso[(torso_nr)*4+1] = my.pan; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+2] = my.x; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+3] = my.y; // Verwaltung im Array wird noch nicht verwendet
my.worm_pan = my.pan;
time_off = 0;
}
if (key_cur == on && my.pan != 90 && time_off >= time_set)
{
my.worm_cor_x = my.x;
my.worm_cor_y = my.y;
my.pan = 270;
array_torso[(torso_nr)*4+1] = my.pan; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+2] = my.x; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+3] = my.y; // Verwaltung im Array wird noch nicht verwendet
my.worm_pan = my.pan;
time_off = 0;
}
if (key_cuu == on && my.pan != 180 && time_off >= time_set)
{
my.worm_cor_x = my.x;
my.worm_cor_y = my.y;
my.pan = 0;
array_torso[(torso_nr)*4+1] = my.pan; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+2] = my.x; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+3] = my.y; // Verwaltung im Array wird noch nicht verwendet
my.worm_pan = my.pan;
time_off = 0;
}
if (key_cud == on && my.pan != 0 && time_off >= time_set)
{
my.worm_cor_x = my.x;
my.worm_cor_y = my.y;
my.pan = 180;
array_torso[(torso_nr)*4+1] = my.pan; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+2] = my.x; // Verwaltung im Array wird noch nicht verwendet
array_torso[(torso_nr)*4+3] = my.y; // Verwaltung im Array wird noch nicht verwendet
my.worm_pan = my.pan;
time_off = 0;
}
worm_speed = 10 * time;
move_mode = use_box;
ent_move (worm_speed, nullvector);
wait(1);
}
}
action worm_trash
{
my.event = wormtorso_event;
my.enable_impact = on;
}
Hier das Tutorial:
Worm_Tutorial Ich sitze auch gerade an einem kleinen Demospiel für das Skript. Es müsste in
ein paar Tagen fertig sein. Dann stelle ich es hier zum Download rein, dann
kannst Du Dir das ganze mal in Aktion ansehen.
Ich hoffe Du kannst etwas damit anfangen bzw. einzelne Funktionen davon
verwenden.