From e608652170a3061b2bad77059265fe3a01a8bb8c Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 4 Mar 2026 01:07:40 +0000 Subject: [PATCH] Updated pattern for boss; trying to get it to spawn bullets. --- scenes/boss.gd | 67 ++++++++++ scenes/boss.gd.uid | 1 + scenes/boss.tscn | 197 ++++++++++++++++++++++++++++- scenes/boss_bullet.gd | 17 +++ scenes/boss_bullet.gd.uid | 1 + scenes/boss_bullet.tscn | 22 ++++ scenes/boss_horse.gd | 82 ++++++++++++ scenes/boss_horse.gd.uid | 1 + scenes/bullet.gd | 34 ++++- scenes/enemy_crt.gd | 22 ++-- scenes/enemy_crt.tscn | 5 +- scenes/enemy_rotater.gd | 44 +++++++ scenes/enemy_rotater.gd.uid | 1 + scenes/parallax_clouds.gd | 16 ++- scenes/parallax_clouds.tscn | 2 +- scenes/player.gd | 9 ++ scenes/rotater.tscn | 19 +++ scenes/sink.gd | 1 + scenes/wave.gd | 13 +- sprites/boss.png | Bin 1339 -> 6140 bytes sprites/frame.png | Bin 0 -> 566 bytes sprites/frame.png.import | 40 ++++++ sprites/horse_in_motion.png | Bin 0 -> 23292 bytes sprites/horse_in_motion.png.import | 40 ++++++ 24 files changed, 606 insertions(+), 28 deletions(-) create mode 100644 scenes/boss.gd create mode 100644 scenes/boss.gd.uid create mode 100644 scenes/boss_bullet.gd create mode 100644 scenes/boss_bullet.gd.uid create mode 100644 scenes/boss_bullet.tscn create mode 100644 scenes/boss_horse.gd create mode 100644 scenes/boss_horse.gd.uid create mode 100644 scenes/enemy_rotater.gd create mode 100644 scenes/enemy_rotater.gd.uid create mode 100644 scenes/rotater.tscn create mode 100644 sprites/frame.png create mode 100644 sprites/frame.png.import create mode 100644 sprites/horse_in_motion.png create mode 100644 sprites/horse_in_motion.png.import diff --git a/scenes/boss.gd b/scenes/boss.gd new file mode 100644 index 0000000..93c86f6 --- /dev/null +++ b/scenes/boss.gd @@ -0,0 +1,67 @@ +extends Area2D + +var enemy_type: String = "boss" + +var bullet_scene = preload("res://scenes/enemy_bullet.tscn") +var start_pos = Vector2.ZERO +var speed = 0 +var tween_speed: float = 1.4 + +var horse_counter = 0 + +var exploding = false + +@onready var boss = $AnimationPlayer +@onready var screensize = get_viewport_rect().size + +func _ready(): + position = Vector2(screensize.x / 2, -screensize.y) + var tween = create_tween().set_ease(Tween.EASE_OUT) + tween.tween_property(self, "position:y", 100, 2) + await tween.finished + boss_intro() + + + +func boss_intro(): + await get_tree().create_timer(2).timeout + boss.play("align") + await get_tree().create_timer(2).timeout + boss.play("rise") + await get_tree().create_timer(4).timeout + boss.play("whisper") + await get_tree().create_timer(1).timeout + boss_horse() + +func boss_horse(): + await get_tree().create_timer(2).timeout + EventBus.flash_screen.emit(.25) + $Sprite2D.frame = 7 + $Horse.show() + var horse_player = $Horse/AnimationPlayer + horse_player.play("run") + await get_tree().create_timer(10).timeout + EventBus.flash_screen.emit(.25) + $Horse.hide() + horse_counter += 1 + await get_tree().create_timer(5).timeout + lady_of_whispers() + + +func lady_of_whispers(): + boss.play("rise") + await get_tree().create_timer(4).timeout + boss.play("whisper") + await get_tree().create_timer(1).timeout + boss_horse() + + +func hit_detection(): + return + + + + + + + diff --git a/scenes/boss.gd.uid b/scenes/boss.gd.uid new file mode 100644 index 0000000..7fe4eff --- /dev/null +++ b/scenes/boss.gd.uid @@ -0,0 +1 @@ +uid://c1wu3aga847b0 diff --git a/scenes/boss.tscn b/scenes/boss.tscn index 3a094c7..d16d161 100644 --- a/scenes/boss.tscn +++ b/scenes/boss.tscn @@ -1,16 +1,211 @@ [gd_scene format=3 uid="uid://bg5fq6ltr37r5"] [ext_resource type="Texture2D" uid="uid://c7gbcrellomr1" path="res://sprites/boss.png" id="1_dlmty"] +[ext_resource type="Script" uid="uid://c1wu3aga847b0" path="res://scenes/boss.gd" id="1_neq0i"] +[ext_resource type="Texture2D" uid="uid://bqtdonm2hgrw3" path="res://sprites/horse_in_motion.png" id="3_jncid"] +[ext_resource type="Script" uid="uid://2wtoqserm8g6" path="res://scenes/boss_horse.gd" id="3_r3bxh"] +[ext_resource type="Texture2D" uid="uid://b0bdonvu25475" path="res://sprites/frame.png" id="4_qnbj4"] +[ext_resource type="Texture2D" uid="uid://dy743vehs0t1t" path="res://icon.svg" id="5_wqpjq"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_neq0i"] size = Vector2(129, 63) -[node name="Boss" type="Area2D" unique_id=2108172712] +[sub_resource type="Animation" id="Animation_jncid"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [4] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../AnimationPlayer:speed_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.5] +} + +[sub_resource type="Animation" id="Animation_qnbj4"] +resource_name = "align" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.1, 1.5, 1.7333333, 2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [4, 5, 6, 7] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../AnimationPlayer:speed_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.5] +} + +[sub_resource type="Animation" id="Animation_r3bxh"] +resource_name = "Rise" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.1, 1.5, 1.7333333, 2), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 1, +"values": [7, 8, 9, 0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../AnimationPlayer:speed_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.5] +} + +[sub_resource type="Animation" id="Animation_wqpjq"] +resource_name = "whisper" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.25, 0.5), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0, 1, 2] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_2cdgk"] +_data = { +&"RESET": SubResource("Animation_jncid"), +&"align": SubResource("Animation_qnbj4"), +&"rise": SubResource("Animation_r3bxh"), +&"whisper": SubResource("Animation_wqpjq") +} + +[sub_resource type="Animation" id="Animation_2cdgk"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_qsl3t"] +resource_name = "run" +length = 0.3333 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.033333335, 0.06666667, 0.10000001, 0.13333334, 0.16666667, 0.20000002, 0.23333335, 0.26666668, 0.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), +"update": 1, +"values": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_2avx2"] +_data = { +&"RESET": SubResource("Animation_2cdgk"), +&"run": SubResource("Animation_qsl3t") +} + +[node name="Boss" type="Area2D" unique_id=2108172712 groups=["boss"]] z_index = -1 +script = ExtResource("1_neq0i") [node name="Sprite2D" type="Sprite2D" parent="." unique_id=523151470] texture = ExtResource("1_dlmty") +hframes = 4 +vframes = 3 +frame = 4 [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=12560305] position = Vector2(-0.5, 1.5) shape = SubResource("RectangleShape2D_neq0i") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1476555217] +root_node = NodePath("../Sprite2D") +libraries/ = SubResource("AnimationLibrary_2cdgk") +speed_scale = 1.5 + +[node name="Horse" type="Area2D" parent="." unique_id=926134296 groups=["horse"]] +visible = false +position = Vector2(0, 3) +script = ExtResource("3_r3bxh") + +[node name="Sprite2D" type="Sprite2D" parent="Horse" unique_id=1255792406] +position = Vector2(8.34465e-07, -1.000004) +scale = Vector2(1.3333334, 1.1076921) +texture = ExtResource("3_jncid") +hframes = 11 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Horse" unique_id=1900731949] +position = Vector2(-0.5, 1.5) +shape = SubResource("RectangleShape2D_neq0i") + +[node name="Frame" type="Sprite2D" parent="Horse" unique_id=1984989709] +position = Vector2(0, -3) +texture = ExtResource("4_qnbj4") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Horse" unique_id=755026998] +libraries/ = SubResource("AnimationLibrary_2avx2") +speed_scale = 0.55 + +[node name="Sprite2D2" type="Sprite2D" parent="Horse" unique_id=1735797796] +visible = false +texture = ExtResource("5_wqpjq") + +[node name="Rotater" type="Node2D" parent="Horse" unique_id=697300019] + +[node name="Sprite2D" type="Sprite2D" parent="Horse/Rotater" unique_id=1703348402] +self_modulate = Color(1, 0, 0, 1) +scale = Vector2(0.453125, 0.453125) +texture = ExtResource("5_wqpjq") + +[node name="ShootTimer" type="Timer" parent="Horse" unique_id=914903842] +wait_time = 0.05 diff --git a/scenes/boss_bullet.gd b/scenes/boss_bullet.gd new file mode 100644 index 0000000..55b3d45 --- /dev/null +++ b/scenes/boss_bullet.gd @@ -0,0 +1,17 @@ +extends Node2D + +@export var speed = 150 + +func start(pos): + position = pos + +func _process(delta): + position += transform.x * speed * delta + +func _on_visible_on_screen_notifier_2d_screen_exited(): + queue_free() + +func _on_area_entered(area): + if area.name == "Player": + queue_free() + area.shield -= 1 diff --git a/scenes/boss_bullet.gd.uid b/scenes/boss_bullet.gd.uid new file mode 100644 index 0000000..8280b79 --- /dev/null +++ b/scenes/boss_bullet.gd.uid @@ -0,0 +1 @@ +uid://d15l4y8332rni diff --git a/scenes/boss_bullet.tscn b/scenes/boss_bullet.tscn new file mode 100644 index 0000000..0b25e97 --- /dev/null +++ b/scenes/boss_bullet.tscn @@ -0,0 +1,22 @@ +[gd_scene format=3 uid="uid://dvjyo1xwrg3m7"] + +[ext_resource type="Script" uid="uid://d15l4y8332rni" path="res://scenes/boss_bullet.gd" id="1_i5ved"] +[ext_resource type="Texture2D" uid="uid://dubjbfdp6ep34" path="res://_graphics/Mini Pixel Pack 3/Projectiles/Enemy_projectile (16 x 16).png" id="2_borja"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_gl7bs"] +size = Vector2(6, 6) + +[node name="BossBullet" type="Area2D" unique_id=722316887 groups=["enemy_bullets"]] +script = ExtResource("1_i5ved") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1936412719] +texture = ExtResource("2_borja") +hframes = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=2029704873] +shape = SubResource("RectangleShape2D_gl7bs") + +[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="." unique_id=1574374158] + +[connection signal="area_entered" from="." to="." method="_on_area_entered"] +[connection signal="screen_exited" from="VisibleOnScreenNotifier2D" to="." method="_on_visible_on_screen_notifier_2d_screen_exited"] diff --git a/scenes/boss_horse.gd b/scenes/boss_horse.gd new file mode 100644 index 0000000..8976504 --- /dev/null +++ b/scenes/boss_horse.gd @@ -0,0 +1,82 @@ +extends Area2D + +var enemy_type: String = "horse" + +var bullet_scene = preload("res://scenes/boss_bullet.tscn") +var start_pos = Vector2.ZERO +var speed = 0 +var tween_speed: float = 1.4 + +var exploding = false + +var rotate_speed: int = 100 +var shooter_timer_wait_time: float = 0.2 +var spawn_point_count: int = 4 +var spawn_radius = 100 + + +@onready var boss = $AnimationPlayer +@onready var shoot_timer = $ShootTimer +@onready var rotater = $Rotater +@onready var screensize = get_viewport_rect().size + +func _ready(): + spawn_bullet() + + #var step = 2 * PI / spawn_point_count + + #for i in range(spawn_point_count): + #var spawn_point = Node2D.new() + #var pos = Vector2(spawn_radius, 0).rotated(step * i) + #spawn_point.position = pos + #spawn_point.rotation = pos.angle() + #rotater.add_child(spawn_point) + + #shoot_timer.wait_time = shooter_timer_wait_time + #shoot_timer.start() + +#func _process(delta: float) -> void: + #var new_rotation = rotater.rotation_degrees + rotate_speed * delta + #rotater.rotation_degrees - fmod(new_rotation, 360 + + +func _process(delta): + rotater.rotation_degrees += 2 # Adjust rotation speed + +func spawn_bullet(): + var bullet = bullet_scene.instantiate() + bullet.position = rotater.global_position + get_parent().add_child(bullet) + + + + + +func _on_ShootTimer_timeout() -> void: + spawn_bullet() + #for s in rotater.get_children(): + #var b = bullet_scene.instantiate() + #get_tree().root.add_child(b) + ##b.position = s.global_position + ##b.rotation = s.global_rotation + + + + + + +func boss_horse(): + await get_tree().create_timer(2).timeout + EventBus.flash_screen.emit(.25) + $Sprite2D.frame = 6 + $Horse.show() + $CollisionShape2D.show() + var horse_player = $Horse/AnimationPlayer + horse_player.play("run") + await get_tree().create_timer(5).timeout + EventBus.flash_screen.emit(.25) + $Horse.hide() + $CollisionShape2D.show() + +func hit_detection(): + print("Horse hit!") diff --git a/scenes/boss_horse.gd.uid b/scenes/boss_horse.gd.uid new file mode 100644 index 0000000..fb4a826 --- /dev/null +++ b/scenes/boss_horse.gd.uid @@ -0,0 +1 @@ +uid://2wtoqserm8g6 diff --git a/scenes/bullet.gd b/scenes/bullet.gd index a690ef8..8055395 100644 --- a/scenes/bullet.gd +++ b/scenes/bullet.gd @@ -5,13 +5,32 @@ extends Area2D @export var speed = -250 var shader_active = false var pause = false +var target = null func start(pos): position = pos + +func _ready(): + var target_node = get_parent().get_node("root/$EnemyShard") + #var target = target_node.is_in_group("shards") + func _process(delta): if pause == true: return position.y += speed * delta + + if target: + var direction = (target.position - position).normalized() + position += direction * speed * delta + + if position.distance_to(target.position) < 10: + stick_to_target(target) + +func stick_to_target(target): + target.add_child(bullet) + print("Sticking to target!") + position = Vector2.ZERO + # Signal checks to see if the bullet leaves the viewport then removes bullet. func _on_visible_on_screen_notifier_2d_screen_exited() -> void: @@ -20,19 +39,20 @@ func _on_visible_on_screen_notifier_2d_screen_exited() -> void: func _on_area_entered(area: Area2D) -> void: if area.is_in_group("enemies"): - match area.enemy_type: "crt": if area.is_in_group("enemies"): print("CRT hit!") area.hit_detection() queue_free() - "shards": if area.is_in_group("shards"): print("Shards hit!") area.hit_detection() + #stick_to_target(target) + queue_free() + "mirror": if area.is_in_group("enemies"): @@ -45,6 +65,16 @@ func _on_area_entered(area: Area2D) -> void: print("Chicken hit!") area.hit_detection() queue_free() + + _: + if area.is_in_group("enemies"): + area.hit_detection() + + + if area.is_in_group("boss"): + print("I've shot the boss") + queue_free() + #func bullet_fx(): #shader_active = true diff --git a/scenes/enemy_crt.gd b/scenes/enemy_crt.gd index 219991d..5d7091e 100644 --- a/scenes/enemy_crt.gd +++ b/scenes/enemy_crt.gd @@ -14,14 +14,13 @@ var can_shoot = true var vulnerable = true var stunned = false var blocking = false +var travel: bool = false var shader_active = false var enemy_move_aggression = randf_range(5, 20) var enemy_shoot_aggression = randf_range(4, 20) -const TILE = 32 - @onready var screensize = get_viewport_rect().size @onready var move_timer = $MoveTimer @onready var crt = $CRT @@ -30,19 +29,19 @@ func _ready(): move_timer.start() func start(pos): + vulnerable = true speed = 4 crt.frame = 0 - #var pos_mod = randf_range(-TILE,TILE) #modify the start position randomly - #position = Vector2(pos.x + pos_mod, -pos.y) #add the modifier position = Vector2(pos.x, -pos.y) start_pos = pos await get_tree().create_timer(randf_range(0.25, 0.35)).timeout var tween = create_tween().set_trans(Tween.TRANS_BACK) tween.tween_property(self, "position:y", start_pos.y, tween_speed) await tween.finished - move_timer.wait_time = enemy_move_aggression + travel = true + # move_timer.wait_time = enemy_move_aggression move_timer.start() - $ShootTimer.wait_time = enemy_shoot_aggression + # $ShootTimer.wait_time = enemy_shoot_aggression $ShootTimer.start() func _on_timer_timeout(): @@ -50,7 +49,7 @@ func _on_timer_timeout(): $DirectionTimer.start() func _on_direction_timer_timeout(): - var move_direction = int(randf_range(0,3)) + var move_direction = randi_range(0,2) match move_direction: 0: crt.frame = 0 @@ -92,10 +91,11 @@ func _process(delta): if stunned == false: position += direction * speed * delta - if position.x > screensize.x + 32: - start(start_pos) + #if position.x > screensize.x + 32: + #start(start_pos) - if position.y > screensize.y + 32: + if travel == true and position.y > screensize.y + 32 or position.x > screensize.x or position.x < -screensize.x: + print("I'm off screen!") start(start_pos) @@ -128,7 +128,7 @@ func block(): crt.material.set_shader_parameter("toggle", 0.0) shader_active = false stunned = false - $DirectionTimer.stop() + $DirectionTimer.start() print("CRT Not Stunned!") diff --git a/scenes/enemy_crt.tscn b/scenes/enemy_crt.tscn index 26626ea..f5e6611 100644 --- a/scenes/enemy_crt.tscn +++ b/scenes/enemy_crt.tscn @@ -32,7 +32,7 @@ shader = SubResource("Shader_emiuq") shader_parameter/toggle = 0.0 [sub_resource type="RectangleShape2D" id="RectangleShape2D_4gyqm"] -size = Vector2(32.727318, 27.272764) +size = Vector2(32.727318, 23.636396) [sub_resource type="Animation" id="Animation_h1rgn"] length = 0.001 @@ -233,7 +233,7 @@ region_enabled = true region_rect = Rect2(0, 0, 96, 28) [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1841693239] -position = Vector2(4.334883e-07, 4.334883e-07) +position = Vector2(0, -5.818181) scale = Vector2(0.99999857, 0.99999857) shape = SubResource("RectangleShape2D_4gyqm") @@ -247,6 +247,7 @@ one_shot = true [node name="DirectionTimer" type="Timer" parent="." unique_id=2080229505] wait_time = 0.75 +one_shot = true [node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=702523492] libraries/ = SubResource("AnimationLibrary_7ellt") diff --git a/scenes/enemy_rotater.gd b/scenes/enemy_rotater.gd new file mode 100644 index 0000000..e503e02 --- /dev/null +++ b/scenes/enemy_rotater.gd @@ -0,0 +1,44 @@ +extends Node2D + +var enemy_type: String = "horse" + +var bullet_scene = preload("res://scenes/boss_bullet.tscn") +var start_pos = Vector2.ZERO +var speed = 0 +var tween_speed: float = 1.4 + +var exploding = false + +var rotate_speed: int = 100 +var shooter_timer_wait_time: float = 0.2 +var spawn_point_count: int = 4 +var spawn_radius = 100 + +@onready var shoot_timer = $ShootTimer +@onready var rotater = $Rotater +@onready var screensize = get_viewport_rect().size + +func _ready(): + var step = 2 * PI / spawn_point_count + + for i in range(spawn_point_count): + var spawn_point = Node2D.new() + var pos = Vector2(spawn_radius, 0).rotated(step * i) + spawn_point.position = pos + spawn_point.rotation = pos.angle() + rotater.add_child(spawn_point) + + shoot_timer.wait_time = shooter_timer_wait_time + shoot_timer.start() + +func _process(delta: float) -> void: + var new_rotation = rotater.rotation_degrees + rotate_speed * delta + rotater.rotation_degrees - fmod(new_rotation, 360) + +func _on_ShootTimer_timeout() -> void: + for s in rotater.get_children(): + var b = bullet_scene.instantiate() + get_tree().root.add_child(b) + b.position = s.global_position + b.rotation = s.global_rotation + diff --git a/scenes/enemy_rotater.gd.uid b/scenes/enemy_rotater.gd.uid new file mode 100644 index 0000000..38ff25a --- /dev/null +++ b/scenes/enemy_rotater.gd.uid @@ -0,0 +1 @@ +uid://crtv1bey5t4d3 diff --git a/scenes/parallax_clouds.gd b/scenes/parallax_clouds.gd index bb15c28..6449824 100644 --- a/scenes/parallax_clouds.gd +++ b/scenes/parallax_clouds.gd @@ -1,6 +1,6 @@ extends Node2D -var scroll_multiplier: float = 200 +var scroll_multiplier: float = 400 @onready var parallax_nodes = get_tree().get_nodes_in_group("parallax_clouds") @@ -8,11 +8,17 @@ func _ready(): EventBus.cloud_speed.connect(_on_cloud_speed) func _on_cloud_speed(): - $CoffeeBuoy.hide() + for node in parallax_nodes: if node is Parallax2D: var current_autoscroll = node.get_autoscroll() current_autoscroll.y += scroll_multiplier - node.set_autoscroll(current_autoscroll) - node.set_modulate(Color(0.40,0.40,0.40)) - + var tween = create_tween().set_trans(Tween.TRANS_LINEAR) + tween.tween_property(node, "autoscroll:y", scroll_multiplier, 5) + tween.tween_property(node, "modulate",Color(0.40,0.40,0.40), 2.5) + + var coffee_dip = create_tween().set_trans(Tween.TRANS_QUAD) + coffee_dip.tween_property($CoffeeBuoy, "modulate", Color(0.40,0.40,0.40,0),2.5) + coffee_dip.tween_property($CoffeeBuoy, "scale", .25, 2.5) + await coffee_dip.finished + $CoffeeBuoy.hide() diff --git a/scenes/parallax_clouds.tscn b/scenes/parallax_clouds.tscn index 7704e53..a5abfdc 100644 --- a/scenes/parallax_clouds.tscn +++ b/scenes/parallax_clouds.tscn @@ -131,7 +131,7 @@ scale = Vector2(0.75, 0.75) texture = ExtResource("2_pcgsf") flip_h = true -[node name="ColorRect" type="ColorRect" parent="." unique_id=23364495] +[node name="ColorRect" type="ColorRect" parent="." unique_id=23364495 groups=["parallax_clouds"]] z_index = -5 offset_right = 239.0 offset_bottom = 323.0 diff --git a/scenes/player.gd b/scenes/player.gd index 9cf9867..05ac748 100644 --- a/scenes/player.gd +++ b/scenes/player.gd @@ -118,8 +118,17 @@ func _on_area_entered(area): shield -= int(max_shield / 2) _on_damage_taken() area.hit_detection() + if area.is_in_group("enemy_bullets") and self.monitoring == true: damage_taken.emit() + + if area.is_in_group("horse"): + print("Entered horse!") + shield -= int(max_shield / 2) + _on_damage_taken() + + if area.is_in_group("boss"): + print("Entered boss!") func _on_damage_taken(): diff --git a/scenes/rotater.tscn b/scenes/rotater.tscn new file mode 100644 index 0000000..961ba34 --- /dev/null +++ b/scenes/rotater.tscn @@ -0,0 +1,19 @@ +[gd_scene format=3 uid="uid://q6u258bmjd8a"] + +[ext_resource type="Script" uid="uid://crtv1bey5t4d3" path="res://scenes/enemy_rotater.gd" id="1_i05h2"] +[ext_resource type="Texture2D" uid="uid://dy743vehs0t1t" path="res://icon.svg" id="2_q7b1l"] + +[node name="Enemy" type="Node2D" unique_id=467257901] +script = ExtResource("1_i05h2") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1152422291] +texture = ExtResource("2_q7b1l") + +[node name="Rotater" type="Node2D" parent="." unique_id=75253912] + +[node name="Sprite2D" type="Sprite2D" parent="Rotater" unique_id=1800109985] +self_modulate = Color(1, 0, 0, 1) +scale = Vector2(0.453125, 0.453125) +texture = ExtResource("2_q7b1l") + +[node name="ShootTimer" type="Timer" parent="." unique_id=1315774765] diff --git a/scenes/sink.gd b/scenes/sink.gd index b152c61..92c381e 100644 --- a/scenes/sink.gd +++ b/scenes/sink.gd @@ -50,6 +50,7 @@ func hit_detection(): if health == 0: exploding = true + EventBus.flash_screen.emit(0.25) impact_sound.play() #await impact_sound.finished #find all nodes in group "shards" and then queue_free. diff --git a/scenes/wave.gd b/scenes/wave.gd index 0b22a8f..c61b5ee 100644 --- a/scenes/wave.gd +++ b/scenes/wave.gd @@ -25,7 +25,7 @@ func _ready(): func spawn_enemies(): - if wave_count == 3: #This is for CHICKENS + if wave_count == 2: #This is for CHICKENS print("Enemy Wave: ", wave_count) enemy = CHICKEN for x in range(COLS): @@ -38,7 +38,7 @@ func spawn_enemies(): await get_tree().process_frame print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size()) - if wave_count == 2: #This is for CRTs + if wave_count == 3: #This is for CRTs print("Enemy Wave: ", wave_count) enemy = CRT var cols_mod = COLS - 1 @@ -53,7 +53,7 @@ func spawn_enemies(): enemy_count = rows_mod * cols_mod await get_tree().process_frame - if wave_count == 1: #This if for Mirror + if wave_count == 0 : #This if for Mirror print("Enemy Wave: ", wave_count) # Spawn Table @@ -89,8 +89,9 @@ func spawn_enemies(): s.start_all_animations() - if wave_count == 0: #This is for Boss - + if wave_count == 1 : #This is for Boss + + # Hide the player # Speed up parallax EventBus.cloud_speed.emit() @@ -99,7 +100,7 @@ func spawn_enemies(): EventBus.flash_screen.emit(.25) var b = BOSS.instantiate() add_child(b) - b.position = Vector2(screensize.x / 2, position.y + 100) + #b.position = Vector2(screensize.x / 2, position.y + 100) diff --git a/sprites/boss.png b/sprites/boss.png index 8feb6f7c78ce14ed1e1ef5fcc0b7fa813d2adacb..e09d9df2af59809fa693bc38a4ccf31f471e624c 100644 GIT binary patch literal 6140 zcmYLtdpy(c`@as(%sFo|iYTX*gjtCkVu;8gGD1R(#aM{m&Sxd3WR&xH3t{GvL(UoI z+{jjXGlzA;v~?#>v_NKSK>_zV}2e<9yT^MeyE9|H5=Pe zB;)@!*D=Po*UeQ<#?O&JYh!&j3_*&@xHx&!+{TFU`;Ua2qUtrU9?aYZ?(Y?v91>lc zn%G$IY`1m+#u(;CT3g&=JN(~A>uBC28=H72)bN_kBlJdoa(1;6UtIhGPsgFitI~@3 zW88ON$G`L0Zd8vLk#W=WJv{EbNUmP_!QXLF_O&XGm*($9al4)*Y;|;bJ*t6%o8UR2 zfK0z#WDI|JkDWNf?%DIOTujBOM9``-L(pYO+qY{DG4IXJD}txvg@5#Z#FM4Kw6{^Q ziH@!6dR9vp`aoduw9B=3v*JMs_plg4r{cyUpWQ{47stt$Xzq*ASvXJ~x#OK9^;xk^ zrm@Y7#ROko+7lb)S7)o>4;MvnLA+r0^8r^rxS(c>RSrx)Xy<0J0Dl^|q3 zsqFtq{b1D95e`(hX*tV~OdcG6ymP6}w+A zPJfNtDQ&8>`PIz`pr&Z1*}Gi~;zW8&mSxSqf^hx5o}+3hB)j|`u&AkuJI8dB)PY9s z3tMJBC8{a?remq5!c8EYEE6)1H@dm@67OjeKGw9K(&LrntazG4Z7{VyaC^v%3k?ytFTMQy=|Zj^kK0*Psip9)VI92n z;}^N6a{(@>_aLw=Gj{!sCXiUlofa}T+Bi&j2RW%_7iyX>*bo2TLxc_ z8Ij7^<71f%&Wekl#M+T3=L9kg>~EQ#K(jN8@hl&zf*gvm;Kbn7h2A!Kcj>SwwD;Mq z@bY~Z%OxAwO4ZO{R9<;`tMP-u1b+RqrI2Zj(E;E{fX7PIh5>KdQKp+W=Ls(G=cXHZ zf}y#$5;j(DybcC8tlE$mP%o}i_s2HU2xCVU1>!MyxFbS$b|Usp&j(R+u^3Q<{ExZA zTdkr^?9$|85TrOcLLIteEOnS(eHx0dm>ZReHRb+O@ z5lBn7HFVIT7DL;tph>xgZl||QrVQ*B(v|TR8{evf%Hvm>ye)8nb0um_2SvTZY4aL) zo8hFbf7|~6vnN{z_776Gy=vcWc>us6P5>W1W;Vw$>WRG;59~)v%ZkQ;uD5v7&< zB*bz6%$->uqr_}+$b!(TlbBZn9^GZ1(?yyJRWGs6hqxB8mcbjZ#(&J^@{!I?ofm6D zF710H9v+*wYQ6V&_R}1h)`{B}0u&I511V#8{w17~zw(bt+bP_FW?p9A@u*8SRRyqa1y$rnK zKuus-RjAiBhg^#VdDOJ+rSC0>1S}_mzM ztiws9TVZRNXMb8Re+qga`}t2T|I2z#Z|lgLe4kfW?)fl*+p4q6yIMB}T&r?R9;v16 z#pqPtoiqh%H*#0@WL-6W-0t=~a(EV>%1t-t-(E1qmocMJPDq&f<_DoRy{0@v%^p>3 zaPLk<0~WGRV)e8YBMh7?H>XPBdSLp8*XuPtED*a1??+pTQ~6t+BrL(hcf57B@MD30 zYT&~`J?T_eQIM)fnx+&Q)z_SX0WxX96a85p_V~fqZ;ff%%CD9`6;6oMsm|tn=>u5j zVuw^BdY`9>fmSXCh5V(5xxFw99vT41M}{dOdAMMRLhcx|-Kur5nQ`)b$>m=bnk-p! zI26{le}<&foeCQwL@zn7HCI6=UYBR2@e{s2Bl!Qt?|!3V7IH3=R2!t`-}zFWV6xO^ ztv^>Eyde$|$TEdE<4!F<9(cgSE-TsU(lQs+vlqYx<6XF3wN@e5-J;#hnKH!$Y3&$F zp)10Uw?zG*v@yxZgTW<}*m`_b;_k zJEYpfMFrjP0FTID;_>ae8Z62Ft*4_lyN?#>T;IYy8BEF#N?K7oEJ!dU{OF8*Jgz@; zoGA)l`>VCPJ{sJNKh?2>_38MvzAR8NCZv>~7nol1C7Sn0wEheq(@w07O(eSC!27wy zFmE0JwzLPC5!R)~Me!a%g@L9;StcnnBSZL+L2aQWH1|SCL&L$19g3p^l_no&MLw#B z8n0Ajwu@2-JLv?viFWuiknkQP?C!htJ;2^c(-+wvKxyr%<-pm zXRsauC`$qOqNYACK$SsevA*IhIqAisf6o6^_N4c34EP>2lAnEM>{Jki&%cCZ_Ns>~ z4(@(wBUiBaohWma<9zBoyRjg{B}8uABc|_5vQ|)+5R*42u1=1&Fa7ubpPeMgH=*_k zkufISl&EHMS!DH|6nA&$xj6BGF;$#5+0h=q8hN))Lk7$1#|QQ;4Wqt)5`Lc+wFd6*tS5}8K2N>P2ZW7AMdEai~j}EZHaKN%WA2sZq#|f{)e@vbrl15F0FgSEt+|fQS91p zs@oLeI#BHzuBxPX%JG{qSob*1{3a#jB*9BvQUJr&aM?+Pnk0}^Xr`kjB|Pn+V`+?x zi~Us~;0aWhN|^%^O!1ccCyBbe8c#swVH`0Fxo8B_g16w?N9}){cz%iDOiH5xy8=6R zI4~=NgfnNYshu@nVw0taO@VB<$x-eGjJgzUb9Yqc%|C4yAro1Kp^!Hl9&yQoYyxaK zf3%&QT6<21;iKHo6j<+=&euA2kXufuJDGF5kOAyyvj@&*Bc9;s!>{8pg0wXNj|}M6 z>LZFAqTaSc?T3)vfbY^{_>LVYcFF7y) zstxCz%(=*PN{Vw8l3IYV2r^4<86V0;mRSF^BTh}W(4fm*j5t2k+rKQzhtiYHG!Sa- z?B-GGtI5=^I+w7ZtPS%=8EH2yKAGXG9A_?5y9;R2eEW?AV6BT#XPrHS3sh#W3_L+t zi8Vb7*+xoughoHMoZ&R976z3CcLK>N57ev>SUU0o?3$(41t)WVd03DoU3Q+71#0+| z;ZnXfV8<(dYZ&bV@U(dqsD|@g&Rm?>3ibS5zroqDo>hk3;XtIStRE8>IkKYzK6+mp z-EKb`U5!N!BnQ~$bARmCqPQK6By|C&?M7gEJs~86J9OkjzTNf*G(bLk&P));NiM=- z`g)hGJzkXKAv;N0aEorT4?$;If7(tv;+cRp`bV7RP%bBsgx5J=(DBK=OFn3}I`eU8 zPy{&VTtQ%X7^J8I2G!T)Dc`Wo?wLoNPMtAbOW{aA(rx1pqEo zyaH^)YlGu#sU#as?e@^!mjlN*g&a&bkwxD(U7G#1%gG@8HFDb6&z=^JR*zUtfNcFz z*F!t}tmVaI?U9Ik(XWtw*+2^j$DMDy5C5F!lrq0J82e?NDy!=q)11YrL+=4EIck$j0IKTfOB_DnQ3{<>k`qAHU+y{xFAzBl|M_Hi z#)}Z%{sVFpJz3`wm(koqk8EpL+e2ukb0w;HgyB2X+36;Q7xTF}=Ye;e!Tl5yV!MF& zl2aKmQfI-Z_e{|eUy2Y73b6xc>^8goO3~RW21j?cAz|$UVC?;(<4D81W{~@7uu?sNY!)AMb{`7iyVYs_sWw#63#7$P6KJ7 zkr=Rt@&Yg7LV9Ua7C=K@DI{PRQv#e1+-S__LNxW44_~vSYqC(>YtVWTXCRB(oQ8^T zm~;G_vE68|3Ep!opPMQ?e9EjuOf@pMSZ?v4{fG5<9%4BHl7jCX?7Y{U{zN9t@Hibg zS4^)&KD{25VbB?pr;s}6i-5|W?$xo@!QoB&NfQUUl$s67&9DEV(v zvDQsw8whM4IcTad^!*M(t>{aR`kH7H(Kc~Q*3aTr57e7fa}ExKS>c|o>}Fx z&%Afq>S#_dw&&qxt-7(&_ZpHg>m<1NKuH)djntAD+aToXkiY2}1K{u9n15fTB(vaH zw&v~~ANM8L&rL&BzPG$w_KuoEKO1wn+fHQoKWEj9-#Z(H6kLAZ?Mr5P=(3AhF*vWE zl2XlqBFUeXJ7N+7T4R5w4r~jv?%aRSJPl=Ra>rN^oa@;3$t{qGiQr?cS0q6)yXGwc zm1dcep!UHI5*x7TaIoL9!U@K+cH4x6R+_Q^Gt#Ny(;vgh7K+rIz#C-d+9Uk!Hp@QC z1sHDTkFmlh=%vtwYZE;nr z110=L>!RAhdxH(_wcAm<6@}I=@20(d@3H);5ETXV-G!P?=*;Cx_bDytA?67;YAQGt zL;9M)(Z4(JIWMoX0H&y%d!eAv(RzV%{)V3c3!!KJ&~&Y)2h%GA*t`GTi5%T^q*r1V zeM?VrGNA}Ee!E$Va#m9Co95?c)#Z8z7ON3NgR^kkhW9~W2t0fX8_m!6zu{)AZ6nQ= zIh_4w$ONh#QuqQFmKPVxOwCo!#mA?tx@v=3aoh16%S8u#mFmOXXP7|pdYiS^s=2=! zfi|uo{kxe&dgh-2^YxkQmkgy><>5xogw4YRQlx_hDqNfytL?#Qv4_Wa z&x3#GMZEj-sVwp@Z`6Nr{O6lxJv4AVur+gXF(_FCyCBdnHDx@)S@J1ZeIEIOT zJ8=R!JoQT^;Ov|0I{Eg?liC^IGtzjNl^c?r(IW>D|q&6S~t5vFAm3EIj1ic9ityVCE|8kZAKpbov)?{J?!pvOGCI z$+tp|)e=_^!XW*(J;!w)$&QT+QIM6SCiqM#;~>sdocmvEiGwBZb#K*4&Bo`Ssxh}{ zP9@1_fnvB>M~Nyy*MN#_y+1EbTeZVogzgE~dU^a$U^&nm#`Er}fI( zQP1|vZ@(+WWZ0R_2s3B1H{F;kxpe+S+1368AZQ{ir;j{3&dlE~*Wba# ztg1)X#}em*2`z}GQimuQ-aq7waaOhy7kd>FJUmB#w(cMG%=+{7lAXK~3^?C1vvl*` zFhY!_Qe)uR$sJh4c*!&3wjK2yv^3_X()RxS$E|tDEmi?{OW!QPA_h&DLc+|>9fm#; zatan}zChJH!My z>5pV=P9QrXkIkR-WSf6cwevv6l>m?&%1ct=7NPb{c>478lIqJ7iRx}Aogm>|vuWIZ{pj3s7wZL!)RnUQ1$fBhvcl$wD zM1Bdj+>cVq!FZ#h{6iMCjMn8%4`K@8u4&G@;iolx=#DrU=YBe>vY!ZQyY+d}6t87C znlOxsYTXa@zBO6$>wIEv?y4zXd~+xQQWeKiOqkHV)4Ob)d4A&sRNGUQ`tgiBI7rBI z$z=O0m$DqF3l(;9ES-Am`uALD2K{|E0000~2m=5B05THH5RoBEe+0Qn zL_t(&fz_Iea^oNjMXNYS{{JuD!Mr5#64>dc@?>|~8gqQP2toS;JMpeQrt4jOCIJ9H zt7Ka&n*s0lD&R!RXZc|RaH;Qm0oNlo6#OOsL8M#){6+tzmbX0kIsZY_Z&ksmmdkl$ zEZ;o^7j;{hKT!UATEQoL2%^EZe}W(LU!EP|x}B&W56%05QehYBbgRVsX;dsRcpCGh(uxXzbVYv}=^hqq= zXF0G|@R&TSBFt}(cw*AHhiC_6bwgXhehRAz1K;Tb(L9A)~y0UV=kj3cSZvS$R?pNFUkrs03Pf!jfxOY3PT)**}0R>wuUA? zRd1~)>IR^{N{~Z3ZvZwF3}MnQ5Gp|8d?%s9JAf7sE&>Yu=$a+lfKtC554Hg5WG3`@ zw>=2^9&7^o`J4IZ9$?dhe@Q!wh7}+p`Rsi0`6+Z0P}W;p3d*mM=yU)fSpzul!qFs| z!PqsVln`>*W_HyH9UB%X;>Gn43Mro7?O;wdJ%NRgRt$v zMp6BWgnmgTqE$du3g7o&qel$d1raInnW_U_slQdd^}wd-l_Ye|f1N?X`2BHUs2_C| z%=MFba9hLI<-*vL4ba08jrkr^(34j}Vjd(%Hytgog@N1P(gK1+jPJ zyOP%N493Cr2Mqa}%-n-v{ih00SNbhP z%=ae1FqK_ZWl2I7F%KTXgCa8DGT_+*qyeBwK?Ty`GXSPG5s*DVexw8Y3U2ZB2tT3VO~6E09yaozR!dDMT&Car%sd$PlqjndJD+IhS8WXCghE6>;tC4D ziGsNtU|N*!4cSn&!;}yOB;}i09y|v7x|gd;QO0LjP8to-F)M})9tdeeL2#N-)P5E~ z-4M(2o^uZp0T9*Q&+{Pk0sXVL0L$iG29T~5EPE0qf1&)P%?MC!1DJq;7b{FZVR|0y zD_96o^8t(iog_>Tk;zZbXvJsS)#aX?=7Yg3_B%L6$Od>NEDEwg=Awj-+C_ibW3s!| z051Rw9zCw8Y zxZBPSSZGl2KSojTi2vFyS)nbT;4J~xy*_=l-@^7L+=HL(X*2TK3>*g>{PPhV*Ik|z s-0SHVv`i-pAJMG+78`)y9A6Lk54ydC5m8yZUH||907*qoM6N<$g3{SY+yDRo diff --git a/sprites/frame.png b/sprites/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5c1ef1d8a73c3c6a517b360db0c08240684107 GIT binary patch literal 566 zcmV-60?GY}P)002}70{{R3G7`)X00001b5ch_0Itp) z=>Px#8&FJCMF0Q*7#SleEkQUyT})JMZ)kdpd4r{miM5`P`mNnv00009bW%=J0RR90 z|NsC0|2G1g)Bpehv`IukRA_i{AP@z81poidmFf$-fMdggIY@xqKBXQ{2ST!; zX87cKHGOhD3;YgZ=u$ z;jh%-qs!ubj&XiYlAI1gnB`>!EXIst7D($jk@`Wc~ih`=#cB<#vl#g z&PWS*-yjJfd4pIDngFpHGy|>%ZGht4TLU^0KyhwhGzjUC5m3L^(E&y$$Q{s$Yc!x< z!-NKX&Y)Ps1b{O&2;K%UTZ1liI2=%)x9AM62JL`JgHAgf4yeytbOvW=P@T7!4I1_;WlBPGQhr2Fdoph>+J{+Th;dXh8Lulh`0ugSCL#-(fK9g9HXwgGRt; zpC&aZaUlAmXmA39kPc}Z1g*gsM;EvZJ_71BEE;sH!FPa@G^hZ{4CWe?=b6!f{03)e zFajhqc-J70!32=ZAbW!uz-7=1IGaJT5s=;S^W9V@wB%|FnBKMZ%s<7uCz1d3zIUn| z*LO2;4o+TOJeF5}8mzn12QJTV7P>ggKSc!~^PmU(1ElUJMtH7*R{#J207*qoM6N<$ Ef>q%5U;qFB literal 0 HcmV?d00001 diff --git a/sprites/frame.png.import b/sprites/frame.png.import new file mode 100644 index 0000000..dee1a07 --- /dev/null +++ b/sprites/frame.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b0bdonvu25475" +path="res://.godot/imported/frame.png-5d6513f2dbddce1cfadf7a13c1a22d71.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/frame.png" +dest_files=["res://.godot/imported/frame.png-5d6513f2dbddce1cfadf7a13c1a22d71.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/sprites/horse_in_motion.png b/sprites/horse_in_motion.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf1f3b814919b98e92b369ccd2ee6d0781ee8e2 GIT binary patch literal 23292 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 An*aa+ literal 0 HcmV?d00001 diff --git a/sprites/horse_in_motion.png.import b/sprites/horse_in_motion.png.import new file mode 100644 index 0000000..08615b2 --- /dev/null +++ b/sprites/horse_in_motion.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqtdonm2hgrw3" +path="res://.godot/imported/horse_in_motion.png-389fb5f8a67400c0a7da0d35a45b444a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/horse_in_motion.png" +dest_files=["res://.godot/imported/horse_in_motion.png-389fb5f8a67400c0a7da0d35a45b444a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1