Most asked questions

Top  Previous  Next

Q: How can I move just a single row of vertices in a certain direction in Med?

A: Select the row as shown in the first picture, and then move it upwards or downwards like in the second picture.

 

aum36_shot8

 

aum36_shot9

 

 

Q: I'd just like to know how I can find out how many guys are touching an entity.

A: Use something like this:

 

var number_of_guys = 0;

 

panel guycounter_pan

{

  pos_x = 0;

  pos_y = 0;

  digits = 0, 0, 3, _a4font, 1, number_of_guys;

  flags = overlay, refresh, visible;

}

 

function count_guys()

{

  if (you.skill25 == 0)

  {

      number_of_guys += 1;

      you.skill25 = 1;

  }

}

 

action touched_object

{

  my.enable_impact = on;

  my.event = count_guys;

}

 

 

Q: Is it possible to code your full screen flare effect from Aum34's faq in such a way that it will work ok if the pan angle for the sun isn't zero?

A: Here's the code for the improved version. Place any model in your level and attach it the "my_own_sun" action.

 

var angles_to_sun[3];

 

bmap flarepan_tga = <flarepan.tga>;

 

entity* aum_sun;

 

panel flare_pan

{

  pos_x = 0;

  pos_y = 0;

  bmap = flarepan_tga;

  flags = overlay, refresh, transparent, visible;

}

 

action my_own_sun

{

  // my.invisible = on; // remove the comment if you want to hide the sun model

  my.passable = on;

  aum_sun = my;

}

 

starter get_sun_angles()

{

  while (aum_sun == null) {wait (1);}

  while (player == null) {wait (1);}

  vec_set (temp.x, aum_sun.x);

  vec_sub (temp.x, player.x);

  vec_to_angle (angles_to_sun, temp); // got the (pan, tilt) angles from the initial position of the player to the sun

  while (1)

  {

     camera.pan %= 360;

     temp.x = 0.2 * abs(camera.pan - angles_to_sun[0]); // play with 0.2

     temp.y = 0.2 * abs(camera.tilt - angles_to_sun[1]); // play with 0.2

     flare_pan.alpha = 100 / ((temp.x + 1) * (temp.y + 1));

     wait (1);

  }

}

 

aum36_shot10

 

 

Q: I'd like to see some code sample that moves the player like in modern games (WS = forward / back, AD = strafe left / right, mouse rotates the camera view).

A: Here's a good starting point; you will have to add inertia and friction, but the rest of the code is here.

 

action my_player

{

   while (1)

   {

       vec_set (camera.pos, my.pos);

       camera.pan = my.pan;

       camera.tilt += 6 * mouse_force.y * time;

       my.pan -= 10 * mouse_force.x * time;

       vec_set (temp, my.x);

       temp.z -= 1000;

       trace_mode = ignore_me + ignore_passable + use_box;

       temp.z = -trace (my.x, temp);

       temp.x = 8 * (key_w - key_s) * time;

       temp.y = 6 * (key_a - key_d) * time;

       ent_move (temp, nullvector);

       wait (1);

   }

}

 

Q: I'd like to use your Splinter Cell code from Aum32 with shootable lights. Is this possible?

A: The value set for tex_light isn't affected by dynamic lights, so you will have to fake the effect. The enemies should scan the dynamic lights, being less aggressive if the lights in the area are out (if their skill1 is 0 in my example).

 

function light_off()

{

   my.skill1 = 0;

}

 

action dynamic_light

{

  my.skill1 = 1;

  my.enable_impact = on;

  my.enable_shoot = on;

  my.event = light_off;

  while (my.skill1 == 1)

  {

     my.lightrange = 300;

     my.lightred = 200 + random (50);

     my.lightgreen = 200 + random (50);

     my.lightblue = 150;

     wait (1);

  }

my.lightrange = 0;

}

 

 

Q: How can I make the player scan for entities?

A: Use something like this:

 

action player_scanner

{

   player = me; // I'm the player

   my.invisible = on;

   while (1)

   {

      my.skill1 = 15 * (key_w - key_s) * time; // move with w / s

      my.skill2 = 10 * (key_a - key_d) * time; // straf with a / d

      vec_set (temp, my.x);

      temp.z -= 1000;

      trace_mode = ignore_me + ignore_passable + use_box;

      my.skill3 = -trace (my.x, temp);

      my.pan -= 5 * mouse_force.x;

      my.tilt += 5 * mouse_force.y;

      move_mode = ignore_passable + ignore_passents + glide;

      ent_move(my.skill1, nullvector);

      wait (1);

      camera.x = my.x;

      camera.y = my.y;

      camera.z = my.z + 30;

      camera.pan = my.pan;

      camera.tilt = my.tilt;

      temp.pan = 60; // horizontal angle

      temp.tilt = 30; // vertical angle

      temp.z = 200; // scanning range

      scan_entity (my.x, temp);

   }

}

 

function i_am_scanned()

{

  my.ambient = 100;

}

 

action entities_scanned

{

  my.ambient = -100;

  my.enable_scan = on;

  my.event = i_am_scanned;

}

 

aum36_shot11

 

 

Q: Can anyone tell me how can I create a bullet for my 3rd person character?

A: Use the snippet below:

 

var players_gun;

 

string bullet_mdl = <bullet.mdl>;

 

function remove_bullet()

{

  wait (1);

  ent_remove (me);

}

 

function move_players_bullet()

{

  my.pan = you.pan;

  my.tilt = you.tilt;

  my.enable_entity = on;

  my.enable_impact = on;

  my.enable_block = on;

  my.event = remove_bullet;

  while (my != null)

  {

     my.skill1 = 20 * time; // bullet speed

     my.skill2 = 0;

     my.skill3 = 0;

     move_mode = ignore_you + ignore_passable;

     ent_move (my.skill1, nullvector);

     wait (1);

  }

}

 

function players_bullet()

{

  proc_kill(4);

  while (mouse_left == 1) {wait (1);}

  ent_create (bullet_mdl, players_gun, move_players_bullet);

}

 

action third_player

{

  player = me;

  while (1)

  {

     vec_for_vertex (players_gun, my, 6); // origin of the bullet = vertex #6 on player's model

     my.skill1 = 15 * (key_w - key_s) * time;

     my.skill2 = 10 * (key_a - key_d) * time;

     vec_set (temp, my.x);

     temp.z -= 1000;

     trace_mode = ignore_me + ignore_passable + use_box;

     my.skill3 = -trace (my.x, temp);

     my.pan -= 5 * mouse_force.x;

     if (key_w + key_s > 0) // walking

     {

          ent_cycle("walk", my.skill46);

          my.skill46 += 10 * time;

          my.skill46 %= 100;

     }

     else // standing

     {

          ent_cycle("idle", my.skill46);

          my.skill46 += 2 * time;

          my.skill46 %= 100;

     }

     if (mouse_left == 1)

     {

          players_bullet();

     }

     move_mode = ignore_passable + ignore_passents + glide;

     ent_move(my.skill1, nullvector);

     camera.x = player.x - 200 * cos(player.pan);

     camera.y = player.y - 200 * sin(player.pan);

     camera.z = player.z + 200;

     camera.pan = player.pan;

     camera.tilt = -30;

     wait (1);

  }

}

 

aum36_shot12

 

 

Q: I use your car scripts as a base for my driving script, but I ran into trouble with handling slopes and aligning the vehicle to slopes. Can you help?

A: Include these lines of code in the while loop that moves the cars.

 

temp.tilt = 0;

temp.roll = 0;

temp.pan = -my.pan;

vec_rotate(normal, temp);

temp.tilt = -asin(normal.x);

temp.roll = -asin(normal.y);

my.tilt += 0.1 * ang(temp.tilt - my.tilt); // play with 0.1

my.roll += 0.1 * ang(temp.roll - my.roll); // play with 0.1