Most asked questions

Top  Previous  Next

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