Q:
I use your forest script from Aum12, but I'd like the trees to be placed
beside the road. Is this possible?
A:
Use a different texture for the road and the modified forest script:
define num_trees = 100; // this forest will have 100 trees
var tree_index = 0;
var max_x = 1000;
var min_x = -1000;
var max_y = 1000;
var min_y = -1000;
var tree_pos;
string
tree1_mdl = <tree1.mdl>;
string tree2_mdl = <tree2.mdl>;
function create_tree()
{
wait (1);
my.pan = random(360);
vec_set (temp, my.x);
temp.z -= 5000;
trace_mode = ignore_me + ignore_passable + ignore_models + ignore_sprites
+ use_box;
my.z -= trace (my.x, temp) + 20; // place the tree and stick its
root in the ground (20 quants)
}
starter generate_forest()
{
sleep (1); // wait until the level is loaded
randomize(); // always generate a different forest
while (tree_index < num_trees)
{
tree_pos.x = sign(min_x) * random(abs(min_x))
+ sign(max_x) * random(abs(max_x));
tree_pos.y = sign(min_y) * random(abs(min_y))
+ sign(max_y) * random(abs(max_y));
tree_pos.z = 1000; // 1000 quants above the floor
level
tree_index += 1;
vec_set(temp.x, tree_pos.x);
temp.z -= 5000;
trace_mode = ignore_me + ignore_passable + ignore_models
+ ignore_sprites + scan_texture;
trace (tree_pos.x, temp.x);
if (str_cmpi ("grass1", tex_name))
// if the tree would be placed on the grass (and not on the road)
{
if (random(1) > 0.5)
{
ent_create
(tree1_mdl, tree_pos, create_tree); // then create tree1_mdl
}
else
{
ent_create
(tree2_mdl, tree_pos, create_tree); // or tree2_mdl
}
}
}
}

Q: I'd
like to have some particle sparks appear
where an object
makes contact with the level geometry. Can you help?
A: Use the code below as an example; it places a
sprite decal on the floor if the ball collides with it.
action my_ball
{
my.enable_block = on;
my.enable_entity = on;
my.event = ball_event;
while (1)
{
// your ball code goes here
................
wait (1);
}
}
function particle_sparks()
{
my.passable = on; // make sure that your ball ignores passable
objects (move_mode = ignore_passable)
// put your particle code here
}
function ball_event()
{
vec_set (temp, my.x);
temp.z -= 1000;
trace_mode = ignore_me;
trace (my.x, temp);
ent_create(decal_bmp, target, particle_sparks); // place a decal
sprite at the right position on the floor ("target" gives us the coordinates)
}
Q:
Just wondering if you may have a health bar script
handy.
A:
Use the code and the bitmap below it as an example:
bmap health_pcx = <health.pcx>;
panel health_pan
{
pos_x = 10;
pos_y = 10;
layer = 10;
window = 20, 10, 20, 60, health_pcx, 0, player._health;
flags = visible;
}
![]()
Q:
I don't know how to trace forward (in player's looking
direction). Is it possible to have a code that that is doing this?
A:
Use the code below:
string target_pcx = <target.pcx>;
function trace_forward()
{
var trace_coords;
vec_set(trace_coords.x, vector(1000, 0, 0)); // trace 1000 quants
in front of the player
vec_rotate(trace_coords.x, camera.pan); // rotate "temp" in
the direction (angles) given by the camera (the player)
vec_add(trace_coords.x, camera.x); // add the resulting vector
to camera's (player's) position
trace_mode = ignore_me + ignore_passable + ignore_models + ignore_sprites
+ use_box;
if (trace(player.x, trace_coords.x) > 0) // hit something?
{
ent_create (target_pcx, target.x, nullvector);
// put a small sprite where the trace hits something
// you should replace the line of code above
with your own code that is the result of the tracing operation
}
}
on_t = trace_forward;
Q:
How can I create the code for a blurred view effect that doesn't
use too many resources?
A: Use this example:
view second_camera
{
pos_x = 0;
pos_y = 0;
alpha = 40; // play with this value
flags = transparent, visible;
}
starter camera_blur()
{
camera.transparent = on;
camera.alpha = 30; // play with this value
second_camera.size_x = screen_size.x;
second_camera.size_y = screen_size.y;
while (1)
{
wait (2);
second_camera.x = camera.x;
second_camera.y = camera.y;
second_camera.z = camera.z;
second_camera.pan = camera.pan;
second_camera.tilt = camera.tilt;
second_camera.roll = camera.roll;
}
}

Q:
I can't use "sleep" to count
big time intervals because it isn't precise enough. Can I use sys_seconds
instead?
A:
Sure, use the example below:
var second_counter = 0;
starter precision_timer()
{
var temp_seconds;
while (1)
{
temp_seconds = sys_seconds;
wait (1);
if (temp_seconds != sys_seconds) // sys_seconds
has changed during the last frame
{
second_counter += 1;
// increase second_counter; use this value for your high(er) precision counter
}
}
}
panel time_pan
{
digits = 5, 15, 6, _a4font, 1, second_counter; // display the value
that is stored in second_counter
flags = refresh, visible;
}
Q:
How
can I create a simple login / password system for my game?
A: Use the code below:
bmap serial_pcx = <serial.pcx>;
string serial_str = " "; // the password can have up to 20 characters
panel serial_pan
{
bmap = serial_pcx;
flags = overlay, refresh;
layer = 15;
}
text serial_txt
{
layer = 25;
pos_x = 300;
pos_y = 275;
font = _a4font;
string = serial_str;
}
starter check_password()
{
sleep (1);
serial_pan.visible = on;
serial_txt.visible = on;
inkey(serial_str);
if (str_cmpi(serial_str, "12345") == 0) // password =
12345
{
exit;
}
else
{
serial_pan.visible = off;
serial_txt.visible = off;
beep;
// put the code that starts your game here
}
}
Q:
I'd like to have only 3 objects appear randomly in 9 predefined positions. How
can I do that?
A: Place 9 objects in the level
and attach them the action below:
var score = 0;
var objects_placed = 0;
starter randomize_numbers()
{
randomize();
}
action three_objects_only
{
my.skill1 = random(1) + 0.1; // generate a random number between
0.1 and 1.1
sleep (my.skill1); // wait 0.1 to 1.1 seconds
my.passable = on;
objects_placed += 1;
if (objects_placed > 3)
{
ent_remove(my);
}
else
{
while (player == null) {wait (1);} // wait until
the player is created
while (vec_dist(player.x, my.x) > 50) {wait
(1);} // wait until the player has come close to the object
ent_remove(my);
score += 10; // whatever
}
}
panel score_pan
{
layer = 15;
digits = 5, 15, 6, _a4font, 1, score;
flags = overlay, refresh, visible;
}
Q:
I'd like to see how my game performs on low end PCs, but I've only got
one PC and it is pretty fast. Is there anything
I could do about this?
A: Set the frame rate to 10...200 using the
code
below:
starter adjust_fps()
{
while (1)
{
if ((key_k == on) && (fps_max < 200)) {fps_max += 1 * time;} // press "K" to
increase the frame rate
if ((key_m == on) && (fps_max > 10)) {fps_max -= 1 * time;} // press "M" to
decrease the frame rate
wait (1);
}
}