From 7898b2a8c0069537fa4e1d67b1d67aee065697b1 Mon Sep 17 00:00:00 2001 From: DodoBirb Date: Fri, 25 Mar 2022 17:23:48 +1100 Subject: [PATCH] Fixed bugs in algorithm --- Export_Code/Script_AR_Logic.gml | 2 ++ Export_Code/Script_randomise_rooms.gml | 40 +++++++++++++++----------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/Export_Code/Script_AR_Logic.gml b/Export_Code/Script_AR_Logic.gml index 67ed249..0d1c022 100644 --- a/Export_Code/Script_AR_Logic.gml +++ b/Export_Code/Script_AR_Logic.gml @@ -59,6 +59,8 @@ ds_list_add(list, 101403) ds_list_add(list, 112031) ds_list_add(list, 109211) ds_list_add(list, 129385) +ds_list_add(list, 135456) +ds_list_add(list, 133711) ds_list_add(access, 107801) ds_list_add(access, 109737) ds_list_add(access, 103777) diff --git a/Export_Code/Script_randomise_rooms.gml b/Export_Code/Script_randomise_rooms.gml index 5783a72..660eaa1 100644 --- a/Export_Code/Script_randomise_rooms.gml +++ b/Export_Code/Script_randomise_rooms.gml @@ -15,16 +15,32 @@ while (ds_list_size(access) > 0) ds_list_delete(access, 0) if (ds_list_size(list) > 0) { - ds_list_shuffle(list) - node2 = ds_list_find_value(list, 0) - ds_list_delete(list, 0) + loop = 1 + while (loop == 1) + { + loop = 0 + ds_list_shuffle(list) + node2 = ds_list_find_value(list, 0) + ds_list_delete(list, 0) + if is_array(node2) + targetnode = node2[1] + else + targetnode = node2 + if ((!is_undefined(ds_map_find_value(map, targetnode))) || ds_list_find_index(access, targetnode) != -1 || node1 == targetnode) + loop = 1 + } } - else if (ds_list_size(list) == 0) + if (ds_list_size(list) == 0) { - ds_list_shuffle(access) - node2 = ds_list_find_value(access, 0) - ds_list_delete(access, 0) + if is_undefined(node2) + { + ds_list_shuffle(access) + targetnode = ds_list_find_value(access, 0) + ds_list_delete(access, 0) + } } + ds_map_add(map, node1, targetnode) + ds_map_add(map, targetnode, node1) if is_array(node2) { for (i = 2; i < array_length_1d(node2); i += 1) @@ -34,20 +50,12 @@ while (ds_list_size(access) > 0) if is_undefined(ds_map_find_value(map, node2[i])) { if (node2[i] != node2[1]) - { ds_list_add(access, node2[i]) - ds_list_delete(list, ds_list_find_index(list, node2[i])) - } } } } - node2 = node2[1] } - ds_map_add(map, node1, node2) - ds_map_add(map, node2, node1) - file_text_write_string(fid, ((string(node1) + "-") + string(node2))) - file_text_writeln(fid) - file_text_write_string(fid, string(ds_list_size(access))) + file_text_write_string(fid, ((string(node1) + "-") + string(targetnode))) file_text_writeln(fid) } file_text_close(fid)