nyairobi 2 years ago
parent
commit
96e2cbc187

+ 96 - 2
export_presets.cfg

@@ -46,7 +46,7 @@ custom_features=""
 export_filter="all_resources"
 export_filter="all_resources"
 include_filter=""
 include_filter=""
 exclude_filter=""
 exclude_filter=""
-export_path="export/ln/ld52.x86_64"
+export_path="export/ln/ld52-growin-ballistic.x86_64"
 encryption_include_filters=""
 encryption_include_filters=""
 encryption_exclude_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_pck=false
@@ -76,7 +76,7 @@ custom_features=""
 export_filter="all_resources"
 export_filter="all_resources"
 include_filter=""
 include_filter=""
 exclude_filter=""
 exclude_filter=""
-export_path="export/ln/ld52.exe"
+export_path="export/ln/ld52-growin-ballistic.exe"
 encryption_include_filters=""
 encryption_include_filters=""
 encryption_exclude_filters=""
 encryption_exclude_filters=""
 encrypt_pck=false
 encrypt_pck=false
@@ -116,3 +116,97 @@ application/product_name=""
 application/file_description=""
 application/file_description=""
 application/copyright=""
 application/copyright=""
 application/trademarks=""
 application/trademarks=""
+
+[preset.3]
+
+name="macOS"
+platform="macOS"
+runnable=true
+custom_features=""
+export_filter="all_resources"
+include_filter=""
+exclude_filter=""
+export_path=""
+encryption_include_filters=""
+encryption_exclude_filters=""
+encrypt_pck=false
+encrypt_directory=false
+script_export_mode=1
+script_encryption_key=""
+
+[preset.3.options]
+
+binary_format/architecture="universal"
+custom_template/debug=""
+custom_template/release=""
+debug/export_console_script=1
+application/icon=""
+application/icon_interpolation=4
+application/bundle_identifier=""
+application/signature=""
+application/app_category="Games"
+application/short_version="1.0"
+application/version="1.0"
+application/copyright=""
+application/copyright_localized={}
+display/high_res=false
+codesign/codesign=1
+codesign/identity=""
+codesign/certificate_file=""
+codesign/certificate_password=""
+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/helper_executables=[]
+codesign/custom_options=PackedStringArray()
+notarization/notarization=0
+notarization/apple_id_name=""
+notarization/apple_id_password=""
+notarization/apple_team_id=""
+notarization/api_uuid=""
+notarization/api_key=""
+notarization/api_key_id=""
+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={}
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false

+ 3 - 4
project.godot

@@ -71,6 +71,7 @@ _global_script_class_icons={
 config/name="ld52"
 config/name="ld52"
 run/main_scene="res://scene/core/root.tscn"
 run/main_scene="res://scene/core/root.tscn"
 config/features=PackedStringArray("4.0", "GL Compatibility")
 config/features=PackedStringArray("4.0", "GL Compatibility")
+boot_splash/show_image=false
 config/icon="res://icon.svg"
 config/icon="res://icon.svg"
 
 
 [audio]
 [audio]
@@ -156,6 +157,7 @@ screen_drag={
 "deadzone": 0.5,
 "deadzone": 0.5,
 "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"pressed":false,"double_click":false,"script":null)
 "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"pressed":false,"double_click":false,"script":null)
 , Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"pressed":false,"double_click":false,"script":null)
 , Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"pressed":false,"double_click":false,"script":null)
+, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null)
 ]
 ]
 }
 }
 lmb={
 lmb={
@@ -176,6 +178,7 @@ cash_cheat={
 wave_cheat={
 wave_cheat={
 "deadzone": 0.5,
 "deadzone": 0.5,
 "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":125,"unicode":0,"echo":false,"script":null)
 "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":125,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":80,"unicode":112,"echo":false,"script":null)
 ]
 ]
 }
 }
 hk1={
 hk1={
@@ -203,10 +206,6 @@ hk5={
 "events": []
 "events": []
 }
 }
 
 
-[physics]
-
-common/physics_ticks_per_second=120
-
 [rendering]
 [rendering]
 
 
 renderer/rendering_method="gl_compatibility"
 renderer/rendering_method="gl_compatibility"

BIN
res/scr.png


+ 14 - 0
scene/core/camera.gd

@@ -5,6 +5,8 @@ var SPEED = 4000
 var DRAG_SPEED = 4.0
 var DRAG_SPEED = 4.0
 var ZOOM_SPEED = 12.0
 var ZOOM_SPEED = 12.0
 
 
+var BASE_MAX_ZOOM = 1.0
+var BASE_MIN_ZOOM = 0.15
 var max_zoom = 1.0
 var max_zoom = 1.0
 var min_zoom = 0.15
 var min_zoom = 0.15
 var previous_mouse_position = Vector2(-1, -1)
 var previous_mouse_position = Vector2(-1, -1)
@@ -13,6 +15,8 @@ var previous_mouse_position = Vector2(-1, -1)
 
 
 func _ready():
 func _ready():
     update_sound_players()
     update_sound_players()
+    update_zoom_values()
+    get_tree().get_root().get_child(0).connect("item_rect_changed", update_zoom_values)
 
 
 func _input(event: InputEvent):
 func _input(event: InputEvent):
     if event is InputEventMouseMotion and Input.is_action_pressed("screen_drag"):
     if event is InputEventMouseMotion and Input.is_action_pressed("screen_drag"):
@@ -61,6 +65,16 @@ func update_sound_players():
     for sound_player in players:
     for sound_player in players:
         sound_player.set_max_distance(dist.x)
         sound_player.set_max_distance(dist.x)
 
 
+func update_zoom_values():
+    var oversize = DisplayServer.window_get_size().x / 1920.0
+    if oversize > 1.0:
+        min_zoom = BASE_MIN_ZOOM * oversize
+        if current_zoom < min_zoom:
+            current_zoom = min_zoom
+            set_zoom(Vector2(current_zoom, current_zoom))
+    else:
+        min_zoom = BASE_MIN_ZOOM
+
 # Fix the camera lock being 🌠🌠 fucking stupid 🌠🌠
 # Fix the camera lock being 🌠🌠 fucking stupid 🌠🌠
 func fix_borders():
 func fix_borders():
     var pos = get_position()
     var pos = get_position()

+ 8 - 7
scene/core/main.tscn

@@ -15,10 +15,10 @@
 [ext_resource type="AudioStream" uid="uid://bp6gd7r6vfig0" path="res://snd/sfx/plant.mp3" id="11_4ks7p"]
 [ext_resource type="AudioStream" uid="uid://bp6gd7r6vfig0" path="res://snd/sfx/plant.mp3" id="11_4ks7p"]
 [ext_resource type="Script" path="res://scene/core/pc1.gd" id="12_q87bi"]
 [ext_resource type="Script" path="res://scene/core/pc1.gd" id="12_q87bi"]
 
 
-[sub_resource type="NavigationPolygon" id="NavigationPolygon_hvh0n"]
-vertices = PackedVector2Array(-1867, -1368, -1874, -8490, 5748, -8456, 5750, -4089, 4150, -2537, -1064, -1224, 3739, -1270, 2352, -1230, -57, -104, -555, -355, 1837, -262, 1297, -20, 776, 256, 362, 214)
-polygons = [PackedInt32Array(0, 1, 2, 3, 4, 5), PackedInt32Array(5, 4, 6, 7), PackedInt32Array(8, 9, 5, 7, 10, 11), PackedInt32Array(8, 11, 12, 13)]
-outlines = [PackedVector2Array(-1867, -1368, -1064, -1224, -555, -355, -57, -104, 362, 214, 776, 256, 1297, -20, 1837, -262, 2352, -1230, 3739, -1270, 4150, -2537, 5750, -4089, 5748, -8456, -1874, -8490)]
+[sub_resource type="NavigationPolygon" id="NavigationPolygon_ibrlo"]
+vertices = PackedVector2Array(-1867, -1368, -1874, -8490, 5748, -8456, 5807, -4041, 4184, -2553, -1100, -1165, 3874, -1209, 2462, -1164, -608, -284, 1901, -241, 1297, -20, -57, -104, 935, 271, 166, 271)
+polygons = [PackedInt32Array(0, 1, 2, 3, 4, 5), PackedInt32Array(5, 4, 6, 7), PackedInt32Array(8, 5, 7, 9, 10, 11), PackedInt32Array(11, 10, 12, 13)]
+outlines = [PackedVector2Array(-1867, -1368, -1100, -1165, -608, -284, -57, -104, 166, 271, 935, 271, 1297, -20, 1901, -241, 2462, -1164, 3874, -1209, 4184, -2553, 5807, -4041, 5748, -8456, -1874, -8490)]
 
 
 [node name="Main" type="Node2D"]
 [node name="Main" type="Node2D"]
 script = ExtResource("1_dkkxn")
 script = ExtResource("1_dkkxn")
@@ -175,7 +175,7 @@ ast = 2
 
 
 [node name="Wave19" parent="Waves" instance=ExtResource("5_hqjbo")]
 [node name="Wave19" parent="Waves" instance=ExtResource("5_hqjbo")]
 duration = 40.0
 duration = 40.0
-power_level = 1.5
+power_level = 1.7
 witchUFO = 40
 witchUFO = 40
 fork = 40
 fork = 40
 forkB = 40
 forkB = 40
@@ -184,6 +184,7 @@ star = 0
 [node name="Wave20" parent="Waves" instance=ExtResource("5_hqjbo")]
 [node name="Wave20" parent="Waves" instance=ExtResource("5_hqjbo")]
 title = "What is that??"
 title = "What is that??"
 duration = 60.0
 duration = 60.0
+power_level = 3.0
 witchUFO = 0
 witchUFO = 0
 fork = 0
 fork = 0
 boss = 1
 boss = 1
@@ -197,7 +198,7 @@ witchUFO = 20
 fork = 30
 fork = 30
 forkB = 15
 forkB = 15
 star = 20
 star = 20
-boss = 1
+boss = 2
 ast = 5
 ast = 5
 
 
 [node name="Props" type="Node2D" parent="."]
 [node name="Props" type="Node2D" parent="."]
@@ -236,7 +237,7 @@ rate = 0.09
 [node name="Plants" type="Node2D" parent="."]
 [node name="Plants" type="Node2D" parent="."]
 
 
 [node name="UFOs" type="NavigationRegion2D" parent="."]
 [node name="UFOs" type="NavigationRegion2D" parent="."]
-navigation_polygon = SubResource("NavigationPolygon_hvh0n")
+navigation_polygon = SubResource("NavigationPolygon_ibrlo")
 
 
 [node name="Wheat" type="Node2D" parent="."]
 [node name="Wheat" type="Node2D" parent="."]
 
 

File diff suppressed because it is too large
+ 14 - 14
scene/core/main_menu_thenme.tres


+ 2 - 0
scene/core/root.gd

@@ -1,6 +1,8 @@
 extends Control
 extends Control
 
 
 var main_menu_beaten: bool = false
 var main_menu_beaten: bool = false
+var disable_wheat: bool = false
+var disable_ai: bool = false
 
 
 func _ready():
 func _ready():
     $UILayer/MainMenu.find_child("Start", true, false).connect("pressed", beat_main_menu)
     $UILayer/MainMenu.find_child("Start", true, false).connect("pressed", beat_main_menu)

+ 6 - 6
scene/core/wave_manager.gd

@@ -4,7 +4,7 @@ class_name WaveManager
 var timer: Timer = Timer.new()
 var timer: Timer = Timer.new()
 var current_wave: int = -1
 var current_wave: int = -1
 var done = false
 var done = false
-@onready var log = $"../../../UILayer/UI/Log/PC/MC/Label"
+@onready var logg = $"../../../UILayer/UI/Log/PC/MC/Label"
 @onready var time_label = $"../../../UILayer/UI/NextWave/HB/Label"
 @onready var time_label = $"../../../UILayer/UI/NextWave/HB/Label"
 var power_level: float = 1.0
 var power_level: float = 1.0
 
 
@@ -12,7 +12,7 @@ func _ready():
     add_child(timer)
     add_child(timer)
     timer.set_one_shot(true)
     timer.set_one_shot(true)
     timer.connect("timeout", next_wave)
     timer.connect("timeout", next_wave)
-    log.set_text("")
+    logg.set_text("")
     next_wave()
     next_wave()
     
     
     $"../../../UILayer/UI/NextWave/HB/Button".connect("pressed", next_wave)
     $"../../../UILayer/UI/NextWave/HB/Button".connect("pressed", next_wave)
@@ -34,13 +34,13 @@ func next_wave():
         timer.set_wait_time(wave.duration)
         timer.set_wait_time(wave.duration)
         timer.start()
         timer.start()
         if wave.title:
         if wave.title:
-            log.append_text("[color=#ffcccc]Wave " + str(current_wave + 1) + ":[/color] " + wave.title + "\n")
+            logg.append_text("[color=#ffcccc]Wave " + str(current_wave + 1) + ":[/color] " + wave.title + "\n")
         else:
         else:
-            log.append_text("[color=#ffcccc]Wave " + str(current_wave + 1) + "[/color] " + "\n")
-        log.append_text(wave.get_log_data())
+            logg.append_text("[color=#ffcccc]Wave " + str(current_wave + 1) + "[/color] " + "\n")
+        logg.append_text(wave.get_log_data())
     else:
     else:
         done = true
         done = true
-        log.append_text("[color=#ccffcc]No waves left[/color]\n")
+        logg.append_text("[color=#ccffcc]No waves left[/color]\n")
 
 
 func is_done():
 func is_done():
     return done
     return done

+ 2 - 2
scene/entity/bullet.tscn

@@ -3,7 +3,7 @@
 [ext_resource type="Texture2D" uid="uid://mm6ylqwudexe" path="res://res/bullet.png" id="1_dkvbc"]
 [ext_resource type="Texture2D" uid="uid://mm6ylqwudexe" path="res://res/bullet.png" id="1_dkvbc"]
 [ext_resource type="Script" path="res://scene/entity/bullet.gd" id="1_vrlfp"]
 [ext_resource type="Script" path="res://scene/entity/bullet.gd" id="1_vrlfp"]
 
 
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_nmstc"]
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_oa58v"]
 size = Vector2(150, 106)
 size = Vector2(150, 106)
 
 
 [node name="Bullet" type="CharacterBody2D"]
 [node name="Bullet" type="CharacterBody2D"]
@@ -16,4 +16,4 @@ texture = ExtResource("1_dkvbc")
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 position = Vector2(-1, 1)
 position = Vector2(-1, 1)
-shape = SubResource("RectangleShape2D_nmstc")
+shape = SubResource("RectangleShape2D_oa58v")

+ 2 - 2
scene/entity/carrot.tscn

@@ -8,7 +8,7 @@
 [ext_resource type="AudioStream" uid="uid://cpyaqxuec8i5k" path="res://snd/sfx/laserShoot(1).wav" id="6_6wdjm"]
 [ext_resource type="AudioStream" uid="uid://cpyaqxuec8i5k" path="res://snd/sfx/laserShoot(1).wav" id="6_6wdjm"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="7_5wvmf"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="7_5wvmf"]
 
 
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_kuiqv"]
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_u7yc5"]
 size = Vector2(573.333, 1040)
 size = Vector2(573.333, 1040)
 
 
 [node name="Carrot" type="CharacterBody2D"]
 [node name="Carrot" type="CharacterBody2D"]
@@ -37,7 +37,7 @@ texture = ExtResource("2_ptjqr")
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 position = Vector2(-3.33335, -20)
 position = Vector2(-3.33335, -20)
-shape = SubResource("RectangleShape2D_kuiqv")
+shape = SubResource("RectangleShape2D_u7yc5")
 
 
 [node name="RI" parent="." instance=ExtResource("5_f2co1")]
 [node name="RI" parent="." instance=ExtResource("5_f2co1")]
 
 

+ 29 - 18
scene/entity/ufo.gd

@@ -22,6 +22,7 @@ var Wheat = preload("res://scene/entity/wheat.tscn")
 var attack_range = 1000.0
 var attack_range = 1000.0
 var second_player = find_child("AudioStreamPlayer2D2")
 var second_player = find_child("AudioStreamPlayer2D2")
 @onready var power_level: float = $"../../Waves".power_level
 @onready var power_level: float = $"../../Waves".power_level
+@onready var ROOT = get_tree().get_root().get_child(0)
 
 
 func fuck():
 func fuck():
     return false
     return false
@@ -34,14 +35,17 @@ func _ready():
     max_hp *= power_level
     max_hp *= power_level
     dps *= power_level * pow(power_level, 0.7)
     dps *= power_level * pow(power_level, 0.7)
     
     
-    $RerollTimer.connect("timeout", roll_movement_target)
+    $RerollTimer.connect("timeout", roll_movement_target_2)
     $DamageTimer.connect("timeout", damage_target)
     $DamageTimer.connect("timeout", damage_target)
     
     
-    navigation_agent.set_path_desired_distance(10.0)
+    navigation_agent.set_path_desired_distance(40.0)
     navigation_agent.set_target_desired_distance(attack_range)
     navigation_agent.set_target_desired_distance(attack_range)
-    navigation_agent.set_path_max_distance(40.0)
+    navigation_agent.set_path_max_distance(200.0)
     navigation_agent.set_avoidance_enabled(true)
     navigation_agent.set_avoidance_enabled(true)
-    navigation_agent.set_radius(radius)
+    if ROOT.disable_ai:
+        navigation_agent.set_radius(0)
+    else:
+        navigation_agent.set_radius(radius)
     navigation_agent.set_neighbor_distance(movement_speed * 2)
     navigation_agent.set_neighbor_distance(movement_speed * 2)
     navigation_agent.set_max_speed(movement_speed)
     navigation_agent.set_max_speed(movement_speed)
     
     
@@ -55,10 +59,18 @@ func _ready():
     hp = max_hp
     hp = max_hp
     $Plx/HP.set_max(max_hp)
     $Plx/HP.set_max(max_hp)
     $Plx/HP.set_value(max_hp)
     $Plx/HP.set_value(max_hp)
-    
+
 func _process(delta):
 func _process(delta):
     if dead:
     if dead:
         _process_dead(delta)
         _process_dead(delta)
+        return
+    if target == null or target.dead or !is_instance_valid(target):
+        if target2 != null:
+            target = target2
+            target2 = null
+        else:
+            target = roll_movement_target()
+            hide_ray(ray)
     if navigation_agent.is_target_reached() and target != null:
     if navigation_agent.is_target_reached() and target != null:
         enable_ray(ray, target)
         enable_ray(ray, target)
         if ray2 != null:
         if ray2 != null:
@@ -70,13 +82,6 @@ func _process(delta):
                 hide_ray(ray2)
                 hide_ray(ray2)
         if $DamageTimer.is_stopped():
         if $DamageTimer.is_stopped():
             $DamageTimer.start()
             $DamageTimer.start()
-        if target.dead:
-            if target2 != null:
-                target = target2
-                target2 = null
-            else:
-                target = roll_movement_target()
-                hide_ray(ray)
     else:
     else:
         hide_ray(ray)
         hide_ray(ray)
         hide_ray(ray2)
         hide_ray(ray2)
@@ -111,6 +116,9 @@ func _physics_process(delta):
 func actor_setup():
 func actor_setup():
     await get_tree().physics_frame
     await get_tree().physics_frame
     target = roll_movement_target()
     target = roll_movement_target()
+    
+func roll_movement_target_2():
+    target = roll_movement_target()
 
 
 func roll_movement_target():
 func roll_movement_target():
     var all_plants = plants.get_children()
     var all_plants = plants.get_children()
@@ -121,7 +129,7 @@ func roll_movement_target():
         $RerollTimer.start()
         $RerollTimer.start()
     else:
     else:
         var i = 0
         var i = 0
-        while (res == null or res.dead) and i < 10:
+        while (res == null or res.dead or !is_instance_valid(res)) and i < 10:
             res = all_plants[randi_range(0, count - 1)]
             res = all_plants[randi_range(0, count - 1)]
             i += 1
             i += 1
         if i == 10:
         if i == 10:
@@ -176,11 +184,14 @@ func deal_damage(damage):
         call_deferred("spawn_wheat")
         call_deferred("spawn_wheat")
 
 
 func spawn_wheat():
 func spawn_wheat():
-    for i in range(0, ceil(wheat_out * sqrt(power_level))):
-        var wheat = Wheat.instantiate()
-        wheat.rotate(randf_range(-PI, PI))
-        wheat.set_position(get_global_position())
-        $"../../Wheat".add_child(wheat)
+    if ROOT.disable_wheat:
+        $"../../Economy".add(ceil(wheat_out * sqrt(power_level)))
+    else:
+        for i in range(0, ceil(wheat_out * sqrt(power_level))):
+            var wheat = Wheat.instantiate()
+            wheat.rotate(randf_range(-PI, PI))
+            wheat.set_position(get_global_position())
+            $"../../Wheat".add_child(wheat)
 
 
 func enable_ray(ray, target: Node2D):
 func enable_ray(ray, target: Node2D):
     if ray != null:
     if ray != null:

+ 2 - 2
scene/entity/ufo_1.tscn

@@ -11,7 +11,7 @@
 [ext_resource type="AudioStream" uid="uid://b78r3yehfioyu" path="res://snd/sfx/explosion.wav" id="9_sft0k"]
 [ext_resource type="AudioStream" uid="uid://b78r3yehfioyu" path="res://snd/sfx/explosion.wav" id="9_sft0k"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="10_nswe8"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="10_nswe8"]
 
 
-[sub_resource type="CircleShape2D" id="CircleShape2D_maxop"]
+[sub_resource type="CircleShape2D" id="CircleShape2D_88tow"]
 radius = 223.258
 radius = 223.258
 
 
 [node name="WitchUfo" type="CharacterBody2D"]
 [node name="WitchUfo" type="CharacterBody2D"]
@@ -23,7 +23,7 @@ should_rotate = false
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 position = Vector2(-2, -1)
 position = Vector2(-2, -1)
-shape = SubResource("CircleShape2D_maxop")
+shape = SubResource("CircleShape2D_88tow")
 
 
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 process_mode = 3
 process_mode = 3

+ 2 - 2
scene/entity/ufo_2.tscn

@@ -9,7 +9,7 @@
 [ext_resource type="AudioStream" uid="uid://dmqxlbrefsbty" path="res://snd/sfx/explosion(1).wav" id="7_po7jr"]
 [ext_resource type="AudioStream" uid="uid://dmqxlbrefsbty" path="res://snd/sfx/explosion(1).wav" id="7_po7jr"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="8_c1ur1"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="8_c1ur1"]
 
 
-[sub_resource type="CircleShape2D" id="CircleShape2D_heucv"]
+[sub_resource type="CircleShape2D" id="CircleShape2D_vgku8"]
 radius = 99.0454
 radius = 99.0454
 
 
 [node name="ForkUfo" type="CharacterBody2D"]
 [node name="ForkUfo" type="CharacterBody2D"]
@@ -24,7 +24,7 @@ wheat_out = 1
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 position = Vector2(-2, -1)
 position = Vector2(-2, -1)
-shape = SubResource("CircleShape2D_heucv")
+shape = SubResource("CircleShape2D_vgku8")
 
 
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 process_mode = 3
 process_mode = 3

+ 3 - 3
scene/entity/ufo_3.tscn

@@ -9,7 +9,7 @@
 [ext_resource type="AudioStream" uid="uid://dmqxlbrefsbty" path="res://snd/sfx/explosion(1).wav" id="7_qj3sr"]
 [ext_resource type="AudioStream" uid="uid://dmqxlbrefsbty" path="res://snd/sfx/explosion(1).wav" id="7_qj3sr"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="8_3cgvt"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="8_3cgvt"]
 
 
-[sub_resource type="CircleShape2D" id="CircleShape2D_prh1k"]
+[sub_resource type="CircleShape2D" id="CircleShape2D_50sud"]
 radius = 127.063
 radius = 127.063
 
 
 [node name="Star" type="CharacterBody2D"]
 [node name="Star" type="CharacterBody2D"]
@@ -22,7 +22,7 @@ wheat_out = 8
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 position = Vector2(-2, -1)
 position = Vector2(-2, -1)
-shape = SubResource("CircleShape2D_prh1k")
+shape = SubResource("CircleShape2D_50sud")
 
 
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 process_mode = 3
 process_mode = 3
@@ -78,7 +78,7 @@ bus = &"Music"
 
 
 [node name="CollisionShape2D2" type="CollisionShape2D" parent="Area2D"]
 [node name="CollisionShape2D2" type="CollisionShape2D" parent="Area2D"]
 position = Vector2(-2, -1)
 position = Vector2(-2, -1)
-shape = SubResource("CircleShape2D_prh1k")
+shape = SubResource("CircleShape2D_50sud")
 
 
 [node name="Coin" type="AudioStreamPlayer2D" parent="."]
 [node name="Coin" type="AudioStreamPlayer2D" parent="."]
 stream = ExtResource("7_qj3sr")
 stream = ExtResource("7_qj3sr")

+ 3 - 3
scene/entity/ufo_4.tscn

@@ -10,7 +10,7 @@
 [ext_resource type="AudioStream" uid="uid://dmqxlbrefsbty" path="res://snd/sfx/explosion(1).wav" id="8_yj32d"]
 [ext_resource type="AudioStream" uid="uid://dmqxlbrefsbty" path="res://snd/sfx/explosion(1).wav" id="8_yj32d"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="9_3wuwx"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="9_3wuwx"]
 
 
-[sub_resource type="CircleShape2D" id="CircleShape2D_ne4oq"]
+[sub_resource type="CircleShape2D" id="CircleShape2D_jpvqu"]
 radius = 223.258
 radius = 223.258
 
 
 [node name="WitchUfo" type="CharacterBody2D"]
 [node name="WitchUfo" type="CharacterBody2D"]
@@ -21,13 +21,13 @@ script = ExtResource("1_1w43w")
 movement_speed = 200.0
 movement_speed = 200.0
 radius = 450.0
 radius = 450.0
 dps = 150.0
 dps = 150.0
-max_hp = 20000.0
+max_hp = 20001.0
 wheat_out = 100
 wheat_out = 100
 should_rotate = false
 should_rotate = false
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 position = Vector2(-2, -1)
 position = Vector2(-2, -1)
-shape = SubResource("CircleShape2D_ne4oq")
+shape = SubResource("CircleShape2D_jpvqu")
 
 
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 process_mode = 3
 process_mode = 3

+ 3 - 3
scene/entity/ufo_ast.tscn

@@ -10,7 +10,7 @@
 [ext_resource type="AudioStream" uid="uid://dmqxlbrefsbty" path="res://snd/sfx/explosion(1).wav" id="8_f61qb"]
 [ext_resource type="AudioStream" uid="uid://dmqxlbrefsbty" path="res://snd/sfx/explosion(1).wav" id="8_f61qb"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="9_rg678"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="9_rg678"]
 
 
-[sub_resource type="CircleShape2D" id="CircleShape2D_prh1k"]
+[sub_resource type="CircleShape2D" id="CircleShape2D_6ay2s"]
 radius = 127.063
 radius = 127.063
 
 
 [node name="Asteroid" type="CharacterBody2D"]
 [node name="Asteroid" type="CharacterBody2D"]
@@ -22,7 +22,7 @@ dps = 60.0
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 position = Vector2(-2, -1)
 position = Vector2(-2, -1)
-shape = SubResource("CircleShape2D_prh1k")
+shape = SubResource("CircleShape2D_6ay2s")
 
 
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."]
 process_mode = 3
 process_mode = 3
@@ -83,7 +83,7 @@ bus = &"Music"
 
 
 [node name="CollisionShape2D2" type="CollisionShape2D" parent="Area2D"]
 [node name="CollisionShape2D2" type="CollisionShape2D" parent="Area2D"]
 position = Vector2(-2, -1)
 position = Vector2(-2, -1)
-shape = SubResource("CircleShape2D_prh1k")
+shape = SubResource("CircleShape2D_6ay2s")
 
 
 [node name="Coin" type="AudioStreamPlayer2D" parent="."]
 [node name="Coin" type="AudioStreamPlayer2D" parent="."]
 stream = ExtResource("8_f61qb")
 stream = ExtResource("8_f61qb")

+ 4 - 4
scene/entity/wheat.tscn

@@ -5,10 +5,10 @@
 [ext_resource type="AudioStream" uid="uid://cymt7xlvjplx7" path="res://snd/sfx/coin.wav" id="3_pykee"]
 [ext_resource type="AudioStream" uid="uid://cymt7xlvjplx7" path="res://snd/sfx/coin.wav" id="3_pykee"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="4_feb1a"]
 [ext_resource type="Script" path="res://scene/entity/pc.gd" id="4_feb1a"]
 
 
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_tt0m1"]
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_rxees"]
 size = Vector2(9, 152)
 size = Vector2(9, 152)
 
 
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_0qtwq"]
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_abo5n"]
 size = Vector2(693, 693)
 size = Vector2(693, 693)
 
 
 [node name="Wheat" type="RigidBody2D"]
 [node name="Wheat" type="RigidBody2D"]
@@ -22,13 +22,13 @@ texture = ExtResource("1_8mf82")
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 position = Vector2(-0.5, 0)
 position = Vector2(-0.5, 0)
-shape = SubResource("RectangleShape2D_tt0m1")
+shape = SubResource("RectangleShape2D_rxees")
 
 
 [node name="CaptureArea" type="Area2D" parent="."]
 [node name="CaptureArea" type="Area2D" parent="."]
 
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="CaptureArea"]
 [node name="CollisionShape2D" type="CollisionShape2D" parent="CaptureArea"]
 position = Vector2(-1.5, 7.5)
 position = Vector2(-1.5, 7.5)
-shape = SubResource("RectangleShape2D_0qtwq")
+shape = SubResource("RectangleShape2D_abo5n")
 
 
 [node name="Coin" type="AudioStreamPlayer2D" parent="."]
 [node name="Coin" type="AudioStreamPlayer2D" parent="."]
 stream = ExtResource("3_pykee")
 stream = ExtResource("3_pykee")

+ 14 - 0
scene/pause_menu/ailock.gd

@@ -0,0 +1,14 @@
+extends Button
+
+var vsync_on: bool = false
+
+func _ready():
+    update_vsync()
+
+func _on_pressed():
+    vsync_on = !vsync_on
+    update_vsync()
+
+func update_vsync():
+    get_tree().get_root().get_child(0).disable_ai = vsync_on
+    set_text("on" if vsync_on else "off")

File diff suppressed because it is too large
+ 139 - 77
scene/pause_menu/pause_menu.tscn


+ 14 - 0
scene/pause_menu/wheat.gd

@@ -0,0 +1,14 @@
+extends Button
+
+var vsync_on: bool = false
+
+func _ready():
+    update_vsync()
+
+func _on_pressed():
+    vsync_on = !vsync_on
+    update_vsync()
+
+func update_vsync():
+    get_tree().get_root().get_child(0).disable_wheat = vsync_on
+    set_text("on" if vsync_on else "off")

+ 10 - 7
scene/ui/plant_button.tscn

@@ -11,7 +11,6 @@ anchors_preset = 0
 script = ExtResource("1_hg7q7")
 script = ExtResource("1_hg7q7")
 
 
 [node name="MarginContainer" type="MarginContainer" parent="."]
 [node name="MarginContainer" type="MarginContainer" parent="."]
-layout_mode = 1
 anchors_preset = 8
 anchors_preset = 8
 anchor_left = 0.5
 anchor_left = 0.5
 anchor_top = 0.5
 anchor_top = 0.5
@@ -30,7 +29,10 @@ theme_override_constants/margin_bottom = 4
 
 
 [node name="Button" type="Button" parent="MarginContainer"]
 [node name="Button" type="Button" parent="MarginContainer"]
 custom_minimum_size = Vector2(64, 64)
 custom_minimum_size = Vector2(64, 64)
-layout_mode = 2
+offset_left = 8.0
+offset_top = 4.0
+offset_right = 72.0
+offset_bottom = 68.0
 focus_mode = 0
 focus_mode = 0
 icon = ExtResource("1_f73da")
 icon = ExtResource("1_f73da")
 expand_icon = true
 expand_icon = true
@@ -38,7 +40,6 @@ script = ExtResource("1_g4acw")
 
 
 [node name="Tooltip" type="MarginContainer" parent="."]
 [node name="Tooltip" type="MarginContainer" parent="."]
 visible = false
 visible = false
-layout_mode = 1
 anchors_preset = -1
 anchors_preset = -1
 anchor_top = 0.5
 anchor_top = 0.5
 anchor_bottom = 0.5
 anchor_bottom = 0.5
@@ -47,20 +48,22 @@ grow_vertical = 2
 theme_override_constants/margin_right = 32
 theme_override_constants/margin_right = 32
 
 
 [node name="Tooltip2" type="PanelContainer" parent="Tooltip"]
 [node name="Tooltip2" type="PanelContainer" parent="Tooltip"]
-layout_mode = 2
+offset_right = 266.0
+offset_bottom = 16.0
 
 
 [node name="Tooltip3" type="MarginContainer" parent="Tooltip/Tooltip2"]
 [node name="Tooltip3" type="MarginContainer" parent="Tooltip/Tooltip2"]
-layout_mode = 2
 theme_override_constants/margin_left = 8
 theme_override_constants/margin_left = 8
 theme_override_constants/margin_top = 8
 theme_override_constants/margin_top = 8
 theme_override_constants/margin_right = 8
 theme_override_constants/margin_right = 8
 theme_override_constants/margin_bottom = 8
 theme_override_constants/margin_bottom = 8
 
 
 [node name="VBoxContainer" type="VBoxContainer" parent="Tooltip/Tooltip2/Tooltip3"]
 [node name="VBoxContainer" type="VBoxContainer" parent="Tooltip/Tooltip2/Tooltip3"]
-layout_mode = 2
+offset_left = 8.0
+offset_top = 8.0
+offset_right = 258.0
+offset_bottom = 8.0
 
 
 [node name="Label" type="RichTextLabel" parent="Tooltip/Tooltip2/Tooltip3/VBoxContainer"]
 [node name="Label" type="RichTextLabel" parent="Tooltip/Tooltip2/Tooltip3/VBoxContainer"]
 custom_minimum_size = Vector2(250, 0)
 custom_minimum_size = Vector2(250, 0)
-layout_mode = 2
 bbcode_enabled = true
 bbcode_enabled = true
 fit_content_height = true
 fit_content_height = true