about summary refs log tree commit diff stats
path: root/util/generate_gamedata.rb
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2024-04-15 11:39:52 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2024-04-15 11:39:52 -0400
commite448f5b318f05cae1b40a949e11ef2d7fb613645 (patch)
tree8c46770b775f31db9293ed1c6d18358aece2b45c /util/generate_gamedata.rb
parentdbc0e454596ba7e1a8378685c35e37dccd19c964 (diff)
downloadlingo-archipelago-e448f5b318f05cae1b40a949e11ef2d7fb613645.tar.gz
lingo-archipelago-e448f5b318f05cae1b40a949e11ef2d7fb613645.tar.bz2
lingo-archipelago-e448f5b318f05cae1b40a949e11ef2d7fb613645.zip
Implemented panels mode door shuffle
Diffstat (limited to 'util/generate_gamedata.rb')
-rw-r--r--util/generate_gamedata.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/util/generate_gamedata.rb b/util/generate_gamedata.rb index f63e062..a3f9ba5 100644 --- a/util/generate_gamedata.rb +++ b/util/generate_gamedata.rb
@@ -11,14 +11,17 @@ CLASSIFICATION_INSANITY = 4
11 11
12panel_to_id = {} 12panel_to_id = {}
13door_groups = {} 13door_groups = {}
14panel_groups = {}
14 15
15panel_output = [] 16panel_output = []
16door_ids_by_item_id = {} 17door_ids_by_item_id = {}
17painting_ids_by_item_id = {} 18painting_ids_by_item_id = {}
19panel_ids_by_item_id = {}
18panel_ids_by_location_id = {} 20panel_ids_by_location_id = {}
19classification_by_location_id = {} 21classification_by_location_id = {}
20mentioned_doors = Set[] 22mentioned_doors = Set[]
21mentioned_paintings = Set[] 23mentioned_paintings = Set[]
24mentioned_panels = Set[]
22painting_output = {} 25painting_output = {}
23 26
24ids_config = YAML.load_file(idspath) 27ids_config = YAML.load_file(idspath)
@@ -155,6 +158,26 @@ config.each do |room_name, room_data|
155 end 158 end
156 end 159 end
157 end 160 end
161
162 if room_data.include? "panel_doors"
163 room_data["panel_doors"].each do |panel_door_name, panel_door|
164 item_id = ids_config["panel_doors"][room_name][panel_door_name]
165
166 panel_ids_by_item_id[item_id] = panel_door["panels"].map do |panel_identifier|
167 other_room_name = (panel_identifier.kind_of? String) ? room_name : panel_identifier["room"]
168 other_panel_name = (panel_identifier.kind_of? String) ? panel_identifier : panel_identifier["panel"]
169
170 config[other_room_name]["panels"][other_panel_name]["id"]
171 end
172
173 mentioned_panels.merge(panel_ids_by_item_id[item_id])
174
175 if panel_door.include? "panel_group"
176 panel_groups[panel_door["panel_group"]] ||= Set[]
177 panel_groups[panel_door["panel_group"]].merge(panel_ids_by_item_id[item_id])
178 end
179 end
180 end
158end 181end
159 182
160door_groups.each do |group_name, door_ids| 183door_groups.each do |group_name, door_ids|
@@ -162,6 +185,11 @@ door_groups.each do |group_name, door_ids|
162 door_ids_by_item_id[item_id] = door_ids.to_a 185 door_ids_by_item_id[item_id] = door_ids.to_a
163end 186end
164 187
188panel_groups.each do |group_name, panel_ids|
189 item_id = ids_config["panel_groups"][group_name]
190 panel_ids_by_item_id[item_id] = panel_ids.to_a
191end
192
165File.open(outputpath, "w") do |f| 193File.open(outputpath, "w") do |f|
166 f.write "extends Node\n\nvar panels = [" 194 f.write "extends Node\n\nvar panels = ["
167 f.write(panel_output.map do |panel| 195 f.write(panel_output.map do |panel|
@@ -175,6 +203,12 @@ File.open(outputpath, "w") do |f|
175 "\"#{door_id}\"" 203 "\"#{door_id}\""
176 end.join(",") + "]" 204 end.join(",") + "]"
177 end.join(",")) 205 end.join(","))
206 f.write "}\nvar panel_ids_by_item_id = {"
207 f.write(panel_ids_by_item_id.map do |item_id, panel_ids|
208 "#{item_id}:[" + panel_ids.map do |panel_id|
209 "\"#{panel_id}\""
210 end.join(",") + "]"
211 end.join(","))
178 f.write "}\nvar painting_ids_by_item_id = {" 212 f.write "}\nvar painting_ids_by_item_id = {"
179 f.write(painting_ids_by_item_id.map do |item_id, painting_ids| 213 f.write(painting_ids_by_item_id.map do |item_id, painting_ids|
180 "#{item_id}:[" + painting_ids.map do |painting_id| 214 "#{item_id}:[" + painting_ids.map do |painting_id|
@@ -195,6 +229,10 @@ File.open(outputpath, "w") do |f|
195 f.write(mentioned_paintings.map do |painting_id| 229 f.write(mentioned_paintings.map do |painting_id|
196 "\"#{painting_id}\"" 230 "\"#{painting_id}\""
197 end.join(",")) 231 end.join(","))
232 f.write "]\nvar mentioned_panels = ["
233 f.write(mentioned_panels.map do |panel_id|
234 "\"#{panel_id}\""
235 end.join(","))
198 f.write "]\nvar paintings = {" 236 f.write "]\nvar paintings = {"
199 f.write(painting_output.map do |painting_id, painting| 237 f.write(painting_output.map do |painting_id, painting|
200 "\"#{painting_id}\":{\"orientation\":\"#{painting["orientation"]}\",\"move\":#{painting.include? "move" and painting["move"]}}" 238 "\"#{painting_id}\":{\"orientation\":\"#{painting["orientation"]}\",\"move\":#{painting.include? "move" and painting["move"]}}"