Q: How can I create a main menu that includes a fire effect like in Quake3?
A: Place the letters in a 3D level, create paths that surround each letter and use the code below:

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


Q: I'd like to have a fly through, as well as a player's camera in my game. Can you help?
A: Place a small entity in your level and attach it the action named camera2; press "C" to toggle the cameras.

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;

 

Q: Anyone knows how can I resize the in-game view" I have the game running at 1024x768 resolution, but I want to have a panel with a size of 1024x200 at the bottom of the screen and have the game running inside a 1024x568 window.
A: Use this snippet:

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

 

Q: How can I add several actions to one entity?
A: You can't do that directly, but here's a workaround; let’s say that you want to add 3 actions to an entity:

action one
{
   my.ambient = 100;
}

action two
{
   my.transparent = on;
}

action three
{
   my.z = 200;
}

Keep the first action and change the 2nd and 3rd to functions:

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

Now call function two and function three from within action one:

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

That’s it!

 

Q: I'd like to have entities that react when "space" is pressed, if they are "touched" by the crosshair. How can I do that?
A: Use the code below:

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
}

 

Q: How can I create a sky that uses a sprite and the "cylinder" flag?
A: Use this example:

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

 

Q: I have captured video inside one of my games and I edited it with Windows Movie Maker, adding some cool effects to it. How can I take that file and use it in my game?
A: Use the example below; it starts playing the movie as soon as the player approaches the entity that has this action attached to it:

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

 

Q: Is it possible to make a quiz with A6?
A: Sure.

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

 

Q: How can I get the closest vertex to the point where I have shot an enemy?
A: Use this example:

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