Advertisement
Guest User

Untitled

a guest
May 8th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Generate all chambers in a maze-like structure inside the DS Grid
  2. for (i=1; i<chamber_amount; i++){
  3.     var xoffset = 0;
  4.     var yoffset = 0;
  5.     var tries = 0;
  6.     var max_tries = 16;
  7.     var chamber_placed = false;
  8.     var maze_error = false;
  9.     do{
  10.         tries = 0;
  11.         do{
  12.             do{
  13.                 xoffset = 0;
  14.                 yoffset = 0;
  15.                 //Pick horizontal or vertical movement
  16.                 var horizontal = choose(true, false);
  17.                 if horizontal {
  18.                     xoffset = 1;
  19.                 }else{
  20.                     yoffset = 1;
  21.                 }
  22.                 //Pick forwards or backwards
  23.                 var dir_sign = choose(-1, 1);
  24.             }until(cursor_x+xoffset*dir_sign < grid_size && cursor_y+yoffset*dir_sign < grid_size && cursor_x+xoffset*dir_sign >= 0 && cursor_y+yoffset*dir_sign >= 0); //Stay within the grid.
  25.             tries++;
  26.             //show_debug_message("Testing for CN: "+string(chamber_number)+" hor: "+string(horizontal)+" dir_sign: "+string(dir_sign)+" tries: "+string(tries));
  27.            
  28.         }until (tries >= max_tries || chamber_grid[# cursor_x+xoffset*dir_sign, cursor_y+yoffset*dir_sign] == -1);  //Try until an empty spot was found or until the maximum tries is reached.
  29.        
  30.         if (tries < max_tries){ //Escaped the loop before maximum tries was reached? Move to the new found position.
  31.             cursor_x = cursor_x+xoffset*dir_sign;
  32.             cursor_y = cursor_y+yoffset*dir_sign;
  33.             chamber_grid[# cursor_x, cursor_y] = chamber_number+1;
  34.             //show_debug_message("FOUND CN: "+string(chamber_number)+" @x "+string(cursor_x)+", y "+string(cursor_y));
  35.             chamber_number++;
  36.             chamber_placed = true;
  37.         }else{  //Otherwise back-track one spot and try again.
  38.             //var chamber_val = chamber_grid[# cursor_x, cursor_y];
  39.             //show_debug_message("CN: "+string(chamber_number)+". Max tries reached: "+string(tries)+", backtracking to CN "+string(chamber_number-1)+" from x "+string(cursor_x)+", y "+string(cursor_y));
  40.             if (chamber_grid[# cursor_x-1, cursor_y] == chamber_number-1){
  41.                 cursor_x--;
  42.             }else if (chamber_grid[# cursor_x+1, cursor_y] == chamber_number-1){
  43.                 cursor_x++;
  44.             }else if (chamber_grid[# cursor_x, cursor_y-1] == chamber_number-1){
  45.                 cursor_y--;
  46.             }else if (chamber_grid[# cursor_x, cursor_y+1] == chamber_number-1){
  47.                 cursor_y++;
  48.             }else{
  49.                 show_debug_message("Cannot backtrack..." +string(chamber_number));
  50.                 maze_error = true;
  51.             }
  52.             chamber_number--;
  53.         }
  54.     }until (chamber_placed == true || maze_error == true);
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement