That's all of the code I'm using

Code:
 ////////////////////////////////////////////////////////////////////////
// A6 main wdl:
// Created by WED.
////////////////////////////////////////////////////////////////////////

var vertex_dist[1090];
var hit_coords;
var rocket_speed;

//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
// The PATH keyword gives directories where template files can be found.
path "C:\\Program Files\\GStudio7\\template_6"; // Path to A6 templates directory
path "C:\\Program Files\\GStudio7\\template_6\\code"; // Path to A6 template code subdirectory
path "C:\\Program Files\\GStudio7\\template_6\\images"; // Path to A6 template image subdirectory
path "C:\\Program Files\\GStudio7\\template_6\\sounds"; // Path to A6 template sound subdirectory
path "C:\\Program Files\\GStudio7\\template_6\\models"; // Path to A6 template model subdirectory

/////////////////////////////////////////////////////////////////
// Filename of the starting level.
string level_str = <utgtestlvl.WMB>; // give file names in angular brackets

////////////////////////////////////////////////////////////////////////////
// Included files
include <gid01.wdl>; // global ids
include <display00.wdl>; // basic display settings

var terrain_chunk = 0;



/////////////////////////////////////////////////////////////////
// Desc: The main() function is started at game start
function main()
{
enable_mouse = ON;
mouse_pointer = 2;
// set some common flags and variables
// freeze all entity functions
freeze_mode = 1;
// no level has been loaded yet...
gid01_level_state = gid01_level_not_loaded;

// entry: Warning Level (0,1, or 2)
// entry_help: Sets sensitivity to warnings (0 = none, 1 = some, 2 = all).
warn_level = 2; // announce bad texture sizes and bad wdl code


// entry: Starting Mouse Mode (0, 1, or 2)
mouse_mode = 0;

// wait 3 frames (for triple buffering) until it is flipped to the foreground
wait(3);

// now load the level
level_load(level_str);

wait(2); // let level load
// level should be loaded at this point...
gid01_level_state = gid01_level_loaded;

//+++ load starting values


// un-freeze the game
freeze_mode = 0;

// save start of game here
wait(6); // allow time for functions that wait for "gid01_level_loaded" to load
file_delete("start0.SAV"); // remove any old savefile
wait(1);
if( game_save("start",0,SV_ALL) <= 0)
{
diag("\nWARNING! main - Cannot save 'start' of level (ignore on restarts).");
}
else
{
diag("\nWDL: main - Game 'start' saved.");
}


// main game loop
while(1)
{
if(gid01_level_state != gid01_level_loaded)
{
freeze_mode = 1; // pause the game
while(gid01_level_state != gid01_level_loaded) { wait(1); }
freeze_mode = 0; // resume the game
}
wait(1);
}

}


// Desc: this is the function used to restart the game.
function main_restart_game()
{
// wait 3 frames (for triple buffering) until it is flipped to the foreground
wait(3);

// freeze the game
freeze_mode = 1;

if( game_load("start",0) <= 0)
{
diag("\nWARNING! main_restart_game - Cannot load 'start' of level.");
}
else
{
diag("\nWDL: main_restart_game - Game 'start' loaded");
}

// un-freeze the game
freeze_mode = 0;
}


// Desc: this is the function used to quit the game.
function main_quit()
{
//+++ // save global skills & strings
exit;
}

/////////////////////////////////////////////////////////////////
// The following definitions are for the pro edition window composer
// to define the start and exit window of the application.
WINDOW WINSTART
{
TITLE "3D GameStudio";
SIZE 480,320;
MODE IMAGE; //STANDARD;
BG_COLOR RGB(240,240,240);
FRAME FTYP1,0,0,480,320;
// BUTTON BUTTON_START,SYS_DEFAULT,"Start",400,288,72,24;
BUTTON BUTTON_QUIT,SYS_DEFAULT,"Abort",400,288,72,24;
TEXT_STDOUT "Arial",RGB(0,0,0),10,10,460,280;
}

/* no exit window at all..
WINDOW WINEND
{
TITLE "Finished";
SIZE 540,320;
MODE STANDARD;
BG_COLOR RGB(0,0,0);
TEXT_STDOUT "",RGB(255,40,40),10,20,520,270;

SET FONT "",RGB(0,255,255);
TEXT "Any key to exit",10,270;
}*/


/////////////////////////////////////////////////////////////////
//INCLUDE <debug.wdl>;


/////////////////////Deform Terrain Test Code//////////////////////
//////////////////////////////////////////////////////////////////////////

sound shockwave_wav = <shockwave.wav>;
sound rocket_wav = <rocket.wav>;

//////////////////////////////////////////////////////////////////////////

bmap cross_pcx = <cross.pcx>;

//////////////////////////////////////////////////////////////////////////

entity* rocket1;
entity* terrain1;

//////////////////////////////////////////////////////////////////////////




string rocket_mdl = <rocket.mdl>;
string explosion_pcx = <explo+6.pcx>;

/////////////////////////////////////////////////////////////////////////

function create_crate();
function deform(vertex_number);
function players_bullet();
function move_players_bullet();
function remove_bullet();
function explosion_sprite();

/////////////////////////////////////////////////////////////////////////

panel cross_pan
{
bmap = cross_pcx;
pos_x = 393;
pos_y = 293;
layer = 15;
flags = overlay, refresh, visible;
}

/////////////////////////////////////////////////////////////////////////


action terrain
{
terrain1 = my; // used by vec_for_mesh and vec_to_mesh
my.enable_impact = on; // triggers events if it is hit by rockets
my.event = create_crate;
}

function create_crate()
{
if (you.skill40 != 12345) // not a rocket?
{
return; // then get out of here
}
vec_set (hit_coords, rocket1.x); // store rocket's coords before they get lost
wait (1);
my.skill1 = 1; // set the index to 1
my.skill2 = 50000; // set a huge distance at first; skill2 will get smaller and smaller for the vertices that are closer and closer to the explosion
while (my.skill1 < 1090) // go through all the vertices (1...1089) on the 33x33 grid (not using vertex_dist[0])
{
vec_for_mesh (temp, terrain1, my.skill1); // sets temp to vertex1, 2, 3...
vertex_dist [my.skill1] = vec_dist (hit_coords.x, temp.x); // measures the distance between temp (vertex1, 2, 3...) and hit_coords
if (vertex_dist[my.skill1] < my.skill2) // this vertex is closer than the others?
{
my.skill2 = vertex_dist[my.skill1]; // then it might be the one, so store the distance
my.skill3 = my.skill1; // and its index as well
}
my.skill1 += 1; // move on to the following vertex
}
deform (my.skill3);
}

function deform(vertex_number)
{
vec_for_mesh(temp, terrain1, vertex_number);
vec_scale (temp, 0.7);
vec_to_mesh (temp, terrain1, vertex_number);
ent_fixnormals (my, my.frame); // recalculate the normal vectors, not really needed
c_updatehull(my,10);
}

action player_1st
{
my.invisible = on; // no need to see the player model in 1st person view
while (1)
{
my.skill1 = 3 * (key_w - key_s) * time; // move with w / s
my.skill2 = 2 * (key_a - key_d) * time; // strafe with a / d
vec_set (temp, my.x);
temp.z -= 1000;
trace_mode = ignore_me + ignore_passable + use_box;
my.skill3 = -trace (my.x, temp);
my.pan -= 3 * mouse_force.x;
my.tilt += 3 * mouse_force.y;
if (mouse_left == 1)
{
players_bullet();
}
move_mode = ignore_passable + ignore_passents + glide;
ent_move(my.skill1, nullvector);
wait (1);
camera.x = my.x;
camera.y = my.y;
camera.z = my.z + 30;
camera.pan = my.pan;
camera.tilt = my.tilt;
}
}

function players_bullet()
{
proc_kill(4); // only one instance of this function should run
if (rocket1 != null) {return;} // don't allow more than 1 rocket to be fired at a certain moment
while (mouse_left == 1) {wait (1);} // disable auto fire
snd_play (rocket_wav, 50, 0);
rocket1 = ent_create (rocket_mdl, camera.x, move_players_bullet);
}

function move_players_bullet()
{
var distance_covered = 0;
my.pan = you.pan; // the bullet and the player have the same pan angle
my.tilt = you.tilt; // and tilt angle
my.enable_entity = on; // the bullet is sensitive to other entities
my.enable_impact = on;
my.enable_block = on; // and to level blocks
my.event = remove_bullet;
my.skill2 = 0;
my.skill3 = 0;
my.skill40 = 12345; // unique identifier for the rocket
while (my.invisible == off)
{
my.skill1 = 30 * time; // bullet speed
move_mode = ignore_you + ignore_passable;
distance_covered += ent_move (my.skill1, nullvector);
if (distance_covered > 100)
{
my.skill3 -= 1 * time;
}
wait (1);
}
}

function remove_bullet()
{
beep();
my.invisible = on;
my.passable = on;
ent_playsound (my, shockwave_wav, 200);
//ent_create(explosion_pcx, my.pos, explosion_sprite);
wait (1);
ent_remove (me);
}

function explosion_sprite()
{
wait (1);
my.scale_x = 1.5;
my.scale_y = my.scale_x;
my.passable = on;
my.flare = on;
my.bright = on;
my.ambient = 100;
while (my.frame < 7)
{
my.frame += 1 * time;
wait (1);
}
ent_remove (my);
}




-Johnny Thrash