From 4d2da5afe6a3ffad50ca5560c1dcceaddde2b9b0 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Wed, 28 Feb 2024 12:35:45 -0500 Subject: Add pilgrimage allows roof access / paintings --- Archipelago/client.gd | 9 ++++++++- Archipelago/load.gd | 16 ++++++++++++++++ Archipelago/mypainting.gd | 14 +++++++------- Archipelago/painting.gd | 10 ++++++++++ Archipelago/painting_eye.gd | 16 +++++++++++++++- Archipelago/painting_scenery.gd | 10 ++++++++++ Archipelago/panel.gd | 4 ---- Archipelago/pilgrimage_terminator.gd | 11 +++++++++++ Archipelago/settings_screen.gd | 4 ++++ Archipelago/teleport.gd | 15 +++++++++++---- 10 files changed, 92 insertions(+), 17 deletions(-) create mode 100644 Archipelago/painting.gd create mode 100644 Archipelago/pilgrimage_terminator.gd diff --git a/Archipelago/client.gd b/Archipelago/client.gd index 7cf1d01..964c642 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd @@ -7,6 +7,7 @@ var SCRIPT_multiplayer var SCRIPT_mypainting var SCRIPT_notifier var SCRIPT_panel +var SCRIPT_pilgrimage_terminator var SCRIPT_uuid var ap_server = "" @@ -133,6 +134,8 @@ var _level_2_requirement = 223 var _location_classification_bit = 0 var _early_color_hallways = false var _pilgrimage_enabled = false +var _pilgrimage_allows_roof_access = false +var _pilgrimage_allows_paintings = false var _slot_seed = 0 var _map_loaded = false @@ -315,6 +318,10 @@ func _on_data(): _early_color_hallways = _slot_data["early_color_hallways"] if _slot_data.has("enable_pilgrimage"): _pilgrimage_enabled = _slot_data["enable_pilgrimage"] + if _slot_data.has("pilgrimage_allows_roof_access"): + _pilgrimage_allows_roof_access = _slot_data["pilgrimage_allows_roof_access"] + if _slot_data.has("pilgrimage_allows_paintings"): + _pilgrimage_allows_paintings = _slot_data["pilgrimage_allows_paintings"] _puzzle_skips = 0 @@ -654,7 +661,7 @@ func processItem(item, index, from, flags): painting_node = fake_parent_node.get_node_or_null(painting_id) if painting_node != null: painting_node.get_node("Script").movePainting() - + if gamedata.warp_ids_by_item_id.has(int(item)): var warpsNode = get_tree().get_root().get_node("Spatial/Warps") for warp_id in gamedata.warp_ids_by_item_id[int(item)]: diff --git a/Archipelago/load.gd b/Archipelago/load.gd index d9b37da..bca0742 100644 --- a/Archipelago/load.gd +++ b/Archipelago/load.gd @@ -550,6 +550,22 @@ func _load(): the_end.get_node("Viewport/GUI/Panel/TextEdit").connect( "answer_correct", apclient, "completedGoal" ) + + # If pilgrimage does not allow roof access, add a node on the Crossroads + # Roof Access stairs that disables it. + if !apclient._pilgrimage_allows_roof_access: + var terminator = apclient.SCRIPT_pilgrimage_terminator.new() + terminator.name = "RoofAccessPilgrimageTerminator" + terminator.translation.x = -36 + terminator.translation.y = 3 + terminator.translation.z = -35 + + var terminator_shape = CollisionShape.new() + terminator_shape.shape = BoxShape.new() + terminator_shape.shape.extents.x = 0.1 + + terminator.add_child(terminator_shape) + get_node("Decorations").add_child(terminator) # Create the effects node. var effects_script = apclient.SCRIPT_effects diff --git a/Archipelago/mypainting.gd b/Archipelago/mypainting.gd index 1420c03..999b122 100644 --- a/Archipelago/mypainting.gd +++ b/Archipelago/mypainting.gd @@ -20,13 +20,8 @@ func _ready(): func _answer_correct(): var apclient = global.get_node("Archipelago") - if self.get_parent().name == "pilgrim_painting2": - # When pilgrimage is enabled, the HOT CRUST panel should actually move the sun painting. - if apclient._pilgrimage_enabled: - movePainting() - else: - if not apclient._door_shuffle or apclient.paintingIsVanilla(self.get_parent().name): - movePainting() + if not apclient._door_shuffle or apclient.paintingIsVanilla(self.get_parent().name): + movePainting() func movePainting(): @@ -91,6 +86,11 @@ func _looked_at(body, painting): body.rotate_y(3 * PI / 2) body.velocity = body.velocity.rotated(Vector3(0, 1, 0), 3 * PI / 2) + var apclient = global.get_node("Archipelago") + if !apclient._pilgrimage_allows_paintings: + global.sunwarp = 1 + body.get_node("pivot/camera/sunwarp_background").visible = false + func _dir_to_int(dir): if dir == "north": diff --git a/Archipelago/painting.gd b/Archipelago/painting.gd new file mode 100644 index 0000000..adc8337 --- /dev/null +++ b/Archipelago/painting.gd @@ -0,0 +1,10 @@ +extends "res://scripts/painting.gd" + +func _looked_at(var body, var painting): + ._looked_at(body, painting) + + if body.is_in_group("player") && (painting.get_name() == self.get_name()): + var apclient = global.get_node("Archipelago") + if !apclient._pilgrimage_allows_paintings: + global.sunwarp = 1 + body.get_node("pivot/camera/sunwarp_background").visible = false diff --git a/Archipelago/painting_eye.gd b/Archipelago/painting_eye.gd index 53d42b5..c6994b1 100644 --- a/Archipelago/painting_eye.gd +++ b/Archipelago/painting_eye.gd @@ -3,9 +3,23 @@ extends "res://scripts/painting_eye.gd" func _answer_correct(): var apclient = global.get_node("Archipelago") - if not apclient._door_shuffle or apclient.paintingIsVanilla(self.name): + if get_name() == "pilgrim_painting2": + # When pilgrimage is enabled, the HOT CRUST panel should actually move the sun painting. + if apclient._pilgrimage_enabled: + movePainting() + elif not apclient._door_shuffle or apclient.paintingIsVanilla(self.name): ._answer_correct() func movePainting(): ._answer_correct() + + +func _looked_at(var body, var painting): + ._looked_at(body, painting) + + if body.is_in_group("player") && (painting.get_name() == self.get_name()): + var apclient = global.get_node("Archipelago") + if !apclient._pilgrimage_allows_paintings: + global.sunwarp = 1 + body.get_node("pivot/camera/sunwarp_background").visible = false diff --git a/Archipelago/painting_scenery.gd b/Archipelago/painting_scenery.gd index f49d602..1186e2f 100644 --- a/Archipelago/painting_scenery.gd +++ b/Archipelago/painting_scenery.gd @@ -9,3 +9,13 @@ func _answer_correct(): func movePainting(): ._answer_correct() + + +func _looked_at(var body, var painting): + ._looked_at(body, painting) + + if body.is_in_group("player") && (painting.get_name() == self.get_name()): + var apclient = global.get_node("Archipelago") + if !apclient._pilgrimage_allows_paintings: + global.sunwarp = 1 + body.get_node("pivot/camera/sunwarp_background").visible = false diff --git a/Archipelago/panel.gd b/Archipelago/panel.gd index da5b572..ce5a642 100644 --- a/Archipelago/panel.gd +++ b/Archipelago/panel.gd @@ -22,10 +22,6 @@ func _ready(): else: atbash_text += old_char - self.get_parent().get_node("Viewport/GUI/Panel/TextEdit").connect( - "answer_correct", self, "answer_correct" - ) - func answer_correct(): var effects = get_tree().get_root().get_node("Spatial/AP_Effects") diff --git a/Archipelago/pilgrimage_terminator.gd b/Archipelago/pilgrimage_terminator.gd new file mode 100644 index 0000000..29db2ee --- /dev/null +++ b/Archipelago/pilgrimage_terminator.gd @@ -0,0 +1,11 @@ +extends Area + + +func _ready(): + var _connected = self.connect("body_entered", self, "_body_entered") + + +func _body_entered(body): + if body.is_in_group("player"): + global.sunwarp = 1 + body.get_node("pivot/camera/sunwarp_background").visible = false diff --git a/Archipelago/settings_screen.gd b/Archipelago/settings_screen.gd index 0ae218e..1a1f5cc 100644 --- a/Archipelago/settings_screen.gd +++ b/Archipelago/settings_screen.gd @@ -24,6 +24,9 @@ func _ready(): apclient_instance.SCRIPT_mypainting = load("user://maps/Archipelago/mypainting.gd") apclient_instance.SCRIPT_notifier = load("user://maps/Archipelago/notifier.gd") apclient_instance.SCRIPT_panel = load("user://maps/Archipelago/panel.gd") + apclient_instance.SCRIPT_pilgrimage_terminator = load( + "user://maps/Archipelago/pilgrimage_terminator.gd" + ) apclient_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") var apdata = ResourceLoader.load("user://maps/Archipelago/gamedata.gd") @@ -39,6 +42,7 @@ func _ready(): # Let's also inject any scripts we need to inject now. installScriptExtension(apclient_instance.SCRIPT_doorControl) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/load.gd")) + installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting_eye.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting_scenery.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/panelLevelSwitch.gd")) diff --git a/Archipelago/teleport.gd b/Archipelago/teleport.gd index 66e26dd..532f081 100644 --- a/Archipelago/teleport.gd +++ b/Archipelago/teleport.gd @@ -5,16 +5,23 @@ var _unlocked = true func _ready(): var apclient = global.get_node("Archipelago") - if (apclient._sunwarp_access != apclient.kSUNWARP_ACCESS_NORMAL and self.get_parent().name == "Teleporter Warps") or (apclient._door_shuffle and !apclient.warpIsVanilla(self.get_parent().name + "/" + self.name)): + if self.get_parent().name == "Teleporter Warps": + if apclient._sunwarp_access != apclient.kSUNWARP_ACCESS_NORMAL: + _unlocked = false + elif apclient._door_shuffle and !apclient.warpIsVanilla(self.get_parent().name + "/" + self.name): _unlocked = false - - ._ready() -func _body_entered(var body): +func _body_entered(body): if _unlocked: ._body_entered(body) + if body.is_in_group("player"): + var apclient = global.get_node("Archipelago") + if !apclient._pilgrimage_enabled: + global.sunwarp = 1 + body.get_node("pivot/camera/sunwarp_background").visible = false + func unlock_warp(): _unlocked = true -- cgit 1.4.1