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