Most asked questions |
Top Previous Next |
Q: In Aum 21 the tanks have no gravity and if they are up in the air they will not go down the bottom. I know that this code was written for A5 but I'm trying to get it to work for A6; can you help? A: Use the project from Aum36's faq as a base; it includes gravity, as well as slope alignment for a car.
Q: I was wondering if you could show me how to set up a rotating camera? Say you are in a room and you press 's' to start the camera rotating in around 360 degrees and then press 's' to stop it. A: Use the code below:
var camera_mode = 0;var rotation_speed = 1.5; view rotating_camera{}
starter set_camera() { sleep (1); // wait a bit more rotating_camera.pos_x = 0; rotating_camera.pos_y = 0; rotating_camera.size_x = screen_size.x; rotating_camera.size_y = screen_size.y; }
function switch_cameras() { if (player == null) {return;} camera_mode += 1; if (camera_mode %2 == 1) // rotating camera? { rotating_camera.x = player.x; rotating_camera.y = player.y; rotating_camera.z = player.z; rotating_camera.pan = player.pan; rotating_camera.tilt = player.tilt; rotating_camera.roll = player.roll; rotating_camera.visible = on; camera.visible = off; while (camera_mode % 2 == 1) { rotating_camera.pan += rotation_speed * time; wait (1); } } else { rotating_camera.visible = off; camera.visible = on; } }
on_s = switch_cameras;
Q: I want to determine exactly where the bullet hits the entity. How can I get the closest vertex of the model? A: Use the code below:
action enemy // attach this action to your enemy model
function compute_shot_pos() { var temp_vertex = 0; var hit_vertex = 0; var index = 1; var temp_dist = 0; var min_dist = 10000; // set to a big value on purpose vec_set(bullet_pos, you.pos); // store bullet's coords before they get lost (before the bullet disappears) my.event = null; // don't react to other bullets from now on wait (1); // now we can wait for a frame while (index < ent_vertices(my)) // get the number of vertices { vec_for_vertex (temp_vertex, my, index); // store the coordinates of the current vertex in temp_vertex temp_dist = vec_dist(bullet_pos.x, temp_vertex.x); // compute the distance from the vertex to the impact coordinates if (temp_dist < min_dist) // if we have got a tiny value { min_dist = temp_dist; // then this will be the closest vertex, at least for now hit_vertex = index; // and we store the index } index += 1; // check the next vertex } my.event = compute_shot_pos; // the loop has ended, start reacting to other bullets from now on // hit_vertex contains the closest vertex number now }
Q: I'd like to have a panel that can be closed by clicking a small "X" in the upper right corner. Is this possible? A: Sure. Use the code below:
bmap mypanel_pcx = <mypanel.pcx>;
function close_panel;
panel mypanel_pan { bmap = mypanel_pcx; layer = 20; pos_x = 250; pos_y = 50; flags = overlay, refresh, visible; on_click = close_panel; }
function close_panel() { if ((pointer.x > mypanel_pan.pos_x + bmap_width(mypanel_pcx) - 10) && (pointer.y < mypanel_pan.pos_y + 10)) // the "X" has 10x10 pixels { mypanel_pan.visible = off; } }
Q: How can I create a cone of particles? A: Use the code below:
bmap effect_tga = <effect.tga>; function particle_cone(); function fade_particles();
action cone { my.invisible = on; my.passable = on; while(1) { effect(particle_cone, 20 * time, my.x, nullvector); wait(1); } }
function particle_cone() { temp.x = random(10) - 5; temp.y = random(10) - 5; temp.z = random(5) + 5; vec_set(my.vel_x,temp); my.bmap = effect_tga; my.size = 2.5; my.flare = on; my.bright = on; my.move = on; my.streak = on; // if your engine version supports it my.alpha = 80; my.lifespan = 50; my.function = fade_particles; }
function fade_particles() { my.alpha -= 2 * time; if(my.alpha < 0) // not really needed { my.lifespan = 0; } }
Q: How can I smoothly fade one view into another? A: Use the code below:
view second_camera{}
action set_second_camera // place any entity in the level and set its proper position and orientation { my.invisible = on; my.passable = on; wait (3); second_camera.pos_x = 0; second_camera.pos_y = 0; second_camera.size_x = screen_size.x; second_camera.size_y = screen_size.y; second_camera.alpha = 0; second_camera.transparent = on; camera.alpha = 100; camera.transparent = 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 toggle_cameras() { second_camera.visible = on; while (second_camera.alpha < 99) { second_camera.alpha += 2 * time; camera.alpha -= 2 * time; wait (1); } camera.visible = off; second_camera.transparent = off; }
on_t = toggle_cameras;
Q: How can I replace all the "a" characters in a string with "b" characters? A: Use the example below:
var number_of_characters; var string_index; string initial_str; string replaced_str; string backup_str;
text tester_txt { layer = 200; string = replaced_str; flags = visible; }
function replace_characters() { str_cpy(initial_str, "Mary is an awesome painter"); number_of_characters = str_len(initial_str); string_index = 0; str_cpy(replaced_str, ""); while (string_index < number_of_characters) { str_cpy (backup_str, initial_str); str_clip(backup_str, string_index); str_trunc(backup_str, number_of_characters - string_index - 1); if (str_cmpi(backup_str, "a") == 1) // found an "a"? { str_cat(replaced_str, "b"); // replace it with a "b" } else { str_cat(replaced_str, backup_str); // keep the current letter } string_index += 1; } }
on_r = replace_characters;
Q: I'd like to be able to create objects (trees) at runtime and place them in front of the player. How can I do that? A: Use this example:
string tree_mdl = <tree.mdl>;
function create_tree() { wait (1); vec_set (temp.x, my.x); temp.z -= 10000; trace_mode = ignore_me + ignore_sprites + ignore_models + use_box; my.z -= trace (my.pos, temp) + 20; }
function place_trees() { temp.x = 200; // place the trees 200 quants in front of the player temp.y = 0; temp.z = 0; vec_rotate (temp, player.pan); vec_add (temp, player.x); ent_create(tree_mdl, temp.x, create_tree); // create the tree }
on_p = place_trees;
|