F: Wenn der Spieler eine bestimmte Tür anklickt, möchte ich, dass er in das nächste Level kommt und sie nicht öffnet. Wie geht das?
A: Hier ist der Code:

string level2_wmb = <level2.wmb>;

function next_level();

action click_me
{
my.enable_click = on;
my.event = next_level;
}

function next_level
{
level_load(level2_wmb);
}
F: Ich würde gern ein Panel sehen, welches die Waffen anzeigt, die ich bisher habe, wenn ich Strg drücke. Geht das?
A: Hier ist ein Beispiel für 3 Waffen; benutzen Sie den Code mit den Templates:

function show_weapons(); // call it from main()

bmap weapon1_pcx = <weapon1.pcx>; // pictures of weapon1...3
bmap weapon2_pcx = <weapon2.pcx>;
bmap weapon3_pcx = <weapon3.pcx>;

panel weapon1_pan
{
bmap = weapon1_pcx;
layer = 30;
pos_x = 10;
pos_y = 0;
flags = d3d, overlay, refresh;
}

panel weapon2_pan
{
bmap = weapon2_pcx;
layer = 30;
pos_x = 50;
pos_y = 0;
flags = d3d, overlay, refresh;
}

panel weapon3_pan
{
bmap = weapon3_pcx;
layer = 30;
pos_x = 90;
pos_y = 0;
flags = d3d, overlay, refresh;
}

function show_weapons() // call it from main()
{
while (1)
{
if (key_ctrl == 1)
{
if (weapon_1 == 1) // if we have the 1st weapon
{
weapon1_pan.visible = on;
}
if (weapon_2 == 1) // if we have the 2nd weapon
{
weapon2_pan.visible = on;
}
if (weapon_3 == 1) // if we have the 3rd weapon
{
weapon3_pan.visible = on;
}
}
else
{
weapon1_pan.visible = off;
weapon2_pan.visible = off;
weapon3_pan.visible = off;
}
wait (1);
}
}
F: Ich habe das Model eines Zuges und ein Model von Schienen; weiß jemand, wie ich es hinbekomme, dass der Zug den Schienen folgt?
A: Hier ist der Code, der eine Entity auf einem Pfad bewegt, der im WED festgelegt wurde:

var chtarget_pos;
var chinit_speed;
var chcurrent_speed;
var chacc_speed;
var ch_dist;

action move_tank
{
chinit_speed = 3; // speed
ent_path("tankpath"); // walk on this path
ent_waypoint(chtarget_pos, 1);
while (1)
{
temp.x = chtarget_pos.x - my.x;
temp.y = chtarget_pos.y - my.y;
temp.z = 0;
if (vec_to_angle (my_angle, temp) < 20)
{
ent_nextpoint(chtarget_pos);
}
my.z += 0.1 * (chtarget_pos.z - my.z) * time;
chcurrent_speed = chinit_speed;
my_angle.pan = ang(my_angle.pan - my.pan);
if (abs(my_angle.pan > 10))
{
temp = sign(my_angle.pan) * chcurrent_speed * 0.1;
}
else
{
temp = chcurrent_speed * my_angle * 0.01;
}
my.pan += temp * min(1, time);
chacc_speed = chacc_speed * max ((1 - time * 0.03), 0) + 0.2 * chcurrent_speed * time;
ch_dist = chacc_speed * time;
you = null;
move_mode = ignore_you + ignore_push + activate_trigger + glide;
ent_move(ch_dist, nullskill);
wait(1);
}
}

F: Ist es möglich, ein Objekt im WED zu plazieren, so dass die Kamera den Spieler von dem Punkt aus fixiert?
A: Sicherlich, hier ist der Code:

action init_camera
{
my.invisible = on;
while (player == null) {wait (1);}
vec_set (camera.pos, my.pos);
while (1)
{
vec_set (temp.x, player.x);
vec_sub (temp.x, my.x);
vec_to_angle (camera.pan, temp); // follow the player
wait (1);
}
}

F: Ich bekomme einen Syntax Error, wenn ich enemy1[0].y = 0; eingebe, aber es funktioniert ohne Array: enemy1.y = 0. Warum kann ich keine Entity Eigenschaft mit einem Array kombinieren?
A: Eine normale Variable ist ein Array mit 3 Elementen, also können Sie entity1.x oder color.red dafür benutzen. Wenn Sie ein “richtiges” Array verwenden, sind die Einträge keine Variablen mit 3 Elementen, daher produziert color[2].y eine Fehlermeldung.
F: Wie benutze ich den push Wert, wenn ich möchte, dass der Spieler durch eine bestimmte Entity hindurchgehen kann, aber durch eine andere nicht?
A: Hier ist der Code:

action player_action // the action attached to the player
{
my.push = 2;
..................
}

action pass_through
{
my.push = 3;
}

action cant_pass_through
{
my.push = 1;
}

F: Wenn ein Waffenmodel das Model einer Kugel ausstößt, setzt A5 den Winkel automatisch so, dass er zu dem Winkel des abschießenden Objektes paßt?
A: Nein, natürlich nicht! Sie müssen den Winkel selbst setzen:

function bullets()
{
my.pan = you.pan; // you is the gun
my.tilt = you.tilt;

my.enable_entity = on;
my.enable_block = on;
my.event = remove_bullets;
..........................
}

F: Gibt es eine Möglichkeit, die robot2 Action so zu manipulieren, dass die Distanz der Schüsse sehr kurz ist, als ob ein Schwert benutzt wird?
A: Ändern Sie eine Zeile der war.wdl in der Funktion attack_fire():

if((fire_mode & MODE_DAMAGE) == DAMAGE_SHOOT)
{
shot_speed.X = 500; // replace 500 with 50
}

F: Ich möchte für den Spieler eine Gesundheitsanzeige, die in jedem Level um 5% größer wird.
A: Erstellen Sie eine normale vbar und erhöhen Sie die Gesundheit des Spielers am Anfang jedes neuen Levels um 5% - die Anzeige wird automatisch größer.

vbar 20, 30, 150, healthbar_map, 1, player._health;

vbar position_on_x, position_on_y, height_in_pixels, vbar_bitmap, multiplication_factor, variable_that_changes_vbar;