Q: Please give me an example for a particle effect that uses beam!
A: Here's the code and 2 small shots (1st without beam, 2nd with beam)

function torch_fx();
function flame_fade();

bmap flame_pcx = <flame.pcx>;

action torch
{
my.invisible = on;
my.passable = on;
while (1)
{
effect (torch_fx, 1, my.x, normal);
wait (1);
}
}

function torch_fx()
{
temp.x = random(1) - 2;
temp.y = random(1) - 2;
temp.z = random(1) + 3;
vec_rotate (temp, my.pan);
vec_normalize (temp, 20);
vec_add(my.vel_x,temp);
my.bmap = flame_pcx;
my.flare = on;
my.bright = on;
my.size = 30;
my.move = on;
if (key_b == 1) // press "B" for beam
{
my.beam = on;
}
else
{
my.beam = off;
}
my.function = flame_fade;
my.lifespan = 100;
}

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

Q: I would like to have different sounds for every template gun - is this possible?
A: Open weapons.wdl, add the following lines at its beginning:

sound weapon1_wav = <weapon1.wav>;
sound weapon2_wav = <weapon2.wav>;
sound weapon3_wav = <weapon3.wav>;

and then replace function _flashup with this one:

function _flashup()
{
MY.SCALE_X = 2;
MY.SCALE_Y = 2;
vec_scale(MY.SCALE_X,actor_scale);

MY.PASSABLE = ON;
// Set flare only in D3D mode
if(VIDEO_MODE > 8) { MY.FLARE = ON; }
else{ MY.TRANSPARENT = ON; }

MY.FACING = ON;
MY.AMBIENT = 100;
MY.LIGHTRED = light_muzzle.RED;
MY.LIGHTGREEN = light_muzzle.GREEN;
MY.LIGHTBLUE = light_muzzle.BLUE;
MY.LIGHTRANGE = 100;
wait(1);

if (weapon_number == 1) {snd_play (weapon1_wav, 50, 0);}
if (weapon_number == 2) {snd_play (weapon2_wav, 50, 0);}
if (weapon_number == 3) {snd_play (weapon3_wav, 50, 0);}

// PLAY_SOUND gun_wham,50; // comment this line!
remove(ME);
}

Q: How can I use the mouse wheel to scroll through the weapons?
A: Add these lines at the end of function main:

while (1)
{
if (mickey.z > 5)
{
if (weapon_number == 6) {_gun_select7();}
if (weapon_number == 5) {_gun_select6();}
if (weapon_number == 4) {_gun_select5();}
if (weapon_number == 3) {_gun_select4();}
if (weapon_number == 2) {_gun_select3();}
if (weapon_number == 1) {_gun_select2();}
}
if (mickey.z < -5)
{
if (weapon_number == 2) {_gun_select1();}
if (weapon_number == 3) {_gun_select2();}
if (weapon_number == 4) {_gun_select3();}
if (weapon_number == 5) {_gun_select4();}
if (weapon_number == 6) {_gun_select5();}
if (weapon_number == 7) {_gun_select6();}
}
wait (1);
}

Q: I'm still searching for the code where the smoke trail for the rocket launcher is defined. Can you help me?
A: Open particle.wdl and look for function particle_smoke. Change the bitmap, lower the size of the particle and increase the speed on z.

Q: I would like to have a counter that starts as soon as the level loads and counts down from 120 seconds to 0. How can I do that?
A: Place the following code at the beginning of your main wdl file (office.wdl?):

var seconds = 120;

panel time_panel
{
pos_x = 0;
pos_y = 0;
layer = 10;
digits 10, 10, 3, _a4font, 1, seconds;
flags = visible, refresh, d3d;
}

function count_down()
{
while(seconds > 0)
{
sleep (1);
seconds -= 1;
}
}

and put this line of the end of main:

count_down();

Q: Does anyone know how can I control the sounds volume of a certain sound? I know about sound_vol, but it controls the volume of all the wav sounds.
A: Use this piece of code:

var my_volume;
bmap slider_pcx = <slider.pcx>;
sound mysound_wav = <mysound.wav>;

panel mysound_pan
{
layer = 20;
pos_x = 20;
pos_y = 20;
hslider = 20, 95, 200, slider_pcx, 0, 100, my_volume;
flags = d3d, overlay, refresh, visible;
}

function sound_volume() // call it in main
{
while (1)
{
if (key_s == 1) // press "S" to play the sound
{
while (key_s == 1) {wait (1);} // wait for the key to be released
snd_play (mysound_wav, my_volume, 0);
}
wait (1);
}
}

Q: I can open a file and write the data in it, but the new data always overwrites the old data. How can I fix that?
A: Use the code below; every time you run the game a new "aum" string will be added to the data.txt file:
var data_handle;

function add_data() // call it in main
{
data_handle = file_open_append("data.txt"); // open the file
file_str_write(data_handle, "aum "); // write "aum" inside the file
file_close(data_handle); // close the file
}

Q: I would like to create a camera effect; the camera should rotate around the player when I press a key. The center of the circle is the player and the camera should move around it, always facing the player.
A: Here's the code that does what you want:

var camera_angle = 0;

view rotating_camera
{
pos_x = 0;
pos_y = 0;
size_x = 640; // change this value to your screen resolution on x
size_y = 480; // and y
layer = 25; // must be bigger than camera's layer
}

function camera_effect()
{
camera.visible = off;
rotating_camera.visible = on;
while (player == null) {wait (1);}
while (key_s == 0) // press "S" to stop the effect
{
rotating_camera.x = player.x + 500 * cos(camera_angle.pan);
rotating_camera.y = player.y + 500 * sin(camera_angle.pan);
rotating_camera.z = player.z + 300;
camera_angle += 1 * time;
vec_set (temp.x, player.x);
vec_sub (temp.x, rotating_camera.x);
vec_to_angle (rotating_camera.pan, temp); // look at the player
wait (1);
}
camera.visible = on;
rotating_camera.visible = off;
}

on_c = camera_effect; // press "C" to start the rotating camera

Q: I have created an attack animation for my character; I want to play the entire animation when I press the left mouse button.
A: Use this piece of code as a base for your code:

action attack_me
{
while(1)
{
if(mouse_left == 1)
{
my.skill20 = 0;
while (my.skill20 < 100)
{
ent_cycle("attack", my.skill20);
my.skill20 += 5 * time;
wait (1);
}
}
while (mouse_left == 1) {wait (1);} // disable looping
wait(1);
}
}