about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--Archipelago/client.gd6
-rw-r--r--Archipelago/load.gd64
-rw-r--r--util/generate_gamedata.rb17
3 files changed, 86 insertions, 1 deletions
diff --git a/Archipelago/client.gd b/Archipelago/client.gd index 964c642..b3668d7 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd
@@ -136,6 +136,8 @@ var _early_color_hallways = false
136var _pilgrimage_enabled = false 136var _pilgrimage_enabled = false
137var _pilgrimage_allows_roof_access = false 137var _pilgrimage_allows_roof_access = false
138var _pilgrimage_allows_paintings = false 138var _pilgrimage_allows_paintings = false
139var _sunwarp_shuffle = false
140var _sunwarp_mapping = []
139var _slot_seed = 0 141var _slot_seed = 0
140 142
141var _map_loaded = false 143var _map_loaded = false
@@ -322,6 +324,10 @@ func _on_data():
322 _pilgrimage_allows_roof_access = _slot_data["pilgrimage_allows_roof_access"] 324 _pilgrimage_allows_roof_access = _slot_data["pilgrimage_allows_roof_access"]
323 if _slot_data.has("pilgrimage_allows_paintings"): 325 if _slot_data.has("pilgrimage_allows_paintings"):
324 _pilgrimage_allows_paintings = _slot_data["pilgrimage_allows_paintings"] 326 _pilgrimage_allows_paintings = _slot_data["pilgrimage_allows_paintings"]
327 if _slot_data.has("shuffle_sunwarps"):
328 _sunwarp_shuffle = _slot_data["shuffle_sunwarps"]
329 if _slot_data.has("sunwarp_permutation"):
330 _sunwarp_mapping = _slot_data["sunwarp_permutation"]
325 331
326 _puzzle_skips = 0 332 _puzzle_skips = 0
327 333
diff --git a/Archipelago/load.gd b/Archipelago/load.gd index bca0742..0750247 100644 --- a/Archipelago/load.gd +++ b/Archipelago/load.gd
@@ -566,6 +566,58 @@ func _load():
566 566
567 terminator.add_child(terminator_shape) 567 terminator.add_child(terminator_shape)
568 get_node("Decorations").add_child(terminator) 568 get_node("Decorations").add_child(terminator)
569
570 if apclient._sunwarp_shuffle:
571 # Sunwarps 1 and 6 are rotated differently from the rest, so we have to fix that.
572 get_node("Decorations/Teleporter Windows/localmap").rotation_degrees.y = 0
573 get_node("Decorations/Teleporter Windows/localmap2").rotation_degrees.y = 0
574 get_node("Decorations/Teleporter Windows/localmap11").rotation_degrees.y = 0
575 get_node("Decorations/Teleporter Windows/localmap12").rotation_degrees.y = 0
576 get_node("Decorations/Teleporter Windows/localmap13").rotation_degrees.y = -90
577
578 get_node("Warps/Teleporter Warps/Sunwarp_enter_1").translation.x = 19.5
579 get_node("Warps/Teleporter Warps/Sunwarp_exit_1").translation.x = -15.5
580 get_node("Warps/Teleporter Warps/Sunwarp_enter_6").translation.x = 4.5
581 get_node("Warps/Teleporter Warps/Sunwarp_exit_6").translation.x = -37.5
582 get_node("Warps/Teleporter Warps/Sunwarp_exit_7").translation.z = 23.5
583
584 # Change the sunwarps in accordance with the mapping.
585 var sw_orig_translations = []
586 var sw_text_translations = []
587 var sw_text_rotations = []
588 for i in range(1,7):
589 sw_orig_translations.append(get_node("Warps/Teleporter Warps/Sunwarp_enter_%d" % i).translation)
590 sw_text_translations.append(get_node("Decorations/Signs/Sunwarp Numbers/enter_%d" % i).translation)
591 sw_text_rotations.append(get_node("Decorations/Signs/Sunwarp Numbers/enter_%d" % i).rotation_degrees)
592 for i in range(1,7):
593 sw_orig_translations.append(get_node("Warps/Teleporter Warps/Sunwarp_exit_%d" % i).translation)
594 sw_text_translations.append(get_node("Decorations/Signs/Sunwarp Numbers/exit_%d" % i).translation)
595 sw_text_rotations.append(get_node("Decorations/Signs/Sunwarp Numbers/exit_%d" % i).rotation_degrees)
596
597 var sw_enter_indicators = [4, 5, 6, 12, 7, 10]
598 for i in range(1,7):
599 get_node("Warps/Teleporter Warps/Sunwarp_enter_%d" % i).translation = sw_orig_translations[apclient._sunwarp_mapping[i-1]]
600 get_node("Warps/Teleporter Warps/Sunwarp_exit_%d" % i).translation = sw_orig_translations[apclient._sunwarp_mapping[i+5]]
601
602 get_node("Decorations/Signs/Sunwarp Numbers/enter_%d" % i).translation = sw_text_translations[apclient._sunwarp_mapping[i-1]]
603 get_node("Decorations/Signs/Sunwarp Numbers/enter_%d" % i).rotation_degrees = sw_text_rotations[apclient._sunwarp_mapping[i-1]]
604
605 get_node("Decorations/Signs/Sunwarp Numbers/exit_%d" % i).translation = sw_text_translations[apclient._sunwarp_mapping[i+5]]
606 get_node("Decorations/Signs/Sunwarp Numbers/exit_%d" % i).rotation_degrees = sw_text_rotations[apclient._sunwarp_mapping[i+5]]
607
608 var enter_rot = _dir_to_int(gamedata.sunwarps[apclient._sunwarp_mapping[i-1]]["orientation"]) * 90
609 var exit_rot = _dir_to_int(gamedata.sunwarps[apclient._sunwarp_mapping[i+5]]["orientation"]) * 90
610 var final_rot = enter_rot - exit_rot
611 if final_rot < 0:
612 final_rot += 360
613 get_node("Warps/Teleporter Warps/Sunwarp_enter_%d" % i).rotate = str(final_rot)
614
615 var sw_enter_indicator_pos = gamedata.sunwarps[apclient._sunwarp_mapping[i-1]]["entrance_indicator_pos"]
616 var sw_enter_indicator = get_node("Decorations/Signs/Welcome Back Signs/Sign%d" % sw_enter_indicators[i-1])
617 sw_enter_indicator.translation.x = sw_enter_indicator_pos[0]
618 sw_enter_indicator.translation.y = sw_enter_indicator_pos[1]
619 sw_enter_indicator.translation.z = sw_enter_indicator_pos[2]
620 sw_enter_indicator.rotation_degrees.y = (enter_rot * -1) + 180
569 621
570 # Create the effects node. 622 # Create the effects node.
571 var effects_script = apclient.SCRIPT_effects 623 var effects_script = apclient.SCRIPT_effects
@@ -666,3 +718,15 @@ func set_small_gridmap_tile(x, y, z, tile):
666 718
667func archipelago_disconnected(reason): 719func archipelago_disconnected(reason):
668 messages.showMessage(reason) 720 messages.showMessage(reason)
721
722
723func _dir_to_int(dir):
724 if dir == "north":
725 return 0
726 elif dir == "west":
727 return 1
728 elif dir == "south":
729 return 2
730 elif dir == "east":
731 return 3
732 return 4
diff --git a/util/generate_gamedata.rb b/util/generate_gamedata.rb index 4c530f1..7674277 100644 --- a/util/generate_gamedata.rb +++ b/util/generate_gamedata.rb
@@ -19,6 +19,7 @@ painting_ids_by_item_id = {}
19warp_ids_by_item_id = {} 19warp_ids_by_item_id = {}
20panel_ids_by_location_id = {} 20panel_ids_by_location_id = {}
21classification_by_location_id = {} 21classification_by_location_id = {}
22sunwarps = Array.new(12) {Hash.new}
22mentioned_doors = Set[] 23mentioned_doors = Set[]
23mentioned_paintings = Set[] 24mentioned_paintings = Set[]
24mentioned_warps = Set[] 25mentioned_warps = Set[]
@@ -91,6 +92,16 @@ config.each do |room_name, room_data|
91 painting_output[painting["id"]] = painting 92 painting_output[painting["id"]] = painting
92 end 93 end
93 end 94 end
95
96 if room_data.include? "sunwarps"
97 room_data["sunwarps"].each do |sunwarp|
98 index = sunwarp["dots"] - 1
99 if sunwarp["direction"] == "exit" then
100 index += 6
101 end
102 sunwarps[index] = sunwarp
103 end
104 end
94end 105end
95 106
96config.each do |room_name, room_data| 107config.each do |room_name, room_data|
@@ -238,5 +249,9 @@ File.open(outputpath, "w") do |f|
238 f.write(classification_by_location_id.map do |location_id, classification| 249 f.write(classification_by_location_id.map do |location_id, classification|
239 "#{location_id}:#{classification}" 250 "#{location_id}:#{classification}"
240 end.join(",")) 251 end.join(","))
241 f.write "}" 252 f.write "}\nvar sunwarps = ["
253 f.write(sunwarps.map do |sunwarp|
254 "{\"orientation\":\"#{sunwarp["orientation"]}\",\"entrance_indicator_pos\":#{sunwarp["entrance_indicator_pos"].to_s}}"
255 end.join(","))
256 f.write "]"
242end 257end