@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