Q: I am using your security camera from Aum22. How can I scan for entities every second instead of using a random value?
A: Replace action security_camera with the one below:

action security_camera
{
  my.ambient = -100;
  my.skill1 = my.pan;
  init_alarm();
  while (1)
  {
     while (my.pan < my.skill1 + rotating_angle)
     {
        my.pan += 1 * time; // rotating speed
        my.skill2 += 3 * time;
        if (my.skill2 > 50) 
        {
            start_scanning();
            my.skill2 = 0;
        }
        wait (1);
     }
     while (my.pan > my.skill1 - rotating_angle)
     {
        my.pan -= 1 * time; // rotating speed
        my.skill2 += 3 * time;
        if (my.skill2 > 50) 
        {
            start_scanning();
            my.skill2 = 0;
        }
     wait (1);
     }   
     wait (1);
   }
}
  

Q: I'm using your security camera (Aum22). What can I do so that whenever the camera scans for entities, a small red light on the camera will be turned on and off?
A: Add another skin to the camera model, painting a red light where you need it, and add a new function like this at the beginning of the script file:

function blinker()
{
  my.skin = 2;
  sleep (0.5);
  my.skin = 1;
}

Call this function right after each function start_scanning() call:

action security_camera
{
  .............................
  start_scanning();
  blinker();
  .............................
  start_scanning();
  blinker();
  .............................
}
 

Q: Can you please modify your force field code from Aum26? If I would set skill3 to 5 in Wed, the field would be on for 5 seconds and off for 5 seconds, and so on.
A: Click here to download the modified forcefield.wdl file.

 

Q: Can you tell me how can I use health packs for the player from Sword Combat (Aum12)?
A: Use the code below:

action sword_combat_medic
{
   my.passable = on;
   while (player == null) {wait (1);}
   while (vec_dist(my.x, player.x) > 70)
   {
       my.pan += 2 * time;
       wait (1);
   }
   ent_remove(my);
   player.healthpoints = min(200, player.healthpoints + 100); // limit healthpoints to 200
}
 

Q: How could I create an abyss which would kill the player if it falls into it?
A: Create an invisible wmb entity that has the shape of the abyss (make it a little smaller) and use the code below:

function kill_player();
define health skill30; // use your own skill here
sound scream_wav = <scream.wav>;
function kill_player()
{
   snd_play(scream_wav, 100, 0);
   while (player.z > -1000) // the player will fall until it goes 1000 quants   below the origin in my example
   {
       player.z -= 50 * time;
       wait (1);
   }
   player.health = 0; // the player is dead
}
starter player_abyss()
{
   while (player == null) {wait (1);}
   while (1)
   {
      vec_set (temp.x, player.x);
      temp.z -= 10000;
      trace_mode = ignore_me + ignore_passable + ignore_models + ignore_sprites +   scan_texture; 
      trace (player.x, temp); 
      if (str_cmpi ("brickdark", tex_name)) // use this texture for your   wmb abyss
      {
          kill_player();
          return; // get out of here
       }
      wait (1);
   }
}
action abyss // attach this simple action to your abyss wmb entity to make   it invisible
{
   my.invisible = on;
}
 

Q: I was wondering if you can attach a sprite to a model and turn it on and off, depending on how close the model is to the camera.
A: Use the code below:

function set_sprite();
string sprite_pcx = <sprite.pcx>;
action my_model
{
   ent_create (sprite_pcx, my.x, set_sprite);
   // put the rest of the code for your model here
}
function set_sprite()
{
   while (1)
   {
      my.x = you.x;
      my.y = you.y; 
      my.z = you.z + 50; // place the sprite 50 quants above the origin of the model
      if (vec_dist (camera.x, my.x) < 100)
      {
         my.invisible = off; // show the sprite
      }
      else
      {
         my.invisible = on; // hide the sprite
      }
      wait (1);
   }
}

Q: I'd like to have a pulsing crosshair: white cross - red cross - white cross.... Can you help?
A: Use this snippet:

bmap whitecross_pcx = <whitecross.pcx>;
bmap redcross_pcx = <redcross.pcx>;
starter pulsing_crosshair()
{
   while (1)
   {
       mouse_map = whitecross_pcx;
       sleep (1); // play with this value
       mouse_map = redcross_pcx;
       sleep (1); // play with this value
   }
}
 

Q: How can I create a shootable target that spins when you shoot it?
A: Use the example below:

function rotate_me();
action shootable_target
{
   my.oriented = on;
   my.enable_impact = on;
   my.enable_entity = on;
   my.enable_shoot = on;
   my.event = rotate_me;
}
function rotate_me()
{
   var rot_speed = 40;
   while (rot_speed > 0.5)
   {
      my.tilt += 2 * rot_speed * time;
      rot_speed -= 3 * time;
      wait (1);
   }
}
 


Q: How can I create a swarm of particles (bees, whatever) that keep rotating around the player?
A: Use this example:

bmap bees_map = <bees.tga>; 
function remove_bees()
{
   my.x = player.x + 100 * cos(my.lifespan);
   my.y = player.y + 100 * sin(my.lifespan);
   my.lifespan -= 5 * time;
}
   
function swarm_init()
{
   my.lifespan = 500;
   my.alpha = 50 + random(50);
   my.bmap = bees_map;
   my.flare = on;
   my.move = on;
   my.size = 10;
   my.z = player.z + (100 - random(200));
   my.function = remove_bees;
}
starter swarm()
{
   while (player == null) {wait (1);}
   while (1)
   {
      effect(swarm_init, 10 * time, player.x, normal);
      wait (1);
   }
}