Q: How can I make my player to loose energy when it comes close to another entity?
A: Here's the code:

action another_entity
{
     while (player == null) {wait (1);}
     while (1)
     {
          if (vec_dist(my.x, player.x) < 50 && player._health > 0) { player._health -= 0.5 * time; }
          wait (1);
     }
}

 
Q: When I try to build my level I get this error message: "Block outside level boundaries". What can I do?
A: Your level is bigger than 50000 quants. Click build and write -bound 100000 in "Build options". You can use values of up to 250000.
 
Q: I want to open a dll in main and then close it before the app exits. When I hit esc the app just closes, how can I catch all close messages to make sure I close the dll?
A: Use the code below as an example:

dllfunction ComputeTime(value);

function end_game();

var game_over = 0; // set it to 1 to finish the game

function main()
{
     on_esc = null; // disable the keys
     on_f10 = null; // that shut down the engine
     load_level <sarl.wmb>;
     dll_open ("timer.dll");
     while (game_over == 0)
     {
         ComputeTime(25);
         wait (1);
     }
     dll_close(dll_handle);
     exit;
}

function end_game()
{
     game_over = 1;
}

on_esc = end_game; // use the same keys
on_f10 = end_game; // to stop the game
 

Q: I know it is easy, I know it is in the manual, but can someone help me with the code to put a panel on the screen?
A: Here's your code sample:

bmap mypicture_pcx = <mypicture.pcx>;

panel mypanel_pan
{
     bmap = mypicture_pcx;
     pos_x = 10; // position on x
     pos_y = 20; // and y
     layer = 20;
     flags = overlay, refresh, d3d;
}
 

Q: When I save my model it's like it has a save snap that moves some vertices to the closest snap measurement.
A: Older model formats (including mdl, md2) save their vertex positions to a matrix of 256x256 possible coords. Use the new mdl format (high precission) when you save your model. Choose View -> Model properties and check "High Precision" before saving and you will get rid of your problem.
 

Q: How would one scale a 250x250 panel, which only contains a bitmap of the same size, 3 times its normal size at runtime?
A: Use an entity:

entity my_sprite
{
    type = <mysprite.pcx>;
    layer = 25;
    view = camera;
    x = 600;
    y = 222;
    z = 135;
    flags = visible;
}

These x y z values will show the sprite as a panel in the upper left corner. Modify the x y z values for the entity to make it appear bigger:

function increase_size()
{
    my_sprite.x = 250; // play with these values
    my_sprite.y = 19;
    my_sprite.z = -10;
}
 

Q: I have a sword and when the player reaches a certain distance near the sword he can pick it up by pressing the spacebar. Is this possible?
A: Combine the code bellow with your sword code:

action pick_up_sword
{
    while (player == null) {wait (1);}
    while (1)
    {
        if ((vec_dist (player.x, my.x < 100)) && (key_space == 1))
        {
            call your sword action / function here
        }
        wait (1);
    }
}
 

Q: I use the Sword Combat code in Aum12 for my game. Is it possible to jump forward when I press space? If I press the spacebar the player should jump a distance.
A: Replace action player_fight in the original file with this action:

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.1 * time;
                player_distance.x += 2 * time;
            }
        }
        if (key_any == 0) // the player is standing
        {
            player_distance.z = 0;
            player.skill20 = 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: I create my terrain as a combination of level geometry and heightmaps. I want to limit the vertical climbing abilities of game characters in the heightmap area of my maps by making an invisible ceiling but leaving the skysphere visible. Is this possible?
A: Use invisible level blocks; add a block in Wed, right click on it choose Properties and make it invisible.
 

Q: How would I use vec_to_mesh or vec_for_mesh to emit particles from say, three different vertices on a sword model?
A: Get the vertex coords in the action that is attached to the sword:

var vertex1;
var vertex2;
var vertex3;

action my_sword
{
    while (1)
    {
        ent_vertex(vertex1, 115); // get this value in Med
        ent_vertex(vertex2, 215); // get this value in Med
        ent_vertex(vertex3, 315); // get this value in Med
        // the rest of your sword action code
        ..........................
        wait (1);
    }
}

Place the lines below in the action that will start the particles:

effect (particle_init, 1, vertex1, normal);
effect (particle_init, 1, vertex2, normal);
effect (particle_init, 1, vertex3, normal);

function particle_init()
{
    // the function that creates the particles
}