Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Generate all chambers in a maze-like structure inside the DS Grid
- for (i=1; i<chamber_amount; i++){
- var xoffset = 0;
- var yoffset = 0;
- var tries = 0;
- var max_tries = 16;
- var chamber_placed = false;
- var maze_error = false;
- do{
- tries = 0;
- do{
- do{
- xoffset = 0;
- yoffset = 0;
- //Pick horizontal or vertical movement
- var horizontal = choose(true, false);
- if horizontal {
- xoffset = 1;
- }else{
- yoffset = 1;
- }
- //Pick forwards or backwards
- var dir_sign = choose(-1, 1);
- }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.
- tries++;
- //show_debug_message("Testing for CN: "+string(chamber_number)+" hor: "+string(horizontal)+" dir_sign: "+string(dir_sign)+" tries: "+string(tries));
- }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.
- if (tries < max_tries){ //Escaped the loop before maximum tries was reached? Move to the new found position.
- cursor_x = cursor_x+xoffset*dir_sign;
- cursor_y = cursor_y+yoffset*dir_sign;
- chamber_grid[# cursor_x, cursor_y] = chamber_number+1;
- //show_debug_message("FOUND CN: "+string(chamber_number)+" @x "+string(cursor_x)+", y "+string(cursor_y));
- chamber_number++;
- chamber_placed = true;
- }else{ //Otherwise back-track one spot and try again.
- //var chamber_val = chamber_grid[# cursor_x, cursor_y];
- //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));
- if (chamber_grid[# cursor_x-1, cursor_y] == chamber_number-1){
- cursor_x--;
- }else if (chamber_grid[# cursor_x+1, cursor_y] == chamber_number-1){
- cursor_x++;
- }else if (chamber_grid[# cursor_x, cursor_y-1] == chamber_number-1){
- cursor_y--;
- }else if (chamber_grid[# cursor_x, cursor_y+1] == chamber_number-1){
- cursor_y++;
- }else{
- show_debug_message("Cannot backtrack..." +string(chamber_number));
- maze_error = true;
- }
- chamber_number--;
- }
- }until (chamber_placed == true || maze_error == true);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement