From 7b47e847aeae5bf9041316c2843e6d7185a38ae9 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 5 Mar 2026 11:43:13 +0000 Subject: [PATCH] =?UTF-8?q?Initial=20jam=20build,=202=20endings=E2=80=94?= =?UTF-8?q?=20secret=20ending=20glitches=20and=20doesn't=20show=20title=20?= =?UTF-8?q?upon=20completion.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- export_presets.cfg | 340 +++++++++++++++++++++++++++++++++++++++++- scenes/boss.gd | 144 +++++++++++++----- scenes/boss.tscn | 1 + scenes/boss_horse.gd | 2 - scenes/bullet.gd | 6 +- scenes/enemy_crt.tscn | 1 + scenes/event_bus.gd | 5 + scenes/goose.tscn | 2 +- scenes/main.gd | 21 ++- scenes/main.tscn | 3 +- scenes/player.gd | 18 ++- scenes/player.tscn | 1 + scenes/wave.gd | 10 +- sprites/bubble.png | Bin 1679 -> 2704 bytes 14 files changed, 496 insertions(+), 58 deletions(-) diff --git a/export_presets.cfg b/export_presets.cfg index 241e35f..a81a4b7 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -6,9 +6,9 @@ runnable=false dedicated_server=false custom_features="" export_filter="all_resources" -include_filter="" +include_filter="*" exclude_filter="" -export_path="../../Downloads/2026-03-04 115917 -The Third Place/index.html" +export_path="../../Downloads/2026-03-05 113654 The Third Place/index.html" patches=PackedStringArray() patch_delta_encoding=false patch_delta_compression_level_zstd=19 @@ -28,7 +28,7 @@ custom_template/debug="" custom_template/release="" variant/extensions_support=false variant/thread_support=false -vram_texture_compression/for_desktop=true +vram_texture_compression/for_desktop=false vram_texture_compression/for_mobile=false html/export_icon=true html/custom_html_shell="" @@ -37,7 +37,7 @@ html/canvas_resize_policy=2 html/focus_canvas_on_start=true html/experimental_virtual_keyboard=false progressive_web_app/enabled=false -progressive_web_app/ensure_cross_origin_isolation_headers=true +progressive_web_app/ensure_cross_origin_isolation_headers=false progressive_web_app/offline_page="" progressive_web_app/display=3 progressive_web_app/orientation=2 @@ -47,3 +47,335 @@ progressive_web_app/icon_512x512="" progressive_web_app/background_color=Color(0, 0, 0, 1) threads/emscripten_pool_size=8 threads/godot_pool_size=4 + +[preset.1] + +name="macOS" +platform="macOS" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="../../Downloads/The Third Place.dmg" +patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.1.options] + +export/distribution_type=0 +binary_format/architecture="universal" +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +application/liquid_glass_icon="" +application/icon="" +application/icon_interpolation=4 +application/bundle_identifier="com.the-third-place" +application/signature="" +application/app_category="Games" +application/short_version="" +application/version="" +application/copyright="" +application/copyright_localized={} +application/min_macos_version_x86_64="10.12" +application/min_macos_version_arm64="11.00" +application/export_angle=0 +display/high_res=true +shader_baker/enabled=false +application/additional_plist_content="" +xcode/platform_build="14C18" +xcode/sdk_version="13.1" +xcode/sdk_build="22C55" +xcode/sdk_name="macosx13.1" +xcode/xcode_version="1420" +xcode/xcode_build="14C18" +codesign/codesign=1 +codesign/installer_identity="" +codesign/apple_team_id="" +codesign/identity="" +codesign/entitlements/custom_file="" +codesign/entitlements/allow_jit_code_execution=false +codesign/entitlements/allow_unsigned_executable_memory=false +codesign/entitlements/allow_dyld_environment_variables=false +codesign/entitlements/disable_library_validation=false +codesign/entitlements/audio_input=false +codesign/entitlements/camera=false +codesign/entitlements/location=false +codesign/entitlements/address_book=false +codesign/entitlements/calendars=false +codesign/entitlements/photos_library=false +codesign/entitlements/apple_events=false +codesign/entitlements/debugging=false +codesign/entitlements/app_sandbox/enabled=false +codesign/entitlements/app_sandbox/network_server=false +codesign/entitlements/app_sandbox/network_client=false +codesign/entitlements/app_sandbox/device_usb=false +codesign/entitlements/app_sandbox/device_bluetooth=false +codesign/entitlements/app_sandbox/files_downloads=0 +codesign/entitlements/app_sandbox/files_pictures=0 +codesign/entitlements/app_sandbox/files_music=0 +codesign/entitlements/app_sandbox/files_movies=0 +codesign/entitlements/app_sandbox/files_user_selected=0 +codesign/entitlements/app_sandbox/helper_executables=[] +codesign/entitlements/additional="" +codesign/custom_options=PackedStringArray() +notarization/notarization=0 +privacy/microphone_usage_description="" +privacy/microphone_usage_description_localized={} +privacy/camera_usage_description="" +privacy/camera_usage_description_localized={} +privacy/location_usage_description="" +privacy/location_usage_description_localized={} +privacy/address_book_usage_description="" +privacy/address_book_usage_description_localized={} +privacy/calendar_usage_description="" +privacy/calendar_usage_description_localized={} +privacy/photos_library_usage_description="" +privacy/photos_library_usage_description_localized={} +privacy/desktop_folder_usage_description="" +privacy/desktop_folder_usage_description_localized={} +privacy/documents_folder_usage_description="" +privacy/documents_folder_usage_description_localized={} +privacy/downloads_folder_usage_description="" +privacy/downloads_folder_usage_description_localized={} +privacy/network_volumes_usage_description="" +privacy/network_volumes_usage_description_localized={} +privacy/removable_volumes_usage_description="" +privacy/removable_volumes_usage_description_localized={} +privacy/tracking_enabled=false +privacy/tracking_domains=PackedStringArray() +privacy/collected_data/name/collected=false +privacy/collected_data/name/linked_to_user=false +privacy/collected_data/name/used_for_tracking=false +privacy/collected_data/name/collection_purposes=0 +privacy/collected_data/email_address/collected=false +privacy/collected_data/email_address/linked_to_user=false +privacy/collected_data/email_address/used_for_tracking=false +privacy/collected_data/email_address/collection_purposes=0 +privacy/collected_data/phone_number/collected=false +privacy/collected_data/phone_number/linked_to_user=false +privacy/collected_data/phone_number/used_for_tracking=false +privacy/collected_data/phone_number/collection_purposes=0 +privacy/collected_data/physical_address/collected=false +privacy/collected_data/physical_address/linked_to_user=false +privacy/collected_data/physical_address/used_for_tracking=false +privacy/collected_data/physical_address/collection_purposes=0 +privacy/collected_data/other_contact_info/collected=false +privacy/collected_data/other_contact_info/linked_to_user=false +privacy/collected_data/other_contact_info/used_for_tracking=false +privacy/collected_data/other_contact_info/collection_purposes=0 +privacy/collected_data/health/collected=false +privacy/collected_data/health/linked_to_user=false +privacy/collected_data/health/used_for_tracking=false +privacy/collected_data/health/collection_purposes=0 +privacy/collected_data/fitness/collected=false +privacy/collected_data/fitness/linked_to_user=false +privacy/collected_data/fitness/used_for_tracking=false +privacy/collected_data/fitness/collection_purposes=0 +privacy/collected_data/payment_info/collected=false +privacy/collected_data/payment_info/linked_to_user=false +privacy/collected_data/payment_info/used_for_tracking=false +privacy/collected_data/payment_info/collection_purposes=0 +privacy/collected_data/credit_info/collected=false +privacy/collected_data/credit_info/linked_to_user=false +privacy/collected_data/credit_info/used_for_tracking=false +privacy/collected_data/credit_info/collection_purposes=0 +privacy/collected_data/other_financial_info/collected=false +privacy/collected_data/other_financial_info/linked_to_user=false +privacy/collected_data/other_financial_info/used_for_tracking=false +privacy/collected_data/other_financial_info/collection_purposes=0 +privacy/collected_data/precise_location/collected=false +privacy/collected_data/precise_location/linked_to_user=false +privacy/collected_data/precise_location/used_for_tracking=false +privacy/collected_data/precise_location/collection_purposes=0 +privacy/collected_data/coarse_location/collected=false +privacy/collected_data/coarse_location/linked_to_user=false +privacy/collected_data/coarse_location/used_for_tracking=false +privacy/collected_data/coarse_location/collection_purposes=0 +privacy/collected_data/sensitive_info/collected=false +privacy/collected_data/sensitive_info/linked_to_user=false +privacy/collected_data/sensitive_info/used_for_tracking=false +privacy/collected_data/sensitive_info/collection_purposes=0 +privacy/collected_data/contacts/collected=false +privacy/collected_data/contacts/linked_to_user=false +privacy/collected_data/contacts/used_for_tracking=false +privacy/collected_data/contacts/collection_purposes=0 +privacy/collected_data/emails_or_text_messages/collected=false +privacy/collected_data/emails_or_text_messages/linked_to_user=false +privacy/collected_data/emails_or_text_messages/used_for_tracking=false +privacy/collected_data/emails_or_text_messages/collection_purposes=0 +privacy/collected_data/photos_or_videos/collected=false +privacy/collected_data/photos_or_videos/linked_to_user=false +privacy/collected_data/photos_or_videos/used_for_tracking=false +privacy/collected_data/photos_or_videos/collection_purposes=0 +privacy/collected_data/audio_data/collected=false +privacy/collected_data/audio_data/linked_to_user=false +privacy/collected_data/audio_data/used_for_tracking=false +privacy/collected_data/audio_data/collection_purposes=0 +privacy/collected_data/gameplay_content/collected=false +privacy/collected_data/gameplay_content/linked_to_user=false +privacy/collected_data/gameplay_content/used_for_tracking=false +privacy/collected_data/gameplay_content/collection_purposes=0 +privacy/collected_data/customer_support/collected=false +privacy/collected_data/customer_support/linked_to_user=false +privacy/collected_data/customer_support/used_for_tracking=false +privacy/collected_data/customer_support/collection_purposes=0 +privacy/collected_data/other_user_content/collected=false +privacy/collected_data/other_user_content/linked_to_user=false +privacy/collected_data/other_user_content/used_for_tracking=false +privacy/collected_data/other_user_content/collection_purposes=0 +privacy/collected_data/browsing_history/collected=false +privacy/collected_data/browsing_history/linked_to_user=false +privacy/collected_data/browsing_history/used_for_tracking=false +privacy/collected_data/browsing_history/collection_purposes=0 +privacy/collected_data/search_history/collected=false +privacy/collected_data/search_history/linked_to_user=false +privacy/collected_data/search_history/used_for_tracking=false +privacy/collected_data/search_history/collection_purposes=0 +privacy/collected_data/user_id/collected=false +privacy/collected_data/user_id/linked_to_user=false +privacy/collected_data/user_id/used_for_tracking=false +privacy/collected_data/user_id/collection_purposes=0 +privacy/collected_data/device_id/collected=false +privacy/collected_data/device_id/linked_to_user=false +privacy/collected_data/device_id/used_for_tracking=false +privacy/collected_data/device_id/collection_purposes=0 +privacy/collected_data/purchase_history/collected=false +privacy/collected_data/purchase_history/linked_to_user=false +privacy/collected_data/purchase_history/used_for_tracking=false +privacy/collected_data/purchase_history/collection_purposes=0 +privacy/collected_data/product_interaction/collected=false +privacy/collected_data/product_interaction/linked_to_user=false +privacy/collected_data/product_interaction/used_for_tracking=false +privacy/collected_data/product_interaction/collection_purposes=0 +privacy/collected_data/advertising_data/collected=false +privacy/collected_data/advertising_data/linked_to_user=false +privacy/collected_data/advertising_data/used_for_tracking=false +privacy/collected_data/advertising_data/collection_purposes=0 +privacy/collected_data/other_usage_data/collected=false +privacy/collected_data/other_usage_data/linked_to_user=false +privacy/collected_data/other_usage_data/used_for_tracking=false +privacy/collected_data/other_usage_data/collection_purposes=0 +privacy/collected_data/crash_data/collected=false +privacy/collected_data/crash_data/linked_to_user=false +privacy/collected_data/crash_data/used_for_tracking=false +privacy/collected_data/crash_data/collection_purposes=0 +privacy/collected_data/performance_data/collected=false +privacy/collected_data/performance_data/linked_to_user=false +privacy/collected_data/performance_data/used_for_tracking=false +privacy/collected_data/performance_data/collection_purposes=0 +privacy/collected_data/other_diagnostic_data/collected=false +privacy/collected_data/other_diagnostic_data/linked_to_user=false +privacy/collected_data/other_diagnostic_data/used_for_tracking=false +privacy/collected_data/other_diagnostic_data/collection_purposes=0 +privacy/collected_data/environment_scanning/collected=false +privacy/collected_data/environment_scanning/linked_to_user=false +privacy/collected_data/environment_scanning/used_for_tracking=false +privacy/collected_data/environment_scanning/collection_purposes=0 +privacy/collected_data/hands/collected=false +privacy/collected_data/hands/linked_to_user=false +privacy/collected_data/hands/used_for_tracking=false +privacy/collected_data/hands/collection_purposes=0 +privacy/collected_data/head/collected=false +privacy/collected_data/head/linked_to_user=false +privacy/collected_data/head/used_for_tracking=false +privacy/collected_data/head/collection_purposes=0 +privacy/collected_data/other_data_types/collected=false +privacy/collected_data/other_data_types/linked_to_user=false +privacy/collected_data/other_data_types/used_for_tracking=false +privacy/collected_data/other_data_types/collection_purposes=0 +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +pkill -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\" +rm -rf \"{temp_dir}\"" + +[preset.2] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="../../Downloads/The Third Place.exe" +patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.2.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +shader_baker/enabled=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="" +application/file_description="" +application/copyright="" +application/trademarks="" +application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" diff --git a/scenes/boss.gd b/scenes/boss.gd index b0e74ec..49115a9 100644 --- a/scenes/boss.gd +++ b/scenes/boss.gd @@ -6,24 +6,36 @@ var bullet_scene = preload("res://scenes/enemy_bullet.tscn") var start_pos = Vector2.ZERO var speed = 0 var tween_speed: float = 1.4 +var pause: bool = false -var horse_counter = 1 -var exploding = false +var horse_counter: int = 0 +var horse_phase: bool = true +var exploding:bool = false +var heart_taken: bool = false +var heart_broken: bool = false @onready var boss = $AnimationPlayer @onready var screensize = get_viewport_rect().size func _ready(): + EventBus.ending.connect(_on_ending) + boss_intro() + $Heart.monitoring = false + $Heart.monitorable = false + +func _process(delta: float) -> void: + if pause == true: return + + +func boss_intro(): + # Move boss into screen position = Vector2(screensize.x / 2, -screensize.y) var tween = create_tween().set_ease(Tween.EASE_OUT) tween.tween_property(self, "position:y", 100, 2) await tween.finished - boss_intro() - - -func boss_intro(): + # Introduce Lady of Whispers print("Boss intro!") await get_tree().create_timer(2).timeout boss.play("align") @@ -32,57 +44,119 @@ func boss_intro(): await get_tree().create_timer(4).timeout boss.play("whisper") await get_tree().create_timer(1).timeout - boss_horse() + + # Check to see if horse phase is available + horse_phase_check() + + +func horse_phase_check(): + if horse_phase == true: boss_horse() + if horse_phase == false: + print("No more horse!") + $Sprite2D.frame = 0 + if horse_phase == false and heart_broken == true: + $Sprite2D.frame = 4 func boss_horse(): - $Horse.horse_phase = true - print("Boss horse!") - await get_tree().create_timer(2).timeout - EventBus.flash_screen.emit(.25) - $Heart.hide() - $Horse.show() - $Sprite2D.frame = 7 - $Horse.start() - var horse_player = $Horse/AnimationPlayer - horse_player.play("run") - await get_tree().create_timer(10).timeout - EventBus.flash_screen.emit(.25) - $Horse.hide() - $Horse.end() - await get_tree().create_timer(5).timeout - horse_counter += 1 - lady_of_whispers() + + if heart_taken == false: + print("Boss horse!") + await get_tree().create_timer(2).timeout + EventBus.flash_screen.emit(.25) + $Heart.hide() + $Heart.monitoring = false + $Sprite2D.frame = 7 + $Horse.show() + $Horse.start() + var horse_player = $Horse/AnimationPlayer + horse_player.play("run") + await get_tree().create_timer(10).timeout + EventBus.flash_screen.emit(.25) + $Horse.hide() + $Horse.end() + await get_tree().create_timer(5).timeout + horse_counter += 1 + lady_of_whispers() + + if heart_taken == true or heart_broken == true: + horse_phase = false + horse_phase_check() func lady_of_whispers(): if horse_counter == 2: - - print("Lady of Whispers offers you a heart!") - boss.play("rise") - await get_tree().create_timer(4).timeout - # boss.play("whisper") offer_heart() + if horse_counter <= 1: print("Lady of Whispers!") boss.play("rise") await get_tree().create_timer(4).timeout boss.play("whisper") + await boss.animation_finished await get_tree().create_timer(1).timeout - boss_horse() + horse_phase_check() func hit_detection(): return func offer_heart(): - $Heart.show() + print("Lady of Whispers offers you a heart!") + boss.play("rise") await get_tree().create_timer(4).timeout - boss_horse() - horse_counter = 0 - print("Horse Counter:",horse_counter) - + $Heart.show() + $Heart.monitoring = true + $Heart.monitorable = true + heart_check() + +func heart_check(): + print("Heart check!") + if heart_taken == false: + await get_tree().create_timer(4).timeout + horse_counter = 0 + print("Horse Counter:",horse_counter) + + if heart_taken == true or heart_broken == true: + $Heart.monitoring = false + $Heart.monitorable = false + horse_phase = false + + horse_phase_check() + +func _on_ending(value: int): + if value == 1: + heart_taken = true + horse_phase = false + #horse_phase_check() + print("Fix your broken heart or die") + $Sprite2D.frame = 0 + var tween = create_tween() + tween.tween_property(self, "position:y", 180, 2).set_ease(Tween.EASE_OUT) + tween.tween_property(self, "position:y", 60 * -1, .25).set_ease(Tween.EASE_IN) + await get_tree().create_timer(8).timeout + EventBus.goose_talk.emit(3) + self.monitoring = false + self.monitorable = false + + + if value == 2: + heart_broken = true + horse_phase = false + horse_phase_check() + print("Some hearts are too wild.") + $Heart.hide() + $Heart.monitoring = false + $Heart.monitorable = false + EventBus.flash_screen.emit(.25) + $Sprite2D.frame = 4 + await get_tree().create_timer(4).timeout + EventBus.goose_talk.emit(4) + self.monitoring = false + self.monitorable = false + EventBus.win_game.emit() + diff --git a/scenes/boss.tscn b/scenes/boss.tscn index 0a32d18..075fa0b 100644 --- a/scenes/boss.tscn +++ b/scenes/boss.tscn @@ -217,6 +217,7 @@ wait_time = 0.05 one_shot = true [node name="Heart" type="Area2D" parent="." unique_id=1098254590 groups=["heart"]] +visible = false position = Vector2(0, -71) [node name="Sprite2D" type="Sprite2D" parent="Heart" unique_id=520903474] diff --git a/scenes/boss_horse.gd b/scenes/boss_horse.gd index fa421fa..808dec6 100644 --- a/scenes/boss_horse.gd +++ b/scenes/boss_horse.gd @@ -60,7 +60,6 @@ func _process(delta): rotater.rotation_degrees -= 2.5 # Adjust rotation speed func spawn_bullet(): - print("I'm spawning bullets!") var bullet = bullet_scene.instantiate() get_tree().root.add_child(bullet) bullet.position = rotater.global_position @@ -73,7 +72,6 @@ func spawn_bullet(): func _on_shoot_timer_timeout() -> void: - print("Shoot timer timeout!") spawn_bullet() #for s in rotater.get_children(): #var b = bullet_scene.instantiate() diff --git a/scenes/bullet.gd b/scenes/bullet.gd index e040f21..08aba9f 100644 --- a/scenes/bullet.gd +++ b/scenes/bullet.gd @@ -81,9 +81,9 @@ func _on_area_entered(area: Area2D) -> void: if area.is_in_group("heart"): - print("I've shot the heart!") - area.hit_detection() - queue_free() + print("Heart hit!") + EventBus.ending.emit(2) + #area.hit_detection() #func bullet_fx(): diff --git a/scenes/enemy_crt.tscn b/scenes/enemy_crt.tscn index f5e6611..cf78541 100644 --- a/scenes/enemy_crt.tscn +++ b/scenes/enemy_crt.tscn @@ -254,6 +254,7 @@ libraries/ = SubResource("AnimationLibrary_7ellt") [node name="ImpactCRT" type="AudioStreamPlayer2D" parent="." unique_id=518408763] stream = ExtResource("6_gas3w") +volume_db = -16.028 [connection signal="timeout" from="MoveTimer" to="." method="_on_timer_timeout"] [connection signal="timeout" from="ShootTimer" to="." method="_on_shoot_timer_timeout"] diff --git a/scenes/event_bus.gd b/scenes/event_bus.gd index f98c6d4..f397bb8 100644 --- a/scenes/event_bus.gd +++ b/scenes/event_bus.gd @@ -15,4 +15,9 @@ signal goose_talk(frame_index: int) signal flash_screen(duration: float) signal cloud_speed() +# Ending +signal ending(value: int) +signal win_game() +signal secret_win_game() + @warning_ignore_restore("unused_signal") # put any future signals you add between the two ignore annotations diff --git a/scenes/goose.tscn b/scenes/goose.tscn index 17ef3f2..945d357 100644 --- a/scenes/goose.tscn +++ b/scenes/goose.tscn @@ -16,7 +16,7 @@ texture = ExtResource("1_wo8sg") [node name="Bubble" type="Sprite2D" parent="DapperGoose" unique_id=2012258473] position = Vector2(-108, -21) texture = ExtResource("3_g7ad0") -hframes = 4 +hframes = 8 [node name="Quacking" type="Timer" parent="DapperGoose" unique_id=1836315393] wait_time = 3.0 diff --git a/scenes/main.gd b/scenes/main.gd index bfd2916..d934e96 100644 --- a/scenes/main.gd +++ b/scenes/main.gd @@ -26,6 +26,8 @@ func _ready(): #EventBus.enemy_died.connect(_on_enemy_died) EventBus.enemy_hit.connect(_on_enemy_hit) EventBus.flash_screen.connect(_on_flash_screen) + EventBus.win_game.connect(_on_win_game) + EventBus.secret_win_game.connect(_on_secret_win_game) #func spawn_enemies(): @@ -78,7 +80,7 @@ func _on_player_died(): # get_tree().call_group("enemies", "queue_free") # $Player.set_process(false) # get_tree().call_group("enemies", "set_process", false) - EventBus.goose_talk.emit(3) + EventBus.goose_talk.emit(7) instance.queue_free() game_over.show() $LevelAudio.stop() @@ -91,6 +93,7 @@ func _on_player_died(): func new_game(): $CanvasLayer/Title.hide() # Ensure enemies are cleared. + get_tree().call_group("boss", "queue_free") get_tree().call_group("enemies", "queue_free") get_tree().call_group("shards", "queue_free") get_tree().call_group("enemy_bullets", "queue_free") @@ -115,7 +118,7 @@ func new_game(): # Do some DapperGoose talk await get_tree().create_timer(1.5).timeout - EventBus.goose_talk.emit(2) + EventBus.goose_talk.emit(6) # Tell the enemies to spawn! #await get_tree().create_timer(.5).timeout @@ -143,11 +146,21 @@ func _on_start_pressed(): $Welcome.play() new_game() -func win_game(): + +func _on_secret_win_game(): + playing = false + game_over.show() + #await get_tree().create_timer(8).timeout + game_over.hide() + $CanvasLayer/Title.show() + start_button.show() + + +func _on_win_game(): playing = false game_over.show() $Player._on_player_victory() - await get_tree().create_timer(2).timeout + await get_tree().create_timer(8).timeout game_over.hide() $CanvasLayer/Title.show() start_button.show() diff --git a/scenes/main.tscn b/scenes/main.tscn index 2b0547b..2761ac7 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -139,7 +139,8 @@ volume_db = -0.5 [node name="LevelAudio" type="AudioStreamPlayer2D" parent="." unique_id=2125260365] stream = ExtResource("12_trceg") -volume_db = -13.178 +volume_db = -20.0 +pitch_scale = 0.8 [node name="Wave" parent="." unique_id=2117861058 instance=ExtResource("11_ya4ey")] diff --git a/scenes/player.gd b/scenes/player.gd index 80bec54..7d846d6 100644 --- a/scenes/player.gd +++ b/scenes/player.gd @@ -12,7 +12,7 @@ signal damage_taken var shield: int = 0: set = _on_set_shield - +var pause: bool = false var can_shoot = false var shader_active: bool = false: set(value): @@ -32,6 +32,7 @@ func _ready(): set_process(false) print(shield) EventBus.set_shield.connect(_on_set_shield) + #EventBus.player_victory.connect(_on_player_victory) # start() func start(): @@ -55,6 +56,8 @@ func start(): # EventBus.shield_changed.emit(max_shield, old_value, shield) func _process(delta): + if pause == true: return + var input = Input.get_vector("left", "right", "up", "down") if input.x > 0: $Ship.frame = 2 @@ -129,9 +132,16 @@ func _on_area_entered(area): if area.is_in_group("boss"): print("Entered boss!") + shield -= int(max_shield / 2) + _on_damage_taken() if area.is_in_group("heart"): print("Got the heart!") + pause = true + reparent(area) + ship.frame = 0 + EventBus.ending.emit(1) + func _on_damage_taken(): @@ -150,8 +160,10 @@ func _on_player_victory() -> void: print("Victory!") # get_node("EnemyBullet").monitoring = false #TODO make sure bullets stop monitoring! set_process(false) - $Ship.frame = 1 - await get_tree().create_timer(1).timeout + #$Ship.frame = 1 + self.monitorable = false + self.monitoring = false + await get_tree().create_timer(4).timeout # $Ship/Boosters/BoosterBurst.show() var tween = create_tween() tween.tween_property(self, "position:y", 60 * -1, .25).set_ease(tween.EASE_IN) diff --git a/scenes/player.tscn b/scenes/player.tscn index 7bae6c3..b15f89b 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -142,6 +142,7 @@ region_rect = Rect2(0, 0, 96, 16) [node name="HeadInflate" type="AudioStreamPlayer2D" parent="." unique_id=374500278] stream = ExtResource("10_y4r1p") +volume_db = -9.973 [connection signal="area_entered" from="." to="." method="_on_area_entered"] [connection signal="damage_taken" from="." to="." method="_on_damage_taken"] diff --git a/scenes/wave.gd b/scenes/wave.gd index f6ee453..3257a9b 100644 --- a/scenes/wave.gd +++ b/scenes/wave.gd @@ -25,7 +25,7 @@ func _ready(): func spawn_enemies(): - if wave_count == 1: #This is for CHICKENS + if wave_count == 3: #This is for CHICKENS print("Enemy Wave: ", wave_count) enemy = CHICKEN for x in range(COLS): @@ -38,7 +38,7 @@ func spawn_enemies(): await get_tree().process_frame print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size()) - if wave_count == 3: #This is for CRTs + if wave_count == 1: #This is for CRTs print("Enemy Wave: ", wave_count) enemy = CRT var cols_mod = COLS - 1 @@ -53,7 +53,7 @@ func spawn_enemies(): enemy_count = rows_mod * cols_mod await get_tree().process_frame - if wave_count == 0 : #This if for Mirror + if wave_count == 2 : #This if for Mirror print("Enemy Wave: ", wave_count) # Spawn Table @@ -89,7 +89,7 @@ func spawn_enemies(): s.start_all_animations() - if wave_count == 2 : #This is for Boss + if wave_count == 0 : #This is for Boss # Hide the player @@ -126,7 +126,7 @@ func wave_status(): wave_complete = false else: - EventBus.goose_talk.emit(1) + EventBus.goose_talk.emit(wave_count) wave_initialize() wave_complete = true diff --git a/sprites/bubble.png b/sprites/bubble.png index b406e33c0800cdc85382e4d3d23bb491ded46235..db2809a82ca15ed19fc395b19cc73bb40933ac8a 100644 GIT binary patch literal 2704 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 BZ_@w( literal 1679 zcmX|?c~sKr8pnSwV@|oGS@%{h-LjfYvJ9`9fRqSw2{T+$X_zTeNxD-bLkVQ2w=&bQ znj9AtG#APRa6@!l)A3@KVxl;VUNkpCL@NQybc;Eyuj zylXQ60On{v1P%ZUg7kMUQxm;9qGHnYhXDnLItB20Y?T0Df<_}w2F2#8S;t}~Jj{F> z8m0~~?qF?C$h~4I4j1=1wAIHYCEK0&U^V3||Nh(&rqLrnTb$897mUSX3ieEIF+@N5 zA1u#ycGdybM11csca^U=O#`d{!=d*EJ$$CT>V-MB_IXKMtPJ2~03fyoY{=V3khNv4I$kxe;meOKFs>I4?y9^jo9CGijiK_*TA#+QepYEd4LXeI zutU% zEYk zCpABj?B-{5wL=0B$dT?0Rz1xdcv#5s^~dM} z3Mcn+*=|4KDw8gR9Uf8sJ4$Uo@Zw~9=h9jCF{&j@MFBDJ3Fs1YD{5=%J{_IIZt_fP zpgv22WP_7`UA%9ba-O1E1=|EPWxu13+-HF*kWCQL0}tNzWuzUfid9*ESMf)9!dB&g zuuFTh1+s&s(JZS;+wkkNh{XTwxecK1oGWJK{6Lb)jTq(geXm!h9=ppTzk+lWMZGdn zX05ck7mq#)h4#6^k#uco1eqEj)P*Sqo(RdO32hM5=hs3T*`v%?iZ1&rr_`(W7 z$emcoZtss5<9KUA*u#H<@glS5;vSc|*fE+RO$WhKWrTX^k8_LJE8G~0!_EJe6fpZ0 zp+oXjzZF-P&gcALC%kDEs7r(7urpf1u6M2A2lgap`vgziL3Y*f-09`bx2`6(G5sof z&h?f)IVXM{C+^;doRvx5cwH6Ow@Qt1_sY#X-1r@Gqe~f2`E2?U-Q@=Vv}#y7GedA- z;bIJyJ?GMVzgQtUa!H$m5W(bluDx=)M#&B8E1%yR}y@%R&N`Hr(MX z)RZql^&%YVsTC+DtU%pW+92)p=qG2bMfuAkJ9LL5&mZ^Ekzs$l69iZHKK>1eH77zB zcM6D=HSsP9j`?XCc=@I`)_6O374%>kkCN;$#$=`*Egir7c2US9+Lcx6gtLMO??7+W zFxi_}29qwI`nCrXfsoka>lDrk{T`lKO}}CeFT1eB)3JYpFw3aPwv$+!v6~C^^BglRe?huGSR*qMu*gC;8q}OPUd4xX9 z8bZxb-g65%)#}>o^OfJny7z{fVs(2=ug~4~H%yyw`q{XmWxtB^WLL|n7e(oR|7ArF z4gKC-$lQt9N!RUN(g`u?=GiCj{t(K>k8=)il+7q8)< zq*6Ur8e5v!Erw3tuF*mlpDH06j)$}jxg_qT^b-XoCg1@*@DA9u#05U+Xr|G*Ud$;y zm`J6fK8;YSoLzlOSxl{i6=yYt*#Dn?{oCto7QWHsI_6-yEHZm*ESUvL>+<4~rSWf2 zueb=-rI$;{b&pM0(FK_eaNE={y2C2TYtUqai+4Hh+XEOhYwHiRjWl5xNzT{LvzJY| z@n#!or2U#m!)aq~iypQ5aME54$8fqI=bPczyC{OM8%Ke#mIBD$F2~R^-?6{ZVm7E; zUBhu-+BzN5Y3(r&+6I^G*Oy|VAACv(Q7I>lP}sx`u!jf!zLrOj8>70vfF37_H~7%W V@ncFxi25G}K>PY5c&ENk{0lQwTRQ*%