diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-08-20 16:13:24 -0400 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-08-20 16:13:24 -0400 |
commit | 8c3428b900e1696c3c3edcc5fb513988ddbe8c41 (patch) | |
tree | 58fb8ab7c3dfd55a9c9d86c2d9d2d3a1c565d3e3 /scripts | |
parent | 505a1a948a9bd0a6c4a273913db6fd9f73723c44 (diff) | |
download | lingo2-archipelago-8c3428b900e1696c3c3edcc5fb513988ddbe8c41.tar.gz lingo2-archipelago-8c3428b900e1696c3c3edcc5fb513988ddbe8c41.tar.bz2 lingo2-archipelago-8c3428b900e1696c3c3edcc5fb513988ddbe8c41.zip |
Committed map dump script
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/randoExport.gd | 171 |
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 | ||
2 | extends Node | ||
3 | |||
4 | @export_category("Debug") | ||
5 | @export var mybutton: bool: | ||
6 | set(value): | ||
7 | _my_button_pressed() | ||
8 | |||
9 | |||
10 | func _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 | |||
19 | func _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 | |||
119 | func _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 | |||
165 | func _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 | ||