diff --git a/LICENSE b/LICENSE index 0144fa7..57915d3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ -## Project License(s) (Mixes) +## Project License(s) (MIXED) -See various licenses listed in this file. +See various licenses listed in this file. See details of individual licenses in their respective *.txt files (see project files). @@ -56,6 +56,7 @@ SEE VARIOUS LICENSES CONTAINED WITHIN RESPECTIVE DIRECTORIES UNDER "resources/" - resource "2D Radial Distortion – Fisheye/Barrel" (radial_distortion.gdshader) by jamesfrize licensed under CC0 1.0 (https://creativecommons.org/publicdomain/zero/1.0/) - resource "Chromatic Aberration" (chromatic_abberation_radial.gdshader) by hayden licensed under CC0 1.0 (https://creativecommons.org/publicdomain/zero/1.0/) - resource "Cracked Glass" (cracked_glass.gdshader) by rupti licensed under CC0 1.0 (https://creativecommons.org/publicdomain/zero/1.0/) +- resource "Starry Sky" (starry_sky.gdshader) by breadpack licensed under MIT (https://opensource.org/license/mit) @@ -89,4 +90,7 @@ audio music tracks ["axes_arr_mstr_loop.mp3", "forest_arr_mstr_loop.mp3", "stron ## Godot License(s) -- https://godotengine.org/license/ \ No newline at end of file +- https://godotengine.org/license/ + + + diff --git a/addons/BulletUpHell/Examples/Example4_Bullet_Customisation.tscn b/addons/BulletUpHell/Examples/Example4_Bullet_Customisation.tscn index daf143a..a377ba9 100644 --- a/addons/BulletUpHell/Examples/Example4_Bullet_Customisation.tscn +++ b/addons/BulletUpHell/Examples/Example4_Bullet_Customisation.tscn @@ -1,281 +1,166 @@ -[gd_scene load_steps=36 format=3 uid="uid://cy823nswtu3v3"] +[gd_scene load_steps=38 format=3 uid="uid://cy823nswtu3v3"] [ext_resource type="Script" path="res://addons/BulletUpHell/Examples/ExampleScene.gd" id="1_f4dyt"] [ext_resource type="Script" path="res://addons/BulletUpHell/Nodes/BuHPattern.gd" id="2_w35i7"] [ext_resource type="Script" path="res://addons/BulletUpHell/SpawnPatterns/PatternOne.gd" id="3_ra0lu"] +[ext_resource type="Script" path="res://addons/BulletUpHell/Bullet/animStates.gd" id="5_8b00n"] [ext_resource type="Script" path="res://addons/BulletUpHell/Nodes/BuHBulletProperties.gd" id="9_uqn31"] [ext_resource type="Script" path="res://addons/BulletUpHell/Bullet/BulletProps.gd" id="10_rdmci"] [ext_resource type="Script" path="res://addons/BulletUpHell/Nodes/BuHSpawnPoint.gd" id="11_ormf1"] -[sub_resource type="NavigationPolygon" id="NavigationPolygon_likgb"] +[sub_resource type="NavigationPolygon" id="NavigationPolygon_f1ld7"] resource_name = "PatternOne" script = ExtResource("3_ra0lu") -bullet = "equation" +bullet = "scale" +nbr = 1 iterations = -1 -follows_parent = false +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false forced_angle = 0.0 forced_target = NodePath("") +forced_lookat_mouse = false forced_pattern_lookat = true cooldown_stasis = false cooldown_spawn = 5.0 cooldown_shoot = 0.0 cooldown_next_spawn = 0.0 cooldown_next_shoot = 0.0 -wait_latence = 0 wait_tween_momentum = 0 wait_tween_length = 0.0 wait_tween_time = 0.0 -layer_nbr = 1 -layer_cooldown_spawn = 0.0 -layer_pos_offset = 0.0 -layer_speed_offset = 0.0 -layer_angle_offset = 0.0 -r_randomisation_chances = 1.0 -r_bullet_choice = "" -r_bullet_nbr_choice = "" -r_bullet_nbr_variation = Vector3(0, 0, 0) -r_pattern_angle_choice = "" -r_pattern_angle_variation = Vector3(0, 0, 0) -r_infinite_iter_chances = 0.0 -r_iterations_choice = "" -r_iterations_variation = Vector3(0, 0, 0) -r_forced_angle_choice = "" -r_forced_angle_variation = Vector3(0, 0, 0) -r_forced_target_choice = [] -r_stasis_chances = 0.0 -r_cooldown_spawn_choice = "" -r_cooldown_spawn_variation = Vector3(0, 0, 0) -r_cooldown_shoot_choice = "" -r_cooldown_shoot_variation = Vector3(0, 0, 0) -r_cooldown_n_spawn_choice = "" -r_cooldown_n_spawn_variation = Vector3(0, 0, 0) -r_cooldown_n_shoot_choice = "" -r_cooldown_n_shoot_variation = Vector3(0, 0, 0) [sub_resource type="NavigationPolygon" id="NavigationPolygon_ta7x4"] resource_name = "PatternOne" script = ExtResource("3_ra0lu") bullet = "color" +nbr = 1 iterations = -1 -follows_parent = false +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false forced_angle = 0.0 forced_target = NodePath("") +forced_lookat_mouse = false forced_pattern_lookat = true cooldown_stasis = false cooldown_spawn = 5.0 cooldown_shoot = 0.0 cooldown_next_spawn = 0.0 cooldown_next_shoot = 0.0 -wait_latence = 0 wait_tween_momentum = 0 wait_tween_length = 0.0 wait_tween_time = 0.0 -layer_nbr = 1 -layer_cooldown_spawn = 0.0 -layer_pos_offset = 0.0 -layer_speed_offset = 0.0 -layer_angle_offset = 0.0 -r_randomisation_chances = 1.0 -r_bullet_choice = "" -r_bullet_nbr_choice = "" -r_bullet_nbr_variation = Vector3(0, 0, 0) -r_pattern_angle_choice = "" -r_pattern_angle_variation = Vector3(0, 0, 0) -r_infinite_iter_chances = 0.0 -r_iterations_choice = "" -r_iterations_variation = Vector3(0, 0, 0) -r_forced_angle_choice = "" -r_forced_angle_variation = Vector3(0, 0, 0) -r_forced_target_choice = [] -r_stasis_chances = 0.0 -r_cooldown_spawn_choice = "" -r_cooldown_spawn_variation = Vector3(0, 0, 0) -r_cooldown_shoot_choice = "" -r_cooldown_shoot_variation = Vector3(0, 0, 0) -r_cooldown_n_spawn_choice = "" -r_cooldown_n_spawn_variation = Vector3(0, 0, 0) -r_cooldown_n_shoot_choice = "" -r_cooldown_n_shoot_variation = Vector3(0, 0, 0) [sub_resource type="NavigationPolygon" id="NavigationPolygon_qxold"] resource_name = "PatternOne" script = ExtResource("3_ra0lu") bullet = "speed" +nbr = 1 iterations = -1 -follows_parent = false +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false forced_angle = 0.0 forced_target = NodePath("") +forced_lookat_mouse = false forced_pattern_lookat = true cooldown_stasis = false cooldown_spawn = 5.0 cooldown_shoot = 0.0 cooldown_next_spawn = 0.0 cooldown_next_shoot = 0.0 -wait_latence = 0 wait_tween_momentum = 0 wait_tween_length = 0.0 wait_tween_time = 0.0 -layer_nbr = 1 -layer_cooldown_spawn = 0.0 -layer_pos_offset = 0.0 -layer_speed_offset = 0.0 -layer_angle_offset = 0.0 -r_randomisation_chances = 1.0 -r_bullet_choice = "" -r_bullet_nbr_choice = "" -r_bullet_nbr_variation = Vector3(0, 0, 0) -r_pattern_angle_choice = "" -r_pattern_angle_variation = Vector3(0, 0, 0) -r_infinite_iter_chances = 0.0 -r_iterations_choice = "" -r_iterations_variation = Vector3(0, 0, 0) -r_forced_angle_choice = "" -r_forced_angle_variation = Vector3(0, 0, 0) -r_forced_target_choice = [] -r_stasis_chances = 0.0 -r_cooldown_spawn_choice = "" -r_cooldown_spawn_variation = Vector3(0, 0, 0) -r_cooldown_shoot_choice = "" -r_cooldown_shoot_variation = Vector3(0, 0, 0) -r_cooldown_n_spawn_choice = "" -r_cooldown_n_spawn_variation = Vector3(0, 0, 0) -r_cooldown_n_shoot_choice = "" -r_cooldown_n_shoot_variation = Vector3(0, 0, 0) [sub_resource type="NavigationPolygon" id="NavigationPolygon_qeo7e"] resource_name = "PatternOne" script = ExtResource("3_ra0lu") bullet = "spin" +nbr = 1 iterations = -1 -follows_parent = false +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false forced_angle = 0.0 forced_target = NodePath("") +forced_lookat_mouse = false +forced_pattern_lookat = true +cooldown_stasis = false +cooldown_spawn = 5.0 +cooldown_shoot = 0.0 +cooldown_next_spawn = 0.0 +cooldown_next_shoot = 0.0 +wait_tween_momentum = 0 +wait_tween_length = 0.0 +wait_tween_time = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_7ayst"] +resource_name = "PatternOne" +script = ExtResource("3_ra0lu") +bullet = "equation" +nbr = 1 +iterations = -1 +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false +forced_angle = 0.0 +forced_target = NodePath("") +forced_lookat_mouse = false forced_pattern_lookat = true cooldown_stasis = false cooldown_spawn = 5.0 cooldown_shoot = 0.0 cooldown_next_spawn = 0.0 cooldown_next_shoot = 0.0 -wait_latence = 0 wait_tween_momentum = 0 wait_tween_length = 0.0 wait_tween_time = 0.0 -layer_nbr = 1 -layer_cooldown_spawn = 0.0 -layer_pos_offset = 0.0 -layer_speed_offset = 0.0 -layer_angle_offset = 0.0 -r_randomisation_chances = 1.0 -r_bullet_choice = "" -r_bullet_nbr_choice = "" -r_bullet_nbr_variation = Vector3(0, 0, 0) -r_pattern_angle_choice = "" -r_pattern_angle_variation = Vector3(0, 0, 0) -r_infinite_iter_chances = 0.0 -r_iterations_choice = "" -r_iterations_variation = Vector3(0, 0, 0) -r_forced_angle_choice = "" -r_forced_angle_variation = Vector3(0, 0, 0) -r_forced_target_choice = [] -r_stasis_chances = 0.0 -r_cooldown_spawn_choice = "" -r_cooldown_spawn_variation = Vector3(0, 0, 0) -r_cooldown_shoot_choice = "" -r_cooldown_shoot_variation = Vector3(0, 0, 0) -r_cooldown_n_spawn_choice = "" -r_cooldown_n_spawn_variation = Vector3(0, 0, 0) -r_cooldown_n_shoot_choice = "" -r_cooldown_n_shoot_variation = Vector3(0, 0, 0) [sub_resource type="NavigationPolygon" id="NavigationPolygon_3n4xb"] resource_name = "PatternOne" script = ExtResource("3_ra0lu") bullet = "path" +nbr = 1 iterations = -1 -follows_parent = true +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false forced_angle = 0.0 forced_target = NodePath("") +forced_lookat_mouse = false forced_pattern_lookat = true cooldown_stasis = false cooldown_spawn = 5.0 cooldown_shoot = 0.0 cooldown_next_spawn = 0.0 cooldown_next_shoot = 0.0 -wait_latence = 0 wait_tween_momentum = 0 wait_tween_length = 0.0 wait_tween_time = 0.0 -layer_nbr = 1 -layer_cooldown_spawn = 0.0 -layer_pos_offset = 0.0 -layer_speed_offset = 0.0 -layer_angle_offset = 0.0 -r_randomisation_chances = 1.0 -r_bullet_choice = "" -r_bullet_nbr_choice = "" -r_bullet_nbr_variation = Vector3(0, 0, 0) -r_pattern_angle_choice = "" -r_pattern_angle_variation = Vector3(0, 0, 0) -r_infinite_iter_chances = 0.0 -r_iterations_choice = "" -r_iterations_variation = Vector3(0, 0, 0) -r_forced_angle_choice = "" -r_forced_angle_variation = Vector3(0, 0, 0) -r_forced_target_choice = [] -r_stasis_chances = 0.0 -r_cooldown_spawn_choice = "" -r_cooldown_spawn_variation = Vector3(0, 0, 0) -r_cooldown_shoot_choice = "" -r_cooldown_shoot_variation = Vector3(0, 0, 0) -r_cooldown_n_spawn_choice = "" -r_cooldown_n_spawn_variation = Vector3(0, 0, 0) -r_cooldown_n_shoot_choice = "" -r_cooldown_n_shoot_variation = Vector3(0, 0, 0) [sub_resource type="NavigationPolygon" id="NavigationPolygon_pnhqu"] resource_name = "PatternOne" script = ExtResource("3_ra0lu") bullet = "animation" +nbr = 1 iterations = -1 -follows_parent = true +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false forced_angle = 0.0 forced_target = NodePath("") +forced_lookat_mouse = false forced_pattern_lookat = true cooldown_stasis = false cooldown_spawn = 5.0 cooldown_shoot = 0.0 cooldown_next_spawn = 0.0 cooldown_next_shoot = 0.0 -wait_latence = 0 wait_tween_momentum = 0 wait_tween_length = 0.0 wait_tween_time = 0.0 -layer_nbr = 1 -layer_cooldown_spawn = 0.0 -layer_pos_offset = 0.0 -layer_speed_offset = 0.0 -layer_angle_offset = 0.0 -r_randomisation_chances = 1.0 -r_bullet_choice = "" -r_bullet_nbr_choice = "" -r_bullet_nbr_variation = Vector3(0, 0, 0) -r_pattern_angle_choice = "" -r_pattern_angle_variation = Vector3(0, 0, 0) -r_infinite_iter_chances = 0.0 -r_iterations_choice = "" -r_iterations_variation = Vector3(0, 0, 0) -r_forced_angle_choice = "" -r_forced_angle_variation = Vector3(0, 0, 0) -r_forced_target_choice = [] -r_stasis_chances = 0.0 -r_cooldown_spawn_choice = "" -r_cooldown_spawn_variation = Vector3(0, 0, 0) -r_cooldown_shoot_choice = "" -r_cooldown_shoot_variation = Vector3(0, 0, 0) -r_cooldown_n_spawn_choice = "" -r_cooldown_n_spawn_variation = Vector3(0, 0, 0) -r_cooldown_n_shoot_choice = "" -r_cooldown_n_shoot_variation = Vector3(0, 0, 0) [sub_resource type="Curve2D" id="Curve2D_cyl6h"] @@ -288,26 +173,15 @@ point_count = 3 [sub_resource type="PackedDataContainer" id="PackedDataContainer_pao7s"] script = ExtResource("10_rdmci") +anim_more = Array[ExtResource("5_8b00n")]([]) +damage = 1.0 speed = 100.0 -scale = 1 -angle = 0 -groups = [] -anim_idle_texture = "0" -anim_spawn_texture = "" -anim_waiting_texture = "" -anim_delete_texture = "" -anim_idle_collision = "0" -anim_spawn_collision = "" -anim_waiting_collision = "" -anim_delete_collision = "" -anim_idle_sfx = -1 -anim_spawn_sfx = -1 -anim_waiting_sfx = -1 -anim_delete_sfx = -1 +scale = 1.0 +angle = 0.0 +groups = PackedStringArray() spec_bounces = 0 spec_no_collision = false spec_modulate_loop = 0.0 -spec_skew = 0.0 spec_trail_length = 0.0 spec_trail_width = 0.0 spec_trail_modulate = Color(1, 1, 1, 1) @@ -324,51 +198,47 @@ trigger_container = "" trigger_wait_for_shot = true homing_type = 0 homing_target = NodePath("") -homing_steer = 0 -homing_time_start = 0 -homing_duration = 999 +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 scale_multi_iterations = 1 scale_multiplier = SubResource("Curve_3idnv") scale_multi_scale = 10.0 r_randomisation_chances = 1.0 -r_speed_choice = "" +r_speed_choice = PackedFloat32Array() r_speed_variation = Vector3(0, 0, 0) -r_scale_choice = "" +r_scale_choice = PackedFloat32Array() r_scale_variation = Vector3(0, 0, 0) -r_angle_choice = "" +r_angle_choice = PackedFloat32Array() r_angle_variation = Vector3(0, 0, 0) r_group_choice = [] -r_bounce_choice = "" +r_bounce_choice = PackedInt32Array() r_bounce_variation = Vector3(0, 0, 0) r_no_coll_chances = 0.0 r_modulate_variation = Vector3(0, 0, 0) r_trail_length_variation = Vector3(0, 0, 0) r_trail_color_variation = Vector3(0, 0, 0) r_rotating_variation = Vector3(0, 0, 0) -r_death_after_choice = "" +r_death_after_choice = PackedFloat32Array() r_death_after_variation = Vector3(0, 0, 0) r_death_outside_chances = 0.0 -r_dir_equation_choice = "" +r_dir_equation_choice = PackedStringArray() r_curve_choice = [] r_speed_multi_curve_choice = [] r_speed_multi_iter_variation = Vector3(0, 0, 0) r_speed_multi_scale_variation = Vector3(0, 0, 0) -r_trigger_choice = "" +r_trigger_choice = PackedStringArray() r_wait_for_shot_chances = 0.0 r_homing_target_choice = [] -r_special_target_choice = "" -r_group_target_choice = "" -r_pos_target_choice = "" -r_steer_choice = "" +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() r_steer_variation = Vector3(0, 0, 0) -r_homing_delay_choice = "" +r_homing_delay_choice = PackedFloat32Array() r_homing_delay_variation = Vector3(0, 0, 0) -r_homing_dur_choice = "" +r_homing_dur_choice = PackedFloat32Array() r_homing_dur_variation = Vector3(0, 0, 0) -r_beam_length_choice = "" -r_beam_length_variation = Vector3(0, 0, 0) -r_beam_bounce_choice = "" -r_beam_width_variation = Vector3(0, 0, 0) r_scale_multi_curve_choice = [] r_scale_multi_iter_variation = Vector3(0, 0, 0) r_scale_multi_scale_variation = Vector3(0, 0, 0) @@ -384,27 +254,16 @@ colors = PackedColorArray(0.763103, 0.563131, 0.13461, 1, 1, 1, 1, 1) [sub_resource type="PackedDataContainer" id="PackedDataContainer_r1qhs"] script = ExtResource("10_rdmci") +anim_more = Array[ExtResource("5_8b00n")]([]) +damage = 1.0 speed = 100.0 -scale = 1 -angle = 0 -groups = [] -anim_idle_texture = "0" -anim_spawn_texture = "" -anim_waiting_texture = "" -anim_delete_texture = "" -anim_idle_collision = "0" -anim_spawn_collision = "" -anim_waiting_collision = "" -anim_delete_collision = "" -anim_idle_sfx = -1 -anim_spawn_sfx = -1 -anim_waiting_sfx = -1 -anim_delete_sfx = -1 +scale = 1.0 +angle = 0.0 +groups = PackedStringArray() spec_bounces = 0 spec_no_collision = false spec_modulate = SubResource("Gradient_pv8jg") spec_modulate_loop = 1.0 -spec_skew = 0.0 spec_trail_length = 0.0 spec_trail_width = 0.0 spec_trail_modulate = Color(1, 1, 1, 1) @@ -421,51 +280,47 @@ trigger_container = "" trigger_wait_for_shot = true homing_type = 0 homing_target = NodePath("") -homing_steer = 0 -homing_time_start = 0 -homing_duration = 999 +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 scale_multi_iterations = 0 scale_multiplier = SubResource("Curve_q0gjg") -scale_multi_scale = 1 +scale_multi_scale = 1.0 r_randomisation_chances = 1.0 -r_speed_choice = "" +r_speed_choice = PackedFloat32Array() r_speed_variation = Vector3(0, 0, 0) -r_scale_choice = "" +r_scale_choice = PackedFloat32Array() r_scale_variation = Vector3(0, 0, 0) -r_angle_choice = "" +r_angle_choice = PackedFloat32Array() r_angle_variation = Vector3(0, 0, 0) r_group_choice = [] -r_bounce_choice = "" +r_bounce_choice = PackedInt32Array() r_bounce_variation = Vector3(0, 0, 0) r_no_coll_chances = 0.0 r_modulate_variation = Vector3(0, 0, 0) r_trail_length_variation = Vector3(0, 0, 0) r_trail_color_variation = Vector3(0, 0, 0) r_rotating_variation = Vector3(0, 0, 0) -r_death_after_choice = "" +r_death_after_choice = PackedFloat32Array() r_death_after_variation = Vector3(0, 0, 0) r_death_outside_chances = 0.0 -r_dir_equation_choice = "" +r_dir_equation_choice = PackedStringArray() r_curve_choice = [] r_speed_multi_curve_choice = [] r_speed_multi_iter_variation = Vector3(0, 0, 0) r_speed_multi_scale_variation = Vector3(0, 0, 0) -r_trigger_choice = "" +r_trigger_choice = PackedStringArray() r_wait_for_shot_chances = 0.0 r_homing_target_choice = [] -r_special_target_choice = "" -r_group_target_choice = "" -r_pos_target_choice = "" -r_steer_choice = "" +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() r_steer_variation = Vector3(0, 0, 0) -r_homing_delay_choice = "" +r_homing_delay_choice = PackedFloat32Array() r_homing_delay_variation = Vector3(0, 0, 0) -r_homing_dur_choice = "" +r_homing_dur_choice = PackedFloat32Array() r_homing_dur_variation = Vector3(0, 0, 0) -r_beam_length_choice = "" -r_beam_length_variation = Vector3(0, 0, 0) -r_beam_bounce_choice = "" -r_beam_width_variation = Vector3(0, 0, 0) r_scale_multi_curve_choice = [] r_scale_multi_iter_variation = Vector3(0, 0, 0) r_scale_multi_scale_variation = Vector3(0, 0, 0) @@ -482,26 +337,15 @@ point_count = 4 [sub_resource type="PackedDataContainer" id="PackedDataContainer_wvxn5"] script = ExtResource("10_rdmci") +anim_more = Array[ExtResource("5_8b00n")]([]) +damage = 1.0 speed = 100.0 -scale = 1 -angle = 0 -groups = [] -anim_idle_texture = "0" -anim_spawn_texture = "" -anim_waiting_texture = "" -anim_delete_texture = "" -anim_idle_collision = "0" -anim_spawn_collision = "" -anim_waiting_collision = "" -anim_delete_collision = "" -anim_idle_sfx = -1 -anim_spawn_sfx = -1 -anim_waiting_sfx = -1 -anim_delete_sfx = -1 +scale = 1.0 +angle = 0.0 +groups = PackedStringArray() spec_bounces = 0 spec_no_collision = false spec_modulate_loop = 0.0 -spec_skew = 0.0 spec_trail_length = 0.0 spec_trail_width = 0.0 spec_trail_modulate = Color(1, 1, 1, 1) @@ -518,51 +362,47 @@ trigger_container = "" trigger_wait_for_shot = true homing_type = 0 homing_target = NodePath("") -homing_steer = 0 -homing_time_start = 0 -homing_duration = 999 +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 scale_multi_iterations = 0 scale_multiplier = SubResource("Curve_tj4ds") -scale_multi_scale = 1 +scale_multi_scale = 1.0 r_randomisation_chances = 1.0 -r_speed_choice = "" +r_speed_choice = PackedFloat32Array() r_speed_variation = Vector3(0, 0, 0) -r_scale_choice = "" +r_scale_choice = PackedFloat32Array() r_scale_variation = Vector3(0, 0, 0) -r_angle_choice = "" +r_angle_choice = PackedFloat32Array() r_angle_variation = Vector3(0, 0, 0) r_group_choice = [] -r_bounce_choice = "" +r_bounce_choice = PackedInt32Array() r_bounce_variation = Vector3(0, 0, 0) r_no_coll_chances = 0.0 r_modulate_variation = Vector3(0, 0, 0) r_trail_length_variation = Vector3(0, 0, 0) r_trail_color_variation = Vector3(0, 0, 0) r_rotating_variation = Vector3(0, 0, 0) -r_death_after_choice = "" +r_death_after_choice = PackedFloat32Array() r_death_after_variation = Vector3(0, 0, 0) r_death_outside_chances = 0.0 -r_dir_equation_choice = "" +r_dir_equation_choice = PackedStringArray() r_curve_choice = [] r_speed_multi_curve_choice = [] r_speed_multi_iter_variation = Vector3(0, 0, 0) r_speed_multi_scale_variation = Vector3(0, 0, 0) -r_trigger_choice = "" +r_trigger_choice = PackedStringArray() r_wait_for_shot_chances = 0.0 r_homing_target_choice = [] -r_special_target_choice = "" -r_group_target_choice = "" -r_pos_target_choice = "" -r_steer_choice = "" +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() r_steer_variation = Vector3(0, 0, 0) -r_homing_delay_choice = "" +r_homing_delay_choice = PackedFloat32Array() r_homing_delay_variation = Vector3(0, 0, 0) -r_homing_dur_choice = "" +r_homing_dur_choice = PackedFloat32Array() r_homing_dur_variation = Vector3(0, 0, 0) -r_beam_length_choice = "" -r_beam_length_variation = Vector3(0, 0, 0) -r_beam_bounce_choice = "" -r_beam_width_variation = Vector3(0, 0, 0) r_scale_multi_curve_choice = [] r_scale_multi_iter_variation = Vector3(0, 0, 0) r_scale_multi_scale_variation = Vector3(0, 0, 0) @@ -573,26 +413,15 @@ r_scale_multi_scale_variation = Vector3(0, 0, 0) [sub_resource type="PackedDataContainer" id="PackedDataContainer_0fle1"] script = ExtResource("10_rdmci") +anim_more = Array[ExtResource("5_8b00n")]([]) +damage = 1.0 speed = 100.0 scale = 5.0 -angle = 0 -groups = [] -anim_idle_texture = "0" -anim_spawn_texture = "" -anim_waiting_texture = "" -anim_delete_texture = "" -anim_idle_collision = "0" -anim_spawn_collision = "" -anim_waiting_collision = "" -anim_delete_collision = "" -anim_idle_sfx = -1 -anim_spawn_sfx = -1 -anim_waiting_sfx = -1 -anim_delete_sfx = -1 +angle = 0.0 +groups = PackedStringArray() spec_bounces = 0 spec_no_collision = false spec_modulate_loop = 0.0 -spec_skew = 0.0 spec_trail_length = 0.0 spec_trail_width = 0.0 spec_trail_modulate = Color(1, 1, 1, 1) @@ -609,77 +438,62 @@ trigger_container = "" trigger_wait_for_shot = true homing_type = 0 homing_target = NodePath("") -homing_steer = 0 -homing_time_start = 0 -homing_duration = 999 +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 scale_multi_iterations = 0 scale_multiplier = SubResource("Curve_4heuc") -scale_multi_scale = 1 +scale_multi_scale = 1.0 r_randomisation_chances = 1.0 -r_speed_choice = "" +r_speed_choice = PackedFloat32Array() r_speed_variation = Vector3(0, 0, 0) -r_scale_choice = "" +r_scale_choice = PackedFloat32Array() r_scale_variation = Vector3(0, 0, 0) -r_angle_choice = "" +r_angle_choice = PackedFloat32Array() r_angle_variation = Vector3(0, 0, 0) r_group_choice = [] -r_bounce_choice = "" +r_bounce_choice = PackedInt32Array() r_bounce_variation = Vector3(0, 0, 0) r_no_coll_chances = 0.0 r_modulate_variation = Vector3(0, 0, 0) r_trail_length_variation = Vector3(0, 0, 0) r_trail_color_variation = Vector3(0, 0, 0) r_rotating_variation = Vector3(0, 0, 0) -r_death_after_choice = "" +r_death_after_choice = PackedFloat32Array() r_death_after_variation = Vector3(0, 0, 0) r_death_outside_chances = 0.0 -r_dir_equation_choice = "" +r_dir_equation_choice = PackedStringArray() r_curve_choice = [] r_speed_multi_curve_choice = [] r_speed_multi_iter_variation = Vector3(0, 0, 0) r_speed_multi_scale_variation = Vector3(0, 0, 0) -r_trigger_choice = "" +r_trigger_choice = PackedStringArray() r_wait_for_shot_chances = 0.0 r_homing_target_choice = [] -r_special_target_choice = "" -r_group_target_choice = "" -r_pos_target_choice = "" -r_steer_choice = "" +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() r_steer_variation = Vector3(0, 0, 0) -r_homing_delay_choice = "" +r_homing_delay_choice = PackedFloat32Array() r_homing_delay_variation = Vector3(0, 0, 0) -r_homing_dur_choice = "" +r_homing_dur_choice = PackedFloat32Array() r_homing_dur_variation = Vector3(0, 0, 0) -r_beam_length_choice = "" -r_beam_length_variation = Vector3(0, 0, 0) -r_beam_bounce_choice = "" -r_beam_width_variation = Vector3(0, 0, 0) r_scale_multi_curve_choice = [] r_scale_multi_iter_variation = Vector3(0, 0, 0) r_scale_multi_scale_variation = Vector3(0, 0, 0) -[sub_resource type="PackedDataContainer" id="PackedDataContainer_1piye"] +[sub_resource type="PackedDataContainer" id="PackedDataContainer_0x2tm"] script = ExtResource("10_rdmci") +anim_more = Array[ExtResource("5_8b00n")]([]) +damage = 1.0 speed = 100.0 scale = 1.0 -angle = 0 -groups = [] -anim_idle_texture = "0" -anim_spawn_texture = "" -anim_waiting_texture = "" -anim_delete_texture = "" -anim_idle_collision = "0" -anim_spawn_collision = "" -anim_waiting_collision = "" -anim_delete_collision = "" -anim_idle_sfx = -1 -anim_spawn_sfx = -1 -anim_waiting_sfx = -1 -anim_delete_sfx = -1 +angle = 0.0 +groups = PackedStringArray() spec_bounces = 0 spec_no_collision = false spec_modulate_loop = 0.0 -spec_skew = 0.0 spec_trail_length = 0.0 spec_trail_width = 0.0 spec_trail_modulate = Color(1, 1, 1, 1) @@ -687,7 +501,7 @@ spec_rotating_speed = 5.0 death_after_time = 30.0 death_outside_box = Rect2(0, 0, 0, 0) death_from_collision = true -a_direction_equation = "cos(x)" +a_direction_equation = "-0.5*cos(x)" a_curve_movement = 0 a_speed_multiplier = SubResource("Curve_pr64x") a_speed_multi_iterations = 0 @@ -696,51 +510,47 @@ trigger_container = "" trigger_wait_for_shot = true homing_type = 0 homing_target = NodePath("") -homing_steer = 0 -homing_time_start = 0 -homing_duration = 999 +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 scale_multi_iterations = 0 scale_multiplier = SubResource("Curve_4heuc") scale_multi_scale = 0.0 r_randomisation_chances = 1.0 -r_speed_choice = "" +r_speed_choice = PackedFloat32Array() r_speed_variation = Vector3(0, 0, 0) -r_scale_choice = "" +r_scale_choice = PackedFloat32Array() r_scale_variation = Vector3(0, 0, 0) -r_angle_choice = "" +r_angle_choice = PackedFloat32Array() r_angle_variation = Vector3(0, 0, 0) r_group_choice = [] -r_bounce_choice = "" +r_bounce_choice = PackedInt32Array() r_bounce_variation = Vector3(0, 0, 0) r_no_coll_chances = 0.0 r_modulate_variation = Vector3(0, 0, 0) r_trail_length_variation = Vector3(0, 0, 0) r_trail_color_variation = Vector3(0, 0, 0) r_rotating_variation = Vector3(0, 0, 0) -r_death_after_choice = "" +r_death_after_choice = PackedFloat32Array() r_death_after_variation = Vector3(0, 0, 0) r_death_outside_chances = 0.0 -r_dir_equation_choice = "" +r_dir_equation_choice = PackedStringArray() r_curve_choice = [] r_speed_multi_curve_choice = [] r_speed_multi_iter_variation = Vector3(0, 0, 0) r_speed_multi_scale_variation = Vector3(0, 0, 0) -r_trigger_choice = "" +r_trigger_choice = PackedStringArray() r_wait_for_shot_chances = 0.0 r_homing_target_choice = [] -r_special_target_choice = "" -r_group_target_choice = "" -r_pos_target_choice = "" -r_steer_choice = "" +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() r_steer_variation = Vector3(0, 0, 0) -r_homing_delay_choice = "" +r_homing_delay_choice = PackedFloat32Array() r_homing_delay_variation = Vector3(0, 0, 0) -r_homing_dur_choice = "" +r_homing_dur_choice = PackedFloat32Array() r_homing_dur_variation = Vector3(0, 0, 0) -r_beam_length_choice = "" -r_beam_length_variation = Vector3(0, 0, 0) -r_beam_bounce_choice = "" -r_beam_width_variation = Vector3(0, 0, 0) r_scale_multi_curve_choice = [] r_scale_multi_iter_variation = Vector3(0, 0, 0) r_scale_multi_scale_variation = Vector3(0, 0, 0) @@ -751,26 +561,15 @@ r_scale_multi_scale_variation = Vector3(0, 0, 0) [sub_resource type="PackedDataContainer" id="PackedDataContainer_dlate"] script = ExtResource("10_rdmci") +anim_more = Array[ExtResource("5_8b00n")]([]) +damage = 1.0 speed = 100.0 scale = 2.0 -angle = 0 -groups = [] -anim_idle_texture = "Example" -anim_spawn_texture = "" -anim_waiting_texture = "" -anim_delete_texture = "" -anim_idle_collision = "0" -anim_spawn_collision = "" -anim_waiting_collision = "" -anim_delete_collision = "" -anim_idle_sfx = -1 -anim_spawn_sfx = 0 -anim_waiting_sfx = -1 -anim_delete_sfx = -1 +angle = 0.0 +groups = PackedStringArray() spec_bounces = 0 spec_no_collision = false spec_modulate_loop = 0.0 -spec_skew = 0.0 spec_trail_length = 0.0 spec_trail_width = 0.0 spec_trail_modulate = Color(1, 1, 1, 1) @@ -787,51 +586,47 @@ trigger_container = "" trigger_wait_for_shot = true homing_type = 0 homing_target = NodePath("") -homing_steer = 0 -homing_time_start = 0 -homing_duration = 999 +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 scale_multi_iterations = 0 scale_multiplier = SubResource("Curve_c00no") -scale_multi_scale = 1 +scale_multi_scale = 1.0 r_randomisation_chances = 1.0 -r_speed_choice = "" +r_speed_choice = PackedFloat32Array() r_speed_variation = Vector3(0, 0, 0) -r_scale_choice = "" +r_scale_choice = PackedFloat32Array() r_scale_variation = Vector3(0, 0, 0) -r_angle_choice = "" +r_angle_choice = PackedFloat32Array() r_angle_variation = Vector3(0, 0, 0) r_group_choice = [] -r_bounce_choice = "" +r_bounce_choice = PackedInt32Array() r_bounce_variation = Vector3(0, 0, 0) r_no_coll_chances = 0.0 r_modulate_variation = Vector3(0, 0, 0) r_trail_length_variation = Vector3(0, 0, 0) r_trail_color_variation = Vector3(0, 0, 0) r_rotating_variation = Vector3(0, 0, 0) -r_death_after_choice = "" +r_death_after_choice = PackedFloat32Array() r_death_after_variation = Vector3(0, 0, 0) r_death_outside_chances = 0.0 -r_dir_equation_choice = "" +r_dir_equation_choice = PackedStringArray() r_curve_choice = [] r_speed_multi_curve_choice = [] r_speed_multi_iter_variation = Vector3(0, 0, 0) r_speed_multi_scale_variation = Vector3(0, 0, 0) -r_trigger_choice = "" +r_trigger_choice = PackedStringArray() r_wait_for_shot_chances = 0.0 r_homing_target_choice = [] -r_special_target_choice = "" -r_group_target_choice = "" -r_pos_target_choice = "" -r_steer_choice = "" +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() r_steer_variation = Vector3(0, 0, 0) -r_homing_delay_choice = "" +r_homing_delay_choice = PackedFloat32Array() r_homing_delay_variation = Vector3(0, 0, 0) -r_homing_dur_choice = "" +r_homing_dur_choice = PackedFloat32Array() r_homing_dur_variation = Vector3(0, 0, 0) -r_beam_length_choice = "" -r_beam_length_variation = Vector3(0, 0, 0) -r_beam_bounce_choice = "" -r_beam_width_variation = Vector3(0, 0, 0) r_scale_multi_curve_choice = [] r_scale_multi_iter_variation = Vector3(0, 0, 0) r_scale_multi_scale_variation = Vector3(0, 0, 0) @@ -844,26 +639,15 @@ point_count = 5 [sub_resource type="PackedDataContainer" id="PackedDataContainer_yyxgj"] script = ExtResource("10_rdmci") +anim_more = Array[ExtResource("5_8b00n")]([]) +damage = 1.0 speed = 100.0 scale = 1.0 -angle = 0 -groups = [] -anim_idle_texture = "0" -anim_spawn_texture = "" -anim_waiting_texture = "" -anim_delete_texture = "" -anim_idle_collision = "0" -anim_spawn_collision = "" -anim_waiting_collision = "" -anim_delete_collision = "" -anim_idle_sfx = -1 -anim_spawn_sfx = -1 -anim_waiting_sfx = -1 -anim_delete_sfx = -1 +angle = 0.0 +groups = PackedStringArray() spec_bounces = 0 spec_no_collision = false spec_modulate_loop = 0.0 -spec_skew = 0.0 spec_trail_length = 0.0 spec_trail_width = 0.0 spec_trail_modulate = Color(1, 1, 1, 1) @@ -880,51 +664,47 @@ trigger_container = "" trigger_wait_for_shot = true homing_type = 0 homing_target = NodePath("") -homing_steer = 0 -homing_time_start = 0 -homing_duration = 999 +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 scale_multi_iterations = 0 scale_multiplier = SubResource("Curve_4heuc") scale_multi_scale = 0.0 r_randomisation_chances = 1.0 -r_speed_choice = "" +r_speed_choice = PackedFloat32Array() r_speed_variation = Vector3(0, 0, 0) -r_scale_choice = "" +r_scale_choice = PackedFloat32Array() r_scale_variation = Vector3(0, 0, 0) -r_angle_choice = "" +r_angle_choice = PackedFloat32Array() r_angle_variation = Vector3(0, 0, 0) r_group_choice = [] -r_bounce_choice = "" +r_bounce_choice = PackedInt32Array() r_bounce_variation = Vector3(0, 0, 0) r_no_coll_chances = 0.0 r_modulate_variation = Vector3(0, 0, 0) r_trail_length_variation = Vector3(0, 0, 0) r_trail_color_variation = Vector3(0, 0, 0) r_rotating_variation = Vector3(0, 0, 0) -r_death_after_choice = "" +r_death_after_choice = PackedFloat32Array() r_death_after_variation = Vector3(0, 0, 0) r_death_outside_chances = 0.0 -r_dir_equation_choice = "" +r_dir_equation_choice = PackedStringArray() r_curve_choice = [] r_speed_multi_curve_choice = [] r_speed_multi_iter_variation = Vector3(0, 0, 0) r_speed_multi_scale_variation = Vector3(0, 0, 0) -r_trigger_choice = "" +r_trigger_choice = PackedStringArray() r_wait_for_shot_chances = 0.0 r_homing_target_choice = [] -r_special_target_choice = "" -r_group_target_choice = "" -r_pos_target_choice = "" -r_steer_choice = "" +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() r_steer_variation = Vector3(0, 0, 0) -r_homing_delay_choice = "" +r_homing_delay_choice = PackedFloat32Array() r_homing_delay_variation = Vector3(0, 0, 0) -r_homing_dur_choice = "" +r_homing_dur_choice = PackedFloat32Array() r_homing_dur_variation = Vector3(0, 0, 0) -r_beam_length_choice = "" -r_beam_length_variation = Vector3(0, 0, 0) -r_beam_bounce_choice = "" -r_beam_width_variation = Vector3(0, 0, 0) r_scale_multi_curve_choice = [] r_scale_multi_iter_variation = Vector3(0, 0, 0) r_scale_multi_scale_variation = Vector3(0, 0, 0) @@ -940,7 +720,7 @@ script = ExtResource("1_f4dyt") [node name="SpawnPattern" type="Path2D" parent="Patterns"] script = ExtResource("2_w35i7") id = "scale" -pattern = SubResource("NavigationPolygon_likgb") +pattern = SubResource("NavigationPolygon_f1ld7") [node name="SpawnPattern2" type="Path2D" parent="Patterns"] script = ExtResource("2_w35i7") @@ -960,7 +740,7 @@ pattern = SubResource("NavigationPolygon_qeo7e") [node name="SpawnPattern5" type="Path2D" parent="Patterns"] script = ExtResource("2_w35i7") id = "equation" -pattern = SubResource("NavigationPolygon_likgb") +pattern = SubResource("NavigationPolygon_7ayst") [node name="SpawnPattern6" type="Path2D" parent="Patterns"] script = ExtResource("2_w35i7") @@ -1002,7 +782,7 @@ props = SubResource("PackedDataContainer_0fle1") [node name="Equation" type="Path2D" parent="BulletProps"] script = ExtResource("9_uqn31") id = "equation" -props = SubResource("PackedDataContainer_1piye") +props = SubResource("PackedDataContainer_0x2tm") [node name="Animation" type="Path2D" parent="BulletProps"] script = ExtResource("9_uqn31") @@ -1030,14 +810,7 @@ auto_start_on_cam = true auto_start_after_time = 0.0 auto_start_at_distance = 5.0 auto_distance_from = NodePath("") -trigger_id = null -r_randomisation_chances = 0.0 -r_active_chances = 0.0 -r_shared_area_choice = "" -r_rotating_variation = Vector3(0, 0, 0) -r_pattern_choice = "" -r_start_time_choice = "" -r_start_time_variation = Vector3(0, 0, 0) +trigger_container = NodePath("") [node name="SpawnPoint2" type="Node2D" parent="SpawnPoints"] position = Vector2(86, 307) @@ -1051,14 +824,7 @@ auto_start_on_cam = true auto_start_after_time = 0.0 auto_start_at_distance = 5.0 auto_distance_from = NodePath("") -trigger_id = null -r_randomisation_chances = 0.0 -r_active_chances = 0.0 -r_shared_area_choice = "" -r_rotating_variation = Vector3(0, 0, 0) -r_pattern_choice = "" -r_start_time_choice = "" -r_start_time_variation = Vector3(0, 0, 0) +trigger_container = NodePath("") [node name="SpawnPoint3" type="Node2D" parent="SpawnPoints"] position = Vector2(83, 510) @@ -1072,14 +838,7 @@ auto_start_on_cam = true auto_start_after_time = 0.0 auto_start_at_distance = 5.0 auto_distance_from = NodePath("") -trigger_id = null -r_randomisation_chances = 0.0 -r_active_chances = 0.0 -r_shared_area_choice = "" -r_rotating_variation = Vector3(0, 0, 0) -r_pattern_choice = "" -r_start_time_choice = "" -r_start_time_variation = Vector3(0, 0, 0) +trigger_container = NodePath("") [node name="SpawnPoint4" type="Node2D" parent="SpawnPoints"] position = Vector2(746, 119) @@ -1093,17 +852,10 @@ auto_start_on_cam = true auto_start_after_time = 0.0 auto_start_at_distance = 5.0 auto_distance_from = NodePath("") -trigger_id = null -r_randomisation_chances = 0.0 -r_active_chances = 0.0 -r_shared_area_choice = "" -r_rotating_variation = Vector3(0, 0, 0) -r_pattern_choice = "" -r_start_time_choice = "" -r_start_time_variation = Vector3(0, 0, 0) +trigger_container = NodePath("") [node name="SpawnPoint5" type="Node2D" parent="SpawnPoints"] -position = Vector2(748, 271) +position = Vector2(88, 186) script = ExtResource("11_ormf1") active = true auto_pattern_id = "equation" @@ -1114,14 +866,7 @@ auto_start_on_cam = true auto_start_after_time = 0.0 auto_start_at_distance = 5.0 auto_distance_from = NodePath("") -trigger_id = null -r_randomisation_chances = 0.0 -r_active_chances = 0.0 -r_shared_area_choice = "" -r_rotating_variation = Vector3(0, 0, 0) -r_pattern_choice = "" -r_start_time_choice = "" -r_start_time_variation = Vector3(0, 0, 0) +trigger_container = NodePath("") [node name="SpawnPoint6" type="Node2D" parent="SpawnPoints"] position = Vector2(744, 496) @@ -1135,14 +880,7 @@ auto_start_on_cam = true auto_start_after_time = 0.0 auto_start_at_distance = 5.0 auto_distance_from = NodePath("") -trigger_id = null -r_randomisation_chances = 0.0 -r_active_chances = 0.0 -r_shared_area_choice = "" -r_rotating_variation = Vector3(0, 0, 0) -r_pattern_choice = "" -r_start_time_choice = "" -r_start_time_variation = Vector3(0, 0, 0) +trigger_container = NodePath("") [node name="SpawnPoint7" type="Node2D" parent="SpawnPoints"] position = Vector2(560, 336) @@ -1156,14 +894,7 @@ auto_start_on_cam = true auto_start_after_time = 0.0 auto_start_at_distance = 5.0 auto_distance_from = NodePath("") -trigger_id = null -r_randomisation_chances = 0.0 -r_active_chances = 0.0 -r_shared_area_choice = "" -r_rotating_variation = Vector3(0, 0, 0) -r_pattern_choice = "" -r_start_time_choice = "" -r_start_time_variation = Vector3(0, 0, 0) +trigger_container = NodePath("") [node name="Walls" type="StaticBody2D" parent="."] collision_layer = 16 diff --git a/assets/audio/pixabay/junipersona/license.txt b/assets/audio/pixabay/junipersona/license.txt new file mode 100644 index 0000000..0e6e597 --- /dev/null +++ b/assets/audio/pixabay/junipersona/license.txt @@ -0,0 +1,6 @@ +Music "To The Death" (https://pixabay.com/music/video-games-to-the-death-159171/) +By junipersona (https://pixabay.com/users/junipersona-35113928/) +From Pixabay (https://pixabay.com/) +Licensed under Pixabay (https://pixabay.com/service/license-summary/) + +Mirror: https://www.youtube.com/watch?v=Qw-nzYJLV3c diff --git a/assets/audio/pixabay/junipersona/to_the_death.mp3 b/assets/audio/pixabay/junipersona/to_the_death.mp3 new file mode 100644 index 0000000..f354e31 Binary files /dev/null and b/assets/audio/pixabay/junipersona/to_the_death.mp3 differ diff --git a/assets/audio/pixabay/junipersona/to_the_death.mp3.import b/assets/audio/pixabay/junipersona/to_the_death.mp3.import new file mode 100644 index 0000000..270844c --- /dev/null +++ b/assets/audio/pixabay/junipersona/to_the_death.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://cjhw543r57cxo" +path="res://.godot/imported/to_the_death.mp3-bd833c780b5aa2996212c625d1f92d78.mp3str" + +[deps] + +source_file="res://assets/audio/pixabay/junipersona/to_the_death.mp3" +dest_files=["res://.godot/imported/to_the_death.mp3-bd833c780b5aa2996212c625d1f92d78.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/image/icon/icon.svg.import b/assets/image/icon/icon.svg.import index e56b9b4..29341a8 100644 --- a/assets/image/icon/icon.svg.import +++ b/assets/image/icon/icon.svg.import @@ -3,25 +3,27 @@ importer="texture" type="CompressedTexture2D" uid="uid://dlgwuxqqspyle" -path="res://.godot/imported/icon.svg-d1a96a42620a339515f399232afb5e8f.ctex" +path.s3tc="res://.godot/imported/icon.svg-d1a96a42620a339515f399232afb5e8f.s3tc.ctex" +path.etc2="res://.godot/imported/icon.svg-d1a96a42620a339515f399232afb5e8f.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/image/icon/icon.svg" -dest_files=["res://.godot/imported/icon.svg-d1a96a42620a339515f399232afb5e8f.ctex"] +dest_files=["res://.godot/imported/icon.svg-d1a96a42620a339515f399232afb5e8f.s3tc.ctex", "res://.godot/imported/icon.svg-d1a96a42620a339515f399232afb5e8f.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 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/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -31,7 +33,7 @@ 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 +detect_3d/compress_to=0 svg/scale=1.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/assets/image/soul/soul_16_16.png.import b/assets/image/soul/soul_16_16.png.import index 795b9ca..cac582c 100644 --- a/assets/image/soul/soul_16_16.png.import +++ b/assets/image/soul/soul_16_16.png.import @@ -3,25 +3,27 @@ importer="texture" type="CompressedTexture2D" uid="uid://cfm5va8l2ai3y" -path="res://.godot/imported/soul_16_16.png-1ffd70126a9d3bd3b6241ba39596c1a4.ctex" +path.s3tc="res://.godot/imported/soul_16_16.png-1ffd70126a9d3bd3b6241ba39596c1a4.s3tc.ctex" +path.etc2="res://.godot/imported/soul_16_16.png-1ffd70126a9d3bd3b6241ba39596c1a4.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/image/soul/soul_16_16.png" -dest_files=["res://.godot/imported/soul_16_16.png-1ffd70126a9d3bd3b6241ba39596c1a4.ctex"] +dest_files=["res://.godot/imported/soul_16_16.png-1ffd70126a9d3bd3b6241ba39596c1a4.s3tc.ctex", "res://.godot/imported/soul_16_16.png-1ffd70126a9d3bd3b6241ba39596c1a4.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 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/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -31,4 +33,4 @@ 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 +detect_3d/compress_to=0 diff --git a/global/autoload/audio/audio.gd b/global/autoload/audio/audio.gd index b1ef64d..d961b75 100644 --- a/global/autoload/audio/audio.gd +++ b/global/autoload/audio/audio.gd @@ -1,5 +1,8 @@ extends Node +const MAIN_MUSIC_TRACKS: int = 3 +const BOSS_MUSIC_TRACK: int = 3 + @export var default_sfx_pitch_variance: float = 0.5: set(value): default_sfx_pitch_variance = clampf(value, 0.0, 1.0) @@ -37,7 +40,7 @@ func _ready() -> void: func _initalize() -> void: - _track = randi() % music_tracks.get_child_count() + _track = randi() % MAIN_MUSIC_TRACKS _current_audio_player = music_tracks.get_child(_track) _current_audio_player.fade_in() @@ -48,7 +51,7 @@ func _initalize() -> void: func swap_crossfade_music_next() -> void: - _track = (_track + 1) % music_tracks.get_child_count() + _track = (_track + 1) % MAIN_MUSIC_TRACKS swap_crossfade_audio(music_tracks.get_child(_track)) if Game.PARAMS_DEBUG["debug_logs"]: prints("track", _track) @@ -95,6 +98,8 @@ func _connect_signals() -> void: SignalBus.heart_unclick.connect(_on_heart_unclick) SignalBus.prestige_condition_pass.connect(_on_prestige_condition_pass) SignalBus.soul.connect(_on_soul) + SignalBus.boss_start.connect(_on_boss_start) + SignalBus.boss_end.connect(_on_boss_end) func _on_tab_changed(tab_data: TabData) -> void: @@ -125,3 +130,11 @@ func _on_prestige_condition_pass(_infinity_count: int) -> void: func _on_soul() -> void: _current_audio_player.fade_out() + + +func _on_boss_start() -> void: + swap_crossfade_audio(music_tracks.get_child(BOSS_MUSIC_TRACK)) + + +func _on_boss_end() -> void: + _current_audio_player.fade_out() diff --git a/global/autoload/audio/audio.tscn b/global/autoload/audio/audio.tscn index eada4c9..2cab274 100644 --- a/global/autoload/audio/audio.tscn +++ b/global/autoload/audio/audio.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=3 uid="uid://bp61l7vkkscuw"] +[gd_scene load_steps=13 format=3 uid="uid://bp61l7vkkscuw"] [ext_resource type="Script" path="res://global/autoload/audio/audio.gd" id="1_7i6rq"] [ext_resource type="PackedScene" uid="uid://f1stqtkpi6rl" path="res://global/autoload/audio/audio_queue/audio_queue.tscn" id="2_bb4fe"] @@ -8,9 +8,8 @@ [ext_resource type="AudioStream" uid="uid://cjg7wv1kxy1ye" path="res://assets/audio/freesound_org/heartbeat_80bpm/loudernoises_heartbeat_80bpm.wav" id="5_s525l"] [ext_resource type="AudioStream" uid="uid://tksoficve1me" path="res://assets/audio/skyler_newsome/forest_arr_mstr_loop.mp3" id="6_egdi5"] [ext_resource type="AudioStream" uid="uid://b5ad2ujlpx4s8" path="res://assets/audio/joseph_philip_burke/forest_song_compressed.mp3" id="7_ompd1"] +[ext_resource type="AudioStream" uid="uid://cjhw543r57cxo" path="res://assets/audio/pixabay/junipersona/to_the_death.mp3" id="8_2pugy"] [ext_resource type="Script" path="res://resources/songs/song.gd" id="8_tgyec"] -[ext_resource type="AudioStream" uid="uid://b44xi3ebx4ju3" path="res://assets/audio/freemusicarchive_org/universfield/corpse_rot/corpse_rot.mp3" id="9_86iap"] -[ext_resource type="AudioStream" uid="uid://blrw2u3jb1fbm" path="res://assets/audio/freemusicarchive_org/universfield/criminal_district/criminal_district.mp3" id="10_5odgy"] [sub_resource type="Resource" id="Resource_gc3pj"] script = ExtResource("8_tgyec") @@ -19,8 +18,8 @@ combat_audio_stream = ExtResource("6_egdi5") [sub_resource type="Resource" id="Resource_e4642"] script = ExtResource("8_tgyec") -idle_audio_stream = ExtResource("10_5odgy") -combat_audio_stream = ExtResource("9_86iap") +idle_audio_stream = ExtResource("8_2pugy") +combat_audio_stream = ExtResource("8_2pugy") [node name="Audio" type="Node"] script = ExtResource("1_7i6rq") @@ -47,6 +46,10 @@ max_volume_combat = 0.4 default_audio = SubResource("Resource_e4642") max_volume_idle = 3.0 +[node name="BulletHellBoss" parent="Music" instance=ExtResource("4_gols3")] +default_audio = ExtResource("8_2pugy") +max_volume_idle = 0.5 + [node name="Ambience" type="Node" parent="."] [node name="Heartbeat" parent="Ambience" instance=ExtResource("4_gols3")] diff --git a/global/autoload/audio/sfx_map/sfx_map.gd b/global/autoload/audio/sfx_map/sfx_map.gd index 0eb4385..6a1e152 100644 --- a/global/autoload/audio/sfx_map/sfx_map.gd +++ b/global/autoload/audio/sfx_map/sfx_map.gd @@ -23,7 +23,8 @@ const SFX_ID: Dictionary = { "cat_click": PIANO_1, "cat_talking": KEYBOARD_TYPING, "flesh": BLOOD_GORE_2_1, - "magic": MAGICAL_INTERFACE_3_2_CUT + "magic": MAGICAL_INTERFACE_3_2_CUT, + "buh_hit_hurt": BUH_HIT_HURT } # we're expecting long file paths here, so don't check for line length @@ -121,3 +122,6 @@ const BLOOD_GORE_2_1 = preload( const MAGICAL_INTERFACE_3_2_CUT = preload( "res://assets/audio/indie_friendly_sounds_survival/_edited/magical_interface_3_2_cut.wav" ) + +# BuH sfx +const BUH_HIT_HURT = preload("res://addons/BulletUpHell/Bullet/Hit Hurt.wav") diff --git a/global/autoload/scene/scene.gd b/global/autoload/scene/scene.gd index b6bf714..692c1d4 100644 --- a/global/autoload/scene/scene.gd +++ b/global/autoload/scene/scene.gd @@ -1,21 +1,36 @@ extends Node -@export var main_scene: PackedScene -@export var save_file_picker_scene: PackedScene -@export var soul_scene: PackedScene +const MAIN_SCENE: PackedScene = preload("res://scenes/autostart/main/main.tscn") +const SAVE_FILE_PICKER_SCENE: PackedScene = preload( + "res://scenes/autostart/save_file_picker/save_file_picker.tscn" +) +const SOUL_SCENE: PackedScene = preload("res://scenes/autostart/soul_screen/soul_screen.tscn") +const END_SCENE: PackedScene = preload("res://scenes/autostart/end/end.tscn") + +const SCENE_MAP: Dictionary = { + "main_scene": MAIN_SCENE, + "save_file_picker_scene": SAVE_FILE_PICKER_SCENE, + "soul_scene": SOUL_SCENE, + "end_scene": END_SCENE +} func change_scene(scene_id: String) -> void: - if scene_id == "main_scene": - change_packed_scene(main_scene) - SaveFile.post_initialize() - elif scene_id == "save_file_picker_scene": - change_packed_scene(save_file_picker_scene) - elif scene_id == "soul_scene": - change_packed_scene(soul_scene) + var packed_scene: PackedScene = SCENE_MAP.get(scene_id, null) + if packed_scene: + _load_scene(packed_scene) + if scene_id == "main_scene": + SaveFile.post_initialize() else: - push_error("No scene with id: " + scene_id) + _handle_error("No scene with id: " + scene_id) -func change_packed_scene(packed_scene: PackedScene) -> void: +func _load_scene(packed_scene: PackedScene) -> void: + if packed_scene == null: + _handle_error("Invalid scene to load") + return get_tree().change_scene_to_packed.call_deferred(packed_scene) + + +func _handle_error(message: String) -> void: + push_error(message) diff --git a/global/autoload/scene/scene.tscn b/global/autoload/scene/scene.tscn index cfb6272..4473546 100644 --- a/global/autoload/scene/scene.tscn +++ b/global/autoload/scene/scene.tscn @@ -1,12 +1,6 @@ -[gd_scene load_steps=5 format=3 uid="uid://bidoct2paqcxh"] +[gd_scene load_steps=2 format=3 uid="uid://bidoct2paqcxh"] [ext_resource type="Script" path="res://global/autoload/scene/scene.gd" id="1_e2kro"] -[ext_resource type="PackedScene" uid="uid://k0aqit1ex0lc" path="res://scenes/autostart/main/main.tscn" id="2_xj068"] -[ext_resource type="PackedScene" uid="uid://b1aukxlmjun2b" path="res://scenes/autostart/save_file_picker/save_file_picker.tscn" id="3_lad7l"] -[ext_resource type="PackedScene" uid="uid://dl41mo1e3hnlo" path="res://scenes/autostart/soul_screen/soul_screen.tscn" id="4_l47ud"] [node name="Scene" type="Node"] script = ExtResource("1_e2kro") -main_scene = ExtResource("2_xj068") -save_file_picker_scene = ExtResource("3_lad7l") -soul_scene = ExtResource("4_l47ud") diff --git a/global/autoload/signal_bus/signal_bus.gd b/global/autoload/signal_bus/signal_bus.gd index 08b2fe1..be10fe4 100644 --- a/global/autoload/signal_bus/signal_bus.gd +++ b/global/autoload/signal_bus/signal_bus.gd @@ -102,6 +102,12 @@ signal deaths_door_resolved(enemy_data: EnemyData, new_enemy_data: EnemyData, op # BuH Scene signal player_damaged +signal player_death +signal boss_start +signal boss_click +signal boss_cycle +signal boss_end +signal game_end(ending: int) func _ready() -> void: diff --git a/global/const/game.gd b/global/const/game.gd index f114aa8..d61f8a3 100644 --- a/global/const/game.gd +++ b/global/const/game.gd @@ -8,11 +8,14 @@ const VERSION_MINOR: String = "week 20" const PARAMS: Dictionary = PARAMS_PROD #PARAMS_PROD #PARAMS_DEBUG -## BEFORE EXPORTING TO WEB (that uses iframe like e.g. itch.io), SET TO true +## TOGGLE BEFORE EXPORTING TO WEB const WEB_EXPORT_WORKAROUNDS: bool = false +const SKIP_BOSS: bool = false + const PARAMS_DEBUG: Dictionary = { "CLIPBOARD_WEB_WORKAROUND": WEB_EXPORT_WORKAROUNDS, + "BuH_skip_boss": SKIP_BOSS, "BuH_wall_disabled": false, "BuH_damage_timer": 0.4, "BuH_cat_boss_battle_fps": false, @@ -50,6 +53,7 @@ const PARAMS_DEBUG: Dictionary = { const PARAMS_PROD: Dictionary = { "CLIPBOARD_WEB_WORKAROUND": WEB_EXPORT_WORKAROUNDS, + "BuH_skip_boss": SKIP_BOSS, "BuH_damage_timer": 0.4, "BuH_wall_disabled": false, "BuH_cat_boss_battle_fps": false, diff --git a/global/const/locale/locale_en.gd b/global/const/locale/locale_en.gd index f99b1c8..24107f2 100644 --- a/global/const/locale/locale_en.gd +++ b/global/const/locale/locale_en.gd @@ -29,6 +29,9 @@ const EN: Dictionary = { # gdlint:disable = max-line-length const UI_LABEL: Dictionary = { + "thank_you": "Thank you for playing.", + "game_over_text": "Terminated", + "soul_button": "Fight Back", "shortcuts_label": "Ctrl+N changes soundtrack", "death": "Death", "heart": "Heart", diff --git a/resources/shader/starry_sky/license_MIT.txt b/resources/shader/starry_sky/license_MIT.txt new file mode 100644 index 0000000..34073e4 --- /dev/null +++ b/resources/shader/starry_sky/license_MIT.txt @@ -0,0 +1,13 @@ +Folder "res://resources/shader/starry_sky/" contents attribution file. +--- +Title: Starry Sky +Author: https://godotshaders.com/author/breadpack/ +Source: https://godotshaders.com/shader/starry-sky/ +License: https://opensource.org/license/MIT +--- +The original contents were modified by: https://tinytakinteller.itch.io/ +--- +TLDR: +asset "Starry Sky" (starry_sky.gdshader) +by breadpack (https://godotshaders.com/author/breadpack/) licensed under MIT +--- diff --git a/resources/shader/starry_sky/starry_sky.gdshader b/resources/shader/starry_sky/starry_sky.gdshader new file mode 100644 index 0000000..dce763d --- /dev/null +++ b/resources/shader/starry_sky/starry_sky.gdshader @@ -0,0 +1,113 @@ +shader_type sky; + +// Comment this if you don't want to use star twinke. However, if you do want to keep it, +// I suggest you to set the sky process mode to High-Quality Incremental or Real-Time, +// as star twinkling may greatly impact performance. +#define USE_TWINKLE + +group_uniforms sky; +uniform vec3 sky_color: source_color = vec3(0.03, 0.05, 0.11); + +group_uniforms stars; +uniform vec3 star_base_color: source_color = vec3(0.8, 1.0, 0.3); +uniform float star_hue_offset: hint_range(0., 1.) = 0.6; +uniform float star_intensity: hint_range(0., 0.2) = 0.08; +#ifdef USE_TWINKLE +uniform float star_twinkle_speed: hint_range(0.0, 2.0) = 0.8; +uniform float star_twinkle_intensity: hint_range(0.0, 1.0) = 0.2; +#endif + +group_uniforms layers; +uniform float layer_scale: hint_range(0., 60.) = 20.; +uniform float layer_scale_step: hint_range(0., 40.) = 10.; +uniform int layers_count: hint_range(0, 12) = 3; + +// Hue credit: +// The MIT License +// Copyright © 2024 DigvijaysinhGohil +// https://github.com/DigvijaysinhGohil/Godot-Shader-Lib + +vec3 hue(vec3 input, float offset, int range_index) { + // RGB to HSV + vec4 k = vec4(0., -1./3., 2./3., -1.); + vec4 p = mix(vec4(input.bg, k.wz), vec4(input.gb, k.xy), step(input.b, input.g)); + vec4 q = mix(vec4(p.xyw, input.r), vec4(input.r, p.yzx), step(p.x, input.r)); + float d = q.x - min(q.w, q.y); + float e = 1.e-10; + vec3 hsv = vec3(abs(q.z + (q.w - q.y) / (6. * d + e)), d / (q.x + e), q.x); + + offset = (range_index == 0) ? offset / 360. : offset; + float hue = hsv.x + offset; + if (hue < 0.) { + hsv.x = hue + 1.; + } else if (hue > 1.) { + hsv.x = hue - 1.; + } else { + hsv.x = hue; + } + + // HSV to RGB + vec4 k2 = vec4(1., 2./3., 1./3., 3.); + vec3 p2 = abs(fract(hsv.xxx + k2.xyz) * 6. - k2.www); + vec3 rgb = hsv.z * mix(k2.xxx, clamp(p2 - k2.xxx, 0., 1.), hsv.y); + return rgb; +} + +// Voronoi method credit: +// The MIT License +// Copyright © 2013 Inigo Quilez +// https://www.shadertoy.com/view/ldl3Dl + +vec3 hash(vec3 x) { + x = vec3(dot(x, vec3(127.1,311.7, 74.7)), + dot(x, vec3(269.5,183.3,246.1)), + dot(x, vec3(113.5,271.9,124.6))); + return fract(sin(x) * 43758.5453123); +} + +vec2 voronoi(in vec3 x){ + vec3 p = floor(x); + vec3 f = fract(x); + + float res = 100.; + float id = 0.; + + for (float k = -1.; k <= 1.; k += 1.) { + for (float j = -1.; j <= 1.; j += 1.) { + for (float i = -1.; i <= 1.; i += 1.) { + vec3 b = vec3(i, j, k); + vec3 r = vec3(b) - f + hash(p + b); + float d = dot(r, r); + if (d < res) { + res = d; + id = dot(p + b, vec3(0., 57., 113.)); + } + } + } + } + + return vec2(sqrt(res), id); +} + +void sky() { + COLOR = sky_color; + + for (int i = 0; i < layers_count; i++) { + vec3 pos = EYEDIR * (layer_scale + float(i) * layer_scale_step); + vec2 layer = voronoi(pos); + + vec3 rand = hash(vec3(layer.y)); + + #ifdef USE_TWINKLE + float twinkle = sin(TIME * PI * star_twinkle_speed + rand.x * TAU); + twinkle *= star_twinkle_intensity; + float star = smoothstep(star_intensity + star_intensity * twinkle, 0., layer.x); + #else + float star = smoothstep(star_intensity, 0., layer.x); + #endif + + vec3 star_color = star * hue((COLOR + star_base_color), rand.y * star_hue_offset, 1); + + COLOR += star_color; + } +} \ No newline at end of file diff --git a/scenes/autostart/end/end.gd b/scenes/autostart/end/end.gd new file mode 100644 index 0000000..401d578 --- /dev/null +++ b/scenes/autostart/end/end.gd @@ -0,0 +1,24 @@ +extends Node3D + +@onready var player_character_body_3d: Player3D = $PlayerCharacterBody3D +@onready var label_3d: Label3D = %Label3D + +############### +## overrides ## +############### + + +func _ready() -> void: + _initialize() + + +############# +## helpers ## +############# + + +func _initialize() -> void: + player_character_body_3d.get_mesh().visible = false + label_3d.text = Locale.get_ui_label("thank_you") + + Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) diff --git a/scenes/autostart/end/end.tscn b/scenes/autostart/end/end.tscn new file mode 100644 index 0000000..ca0ee52 --- /dev/null +++ b/scenes/autostart/end/end.tscn @@ -0,0 +1,85 @@ +[gd_scene load_steps=12 format=3 uid="uid://cq687fuy5ye8w"] + +[ext_resource type="Script" path="res://scenes/autostart/end/end.gd" id="1_f8l81"] +[ext_resource type="PackedScene" uid="uid://ixafbm8gbppq" path="res://scenes/autostart/end/player/player_character_body_3d.tscn" id="2_0xs4o"] +[ext_resource type="Shader" path="res://resources/shader/starry_sky/starry_sky.gdshader" id="2_fybr7"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_r0uic"] +shader = ExtResource("2_fybr7") +shader_parameter/sky_color = Color(0.03, 0.05, 0.11, 1) +shader_parameter/star_base_color = Color(0.8, 1, 0.3, 1) +shader_parameter/star_hue_offset = 0.6 +shader_parameter/star_intensity = 0.08 +shader_parameter/star_twinkle_speed = 0.8 +shader_parameter/star_twinkle_intensity = 0.2 +shader_parameter/layer_scale = 20.0 +shader_parameter/layer_scale_step = 10.0 +shader_parameter/layers_count = 3 + +[sub_resource type="Sky" id="Sky_v7o0e"] +sky_material = SubResource("ShaderMaterial_r0uic") + +[sub_resource type="Environment" id="Environment_ni2qq"] +background_mode = 2 +sky = SubResource("Sky_v7o0e") +ambient_light_source = 1 +reflected_light_source = 2 +tonemap_mode = 2 + +[sub_resource type="PlaneMesh" id="PlaneMesh_wvoox"] +size = Vector2(100, 100) + +[sub_resource type="BoxMesh" id="BoxMesh_a0fvl"] + +[sub_resource type="BoxMesh" id="BoxMesh_wju2q"] +size = Vector3(1, 2, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_au4ll"] +size = Vector3(1, 1, 2) + +[sub_resource type="BoxMesh" id="BoxMesh_whpyo"] +size = Vector3(2, 2, 2) + +[node name="End" type="Node3D"] +script = ExtResource("1_f8l81") + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_ni2qq") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0) +shadow_enabled = true + +[node name="PlayerCharacterBody3D" parent="." instance=ExtResource("2_0xs4o")] + +[node name="Label3D" type="Label3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.3, -3.7) +text = "Thank you for playing" + +[node name="TestDebugObjects3D" type="Node3D" parent="."] +visible = false + +[node name="FloorMeshInstance3D" type="MeshInstance3D" parent="TestDebugObjects3D"] +mesh = SubResource("PlaneMesh_wvoox") +skeleton = NodePath("../..") + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestDebugObjects3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -8) +mesh = SubResource("BoxMesh_a0fvl") +skeleton = NodePath("../..") + +[node name="MeshInstance3D3" type="MeshInstance3D" parent="TestDebugObjects3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 2, 0) +mesh = SubResource("BoxMesh_wju2q") +skeleton = NodePath("../MeshInstance3D2") + +[node name="MeshInstance3D4" type="MeshInstance3D" parent="TestDebugObjects3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8, 1, 0) +mesh = SubResource("BoxMesh_au4ll") +skeleton = NodePath("../..") + +[node name="MeshInstance3D5" type="MeshInstance3D" parent="TestDebugObjects3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 8) +mesh = SubResource("BoxMesh_whpyo") +skeleton = NodePath("../..") diff --git a/scenes/autostart/end/endC51.tmp b/scenes/autostart/end/endC51.tmp new file mode 100644 index 0000000..c314981 --- /dev/null +++ b/scenes/autostart/end/endC51.tmp @@ -0,0 +1,47 @@ +[gd_scene load_steps=8 format=3 uid="uid://cq687fuy5ye8w"] + +[ext_resource type="Script" path="res://scenes/autostart/end/end.gd" id="1_f8l81"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_8bm66"] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) + +[sub_resource type="Sky" id="Sky_v7o0e"] +sky_material = SubResource("ProceduralSkyMaterial_8bm66") + +[sub_resource type="Environment" id="Environment_ni2qq"] +background_mode = 2 +sky = SubResource("Sky_v7o0e") +tonemap_mode = 2 + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_u3qvp"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_a840v"] + +[sub_resource type="PlaneMesh" id="PlaneMesh_wvoox"] +size = Vector2(100, 100) + +[node name="End" type="Node3D"] +script = ExtResource("1_f8l81") + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_ni2qq") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0) +shadow_enabled = true + +[node name="PlayerCharacterBody3D" type="CharacterBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0) + +[node name="PlayerCollisionShape3D" type="CollisionShape3D" parent="PlayerCharacterBody3D"] +shape = SubResource("CapsuleShape3D_u3qvp") + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="PlayerCharacterBody3D"] +mesh = SubResource("CapsuleMesh_a840v") + +[node name="PlayerCamera3D" type="Camera3D" parent="PlayerCharacterBody3D"] +unique_name_in_owner = true + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("PlaneMesh_wvoox") diff --git a/scenes/autostart/end/player/player_character_body_3d.gd b/scenes/autostart/end/player/player_character_body_3d.gd new file mode 100644 index 0000000..1753075 --- /dev/null +++ b/scenes/autostart/end/player/player_character_body_3d.gd @@ -0,0 +1,67 @@ +class_name Player3D +extends CharacterBody3D + +@export var max_rotation_angle_x: float = 30.0 #90.0 +@export var max_rotation_angle_y: float = 30.0 #90.0 + +@onready var player_mesh_instance_3d: MeshInstance3D = %PlayerMeshInstance3D +@onready var player_camera_3d: Camera3D = %PlayerCamera3D + +############### +## overrides ## +############### + + +func _process(_delta: float) -> void: + _update_camera_rotation() + + +############# +## methods ## +############# + + +func get_mesh() -> MeshInstance3D: + return player_mesh_instance_3d + + +############# +## helpers ## +############# + + +## Function to update camera rotation based on mouse position +func _update_camera_rotation() -> void: + var screen_size: Vector2 = get_viewport().get_visible_rect().size + var screen_center: Vector2 = screen_size / 2 + var mouse_position: Vector2 = get_viewport().get_mouse_position() + + # Restrict mouse location to game screen (viewport) + var target_position: Vector2 = mouse_position + var viewport_size: Vector2 = get_viewport().get_visible_rect().size + target_position.x = min(max(target_position.x, 0), viewport_size.x) + target_position.y = min(max(target_position.y, 0), viewport_size.y) + + # Normalize the mouse movement relative to the screen center + var normalized_x: float = (target_position.x - screen_center.x) / screen_center.x + var normalized_y: float = (target_position.y - screen_center.y) / screen_center.y + + # Calculate target rotation + var target_y_rotation: float = -normalized_x * max_rotation_angle_y + var target_x_rotation: float = -normalized_y * max_rotation_angle_x + + # Apply rotation directly to the camera, using lerp for smoothing + var new_rotation_x: float = lerp(player_camera_3d.rotation_degrees.x, target_x_rotation, 0.1) + var new_rotation_y: float = lerp( + player_camera_3d.get_parent().rotation_degrees.y, target_y_rotation, 0.1 + ) + + # Update the camera's pitch (X-axis) + player_camera_3d.rotation_degrees.x = new_rotation_x + + # Update the player's yaw (Y-axis) by rotating the parent node (usually the player or body node) + player_camera_3d.get_parent().rotation_degrees.y = new_rotation_y + + +func _ready() -> void: + pass diff --git a/scenes/autostart/end/player/player_character_body_3d.tscn b/scenes/autostart/end/player/player_character_body_3d.tscn new file mode 100644 index 0000000..b6a63ea --- /dev/null +++ b/scenes/autostart/end/player/player_character_body_3d.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=4 format=3 uid="uid://ixafbm8gbppq"] + +[ext_resource type="Script" path="res://scenes/autostart/end/player/player_character_body_3d.gd" id="1_4dmh8"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_u3qvp"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_a840v"] + +[node name="PlayerCharacterBody3D" type="CharacterBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0) +script = ExtResource("1_4dmh8") + +[node name="PlayerCollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_u3qvp") + +[node name="PlayerMeshInstance3D" type="MeshInstance3D" parent="."] +unique_name_in_owner = true +mesh = SubResource("CapsuleMesh_a840v") + +[node name="PlayerCamera3D" type="Camera3D" parent="."] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.3, -0.7) diff --git a/scenes/autostart/main/main.tscn b/scenes/autostart/main/main.tscn index b0c0ba6..64fd0c7 100644 --- a/scenes/autostart/main/main.tscn +++ b/scenes/autostart/main/main.tscn @@ -34,7 +34,7 @@ [ext_resource type="PackedScene" uid="uid://d1y5xyx63u3w0" path="res://scenes/ui/developer_console/developer_console.tscn" id="20_yijsf"] [ext_resource type="PackedScene" uid="uid://dn6hcp4hfxyic" path="res://scenes/ui/version_container/version_container.tscn" id="20_ynkq3"] [ext_resource type="PackedScene" uid="uid://ch7uxqklej1h6" path="res://scenes/ui/screen/darkness_screen/darkness_screen.tscn" id="21_324w1"] -[ext_resource type="PackedScene" uid="uid://dfrws6lo2o7d0" path="res://scenes/autostart/soul_screen/soul/soul_sprite.tscn" id="25_jo8o4"] +[ext_resource type="PackedScene" uid="uid://dfrws6lo2o7d0" path="res://scenes/autostart/soul_screen/soul_sprite/soul_sprite.tscn" id="25_jo8o4"] [ext_resource type="PackedScene" uid="uid://cnh5vhg0xefn6" path="res://scenes/ui/screen/soul_screen/soul_screen.tscn" id="26_pehc6"] [ext_resource type="PackedScene" uid="uid://br1a46uikyubt" path="res://scenes/ui/screen/starway_screen/starway_screen.tscn" id="27_d2ak1"] [ext_resource type="PackedScene" uid="uid://b5cknmluch23j" path="res://scenes/ui/screen/offline_screen/offline_screen.tscn" id="29_mta8x"] diff --git a/scenes/autostart/soul_screen/black_fade/black_fade.gd b/scenes/autostart/soul_screen/black_fade/black_fade.gd new file mode 100644 index 0000000..fec806c --- /dev/null +++ b/scenes/autostart/soul_screen/black_fade/black_fade.gd @@ -0,0 +1,63 @@ +extends MarginContainer + +@onready var color_rect: ColorRect = %ColorRect +@onready var fade_in_tween: SimpleTween = %FadeInTween +@onready var label: Label = %Label + +############### +## overrides ## +############### + + +func _ready() -> void: + _connect_signals() + _initialize() + + +############# +## helpers ## +############# + + +func _initialize() -> void: + self.visible = false + label.visible = false + label.text = Locale.get_ui_label("game_over_text") + + +############### +## animation ## +############### + + +func _fade_in() -> void: + fade_in_tween.play_animation() + + +############# +## signals ## +############# + + +func _connect_signals() -> void: + SignalBus.player_death.connect(_on_player_death) + fade_in_tween.animation_end.connect(_on_fade_in_end) + + +func _on_player_death() -> void: + self.modulate.a = 0.0 + self.visible = true + _fade_in() + + +func _on_fade_in_end() -> void: + label.visible = true + + +############# +## exports ## +############# + + +func _fade_in_tween(percent: float) -> void: + self.modulate.a = percent diff --git a/scenes/autostart/soul_screen/black_fade/black_fade.tscn b/scenes/autostart/soul_screen/black_fade/black_fade.tscn new file mode 100644 index 0000000..635213e --- /dev/null +++ b/scenes/autostart/soul_screen/black_fade/black_fade.tscn @@ -0,0 +1,32 @@ +[gd_scene load_steps=3 format=3 uid="uid://dia4fb2p2xioq"] + +[ext_resource type="Script" path="res://scenes/autostart/soul_screen/black_fade/black_fade.gd" id="1_v8eqh"] +[ext_resource type="PackedScene" uid="uid://b3awft3ugc6q3" path="res://scenes/component/tween/simple_tween/simple_tween.tscn" id="2_jsig5"] + +[node name="BlackFade" type="MarginContainer"] +process_mode = 2 +z_index = 4096 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_v8eqh") + +[node name="ColorRect" type="ColorRect" parent="."] +unique_name_in_owner = true +layout_mode = 2 +color = Color(0, 0, 0, 1) + +[node name="FadeInTween" parent="." node_paths=PackedStringArray("target") instance=ExtResource("2_jsig5")] +unique_name_in_owner = true +target = NodePath("..") +duration = 3.0 +call_method = "_fade_in_tween" + +[node name="Label" type="Label" parent="."] +unique_name_in_owner = true +modulate = Color(0.878431, 0, 0.392157, 1) +layout_mode = 2 +size_flags_horizontal = 4 +text = "Existence Terminated" diff --git a/scenes/autostart/soul_screen/soul_button/soul_button.gd b/scenes/autostart/soul_screen/soul_button/soul_button.gd new file mode 100644 index 0000000..982eee1 --- /dev/null +++ b/scenes/autostart/soul_screen/soul_button/soul_button.gd @@ -0,0 +1,88 @@ +extends MarginContainer + +var targets: Array = [] +var clicks: int = 0 + +@onready var button: Button = %Button + +############### +## overrides ## +############### + + +func _ready() -> void: + _initialize() + _connect_signals() + + +############# +## helpers ## +############# + + +func _initialize() -> void: + button.text = Locale.get_ui_label("soul_button") + button.disabled = false + button.release_focus() + + var viewport_size: Vector2 = get_viewport().get_visible_rect().size + var target_position: Vector2 = viewport_size / 2 + target_position.x -= self.get_rect().size.x / 2 + target_position.y += viewport_size.y / 2 - 72 + targets.append(target_position) + + target_position = viewport_size / 6 + targets.append(target_position) + + target_position = viewport_size / 6 + target_position.x = 4.5 * viewport_size.x / 6 + targets.append(target_position) + + self.position = targets[0] + + +############### +## animation ## +############### + + +func _slide_to_target(target_position: Vector2) -> void: + var tween: Tween = create_tween() + tween.finished.connect(_slide_to_target_animation_end) + ( + tween + . tween_property(self, "position", target_position, 1.0) + . set_ease(Tween.EASE_IN_OUT) + . set_trans(Tween.TRANS_CUBIC) + ) + + +############# +## signals ## +############# + + +func _connect_signals() -> void: + button.button_down.connect(_on_button_down) + SignalBus.boss_end.connect(_on_boss_end) + + +func _on_button_down() -> void: + button.disabled = true + clicks += 1 + _slide_to_target(targets[clicks % targets.size()]) + + SignalBus.boss_click.emit() + Audio.play_sfx_id("buh_hit_hurt") + + if clicks % targets.size() == 0: + SignalBus.boss_cycle.emit() + + +func _on_boss_end() -> void: + self.visible = false + + +func _slide_to_target_animation_end() -> void: + button.disabled = false + button.release_focus() diff --git a/scenes/autostart/soul_screen/soul_button/soul_button.tscn b/scenes/autostart/soul_screen/soul_button/soul_button.tscn new file mode 100644 index 0000000..3426b33 --- /dev/null +++ b/scenes/autostart/soul_screen/soul_button/soul_button.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=2 format=3 uid="uid://d2qho5dskl5rr"] + +[ext_resource type="Script" path="res://scenes/autostart/soul_screen/soul_button/soul_button.gd" id="1_6vxxt"] + +[node name="SoulButton" type="MarginContainer"] +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +script = ExtResource("1_6vxxt") + +[node name="Button" type="Button" parent="."] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"ProgressButton" +text = "Fight Back" diff --git a/scenes/autostart/soul_screen/soul_screen.gd b/scenes/autostart/soul_screen/soul_screen.gd index 24884f0..7dd8ae9 100644 --- a/scenes/autostart/soul_screen/soul_screen.gd +++ b/scenes/autostart/soul_screen/soul_screen.gd @@ -2,13 +2,27 @@ extends Node @export var shake_shader_component_scene: PackedScene +var hp: int = 9 +var clicks: int = 0 +var boss_cycle: int = 0 +var boss_pattern: int = 0 +var max_boss_pattern: int = 3 + +@onready var canvas_layer: CanvasLayer = %CanvasLayer + @onready var node_2d: Node2D = %Node2D -@onready var pattern_master: PatternMaster = $Node2D/PatternMaster +@onready var pattern_master: PatternMaster = %PatternMaster @onready var soul_sprite: SoulSprite = %SoulSprite @onready var cat_sprite_2d: Sprite2D = %CatSprite2D @onready var control: Control = %Control -@onready var label: Label = $Control/Label +@onready var label: Label = %Label + +@onready var boss_click_simple_tween: SimpleTween = $BossClickSimpleTween + +@onready var end_margin_container: MarginContainer = %EndMarginContainer +@onready var execute_button: Button = %ExecuteButton +@onready var absolve_button: Button = %AbsolveButton ############### ## overrides ## @@ -20,15 +34,45 @@ func _physics_process(_delta: float) -> void: func _ready() -> void: + _connect_signals() _initialize() _intro_animation() + SignalBus.boss_start.emit() + ############# ## helpers ## ############# +func _initialize() -> void: + cat_sprite_2d.position = SaveFile.cat_sprite_2d_position + Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) + soul_sprite.position = node_2d.get_global_mouse_position() + + end_margin_container.visible = false + + +func _update_label() -> void: + label.text = "HP : {0} | DMG: {1}".format({"0": hp, "1": clicks}) + + +func _update_hp(delta: int) -> void: + hp = hp + delta + _update_label() + + +func _update_clicks(delta: int) -> void: + clicks = clicks + delta + _update_label() + + +############### +## animation ## +############### + + func _intro_animation() -> void: var cat_sprite_2d_size: Vector2 = cat_sprite_2d.get_rect().size var viewport_size: Vector2 = get_viewport().get_visible_rect().size @@ -45,6 +89,20 @@ func _intro_animation() -> void: ) +func _end_animation() -> void: + var viewport_size: Vector2 = get_viewport().get_visible_rect().size + var target_position: Vector2 = viewport_size / 2 + + var tween: Tween = create_tween() + tween.finished.connect(_end_animation_end) + ( + tween + . tween_property(cat_sprite_2d, "position", target_position, 4.0) + . set_ease(Tween.EASE_IN_OUT) + . set_trans(Tween.TRANS_CUBIC) + ) + + func _add_shake_effect_to_cat() -> void: var shake_shader_component: ShakeShaderComponent = ( shake_shader_component_scene.instantiate() as ShakeShaderComponent @@ -52,10 +110,11 @@ func _add_shake_effect_to_cat() -> void: cat_sprite_2d.add_child(shake_shader_component) -func _initialize() -> void: - cat_sprite_2d.position = SaveFile.cat_sprite_2d_position - Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) - soul_sprite.position = node_2d.get_global_mouse_position() +func _end_game(_ending: int) -> void: + canvas_layer.visible = false + Audio.play_sfx_id("cat_click", 0.0) + await get_tree().create_timer(3.0).timeout + Scene.change_scene("end_scene") ############# @@ -63,7 +122,75 @@ func _initialize() -> void: ############# +func _connect_signals() -> void: + SignalBus.player_damaged.connect(_on_player_damaged) + SignalBus.boss_click.connect(_on_boss_click) + SignalBus.boss_cycle.connect(_on_boss_cycle) + SignalBus.boss_end.connect(_on_boss_end) + execute_button.button_down.connect(_on_end_execute) + absolve_button.button_down.connect(_on_end_absolve) + + func _intro_animation_end() -> void: _add_shake_effect_to_cat() - pattern_master.start_pattern(0) - pattern_master.start_pattern(1) + pattern_master.start_pattern(boss_pattern) + + +func _end_animation_end() -> void: + end_margin_container.visible = true + + +func _on_player_damaged() -> void: + _update_hp(-1) + if hp <= 0: + SignalBus.player_death.emit() + get_tree().paused = true + + +func _on_boss_click() -> void: + _update_clicks(1) + boss_click_simple_tween.play_animation() + + +func _on_boss_cycle() -> void: + if Game.PARAMS["BuH_skip_boss"]: + pattern_master.stop_pattern(boss_pattern) + SignalBus.boss_end.emit() + return + + boss_cycle += 1 + if boss_cycle % 3 == 0: + if boss_pattern < max_boss_pattern: + pattern_master.stop_pattern(boss_pattern) + boss_pattern = (boss_pattern + 1) + pattern_master.start_pattern(boss_pattern) + elif boss_pattern == max_boss_pattern: + pattern_master.stop_pattern(boss_pattern) + SignalBus.boss_end.emit() + + +func _on_boss_end() -> void: + label.visible = false + boss_click_simple_tween.duration = 1.0 + boss_click_simple_tween.loop = true + boss_click_simple_tween.play_animation() + + _end_animation() + + +func _on_end_execute() -> void: + _end_game(0) + + +func _on_end_absolve() -> void: + _end_game(1) + + +############ +## export ## +############ + + +func _boss_click_simple_tween(percent: float) -> void: + cat_sprite_2d.modulate.g = percent + cat_sprite_2d.modulate.b = percent diff --git a/scenes/autostart/soul_screen/soul_screen.tscn b/scenes/autostart/soul_screen/soul_screen.tscn index 929065f..a7fa641 100644 --- a/scenes/autostart/soul_screen/soul_screen.tscn +++ b/scenes/autostart/soul_screen/soul_screen.tscn @@ -1,34 +1,41 @@ -[gd_scene load_steps=8 format=3 uid="uid://dl41mo1e3hnlo"] +[gd_scene load_steps=11 format=3 uid="uid://dl41mo1e3hnlo"] [ext_resource type="Script" path="res://scenes/autostart/soul_screen/soul_screen.gd" id="1_fyd6i"] [ext_resource type="Theme" uid="uid://d276arnrjws3i" path="res://resources/theme/dark/dark.tres" id="2_ey0j8"] -[ext_resource type="PackedScene" uid="uid://dfrws6lo2o7d0" path="res://scenes/autostart/soul_screen/soul/soul_sprite.tscn" id="2_rspx0"] +[ext_resource type="PackedScene" uid="uid://dfrws6lo2o7d0" path="res://scenes/autostart/soul_screen/soul_sprite/soul_sprite.tscn" id="2_rspx0"] [ext_resource type="PackedScene" uid="uid://bpq246h5ihhck" path="res://scenes/component/shake_shader_component/shake_shader_component.tscn" id="2_whm7q"] [ext_resource type="PackedScene" uid="uid://dp27xbynyqp65" path="res://scenes/bullet_up_hell/pattern_master/pattern_master.tscn" id="5_742rc"] [ext_resource type="Texture2D" uid="uid://b4wqq3rdroryo" path="res://assets/image/npc/cat/cat_90_100_shadow.png" id="5_ary8y"] [ext_resource type="PackedScene" uid="uid://dmyeg6ldx2orv" path="res://scenes/bullet_up_hell/vignette/vignette.tscn" id="7_1mte2"] +[ext_resource type="PackedScene" uid="uid://d2qho5dskl5rr" path="res://scenes/autostart/soul_screen/soul_button/soul_button.tscn" id="7_mmi8j"] +[ext_resource type="PackedScene" uid="uid://dia4fb2p2xioq" path="res://scenes/autostart/soul_screen/black_fade/black_fade.tscn" id="7_pbbxw"] +[ext_resource type="PackedScene" uid="uid://b3awft3ugc6q3" path="res://scenes/component/tween/simple_tween/simple_tween.tscn" id="10_pmey6"] -[node name="Soul" type="Node"] +[node name="SoulScreen" type="Node"] script = ExtResource("1_fyd6i") shake_shader_component_scene = ExtResource("2_whm7q") -[node name="Node2D" type="Node2D" parent="."] +[node name="CanvasLayer" type="CanvasLayer" parent="."] unique_name_in_owner = true -[node name="PatternMaster" parent="Node2D" instance=ExtResource("5_742rc")] +[node name="Node2D" type="Node2D" parent="CanvasLayer"] +unique_name_in_owner = true + +[node name="PatternMaster" parent="CanvasLayer/Node2D" instance=ExtResource("5_742rc")] +unique_name_in_owner = true rotation = 4.46638e-06 -[node name="SoulSprite" parent="Node2D" instance=ExtResource("2_rspx0")] +[node name="SoulSprite" parent="CanvasLayer/Node2D" instance=ExtResource("2_rspx0")] unique_name_in_owner = true +z_index = 4095 -[node name="CatSprite2D" type="Sprite2D" parent="Node2D"] +[node name="CatSprite2D" type="Sprite2D" parent="CanvasLayer/Node2D"] unique_name_in_owner = true -position = Vector2(470, 79) +position = Vector2(482, 252) texture = ExtResource("5_ary8y") -[node name="Control" type="Control" parent="."] +[node name="Control" type="Control" parent="CanvasLayer"] unique_name_in_owner = true -modulate = Color(0.392157, 0.392157, 0.878431, 1) layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -37,19 +44,82 @@ grow_horizontal = 2 grow_vertical = 2 theme = ExtResource("2_ey0j8") -[node name="Label" type="Label" parent="Control"] +[node name="InfoMarginContainer" type="MarginContainer" parent="CanvasLayer/Control"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -21.5 +offset_top = -40.0 +offset_right = 21.5 +grow_horizontal = 2 +grow_vertical = 0 + +[node name="Label" type="Label" parent="CanvasLayer/Control/InfoMarginContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "HP : 9" +horizontal_alignment = 1 + +[node name="EndMarginContainer" type="MarginContainer" parent="CanvasLayer/Control"] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = -476.0 -offset_top = 245.0 -offset_right = -217.0 -offset_bottom = 268.0 +offset_left = -134.0 +offset_top = -32.0 +offset_right = 134.0 +offset_bottom = 32.0 grow_horizontal = 2 grow_vertical = 2 -text = "[ Work In Progress - Coming Soon ]" + +[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/Control/EndMarginContainer"] +layout_mode = 2 + +[node name="MarginContainer1" type="MarginContainer" parent="CanvasLayer/Control/EndMarginContainer/HBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_right = 128 + +[node name="ExecuteButton" type="Button" parent="CanvasLayer/Control/EndMarginContainer/HBoxContainer/MarginContainer1"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 64) +layout_mode = 2 +theme_type_variation = &"ProgressButton" +text = "Execute" + +[node name="MarginContainer2" type="MarginContainer" parent="CanvasLayer/Control/EndMarginContainer/HBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 128 +theme_override_constants/margin_right = 8 + +[node name="AbsolveButton" type="Button" parent="CanvasLayer/Control/EndMarginContainer/HBoxContainer/MarginContainer2"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 64) +layout_mode = 2 +theme_type_variation = &"ProgressButton" +text = "Absolve" + +[node name="SoulButton" parent="CanvasLayer/Control" instance=ExtResource("7_mmi8j")] +z_index = -4096 +layout_mode = 1 +offset_left = -40.0 +offset_top = 204.0 +offset_right = 38.0 +offset_bottom = 229.0 + +[node name="BlackFade" parent="CanvasLayer/Control" instance=ExtResource("7_pbbxw")] +visible = false +layout_mode = 1 [node name="Vignette" parent="." instance=ExtResource("7_1mte2")] + +[node name="BossClickSimpleTween" parent="." node_paths=PackedStringArray("target") instance=ExtResource("10_pmey6")] +target = NodePath("..") +duration = 0.5 +call_method = "_boss_click_simple_tween" diff --git a/scenes/autostart/soul_screen/soul/soul_sprite.gd b/scenes/autostart/soul_screen/soul_sprite/soul_sprite.gd similarity index 93% rename from scenes/autostart/soul_screen/soul/soul_sprite.gd rename to scenes/autostart/soul_screen/soul_sprite/soul_sprite.gd index d496ebe..967ff4f 100644 --- a/scenes/autostart/soul_screen/soul/soul_sprite.gd +++ b/scenes/autostart/soul_screen/soul_sprite/soul_sprite.gd @@ -4,6 +4,7 @@ extends CharacterBody2D const DELAY: float = 0.1 var min_speed: float = 100 +var immortal: bool = false @onready var sprite_2d: Sprite2D = %Sprite2D @onready var hurtbox_area_2d: Area2D = %HurtboxArea2D @@ -50,10 +51,14 @@ func _connect_signals() -> void: func _on_hurtbox_area_entered(_area: Area2D) -> void: + if immortal: + return + if damage_timer.is_stopped(): damage_timer.start() damage_tween.play_animation() SignalBus.player_damaged.emit() + Audio.play_sfx_id("enemy_click_" + str(randi() % 4 + 1)) ############# diff --git a/scenes/autostart/soul_screen/soul/soul_sprite.tscn b/scenes/autostart/soul_screen/soul_sprite/soul_sprite.tscn similarity index 96% rename from scenes/autostart/soul_screen/soul/soul_sprite.tscn rename to scenes/autostart/soul_screen/soul_sprite/soul_sprite.tscn index 6b0160b..a611e69 100644 --- a/scenes/autostart/soul_screen/soul/soul_sprite.tscn +++ b/scenes/autostart/soul_screen/soul_sprite/soul_sprite.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=5 format=3 uid="uid://dfrws6lo2o7d0"] [ext_resource type="Texture2D" uid="uid://cfm5va8l2ai3y" path="res://assets/image/soul/soul_16_16.png" id="1_lonsv"] -[ext_resource type="Script" path="res://scenes/autostart/soul_screen/soul/soul_sprite.gd" id="2_wa4lx"] +[ext_resource type="Script" path="res://scenes/autostart/soul_screen/soul_sprite/soul_sprite.gd" id="2_wa4lx"] [ext_resource type="PackedScene" uid="uid://b3awft3ugc6q3" path="res://scenes/component/tween/simple_tween/simple_tween.tscn" id="3_g474e"] [sub_resource type="CircleShape2D" id="CircleShape2D_o7hs7"] diff --git a/scenes/bullet_up_hell/pattern_master/pattern_master.tscn b/scenes/bullet_up_hell/pattern_master/pattern_master.tscn index 905be68..64a5833 100644 --- a/scenes/bullet_up_hell/pattern_master/pattern_master.tscn +++ b/scenes/bullet_up_hell/pattern_master/pattern_master.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=26 format=3 uid="uid://dp27xbynyqp65"] +[gd_scene load_steps=34 format=3 uid="uid://dp27xbynyqp65"] [ext_resource type="Script" path="res://scenes/bullet_up_hell/pattern_master/pattern_master.gd" id="1_lkn8h"] [ext_resource type="Script" path="res://addons/BulletUpHell/Nodes/BuHSpawnPoint.gd" id="2_rai8q"] @@ -9,9 +9,335 @@ [ext_resource type="Script" path="res://addons/BulletUpHell/Bullet/BulletProps.gd" id="7_va6hm"] [ext_resource type="Script" path="res://addons/BulletUpHell/SpawnPatterns/PatternOne.gd" id="8_k40hp"] +[sub_resource type="Curve2D" id="Curve2D_n8v2j"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_3s7m1"] +resource_name = "PatternOne" +script = ExtResource("8_k40hp") +bullet = "custom0" +nbr = 1 +iterations = -1 +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false +forced_angle = 0.0 +forced_target = NodePath("") +forced_lookat_mouse = true +forced_pattern_lookat = true +cooldown_stasis = false +cooldown_spawn = 0.5 +cooldown_shoot = 0.0 +cooldown_next_spawn = 0.0 +cooldown_next_shoot = 0.0 +wait_tween_momentum = 0 +wait_tween_length = 0.0 +wait_tween_time = 0.0 + +[sub_resource type="Curve2D" id="Curve2D_7xdn8"] + +[sub_resource type="Curve" id="Curve_1vs6s"] + +[sub_resource type="Curve" id="Curve_xanmy"] + +[sub_resource type="Gradient" id="Gradient_5qvoy"] +interpolation_mode = 1 +offsets = PackedFloat32Array(0) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="PackedDataContainer" id="PackedDataContainer_e02lq"] +script = ExtResource("7_va6hm") +anim_more = Array[ExtResource("6_4oi1y")]([]) +damage = 1.0 +speed = 200.0 +scale = 1.5 +angle = 0.0 +groups = PackedStringArray() +spec_bounces = 0 +spec_no_collision = false +spec_modulate = SubResource("Gradient_5qvoy") +spec_modulate_loop = 0.0 +spec_trail_length = 0.0 +spec_trail_width = 0.0 +spec_trail_modulate = Color(1, 1, 1, 1) +spec_rotating_speed = 0.0 +death_after_time = 30.0 +death_outside_box = Rect2(0, 0, 0, 0) +death_from_collision = true +a_direction_equation = "" +a_curve_movement = 0 +a_speed_multiplier = SubResource("Curve_1vs6s") +a_speed_multi_iterations = 0 +a_speed_multi_scale = 0.0 +trigger_container = "" +trigger_wait_for_shot = true +homing_type = 0 +homing_target = NodePath("") +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 +scale_multi_iterations = 0 +scale_multiplier = SubResource("Curve_xanmy") +scale_multi_scale = 1.0 +r_randomisation_chances = 1.0 +r_speed_choice = PackedFloat32Array() +r_speed_variation = Vector3(0, 0, 0) +r_scale_choice = PackedFloat32Array() +r_scale_variation = Vector3(0, 0, 0) +r_angle_choice = PackedFloat32Array() +r_angle_variation = Vector3(0, 0, 0) +r_group_choice = [] +r_bounce_choice = PackedInt32Array() +r_bounce_variation = Vector3(0, 0, 0) +r_no_coll_chances = 0.0 +r_modulate_variation = Vector3(0, 0, 0) +r_trail_length_variation = Vector3(0, 0, 0) +r_trail_color_variation = Vector3(0, 0, 0) +r_rotating_variation = Vector3(0, 0, 0) +r_death_after_choice = PackedFloat32Array() +r_death_after_variation = Vector3(0, 0, 0) +r_death_outside_chances = 0.0 +r_dir_equation_choice = PackedStringArray() +r_curve_choice = [] +r_speed_multi_curve_choice = [] +r_speed_multi_iter_variation = Vector3(0, 0, 0) +r_speed_multi_scale_variation = Vector3(0, 0, 0) +r_trigger_choice = PackedStringArray() +r_wait_for_shot_chances = 0.0 +r_homing_target_choice = [] +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() +r_steer_variation = Vector3(0, 0, 0) +r_homing_delay_choice = PackedFloat32Array() +r_homing_delay_variation = Vector3(0, 0, 0) +r_homing_dur_choice = PackedFloat32Array() +r_homing_dur_variation = Vector3(0, 0, 0) +r_scale_multi_curve_choice = [] +r_scale_multi_iter_variation = Vector3(0, 0, 0) +r_scale_multi_scale_variation = Vector3(0, 0, 0) + [sub_resource type="Curve2D" id="Curve2D_2blpc"] -[sub_resource type="NavigationPolygon" id="NavigationPolygon_xvgbi"] +[sub_resource type="NavigationPolygon" id="NavigationPolygon_xvgbi"] +resource_name = "PatternCircle" +script = ExtResource("4_vu88i") +radius = 0 +angle_total = 6.28319 +angle_decal = 0.0 +symmetric = true +center = 0 +symmetry_type = 0 +bullet = "circle0" +nbr = 10 +iterations = -1 +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false +forced_angle = 0.0 +forced_target = NodePath("") +forced_lookat_mouse = false +forced_pattern_lookat = false +cooldown_stasis = false +cooldown_spawn = 1.0 +cooldown_shoot = 0.0 +cooldown_next_spawn = 0.0 +cooldown_next_shoot = 0.0 +wait_tween_momentum = 0 +wait_tween_length = 0.0 +wait_tween_time = 0.0 + +[sub_resource type="Curve2D" id="Curve2D_4yvwo"] + +[sub_resource type="Curve" id="Curve_ymaju"] + +[sub_resource type="Curve" id="Curve_ghta3"] + +[sub_resource type="Gradient" id="Gradient_yqb8c"] +interpolation_mode = 1 +offsets = PackedFloat32Array(0) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="PackedDataContainer" id="PackedDataContainer_f8sif"] +script = ExtResource("7_va6hm") +anim_more = Array[ExtResource("6_4oi1y")]([]) +damage = 1.0 +speed = 100.0 +scale = 1.0 +angle = 0.0 +groups = PackedStringArray() +spec_bounces = 0 +spec_no_collision = false +spec_modulate = SubResource("Gradient_yqb8c") +spec_modulate_loop = 0.0 +spec_trail_length = 0.0 +spec_trail_width = 0.0 +spec_trail_modulate = Color(1, 1, 1, 1) +spec_rotating_speed = 0.0 +death_after_time = 30.0 +death_outside_box = Rect2(0, 0, 0, 0) +death_from_collision = true +a_direction_equation = "" +a_curve_movement = 0 +a_speed_multiplier = SubResource("Curve_ymaju") +a_speed_multi_iterations = 0 +a_speed_multi_scale = 0.0 +trigger_container = "" +trigger_wait_for_shot = true +homing_type = 0 +homing_target = NodePath("") +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 +scale_multi_iterations = 0 +scale_multiplier = SubResource("Curve_ghta3") +scale_multi_scale = 1.0 +r_randomisation_chances = 1.0 +r_speed_choice = PackedFloat32Array() +r_speed_variation = Vector3(0, 0, 0) +r_scale_choice = PackedFloat32Array() +r_scale_variation = Vector3(0, 0, 0) +r_angle_choice = PackedFloat32Array() +r_angle_variation = Vector3(0, 0, 0) +r_group_choice = [] +r_bounce_choice = PackedInt32Array() +r_bounce_variation = Vector3(0, 0, 0) +r_no_coll_chances = 0.0 +r_modulate_variation = Vector3(0, 0, 0) +r_trail_length_variation = Vector3(0, 0, 0) +r_trail_color_variation = Vector3(0, 0, 0) +r_rotating_variation = Vector3(0, 0, 0) +r_death_after_choice = PackedFloat32Array() +r_death_after_variation = Vector3(0, 0, 0) +r_death_outside_chances = 0.0 +r_dir_equation_choice = PackedStringArray() +r_curve_choice = [] +r_speed_multi_curve_choice = [] +r_speed_multi_iter_variation = Vector3(0, 0, 0) +r_speed_multi_scale_variation = Vector3(0, 0, 0) +r_trigger_choice = PackedStringArray() +r_wait_for_shot_chances = 0.0 +r_homing_target_choice = [] +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() +r_steer_variation = Vector3(0, 0, 0) +r_homing_delay_choice = PackedFloat32Array() +r_homing_delay_variation = Vector3(0, 0, 0) +r_homing_dur_choice = PackedFloat32Array() +r_homing_dur_variation = Vector3(0, 0, 0) +r_scale_multi_curve_choice = [] +r_scale_multi_iter_variation = Vector3(0, 0, 0) +r_scale_multi_scale_variation = Vector3(0, 0, 0) + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_d7c6k"] +resource_name = "PatternCircle" +script = ExtResource("4_vu88i") +radius = 0 +angle_total = 6.28319 +angle_decal = 1.5708 +symmetric = true +center = 5 +symmetry_type = 0 +bullet = "circle1" +nbr = 10 +iterations = -1 +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false +forced_angle = 0.0 +forced_target = NodePath("") +forced_lookat_mouse = false +forced_pattern_lookat = false +cooldown_stasis = false +cooldown_spawn = 1.0 +cooldown_shoot = 0.0 +cooldown_next_spawn = 0.0 +cooldown_next_shoot = 0.0 +wait_tween_momentum = 0 +wait_tween_length = 0.0 +wait_tween_time = 0.0 + +[sub_resource type="Gradient" id="Gradient_f3isc"] +interpolation_mode = 1 +offsets = PackedFloat32Array(0) +colors = PackedColorArray(1, 1, 1, 1) + +[sub_resource type="PackedDataContainer" id="PackedDataContainer_5y4sb"] +script = ExtResource("7_va6hm") +anim_more = Array[ExtResource("6_4oi1y")]([]) +damage = 1.0 +speed = 100.0 +scale = 1.0 +angle = 0.0 +groups = PackedStringArray() +spec_bounces = 0 +spec_no_collision = false +spec_modulate = SubResource("Gradient_f3isc") +spec_modulate_loop = 0.0 +spec_trail_length = 0.0 +spec_trail_width = 0.0 +spec_trail_modulate = Color(1, 1, 1, 1) +spec_rotating_speed = 0.0 +death_after_time = 30.0 +death_outside_box = Rect2(0, 0, 0, 0) +death_from_collision = true +a_direction_equation = "" +a_curve_movement = 0 +a_speed_multiplier = SubResource("Curve_ymaju") +a_speed_multi_iterations = 0 +a_speed_multi_scale = 0.0 +trigger_container = "" +trigger_wait_for_shot = true +homing_type = 0 +homing_target = NodePath("") +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 +scale_multi_iterations = 0 +scale_multiplier = SubResource("Curve_ghta3") +scale_multi_scale = 1.0 +r_randomisation_chances = 1.0 +r_speed_choice = PackedFloat32Array() +r_speed_variation = Vector3(0, 0, 0) +r_scale_choice = PackedFloat32Array() +r_scale_variation = Vector3(0, 0, 0) +r_angle_choice = PackedFloat32Array() +r_angle_variation = Vector3(0, 0, 0) +r_group_choice = [] +r_bounce_choice = PackedInt32Array() +r_bounce_variation = Vector3(0, 0, 0) +r_no_coll_chances = 0.0 +r_modulate_variation = Vector3(0, 0, 0) +r_trail_length_variation = Vector3(0, 0, 0) +r_trail_color_variation = Vector3(0, 0, 0) +r_rotating_variation = Vector3(0, 0, 0) +r_death_after_choice = PackedFloat32Array() +r_death_after_variation = Vector3(0, 0, 0) +r_death_outside_chances = 0.0 +r_dir_equation_choice = PackedStringArray() +r_curve_choice = [] +r_speed_multi_curve_choice = [] +r_speed_multi_iter_variation = Vector3(0, 0, 0) +r_speed_multi_scale_variation = Vector3(0, 0, 0) +r_trigger_choice = PackedStringArray() +r_wait_for_shot_chances = 0.0 +r_homing_target_choice = [] +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() +r_steer_variation = Vector3(0, 0, 0) +r_homing_delay_choice = PackedFloat32Array() +r_homing_delay_variation = Vector3(0, 0, 0) +r_homing_dur_choice = PackedFloat32Array() +r_homing_dur_variation = Vector3(0, 0, 0) +r_scale_multi_curve_choice = [] +r_scale_multi_iter_variation = Vector3(0, 0, 0) +r_scale_multi_scale_variation = Vector3(0, 0, 0) + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_qni70"] resource_name = "PatternCircle" script = ExtResource("4_vu88i") radius = 0 @@ -20,7 +346,7 @@ angle_decal = 0.0 symmetric = true center = 0 symmetry_type = 0 -bullet = "circle0" +bullet = "circle0b" nbr = 10 iterations = -1 pattern_angle = 0.0 @@ -39,18 +365,7 @@ wait_tween_momentum = 0 wait_tween_length = 0.0 wait_tween_time = 0.0 -[sub_resource type="Curve2D" id="Curve2D_4yvwo"] - -[sub_resource type="Curve" id="Curve_ymaju"] - -[sub_resource type="Curve" id="Curve_ghta3"] - -[sub_resource type="Gradient" id="Gradient_yqb8c"] -interpolation_mode = 1 -offsets = PackedFloat32Array(0) -colors = PackedColorArray(0.999999, 0.984398, 0.669782, 1) - -[sub_resource type="PackedDataContainer" id="PackedDataContainer_f8sif"] +[sub_resource type="PackedDataContainer" id="PackedDataContainer_q22wj"] script = ExtResource("7_va6hm") anim_more = Array[ExtResource("6_4oi1y")]([]) damage = 1.0 @@ -69,7 +384,7 @@ spec_rotating_speed = 0.0 death_after_time = 30.0 death_outside_box = Rect2(0, 0, 0, 0) death_from_collision = true -a_direction_equation = "" +a_direction_equation = "sin(sqrt(x))" a_curve_movement = 0 a_speed_multiplier = SubResource("Curve_ymaju") a_speed_multi_iterations = 0 @@ -123,7 +438,7 @@ r_scale_multi_curve_choice = [] r_scale_multi_iter_variation = Vector3(0, 0, 0) r_scale_multi_scale_variation = Vector3(0, 0, 0) -[sub_resource type="NavigationPolygon" id="NavigationPolygon_d7c6k"] +[sub_resource type="NavigationPolygon" id="NavigationPolygon_jggtw"] resource_name = "PatternCircle" script = ExtResource("4_vu88i") radius = 0 @@ -132,7 +447,7 @@ angle_decal = 1.5708 symmetric = true center = 5 symmetry_type = 0 -bullet = "circle1" +bullet = "circle1b" nbr = 10 iterations = -1 pattern_angle = 0.0 @@ -151,12 +466,7 @@ wait_tween_momentum = 0 wait_tween_length = 0.0 wait_tween_time = 0.0 -[sub_resource type="Gradient" id="Gradient_f3isc"] -interpolation_mode = 1 -offsets = PackedFloat32Array(0) -colors = PackedColorArray(1, 0.952344, 0.952151, 1) - -[sub_resource type="PackedDataContainer" id="PackedDataContainer_5y4sb"] +[sub_resource type="PackedDataContainer" id="PackedDataContainer_lrh3o"] script = ExtResource("7_va6hm") anim_more = Array[ExtResource("6_4oi1y")]([]) damage = 1.0 @@ -175,7 +485,7 @@ spec_rotating_speed = 0.0 death_after_time = 30.0 death_outside_box = Rect2(0, 0, 0, 0) death_from_collision = true -a_direction_equation = "" +a_direction_equation = "sin(sqrt(x))" a_curve_movement = 0 a_speed_multiplier = SubResource("Curve_ymaju") a_speed_multi_iterations = 0 @@ -229,23 +539,27 @@ r_scale_multi_curve_choice = [] r_scale_multi_iter_variation = Vector3(0, 0, 0) r_scale_multi_scale_variation = Vector3(0, 0, 0) -[sub_resource type="Curve2D" id="Curve2D_n8v2j"] - -[sub_resource type="NavigationPolygon" id="NavigationPolygon_3s7m1"] -resource_name = "PatternOne" -script = ExtResource("8_k40hp") -bullet = "custom0" -nbr = 1 +[sub_resource type="NavigationPolygon" id="NavigationPolygon_cdqxo"] +resource_name = "PatternCircle" +script = ExtResource("4_vu88i") +radius = 0 +angle_total = 6.28319 +angle_decal = 0.0 +symmetric = true +center = 0 +symmetry_type = 0 +bullet = "circle0c" +nbr = 10 iterations = -1 pattern_angle = 0.0 pattern_angle_target = NodePath("") pattern_angle_mouse = false forced_angle = 0.0 forced_target = NodePath("") -forced_lookat_mouse = true -forced_pattern_lookat = true +forced_lookat_mouse = false +forced_pattern_lookat = false cooldown_stasis = false -cooldown_spawn = 0.5 +cooldown_spawn = 1.0 cooldown_shoot = 0.0 cooldown_next_spawn = 0.0 cooldown_next_shoot = 0.0 @@ -253,28 +567,118 @@ wait_tween_momentum = 0 wait_tween_length = 0.0 wait_tween_time = 0.0 -[sub_resource type="Curve2D" id="Curve2D_7xdn8"] - -[sub_resource type="Curve" id="Curve_1vs6s"] - -[sub_resource type="Curve" id="Curve_xanmy"] +[sub_resource type="PackedDataContainer" id="PackedDataContainer_yha0q"] +script = ExtResource("7_va6hm") +anim_more = Array[ExtResource("6_4oi1y")]([]) +damage = 1.0 +speed = 100.0 +scale = 1.0 +angle = 0.0 +groups = PackedStringArray() +spec_bounces = 0 +spec_no_collision = false +spec_modulate = SubResource("Gradient_yqb8c") +spec_modulate_loop = 0.0 +spec_trail_length = 0.0 +spec_trail_width = 0.0 +spec_trail_modulate = Color(1, 1, 1, 1) +spec_rotating_speed = 0.0 +death_after_time = 30.0 +death_outside_box = Rect2(0, 0, 0, 0) +death_from_collision = true +a_direction_equation = "sin(x)" +a_curve_movement = 0 +a_speed_multiplier = SubResource("Curve_ymaju") +a_speed_multi_iterations = 0 +a_speed_multi_scale = 0.0 +trigger_container = "" +trigger_wait_for_shot = true +homing_type = 0 +homing_target = NodePath("") +homing_steer = 0.0 +homing_time_start = 0.0 +homing_duration = 999.0 +scale_multi_iterations = 0 +scale_multiplier = SubResource("Curve_ghta3") +scale_multi_scale = 1.0 +r_randomisation_chances = 1.0 +r_speed_choice = PackedFloat32Array() +r_speed_variation = Vector3(0, 0, 0) +r_scale_choice = PackedFloat32Array() +r_scale_variation = Vector3(0, 0, 0) +r_angle_choice = PackedFloat32Array() +r_angle_variation = Vector3(0, 0, 0) +r_group_choice = [] +r_bounce_choice = PackedInt32Array() +r_bounce_variation = Vector3(0, 0, 0) +r_no_coll_chances = 0.0 +r_modulate_variation = Vector3(0, 0, 0) +r_trail_length_variation = Vector3(0, 0, 0) +r_trail_color_variation = Vector3(0, 0, 0) +r_rotating_variation = Vector3(0, 0, 0) +r_death_after_choice = PackedFloat32Array() +r_death_after_variation = Vector3(0, 0, 0) +r_death_outside_chances = 0.0 +r_dir_equation_choice = PackedStringArray() +r_curve_choice = [] +r_speed_multi_curve_choice = [] +r_speed_multi_iter_variation = Vector3(0, 0, 0) +r_speed_multi_scale_variation = Vector3(0, 0, 0) +r_trigger_choice = PackedStringArray() +r_wait_for_shot_chances = 0.0 +r_homing_target_choice = [] +r_special_target_choice = PackedStringArray() +r_group_target_choice = PackedStringArray() +r_pos_target_choice = PackedVector2Array() +r_steer_choice = PackedFloat32Array() +r_steer_variation = Vector3(0, 0, 0) +r_homing_delay_choice = PackedFloat32Array() +r_homing_delay_variation = Vector3(0, 0, 0) +r_homing_dur_choice = PackedFloat32Array() +r_homing_dur_variation = Vector3(0, 0, 0) +r_scale_multi_curve_choice = [] +r_scale_multi_iter_variation = Vector3(0, 0, 0) +r_scale_multi_scale_variation = Vector3(0, 0, 0) -[sub_resource type="Gradient" id="Gradient_5qvoy"] -interpolation_mode = 1 -offsets = PackedFloat32Array(0) -colors = PackedColorArray(0.607408, 1, 0.823537, 1) +[sub_resource type="NavigationPolygon" id="NavigationPolygon_53lqn"] +resource_name = "PatternCircle" +script = ExtResource("4_vu88i") +radius = 0 +angle_total = 6.28319 +angle_decal = 1.5708 +symmetric = true +center = 5 +symmetry_type = 0 +bullet = "circle1c" +nbr = 10 +iterations = -1 +pattern_angle = 0.0 +pattern_angle_target = NodePath("") +pattern_angle_mouse = false +forced_angle = 0.0 +forced_target = NodePath("") +forced_lookat_mouse = false +forced_pattern_lookat = false +cooldown_stasis = false +cooldown_spawn = 1.0 +cooldown_shoot = 0.0 +cooldown_next_spawn = 0.0 +cooldown_next_shoot = 0.0 +wait_tween_momentum = 0 +wait_tween_length = 0.0 +wait_tween_time = 0.0 -[sub_resource type="PackedDataContainer" id="PackedDataContainer_e02lq"] +[sub_resource type="PackedDataContainer" id="PackedDataContainer_b5hvj"] script = ExtResource("7_va6hm") anim_more = Array[ExtResource("6_4oi1y")]([]) damage = 1.0 -speed = 200.0 -scale = 2.0 +speed = 100.0 +scale = 1.0 angle = 0.0 groups = PackedStringArray() spec_bounces = 0 spec_no_collision = false -spec_modulate = SubResource("Gradient_5qvoy") +spec_modulate = SubResource("Gradient_f3isc") spec_modulate_loop = 0.0 spec_trail_length = 0.0 spec_trail_width = 0.0 @@ -283,9 +687,9 @@ spec_rotating_speed = 0.0 death_after_time = 30.0 death_outside_box = Rect2(0, 0, 0, 0) death_from_collision = true -a_direction_equation = "" +a_direction_equation = "sin(x)" a_curve_movement = 0 -a_speed_multiplier = SubResource("Curve_1vs6s") +a_speed_multiplier = SubResource("Curve_ymaju") a_speed_multi_iterations = 0 a_speed_multi_scale = 0.0 trigger_container = "" @@ -296,7 +700,7 @@ homing_steer = 0.0 homing_time_start = 0.0 homing_duration = 999.0 scale_multi_iterations = 0 -scale_multiplier = SubResource("Curve_xanmy") +scale_multiplier = SubResource("Curve_ghta3") scale_multi_scale = 1.0 r_randomisation_chances = 1.0 r_speed_choice = PackedFloat32Array() @@ -345,9 +749,38 @@ script = ExtResource("1_lkn8h") [node name="Pattern0" type="Node2D" parent="Patterns"] -[node name="Circle0" type="Node2D" parent="Patterns/Pattern0"] +[node name="Custom0" type="Node2D" parent="Patterns/Pattern0"] + +[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern0/Custom0"] +script = ExtResource("2_rai8q") +active = false +auto_pattern_id = "custom0" +shared_area_name = "0" +rotating_speed = 0.0 +pool_amount = 200 +auto_start_on_cam = true +auto_start_after_time = 0.0 +auto_start_at_distance = 5.0 +auto_distance_from = NodePath("") +trigger_container = NodePath("") + +[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern0/Custom0"] +curve = SubResource("Curve2D_n8v2j") +script = ExtResource("3_molhr") +id = "custom0" +pattern = SubResource("NavigationPolygon_3s7m1") + +[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern0/Custom0"] +curve = SubResource("Curve2D_7xdn8") +script = ExtResource("5_gfkum") +id = "custom0" +props = SubResource("PackedDataContainer_e02lq") + +[node name="Pattern1" type="Node2D" parent="Patterns"] + +[node name="Circle0" type="Node2D" parent="Patterns/Pattern1"] -[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern0/Circle0"] +[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern1/Circle0"] script = ExtResource("2_rai8q") active = false auto_pattern_id = "circle0" @@ -360,21 +793,21 @@ auto_start_at_distance = 5.0 auto_distance_from = NodePath("") trigger_container = NodePath("") -[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern0/Circle0"] +[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern1/Circle0"] curve = SubResource("Curve2D_2blpc") script = ExtResource("3_molhr") id = "circle0" pattern = SubResource("NavigationPolygon_xvgbi") -[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern0/Circle0"] +[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern1/Circle0"] curve = SubResource("Curve2D_4yvwo") script = ExtResource("5_gfkum") id = "circle0" props = SubResource("PackedDataContainer_f8sif") -[node name="Circle1" type="Node2D" parent="Patterns/Pattern0"] +[node name="Circle1" type="Node2D" parent="Patterns/Pattern1"] -[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern0/Circle1"] +[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern1/Circle1"] script = ExtResource("2_rai8q") active = false auto_pattern_id = "circle1" @@ -387,46 +820,129 @@ auto_start_at_distance = 5.0 auto_distance_from = NodePath("") trigger_container = NodePath("") -[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern0/Circle1"] +[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern1/Circle1"] curve = SubResource("Curve2D_2blpc") script = ExtResource("3_molhr") id = "circle1" pattern = SubResource("NavigationPolygon_d7c6k") -[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern0/Circle1"] +[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern1/Circle1"] curve = SubResource("Curve2D_4yvwo") script = ExtResource("5_gfkum") id = "circle1" props = SubResource("PackedDataContainer_5y4sb") -[node name="Pattern1" type="Node2D" parent="Patterns"] +[node name="Pattern2" type="Node2D" parent="Patterns"] -[node name="Custom0" type="Node2D" parent="Patterns/Pattern1"] +[node name="Circle0b" type="Node2D" parent="Patterns/Pattern2"] -[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern1/Custom0"] +[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern2/Circle0b"] script = ExtResource("2_rai8q") active = false -auto_pattern_id = "custom0" +auto_pattern_id = "circle0b" shared_area_name = "0" rotating_speed = 0.0 -pool_amount = 200 +pool_amount = 300 auto_start_on_cam = true auto_start_after_time = 0.0 auto_start_at_distance = 5.0 auto_distance_from = NodePath("") trigger_container = NodePath("") -[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern1/Custom0"] -curve = SubResource("Curve2D_n8v2j") +[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern2/Circle0b"] +curve = SubResource("Curve2D_2blpc") script = ExtResource("3_molhr") -id = "custom0" -pattern = SubResource("NavigationPolygon_3s7m1") +id = "circle0b" +pattern = SubResource("NavigationPolygon_qni70") -[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern1/Custom0"] -curve = SubResource("Curve2D_7xdn8") +[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern2/Circle0b"] +curve = SubResource("Curve2D_4yvwo") script = ExtResource("5_gfkum") -id = "custom0" -props = SubResource("PackedDataContainer_e02lq") +id = "circle0b" +props = SubResource("PackedDataContainer_q22wj") + +[node name="Circle1b" type="Node2D" parent="Patterns/Pattern2"] + +[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern2/Circle1b"] +script = ExtResource("2_rai8q") +active = false +auto_pattern_id = "circle1b" +shared_area_name = "0" +rotating_speed = 0.0 +pool_amount = 300 +auto_start_on_cam = true +auto_start_after_time = 0.5 +auto_start_at_distance = 5.0 +auto_distance_from = NodePath("") +trigger_container = NodePath("") + +[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern2/Circle1b"] +curve = SubResource("Curve2D_2blpc") +script = ExtResource("3_molhr") +id = "circle1b" +pattern = SubResource("NavigationPolygon_jggtw") + +[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern2/Circle1b"] +curve = SubResource("Curve2D_4yvwo") +script = ExtResource("5_gfkum") +id = "circle1b" +props = SubResource("PackedDataContainer_lrh3o") + +[node name="Pattern3" type="Node2D" parent="Patterns"] + +[node name="Circle0c" type="Node2D" parent="Patterns/Pattern3"] + +[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern3/Circle0c"] +script = ExtResource("2_rai8q") +active = false +auto_pattern_id = "circle0c" +shared_area_name = "0" +rotating_speed = 0.0 +pool_amount = 300 +auto_start_on_cam = true +auto_start_after_time = 0.0 +auto_start_at_distance = 5.0 +auto_distance_from = NodePath("") +trigger_container = NodePath("") + +[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern3/Circle0c"] +curve = SubResource("Curve2D_2blpc") +script = ExtResource("3_molhr") +id = "circle0c" +pattern = SubResource("NavigationPolygon_cdqxo") + +[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern3/Circle0c"] +curve = SubResource("Curve2D_4yvwo") +script = ExtResource("5_gfkum") +id = "circle0c" +props = SubResource("PackedDataContainer_yha0q") + +[node name="Circle1c" type="Node2D" parent="Patterns/Pattern3"] + +[node name="SpawnPoint" type="Node2D" parent="Patterns/Pattern3/Circle1c"] +script = ExtResource("2_rai8q") +active = false +auto_pattern_id = "circle1c" +shared_area_name = "0" +rotating_speed = 0.0 +pool_amount = 300 +auto_start_on_cam = true +auto_start_after_time = 0.5 +auto_start_at_distance = 5.0 +auto_distance_from = NodePath("") +trigger_container = NodePath("") + +[node name="SpawnPattern" type="Path2D" parent="Patterns/Pattern3/Circle1c"] +curve = SubResource("Curve2D_2blpc") +script = ExtResource("3_molhr") +id = "circle1c" +pattern = SubResource("NavigationPolygon_53lqn") + +[node name="BulletPattern" type="Path2D" parent="Patterns/Pattern3/Circle1c"] +curve = SubResource("Curve2D_4yvwo") +script = ExtResource("5_gfkum") +id = "circle1c" +props = SubResource("PackedDataContainer_b5hvj") [node name="Walls" type="StaticBody2D" parent="."] collision_layer = 17 diff --git a/scenes/component/shake_shader_component/shake_shader_component.gd b/scenes/component/shake_shader_component/shake_shader_component.gd index aa4fe65..b4f51d5 100644 --- a/scenes/component/shake_shader_component/shake_shader_component.gd +++ b/scenes/component/shake_shader_component/shake_shader_component.gd @@ -66,8 +66,13 @@ func update_shake_effect(toggle: bool, value: float) -> void: func _connect_signals() -> void: SignalBus.effect_settings_updated.connect(_on_effect_settings_updated) + SignalBus.player_death.connect(_on_player_death) func _on_effect_settings_updated(toggle: bool, value: float, id: String) -> void: if id == "shake": update_shake_effect(toggle, value) + + +func _on_player_death() -> void: + update_shake_effect(false, 0)