diff options
34 files changed, 772 insertions, 112 deletions
@@ -1,3 +1,7 @@ # Godot 4+ specific ignores .godot/ /android/ + +# Krita +*.kra~ +*.png~ diff --git a/SoundManager.tscn b/SoundManager.tscn index 8ccfe6f..ae61ae1 100644 --- a/SoundManager.tscn +++ b/SoundManager.tscn @@ -12,9 +12,11 @@ stream = ExtResource("1_kgewx") [node name="ItemPickUpCrown" type="AudioStreamPlayer" parent="."] stream = ExtResource("2_silpf") +volume_db = -8.0 [node name="OpponentHit" type="AudioStreamPlayer" parent="."] stream = ExtResource("3_ihrpf") +volume_db = -2.0 [node name="PlayerKO" type="AudioStreamPlayer" parent="."] stream = ExtResource("4_fu3vr") diff --git a/character/assets/character_spritesheet.png b/character/assets/character_spritesheet.png Binary files differindex 9c1b844..a1839cd 100644 --- a/character/assets/character_spritesheet.png +++ b/character/assets/character_spritesheet.png diff --git a/character/assets/character_spritesheet.png~ b/character/assets/character_spritesheet.png~ Binary files differdeleted file mode 100644 index 2136c69..0000000 --- a/character/assets/character_spritesheet.png~ +++ /dev/null diff --git a/character/character.tscn b/character/character.tscn index 3a1b0e8..7fb9776 100644 --- a/character/character.tscn +++ b/character/character.tscn @@ -13,7 +13,7 @@ script = ExtResource("1_wqxem") texture_filter = 1 position = Vector2(-10, -10) sprite_frames = ExtResource("2_xbkcg") -animation = &"scissors_idle" +animation = &"paper_walk" centered = false [node name="Collision" type="Area2D" parent="."] diff --git a/character/character_sprite_frames.tres b/character/character_sprite_frames.tres index 6aa4352..0381f4a 100644 --- a/character/character_sprite_frames.tres +++ b/character/character_sprite_frames.tres @@ -1,4 +1,4 @@ -[gd_resource type="SpriteFrames" load_steps=29 format=3 uid="uid://cvbw222po7psr"] +[gd_resource type="SpriteFrames" load_steps=32 format=3 uid="uid://cvbw222po7psr"] [ext_resource type="Texture2D" uid="uid://d3cp58o1j55au" path="res://character/assets/character_spritesheet.png" id="1_0ukqc"] @@ -14,6 +14,18 @@ region = Rect2(20, 60, 20, 20) atlas = ExtResource("1_0ukqc") region = Rect2(40, 60, 20, 20) +[sub_resource type="AtlasTexture" id="AtlasTexture_nugvc"] +atlas = ExtResource("1_0ukqc") +region = Rect2(60, 60, 20, 20) + +[sub_resource type="AtlasTexture" id="AtlasTexture_85mcf"] +atlas = ExtResource("1_0ukqc") +region = Rect2(80, 60, 20, 20) + +[sub_resource type="AtlasTexture" id="AtlasTexture_igbcl"] +atlas = ExtResource("1_0ukqc") +region = Rect2(120, 60, 20, 20) + [sub_resource type="AtlasTexture" id="AtlasTexture_ad1cw"] atlas = ExtResource("1_0ukqc") region = Rect2(100, 40, 20, 20) @@ -121,10 +133,19 @@ animations = [{ }, { "duration": 1.0, "texture": SubResource("AtlasTexture_a33vs") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_nugvc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_85mcf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_igbcl") }], "loop": false, "name": &"ko", -"speed": 6.0 +"speed": 8.0 }, { "frames": [{ "duration": 1.0, diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..967834f --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,207 @@ +[preset.0] + +name="Android" +platform="Android" +runnable=true +advanced_options=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="../../../../Applications/Godot/Exports/Magical Tower.apk" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +gradle_build/use_gradle_build=false +gradle_build/gradle_build_directory="" +gradle_build/android_source_template="" +gradle_build/compress_native_libraries=false +gradle_build/export_format=0 +gradle_build/min_sdk="" +gradle_build/target_sdk="" +architectures/armeabi-v7a=false +architectures/arm64-v8a=true +architectures/x86=false +architectures/x86_64=false +version/code=1 +version/name="" +package/unique_name="com.example.$genname" +package/name="" +package/signed=true +package/app_category=2 +package/retain_data_on_uninstall=false +package/exclude_from_recents=false +package/show_in_android_tv=false +package/show_in_app_library=true +package/show_as_launcher_app=false +launcher_icons/main_192x192="" +launcher_icons/adaptive_foreground_432x432="" +launcher_icons/adaptive_background_432x432="" +graphics/opengl_debug=false +xr_features/xr_mode=0 +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +user_data_backup/allow=false +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PackedStringArray() +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/manage_external_storage=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/post_notifications=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false diff --git a/icon.kra b/icon.kra Binary files differnew file mode 100644 index 0000000..fef5ade --- /dev/null +++ b/icon.kra diff --git a/icon.png b/icon.png Binary files differnew file mode 100644 index 0000000..026bf33 --- /dev/null +++ b/icon.png diff --git a/icon.png.import b/icon.png.import new file mode 100644 index 0000000..88418bd --- /dev/null +++ b/icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d0cy7qa8h8b2e" +path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.png" +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 @@ -1 +1,13 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>
\ No newline at end of file +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<!-- Created using Krita: https://krita.org --> +<svg xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:krita="http://krita.org/namespaces/svg/krita" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + width="15.998pt" + height="15.998pt" + viewBox="0 0 15.998 15.998"> +<defs/> +<rect id="shape0" transform="translate(5.99926048048942, 0.999876746748237)" fill="none" width="1.99975349349647" height="0.999876746748237"/><rect id="shape1" transform="translate(5.99926048048942, 0.999876746748237)" fill="none" width="5.99926048048942" height="3.99950698699295"/><rect id="shape2" transform="translate(1.99975349349647, 0.999876746748237)" fill="#12424c" fill-rule="evenodd" width="1.99975349349647" height="0.999876746748237"/><rect id="shape3" transform="translate(0.999876746748237, 1.99975349349647)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="2.99963024024471"/><rect id="shape4" transform="translate(1.99975349349647, 4.99938373374118)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="1.99975349349647"/><rect id="shape5" transform="translate(2.99963024024471, 6.99913722723766)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748236"/><rect id="shape6" transform="translate(1.99975349349647, 7.99901397398589)" fill="#12424c" fill-rule="evenodd" width="2.99963024024471" height="0.999876746748237"/><rect id="shape7" transform="translate(5.99926048048942, 8.99889072073413)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="1.99975349349647"/><rect id="shape8" transform="translate(2.99963024024471, 10.9986442142306)" fill="#12424c" fill-rule="evenodd" width="2.99963024024471" height="1e-06"/><rect id="shape9" transform="translate(1.99975349349647, 7.99901397398589)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="3.99950698699295"/><rect id="shape10" transform="translate(4.99938373374118, 7.99901397398589)" fill="#12424c" fill-rule="evenodd" width="0.999876746748236" height="0.999876746748237"/><rect id="shape11" transform="translate(3.99950698699295, 1.99975349349647)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="1.99975349349647"/><rect id="shape12" transform="translate(4.99938373374118, 3.99950698699295)" fill="#12424c" fill-rule="evenodd" width="0.999876746748236" height="1.99975349349647"/><rect id="shape13" transform="translate(5.99926048048942, 5.99926048048942)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748237"/><rect id="shape14" transform="translate(6.99913722723766, 3.99950698699295)" fill="#12424c" fill-rule="evenodd" width="0.999876746748236" height="1.99975349349647"/><rect id="shape15" transform="translate(7.99901397398589, 1.99975349349647)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748237"/><rect id="shape16" transform="translate(8.99889072073413, 0.999876746748237)" fill="#12424c" fill-rule="evenodd" width="1.99975349349647" height="0.999876746748237"/><rect id="shape17" transform="translate(7.99901397398589, 2.99963024024471)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748237"/><rect id="shape18" transform="translate(10.9986442142306, 1.99975349349647)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="2.99963024024471"/><rect id="shape19" transform="translate(9.99876746748237, 4.99938373374118)" fill="#12424c" fill-rule="evenodd" width="2.99963024024471" height="0.999876746748236"/><rect id="shape20" transform="translate(9.99876746748237, 5.99926048048942)" fill="#12424c" fill-rule="evenodd" width="0.999876746748235" height="0.999876746748237"/><rect id="shape21" transform="translate(8.99889072073413, 6.99913722723766)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="1.99975349349647"/><rect id="shape22" transform="translate(9.99876746748237, 8.99889072073413)" fill="#12424c" fill-rule="evenodd" width="1.99975349349647" height="0.999876746748237"/><rect id="shape23" transform="translate(10.9986442142306, 9.99876746748237)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748235"/><rect id="shape24" transform="translate(11.9985209609788, 7.99901397398589)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748237"/><rect id="shape25" transform="translate(12.9983977077271, 5.99926048048942)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="1.99975349349647"/><rect id="shape26" transform="translate(13.9982744544753, 6.99913722723766)" fill="#12424c" fill-rule="evenodd" width="0.999876746748235" height="2.99963024024471"/><rect id="shape27" transform="translate(12.9983977077271, 9.99876746748237)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748235"/><rect id="shape28" transform="translate(11.9985209609788, 10.9986442142306)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748237"/><rect id="shape29" transform="translate(2.99963024024471, 10.9986442142306)" fill="#12424c" fill-rule="evenodd" width="2.99963024024471" height="0.999876746748237"/><rect id="shape30" transform="translate(2.99963024024471, 11.9985209609788)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="1.99975349349647"/><rect id="shape31" transform="translate(2.99963024024471, 12.9983977077271)" fill="#12424c" fill-rule="evenodd" width="7.99901397398589" height="0.999876746748237"/><rect id="shape32" transform="translate(10.9986442142306, 11.9985209609788)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="1.99975349349647"/><rect id="shape33" transform="translate(0.999876746748237, 14.9981512012235)" fill="#12424c" fill-rule="evenodd" width="5.99926048048942" height="0.999876746748237"/><rect id="shape34" transform="translate(5.99926048048942, 13.9982744544753)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748235"/><rect id="shape35" transform="translate(1.99975349349647, 13.9982744544753)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748235"/><rect id="shape36" transform="translate(7.99901397398589, 13.9982744544753)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748235"/><rect id="shape37" transform="translate(7.99901397398589, 14.9981512012235)" fill="#12424c" fill-rule="evenodd" width="5.99926048048942" height="0.999876746748237"/><rect id="shape38" transform="translate(11.9985209609788, 13.9982744544753)" fill="#12424c" fill-rule="evenodd" width="0.999876746748237" height="0.999876746748235"/><rect id="shape39" transform="translate(2.99963024024471, 13.9982744544753)" fill="#6ba64a" fill-rule="evenodd" width="2.99963024024471" height="0.999876746748235"/><rect id="shape40" transform="translate(8.99889072073413, 13.9982744544753)" fill="#6ba64a" fill-rule="evenodd" width="2.99963024024471" height="0.999876746748235"/><rect id="shape41" transform="translate(2.99963024024471, 8.99889072073413)" fill="#437a63" fill-rule="evenodd" width="2.99963024024471" height="0.999876746748237"/><rect id="shape42" transform="translate(2.99963024024471, 9.99876746748237)" fill="#437a63" fill-rule="evenodd" width="2.99963024024471" height="0.999876746748235"/><rect id="shape43" transform="translate(3.99950698699295, 11.9985209609788)" fill="#437a63" fill-rule="evenodd" width="6.99913722723766" height="0.999876746748237"/><rect id="shape44" transform="translate(5.99926048048942, 10.9986442142306)" fill="#437a63" fill-rule="evenodd" width="5.99926048048942" height="0.999876746748237"/><rect id="shape45" transform="translate(6.99913722723766, 9.99876746748237)" fill="#437a63" fill-rule="evenodd" width="3.99950698699295" height="0.999876746748235"/><rect id="shape46" transform="translate(6.99913722723766, 8.99889072073413)" fill="#437a63" fill-rule="evenodd" width="2.99963024024471" height="0.999876746748237"/><rect id="shape47" transform="translate(5.99926048048942, 7.99901397398589)" fill="#437a63" fill-rule="evenodd" width="2.99963024024471" height="0.999876746748237"/><rect id="shape48" transform="translate(3.99950698699295, 6.99913722723766)" fill="#437a63" fill-rule="evenodd" width="4.99938373374118" height="0.999876746748236"/><rect id="shape49" transform="translate(10.9986442142306, 5.99926048048942)" fill="#437a63" fill-rule="evenodd" width="1.99975349349647" height="1.99975349349647"/><rect id="shape50" transform="translate(9.99876746748237, 6.99913722723766)" fill="#437a63" fill-rule="evenodd" width="1.99975349349647" height="1.99975349349647"/><rect id="shape51" transform="translate(12.9983977077271, 7.99901397398589)" fill="#437a63" fill-rule="evenodd" width="0.999876746748237" height="1.99975349349647"/><rect id="shape52" transform="translate(12.9983977077271, 8.99889072073413)" fill="#437a63" fill-rule="evenodd" width="1e-06" height="1.99975349349647"/><rect id="shape53" transform="translate(11.9985209609788, 8.99889072073413)" fill="#437a63" fill-rule="evenodd" width="0.999876746748237" height="1.99975349349647"/><rect id="shape54" transform="translate(8.99889072073413, 1.99975349349647)" fill="#437a63" fill-rule="evenodd" width="1.99975349349647" height="2.99963024024471"/><rect id="shape55" transform="translate(7.99901397398589, 3.99950698699295)" fill="#437a63" fill-rule="evenodd" width="0.999876746748237" height="2.99963024024471"/><rect id="shape56" transform="translate(6.99913722723766, 5.99926048048942)" fill="#437a63" fill-rule="evenodd" width="0.999876746748236" height="1.99975349349647"/><rect id="shape57" transform="translate(7.99901397398589, 4.99938373374118)" fill="#437a63" fill-rule="evenodd" width="1.99975349349647" height="1.99975349349647"/><rect id="shape58" transform="translate(1.99975349349647, 1.99975349349647)" fill="#437a63" fill-rule="evenodd" width="1.99975349349647" height="2.99963024024471"/><rect id="shape59" transform="translate(2.99963024024471, 3.99950698699295)" fill="#437a63" fill-rule="evenodd" width="1.99975349349647" height="2.99963024024471"/><rect id="shape60" transform="translate(3.99950698699295, 5.99926048048942)" fill="#437a63" fill-rule="evenodd" width="1.99975349349647" height="0.999876746748237"/> +</svg> diff --git a/icon.svg.import b/icon.svg.import index 287fee7..8f8bf13 100644 --- a/icon.svg.import +++ b/icon.svg.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://dwt6h37ll70f" +uid="uid://cfukswpayfb06" path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" metadata={ "vram_texture": false diff --git a/item/item.gd b/item/item.gd index 4f99999..fa00841 100644 --- a/item/item.gd +++ b/item/item.gd @@ -2,5 +2,9 @@ class_name Item extends Node2D +func _ready() -> void: + $Sprite2D.modulate = Color(max(0.1, randf()), max(0.1, randf()), max(0.1, randf())) + + func apply(_player: Player): pass diff --git a/player/opponent.gd b/player/opponent.gd index ec20cd1..7fc2ebf 100644 --- a/player/opponent.gd +++ b/player/opponent.gd @@ -51,7 +51,7 @@ func _on_vertical_timer_timeout() -> void: if randi_range(0, 100) > 75 and is_below_ledge(): await jump() - elif randi_range(0, 100) > 75 and not is_on_bottom_floor(): + elif randi_range(0, 100) > 50 and not is_on_bottom_floor(): await fall() $VerticalTimer.start() diff --git a/player/opponent.tscn b/player/opponent.tscn index 92d0af6..74a8b2a 100644 --- a/player/opponent.tscn +++ b/player/opponent.tscn @@ -4,6 +4,7 @@ [ext_resource type="Script" path="res://player/opponent.gd" id="2_pkqiw"] [node name="Opponent" instance=ExtResource("1_ykya6")] +process_mode = 4 script = ExtResource("2_pkqiw") random_start_type = false @@ -24,4 +25,8 @@ collision_mask = 512 one_shot = true autostart = true +[node name="VisibleOnScreenEnabler2D" type="VisibleOnScreenEnabler2D" parent="." index="11"] +position = Vector2(2.38419e-07, -2.38419e-07) +scale = Vector2(1.6, 1.6) + [connection signal="timeout" from="VerticalTimer" to="." method="_on_vertical_timer_timeout"] diff --git a/player/player.gd b/player/player.gd index 4257f2a..9d1d6ee 100644 --- a/player/player.gd +++ b/player/player.gd @@ -4,6 +4,8 @@ extends Character var is_invincible := false +var mobile_controls: MobileControls + @onready var camera := $Camera2D @@ -14,25 +16,7 @@ func _ready() -> void: func _process(_delta: float) -> void: - if current_state == State.Idle: - if Input.is_action_pressed("ui_left"): - walk(Direction.Left) - elif Input.is_action_pressed("ui_right"): - walk(Direction.Right) - else: - idle() - - if Input.is_action_pressed("ui_up"): - jump() - if Input.is_action_pressed("ui_down"): - if not is_on_bottom_floor(): - fall() - - if not is_on_floor(): - fall() - - - elif current_state == State.Walk: + if current_state == State.Idle or current_state == State.Walk: if Input.is_action_pressed("ui_left"): walk(Direction.Left) elif Input.is_action_pressed("ui_right"): @@ -63,6 +47,11 @@ func invincible(duration: float): await tween.finished is_invincible = false + + (func(): # re-trigger area entered + $Collision.monitoring = false + $Collision.monitoring = true + ).call_deferred() enum Result { @@ -101,10 +90,13 @@ func _on_collision_area_entered(area: Area2D) -> void: var opponent: Character = area.get_parent() var result := Player.is_rock_paper_scissors_win(self, opponent) + if result == Result.Draw: type_change_finished.connect(func(): change_type_random() + invincible(1.0) ) + is_invincible = true animate_type_change() elif result == Result.Win: @@ -116,6 +108,7 @@ func _on_collision_area_entered(area: Area2D) -> void: change_type_random() invincible(1.0) ) + is_invincible = true animate_type_change() opponent.process_mode = Node.PROCESS_MODE_DISABLED @@ -145,4 +138,5 @@ func _on_collision_area_entered(area: Area2D) -> void: await $AnimatedSprite2D.animation_finished SoundManager.get_node("PlayerKO").stop() visible = false + await get_tree().create_timer(0.3).timeout get_tree().change_scene_to_file("res://stage/stage_01.tscn") diff --git a/player/player.tscn b/player/player.tscn index b213030..4e0417f 100644 --- a/player/player.tscn +++ b/player/player.tscn @@ -7,9 +7,12 @@ [sub_resource type="AudioStreamMP3" id="AudioStreamMP3_sy3f5"] data = PackedByteArray("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") -[node name="Player" instance=ExtResource("1_eixx6")] +[node name="Player" groups=["player"] instance=ExtResource("1_eixx6")] script = ExtResource("1_wqxem") +[node name="AnimatedSprite2D" parent="." index="0"] +animation = &"scissors_walk" + [node name="Collision" parent="." index="1"] collision_layer = 1 collision_mask = 18 diff --git a/project.godot b/project.godot index 3001e57..275d129 100644 --- a/project.godot +++ b/project.godot @@ -13,6 +13,8 @@ config_version=5 config/name="Magical Tower" run/main_scene="res://ui/start_screen.tscn" config/features=PackedStringArray("4.3", "GL Compatibility") +boot_splash/bg_color=Color(0.419608, 0.65098, 0.290196, 1) +boot_splash/show_image=false config/icon="res://icon.svg" [autoload] @@ -27,7 +29,9 @@ gdscript/warnings/integer_division=0 window/size/viewport_width=160 window/size/viewport_height=144 +window/size/mode=2 window/stretch/mode="viewport" +window/handheld/orientation=1 [global_group] @@ -35,6 +39,7 @@ item="" tilemap="" opponent="" hud="" +player="" [layer_names] @@ -48,3 +53,4 @@ hud="" renderer/rendering_method="gl_compatibility" renderer/rendering_method.mobile="gl_compatibility" +textures/vram_compression/import_etc2_astc=true diff --git a/stage/assets/tileset-01.kra b/stage/assets/tileset-01.kra Binary files differnew file mode 100644 index 0000000..de87533 --- /dev/null +++ b/stage/assets/tileset-01.kra diff --git a/stage/assets/tileset-01.png b/stage/assets/tileset-01.png Binary files differindex f2006f8..6a6d3c9 100644 --- a/stage/assets/tileset-01.png +++ b/stage/assets/tileset-01.png diff --git a/stage/stage.gd b/stage/stage.gd index 8d72ee1..2115c0a 100644 --- a/stage/stage.gd +++ b/stage/stage.gd @@ -2,6 +2,11 @@ class_name Stage extends Node2D +var item_pool: Array = [] +var reserved_item_positions: Array = [] +@export var item_pool_max_size := 3 + + func get_world_boundaries() -> Dictionary: #Dictionary[Vector2, float] return { Vector2.LEFT: 0.0, @@ -13,3 +18,96 @@ func get_world_boundaries() -> Dictionary: #Dictionary[Vector2, float] func has_win_condition() -> bool: return false + + +func set_mobile_controls(): + var mobile_controls: MobileControls = get_node("%MobileControls") + + if OS.has_feature("android"): + mobile_controls.enable() + + var player: Player = get_node("%Player") + player.camera.limit_bottom += mobile_controls.size.y + get_window().content_scale_size = Vector2i( + ProjectSettings.get_setting("display/window/size/viewport_width"), + ProjectSettings.get_setting("display/window/size/viewport_height") + mobile_controls.size.y + ) + + +func _on_tick_timer_timeout() -> void: + if randf() > 0.9 and item_pool.size() < item_pool_max_size: + var item_scene: PackedScene = [ + load("res://item/shoe.tscn"), + load("res://item/crown.tscn"), + ].pick_random() + + var item: Item = item_scene.instantiate() + var map: TileMapLayer = get_tree().get_first_node_in_group("tilemap") + + var size_x := map.get_used_rect().position.x + map.get_used_rect().size.x + var size_y := map.get_used_rect().position.y + map.get_used_rect().size.y + + var start_x: int = max(map.get_used_rect().position.x, range(size_x).pick_random()) + var start_y: int = max(map.get_used_rect().position.y, range(size_y).pick_random()) + + var get_map_position = func() -> Vector2i: + for x in range(start_x, size_x): + for y in range(start_y, size_y): + var data = map.get_cell_tile_data(Vector2(x, y)) + if not data: + return Vector2i(x, y) + return Vector2i.ZERO + + # find appropriate position + var map_position = get_map_position.call() + if reserved_item_positions.has(map_position) or map_position == Vector2i.ZERO: + $TickTimer.start() + return + + var local_position = map.map_to_local(map_position) + + var _was_shifted := false + var collide_top = map.get_cell_tile_data(map.get_neighbor_cell(map_position, TileSet.CELL_NEIGHBOR_TOP_SIDE)) + var collide_bottom = map.get_cell_tile_data(map.get_neighbor_cell(map_position, TileSet.CELL_NEIGHBOR_BOTTOM_SIDE)) + var collide_right = map.get_cell_tile_data(map.get_neighbor_cell(map_position, TileSet.CELL_NEIGHBOR_RIGHT_SIDE)) + if collide_top: + local_position += Vector2(0, map.tile_set.tile_size.y / 2) + _was_shifted = true + if collide_bottom: + local_position += Vector2(0, -map.tile_set.tile_size.y / 2) + _was_shifted = true + if collide_right: + local_position += Vector2(-map.tile_set.tile_size.x, 0) + _was_shifted = true + if not collide_top and not collide_right: + if map.get_cell_tile_data(map.get_neighbor_cell(map_position, TileSet.CELL_NEIGHBOR_TOP_RIGHT_CORNER)): + local_position += Vector2(-map.tile_set.tile_size.x, map.tile_set.tile_size.y / 2) + _was_shifted = true + + #if not was_shifted: + local_position += Vector2(map.tile_set.tile_size.x / 2, 0) + + item.position = local_position + add_child(item) + + var get_reserved_positions = func() -> Array[Vector2i]: + var rp := [] as Array[Vector2i] + for x in range(0, 3): + for y in range(0, 3): + rp.append(Vector2i(x, y)) + rp.append(Vector2i(-x, y)) + rp.append(Vector2i(x, -y)) + rp.append(Vector2i(-x, -y)) + return rp + + item.tree_exiting.connect(func(): + item_pool.erase(item) + for v in get_reserved_positions.call(): + reserved_item_positions.erase(map_position + v) + ) + item_pool.append(item) + for v in get_reserved_positions.call(): + reserved_item_positions.append(map_position + v) + + # restart timer + $TickTimer.start() diff --git a/stage/stage.tscn b/stage/stage.tscn index 9c8e256..8e57066 100644 --- a/stage/stage.tscn +++ b/stage/stage.tscn @@ -23,6 +23,7 @@ unique_name_in_owner = true [node name="TickTimer" type="Timer" parent="."] wait_time = 2.0 +one_shot = true autostart = true [connection signal="timeout" from="TickTimer" to="." method="_on_tick_timer_timeout"] diff --git a/stage/stage_01.gd b/stage/stage_01.gd index 01cc558..f622716 100644 --- a/stage/stage_01.gd +++ b/stage/stage_01.gd @@ -1,10 +1,6 @@ extends Stage -var item_pool: Array = [] -var reserved_item_positions: Array = [] - - func _ready() -> void: $Player.camera.limit_left = get_world_boundaries()[Vector2.LEFT] $Player.camera.limit_right = get_world_boundaries()[Vector2.RIGHT] @@ -12,6 +8,8 @@ func _ready() -> void: $Player.camera.limit_bottom = get_world_boundaries()[Vector2.DOWN] $TileMapLayer.modulate = Color(max(0.1, randf()), max(0.1, randf()), max(0.1, randf())) + + set_mobile_controls() func get_world_boundaries() -> Dictionary: @@ -25,79 +23,3 @@ func get_world_boundaries() -> Dictionary: func has_win_condition() -> bool: return %Opponents.get_child_count() == 0 - - -func _on_tick_timer_timeout() -> void: - if randf() > 0.8 and item_pool.size() < 3: - var item_scene: PackedScene = [ - preload("res://item/shoe.tscn"), - preload("res://item/crown.tscn"), - ].pick_random() - - var item: Item = item_scene.instantiate() - var map: TileMapLayer = get_tree().get_first_node_in_group("tilemap") - - var size_x := map.get_used_rect().position.x + map.get_used_rect().size.x - var size_y := map.get_used_rect().position.y + map.get_used_rect().size.y - - var start_x: int = max(map.get_used_rect().position.x, range(size_x / 2).pick_random()) - var start_y: int = max(map.get_used_rect().position.y, range(size_y / 2).pick_random()) - - var get_map_position = func() -> Vector2i: - for x in range(start_x, size_x): - for y in range(start_y, size_y): - var data = map.get_cell_tile_data(Vector2(x, y)) - if not data: - return Vector2i(x, y) - return Vector2i.ZERO - - var map_position = get_map_position.call() - - #print(map_position) - if reserved_item_positions.has(map_position): - return - - var local_position = map.map_to_local(map_position) - - var _was_shifted := false - var collide_top = map.get_cell_tile_data(map.get_neighbor_cell(map_position, TileSet.CELL_NEIGHBOR_TOP_SIDE)) - var collide_bottom = map.get_cell_tile_data(map.get_neighbor_cell(map_position, TileSet.CELL_NEIGHBOR_BOTTOM_SIDE)) - var collide_right = map.get_cell_tile_data(map.get_neighbor_cell(map_position, TileSet.CELL_NEIGHBOR_RIGHT_SIDE)) - if collide_top: - local_position += Vector2(0, map.tile_set.tile_size.y / 2) - _was_shifted = true - if collide_bottom: - local_position += Vector2(0, -map.tile_set.tile_size.y / 2) - _was_shifted = true - if collide_right: - local_position += Vector2(-map.tile_set.tile_size.x, 0) - _was_shifted = true - if not collide_top and not collide_right: - if map.get_cell_tile_data(map.get_neighbor_cell(map_position, TileSet.CELL_NEIGHBOR_TOP_RIGHT_CORNER)): - local_position += Vector2(-map.tile_set.tile_size.x, map.tile_set.tile_size.y / 2) - _was_shifted = true - - #if not was_shifted: - local_position += Vector2(map.tile_set.tile_size.x / 2, 0) - - item.position = local_position - add_child(item) - - var get_reserved_positions = func() -> Array[Vector2i]: - var rp := [] as Array[Vector2i] - for x in range(0, 3): - for y in range(0, 3): - rp.append(Vector2i(x, y)) - rp.append(Vector2i(-x, y)) - rp.append(Vector2i(x, -y)) - rp.append(Vector2i(-x, -y)) - return rp - - item.tree_exiting.connect(func(): - item_pool.erase(item) - for v in get_reserved_positions.call(): - reserved_item_positions.erase(map_position + v) - ) - item_pool.append(item) - for v in get_reserved_positions.call(): - reserved_item_positions.append(map_position + v) diff --git a/stage/stage_01.tscn b/stage/stage_01.tscn index 6b0d67c..54f94e4 100644 --- a/stage/stage_01.tscn +++ b/stage/stage_01.tscn @@ -1,29 +1,76 @@ -[gd_scene load_steps=6 format=4 uid="uid://yb0no7vyekil"] +[gd_scene load_steps=7 format=4 uid="uid://yb0no7vyekil"] [ext_resource type="Script" path="res://stage/stage_01.gd" id="1_2ycoy"] [ext_resource type="PackedScene" uid="uid://dfioemvleakyt" path="res://stage/tile_map_layer.tscn" id="1_4iotk"] [ext_resource type="PackedScene" uid="uid://ivf0v2snsls5" path="res://stage/stage.tscn" id="1_uanw1"] [ext_resource type="PackedScene" uid="uid://b4t3ipnq8vq2p" path="res://player/player.tscn" id="2_34lp1"] [ext_resource type="PackedScene" uid="uid://d1h8psjxqge0a" path="res://player/opponent.tscn" id="4_h35rr"] +[ext_resource type="PackedScene" uid="uid://cvx1vj47uf5k2" path="res://ui/mobile/mobile_controls.tscn" id="6_v35ah"] [node name="Stage01" instance=ExtResource("1_uanw1")] script = ExtResource("1_2ycoy") +item_pool_max_size = 15 + +[node name="ColorRect" parent="." index="0"] +offset_right = 776.0 [node name="TileMapLayer" parent="." index="1" groups=["tilemap"] instance=ExtResource("1_4iotk")] -tile_map_data = PackedByteArray("AAAIAAIAAAADAAAAAAAIAAMAAAAAAAAAAAAJAAIAAAAEAAAAAAAJAAMAAAACAAAAAAAKAAsAAAAAAAAAAAAKAAwAAAAAAAEAAAALAAsAAAACAAAAAAALAAwAAAACAAEAAAASAAgAAAAAAAAAAAASAAkAAAAAAAEAAAASAAoAAAAAAAEAAAASAAsAAAAAAAEAAAASAAwAAAAAAAEAAAATAAgAAAACAAAAAAATAAkAAAACAAEAAAATAAoAAAACAAEAAAATAAsAAAACAAEAAAATAAwAAAACAAEAAAAAAAIAAAADAAAAAAAAAAUAAAADAAEAAAAAAAgAAAADAAEAAAAAAAsAAAADAAEAAAAAAA4AAAADAAEAAAAAABEAAAADAAAAAAABAAIAAAAEAAAAAAABAAUAAAADAAEAAAABAAgAAAADAAEAAAABAAsAAAADAAEAAAABAA4AAAADAAEAAAABABEAAAAEAAAAAAACAAIAAAADAAAAAAACAAUAAAADAAEAAAACAAgAAAADAAEAAAACAAsAAAADAAEAAAACAA4AAAADAAEAAAACABEAAAADAAAAAAADAAIAAAAEAAAAAAADAAUAAAADAAEAAAADAAgAAAADAAEAAAADAAsAAAADAAEAAAADAA4AAAADAAEAAAADABEAAAAEAAAAAAAEAAIAAAADAAAAAAAEAAUAAAADAAEAAAAEAAgAAAADAAEAAAAEAAsAAAADAAEAAAAEABEAAAADAAAAAAAFAAIAAAAEAAAAAAAFAAUAAAADAAEAAAAFAAgAAAADAAEAAAAFAAsAAAADAAEAAAAFABEAAAAEAAAAAAAGAAIAAAADAAAAAAAGAAgAAAADAAEAAAAGAAsAAAADAAEAAAAGAA4AAAADAAEAAAAGABEAAAADAAAAAAAHAAIAAAAEAAAAAAAHAAgAAAADAAEAAAAHAAsAAAADAAEAAAAHAA4AAAADAAEAAAAHABEAAAAEAAAAAAAIAAQAAAAAAAEAAAAIAAUAAAAAAAIAAAAIAAsAAAADAAEAAAAIAA4AAAADAAEAAAAIABEAAAADAAAAAAAJAAQAAAACAAEAAAAJAAUAAAACAAIAAAAJAAsAAAADAAEAAAAJAA4AAAADAAEAAAAJABEAAAAEAAAAAAAKAAIAAAADAAAAAAAKAAgAAAADAAEAAAAKAA0AAAAAAAEAAAAKAA4AAAAAAAIAAAAKABEAAAADAAAAAAALAAIAAAAEAAAAAAALAAgAAAADAAEAAAALAA0AAAACAAEAAAALAA4AAAACAAIAAAALABEAAAAEAAAAAAAMAAIAAAADAAAAAAAMAAUAAAADAAEAAAAMAAgAAAADAAEAAAAMAA4AAAADAAEAAAAMABEAAAADAAAAAAANAAIAAAAEAAAAAAANAAUAAAADAAEAAAANAAgAAAADAAEAAAANAA4AAAADAAEAAAANABEAAAAEAAAAAAAOAAIAAAADAAAAAAAOAAUAAAADAAEAAAAOAAgAAAADAAEAAAAOAAsAAAADAAEAAAAOAA4AAAADAAEAAAAOABEAAAADAAAAAAAPAAIAAAAEAAAAAAAPAAUAAAADAAEAAAAPAAgAAAADAAEAAAAPAAsAAAADAAEAAAAPAA4AAAADAAEAAAAPABEAAAAEAAAAAAAQAAIAAAADAAAAAAAQAAUAAAADAAEAAAAQAAgAAAADAAEAAAAQAAsAAAADAAEAAAAQABEAAAADAAAAAAARAAIAAAAEAAAAAAARAAUAAAADAAEAAAARAAgAAAADAAEAAAARAAsAAAADAAEAAAARABEAAAAEAAAAAAASAAIAAAADAAAAAAASAAUAAAADAAEAAAASAA0AAAAAAAEAAAASAA4AAAAAAAIAAAASABEAAAADAAAAAAATAAIAAAAEAAAAAAATAAUAAAADAAEAAAATAA0AAAACAAEAAAATAA4AAAACAAIAAAATABEAAAAEAAAAAAAUAAIAAAADAAAAAAAUAAUAAAADAAEAAAAUAAgAAAADAAEAAAAUABEAAAADAAAAAAAVAAIAAAAEAAAAAAAVAAUAAAADAAEAAAAVAAgAAAADAAEAAAAVABEAAAAEAAAAAAAWAAIAAAADAAAAAAAWAAUAAAADAAEAAAAWAAgAAAADAAEAAAAWABEAAAADAAAAAAAXAAIAAAAEAAAAAAAXAAUAAAADAAEAAAAXAAgAAAADAAEAAAAXABEAAAAEAAAAAAAYAAIAAAADAAAAAAAYABEAAAADAAAAAAAZAAIAAAAEAAAAAAAZABEAAAAEAAAAAAAaAAIAAAADAAAAAAAaABEAAAADAAAAAAAbAAIAAAAEAAAAAAAbABEAAAAEAAAAAAAcAAIAAAADAAAAAAAcABEAAAADAAAAAAAdAAIAAAAEAAAAAAAdABEAAAAEAAAAAAAeAAIAAAADAAAAAAAeABEAAAADAAAAAAAfAAIAAAAEAAAAAAAfABEAAAAEAAAAAAAWAA4AAAADAAEAAAAXAA4AAAADAAEAAAAYAA4AAAADAAEAAAAZAA4AAAADAAEAAAAaAA4AAAADAAEAAAAUAAsAAAADAAEAAAAVAAsAAAADAAEAAAAYAAsAAAADAAEAAAAZAAsAAAADAAEAAAAaAAsAAAADAAEAAAAaAAgAAAADAAEAAAAbAAgAAAADAAEAAAAcAAgAAAADAAEAAAAdAAgAAAADAAEAAAAeAAgAAAADAAEAAAAfAAgAAAADAAEAAAAYAAUAAAADAAEAAAAZAAUAAAADAAEAAAAcAAUAAAADAAEAAAAdAAUAAAADAAEAAAAfAAUAAAADAAEAAAAeAAUAAAADAAEAAAAcAAsAAAAAAAAAAAAcAAwAAAAAAAEAAAAcAA0AAAAAAAEAAAAcAA4AAAAAAAIAAAAdAAsAAAACAAAAAAAdAAwAAAACAAEAAAAdAA0AAAACAAEAAAAdAA4AAAACAAIAAAAbAAsAAAADAAEAAAAbAA4AAAADAAEAAAAeAAsAAAADAAEAAAAfAAsAAAADAAEAAAAeAA4AAAADAAEAAAAfAA4AAAADAAEAAAA=") +tile_map_data = PackedByteArray("AAAIAAIAAAADAAAAAAAIAAMAAAAAAAAAAAAJAAIAAAAEAAAAAAAJAAMAAAACAAAAAAAKAAsAAAAAAAAAAAAKAAwAAAAAAAEAAAALAAsAAAACAAAAAAALAAwAAAACAAEAAAASAAgAAAAAAAAAAAASAAkAAAAAAAEAAAASAAoAAAAAAAEAAAASAAsAAAAAAAEAAAASAAwAAAAAAAEAAAATAAgAAAACAAAAAAATAAkAAAACAAEAAAATAAoAAAACAAEAAAATAAsAAAACAAEAAAATAAwAAAACAAEAAAAAAAIAAAADAAAAAAAAAAUAAAADAAEAAAAAAAgAAAADAAEAAAAAAAsAAAADAAEAAAAAAA4AAAADAAEAAAAAABEAAAADAAAAAAABAAIAAAAEAAAAAAABAAUAAAADAAEAAAABAAgAAAADAAEAAAABAAsAAAADAAEAAAABAA4AAAADAAEAAAABABEAAAAEAAAAAAACAAIAAAADAAAAAAACAAUAAAADAAEAAAACAAgAAAADAAEAAAACAAsAAAADAAEAAAACAA4AAAADAAEAAAACABEAAAADAAAAAAADAAIAAAAEAAAAAAADAAUAAAADAAEAAAADAAgAAAADAAEAAAADAAsAAAADAAEAAAADAA4AAAADAAEAAAADABEAAAAEAAAAAAAEAAIAAAADAAAAAAAEAAUAAAADAAEAAAAEAAgAAAADAAEAAAAEAAsAAAADAAEAAAAEABEAAAADAAAAAAAFAAIAAAAEAAAAAAAFAAUAAAADAAEAAAAFAAgAAAADAAEAAAAFAAsAAAADAAEAAAAFABEAAAAEAAAAAAAGAAIAAAADAAAAAAAGAAgAAAADAAEAAAAGAAsAAAADAAEAAAAGAA4AAAADAAEAAAAGABEAAAADAAAAAAAHAAIAAAAEAAAAAAAHAAgAAAADAAEAAAAHAAsAAAADAAEAAAAHAA4AAAADAAEAAAAHABEAAAAEAAAAAAAIAAQAAAAAAAEAAAAIAAUAAAAAAAIAAAAIAAsAAAADAAEAAAAIAA4AAAADAAEAAAAIABEAAAADAAAAAAAJAAQAAAACAAEAAAAJAAUAAAACAAIAAAAJAAsAAAADAAEAAAAJAA4AAAADAAEAAAAJABEAAAAEAAAAAAAKAAIAAAADAAAAAAAKAAgAAAADAAEAAAAKAA0AAAAAAAEAAAAKAA4AAAAAAAIAAAAKABEAAAADAAAAAAALAAIAAAAEAAAAAAALAAgAAAADAAEAAAALAA0AAAACAAEAAAALAA4AAAACAAIAAAALABEAAAAEAAAAAAAMAAIAAAADAAAAAAAMAAUAAAADAAEAAAAMAAgAAAADAAEAAAAMAA4AAAADAAEAAAAMABEAAAADAAAAAAANAAIAAAAEAAAAAAANAAUAAAADAAEAAAANAAgAAAADAAEAAAANAA4AAAADAAEAAAANABEAAAAEAAAAAAAOAAIAAAADAAAAAAAOAAUAAAADAAEAAAAOAAgAAAADAAEAAAAOAAsAAAADAAEAAAAOAA4AAAADAAEAAAAOABEAAAADAAAAAAAPAAIAAAAEAAAAAAAPAAUAAAADAAEAAAAPAAgAAAADAAEAAAAPAAsAAAADAAEAAAAPAA4AAAADAAEAAAAPABEAAAAEAAAAAAAQAAIAAAADAAAAAAAQAAUAAAADAAEAAAAQAAgAAAADAAEAAAAQAAsAAAADAAEAAAAQABEAAAADAAAAAAARAAIAAAAEAAAAAAARAAUAAAADAAEAAAARAAgAAAADAAEAAAARAAsAAAADAAEAAAARABEAAAAEAAAAAAASAAIAAAADAAAAAAASAAUAAAADAAEAAAASAA0AAAAAAAEAAAASAA4AAAAAAAIAAAASABEAAAADAAAAAAATAAIAAAAEAAAAAAATAAUAAAADAAEAAAATAA0AAAACAAEAAAATAA4AAAACAAIAAAATABEAAAAEAAAAAAAUAAIAAAADAAAAAAAUAAUAAAADAAEAAAAUAAgAAAADAAEAAAAUABEAAAADAAAAAAAVAAIAAAAEAAAAAAAVAAUAAAADAAEAAAAVAAgAAAADAAEAAAAVABEAAAAEAAAAAAAWAAIAAAADAAAAAAAWAAUAAAADAAEAAAAWAAgAAAADAAEAAAAWABEAAAADAAAAAAAXAAIAAAAEAAAAAAAXAAUAAAADAAEAAAAXAAgAAAADAAEAAAAXABEAAAAEAAAAAAAYAAIAAAADAAAAAAAYABEAAAADAAAAAAAZAAIAAAAEAAAAAAAZABEAAAAEAAAAAAAaAAIAAAADAAAAAAAaABEAAAADAAAAAAAbAAIAAAAEAAAAAAAbABEAAAAEAAAAAAAcAAIAAAADAAAAAAAcABEAAAADAAAAAAAdAAIAAAAEAAAAAAAdABEAAAAEAAAAAAAeAAIAAAADAAAAAAAeABEAAAADAAAAAAAfAAIAAAAEAAAAAAAfABEAAAAEAAAAAAAWAA4AAAADAAEAAAAXAA4AAAADAAEAAAAYAA4AAAADAAEAAAAZAA4AAAADAAEAAAAaAA4AAAADAAEAAAAUAAsAAAADAAEAAAAVAAsAAAADAAEAAAAYAAsAAAADAAEAAAAZAAsAAAADAAEAAAAaAAsAAAADAAEAAAAaAAgAAAADAAEAAAAbAAgAAAADAAEAAAAcAAgAAAADAAEAAAAdAAgAAAADAAEAAAAeAAgAAAADAAEAAAAfAAgAAAADAAEAAAAYAAUAAAADAAEAAAAZAAUAAAADAAEAAAAcAAUAAAADAAEAAAAdAAUAAAADAAEAAAAfAAUAAAADAAEAAAAeAAUAAAADAAEAAAAcAAsAAAAAAAAAAAAcAAwAAAAAAAEAAAAcAA0AAAAAAAEAAAAcAA4AAAAAAAIAAAAdAAsAAAACAAAAAAAdAAwAAAACAAEAAAAdAA0AAAACAAEAAAAdAA4AAAACAAIAAAAbAAsAAAADAAEAAAAbAA4AAAADAAEAAAAeAAsAAAADAAEAAAAfAAsAAAADAAEAAAAeAA4AAAADAAEAAAAfAA4AAAADAAEAAAAgAAIAAAAIAAAAAAAhAAIAAAAJAAAAAAAiAAIAAAAIAAAAAAAjAAIAAAAJAAAAAAAkAAIAAAAIAAAAAAAlAAIAAAAJAAAAAAAmAAIAAAAIAAAAAAAnAAIAAAAJAAAAAAAoAAIAAAAIAAAAAAApAAIAAAAJAAAAAAAqAAIAAAAIAAAAAAArAAIAAAAJAAAAAAAsAAIAAAAIAAAAAAAtAAIAAAAJAAAAAAAuAAIAAAAIAAAAAAAvAAIAAAAJAAAAAAAgABEAAAAIAAAAAAAhABEAAAAJAAAAAAAiABEAAAAIAAAAAAAjABEAAAAJAAAAAAAkABEAAAAIAAAAAAAlABEAAAAJAAAAAAAmABEAAAAIAAAAAAAnABEAAAAJAAAAAAAoABEAAAAIAAAAAAApABEAAAAJAAAAAAAqABEAAAAIAAAAAAArABEAAAAJAAAAAAAsABEAAAAIAAAAAAAtABEAAAAJAAAAAAAuABEAAAAIAAAAAAAvABEAAAAJAAAAAAAgAAsAAAAFAAEAAAAgAAwAAAAFAAEAAAAgAA0AAAAFAAEAAAAgAA4AAAAFAAEAAAAhAAsAAAAHAAEAAAAhAA4AAAAHAAEAAAAhAAwAAAAHAAEAAAAhAA0AAAAHAAEAAAAiAAsAAAAIAAEAAAAjAAsAAAAIAAEAAAAiAA4AAAAIAAEAAAAjAA4AAAAIAAEAAAAgAAgAAAAFAAEAAAAhAAgAAAAHAAEAAAAiAAgAAAAIAAEAAAAjAAgAAAAIAAEAAAAgAAUAAAAFAAAAAAAhAAUAAAAHAAAAAAAiAAUAAAAIAAEAAAAjAAUAAAAIAAEAAAAkAAgAAAAIAAEAAAAlAAgAAAAIAAEAAAAkAAsAAAAFAAAAAAAlAAsAAAAHAAAAAAAmAAsAAAAIAAEAAAAnAAsAAAAIAAEAAAAkAA4AAAAFAAIAAAAlAA4AAAAHAAIAAAAmAA4AAAAIAAEAAAAnAA4AAAAIAAEAAAAoAA4AAAAIAAEAAAApAA4AAAAIAAEAAAAgABAAAAAFAAIAAAAhABAAAAAHAAIAAAAgAA8AAAAFAAEAAAAhAA8AAAAHAAEAAAAhAAoAAAAHAAEAAAAhAAkAAAAHAAEAAAAhAAcAAAAHAAEAAAAhAAYAAAAHAAEAAAAgAAoAAAAFAAEAAAAgAAkAAAAFAAEAAAAgAAcAAAAFAAEAAAAgAAYAAAAFAAEAAAAkAAUAAAAIAAEAAAAlAAUAAAAIAAEAAAAmAAgAAAAIAAEAAAAnAAgAAAAIAAEAAAApAAsAAAAIAAEAAAAoAAsAAAAIAAEAAAAqAA4AAAAIAAEAAAArAA4AAAAIAAEAAAAkAAwAAAAFAAEAAAAkAA0AAAAFAAEAAAAlAAwAAAAHAAEAAAAlAA0AAAAHAAEAAAAwAAIAAAADAAMAAAAxAAIAAAADAAMAAAAyAAIAAAADAAMAAAAzAAIAAAADAAMAAAA0AAIAAAADAAMAAAA1AAIAAAADAAMAAAA2AAIAAAADAAMAAAA3AAIAAAADAAMAAAA4AAIAAAADAAMAAAA5AAIAAAADAAMAAAA6AAIAAAADAAMAAAA7AAIAAAADAAMAAAA8AAIAAAADAAMAAAA9AAIAAAADAAMAAAA+AAIAAAADAAMAAAA/AAIAAAADAAMAAAAwABEAAAADAAMAAAAxABEAAAADAAMAAAAyABEAAAADAAMAAAAzABEAAAADAAMAAAA0ABEAAAADAAMAAAA1ABEAAAADAAMAAAA2ABEAAAADAAMAAAA3ABEAAAADAAMAAAA4ABEAAAADAAMAAAA5ABEAAAADAAMAAAA6ABEAAAADAAMAAAA7ABEAAAADAAMAAAA8ABEAAAADAAMAAAA9ABEAAAADAAMAAAA+ABEAAAADAAMAAAA/ABEAAAADAAMAAAAwAAMAAAAAAAMAAAAxAAMAAAACAAMAAAAwAAQAAAAAAAQAAAAwAAUAAAAAAAQAAAAwAAYAAAAAAAQAAAAwAAcAAAAAAAQAAAAwAAgAAAAAAAQAAAAwAAkAAAAAAAQAAAAwAAoAAAAAAAQAAAAwAAsAAAAAAAQAAAAwAAwAAAAAAAQAAAAwAA0AAAAAAAQAAAAwAA4AAAAAAAUAAAAxAA4AAAACAAUAAAAxAA0AAAACAAQAAAAxAAwAAAACAAQAAAAxAAsAAAACAAQAAAAxAAoAAAACAAQAAAAxAAkAAAACAAQAAAAxAAgAAAACAAQAAAAxAAcAAAACAAQAAAAxAAYAAAACAAQAAAAxAAUAAAACAAQAAAAxAAQAAAACAAQAAAAyAA4AAAADAAQAAAAzAA4AAAADAAQAAAA0AA4AAAADAAQAAAA1AA4AAAADAAQAAAA0AAsAAAADAAQAAAA1AAsAAAADAAQAAAA2AAsAAAADAAQAAAA3AAsAAAADAAQAAAA1AAgAAAADAAQAAAA0AAgAAAADAAQAAAAzAAgAAAADAAQAAAAyAAgAAAADAAQAAAA0AAUAAAADAAQAAAA1AAUAAAADAAQAAAA2AAUAAAADAAQAAAA3AAUAAAADAAQAAAA4AAgAAAAAAAMAAAA5AAgAAAACAAMAAAA6AAgAAAADAAQAAAA7AAgAAAADAAQAAAA6AAsAAAADAAQAAAA7AAsAAAADAAQAAAA8AAsAAAADAAQAAAA9AAsAAAADAAQAAAA6AAUAAAADAAQAAAA7AAUAAAADAAQAAAA8AAUAAAADAAQAAAA9AAUAAAADAAQAAAA4AA4AAAAAAAQAAAA5AA4AAAACAAQAAAA6AA4AAAADAAQAAAA7AA4AAAADAAQAAAA+AA4AAAADAAQAAAA/AA4AAAADAAQAAAA+AAgAAAADAAQAAAA/AAgAAAADAAQAAAA4AAkAAAAAAAQAAAA4AAoAAAAAAAQAAAA4AAsAAAAAAAQAAAA4AAwAAAAAAAQAAAA4AA0AAAAAAAQAAAA5AAkAAAACAAQAAAA5AAoAAAACAAQAAAA5AAsAAAACAAQAAAA5AAwAAAACAAQAAAA5AA0AAAACAAQAAAA5ABAAAAACAAUAAAA4ABAAAAAAAAUAAAA5AA8AAAACAAQAAAA4AA8AAAAAAAQAAABAAAIAAAAJAAMAAABBAAIAAAAIAAMAAABCAAIAAAAJAAMAAABDAAIAAAAIAAMAAABEAAIAAAAJAAMAAABFAAIAAAAIAAMAAABGAAIAAAAJAAMAAABHAAIAAAAIAAMAAABIAAIAAAAJAAMAAABJAAIAAAAIAAMAAABKAAIAAAAJAAMAAABLAAIAAAAIAAMAAABMAAIAAAAJAAMAAABNAAIAAAAIAAMAAABOAAIAAAAJAAMAAABPAAIAAAAIAAMAAABQAAIAAAAJAAMAAABAABEAAAAJAAMAAABQABEAAAAJAAMAAABPABEAAAAIAAMAAABNABEAAAAIAAMAAABOABEAAAAJAAMAAABLABEAAAAIAAMAAABMABEAAAAJAAMAAABJABEAAAAIAAMAAABKABEAAAAJAAMAAABHABEAAAAIAAMAAABIABEAAAAJAAMAAABFABEAAAAIAAMAAABGABEAAAAJAAMAAABDABEAAAAIAAMAAABEABEAAAAJAAMAAABBABEAAAAIAAMAAABCABEAAAAJAAMAAABAAAUAAAAFAAMAAABBAAUAAAAHAAMAAABAAAYAAAAFAAQAAABAAAcAAAAFAAQAAABAAAgAAAAFAAQAAABAAAkAAAAFAAQAAABAAAoAAAAFAAQAAABAAAsAAAAFAAQAAABAAAwAAAAFAAQAAABAAA0AAAAFAAQAAABAAA4AAAAFAAMAAABBAA4AAAAHAAMAAABBAA0AAAAHAAQAAABBAAwAAAAHAAQAAABBAAsAAAAHAAQAAABBAAoAAAAHAAQAAABBAAkAAAAHAAQAAABBAAgAAAAHAAQAAABBAAcAAAAHAAQAAABBAAYAAAAHAAQAAABCAA4AAAAIAAQAAABDAA4AAAAIAAQAAABCAAUAAAAIAAQAAABDAAUAAAAIAAQAAABEAAgAAAAIAAQAAABFAAgAAAAIAAQAAABEAAsAAAAIAAQAAABFAAsAAAAIAAQAAABGAAgAAAAIAAQAAABHAAgAAAAIAAQAAABGAAsAAAAIAAQAAABHAAsAAAAIAAQAAABGAAUAAAAIAAQAAABHAAUAAAAIAAQAAABIAAUAAAAIAAQAAABJAAUAAAAIAAQAAABGAA4AAAAIAAQAAABHAA4AAAAIAAQAAABIAA4AAAAIAAQAAABJAA4AAAAIAAQAAABKAAgAAAAIAAQAAABLAAgAAAAIAAQAAABMAAgAAAAIAAQAAABNAAgAAAAIAAQAAABKAAsAAAAIAAQAAABLAAsAAAAIAAQAAABMAA4AAAAIAAQAAABNAA4AAAAIAAQAAABOAA4AAAAFAAMAAABPAA4AAAAHAAMAAABMAAUAAAAIAAQAAABNAAUAAAAIAAQAAABOAAUAAAAIAAQAAABPAAUAAAAIAAQAAABOAAsAAAAFAAMAAABPAAsAAAAHAAMAAABRAAIAAAADAAYAAABSAAIAAAAEAAYAAABTAAIAAAADAAYAAABUAAIAAAAEAAYAAABVAAIAAAADAAYAAABWAAIAAAAEAAYAAABXAAIAAAADAAYAAABYAAIAAAAEAAYAAABZAAIAAAADAAYAAABaAAIAAAAEAAYAAABbAAIAAAADAAYAAABcAAIAAAAEAAYAAABdAAIAAAADAAYAAABeAAIAAAAEAAYAAABfAAIAAAADAAYAAABgAAIAAAAEAAYAAABRABEAAAADAAYAAABSABEAAAAEAAYAAABTABEAAAADAAYAAABUABEAAAAEAAYAAABVABEAAAADAAYAAABWABEAAAAEAAYAAABXABEAAAADAAYAAABYABEAAAAEAAYAAABZABEAAAADAAYAAABaABEAAAAEAAYAAABbABEAAAADAAYAAABcABEAAAAEAAYAAABdABEAAAADAAYAAABeABEAAAAEAAYAAABfABEAAAADAAYAAABgABEAAAAEAAYAAABOAAwAAAAFAAQAAABOAA0AAAAFAAQAAABPAAwAAAAHAAQAAABPAA0AAAAHAAQAAABQAAsAAAADAAcAAABRAAsAAAADAAcAAABQAA4AAAADAAcAAABRAA4AAAADAAcAAABQAAUAAAADAAcAAABRAAUAAAADAAcAAABQAAgAAAADAAcAAABRAAgAAAADAAcAAABUAAUAAAADAAcAAABVAAUAAAADAAcAAABUAAgAAAADAAcAAABVAAgAAAADAAcAAABUAAsAAAADAAcAAABVAAsAAAADAAcAAABUAA4AAAAAAAYAAABVAA4AAAACAAYAAABYAA4AAAADAAcAAABZAA4AAAADAAcAAABYAAsAAAAAAAYAAABZAAsAAAACAAYAAABYAAgAAAAAAAYAAABZAAgAAAACAAYAAABYAAUAAAADAAcAAABZAAUAAAADAAcAAABcAAUAAAAAAAYAAABdAAUAAAACAAYAAABcAAgAAAAAAAYAAABdAAgAAAACAAYAAABcAAsAAAAAAAYAAABdAAsAAAACAAYAAABcAA4AAAAAAAYAAABdAA4AAAACAAYAAABeAAUAAAADAAcAAABfAAUAAAADAAcAAABgAAUAAAADAAcAAABeAAgAAAADAAcAAABfAAgAAAADAAcAAABgAAgAAAADAAcAAABeAAsAAAADAAcAAABfAAsAAAADAAcAAABgAAsAAAADAAcAAABeAA4AAAADAAcAAABfAA4AAAADAAcAAABgAA4AAAADAAcAAABYAAkAAAAAAAcAAABYAAoAAAAAAAcAAABZAAoAAAACAAcAAABZAAkAAAACAAcAAABcAAYAAAAAAAcAAABcAAcAAAAAAAcAAABdAAYAAAACAAcAAABdAAcAAAACAAcAAABVABAAAAACAAYAAABUABAAAAAAAAYAAABUAA8AAAAAAAcAAABVAA8AAAACAAcAAABcAAwAAAAAAAcAAABcAA0AAAAAAAcAAABdAAwAAAACAAcAAABdAA0AAAACAAcAAABSAAgAAAADAAcAAABTAAgAAAADAAcAAABaAAsAAAADAAcAAABbAAsAAAADAAcAAABKAAMAAAAFAAMAAABLAAMAAAAHAAMAAABKAAUAAAAFAAMAAABLAAUAAAAHAAMAAABKAAQAAAAFAAQAAABLAAQAAAAHAAQAAAAuAA4AAAAIAAEAAAAvAA4AAAAIAAEAAAAvAAsAAAAIAAEAAAAuAAsAAAAIAAEAAAAtAAsAAAAIAAEAAAAsAAsAAAAIAAEAAAAvAAgAAAAIAAEAAAAuAAgAAAAIAAEAAAAtAAgAAAAIAAEAAAAsAAgAAAAIAAEAAAArAAgAAAAHAAIAAAAqAAgAAAAFAAIAAAAvAAUAAAAIAAEAAAAuAAUAAAAIAAEAAAAtAAUAAAAIAAEAAAAsAAUAAAAIAAEAAAArAAUAAAAHAAAAAAAqAAUAAAAFAAAAAAApAAUAAAAIAAEAAAAoAAUAAAAIAAEAAAAqAAYAAAAFAAEAAAAqAAcAAAAFAAEAAAArAAYAAAAHAAEAAAArAAcAAAAHAAEAAABbAAUAAAADAAcAAABaAAUAAAADAAcAAABWAA4AAAADAAcAAABXAA4AAAADAAcAAABSAAsAAAADAAcAAABTAAsAAAADAAcAAAA=") [node name="Opponent" parent="Opponents" index="0" instance=ExtResource("4_h35rr")] position = Vector2(105, 128) -current_type = null +current_type = 1 [node name="Opponent2" parent="Opponents" index="1" instance=ExtResource("4_h35rr")] position = Vector2(52, 80) -current_type = 1 +current_type = 2 [node name="Opponent3" parent="Opponents" index="2" instance=ExtResource("4_h35rr")] position = Vector2(120, 80) -current_type = 2 + +[node name="Opponent4" parent="Opponents" index="3" instance=ExtResource("4_h35rr")] +position = Vector2(328, 80) +random_start_type = true + +[node name="Opponent5" parent="Opponents" index="4" instance=ExtResource("4_h35rr")] +position = Vector2(304, 128) +random_start_type = true + +[node name="Opponent6" parent="Opponents" index="5" instance=ExtResource("4_h35rr")] +position = Vector2(424, 80) +random_start_type = true + +[node name="Opponent7" parent="Opponents" index="6" instance=ExtResource("4_h35rr")] +position = Vector2(488, 128) +random_start_type = true + +[node name="Opponent8" parent="Opponents" index="7" instance=ExtResource("4_h35rr")] +position = Vector2(600, 56) +random_start_type = true + +[node name="Opponent9" parent="Opponents" index="8" instance=ExtResource("4_h35rr")] +position = Vector2(616, 104) +random_start_type = true + +[node name="Opponent10" parent="Opponents" index="9" instance=ExtResource("4_h35rr")] +position = Vector2(728, 80) +random_start_type = true + +[node name="Opponent11" parent="Opponents" index="10" instance=ExtResource("4_h35rr")] +position = Vector2(712, 128) +random_start_type = true + +[node name="Opponent12" parent="Opponents" index="11" instance=ExtResource("4_h35rr")] +position = Vector2(744, 32) +random_start_type = true [node name="Player" parent="." index="3" instance=ExtResource("2_34lp1")] +unique_name_in_owner = true position = Vector2(16, 128) current_type = 2 + +[node name="MobileControls" parent="." index="5" instance=ExtResource("6_v35ah")] +unique_name_in_owner = true + +[node name="TickTimer" parent="." index="6"] +wait_time = 0.5 diff --git a/stage/tile_map_layer.tscn b/stage/tile_map_layer.tscn index 6fd9df1..4e9583e 100644 --- a/stage/tile_map_layer.tscn +++ b/stage/tile_map_layer.tscn @@ -30,6 +30,88 @@ texture_region_size = Vector2i(8, 8) 4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) 3:1/0 = 0 3:1/0/physics_layer_1/polygon_0/points = PackedVector2Array(-4, -4, -4, 4, 4, 4, 4, -4) +5:0/0 = 0 +5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +6:0/0 = 0 +6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +7:0/0 = 0 +7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +8:0/0 = 0 +8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +9:0/0 = 0 +9:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +5:1/0 = 0 +5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +6:1/0 = 0 +6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +7:1/0 = 0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +8:1/0 = 0 +8:1/0/physics_layer_1/polygon_0/points = PackedVector2Array(-4, -4, -4, 4, 4, 4, 4, -4) +5:2/0 = 0 +5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +6:2/0 = 0 +6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +7:2/0 = 0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +0:3/0 = 0 +0:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +1:3/0 = 0 +1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +2:3/0 = 0 +2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +3:3/0 = 0 +3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +5:3/0 = 0 +5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +6:3/0 = 0 +6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +7:3/0 = 0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +8:3/0 = 0 +8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +9:3/0 = 0 +9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +0:4/0 = 0 +0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +1:4/0 = 0 +1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +2:4/0 = 0 +2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +3:4/0 = 0 +3:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-4, -4, -4, 4, 4, 4, 4, -4) +5:4/0 = 0 +5:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +6:4/0 = 0 +6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +7:4/0 = 0 +7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +8:4/0 = 0 +8:4/0/physics_layer_1/polygon_0/points = PackedVector2Array(-4, -4, -4, 4, 4, 4, 4, -4) +0:5/0 = 0 +0:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +1:5/0 = 0 +1:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +2:5/0 = 0 +2:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +0:6/0 = 0 +0:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +1:6/0 = 0 +1:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +2:6/0 = 0 +2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +3:6/0 = 0 +3:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +4:6/0 = 0 +4:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +0:7/0 = 0 +0:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +1:7/0 = 0 +1:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +2:7/0 = 0 +2:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -4, 4, -4, 4, 4, -4, 4) +3:7/0 = 0 +3:7/0/physics_layer_1/polygon_0/points = PackedVector2Array(-4, -4, -4, 4, 4, 4, 4, -4) [sub_resource type="TileSet" id="TileSet_277cy"] tile_size = Vector2i(8, 8) diff --git a/stage/tileset-01.kra b/stage/tileset-01.kra Binary files differdeleted file mode 100644 index 68a3bf4..0000000 --- a/stage/tileset-01.kra +++ /dev/null diff --git a/ui/assets/tilemap_white.png b/ui/assets/tilemap_white.png Binary files differnew file mode 100644 index 0000000..207208e --- /dev/null +++ b/ui/assets/tilemap_white.png diff --git a/ui/assets/tilemap_white.png.import b/ui/assets/tilemap_white.png.import new file mode 100644 index 0000000..4a91aca --- /dev/null +++ b/ui/assets/tilemap_white.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cywefso7qpdan" +path="res://.godot/imported/tilemap_white.png-0d4219020eb50271e0e65cbcc8eff609.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ui/assets/tilemap_white.png" +dest_files=["res://.godot/imported/tilemap_white.png-0d4219020eb50271e0e65cbcc8eff609.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/ui/mobile/button.gd b/ui/mobile/button.gd new file mode 100644 index 0000000..2e3653c --- /dev/null +++ b/ui/mobile/button.gd @@ -0,0 +1,45 @@ +@tool +extends Panel + + +@export var texture: Texture2D: + set(value): + texture = value + $TouchScreenButton.texture_normal = value + _on_resized() + +@export var label: String: + set(value): + label = value + $Label.text = value + +@export var action: StringName = "": + set(value): + action = value + $TouchScreenButton.action = value + + +func _ready() -> void: + _on_resized() + + +func _on_resized() -> void: + $TouchScreenButton.shape.size = size + + var texture_size := Vector2.ZERO + if texture: + texture_size = texture.get_size() + + $TouchScreenButton.position = Vector2( + (size.x - texture_size.x) / 2, + (size.y - texture_size.y) / 2 + ) + + $Label.size = size + + +func _on_touch_screen_button_pressed() -> void: + modulate = Color(0.5, 0.5, 0.5, 1.0) + +func _on_touch_screen_button_released() -> void: + modulate = Color(1.0, 1.0, 1.0, 1.0) diff --git a/ui/mobile/button.tscn b/ui/mobile/button.tscn new file mode 100644 index 0000000..64a413f --- /dev/null +++ b/ui/mobile/button.tscn @@ -0,0 +1,43 @@ +[gd_scene load_steps=5 format=3 uid="uid://evppekv62x0g"] + +[ext_resource type="Script" path="res://ui/mobile/button.gd" id="1_2pd68"] +[ext_resource type="Theme" uid="uid://b067xhqktnmhr" path="res://ui/theme.tres" id="2_rnfal"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qy0ya"] +bg_color = Color(0.0297164, 0.155372, 0.181691, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0, 0, 0, 1) +border_blend = true + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_cuu3o"] +resource_local_to_scene = true +size = Vector2(160, 20) + +[node name="Button" type="Panel"] +texture_filter = 1 +offset_right = 160.0 +offset_bottom = 20.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_qy0ya") +script = ExtResource("1_2pd68") + +[node name="TouchScreenButton" type="TouchScreenButton" parent="."] +position = Vector2(80, 10) +shape = SubResource("RectangleShape2D_cuu3o") +shape_visible = false +visibility_mode = 1 + +[node name="Label" type="Label" parent="."] +layout_mode = 0 +offset_right = 160.0 +offset_bottom = 20.0 +theme = ExtResource("2_rnfal") +theme_override_colors/font_color = Color(1, 1, 1, 1) +horizontal_alignment = 1 +vertical_alignment = 1 + +[connection signal="resized" from="." to="." method="_on_resized"] +[connection signal="pressed" from="TouchScreenButton" to="." method="_on_touch_screen_button_pressed"] +[connection signal="released" from="TouchScreenButton" to="." method="_on_touch_screen_button_released"] diff --git a/ui/mobile/mobile_controls.gd b/ui/mobile/mobile_controls.gd new file mode 100644 index 0000000..a87ceea --- /dev/null +++ b/ui/mobile/mobile_controls.gd @@ -0,0 +1,17 @@ +class_name MobileControls +extends CanvasLayer + + +var size: Vector2: + get(): + return (get_child(0) as Control).size + + +func _init() -> void: + visible = false + process_mode = ProcessMode.PROCESS_MODE_DISABLED + + +func enable() -> void: + process_mode = ProcessMode.PROCESS_MODE_ALWAYS + visible = true diff --git a/ui/mobile/mobile_controls.tscn b/ui/mobile/mobile_controls.tscn new file mode 100644 index 0000000..333b0ad --- /dev/null +++ b/ui/mobile/mobile_controls.tscn @@ -0,0 +1,78 @@ +[gd_scene load_steps=7 format=3 uid="uid://cvx1vj47uf5k2"] + +[ext_resource type="Script" path="res://ui/mobile/mobile_controls.gd" id="1_ts8mv"] +[ext_resource type="PackedScene" uid="uid://evppekv62x0g" path="res://ui/mobile/button.tscn" id="2_7um2b"] +[ext_resource type="Texture2D" uid="uid://cywefso7qpdan" path="res://ui/assets/tilemap_white.png" id="2_n84be"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_e3qjv"] +bg_color = Color(0.0313726, 0.156863, 0.180392, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hxyr7"] +bg_color = Color(0.0297164, 0.155372, 0.181691, 1) +border_width_left = 1 +border_width_top = 2 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0, 0, 0, 1) +border_blend = true + +[sub_resource type="AtlasTexture" id="AtlasTexture_kr7mh"] +atlas = ExtResource("2_n84be") +region = Rect2(445, 292, 10, 10) +filter_clip = true + +[node name="MobileControls" type="CanvasLayer"] +script = ExtResource("1_ts8mv") + +[node name="Control" type="Panel" parent="."] +offset_top = 144.0 +offset_right = 160.0 +offset_bottom = 249.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_e3qjv") + +[node name="Up" parent="Control" instance=ExtResource("2_7um2b")] +layout_mode = 0 +offset_bottom = 26.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_hxyr7") +texture = SubResource("AtlasTexture_kr7mh") +label = "" +action = &"ui_up" + +[node name="Down" parent="Control" instance=ExtResource("2_7um2b")] +layout_mode = 0 +offset_left = 160.0 +offset_top = 92.0 +offset_right = 320.0 +offset_bottom = 118.0 +rotation = 3.14159 +texture = SubResource("AtlasTexture_kr7mh") +label = "" +action = &"ui_down" + +[node name="Left" parent="Control" instance=ExtResource("2_7um2b")] +layout_mode = 0 +offset_left = 160.0 +offset_top = 26.0 +offset_right = 200.0 +offset_bottom = 106.0 +rotation = 1.5708 +texture = SubResource("AtlasTexture_kr7mh") +label = "" +action = &"ui_right" + +[node name="Right" parent="Control" instance=ExtResource("2_7um2b")] +layout_mode = 0 +offset_top = 66.0 +offset_right = 40.0 +offset_bottom = 146.0 +rotation = -1.5708 +texture = SubResource("AtlasTexture_kr7mh") +label = "" +action = &"ui_left" + +[node name="Start" parent="Control" instance=ExtResource("2_7um2b")] +layout_mode = 0 +offset_top = 92.0 +offset_bottom = 105.0 +label = "Start" +action = &"ui_accept" diff --git a/ui/start_screen.tscn b/ui/start_screen.tscn index 6d40d01..5b19aa3 100644 --- a/ui/start_screen.tscn +++ b/ui/start_screen.tscn @@ -45,7 +45,6 @@ text = "0" [node name="CountdownTimer" type="Timer" parent="."] unique_name_in_owner = true -wait_time = 3.0 one_shot = true [connection signal="timeout" from="CountdownTimer" to="." method="_on_countdown_timer_timeout"] diff --git a/ui/theme.tres b/ui/theme.tres index eb181eb..d4ee617 100644 --- a/ui/theme.tres +++ b/ui/theme.tres @@ -3,6 +3,8 @@ [ext_resource type="FontFile" uid="uid://16usq1tjtauh" path="res://ui/assets/Minimal3x5.ttf" id="1_qtw8w"] [resource] +Button/font_sizes/font_size = 8 +Button/fonts/font = ExtResource("1_qtw8w") Label/colors/font_color = Color(0.12549, 0.345098, 0.313726, 1) Label/font_sizes/font_size = 8 Label/fonts/font = ExtResource("1_qtw8w") |