Houses ~8.5 m; chimps capped ~0.85 m with safer axis fitting. Large GLB/PBR packs stay local until Git LFS (Forgejo HTTP 413). Co-authored-by: Cursor <cursoragent@cursor.com>
92 lines
3.1 KiB
GDScript
92 lines
3.1 KiB
GDScript
extends Node3D
|
|
## Bayerischer Hof: 3 Quests → Paywall-Joke → Exit zu Dressler. Urhahn-Schock.
|
|
|
|
var _fed_pigs: bool = false
|
|
var _milked: bool = false
|
|
var _chickens: bool = false
|
|
|
|
func _ready() -> void:
|
|
GameState.current_scene_id = "farm"
|
|
GameState.heal_full()
|
|
_fed_pigs = bool(GameState.get_flag("pigs_fed", false))
|
|
_milked = bool(GameState.get_flag("cows_milked", false))
|
|
_chickens = bool(GameState.get_flag("chickens_taken", false))
|
|
var mood := str(GameState.get_flag("farmer_mood", "direct"))
|
|
var ui := get_node_or_null("/root/UIRoot")
|
|
if ui and ui.has_method("show_dialog"):
|
|
if mood == "detour":
|
|
ui.show_dialog_key("dialog_farmer_detour", 4.0)
|
|
else:
|
|
ui.show_dialog_key("dialog_farmer_direct", 3.5)
|
|
await get_tree().create_timer(1.2).timeout
|
|
ui.show_dialog_key("dialog_farmer_quest", 4.0)
|
|
var urhahn := get_node_or_null("Urhahn")
|
|
if urhahn:
|
|
urhahn.set("ai_enabled", true)
|
|
urhahn.set("invulnerable", true)
|
|
urhahn.set("instakill", true)
|
|
urhahn.set("move_speed", 4.2)
|
|
urhahn.set("attack_cooldown", 0.85)
|
|
urhahn.set("death_cause_key", "death_rooster")
|
|
urhahn.set("shout_key", "dialog_urhahn")
|
|
urhahn.set("shout_interval", 5.0)
|
|
urhahn.set("billboard_height", SpriteFit.WORLD_BOSS_HEIGHT)
|
|
if urhahn.has_signal("defeated"):
|
|
urhahn.defeated.connect(_on_urhahn_down)
|
|
var hazard := get_node_or_null("RoosterHazard")
|
|
if hazard:
|
|
hazard.set("damage", 99)
|
|
hazard.set("death_cause_key", "death_rooster")
|
|
if hazard.has_signal("body_entered") and not hazard.body_entered.is_connected(_on_rooster_touch):
|
|
hazard.body_entered.connect(_on_rooster_touch)
|
|
var exit := get_node_or_null("Exit")
|
|
if exit:
|
|
exit.set("require_flag", "paywall_cleared")
|
|
var ticket := get_node_or_null("TicketVendor")
|
|
if ticket and ticket.has_signal("interacted"):
|
|
ticket.interacted.connect(_on_ticket)
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
if GameState.get_flag("pigs_fed", false) and not _fed_pigs:
|
|
complete_pig()
|
|
if GameState.get_flag("cows_milked", false) and not _milked:
|
|
complete_cow()
|
|
if GameState.get_flag("chickens_taken", false) and not _chickens:
|
|
complete_chicken()
|
|
|
|
func complete_pig() -> void:
|
|
_fed_pigs = true
|
|
_check_quests()
|
|
|
|
func complete_cow() -> void:
|
|
_milked = true
|
|
_check_quests()
|
|
|
|
func complete_chicken() -> void:
|
|
_chickens = true
|
|
if not Inventory.has_item("lava_chicken"):
|
|
Inventory.add_item("lava_chicken", 1)
|
|
_check_quests()
|
|
|
|
func _check_quests() -> void:
|
|
if not (_fed_pigs and _milked and _chickens):
|
|
return
|
|
GameState.set_flag("farm_quests_done", true)
|
|
var ui := get_node_or_null("/root/UIRoot")
|
|
if ui and ui.has_method("show_dialog"):
|
|
ui.show_dialog_key("dialog_paywall", 4.0)
|
|
Shop.purchase("continue_joke")
|
|
GameState.set_flag("paywall_cleared", true)
|
|
|
|
func _on_urhahn_down() -> void:
|
|
GameState.set_flag("urhahn_defeated", true)
|
|
|
|
func _on_rooster_touch(body: Node3D) -> void:
|
|
if body.is_in_group("player") and not GameState.get_flag("urhahn_defeated", false):
|
|
GameState.apply_shock(10.0)
|
|
|
|
func _on_ticket(_n: Node = null) -> void:
|
|
Inventory.add_item("death_ticket", 1)
|
|
var ui := get_node_or_null("/root/UIRoot")
|
|
if ui and ui.has_method("show_dialog"):
|
|
ui.show_dialog(Locale.tr_key("item_death_ticket"))
|