Q: I'm using the sword combat wdl in Aum12 and I need help adding gravity to the player and enemy. Please help!
A: Replace player_fight and enemy_fight with the ones below:

action player_fight // attached to the player
{
player = me; // I'm the player
player.healthpoints = 100; // and I have 100 health points
while (player.healthpoints > 0) // as long as I'm alive
{
camera.x = player.x - 200 * cos(player.pan); // 200 = distance between the player and the camera
camera.y = player.y - 200 * sin(player.pan); // same value here
camera.z = player.z + 200; // above the player
camera.pan = player.pan; // looks in the same direction with the player
camera.tilt = -30; // look down at the player

my.pan += 4 * (key_a - key_d) * time - 20 * mouse_force.x * time; // rotates with the keys A and D or with the mouse
player_distance.x = 10 * (key_w - key_s) * time; // moves forward / backward with W / S
player_distance.y = 0;
vec_set (temp, my.x);
temp.z -= 1000;
trace_mode = ignore_me + use_box;
player_distance.z = -trace (my.x, temp);

if ((key_w == 1) || (key_s == 1)) // the player is walking
{
ent_cycle("walk", my.skill20); // play walk frames animation
my.skill20 += 4 * time; // "walk" animation speed
if (my.skill20 > 100) {my.skill20 = 0;} // loop animation
}
else // the player is standing
{
ent_cycle("stand", my.skill21); // play stand frames animation
my.skill21 += 2 * time; // "stand" animation speed
if (my.skill21 > 100) {my.skill21 = 0;} // loop animation
}
ent_move(player_distance, nullvector);

if (mouse_left == 1) // if we press the left mouse button
{
my.skill22 = 0; // reset "attack" frames
while (my.skill22 < 100)
{
ent_vertex(my.sword_tip, 315); // sword tip vertex coords - get the value in Med
ent_vertex(my.sword_base, 293); // sword base vertex coords - get the value in Med
trace_mode = ignore_me + ignore_passable; // ignore me (the player) and all the entities that are passable
trace (my.sword_base, my.sword_tip); // trace between these sword positions
if (result != 0) // the player has hit something
{
effect (particle_sparks, 10, target, normal);
if (you != null) {you.healthpoints -= 6 * time;} // if it hasn't hit a wall, decrease health
ent_playsound (my, sword_snd, 50); // sword sound
}
ent_cycle("attack", my.skill22); // play attack frames animation
my.skill22 += 8 * time; // "attack" animation speed
wait (1);
}
while (mouse_left == 1) {wait (1);} // can't use autofire on a sword :)
}
wait (1);
}
while (my.skill23 < 90) // the player is dead
{
ent_cycle("death", my.skill23); // play death frames animation
my.skill23 += 3 * time; // "death" animation speed
wait (1);
}
my.passable = on; // the corpse can't be hit by the enemy sword from now on
}

action enemy_fight // attached to the enemy
{
enemy = me; // I'm the enemy
enemy.healthpoints = 100; // and I have 100 healthpoints
while (my.healthpoints > 0) // as long as I'm alive
{
if (vec_dist (my.x, player.x) < 200 && player.healthpoints > 0) // the player approaches the enemy
{
vec_set(temp, player.x);
vec_sub(temp, my.x);
vec_to_angle(my.pan, temp);
my.tilt = 0; // I'm a maniac :)
enemy_distance.x = 5 * time;
enemy_distance.y = 0;
vec_set (temp, my.x);
temp.z -= 1000;
trace_mode = ignore_me + use_box;
enemy_distance.z = -trace (my.x, temp);
ent_move(enemy_distance, nullvector);
ent_cycle("walk", my.skill19); // play walk frames animation
my.skill19 += 5 * time; // "walk" animation speed
if (my.skill19 > 100) {my.skill19 = 0;} // loop animation
if (vec_dist (my.x, player.x) < 50) // if the player comes closer than 50 quants attack him
{
my.skill20 = 0; // reset "attack" frames
while (my.skill20 < 100)
{
ent_vertex(my.sword_tip, 291); // sword tip vertex coords - get the value in Med
ent_vertex(my.sword_base, 306); // sword base vertex coords - get the value in Med
trace_mode = ignore_me + ignore_passable;
trace (my.sword_base, my.sword_tip); // trace between these sword positions
if (result != 0) // hit something, could be the player or another enemy
{
effect (particle_blood, 2, target, normal);
if (you != null) {you.healthpoints -= 4 * time;}
ent_playsound (my, sword_snd, 50); // sword sound
}
ent_cycle("attack", my.skill20); // play attack frames animation
my.skill20 += 5 * time; // "attack" animation speed
wait (1);
}
waitt (6); // slows down the enemy and reduces the number of traces per second
}
}
else // the player is farther than 200 quants away
{
ent_cycle("stand", my.skill21); // play stand frames animation
my.skill21 += 2 * time; // "stand" animation speed
if (my.skill21 > 100) {my.skill21 = 0;} // loop animation
}
wait (1);
}
while (my.skill22 < 80) // the enemy is dead
{
ent_cycle("death", my.skill22); // play death frames animation
my.skill22 += 1 * time; // "death" animation speed
wait (1);
}
my.passable = on; // the corpse can't be hit by the sword from now on
}

Q: How can I set the strength of the fog in my levels? I use camera.fog = 1..100 but I get the same effect.
A: Use the new camera.fog_start and camera.fog_end to set the strength. Check "Fogger" in Aum25 to see an example.

Q: Can someone please explain how to make a movement similar to Counterstrike. As in normal walking is running and shift halves the speed. I'm using the templates.
A: Place this line in function main:

shift_sense = 0.5;

and then change strength in movement.wdl like this:

var strength[3] = 10,4,75; // default ahead, side, jump strength

Q: I'm trying to program a block where you step on it and a door opens, but I don't want to handcode each door, so for each block I just want it to point to a door so I can open it and give it a generic function. Is this possible?
A: Sure. Scan your doors using the block that triggers the event. Check the "Intelligent elevators" article in Aum18 to see how it is done.

Q: I have a gun and I can walk. If I fire a bullet I walk very slowly. Is this normal?
A: No, it isn't normal. Your bullet collides with its creator - the gun. Add this line in front of the ent_move line that moves the bullet:

move_mode = ignore_you + ignore_passable

Q: How can I play AVIs on a sprite?
A: Add the code below at the end of your office.wdl file; attach action movie_on_sprite to your sprite. Press "P" to play the movie.

action movie_on_sprite
{
while (key_p == 0) {wait (1);} // press "P" to play the movie
media_play ("skiing.avi",bmap_for_entity (my, 0), 100);
}

Q: Can anyone please tell me how to replace the sprite used by the rocket launcher with particles?
A: Paste the code below at the beginning of weapons.wdl:

bmap spark_pcx = <spark.pcx>;

function fade_away()
{
my.alpha -= 3 * time;
if (my.alpha < 0) {my.lifespan = 0;}
}

function particle_sparks()
{
temp.x = random(2) - 1;
temp.y = random(2) - 1;
temp.z = random(2) - 1;
vec_rotate (temp, my.pan);
vec_normalize (temp, 3);
vec_add (my.vel_x, temp);
my.alpha = 40 + random(30);
my.bmap = spark_pcx;
my.size = random(2) + 5;
my.flare = on;
my.bright = on;
my.move = on;
my.lifespan = 100;
my.function = fade_away;
}

function _rocket_event2()
{
proc_kill(1); //EXCLUSIVE_ENTITY; // terminate other functions started by 'my' to stop moving
MY.EVENT = NULL;
MY.SKILL9 = -1; // stop movement

wait(1); // to avoid dangerous instruction in event warning
// Apply damage
range = MY._DAMAGE * 6;
damage = MY._DAMAGE;
temp.PAN = 360;
temp.TILT = 360;
temp.Z = range;
indicator = _EXPLODE; // must always be set before scanning
scan(MY.POS,MY_ANGLE,temp);

// Explode
MY.AMBIENT = 100;
MY.FACING = ON;
MY.NEAR = ON;
MY.FLARE = ON;

MY.PASSABLE = ON;
MY.AMBIENT = 100;
MY.LIGHTRED = light_flash.RED;
MY.LIGHTGREEN = light_flash.GREEN;
MY.LIGHTBLUE = light_flash.BLUE;
MY.LIGHTRANGE = 64;
wait(1);

play_entsound ME,hit_wham,300;
my.skill9 = 10;
vec_set (temp, my.pos);
while (my.skill9 > 0)
{
effect (particle_sparks, 10, temp, normal);
my.skill9 -= 2 * time;
}
remove(ME);
}

and then edit two lines in function rocket_launch:

function rocket_launch()
{
vec_scale(MY.SCALE_X,actor_scale); // use actor_scale

MY.ENABLE_BLOCK = ON; // collision with map surface
MY.ENABLE_ENTITY = ON; // collision with entity
MY.ENABLE_STUCK = ON;
MY.ENABLE_IMPACT = ON;
MY.ENABLE_PUSH = ON;
MY.EVENT = _rocket_event2;

MY.AMBIENT = 100; // bright
MY.LIGHTRANGE = 150;
MY.LIGHTRED = 250;
MY.LIGHTGREEN = 50;
MY.LIGHTBLUE = 50;

//- MY.PAN = YOUR.PAN; // the rocket start in the same direction than this 'emitter'
//- MY.TILT = YOUR.TILT;
//- MY.ROLL = YOUR.ROLL;
vec_to_angle(MY.PAN, shot_speed);

MY.SKILL2 = shot_speed.x;
MY.SKILL3 = shot_speed.y;
MY.SKILL4 = shot_speed.z;
MY._DAMAGE = damage;
MY._FIREMODE = fire_mode;

MY.SKILL9 = 250; // 'burn time' (fuel)
while(MY.SKILL9 > 0)
{
temp.X = MY.SKILL2 * TIME;
temp.Y = MY.SKILL3 * TIME;
temp.Z = MY.SKILL4 * TIME;
vec_scale(temp,movement_scale); // scale distance by movement_scale
//-- move(ME,NULLSKILL,temp);
move_mode = ignore_you + ignore_passable + activate_trigger;
result = ent_move(nullskill,temp);

emit(3,MY.POS,particle_smoke); // emit( smoke
MY.SKILL9 -= TIME; // burn fuel
wait(1); // update position once per tick
}
_rocket_event2(); // explode when out of fuel
}

Q: Is there a way to change patrol_path so that it uses a 3D path?
A: Use my "Campath" article in Aum6. That code moves the camera on a 3D path but you can replace the camera with any entity.

Q: I've seen people do some really incredible terrain with lod and grass etc. Just wondering if someone has the patience to share a clue with me.
A: Unreal Tournament uses a simple LOD system for the grass, with detailed sprites that appear when the player gets closer. Serious Sam 2 creates a number of detailed grass sprites around the player and removes the ones that are far away from the player.