F: Ich brauche einen Code, der eine Animation erzeugt, wenn ein bestimmtes Event eintritt.
A: Hier ist Code, der die Animation ändert, wenn "S", "W" oder "R" gedrückt wird:

var anim_mode = 1; // default = "stand"

action anim_test // use a model with "stand", "walk", "run" animation frames
{
     while (1)
     {
          if (key_s == on)
          {
               anim_mode = 1; // stand
          }
          if (key_w == on)
          {
               anim_mode = 2; // walk
          }
          if (key_r == on)
          {
               anim_mode = 3; // run
          }
          if (anim_mode == 1) // stand animation
          {
               ent_cycle("stand", my.skill20);
               my.skill20 += 2 * time; // animation speed
               my.skill20 %= 100;
          }
          if (anim_mode == 2) // walk animation
          {
               ent_cycle("walk", my.skill20);
               my.skill20 += 3 * time; // animation speed
               my.skill20 %= 100;
          }
          if (anim_mode == 3) // run animation
          {
               ent_cycle("run", my.skill20);
               my.skill20 += 5 * time; // animation speed
               my.skill20 %= 100;
          }
          wait (1);
     }
}
 

F: Warum steht diese Zeile in einigen Ihrer Funktionen?  while (player == null) {wait (1);}
A: Die Funktionen sollten so aussehen:

function kill_player()
{
    while (player == null) {wait (1);}
    .........
    player._health = 0;
}

Die While Schleife läßt die Funktion pausieren, bis die "player" Entity erstellt ist, denn wir möchten darauf zugreifen. Wir können nicht sicher sein, welche Entity zuerst erstellt bzw. geladen wird.
 

F: Kann mir jemand sagen, wie ich Q2 Models in A5 verwende? Wenn ich es versuche, wird die gesamte Animationssequenz angezeigt.
A: Die Animationsframes sollten mindestens einige der folgenden enthalten: "walk", "run", "jump", "death", "attack", so benannt: walk01...walk15 usw. Kopieren Sie das Model in Ihr Spielverzeichnis, stellen Sie es in Ihr Level und geben Sie ihm die actor_ai_one Action. Nun haben Sie einen Gegner, der ihren Spieler verfolgen wird, um ihn umzubringen!
 

F: Ich würde gern 3 Models in einer Action linken, um ein Fahrzeug wie in HALO zu erstellen.
A: Hier ist Code für einen Panzer aus einem meiner Projekte:

string challenger_turret = <chturret.mdl>;
string challenger_barrel = <chbarrel.mdl>;

function attach_challenger_barrel();
function attach_challenger_turret();

action challenger
{
     ch_turret = ent_create(challenger_turret, nullvector, attach_challenger_turret);
     ch_barrel = ent_create(challenger_barrel, nullvector, attach_challenger_barrel);
     while (1)
    {
        ...........
        wait (1);
    }
}

function attach_challenger_barrel()
{
     my.metal = on;
     while(you) // as long as the creator exists
     {
          vec_set(my.x,you.x);
          vec_set(my.pan, you.pan);
          vec_set(my.tilt, you.tilt);
         my.frame = you.frame;
         my.next_frame = you.next_frame;
         wait(1);
     }
     ent_remove(my);
}

function attach_challenger_turret()
{
     my.metal = on;
     while(you) // as long as the creator exists
     {
         vec_set(my.x,you.x);
         vec_set(my.pan,you.pan);
         my.frame = you.frame;
         my.next_frame = you.next_frame;
         wait(1);
     }
     ent_remove(my);
}
 

F: Wie mache ich einen Schalter, der die Farbe einer Lichtquelle ändert?
A: Plazieren Sie zwei Entities in Ihrem Level, geben Sie ihnen die light_source und light_switch Actions. Der Code ändert die Farbe von rot zu grün und zurück, wenn der Schalter mit der Maus angeklickt wird:

var red = 200;
var green = 0;
var blue = 0;

entity* light_bulb;

function change_color();

action light_source
{
     light_bulb = me;
     my.lightrange = 200;
     while (1)
     {
          my.lightred = red;
          my.lightgreen = green;
          my.lightblue = blue;
          wait (1);
     }
}

action light_switch // click the switch with the mouse to change the light color
{
     my.enable_click = on;
     my.event = change_color;
}

function change_color()
{
     green = (red == 200) * 200;
     red = (green == 0) * 200;
}
 

F: Sind F2 und F3 für Quicksave und Quickload vordefiniert? Ich würde das gern ändern...
A: Ja, sie sind vorbelegt, aber können modifiziert werden. Setzen Sie das Folgende in die Main Funktion:

on_f2 = null;
on_f3 = null;

und benutzen Sie dann etwas wie:

on_f2 = my_quick_save; // your functions
on_f3 = my_quick_load;
 

F: Ich arbeite an einem Shooter ähnlich zu UT, aber ich bekomme es nicht hin, dass die Waffen respawnen!
A: Hier ist Code, der eine der Template Waffen benutzt:

string weapon1_mdl = <rocket.mdl>;

var weapon_exists = 0; // will be set to 1 if the weapon exists at the spawning point

action create_weapon
{
     my.passable = on;
     while (1)
     {
          if (vec_dist (my.x, player.x) < 200) // if the player has picked up the gun - play with this value
          {
               weapon_exists = 0; // we can create a new gun
          }
          sleep (10); // wait 10 seconds before creating a new weapon
          if (weapon_exists == 0) // if the previous weapon was picked up
          {
               vec_set (temp, my.pos);
               temp.z += 50; // create the weapon 50 quants above the spawning point
               ent_create (weapon1_mdl, temp, flashgun);
               weapon_exists = 1;
          }
     }
}
 

F: Ich habe meinen Spieler auf 25% verkleinert, um einen "Big World" Effekt zu erzielen. Nun möchte ich die Kamera nach oben bewegen - wie kann ich das tun?
A: Wenn Ihr Spiel im 3rd Person Modus läuft, schreiben Sie diese Zeile in die main:

camera_dist.z -= 100; // play with this value
 

F: Wie kann ich eine Tür mit der Maus anstelle mit der Leertaste öffnen?
A: Der neue Template Code öffnet Türen auf Mausklick.
 

F: Wie verhindere ich die Bewegung entlang der Z-Achse in Steroidz (Aum10)?
A: Kommentieren Sie diese Zeile in der Action players_ship aus:

// player.tilt += 0.5 * (key_cuu - key_cud) * time;

Durch einen gefixten Engine Bug, zeigen sich die Asteroiden in neueren Versionen nicht. Um das zu beheben, setzen Sie diese Zeile vor jeder ent_move Anweisung in steroidz.wdl:

move_mode = ignore_passable;