Hey there....I don't know if this will help you but I have developed two functions to create your own waypoints using a datafile, and then replaying them using an on demand key. Check these out to see if this helps at all

Code:
function save_way_point(){  //When the ` is pressed, it will save player pan, x and y position for waypoints
	//var old_pan = 0;
	//var degree_difference = 0;
	handle_position = file_open_append("waypoint.txt");
	wait(1);
	degree_difference = Player.pan - old_pan;
	file_var_write(handle_position, player_pan);
	file_var_write(handle_position, degree_difference);
	file_var_write(handle_position, player_x);
	file_var_write(handle_position, player_y);
	file_close(handle_position);
	old_pan = Player.pan;
}

function replay_waypoints(){
	var old_x = 0;
	var old_y = 0;
	var old_pos_x = 0;
	var old_pos_y = 0;
	var difference_x = 0;
	var difference_y = 0;
	var absolute_pan = 0;
	var counter = 0;
	var border_x = 0;
	var border_y = 0;
	var time_counter = 0;
	replaying = 1;
	
	handle_position = file_open_read("waypoint.txt");
	wait(1);
	Player.pan = file_var_read(handle_position);
	absolute_pan = file_var_read(handle_position);
	Player.x = file_var_read(handle_position);	
	Player.y = file_var_read(handle_position);
	
	while(1){
		old_pos_x = player_x;
		old_pos_y = player_y;
		
		player_pan = file_var_read(handle_position);
		if(player_pan == -361){break;}
		absolute_pan = file_var_read(handle_position);
		player_x = file_var_read(handle_position);
		player_y = file_var_read(handle_position);
			
		counter = 0;
		while(counter <= 19){
			Player.pan += absolute_pan/20;			
			wait(10);
			counter +=1;
		}

		//Fail Safe Method
		difference_x = old_pos_x - player_x;
		if(difference_x < 0){border_x = 1;}  //Number is positive
		else{border_x = -1;}  //Number is negative
		difference_y = old_pos_y - player_y;
		if(difference_y < 0){border_y = 1;}  //Number is positive
		else{border_y = -1;}  //Number is negative
		
		time_counter = 0;
		while(vec_dist(Player.x, vector(player_x,player_y,Player.z)) > 10){
			c_move(Player,vector(2,0,0),vector(0,0,0),NULL);
			
			if(difference_x == 1){
				if(Player.x >= player_x + 10){Player.x = player_x;}
			}
			if(difference_x == 1){
				if(Player.x <= player_x - 10){Player.x = player_x;}
			}
			if(difference_y == 1){
				if(Player.y >= player_y + 10){Player.y = player_y;}
			}
			if(difference_y == 1){
				if(Player.y <= player_y - 10){Player.y = player_y;}
			}
			
			
			//Animate Player
			ent_animate(Player,"walk",Player.animation,anm_cycle);
			Player.animation += 0.25;
			
			//Make sure player isn't stuck in a wall
			time_counter += 1;
			if(time_counter == 5){
				old_x = Player.x;
				old_y = Player.y;
			}			
			if(time_counter >= 30){
				if(old_x == Player.x && old_y == Player.y){
					Player.x = player_x;
					Player.y = player_y;
				}
				time_counter = 0;
			}
			wait(1);
		}
		wait(1);
	}
	
	
	file_close(handle_position);
	replaying = 0;
}




Current Project: Computer Repair Simulator
https://www.computer-repair-simulator.com