diff options
Diffstat (limited to 'Archipelago/load.gd')
-rw-r--r-- | Archipelago/load.gd | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Archipelago/load.gd b/Archipelago/load.gd index 47f51a6..3c6b31c 100644 --- a/Archipelago/load.gd +++ b/Archipelago/load.gd | |||
@@ -90,6 +90,52 @@ func _load(): | |||
90 | target_panel_node.text = source["hint"] | 90 | target_panel_node.text = source["hint"] |
91 | target_panel_node.answer = source["answer"] | 91 | target_panel_node.answer = source["answer"] |
92 | 92 | ||
93 | # Randomize the paintings, if necessary. | ||
94 | if apclient._painting_shuffle: | ||
95 | var pd_script = ResourceLoader.load("user://maps/Archipelago/paintingdata.gd") | ||
96 | var pd = pd_script.new() | ||
97 | pd.set_name("AP_Paintings") | ||
98 | self.add_child(pd) | ||
99 | |||
100 | var all_paintings = pd.kALL_PAINTINGS | ||
101 | |||
102 | var classes = {} | ||
103 | for painting in apclient._paintings_mapping.values(): | ||
104 | if not classes.has(painting): | ||
105 | var i = rng.randi_range(0, all_paintings.size() - 1) | ||
106 | var chosen = all_paintings[i] | ||
107 | classes[painting] = chosen | ||
108 | all_paintings.remove(i) | ||
109 | |||
110 | var randomized = [] | ||
111 | for painting in apclient._paintings_mapping.values(): | ||
112 | var painting_class = classes[painting] | ||
113 | instantiate_painting(painting, painting_class) | ||
114 | randomized.append(painting) | ||
115 | |||
116 | for source_painting in apclient._paintings_mapping.keys(): | ||
117 | var target_painting = apclient._paintings_mapping[source_painting] | ||
118 | var painting_class = classes[target_painting] | ||
119 | var new_source = instantiate_painting(source_painting, painting_class) | ||
120 | new_source.target = pd.get_node(target_painting).get_node("Script") | ||
121 | randomized.append(source_painting) | ||
122 | |||
123 | var remaining_size = classes.size() / 2 | ||
124 | if remaining_size >= all_paintings.size(): | ||
125 | remaining_size = all_paintings.size() | ||
126 | var remaining = [] | ||
127 | for i in range(0, remaining_size): | ||
128 | var j = rng.randi_range(0, all_paintings.size() - 1) | ||
129 | remaining.append(all_paintings[j]) | ||
130 | all_paintings.remove(j) | ||
131 | |||
132 | for painting in apclient._paintings.keys(): | ||
133 | if randomized.has(painting): | ||
134 | continue | ||
135 | |||
136 | var chosen_painting = remaining[rng.randi_range(0, remaining.size() - 1)] | ||
137 | instantiate_painting(painting, chosen_painting) | ||
138 | |||
93 | # Attach a script to every panel so that we can do things like conditionally | 139 | # Attach a script to every panel so that we can do things like conditionally |
94 | # disable them. | 140 | # disable them. |
95 | var panel_script = ResourceLoader.load("user://maps/Archipelago/panel.gd") | 141 | var panel_script = ResourceLoader.load("user://maps/Archipelago/panel.gd") |
@@ -130,3 +176,33 @@ func _load(): | |||
130 | 176 | ||
131 | func sort_by_link(a, b): | 177 | func sort_by_link(a, b): |
132 | return a["link"] < b["link"] | 178 | return a["link"] < b["link"] |
179 | |||
180 | |||
181 | func instantiate_painting(name, scene): | ||
182 | var apclient = global.get_node("Archipelago") | ||
183 | |||
184 | var scene_path = "res://nodes/paintings/%s.tscn" % scene | ||
185 | var painting_scene = load(scene_path) | ||
186 | var new_painting = painting_scene.instance() | ||
187 | new_painting.set_name(name) | ||
188 | |||
189 | var old_painting = self.get_node("Decorations/Paintings").get_node(name) | ||
190 | new_painting.translation = old_painting.translation | ||
191 | new_painting.rotation = old_painting.rotation | ||
192 | |||
193 | var mypainting_script = ResourceLoader.load("user://maps/Archipelago/mypainting.gd") | ||
194 | var mps_inst = mypainting_script.new() | ||
195 | mps_inst.set_name("Script") | ||
196 | |||
197 | var pconfig = apclient._paintings[name] | ||
198 | mps_inst.orientation = pconfig["orientation"] | ||
199 | if pconfig["move"]: | ||
200 | mps_inst.move = true | ||
201 | mps_inst.move_to_x = old_painting.move_to_x | ||
202 | mps_inst.move_to_z = old_painting.move_to_z | ||
203 | mps_inst.key = old_painting.key | ||
204 | |||
205 | self.get_node("AP_Paintings").add_child(new_painting) | ||
206 | new_painting.add_child(mps_inst) | ||
207 | old_painting.queue_free() | ||
208 | return mps_inst | ||