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;