summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--scripts/randoExport.gd171
1 files changed, 171 insertions, 0 deletions
diff --git a/scripts/randoExport.gd b/scripts/randoExport.gd new file mode 100644 index 0000000..c94e9a4 --- /dev/null +++ b/scripts/randoExport.gd
@@ -0,0 +1,171 @@
1@tool
2extends Node
3
4@export_category("Debug")
5@export var mybutton: bool:
6 set(value):
7 _my_button_pressed()
8
9
10func _my_button_pressed():
11 var results = []
12
13 _visit_node(get_parent(), results)
14
15 var file = FileAccess.open("user://rando_dump.txt", FileAccess.WRITE)
16 file.store_string("".join(results))
17
18
19func _visit_node(node, results: Array):
20 var root_node = get_parent()
21 var node_id = String(root_node.get_path_to(node).get_concatenated_names())
22
23 if node is PanelMain:
24 var clue = node.clue
25 var answer = node.answer
26
27 if node.missing_line == "clue":
28 clue = node.answer
29 answer = node.clue
30 elif node.missing_line == "symbol":
31 answer = node.symbol
32
33 results.append("panels {\n name: \"")
34 results.append(clue.to_upper())
35 results.append("\"\n path: \"")
36 results.append(node_id)
37 results.append("\"\n clue: \"")
38 results.append(clue)
39 results.append("\"\n answer: \"")
40 results.append(answer)
41 results.append("\"\n")
42
43 if node.missing_line != "symbol":
44 var symbols = _parse_symbol(node.symbol)
45 for symbol in symbols:
46 results.append(" symbols: \"")
47 results.append(symbol)
48 results.append("\"\n")
49
50 for proxy in node.proxies:
51 var proxy_node = node.get_node(proxy)
52 var proxy_path = String(root_node.get_path_to(proxy_node).get_concatenated_names())
53 results.append(" proxies { answer: \"")
54
55 if proxy_node.missing_line == "clue":
56 results.append(proxy_node.clue)
57 elif proxy_node.missing_line == "symbol":
58 results.append(proxy_node.symbol)
59 else:
60 results.append(proxy_node.answer)
61
62 results.append("\" path: \"")
63 results.append(proxy_path)
64 results.append("\" }\n")
65
66 results.append("}\n")
67 elif node is DoorMain:
68 var door_data = {"door_id": node_id}
69
70 if !node.senders.is_empty():
71 door_data["senders"] = _parse_node_paths(root_node, node, node.senders)
72
73 if !node.senderGroup.is_empty():
74 door_data["senderGroup"] = _parse_node_paths(root_node, node, node.senderGroup)
75
76 #results["doors"][node_id] = door_data
77 elif node is Collectable:
78 if node.unlock_type == "key":
79 results.append("letters {\n key: \"")
80 results.append(node.unlock_key)
81 results.append("\"\n")
82
83 if node.level == 2:
84 results.append(" level2: true\n")
85
86 results.append(" path: \"")
87 results.append(node_id)
88 results.append("\"\n}\n")
89 elif node.unlock_type == "smiley":
90 results.append("masteries {\n name: \"MASTERY\"\n path: \"")
91 results.append(node_id)
92 results.append("\"\n}\n")
93
94 elif node is Painting or node is AutoPainting:
95 results.append("paintings {\n name: \"")
96 results.append(node.name.to_upper())
97 results.append("\"\n path: \"")
98 results.append(node_id)
99 results.append("\"\n}\n")
100
101 elif node is Worldport:
102 results.append("ports {\n name: \"")
103 results.append(node.name.to_upper())
104 results.append("\"\n path: \"")
105 results.append(node_id)
106 results.append("\"\n}\n")
107
108 elif node is Keyholder:
109 results.append("keyholders {\n name: \"")
110 results.append(node.name.to_upper())
111 results.append("\"\n path: \"")
112 results.append(node_id)
113 results.append("\"\n}\n")
114
115 for child in node.get_children():
116 _visit_node(child, results)
117
118
119func _parse_symbol(symbol):
120 var raw = symbol.strip_edges()
121 var result = []
122
123 if raw.contains(":Syn") or raw.contains(":Ant"):
124 result.append("sun")
125 if raw.contains(":Add") or raw.contains(":Rem") or raw.contains(":Adp"):
126 result.append("sparkles")
127 if raw.contains(":Hom") or raw.contains(":Rhy"):
128 result.append("zero")
129 if raw.contains(":Cat") or raw.contains(":Exa"):
130 result.append("example")
131 if raw.contains(":Par") or raw.contains(":Who"):
132 result.append("boxes")
133 if raw.contains(":Plu") or raw.contains(":Sin"):
134 result.append("planet")
135 if raw.contains(":Int") or raw.contains(":Dim"):
136 result.append("pyramid")
137 if raw.contains(":Ene") or raw.contains(":Enr") or raw.contains(":Ent"):
138 result.append("cross")
139 if raw.contains(":Swe") or raw.contains(":Swu"):
140 result.append("sweet")
141 if raw.contains(":Mas") or raw.contains(":Fem"):
142 result.append("gender")
143 if raw.contains(":Old") or raw.contains(":You") or raw.contains(":Ten"):
144 result.append("age")
145 if raw.contains(":Sou") or raw.contains(":Sor"):
146 result.append("sound")
147 if raw.contains(":Ana"):
148 result.append("anagram")
149 if raw.contains(":Job") or raw.contains(":Emp"):
150 result.append("job")
151 if raw.contains(":Sur") or raw.contains(":Srr"):
152 result.append("stars")
153 if raw.contains(":Cha"):
154 result.append("null")
155 if raw.contains(":Eva"):
156 result.append("eval")
157 if raw.contains(":Sad") or raw.contains(":Odd") or raw.contains("@"):
158 result.append("lingo")
159 if raw.contains("?"):
160 result.append("question")
161
162 return result
163
164
165func _parse_node_paths(node, parent, array):
166 var result = []
167
168 for p in array:
169 result.append(String(node.get_path_to(parent.get_node(p)).get_concatenated_names()))
170
171 return result