Most asked questions

Top  Previous  Next

Q: I use your text engine from Morrowing. How can I have a different number of answers to choose from (1, 2, 3, or 4 answers)? Your code works fine, but I can’t have more than 2 answers at once.
A: Create a panel with 4 buttons and change its pos_y depending on how many buttons (answers) you want to show. A bigger pos_y value will hide the lower buttons and thus will give the player access to fewer answers. Don't forget to hide the texts that aren't supposed to show up.

 

aum50_faq1

 

Q: How can I show this message in my game: "Hello guardian, who are you?". The message must appear when I click an entity.
A: Use the following example:

 

text question_txt
{
       layer = 25;
       pos_x = 200;
       pos_y = 25;
       font = _a4font;
       string = "Hello guardian, who are you?";
}

 

function ask_question()
{
       question_txt.visible = on;
       sleep (3); // display the question for 3 seconds
       question_txt.visible = off;
}
 
action prisoner
{
       my.enable_click = on;
       my.event = ask_question;
}

 

aum50_faq2

 

Q: How can I find the distance from mouse_ent to the camera?
A: Use this snippet:

 

string distance_str[6];
string displayed_str[30];

 

text distance_txt
{
       layer = 25;
       pos_x = 10;
       pos_y = 15;
       font = _a4font;
       flags = visible;
}

 

starter mouse_distance()
{
       var distance_to_camera;
       mouse_range = 10000; // the entities are sensitive to mouse touching and clicking up to 10,000 quants
       while (1)
       {
               if (mouse_ent != null) // the mouse was placed over an entity?
               {
                       distance_to_camera = vec_dist(mouse_ent.x, camera.x); // then compute the distance to it
                       str_for_num(distance_str, distance_to_camera);
               }
               else
               {
                       str_cpy(distance_str, "+++");
               }
               str_cpy(displayed_str, "Distance to camera: ");
               str_cat(displayed_str, distance_str);
               distance_txt.string = displayed_str;
               wait (1);
       }
}

 

aum50_faq3

 

Q: I have tried to create a dll but I can't use the function inside it; I keep getting this error message: “function not found in dll” although the function is there. What should I do?
A: Copy your dll to the \acknex_plugins folder that exists inside your 3DGS folder (create that folder if you don't have it).

 

Q: How can I have a weapon (in the first person mode) that affects the amount of light in the level?
A: Use the code below:

 

define enemy_health skill48; // put your own skill here

 

string mp40_mdl = <mp40.mdl>;
string bullet_mdl = <bullet.mdl>;

 

sound bullet_wav = <bullet.wav>;

 

function remove_bullet()
{
       wait (1);
       if (you != null) // hit an entity
       {
               you.enemy_health -= 30; // remove 30 health points from the enemies
       }
       ent_remove (my);
}

 

function move_players_bullet()
{
       my.pan = camera.pan; // the bullet and the player (the camera) have the same pan angle
       my.passable = on; // at first
       my.tilt = camera.tilt; // and tilt angle
       my.enable_entity = on; // the bullet is sensitive to other entities
       my.enable_impact = on;
       my.enable_block = on; // and to level blocks
       my.event = remove_bullet;
       while (my != null)
       {
               if (vec_dist (you.x, my.x) > 30) {my.passable = off;}
               my.skill1 = 100 * time; // bullet speed
               my.skill2 = 0;
               my.skill3 = 0;
               move_mode = ignore_you + ignore_passable;
               ent_move (my.skill1, nullvector);
               wait (1);
       }
}

 

function players_weapon()
{
       var bullet_start;
       while (1)
       {
               my.pan = camera.pan;
               my.x = camera.x + 20 * cos(camera.pan) + 13 * sin(camera.pan); // place the weapon 20 quants in front of the camera
               my.y = camera.y + 20 * sin(camera.pan) - 13 * cos(camera.pan); // 13 quants to the right
               my.z = camera.z - 12; // and 12 quants below the camera
               my.tilt = camera.tilt;
               vec_for_vertex(bullet_start, my, 30); // get the position for the weapon vertex that will generate the bullet
               if ((mouse_left == 1) && (total_frames % 10 == 1)) // fire every 10 frames
               {
                       snd_play (bullet_wav, 50, 0);
                       ent_create (bullet_mdl, bullet_start.x, move_players_bullet);
               }
               my.lightrange = 300; // these lines make the weapon emit light
               my.lightred = 100;
               my.lightgreen = 100;
               my.lightblue = 200;
               wait (1);
       }
}

 

action my_weapon
{
       fps_max = 60;
       my.passable = on;
       while (player == null) {wait (1);}
       while (vec_dist (player.x, my.x) > 70)
       {
               my.pan += 3 * time;
               wait (1);
       }
       ent_remove (my);
       ent_create (mp40_mdl, camera.x, players_weapon);
}

 

Q: I'd like to have a weapon that needs to be reloaded after firing 30 bullets, using ammo packs. Can you help?
A: Use this example:

 

var number_of_bullets = 30;
var ammo_available = 60;

 

define enemy_health skill48; // put your own skill here

 

string mp40_mdl = <mp40.mdl>;
string bullet_mdl = <bullet.mdl>;

 

sound bullet_wav = <bullet.wav>;
sound reload_wav = <reload.wav>;

 

function remove_bullet()
{
       wait (1);
       if (you != null) // hit an entity
       {
               you.enemy_health -= 30; // remove 30 health points from the enemies
       }
       ent_remove (my);
}

 

function move_players_bullet()
{
       my.pan = camera.pan; // the bullet and the player (the camera) have the same pan angle
       my.passable = on; // at first
       my.tilt = camera.tilt; // and tilt angle
       my.enable_entity = on; // the bullet is sensitive to other entities
       my.enable_impact = on;
       my.enable_block = on; // and to level blocks
       my.event = remove_bullet;
       while (my != null)
       {
               if (vec_dist (you.x, my.x) > 30) {my.passable = off;}
               my.skill1 = 100 * time; // bullet speed
               my.skill2 = 0;
               my.skill3 = 0;
               move_mode = ignore_you + ignore_passable;
               ent_move (my.skill1, nullvector);
               wait (1);
       }
}

 

function players_weapon()
{
       var bullet_start;
       while (1)
       {
               my.pan = camera.pan;
               my.tilt = camera.tilt;
               my.x = camera.x + 20 * cos(camera.pan) + 13 * sin(camera.pan); // place the weapon 20 quants in front of the camera
               my.y = camera.y + 20 * sin(camera.pan) - 13 * cos(camera.pan); // 13 quants to the right
               my.z = camera.z - 12; // and 12 quants below the camera
               vec_for_vertex(bullet_start, my, 30); // get the position for the weapon vertex that will generate the bullet
               if ((mouse_left == 1) && (total_frames % 10 == 1) && (number_of_bullets > 0)) // fire every 10 frames (6 bullets a second with fps_max = 60)
               {
                       snd_play (bullet_wav, 50, 0);
                       ent_create (bullet_mdl, bullet_start.x, move_players_bullet);
                       number_of_bullets -= 1;
                       if (number_of_bullets == 0) // no more bullets?
                       {
                               while (key_r == 0) // wait until the player has pressed the "R" key
                               {
                                       my.pan = camera.pan;
                                       my.tilt = camera.tilt;
                                       my.x = camera.x + 20 * cos(camera.pan) + 13 * sin(camera.pan); // place the weapon 20 quants in front of the camera
                                       my.y = camera.y + 20 * sin(camera.pan) - 13 * cos(camera.pan); // 13 quants to the right
                                       my.z = camera.z - 12; // and 12 quants below the camera
                                       wait (1);
                               }
                               // play your "reload" weapon animation here
                               while (key_r == 1) {wait (1);} // wait until the player has released the "R" key
                               if (ammo_available > 0)
                               {
                                       ammo_available -= 30;
                                       number_of_bullets = 30;
                                       snd_play (reload_wav, 50, 0);
                               }
                       }
               }
               wait (1);
       }
}

 

action my_weapon
{
       fps_max = 60;
       my.passable = on;
       while (player == null) {wait (1);}
       while (vec_dist (player.x, my.x) > 70)
       {
               my.pan += 3 * time;
               wait (1);
       }
       ent_remove (my);
       ent_create (mp40_mdl, camera.x, players_weapon);
}

 

action ammo_packs
{
       my.passable = on;
       while (player == null) {wait (1);}
       while (vec_dist (player.x, my.x) > 70)
       {
               my.pan += 3 * time;
               wait (1);
       }
       ent_remove (my);
       ammo_available += 30; // add more ammo
}

 

Q: How can I tell if a certain model exists in the game's folder?
A: Ent_create returns zero if the model isn't available; use this example:

 

var create_result;

 

panel result_pan
{
       layer = 15;
       digits = 5, 15, 6, _a4font, 1, create_result;
       flags = overlay, refresh, visible;
}

 

function some_function()
{
       wait (1);
}

 

starter create_something()
{
       warn_level = 0; // don't display any error message
       sleep (2);
       create_result = ent_create ("mp40.mdl", camera.x, some_function);
}

 

Q: How can I pass an entity and the RGB colors as parameters? I'd like to create several colored entities using the same model.
A: Take a look here:

 

function colored_entities(entity, r, g, b)
{
       my = entity;
       my.light = on;
       my.lightrange = 0;
       my.red = r;
       my.green = g;
       my.blue = b;
}

 

action test_blue
{
       colored_entities(my, 50, 50, 200); // use any other entity name here
}

 

action test_red
{
       colored_entities(my, 250, 50, 50); // use any other entity name here
}

 

aum50_faq4

 

Q: How can I make it so that when I touch my entity, it gives me this message: "Hi! I am darth vader"?
A: Use this example:

 

text darth_txt
{
       layer = 15;
       pos_x = 200;
       pos_y = 5;
       font = _a4font;
       string = "Hi! I am darth vader";
}

 

function say_line()
{
       darth_txt.visible = on;
       sleep (2); // display the line for 2 seconds
       darth_txt.visible = off;
}
 
action darth_vader
{
       my.enable_touch = on;
       my.event = say_line;
}