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.