Q: How can I display the status of a flag using the instant debugger from Aum25?
A: Click here to download the modified idebug.wdl file.

Q: I would like to have a much bigger size digits for my Ammo / Health / Armor panel (original digfont.pcx). How can I achieve such a thing?
A: Resize the font in any painting program from 384 x 64 to 1536 x 256 pixels (400 %), save it as digfont2.pcx and then paste the following code inside messages.wdl:

font digitbig_font = <digfont2.pcx>, 48, 64;

panel my_panel
{
pos_x = 20;
pos_y = 20;
digits = 0, 380, 3, digitbig_font, 1, show_ammo;
digits = 200, 380, 3, digitbig_font, 1, show_health;
digits = 400, 380, 3, digitbig_font, 1, show_armor;
flags = transparent, refresh, visible;
}

starter hide_old_panel()
{
while (1)
{
game_panel.visible = off;
wait (1);
}
}

Q: How can I switch and fade between two cameras?
A: You need to define a new "view". Place any model in your level, set its angle and position and then attach it the "new_view" action. Press "S" to switch the cameras.

view second_camera
{
layer = 10;
pos_x = 0;
pos_y = 0;
}

action new_view
{
my.invisible = on;
my.passable = on;
second_camera.x = my.x;
second_camera.y = my.y;
second_camera.z = my.z;
second_camera.pan = my.pan;
second_camera.tilt = my.tilt;
second_camera.roll = my.roll;
}

function switch_cameras()
{
camera.alpha = 100; // no transparency for this camera yet
second_camera.alpha = 0; // completely transparent
camera.transparent = on;
second_camera.transparent = on;
second_camera.size_x = screen_size.x;
second_camera.size_y = screen_size.y;
second_camera.visible = on;
while (camera.alpha > 5)
{
camera.alpha -= 3 * time;
second_camera.alpha += 3 * time;
wait (1);
}
camera.visible = off;
second_camera.transparent = off;
}

on_s = switch_cameras;

Q: I have a game over screen that currently fades in and out until the user presses a key. I was wondering if it was possible to dynamically scale the bmap so that it gave the impression of it going from small to big and back again.
A: You need A6.21 or a newer version of the engine to do that. Use the code below.

bmap gameover_pcx = <gameover.pcx>;

panel gameover_pan
{
bmap = gameover_pcx;
pos_x = 0;
pos_y = 0;
flags = overlay, refresh, visible;
}

starter adjust_panel()
{
while (1)
{
while (gameover_pan.scale_x > 0.2)
{
gameover_pan.scale_x -= 0.01 * time;
gameover_pan.scale_y -= 0.01 * time;
gameover_pan.pos_x = (1 - gameover_pan.scale_x) * bmap_width (gameover_pcx) / 2;
gameover_pan.pos_y = (1 - gameover_pan.scale_y) * bmap_height (gameover_pcx) / 2;
wait (1);
}
while (gameover_pan.scale_x < 1)
{
gameover_pan.scale_x += 0.01 * time;
gameover_pan.scale_y += 0.01 * time;
gameover_pan.pos_x = (1 - gameover_pan.scale_x) * bmap_width (gameover_pcx) / 2;
gameover_pan.pos_y = (1 - gameover_pan.scale_y) * bmap_height (gameover_pcx) / 2;
wait (1);
}
wait (1);
}
}

Q: Has somebody done any working example playing an avi file on a mdl entity?
A: Attach the action "movie_on_model" to your model. Press "M" to play the movie.

action movie_on_model
{
while (key_m == 0) {wait (1);} // press "M" to play the movie
media_play ("highway.avi", bmap_for_entity (my, 0), 100);
}

Q: How can I make cursor visible on a panel and allow user to enter string in it?
A: You have to use a text and a panel, just like in the example below.

bmap input_pcx = <input.pcx>;

string temp_str = " "; // 20 characters

function input_text();

panel input_pan
{
bmap = input_pcx;
pos_x = 0;
pos_y = 0;
layer = 10;
on_click = input_text;
flags = refresh, d3d, visible;
}

text my_txt
{
layer = 20;
pos_x = 30;
pos_y = 35;
font = standard_font;
string = temp_str;
}

text dummy_txt // displays the text that was input
{
layer = 20;
pos_x = 15;
pos_y = 450;
font = standard_font;
flags = visible;
}

function input_text()
{
if ((mouse_pos.x > 7) && (mouse_pos.x < 215) && (mouse_pos.y > 20) && (mouse_pos.y < 45))
{
my_txt.visible = on;
str_cpy (temp_str, "");
inkey temp_str;
my_txt.visible = off;
// got the text in temp_str here
dummy_txt.string = temp_str; // show the input text
// .................
}
}

Q: I would like a code to attach to all decorative entities (plants, trees), so that I can place them in Wed and the code will have them move down vertically so that they are on the terrain
A: Attach the action below to every plant, tree, etc.

action smart_vegetation
{
my.skill1 = random (5) + 1;
wait (my.skill1);
vec_set (temp, my.pos);
temp.z -= 3000;
trace_mode = ignore_me + ignore_sprites + ignore_models + use_box;
my.z -= trace (my.pos, temp) + 10; // set the correct height (the bottom of the model will sink 10 quants into the soil).
}

Q: How can I make a light move throughout a level? I want the light to follow a certain path.
A: Create a path named "lightpath", place a model near it and attach it the "moving_light" action.

action moving_light
{
d3d_lightres = 1;
var light_pos;
var current_speed;
var distance;
var acc_speed;
var init_speed = 3; // movement speed
ent_path("lightpath"); // walk on this path
ent_waypoint(light_pos, 1);
while (1)
{
my.lightrange = 300;
my.lightred = 200;
my.lightgreen = 200;
my.lightblue = 200;
temp.x = light_pos.x - my.x;
temp.y = light_pos.y - my.y;
temp.z = 0;
if (vec_to_angle (my_angle, temp) < 20)
{
ent_nextpoint(light_pos);
}
my.z += 0.1 * (light_pos.z - my.z) * time;
current_speed = init_speed;
my_angle.pan = ang(my_angle.pan - my.pan);
if (abs(my_angle.pan > 10))
{
temp = sign(my_angle.pan) * current_speed * 0.1;
}
else
{
temp = current_speed * my_angle * 0.01;
}
my.pan += temp * min(1, time);
acc_speed = acc_speed * max ((1 - time * 0.03), 0) + 0.2 * current_speed * time;
distance = acc_speed * time;
move_mode = ignore_you + ignore_push + activate_trigger + glide;
ent_move (distance, nullskill);
wait(1);
}
}

Q: I want the player to be able to load and save his position during the game. It's a short game, so a simple quick save / quick load would be enough.
A: Use the built-in quick load and quick save functions as shown below.

on_s = _save(); // quick save, press "S" to save the game

on_l = _load(); // quick load, press "L" to load the game