diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-10-25 12:10:01 -0400 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-10-25 12:10:01 -0400 |
| commit | 131844fc133e2b1c2a4fccaa8a8a542f10d47265 (patch) | |
| tree | 58e3f71b102a1c19066034e5dd01596dfd8e592d | |
| parent | ac92f55dcebaa740dc2996f2bd0f156997741dcc (diff) | |
| download | lingo2-archipelago-131844fc133e2b1c2a4fccaa8a8a542f10d47265.tar.gz lingo2-archipelago-131844fc133e2b1c2a4fccaa8a8a542f10d47265.tar.bz2 lingo2-archipelago-131844fc133e2b1c2a4fccaa8a8a542f10d47265.zip | |
The Fuzzy is playable now
| -rw-r--r-- | apworld/client/allowNumbers.gd | 10 | ||||
| -rw-r--r-- | apworld/client/main.gd | 3 | ||||
| -rw-r--r-- | apworld/client/manager.gd | 3 | ||||
| -rw-r--r-- | apworld/client/player.gd | 50 | ||||
| -rw-r--r-- | apworld/player_logic.py | 8 | ||||
| -rw-r--r-- | apworld/static_logic.py | 1 |
6 files changed, 75 insertions, 0 deletions
| diff --git a/apworld/client/allowNumbers.gd b/apworld/client/allowNumbers.gd new file mode 100644 index 0000000..d958b50 --- /dev/null +++ b/apworld/client/allowNumbers.gd | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | extends "res://scripts/nodes/allowNumbers.gd" | ||
| 2 | |||
| 3 | |||
| 4 | func _readier(): | ||
| 5 | var ap = global.get_node("Archipelago") | ||
| 6 | var gamedata = global.get_node("Gamedata") | ||
| 7 | |||
| 8 | var item_id = gamedata.objects.get_special_ids()["Numbers"] | ||
| 9 | if ap.client.getItemAmount(item_id) >= 1: | ||
| 10 | global.allow_numbers = true | ||
| diff --git a/apworld/client/main.gd b/apworld/client/main.gd index a3b21c5..a543678 100644 --- a/apworld/client/main.gd +++ b/apworld/client/main.gd | |||
| @@ -36,6 +36,7 @@ func _ready(): | |||
| 36 | global.add_child(ap_instance) | 36 | global.add_child(ap_instance) |
| 37 | 37 | ||
| 38 | # Let's also inject any scripts we need to inject now. | 38 | # Let's also inject any scripts we need to inject now. |
| 39 | installScriptExtension(runtime.load_script("allowNumbers.gd")) | ||
| 39 | installScriptExtension(runtime.load_script("animationListener.gd")) | 40 | installScriptExtension(runtime.load_script("animationListener.gd")) |
| 40 | installScriptExtension(runtime.load_script("collectable.gd")) | 41 | installScriptExtension(runtime.load_script("collectable.gd")) |
| 41 | installScriptExtension(runtime.load_script("door.gd")) | 42 | installScriptExtension(runtime.load_script("door.gd")) |
| @@ -86,6 +87,7 @@ func _ready(): | |||
| 86 | unlocks.data["advanced_mastery"] = "" | 87 | unlocks.data["advanced_mastery"] = "" |
| 87 | unlocks.data["charismatic_mastery"] = "" | 88 | unlocks.data["charismatic_mastery"] = "" |
| 88 | unlocks.data["crystalline_mastery"] = "" | 89 | unlocks.data["crystalline_mastery"] = "" |
| 90 | unlocks.data["fuzzy_mastery"] = "" | ||
| 89 | unlocks.data["icarus_mastery"] = "" | 91 | unlocks.data["icarus_mastery"] = "" |
| 90 | unlocks.data["stellar_mastery"] = "" | 92 | unlocks.data["stellar_mastery"] = "" |
| 91 | 93 | ||
| @@ -243,6 +245,7 @@ func startGame(): | |||
| 243 | settings.worldport_fades = "never" | 245 | settings.worldport_fades = "never" |
| 244 | 246 | ||
| 245 | clearResourceCache("res://objects/meshes/gridDoor.tscn") | 247 | clearResourceCache("res://objects/meshes/gridDoor.tscn") |
| 248 | clearResourceCache("res://objects/nodes/allowNumbers.tscn") | ||
| 246 | clearResourceCache("res://objects/nodes/collectable.tscn") | 249 | clearResourceCache("res://objects/nodes/collectable.tscn") |
| 247 | clearResourceCache("res://objects/nodes/door.tscn") | 250 | clearResourceCache("res://objects/nodes/door.tscn") |
| 248 | clearResourceCache("res://objects/nodes/keyHolder.tscn") | 251 | clearResourceCache("res://objects/nodes/keyHolder.tscn") |
| diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index 399d6a5..aa07559 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd | |||
| @@ -261,6 +261,9 @@ func _process_item(item, amount): | |||
| 261 | if item_id == gamedata.objects.get_special_ids()["A Job Well Done"]: | 261 | if item_id == gamedata.objects.get_special_ids()["A Job Well Done"]: |
| 262 | update_job_well_done_sign() | 262 | update_job_well_done_sign() |
| 263 | 263 | ||
| 264 | if item_id == gamedata.objects.get_special_ids()["Numbers"] and global.map == "the_fuzzy": | ||
| 265 | global.allow_numbers = true | ||
| 266 | |||
| 264 | # Show a message about the item if it's new. | 267 | # Show a message about the item if it's new. |
| 265 | if int(item["index"]) > _last_new_item: | 268 | if int(item["index"]) > _last_new_item: |
| 266 | _last_new_item = int(item["index"]) | 269 | _last_new_item = int(item["index"]) |
| diff --git a/apworld/client/player.gd b/apworld/client/player.gd index 9acb942..712a59b 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd | |||
| @@ -25,6 +25,7 @@ func _ready(): | |||
| 25 | _set_up_mastery_listener("advanced") | 25 | _set_up_mastery_listener("advanced") |
| 26 | _set_up_mastery_listener("charismatic") | 26 | _set_up_mastery_listener("charismatic") |
| 27 | _set_up_mastery_listener("crystalline") | 27 | _set_up_mastery_listener("crystalline") |
| 28 | _set_up_mastery_listener("fuzzy") | ||
| 28 | _set_up_mastery_listener("icarus") | 29 | _set_up_mastery_listener("icarus") |
| 29 | _set_up_mastery_listener("stellar") | 30 | _set_up_mastery_listener("stellar") |
| 30 | 31 | ||
| @@ -219,6 +220,29 @@ func _ready(): | |||
| 219 | q_wpl.senders.append(NodePath("../QPanel")) | 220 | q_wpl.senders.append(NodePath("../QPanel")) |
| 220 | giftmap_parent.add_child.call_deferred(q_wpl) | 221 | giftmap_parent.add_child.call_deferred(q_wpl) |
| 221 | 222 | ||
| 223 | if ap.enable_gift_maps.has("The Fuzzy"): | ||
| 224 | var gongus_panel = panel_prefab.instantiate() | ||
| 225 | gongus_panel.name = "GongusPanel" | ||
| 226 | gongus_panel.answer = "gongus" | ||
| 227 | gongus_panel.position = Vector3(33.5, -260, 5.5) | ||
| 228 | giftmap_panel.proxies.append(NodePath("../GongusPanel")) | ||
| 229 | giftmap_parent.add_child.call_deferred(gongus_panel) | ||
| 230 | |||
| 231 | var kiwi_panel = panel_prefab.instantiate() | ||
| 232 | kiwi_panel.name = "KiwiPanel" | ||
| 233 | kiwi_panel.answer = "kiwi" | ||
| 234 | kiwi_panel.position = Vector3(33.5, -270, 5.5) | ||
| 235 | giftmap_panel.proxies.append(NodePath("../KiwiPanel")) | ||
| 236 | giftmap_parent.add_child.call_deferred(kiwi_panel) | ||
| 237 | |||
| 238 | var fuzzy_wpl = wpl_prefab.instantiate() | ||
| 239 | fuzzy_wpl.name = "FuzzyWpl" | ||
| 240 | fuzzy_wpl.exit = "the_fuzzy" | ||
| 241 | fuzzy_wpl.senders.append(NodePath("../GongusPanel")) | ||
| 242 | fuzzy_wpl.senders.append(NodePath("../KiwiPanel")) | ||
| 243 | fuzzy_wpl.complete_at = 1 | ||
| 244 | giftmap_parent.add_child.call_deferred(fuzzy_wpl) | ||
| 245 | |||
| 222 | if ap.enable_gift_maps.has("The Stellar"): | 246 | if ap.enable_gift_maps.has("The Stellar"): |
| 223 | var hatkirby_panel = panel_prefab.instantiate() | 247 | var hatkirby_panel = panel_prefab.instantiate() |
| 224 | hatkirby_panel.name = "HatkirbyPanel" | 248 | hatkirby_panel.name = "HatkirbyPanel" |
| @@ -505,6 +529,32 @@ func _ready(): | |||
| 505 | saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) | 529 | saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) |
| 506 | get_node("/root/scene").add_child.call_deferred(saver) | 530 | get_node("/root/scene").add_child.call_deferred(saver) |
| 507 | 531 | ||
| 532 | # Add the mastery to The Fuzzy. | ||
| 533 | if global.map == "the_fuzzy": | ||
| 534 | var collectable_prefab = preload("res://objects/nodes/collectable.tscn") | ||
| 535 | var saver_prefab = preload("res://objects/nodes/saver.tscn") | ||
| 536 | var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn") | ||
| 537 | |||
| 538 | var mastery = collectable_prefab.instantiate() | ||
| 539 | mastery.name = "collectable" | ||
| 540 | mastery.position = Vector3(0, 2, -20) | ||
| 541 | mastery.unlock_type = "smiley" | ||
| 542 | mastery.material_override = load("res://assets/materials/gold.material") | ||
| 543 | get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery) | ||
| 544 | |||
| 545 | var usl = usl_prefab.instantiate() | ||
| 546 | usl.name = "unlockSetterListenerMastery" | ||
| 547 | usl.key = "fuzzy_mastery" | ||
| 548 | usl.value = "unlocked" | ||
| 549 | usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable")) | ||
| 550 | get_node("/root/scene/Components").add_child.call_deferred(usl) | ||
| 551 | |||
| 552 | var saver = saver_prefab.instantiate() | ||
| 553 | saver.name = "saver_collectables" | ||
| 554 | saver.type = "collectables" | ||
| 555 | saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) | ||
| 556 | get_node("/root/scene").add_child.call_deferred(saver) | ||
| 557 | |||
| 508 | # Add the mastery to The Stellar. | 558 | # Add the mastery to The Stellar. |
| 509 | if global.map == "the_stellar": | 559 | if global.map == "the_stellar": |
| 510 | var collectable_prefab = preload("res://objects/nodes/collectable.tscn") | 560 | var collectable_prefab = preload("res://objects/nodes/collectable.tscn") |
| diff --git a/apworld/player_logic.py b/apworld/player_logic.py index e21e2c3..0cbcdec 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py | |||
| @@ -241,6 +241,8 @@ class Lingo2PlayerLogic: | |||
| 241 | return "The Charismatic" in world.options.enable_gift_maps.value | 241 | return "The Charismatic" in world.options.enable_gift_maps.value |
| 242 | elif game_map.name == "the_crystalline": | 242 | elif game_map.name == "the_crystalline": |
| 243 | return "The Crystalline" in world.options.enable_gift_maps.value | 243 | return "The Crystalline" in world.options.enable_gift_maps.value |
| 244 | elif game_map.name == "the_fuzzy": | ||
| 245 | return "The Fuzzy" in world.options.enable_gift_maps.value | ||
| 244 | elif game_map.name == "the_stellar": | 246 | elif game_map.name == "the_stellar": |
| 245 | return "The Stellar" in world.options.enable_gift_maps.value | 247 | return "The Stellar" in world.options.enable_gift_maps.value |
| 246 | 248 | ||
| @@ -256,6 +258,9 @@ class Lingo2PlayerLogic: | |||
| 256 | if world.options.masteries_requirement > maximum_masteries: | 258 | if world.options.masteries_requirement > maximum_masteries: |
| 257 | world.options.masteries_requirement.value = maximum_masteries | 259 | world.options.masteries_requirement.value = maximum_masteries |
| 258 | 260 | ||
| 261 | if "The Fuzzy" in world.options.enable_gift_maps.value: | ||
| 262 | self.real_items.append("Numbers") | ||
| 263 | |||
| 259 | if self.world.options.shuffle_doors: | 264 | if self.world.options.shuffle_doors: |
| 260 | for progressive in world.static_logic.objects.progressives: | 265 | for progressive in world.static_logic.objects.progressives: |
| 261 | for i in range(0, len(progressive.doors)): | 266 | for i in range(0, len(progressive.doors)): |
| @@ -599,3 +604,6 @@ class Lingo2PlayerLogic: | |||
| 599 | 604 | ||
| 600 | if needed > 0: | 605 | if needed > 0: |
| 601 | reqs.letters[l] = max(reqs.letters.get(l, 0), needed) | 606 | reqs.letters[l] = max(reqs.letters.get(l, 0), needed) |
| 607 | |||
| 608 | if any(l.isnumeric() for l in solution): | ||
| 609 | reqs.items.add("Numbers") | ||
| diff --git a/apworld/static_logic.py b/apworld/static_logic.py index fb23e4c..8e07b82 100644 --- a/apworld/static_logic.py +++ b/apworld/static_logic.py | |||
| @@ -68,6 +68,7 @@ class Lingo2StaticLogic: | |||
| 68 | self.location_name_groups.setdefault("Keyholders", []).append(location_name) | 68 | self.location_name_groups.setdefault("Keyholders", []).append(location_name) |
| 69 | 69 | ||
| 70 | self.item_id_to_name[self.objects.special_ids["A Job Well Done"]] = "A Job Well Done" | 70 | self.item_id_to_name[self.objects.special_ids["A Job Well Done"]] = "A Job Well Done" |
| 71 | self.item_id_to_name[self.objects.special_ids["Numbers"]] = "Numbers" | ||
| 71 | 72 | ||
| 72 | for symbol_name in SYMBOL_ITEMS.values(): | 73 | for symbol_name in SYMBOL_ITEMS.values(): |
| 73 | self.item_id_to_name[self.objects.special_ids[symbol_name]] = symbol_name | 74 | self.item_id_to_name[self.objects.special_ids[symbol_name]] = symbol_name |
