Most asked questions

Top  Previous  Next

Q: How can I add another animation to your sword combat code in Aum12?
A: The modified function below adds "jump" to the code:

 

action player_fight // attached to the player
{
  player = me; // I'm the player
  player.healthpoints = 100; // and I have 100 health points
  while (player.healthpoints > 0) // as long as I'm alive
  {
     camera.x = player.x - 200 * cos(player.pan); // 200 = distance between the player and the camera
     camera.y = player.y - 200 * sin(player.pan); // same value here
     camera.z = 200; // above the player
     camera.pan = player.pan; // looks in the same direction with the player
     camera.tilt = -30; // look down at the player

     my.pan += 4 * (key_a - key_d) * time - 20 * mouse_force.x * time; // rotates with the keys A and D or with the mouse
     player_distance.x = 10 * (key_w - key_s) * time; // moves forward / backward with W / S
     player_distance.y = 0;
     player_distance.z = 0;

     if ((key_w == 1) || (key_s == 1)) // the player is walking
     {
         ent_cycle("walk", my.skill20); // play walk frames animation
         my.skill20 += 4 * time; // "walk" animation speed
         if (my.skill20 > 100) {my.skill20 = 0;} // loop animation
      }
     if (key_space == 1) // space to jump
     {
        ent_cycle("jump", my.skill20);
        my.skill20 += 3 * time; // "jump" animation speed
        if (my.skill20 < 100)
        {
           player_distance.z += 0.04 * time;
        }
     }
     if (key_any == 0) // the player is standing
     {
         player_distance.z = 0;
         ent_cycle("stand", my.skill21); // play stand frames animation
         my.skill21 += 2 * time; // "stand" animation speed
         if (my.skill21 > 100) {my.skill21 = 0;} // loop animation
     }

     ent_move(player_distance, nullvector);

     if (mouse_left == 1) // if we press the left mouse button
     {
        my.skill22 = 0; // reset "attack" frames
        while (my.skill22 < 100)
        {
           ent_vertex(my.sword_tip, 315); // sword tip vertex coords - get the value in Med
           ent_vertex(my.sword_base, 293); // sword base vertex coords - get the value in Med
           trace_mode = ignore_me + ignore_passable; // ignore me (the player) and all the entities that are passable
           trace (my.sword_base, my.sword_tip); // trace between these sword positions
           if (result != 0) // the player has hit something
          {
             effect (particle_sparks, 10, target, normal);
             if (you != null) {you.healthpoints -= 6 * time;} // if it hasn't hit a wall, decrease health
             ent_playsound (my, sword_snd, 50); // sword sound
           }
          ent_cycle("attack", my.skill22); // play attack frames animation
          my.skill22 += 8 * time; // "attack" animation speed
          wait (1);
       }
      while (mouse_left == 1) {wait (1);} // can't use autofire on a sword :)
    }
    wait (1);
  }
  while (my.skill23 < 90) // the player is dead
  {
    ent_cycle("death", my.skill23); // play death frames animation
    my.skill23 += 3 * time; // "death" animation speed
    wait (1);
  }
  my.passable = on; // the corpse can't be hit by the enemy sword from now on
}

Q: How would I get a sound to initiate when an object passes within a certain radius of a model, and a different event to occur when it hits the model?
A: Here's a sample:

function i_am_hit();

action my_object
{
   my.enable_impact = on;
   my.enable_entity = on;
   my.event = i_am_hit;
   while (1)
   {
       temp.pan = 360;
       temp.tilt = 180;
       temp.z = your_scanning_distance;
       scan_entity (my.x, temp);
       if ((result < your_scanning_distance)
       {
           do_your_stuff;
       }
       waitt (4); // scans 4 times a second
   }
}

function i_am_hit()
{
   snd_play (hit_snd, 70, 0);
}

 

Q: Is there a way of making an invisible block which allows the player to pass through but not the enemy actors. The player still needs to be able to shoot through it ?
A: Yes, you can use a model and set different push values for it, for the player and for the enemies.

 

Q: How can i create flying enemies?
A: Take a good look at the chopper code in this Aum edition; it covers horizontal and vertical movement, collision detection, shooting and being shot, etc. 

 

Q: I would like to click the mouse and have the mouse click go through one panel, but be intercepted by the panel below; the mouse is holding an object which is in fact a panel.
A: Create the object as an "entity" - this way it will look like a panel but you'll be able to change its position on x, y, z without any problem.

 

Q: I've been working on a little clock script and got all the parts to work pretty well; how can I get the names of weekdays or months to show up?
A: Here's an example - store the days of the week and the months as strings:

.........
if (sys_dow == 1)
{
   .................
   display_monday
}
.........................
if (sys_dow == 7)
{
   .................
   display_sunday
}

.........
if (sys_month == 1)
{
   .................
   display_january
}
.........................
if (sys_month == 12)
{
   .................
   display_december
}

Q: Is it possible to shoot from two different vertices at the same time?
A: Yes, it is - here's an example:

var lefthand_gun;
var righthand_gun;

function player_shoots();
function player_bullets();

action player
{
   ...........
   while (1)
   {
       ....................
       vec_for_vertex(lefthand_gun, my, 6); // shoot from vertex 6
       vec_for_vertex(righthand_gun, my, 26); // and from vertex 26
       ....................
       if (mouse_left == 1)
       {
           player_shoots();
           while (mouse_left == 1) {wait (1);}
       }
       ...................
       wait (1);
   }
}

function player_shoots()
{
   ent_create (bullet_mdl, lefthand_gun, player_bullets);
   ent_create (bullet_mdl, righthand_gun, player_bullets);
}

function player_bullets()
{
   this_function_moves_the_bullets
}

Q: Is there a script to make the background music throughout the game but I don't want midi, I prefer .wav
A: You can use something like this to play the song once:

sound mymusic_snd = <mymusic.wav>;

// put this line at the end of your main function:
snd_play (mymusic_snd, 40, 0);

or something like this to play the song in a loop:

function start_music();

sound mymusic_snd = <mymusic.wav>;

var music_handle;

// call it at the end of your main function
function start_music()
{
   while (1)
   {
       if (music_handle == 0)
       {
           snd_loop (mymusic_snd, 40, 0);
           music_handle = result;
       }
       wait (1);
    }
}

Q: I use the campath script in Aum6 for the intro in my game and I need to load a new level when the camera reaches a certain area. How can I do that?
A: I will assume that you want to load a new level when camera's x coordinate reaches 2000.

action cutcamera_init
{
       ..................
       // add some spices
       if (camera.x > 2000) // get this value in Wed
       {
            level_load(my_new_level_wmb);
        }
       wait(1);
   }
}

Q: How can I use your random forest script in Aum12 if the level isn't centered in the origin?
A: Here's Mirek Thier's answer:

// we add 2 new variables
var max_min_x_dif;  // difference between max and min numerical  x value
var max_min_y_dif; // difference between max and min numerical  y  value

function generate_forest()
{
    randomize(); // always generate a different forest
    while (tree_index < num_trees)
    {
         max_min_x_dif = max_x - min_x;
         max_min_y_dif = max_y - min_y;
         max_min_x_dif = random (max_min_x_dif);
         max_min_y_dif = random (max_min_y_dif);
         tree_pos.x = min_x + max_min_x_dif;
         tree_pos.y = min_y + max_min_y_dif;
         tree_pos.z = 1000; // 1000 quants above the floor level
         tree_index += 1;
         if (random(1) > 0.5)
         {
              ent_create (treeold1_mdl, tree_pos, create_tree);
         }
         else
        {
              ent_create (treeold2_mdl, tree_pos, create_tree);
        }
        ifdef fun;
              waitt (8);
        endif;
    }
}