extends Node3D ## Mond: Käsekatapulte, Schwert, Sonnenbrille, Fake-Bowser Hammer-Fight. @onready var hammer_ui: CanvasLayer = $HammerUI var _correct_hammer: int = 1 var _hits_needed: int = 3 var _hits: int = 0 func _ready() -> void: GameState.current_scene_id = "moon" GameState.heal_full() Achievements.unlock("moon_cheese") hammer_ui.visible = false _spawn_cheese_sellers() var bowser := get_node_or_null("FakeBowser") if bowser and bowser.has_signal("interacted"): bowser.interacted.connect(_start_bowser_fight) var sword := get_node_or_null("SwordStone") if sword: sword.give_item_id = "moon_sword" sword.dialog_key = "dialog_cheese" var shades := get_node_or_null("MoonResearcher") if shades and shades.has_signal("interacted"): shades.interacted.connect(_on_shades) # Convert old CheeseSeller NPC if present into shooter var old := get_node_or_null("CheeseSeller") if old and not old.has_method("notify_cheese_destroyed"): old.queue_free() func _spawn_cheese_sellers() -> void: var scene: PackedScene = load("res://scenes/prefabs/cheese_seller.tscn") if scene == null: return for i in range(4): var s: Node3D = scene.instantiate() add_child(s) s.global_position = Vector3(-6.0 + i * 4.0, 0.1, -2.0 - (i % 2) * 2.0) func _on_shades(_n: Node = null) -> void: Shop.purchase("sunglasses") var ui := get_node_or_null("/root/UIRoot") if ui and ui.has_method("show_dialog"): ui.show_dialog_key("dialog_sunglasses_free") func _start_bowser_fight(_n: Node = null) -> void: if GameState.get_flag("bowser_defeated", false): Inventory.add_item("wedding_egg", 1) return hammer_ui.visible = true Input.mouse_mode = Input.MOUSE_MODE_VISIBLE _hits = 0 var ui := get_node_or_null("/root/UIRoot") if ui and ui.has_method("show_dialog"): ui.show_dialog_key("dialog_bowser") _refresh_hammers() func _refresh_hammers() -> void: _correct_hammer = randi_range(1, 3) $HammerUI/Panel/Margin/VBox/Label.text = Locale.tr_key("dialog_bowser") + " [%d/%d]" % [_hits, _hits_needed] $HammerUI/Panel/Margin/VBox/H1.text = Locale.tr_key("choice_hammer_1") $HammerUI/Panel/Margin/VBox/H2.text = Locale.tr_key("choice_hammer_2") $HammerUI/Panel/Margin/VBox/H3.text = Locale.tr_key("choice_hammer_3") func _pick(hammer: int) -> void: if hammer == _correct_hammer: _hits += 1 AudioDirector.play_hit() if _hits >= _hits_needed: hammer_ui.visible = false Input.mouse_mode = Input.MOUSE_MODE_CAPTURED GameState.set_flag("bowser_defeated", true) Achievements.unlock("beat_bowser") Inventory.add_item("chicken", 1) Inventory.add_item("wedding_egg", 1) var ui := get_node_or_null("/root/UIRoot") if ui and ui.has_method("show_dialog"): ui.show_dialog("Hochzeitsei! Im Inventar benutzen = Whiff zum Endboss.", 4.0) else: _refresh_hammers() else: hammer_ui.visible = false GameState.die("death_bowser") func _on_h1() -> void: _pick(1) func _on_h2() -> void: _pick(2) func _on_h3() -> void: _pick(3)