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;