F: Wie kann ich ein Mneü erstellen, dass einen Feuereffekt wie in Quake 3 beinhaltet?
A: Plazieren Sie die Buchstaben in einem 3D Level, erstellen Sie Pfade um die Buchstaben herum und verwenden Sie den folgenden Code:

action patrol_path // attach this action to your fire sprite
{
    my.ambient = 100;
    my.flare = on;
    my.skill10 = path_scan (my, my.x, my.pan, vector(360, 180, 1000));
    if (my.skill10 == 0) {return;} // no path was found
    ent_waypoint(my.skill1, 1); // start with the first vertex on the path
    while (1)
    {
       temp.x = my.skill1 - my.x;
       temp.y = my.skill2 - my.y;
       temp.z = 0;
       result = vec_to_angle (my_angle, temp);
       if (result < 10)
       {
          ent_nextpoint(my.skill1);
       }
       my.x = my.skill1;
       my.y = my.skill2;
       sleep (0.1); // play with this value if you need to change the speed
    }
}


F: Ich hätte in meinem Spiel gerne sowohl eine “Fly Through” als auch eine Spielerkamera. Können Sie mir helfen?
A: Plazieren Sie eine kleine Entity in Ihrem Level und geben Sie dieser die Action camera2; mit “C” können Sie zwischen den Kameras umschalten.

view second_camera
{
}

action camera2
{
   second_camera.pos_x = 0;
   second_camera.pos_y = 0;
   second_camera.size_x = screen_size.x;
   second_camera.size_y = screen_size.y;
   second_camera.visible = off;
   camera.visible = on;
   my.invisible = on;
   while (1)
   {
      vec_set(second_camera.x, my.x);
      second_camera.pan = my.pan;
      second_camera.tilt = my.tilt;
      my.pan -= 10 * mouse_force.x * time;
      my.tilt += 10 * mouse_force.y * time;
      move_mode = ignore_passable + glide;
      ent_move (vector (10 * (key_w - key_s) * time, 0, 0), nullvector); // use "W" and "S" to move the camera
      wait (1);
   }
}

function switch_cameras()
{
   camera.visible = (camera.visible == off);
   second_camera.visible = (camera.visible == off);
}

on_c = switch_cameras;

 

F: Weiß jemand, wie ich die Größe meiner In-Game View ändern kann? Mein Spiel läuft mit 1024 x 768 Pixeln, aber ich hätte gern ein 1024 x 200 Pixel großes Panel am unteren Bildschirmrand und das Spiel soll nur in einem 1024 x 568 Fenster laufen.
A: Hier ist der Code:

bmap bottom_pcx = <bottom.pcx>;

panel bottom_pan
{
   pos_x = 0;
   pos_y = 568;
   bmap = bottom_pcx;
   layer = 15;
   flags = overlay, refresh, visible;
}

starter camera_568()
{
   camera.pos_x = 0;
   camera.pos_y = 0;
   camera.size_x = 1024;
   camera.size_y = 568;
}

 

F: Wie kann ich eine Entity mehrere Actions geben?
A: Das geht so direkt nicht, aber man kann es trotzdem erreichen; sagen wir, Sie möchten einer Entity 3 Actions zuweisen:

action one
{
   my.ambient = 100;
}

action two
{
   my.transparent = on;
}

action three
{
   my.z = 200;
}

Behalten Sie die erste und ändern sie die zweite und dritte in Funktionen:

function two(); // function declaration, place it at the top of the script
function three(); // function declaration, place it at the top of the script

function two()
{
   my.transparent = on;
}

function three()
{
   my.z = 200;
}

Rufen Sie diese beiden Funktionen dann von Action Eins aus auf:

action one // attach this action to your entity
{
   my.ambient = 100;
   two();
   three();
}

Das war’s schon!

 

F: Ich hätte genr Entities, die reagieren, wenn die Leertaste gedrückt wird und sie vom Fadenkreuz “berührt” werden. Wie geht das?
A: Hier ist der Code:

bmap mypointer_pcx = <mypointer.pcx>;

function touched_by_pointer();

starter mouse_in_center()
{
   mouse_map = mypointer_pcx; // set the mouse pointer bitmap
   mouse_pos.x = (screen_size.x - bmap_width(mypointer_pcx)) / 2; // place the pointer in the center of the screen
   mouse_pos.y = (screen_size.y - bmap_height(mypointer_pcx)) / 2; // on the x and y axis
   mouse_range = 5000; // objects of up to 5000 quants away can be touched by the mouse
   mouse_mode = 2; // show the pointer
}

action my_entity
{
   my.enable_touch = on;
   my.enable_release = on;
   my.event = touched_by_pointer;
}

function touched_by_pointer()
{
   if (event_type == event_touch) // touched by the mouse
   {
      my.skill40 = 1; // set this skill
   }
   if (event_type == event_release) // the mouse was moved away from the entity?
   {
      my.skill40 = 0; // reset this skill
   }
   while (my.skill40 == 1) // as long as the mouse wasn't moved away from the entity
   {
      if (key_space == on) // "space" was pressed?
      {
         my.ambient = 100; // put the code that does what you want here
      }
      wait (1);
   }
   my.ambient = 0; // the mouse was moved away here
}

 

F: Wie kann ich einen Himmel aus einem Sprite mit dem “cylinder” Flag generieren?
A: Hier ein Beispiel:

sky my_panorama
{
    type = <skysprite.pcx>;
    layer = 30;
    tilt = -50;
    flags = scene, cylinder, overlay, visible;
}

 

F: Ich habe ein Video von einem meiner Spiele aufgezeichnet und mit dem Windows Movie Maker bearbeitet und dadurch einige coole Effekte hinzugefügt. Wie kann ich diese Datei in meinem Spiel verwenden?
A: Hier ist ein Beispiel; das Video wird abgespielt, sobald der Spieler sich der Entity mit der folgenden Action nähert:

action movie_trigger
{
    // my invisible = on; // remove the comment after you set a proper position for the entity
    while (player == null) {wait (1);}
    while (vec_dist(player.x, my.x) > 100) {wait (1);} // wait until the player has come closer than 100 quants to the entity
    media_play("volcano.wmv", null, 80); // replace volcano.wmv with your own wmv file
    ent_remove (my);
}

 

F: Kann man mit A6 ein Quizspiel machen?
A: Klar:

bmap beverages_pcx = <beverages.pcx>;
bmap water1_pcx = <water1.pcx>;
bmap water2_pcx = <water2.pcx>;
bmap milk1_pcx = <milk1.pcx>;
bmap milk2_pcx = <milk2.pcx>;
bmap soda1_pcx = <soda1.pcx>;
bmap soda2_pcx = <soda2.pcx>;

function check_beverages(button_number);

text drinks_txt
{
   layer = 25;
   pos_x = 200;
   pos_y = 450;
   font = _a4font;
   flags = visible;
}

panel beverages_pan
{
   bmap = beverages_pcx;
   pos_x = 100;
   pos_y = 100;
   layer = 15;
   button = 50, 150, water2_pcx, water1_pcx, water2_pcx, check_beverages, null, null;
   button = 50, 200, milk2_pcx, milk1_pcx, milk2_pcx, check_beverages, null, null;
   button = 50, 250, soda2_pcx, soda1_pcx, soda2_pcx, check_beverages, null, null;
   flags = overlay, refresh, visible;
}

function check_beverages(button_number)
{
   beverages_pan.visible = off;
   if (button_number == 1) // water?
   {
      drinks_txt.string = "You have chosen water! Good for you!";
   }
   if (button_number == 2) // milk?
   {
      drinks_txt.string = "Milk? That's a healty beverage!";
   }
   if (button_number == 3) // soda?
   {
      drinks_txt.string = "Soda? Why do you like to drink sodas?";
   }
}

 

F: Wie ermittele ich den Vertex, der dem Punkt am nächsten ist, an dem ich den Feind getroffen habe?
A: Hier ein Beispiel:

var closest_vertex;

panel test_pan
{
   digits = 5, 15, 6, _a4font, 1, closest_vertex;
   flags = overlay, refresh, visible;
}

starter traced_vertex()
{
   var trace_coords;
   while (1)
   {
      if (key_space == 1)
      {
         while (key_space == 1) {wait (1);}
         vec_set(trace_coords.x, vector(1000, 0, 0)); // trace 1000 quants in front of the camera (the player)
         vec_rotate(trace_coords.x, camera.pan); // rotate "temp" in the direction (angles) given by the camera (the player)
         vec_add(trace_coords.x, camera.x); // add the resulting vector to camera's (player's) position
         result = c_trace (camera.x, trace_coords.x, ignore_me | ignore_passable | get_hitvertex);
         if ((result > 0) && (you != null)) // hit an entity?
         {
            closest_vertex = hitvertex;
         }
      }
      wait (1);
   }
}