about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-10-25 12:10:01 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-10-25 12:10:01 -0400
commit131844fc133e2b1c2a4fccaa8a8a542f10d47265 (patch)
tree58e3f71b102a1c19066034e5dd01596dfd8e592d
parentac92f55dcebaa740dc2996f2bd0f156997741dcc (diff)
downloadlingo2-archipelago-131844fc133e2b1c2a4fccaa8a8a542f10d47265.tar.gz
lingo2-archipelago-131844fc133e2b1c2a4fccaa8a8a542f10d47265.tar.bz2
lingo2-archipelago-131844fc133e2b1c2a4fccaa8a8a542f10d47265.zip
The Fuzzy is playable now
-rw-r--r--apworld/client/allowNumbers.gd10
-rw-r--r--apworld/client/main.gd3
-rw-r--r--apworld/client/manager.gd3
-rw-r--r--apworld/client/player.gd50
-rw-r--r--apworld/player_logic.py8
-rw-r--r--apworld/static_logic.py1
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 @@
1extends "res://scripts/nodes/allowNumbers.gd"
2
3
4func _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