From 8b1edac5dbc3a5524fe0317102d6ba30623f2111 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Thu, 23 Oct 2025 15:43:20 -0400 Subject: Add a mastery to Icarus --- apworld/client/manager.gd | 2 ++ apworld/client/player.gd | 28 +++++++++++++++++ data/ids.yaml | 3 ++ data/maps/icarus/connections.txtpb | 5 +++ data/maps/icarus/doors.txtpb | 60 ++++++++++++++++++++++++++++++++++++ data/maps/icarus/metadata.txtpb | 2 ++ data/maps/icarus/rooms/Mastery.txtpb | 5 +++ 7 files changed, 105 insertions(+) create mode 100644 data/maps/icarus/rooms/Mastery.txtpb diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index 91797b2..41ab648 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd @@ -64,6 +64,7 @@ var apworld_version = [0, 0, 0] var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 var daedalus_roof_access = false var enable_gift_maps = [] +var enable_icarus = false var keyholder_sanity = false var port_pairings = {} var shuffle_control_center_colors = false @@ -441,6 +442,7 @@ func _client_connected(slot_data): cyan_door_behavior = int(slot_data.get("cyan_door_behavior", 0)) daedalus_roof_access = bool(slot_data.get("daedalus_roof_access", false)) enable_gift_maps = slot_data.get("enable_gift_maps", []) + enable_icarus = bool(slot_data.get("enable_icarus", false)) keyholder_sanity = bool(slot_data.get("keyholder_sanity", false)) shuffle_control_center_colors = bool(slot_data.get("shuffle_control_center_colors", false)) shuffle_doors = bool(slot_data.get("shuffle_doors", false)) diff --git a/apworld/client/player.gd b/apworld/client/player.gd index 9aac5a6..8aee21a 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd @@ -261,6 +261,34 @@ func _ready(): var rte_trigger = get_node("/root/scene/Components/Warps/triggerArea") rte_trigger.position.z = 0 + # Add the mastery to Icarus. + if global.map == "icarus" and ap.enable_icarus: + var collectable_prefab = preload("res://objects/nodes/collectable.tscn") + var saver_prefab = preload("res://objects/nodes/saver.tscn") + var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") + + var mastery = collectable_prefab.instantiate() + mastery.name = "collectable" + mastery.position = Vector3(0, -2000, 0) + mastery.unlock_type = "smiley" + mastery.material_override = load("res://assets/materials/gold.material") + get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery) + + var tpl = tpl_prefab.instantiate() + tpl.teleport_point = Vector3(56.25, 0, -5.5) + tpl.teleport_rotate = Vector3(0, 0, 0) + tpl.target_path = mastery + tpl.name = "Teleport" + tpl.senderGroup.append(NodePath("/root/scene/Panels")) + tpl.nested = true + mastery.add_child.call_deferred(tpl) + + var saver = saver_prefab.instantiate() + saver.name = "saver_collectables" + saver.type = "collectables" + saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) + get_node("/root/scene").add_child.call_deferred(saver) + # Add the mastery to The Advanced. if global.map == "the_advanced": var collectable_prefab = preload("res://objects/nodes/collectable.tscn") diff --git a/data/ids.yaml b/data/ids.yaml index 42f886f..dc57d10 100644 --- a/data/ids.yaml +++ b/data/ids.yaml @@ -1229,6 +1229,9 @@ maps: panels: DIAGNOSIS: 2882 QUEEN: 2883 + Mastery: + masteries: + MASTERY: 2994 Maze: panels: ANALYSIS: 2887 diff --git a/data/maps/icarus/connections.txtpb b/data/maps/icarus/connections.txtpb index b42a660..a963424 100644 --- a/data/maps/icarus/connections.txtpb +++ b/data/maps/icarus/connections.txtpb @@ -617,6 +617,11 @@ connections { to_room: "Trans Rights Panels" oneway: true } +connections { + from_room: "Welcome Spine (Obverse)" + to_room: "Mastery" + door { name: "Mastery" } +} # It is possible to fall out of the map from every room, which always sends you # back to the beginning. connections { diff --git a/data/maps/icarus/doors.txtpb b/data/maps/icarus/doors.txtpb index 8cd54fc..a333dea 100644 --- a/data/maps/icarus/doors.txtpb +++ b/data/maps/icarus/doors.txtpb @@ -224,3 +224,63 @@ doors { panels { room: "Spiral Ramp" name: "FIREMAN" } location_room: "Spiral Ramp" } +doors { + name: "Mastery" + type: EVENT + panels { room: "Above Trans Rights" name: "ANT" } + panels { room: "Big U" name: "DECK" } + panels { room: "Big U" name: "COLONY" } + panels { room: "Big U" name: "MANOR" } + panels { room: "Fatherland" name: "FATHERLAND" } + panels { room: "Highest Point" name: "DIAGNOSIS" } + panels { room: "Highest Point" name: "QUEEN" } + panels { room: "Maze Back" name: "THESE" } + panels { room: "Maze King Panel" name: "KING (2)" } + panels { room: "Maze" name: "KING (1)" } + panels { room: "Maze" name: "ANALYSIS" } + panels { room: "Maze" name: "MANSLAUGHTER" } + panels { room: "Maze" name: "MEDIUMS" } + panels { room: "Maze" name: "BOOKS" } + panels { room: "Mini Icarus 2" name: "BATTERY" } + panels { room: "Mini Icarus 2" name: "TROUPE" } + panels { room: "Mini Icarus 2" name: "ANIMALS" } + panels { room: "Mini Icarus 2" name: "ARROWS" } + panels { room: "Mini Icarus 2" name: "SQUAD" } + panels { room: "Pillar Ramp" name: "ASTEROID" } + panels { room: "Pillar Ramp" name: "BUNCH" } + panels { room: "Pillar Ramp" name: "PRINCES" } + panels { room: "Pillar Ramp" name: "PATRICIDE" } + panels { room: "Pillar Ramp" name: "DRONE" } + panels { room: "Pillar Ramp" name: "PEA (1)" } + panels { room: "Spiral Ramp" name: "FIREMAN" } + panels { room: "The Orb" name: "ADDERS" } + panels { room: "The Orb" name: "PUPPY" } + panels { room: "The Orb" name: "NEEDLE" } + panels { room: "The Orb" name: "US" } + panels { room: "The Orb" name: "FISH" } + panels { room: "The Orb" name: "DEADLINE" } + panels { room: "The Orb" name: "PEA (2)" } + panels { room: "The Orb" name: "THESIS" } + panels { room: "The Orb" name: "CLUTCH (1)" } + panels { room: "The Orb" name: "BASIS (2)" } + panels { room: "The Orb" name: "AXIS" } + panels { room: "The Orb" name: "STRAIGHT" } + panels { room: "The Orb" name: "HISS" } + panels { room: "The Orb" name: "DISCUS" } + panels { room: "The Orb" name: "SON" } + panels { room: "The Orb" name: "CLUTCH (2)" } + panels { room: "Through Woman (Obverse)" name: "HUMAN (2)" } + panels { room: "Through Woman (Obverse)" name: "COW" } + panels { room: "Through Woman (Reverse)" name: "PRINCE" } + panels { room: "Through Woman (Reverse)" name: "BASIS (1)" } + panels { room: "Trans Rights" name: "SERVANT (1)" } + panels { room: "Trans Rights" name: "SERVANT (2)" } + panels { room: "Trans Rights Panels" name: "AGENDER" } + panels { room: "Trans Rights Panels" name: "HUMAN (3)" } + panels { room: "Trans Rights Panels" name: "HUMAN (4)" } + panels { room: "Welcome Spine (Obverse)" name: "FISHWIFE" } + panels { room: "Welcome Spine (Obverse)" name: "HUMAN (1)" } + panels { room: "Welcome Spine (Reverse)" name: "FATHER" } + panels { room: "Welcome Spine (Reverse)" name: "TERMITE" } + panels { room: "Welcome Spine (Reverse)" name: "SISTER" } +} diff --git a/data/maps/icarus/metadata.txtpb b/data/maps/icarus/metadata.txtpb index 83afad7..8512d8e 100644 --- a/data/maps/icarus/metadata.txtpb +++ b/data/maps/icarus/metadata.txtpb @@ -1,2 +1,4 @@ display_name: "Icarus" type: ICARUS +# The map's mastery is created at runtime. +custom_nodes: "Components/Collectables/collectable" diff --git a/data/maps/icarus/rooms/Mastery.txtpb b/data/maps/icarus/rooms/Mastery.txtpb new file mode 100644 index 0000000..bbe8742 --- /dev/null +++ b/data/maps/icarus/rooms/Mastery.txtpb @@ -0,0 +1,5 @@ +name: "Mastery" +masteries { + name: "MASTERY" + path: "Components/Collectables/collectable" +} -- cgit 1.4.1