@tool extends Node @export_category("Debug") @export var mybutton: bool: set(value): _my_button_pressed() func _my_button_pressed(): var results = [] _visit_node(get_parent(), results) var file = FileAccess.open("user://rando_dump.txt", FileAccess.WRITE) file.store_string("".join(results)) func _visit_node(node, results: Array): var root_node = get_parent() var node_id = String(root_node.get_path_to(node).get_concatenated_names()) if node is PanelMain: var clue = node.clue var answer = node.answer if node.missing_line == "clue": clue = node.answer answer = node.clue elif node.missing_line == "symbol": answer = node.symbol results.append("panels {\n name: \"") results.append(clue.to_upper()) results.append("\"\n path: \"") results.append(node_id) results.append("\"\n clue: \"") results.append(clue) results.append("\"\n answer: \"") results.append(answer) results.append("\"\n") if node.missing_line != "symbol": var symbols = _parse_symbol(node.symbol) for symbol in symbols: results.append(" symbols: ") results.append(symbol) results.append("\n") for proxy in node.proxies: var proxy_node = node.get_node(proxy) var proxy_path = String(root_node.get_path_to(proxy_node).get_concatenated_names()) results.append(" proxies { answer: \"") if proxy_node.missing_line == "clue": results.append(proxy_node.clue) elif proxy_node.missing_line == "symbol": results.append(proxy_node.symbol) else: results.append(proxy_node.answer) results.append("\" path: \"") results.append(proxy_path) results.append("\" }\n") results.append("}\n") elif node is DoorMain: var door_data = {"door_id": node_id} if !node.senders.is_empty(): door_data["senders"] = _parse_node_paths(root_node, node, node.senders) if !node.senderGroup.is_empty(): door_data["senderGroup"] = _parse_node_paths(root_node, node, node.senderGroup) #results["doors"][node_id] = door_data elif node is Collectable: if node.unlock_type == "key": results.append("letters {\n key: \"") results.append(node.unlock_key) results.append("\"\n") if node.level == 2: results.append(" level2: true\n") results.append(" path: \"") results.append(node_id) results.append("\"\n}\n") elif node.unlock_type == "smiley": results.append("masteries {\n name: \"MASTERY\"\n path: \"") results.append(node_id) results.append("\"\n}\n") elif node is Painting or node is AutoPainting: results.append("paintings {\n name: \"") results.append(node.name.to_upper()) results.append("\"\n path: \"") results.append(node_id) results.append("\"\n}\n") elif node is Worldport: results.append("ports {\n name: \"") results.append(node.name.to_upper()) results.append("\"\n path: \"") results.append(node_id) results.append("\"\n}\n") elif node is Keyholder: results.append("keyholders {\n name: \"") results.append(node.name.to_upper()) results.append("\"\n path: \"") results.append(node_id) results.append("\"\n}\n") for child in node.get_children(): _visit_node(child, results) func _parse_symbol(symbol): var raw = symbol.strip_edges() var result = [] if raw.contains(":Syn") or raw.contains(":Ant"): result.append("SUN") if raw.contains(":Add") or raw.contains(":Rem") or raw.contains(":Adp"): result.append("SPARKLES") if raw.contains(":Hom") or raw.contains(":Rhy"): result.append("ZERO") if raw.contains(":Cat") or raw.contains(":Exa"): result.append("EXAMPLE") if raw.contains(":Par") or raw.contains(":Who"): result.append("BOXES") if raw.contains(":Plu") or raw.contains(":Sin"): result.append("PLANET") if raw.contains(":Int") or raw.contains(":Dim"): result.append("PYRAMID") if raw.contains(":Ene") or raw.contains(":Enr") or raw.contains(":Ent"): result.append("CROSS") if raw.contains(":Swe") or raw.contains(":Swu"): result.append("SWEET") if raw.contains(":Mas") or raw.contains(":Fem"): result.append("GENDER") if raw.contains(":Old") or raw.contains(":You") or raw.contains(":Ten"): result.append("AGE") if raw.contains(":Sou") or raw.contains(":Sor"): result.append("SOUND") if raw.contains(":Ana"): result.append("ANAGRAM") if raw.contains(":Job") or raw.contains(":Emp"): result.append("JOB") if raw.contains(":Sur") or raw.contains(":Srr"): result.append("STARS") if raw.contains(":Cha"): result.append("NULL") if raw.contains(":Eva"): result.append("EVAL") if raw.contains(":Sad") or raw.contains(":Odd") or raw.contains("@"): result.append("LINGO") if raw.contains("?"): result.append("QUESTION") return result func _parse_node_paths(node, parent, array): var result = [] for p in array: result.append(String(node.get_path_to(parent.get_node(p)).get_concatenated_names())) return result