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);
}
}