take a look at aum 57
there is a nice example for an ai

Code:
action my_enemy // attach this action to your enemies
{
	var idle_percentage = 0;
	var run_percentage = 0;
	var death_percentage = 0;
	var content_right; // tracks the content in front of the player
	var content_left; // tracks the content in front of the player
	my.polygon = on; // use accurate collision detection
	my.health = 100;
	my.enable_impact = on; // the enemy is sensitive to impact with player's bullets
	my.event = got_shot; // and runs this function when it is hit
	my.status = idle; // that's the same thing with my.skill1 = 1; (really!)
	while (my.status != dead) // this loop will run for as long as my.skill1 isn't equal to 3
	{
		if (my.status == idle) // hanging around?
		{
			ent_animate(my, "stand", idle_percentage, anm_cycle); // play the "stand" aka idle animation
			idle_percentage += 3 * time; // "3" controls the animation speed
			if (vec_dist (player.x, my.x) < 1000) // the player has come too close?
			{
				// scanned in the direction of the pan angle and detected the player?
				if ((c_scan(my.x, my.pan, vector(120, 60, 1000), ignore_me) > 0) && (you == player))
				{
					my.status = attacking; // then attack the player even if it hasn't fired at the enemy yet
				}
			}
		}
		if (my.status == attacking) // shooting at the player?
		{
			// the road is clear? then rotate the enemy towards the player
			if (c_content (content_right.x, 0) + c_content (content_left.x, 0) == 2) 
			{
				vec_set(temp, player.x); 
				vec_sub(temp,my.x); 
				vec_to_angle(my.pan, temp); // turn the enemy towards the player
			}
			if (vec_dist (player.x, my.x) > 500)
			{
				vec_set(content_right, vector(50, -20, -15));
				vec_rotate(content_right, my.pan);
				vec_add(content_right.x, my.x);
				if (c_content (content_right.x, 0) != 1) // this area isn't clear?
				{
					my.pan += 5 * time; // then rotate the enemy, allowing it to avoid the obstacle
				}
				vec_set(content_left, vector(50, 20, -15));
				vec_rotate(content_left, my.pan);
				vec_add(content_left.x, my.x);
				if (c_content (content_left.x, 0) != 1) // this area isn't clear?
				{
					my.pan -= 5 * time; // then rotate the enemy, allowing it to avoid the obstacle
				}
				c_move (my, vector(10 * time, 0, 0), nullvector, glide);
				ent_animate(my, "run", run_percentage, anm_cycle); // play the "run" animation
				run_percentage += 6 * time; // "6" controls the animation speed
			}
			else
			{
				ent_animate(my, "alert", 100, null); // use the last frame from the "alert" animation here
			}
			if ((total_frames % 80) == 1) // fire a bullet each second
			{
				vec_for_vertex (temp, my, 8);
				// create the bullet at enemy's position and attach it the "move_enemy_bullets" function
				ent_create (bullet_mdl, temp, move_enemy_bullets); 
			}
			if (vec_dist (player.x, my.x) > 1500) // the player has moved far away from the enemy?
			{
				my.status = idle; // then switch to "idle"
			}
		}
		wait (1);
	}
	while (death_percentage < 100) // the loop runs until the "death" animation percentage reaches 100%	
	{
		ent_animate(my, "deatha", death_percentage, null); // play the "die" animation only once
		death_percentage += 3 * time; // "3" controls the animation speed
		wait (1);
	}
	my.passable = on; // allow the player to pass through the corpse now
}