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;