F: Geben Sie mir bitte ein Beispiel für einen Partikeleffekt mit beam!
A: Hier ist der Code und zwei Screenshots (Der erste ohne beam, der zweite mit) 

 

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

F: Ich würde gern für jede Templatewaffe einen anderen Sound haben - geht das?
A: Öffnen Sie weapons.wdl und fügen Sie folgende Zeilen am Anfang ein:

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

und ersetzen Sie dann die Funktion _flashup mit dieser:

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

 
F: Wie kann ich mit Hilfe des Mausrades die Waffen wechseln?
A: Fügen Sie diese Zeilen an das Ende der Main Funktion an:

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

F: Ich suche immer noch nach dem Code, in dem die Rauchfahne für den Raketenwerfer definiert ist. Können Sie mir helfen?
A: Öffnen Sie particle.wdl und suchen Sie nach der Funktion particle_smoke. Ändern Sie die Bitmap, verringern Sie die Größe des Partikels und erhöhen Sie die z Geschwindigkeit.
 

F: Ich hätte gern einen Zähler, der startet, sobald das Level geladen wird und von 120 Sekunden bis 0 herunterzählt. Wie kann ich das erreichen?
A: Schreiben Sie folgenden Code an den Anfang Ihrer Haupt WDL-Datei (z.B. 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;
     }
}

und diese Zeile am Ende der Main:

count_down();
 

F: Weiß jemand, wie ich die Lautstärke eines bestimmten Sounds ändern kann? Ich kenne sound_vol, aber dieser Wert beeinflußt alle Wav Sounds.
A: Benutzen Sie diesen 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);
     }
}
 

F: Ich kann eine Datei öffnen und Daten schreiben, aber neue Daten überschreiben die alten. Wie kann ich das beheben?
A: Benutzen Sie den Code unten; jedes Mal, wenn er läuft, wird ein neuer "aum" String in der data.txt Datei hinten angefügt.
 
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
}
 

F: Ich möchte einen Kameraeffekt programmieren; die Kamera soll um den Spieler kreisen, wenn ich eine Taste drücke. Der Spieler steht in der Mitte des Kreises und die Kamera soll sich darauf bewegen und dabei stets den Spieler im Blick behalten.
A: Hier ist der Code:

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
 

F: Ich habe eine "Attack" Animation für meinen Charakter erstellt; ich möchte, dass die ganze Animation abgespielt wird, wenn ich die linke Maustaste drücke.
A: Benutzen Sie diesen Codeteil als Grundlage für Ihren eigenen 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);
     }
}