diff --git a/graphics/enemy/boss/stg2600_head.png b/graphics/enemy/boss/stg2600_head.png deleted file mode 100644 index c206bd3..0000000 Binary files a/graphics/enemy/boss/stg2600_head.png and /dev/null differ diff --git a/graphics/enemy/boss/stg2600_head_broken.png b/graphics/enemy/boss/stg2600_head_broken.png deleted file mode 100644 index e3d98ab..0000000 Binary files a/graphics/enemy/boss/stg2600_head_broken.png and /dev/null differ diff --git a/graphics/enemy/boss/stg2600_head_cracked.png b/graphics/enemy/boss/stg2600_head_cracked.png deleted file mode 100644 index c0b6f76..0000000 Binary files a/graphics/enemy/boss/stg2600_head_cracked.png and /dev/null differ diff --git a/graphics/enemy/boss/stg2600_head_cracked.png.import b/graphics/enemy/boss/stg2600_head_cracked.png.import deleted file mode 100644 index 3c0a32d..0000000 --- a/graphics/enemy/boss/stg2600_head_cracked.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/stg2600_head_cracked.png-ce070313d82d80420ae671eda2d5fa7b.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://graphics/enemy/boss/stg2600_head_cracked.png" -dest_files=[ "res://.import/stg2600_head_cracked.png-ce070313d82d80420ae671eda2d5fa7b.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/graphics/enemy/boss/stg2600_leg.png b/graphics/enemy/boss/stg2600_leg.png deleted file mode 100644 index dfb190c..0000000 Binary files a/graphics/enemy/boss/stg2600_leg.png and /dev/null differ diff --git a/graphics/enemy/boss/stg2600_beam.png b/graphics/enemy/boss/stg_2600/beam.png similarity index 100% rename from graphics/enemy/boss/stg2600_beam.png rename to graphics/enemy/boss/stg_2600/beam.png diff --git a/graphics/enemy/boss/stg_2600/beam.png.import b/graphics/enemy/boss/stg_2600/beam.png.import new file mode 100644 index 0000000..9ae197a --- /dev/null +++ b/graphics/enemy/boss/stg_2600/beam.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/beam.png-a6465ac769ebb2c528af0b787f682930.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/enemy/boss/stg_2600/beam.png" +dest_files=[ "res://.import/beam.png-a6465ac769ebb2c528af0b787f682930.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=1 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/enemy/boss/stg_2600/beam_gradient.png b/graphics/enemy/boss/stg_2600/beam_gradient.png new file mode 100644 index 0000000..4be40f8 Binary files /dev/null and b/graphics/enemy/boss/stg_2600/beam_gradient.png differ diff --git a/graphics/enemy/boss/stg_2600/beam_gradient.png.import b/graphics/enemy/boss/stg_2600/beam_gradient.png.import new file mode 100644 index 0000000..6137a04 --- /dev/null +++ b/graphics/enemy/boss/stg_2600/beam_gradient.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/beam_gradient.png-1b75c5d23d16832372548a1c5c3edb0d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/enemy/boss/stg_2600/beam_gradient.png" +dest_files=[ "res://.import/beam_gradient.png-1b75c5d23d16832372548a1c5c3edb0d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=1 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/enemy/boss/stg_2600/bold_large.xcf b/graphics/enemy/boss/stg_2600/bold_large.xcf new file mode 100644 index 0000000..8e19af6 Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bold_large.xcf differ diff --git a/graphics/enemy/boss/stg_2600/bolt_large.png b/graphics/enemy/boss/stg_2600/bolt_large.png new file mode 100644 index 0000000..302db84 Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_large.png differ diff --git a/graphics/enemy/boss/stg2600_beam.png.import b/graphics/enemy/boss/stg_2600/bolt_large.png.import similarity index 69% rename from graphics/enemy/boss/stg2600_beam.png.import rename to graphics/enemy/boss/stg_2600/bolt_large.png.import index 7487c6a..a722400 100644 --- a/graphics/enemy/boss/stg2600_beam.png.import +++ b/graphics/enemy/boss/stg_2600/bolt_large.png.import @@ -2,15 +2,15 @@ importer="texture" type="StreamTexture" -path="res://.import/stg2600_beam.png-fb234b289a938ec2639514f944c5940f.stex" +path="res://.import/bolt_large.png-87121a52143bd846fbb123b3634228b7.stex" metadata={ "vram_texture": false } [deps] -source_file="res://graphics/enemy/boss/stg2600_beam.png" -dest_files=[ "res://.import/stg2600_beam.png-fb234b289a938ec2639514f944c5940f.stex" ] +source_file="res://graphics/enemy/boss/stg_2600/bolt_large.png" +dest_files=[ "res://.import/bolt_large.png-87121a52143bd846fbb123b3634228b7.stex" ] [params] diff --git a/graphics/enemy/boss/stg_2600/bolt_large.xcf b/graphics/enemy/boss/stg_2600/bolt_large.xcf new file mode 100644 index 0000000..611c39f Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_large.xcf differ diff --git a/graphics/enemy/boss/stg_2600/bolt_medium.png b/graphics/enemy/boss/stg_2600/bolt_medium.png new file mode 100644 index 0000000..2e35b22 Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_medium.png differ diff --git a/graphics/enemy/boss/stg2600_head.png.import b/graphics/enemy/boss/stg_2600/bolt_medium.png.import similarity index 68% rename from graphics/enemy/boss/stg2600_head.png.import rename to graphics/enemy/boss/stg_2600/bolt_medium.png.import index ebb6434..fc3b685 100644 --- a/graphics/enemy/boss/stg2600_head.png.import +++ b/graphics/enemy/boss/stg_2600/bolt_medium.png.import @@ -2,15 +2,15 @@ importer="texture" type="StreamTexture" -path="res://.import/stg2600_head.png-7f6eac4b8ce6ce153476551d67bc94ab.stex" +path="res://.import/bolt_medium.png-c18f34f796165752e94c6e28216b7e6e.stex" metadata={ "vram_texture": false } [deps] -source_file="res://graphics/enemy/boss/stg2600_head.png" -dest_files=[ "res://.import/stg2600_head.png-7f6eac4b8ce6ce153476551d67bc94ab.stex" ] +source_file="res://graphics/enemy/boss/stg_2600/bolt_medium.png" +dest_files=[ "res://.import/bolt_medium.png-c18f34f796165752e94c6e28216b7e6e.stex" ] [params] diff --git a/graphics/enemy/boss/stg_2600/bolt_medium.xcf b/graphics/enemy/boss/stg_2600/bolt_medium.xcf new file mode 100644 index 0000000..c1d3f4a Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_medium.xcf differ diff --git a/graphics/enemy/boss/stg_2600/bolt_small.xcf b/graphics/enemy/boss/stg_2600/bolt_small.xcf new file mode 100644 index 0000000..94dbe84 Binary files /dev/null and b/graphics/enemy/boss/stg_2600/bolt_small.xcf differ diff --git a/graphics/enemy/boss/stg_2600/foot.png b/graphics/enemy/boss/stg_2600/foot.png new file mode 100644 index 0000000..d8146da Binary files /dev/null and b/graphics/enemy/boss/stg_2600/foot.png differ diff --git a/graphics/enemy/boss/stg2600_leg.png.import b/graphics/enemy/boss/stg_2600/foot.png.import similarity index 69% rename from graphics/enemy/boss/stg2600_leg.png.import rename to graphics/enemy/boss/stg_2600/foot.png.import index 338e751..e56b636 100644 --- a/graphics/enemy/boss/stg2600_leg.png.import +++ b/graphics/enemy/boss/stg_2600/foot.png.import @@ -2,15 +2,15 @@ importer="texture" type="StreamTexture" -path="res://.import/stg2600_leg.png-108ef670d4bc684a89af85dbd1afa5b5.stex" +path="res://.import/foot.png-49e7bfc3417af16c0f1c825106e6cf3a.stex" metadata={ "vram_texture": false } [deps] -source_file="res://graphics/enemy/boss/stg2600_leg.png" -dest_files=[ "res://.import/stg2600_leg.png-108ef670d4bc684a89af85dbd1afa5b5.stex" ] +source_file="res://graphics/enemy/boss/stg_2600/foot.png" +dest_files=[ "res://.import/foot.png-49e7bfc3417af16c0f1c825106e6cf3a.stex" ] [params] diff --git a/graphics/enemy/boss/stg_2600/foot.xcf b/graphics/enemy/boss/stg_2600/foot.xcf new file mode 100644 index 0000000..f6ab01d Binary files /dev/null and b/graphics/enemy/boss/stg_2600/foot.xcf differ diff --git a/graphics/enemy/boss/stg_2600/head_broken.png b/graphics/enemy/boss/stg_2600/head_broken.png new file mode 100644 index 0000000..8eb45d6 Binary files /dev/null and b/graphics/enemy/boss/stg_2600/head_broken.png differ diff --git a/graphics/enemy/boss/stg2600_head_broken.png.import b/graphics/enemy/boss/stg_2600/head_broken.png.import similarity index 67% rename from graphics/enemy/boss/stg2600_head_broken.png.import rename to graphics/enemy/boss/stg_2600/head_broken.png.import index 95e795c..cfb4bf2 100644 --- a/graphics/enemy/boss/stg2600_head_broken.png.import +++ b/graphics/enemy/boss/stg_2600/head_broken.png.import @@ -2,15 +2,15 @@ importer="texture" type="StreamTexture" -path="res://.import/stg2600_head_broken.png-f11802992dc57b057ed8315e0bcb6027.stex" +path="res://.import/head_broken.png-cf8f0c7e5f516f4b2efbd5ac2fee134c.stex" metadata={ "vram_texture": false } [deps] -source_file="res://graphics/enemy/boss/stg2600_head_broken.png" -dest_files=[ "res://.import/stg2600_head_broken.png-f11802992dc57b057ed8315e0bcb6027.stex" ] +source_file="res://graphics/enemy/boss/stg_2600/head_broken.png" +dest_files=[ "res://.import/head_broken.png-cf8f0c7e5f516f4b2efbd5ac2fee134c.stex" ] [params] diff --git a/graphics/enemy/boss/stg_2600/head_cracked.png b/graphics/enemy/boss/stg_2600/head_cracked.png new file mode 100644 index 0000000..98549b3 Binary files /dev/null and b/graphics/enemy/boss/stg_2600/head_cracked.png differ diff --git a/graphics/enemy/boss/stg_2600/head_cracked.png.import b/graphics/enemy/boss/stg_2600/head_cracked.png.import new file mode 100644 index 0000000..f388cec --- /dev/null +++ b/graphics/enemy/boss/stg_2600/head_cracked.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/head_cracked.png-6dfa8a34ba8a3e28ec67d923de7dda93.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/enemy/boss/stg_2600/head_cracked.png" +dest_files=[ "res://.import/head_cracked.png-6dfa8a34ba8a3e28ec67d923de7dda93.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/enemy/boss/stg_2600/head_intact.png b/graphics/enemy/boss/stg_2600/head_intact.png new file mode 100644 index 0000000..5e3ce15 Binary files /dev/null and b/graphics/enemy/boss/stg_2600/head_intact.png differ diff --git a/graphics/enemy/boss/stg_2600/head_intact.png.import b/graphics/enemy/boss/stg_2600/head_intact.png.import new file mode 100644 index 0000000..a39a2d9 --- /dev/null +++ b/graphics/enemy/boss/stg_2600/head_intact.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/head_intact.png-54b42888eb160863193673b5bc2d22d5.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/enemy/boss/stg_2600/head_intact.png" +dest_files=[ "res://.import/head_intact.png-54b42888eb160863193673b5bc2d22d5.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/enemy/boss/stg_2600/leg.png b/graphics/enemy/boss/stg_2600/leg.png new file mode 100644 index 0000000..4129b56 Binary files /dev/null and b/graphics/enemy/boss/stg_2600/leg.png differ diff --git a/graphics/enemy/boss/stg_2600/leg.png.import b/graphics/enemy/boss/stg_2600/leg.png.import new file mode 100644 index 0000000..83a842e --- /dev/null +++ b/graphics/enemy/boss/stg_2600/leg.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/leg.png-e82a4080bfae744da299fb320083a254.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/enemy/boss/stg_2600/leg.png" +dest_files=[ "res://.import/leg.png-e82a4080bfae744da299fb320083a254.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=1 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/enemy/boss/stg_2600/mech_body.xcf b/graphics/enemy/boss/stg_2600/mech_body.xcf new file mode 100644 index 0000000..558504f Binary files /dev/null and b/graphics/enemy/boss/stg_2600/mech_body.xcf differ diff --git a/objects/enemy/2600_bullet.tscn b/objects/enemy/2600_bullet.tscn index 894e37f..cc58f67 100644 --- a/objects/enemy/2600_bullet.tscn +++ b/objects/enemy/2600_bullet.tscn @@ -31,7 +31,6 @@ script = ExtResource( 2 ) [node name="AnimatedSprite" type="AnimatedSprite" parent="."] frames = SubResource( 4 ) -frame = 1 playing = true [node name="Hitbox" type="Area2D" parent="." groups=["arrow"]] diff --git a/objects/enemy/boss/2600.gd b/objects/enemy/boss/2600.gd index 4a8d8d5..eb3d8c8 100644 --- a/objects/enemy/boss/2600.gd +++ b/objects/enemy/boss/2600.gd @@ -2,17 +2,18 @@ extends "res://objects/enemy/enemy.gd" signal entered_phase(phase) -export var shot_speed = 50 +const Bullet = preload("res://objects/enemy/2600_bullet.tscn") + +export var shot_speed: float = 50 export var fire_rate: float = 1 -export var can_shoot = false +export var can_shoot: bool = false -var hp = 3 +var hp: int = 3 -onready var Bullet = preload("res://objects/enemy/2600_bullet.tscn") -onready var positions = $Positions +onready var bullet_positions = $"%BulletPositions" onready var shoot_timer = $ShootTimer onready var anims = $AnimationPlayer -onready var head_sprite = $Body/Head +onready var head_sprite = $"%Head" func _on_ShootTimer_timeout(): @@ -20,7 +21,7 @@ func _on_ShootTimer_timeout(): func shoot(): Audio.play_sound(Audio.a_bullet_barrage,Audio.ac_boss) - for pos in positions.get_children(): + for pos in bullet_positions.get_children(): var bullet = Bullet.instance() bullet.global_position = pos.global_position bullet.direction = Vector2.LEFT.rotated(pos.rotation) @@ -29,7 +30,7 @@ func shoot(): shoot_timer.wait_time = fire_rate func _play_laser_sound(play: bool): - if play: + if play: Audio.play_sound(Audio.a_rainbow_laser,Audio.ac_boss) else: Audio.ac_boss.playing = false @@ -40,15 +41,14 @@ func die(): anims.play("Beam") match hp: 2: - Game.instance_node(load("res://objects/enemy/boss/collapse_blocks.tscn"),0,0,get_parent()) + Game.instance_node(preload("res://objects/enemy/boss/collapse_blocks.tscn"),0,0,get_parent()) emit_signal("entered_phase", 2) - head_sprite.texture = load("res://graphics/enemy/boss/stg2600_head_cracked.png") + head_sprite.texture = preload("res://graphics/enemy/boss/stg_2600/head_cracked.png") 1: shot_speed = 70 fire_rate = 0.8 emit_signal("entered_phase", 3) - $Body/Head/Intelli.visible = true - head_sprite.texture = load("res://graphics/enemy/boss/stg2600_head_broken.png") + head_sprite.texture = preload("res://graphics/enemy/boss/stg_2600/head_broken.png") 0: queue_free() emit_signal("entered_phase", 4) diff --git a/objects/enemy/boss/2600.tscn b/objects/enemy/boss/2600.tscn index 3459568..21b2d37 100644 --- a/objects/enemy/boss/2600.tscn +++ b/objects/enemy/boss/2600.tscn @@ -1,132 +1,61 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=21 format=2] [ext_resource path="res://objects/enemy/boss/2600.gd" type="Script" id=1] -[ext_resource path="res://graphics/enemy/boss/stg2600_head.png" type="Texture" id=2] -[ext_resource path="res://graphics/enemy/boss/stg2600_leg.png" type="Texture" id=3] -[ext_resource path="res://graphics/enemy/boss/stg2600_beam.png" type="Texture" id=4] +[ext_resource path="res://graphics/enemy/boss/stg_2600/beam.png" type="Texture" id=4] [ext_resource path="res://graphics/npc/intelli_idle.png" type="Texture" id=5] +[ext_resource path="res://graphics/enemy/boss/stg_2600/head_intact.png" type="Texture" id=6] +[ext_resource path="res://graphics/enemy/boss/stg_2600/bolt_large.png" type="Texture" id=7] +[ext_resource path="res://graphics/enemy/boss/stg_2600/bolt_medium.png" type="Texture" id=8] +[ext_resource path="res://graphics/enemy/boss/stg_2600/leg.png" type="Texture" id=9] +[ext_resource path="res://scripts/sprite_ext.gd" type="Script" id=10] +[ext_resource path="res://shaders/scale3x.gdshader" type="Shader" id=11] +[ext_resource path="res://graphics/enemy/boss/stg_2600/foot.png" type="Texture" id=12] +[ext_resource path="res://graphics/enemy/boss/stg_2600/beam_gradient.png" type="Texture" id=13] +[ext_resource path="res://shaders/beam_cycle.gdshader" type="Shader" id=14] -[sub_resource type="CanvasItemMaterial" id=7] -blend_mode = 1 +[sub_resource type="ShaderMaterial" id=10] +shader = ExtResource( 14 ) +shader_param/cycle_speed = 1.0 +shader_param/gradient = ExtResource( 13 ) [sub_resource type="RectangleShape2D" id=6] -extents = Vector2( 7.97672, 8 ) +extents = Vector2( 128, 8 ) + +[sub_resource type="ShaderMaterial" id=8] +shader = ExtResource( 11 ) +shader_param/pixel_scale = 1.0 [sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 28.5, 16 ) +extents = Vector2( 20.5, 15.5 ) [sub_resource type="RectangleShape2D" id=2] -extents = Vector2( 44, 16 ) +extents = Vector2( 47, 16 ) [sub_resource type="RectangleShape2D" id=3] -extents = Vector2( 38, 13 ) +extents = Vector2( 23, 13 ) [sub_resource type="Animation" id=4] resource_name = "Beam" -length = 8.0 +length = 4.0 tracks/0/type = "value" -tracks/0/path = NodePath("Body/Head/Beam:modulate") +tracks/0/path = NodePath(".:can_shoot") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PoolRealArray( 0, 0.1, 0.201388, 0.3, 0.4, 0.5, 0.6, 0.701388, 0.8, 0.9, 1, 1.1, 1.20139, 1.3, 1.4, 1.5, 1.6, 1.70139, 1.8, 1.9, 2, 2.1, 2.20139, 2.3, 2.4, 2.5, 2.59861, 2.69861, 2.79861, 2.89861, 3, 3.09861, 3.19861, 3.29861, 3.39861, 3.5, 3.59861, 3.69861, 3.79861, 3.89861, 4, 4.09861, 4.19861, 4.3, 4.39861, 4.49861, 4.59861, 4.69861, 4.8, 4.89861, 4.99861, 5.09861, 5.19861, 5.3, 5.39861, 5.49861, 5.59861, 5.69861, 5.8, 5.89861, 5.99861 ), -"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), -"update": 0, -"values": [ Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ), Color( 1, 0.423529, 0.4, 1 ), Color( 1, 0.894118, 0.4, 1 ), Color( 0.4, 1, 0.443137, 1 ), Color( 0.4, 0.52549, 1, 1 ), Color( 0.992157, 0.4, 1, 1 ) ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("Body/Head/Beam:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0, 1.3, 3.1 ), -"transitions": PoolRealArray( 1, 1, 1 ), -"update": 1, -"values": [ false, true, true ] -} -tracks/2/type = "value" -tracks/2/path = NodePath("Body/Head:rotation_degrees") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/keys = { -"times": PoolRealArray( 0, 1.3, 1.4, 3.1, 3.2, 3.5 ), -"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), -"update": 0, -"values": [ 0.0, 15.0, 15.0, -15.0, -15.0, 0.0 ] -} -tracks/3/type = "value" -tracks/3/path = NodePath("Body/Head/Beam:scale") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/keys = { -"times": PoolRealArray( 0, 1.3, 1.4, 3.1, 3.2 ), -"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), -"update": 0, -"values": [ Vector2( 13.4376, 1 ), Vector2( 14, 0 ), Vector2( 14, 1 ), Vector2( 14, 1 ), Vector2( 14, 0 ) ] -} -tracks/4/type = "value" -tracks/4/path = NodePath("Body/Head/Beam:position") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/keys = { -"times": PoolRealArray( 0, 3.1 ), -"transitions": PoolRealArray( 1, 1 ), -"update": 0, -"values": [ Vector2( -70, -8 ), Vector2( -70, -8 ) ] -} -tracks/5/type = "value" -tracks/5/path = NodePath(".:can_shoot") -tracks/5/interp = 1 -tracks/5/loop_wrap = true -tracks/5/imported = false -tracks/5/enabled = true -tracks/5/keys = { "times": PoolRealArray( 0, 3.5 ), "transitions": PoolRealArray( 1, 1 ), "update": 1, "values": [ false, true ] } -tracks/6/type = "value" -tracks/6/path = NodePath("AnimationPlayer:current_animation") -tracks/6/interp = 1 -tracks/6/loop_wrap = true -tracks/6/imported = false -tracks/6/enabled = true -tracks/6/keys = { -"times": PoolRealArray( 7.9 ), -"transitions": PoolRealArray( 1 ), -"update": 2, -"values": [ "RESET" ] -} -tracks/7/type = "value" -tracks/7/path = NodePath("Body/Head/Beam/Hitbox/CollisionShape2D:disabled") -tracks/7/interp = 1 -tracks/7/loop_wrap = true -tracks/7/imported = false -tracks/7/enabled = true -tracks/7/keys = { -"times": PoolRealArray( 0, 1.3, 3.2 ), -"transitions": PoolRealArray( 1, 1, 1 ), -"update": 1, -"values": [ true, false, true ] -} -tracks/8/type = "method" -tracks/8/path = NodePath(".") -tracks/8/interp = 1 -tracks/8/loop_wrap = true -tracks/8/imported = false -tracks/8/enabled = true -tracks/8/keys = { +tracks/1/type = "method" +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { "times": PoolRealArray( 1.4, 3.2 ), "transitions": PoolRealArray( 1, 1 ), "values": [ { @@ -137,6 +66,54 @@ tracks/8/keys = { "method": "_play_laser_sound" } ] } +tracks/2/type = "value" +tracks/2/path = NodePath("Axle/Head/Beam:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 1.3, 1.4, 3.1, 3.2 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1e-05 ), Vector2( 1, 1e-05 ), Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1, 1e-05 ) ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("Axle/Head/InternalBeam:scale") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 1.3, 3.1, 3.2 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1e-05, 1 ), Vector2( 1, 1 ), Vector2( 1, 1 ), Vector2( 1, 1e-05 ) ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Axle/Head/Beam/Hitbox/BeamShape:disabled") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 1.4, 3.2 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ true, false, true ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("Axle/Head:rotation_degrees") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 1.3, 1.4, 3.1, 3.2, 3.5 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 0, +"values": [ 0.0, 15.0, 15.0, -15.0, -15.0, 0.0 ] +} [sub_resource type="Animation" id=5] length = 0.001 @@ -152,94 +129,308 @@ tracks/0/keys = { "update": 1, "values": [ true ] } +tracks/1/type = "value" +tracks/1/path = NodePath("Axle/Head/Beam:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 1, 1e-05 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Axle/Head/InternalBeam:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ) ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("Axle/Head/Beam/Hitbox/BeamShape:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ true ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("Axle/Head:rotation_degrees") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("Axle/Head/Beam:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ true ] +} [node name="2600" type="Node2D"] position = Vector2( 0, -16 ) script = ExtResource( 1 ) can_shoot = true -[node name="Body" type="Node2D" parent="."] -position = Vector2( 1, 0 ) +[node name="Axle" type="Node2D" parent="."] +position = Vector2( 66, 78 ) -[node name="LegR" type="Sprite" parent="Body"] -position = Vector2( 44, 112 ) -texture = ExtResource( 3 ) +[node name="JointBack" type="Sprite" parent="Axle"] +modulate = Color( 0.75, 0.75, 0.75, 1 ) +position = Vector2( -10, -4 ) +texture = ExtResource( 7 ) +__meta__ = { +"_edit_bone_": true +} -[node name="Head" type="Sprite" parent="Body"] -position = Vector2( 73, 72 ) -texture = ExtResource( 2 ) -offset = Vector2( -23, -24 ) +[node name="LegBack" type="Sprite" parent="Axle/JointBack"] +show_behind_parent = true +rotation = -0.436332 +texture = ExtResource( 9 ) +offset = Vector2( 0, 18 ) +region_enabled = true +region_rect = Rect2( 0, 0, 12, 36 ) +__meta__ = { +"_edit_bone_": true, +"_edit_ik_": true +} -[node name="Beam" type="Sprite" parent="Body/Head"] -visible = false -modulate = Color( 1, 0.423529, 0.4, 1 ) -material = SubResource( 7 ) -position = Vector2( -70, -8 ) -scale = Vector2( 13.4376, 1 ) +[node name="KneeBack" type="Node2D" parent="Axle/JointBack/LegBack"] +position = Vector2( 0, 36 ) +__meta__ = { +"_edit_bone_": true +} + +[node name="ShinBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack"] +rotation = 0.872665 +texture = ExtResource( 9 ) +offset = Vector2( 0, 24 ) +region_enabled = true +region_rect = Rect2( 0, 0, 12, 48 ) +__meta__ = { +"_edit_bone_": true +} + +[node name="FootBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack/ShinBack"] +position = Vector2( 0.00983047, 47.8521 ) +rotation = -0.436332 +texture = ExtResource( 12 ) +offset = Vector2( -11.6527, 2.61113 ) +script = ExtResource( 10 ) +__meta__ = { +"_edit_bone_": true +} +rotation_lock = 0.0 + +[node name="Endpoint" type="Position2D" parent="Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack"] +position = Vector2( -17, 0 ) +__meta__ = { +"_edit_bone_": true, +"_gizmo_extents_": 4.0 +} + +[node name="HitboxTransform" type="RemoteTransform2D" parent="Axle/JointBack/LegBack/KneeBack/ShinBack/FootBack"] +position = Vector2( -8.99999, 5 ) +remote_path = NodePath("../../../../../../../Hitbox/FootShapeBack") + +[node name="KneeBack" type="Sprite" parent="Axle/JointBack/LegBack/KneeBack"] +texture = ExtResource( 8 ) +hframes = 8 +script = ExtResource( 10 ) +fps = 4.0 +rotation_lock = 0.0 + +[node name="Head" type="Sprite" parent="Axle"] +unique_name_in_owner = true +position = Vector2( 0, -4 ) +texture = ExtResource( 6 ) +offset = Vector2( -13, -25 ) +__meta__ = { +"_edit_bone_": true +} + +[node name="End" type="Position2D" parent="Axle/Head"] +position = Vector2( -20, -28 ) +__meta__ = { +"_edit_bone_": true, +"_gizmo_extents_": 4.0 +} + +[node name="HitboxTransform" type="RemoteTransform2D" parent="Axle/Head"] +position = Vector2( -18, -10 ) +remote_path = NodePath("../../../Hitbox/HeadShape") + +[node name="CannonBG" type="ColorRect" parent="Axle/Head"] +show_behind_parent = true +margin_left = -64.0 +margin_top = -18.0 +margin_right = -32.0 +margin_bottom = -2.0 +color = Color( 0.266667, 0.266667, 0.305882, 1 ) + +[node name="Intelli" type="Sprite" parent="Axle/Head"] +show_behind_parent = true +position = Vector2( -37, -32 ) +texture = ExtResource( 5 ) +flip_h = true + +[node name="Beam" type="Sprite" parent="Axle/Head"] +show_behind_parent = true +material = SubResource( 10 ) +position = Vector2( -58, -10 ) +scale = Vector2( 1, 1e-05 ) texture = ExtResource( 4 ) -offset = Vector2( -8, 0 ) +offset = Vector2( -128, 0 ) +region_enabled = true +region_rect = Rect2( 0, 0, 256, 16 ) -[node name="Hitbox" type="Area2D" parent="Body/Head/Beam" groups=["blocks arrow", "enemy_hitbox"]] -position = Vector2( -8.03715, 0 ) +[node name="Hitbox" type="Area2D" parent="Axle/Head/Beam" groups=["blocks arrow", "enemy_hitbox"]] -[node name="CollisionShape2D" type="CollisionShape2D" parent="Body/Head/Beam/Hitbox"] -position = Vector2( 0.0139904, 0 ) +[node name="BeamShape" type="CollisionShape2D" parent="Axle/Head/Beam/Hitbox"] +position = Vector2( -128, 0 ) shape = SubResource( 6 ) disabled = true -[node name="Intelli" type="Sprite" parent="Body/Head"] -visible = false -position = Vector2( -42, -31 ) -rotation = 3.14159 -scale = Vector2( 1, -1 ) -texture = ExtResource( 5 ) +[node name="InternalBeam" type="Sprite" parent="Axle/Head"] +show_behind_parent = true +material = SubResource( 10 ) +position = Vector2( -33, -10 ) +texture = ExtResource( 4 ) +offset = Vector2( -12, 0 ) region_enabled = true -region_rect = Rect2( 0, 0, 20, 14 ) +region_rect = Rect2( 0, 0, 24, 16 ) -[node name="LegL" type="Sprite" parent="Body"] -position = Vector2( 67, 112 ) -texture = ExtResource( 3 ) +[node name="JointFront" type="Sprite" parent="Axle"] +position = Vector2( 11, -4 ) +texture = ExtResource( 7 ) +__meta__ = { +"_edit_bone_": true, +"_edit_ik_": true +} -[node name="Positions" type="Node2D" parent="."] +[node name="LegFront" type="Sprite" parent="Axle/JointFront"] +show_behind_parent = true +rotation = -0.436332 +texture = ExtResource( 9 ) +offset = Vector2( 0, 18 ) +region_enabled = true +region_rect = Rect2( 0, 0, 12, 36 ) +__meta__ = { +"_edit_bone_": true, +"_edit_ik_": true +} + +[node name="ShinFront" type="Sprite" parent="Axle/JointFront/LegFront"] +material = SubResource( 8 ) +position = Vector2( 3.8147e-06, 36 ) +rotation = 0.872665 +texture = ExtResource( 9 ) +offset = Vector2( 0, 24 ) +region_enabled = true +region_rect = Rect2( 0, 0, 12, 48 ) +__meta__ = { +"_edit_bone_": true +} + +[node name="FootFront" type="Sprite" parent="Axle/JointFront/LegFront/ShinFront"] +position = Vector2( 0.00983047, 47.8521 ) +rotation = -0.436332 +texture = ExtResource( 12 ) +offset = Vector2( -11.6527, 2.61113 ) +script = ExtResource( 10 ) +__meta__ = { +"_edit_bone_": true +} +rotation_lock = 0.0 + +[node name="Endpoint" type="Position2D" parent="Axle/JointFront/LegFront/ShinFront/FootFront"] +position = Vector2( -17, 0 ) +__meta__ = { +"_edit_bone_": true, +"_gizmo_extents_": 4.0 +} + +[node name="HitboxTransform" type="RemoteTransform2D" parent="Axle/JointFront/LegFront/ShinFront/FootFront"] +position = Vector2( -8.99999, 5 ) +remote_path = NodePath("../../../../../../Hitbox/FootShapeFront") + +[node name="KneeFront" type="Sprite" parent="Axle/JointFront/LegFront"] +position = Vector2( 3.8147e-06, 36 ) +texture = ExtResource( 8 ) +hframes = 8 +script = ExtResource( 10 ) +fps = 4.0 +rotation_lock = 0.0 + +[node name="BulletPositions" type="Node2D" parent="."] +unique_name_in_owner = true position = Vector2( -153, -24 ) -[node name="Position2D" type="Position2D" parent="Positions"] +[node name="Position1" type="Position2D" parent="BulletPositions"] position = Vector2( 152, 80 ) -[node name="Position2D2" type="Position2D" parent="Positions"] +[node name="Position2" type="Position2D" parent="BulletPositions"] position = Vector2( 152, 88 ) rotation = -0.436332 -[node name="Position2D3" type="Position2D" parent="Positions"] +[node name="Position3" type="Position2D" parent="BulletPositions"] position = Vector2( 152, 96 ) rotation = -0.872665 [node name="ShootTimer" type="Timer" parent="."] +unique_name_in_owner = true autostart = true [node name="WeakSpot" type="Area2D" parent="." groups=["boss_weakspot", "enemy_hitbox"]] position = Vector2( 1, 0 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="WeakSpot"] -position = Vector2( 27.5, 32 ) +position = Vector2( 26.5, 32.5 ) shape = SubResource( 1 ) [node name="Hitbox" type="Area2D" parent="." groups=["blocks_arrow", "enemy_hitbox"]] position = Vector2( 1, 0 ) -[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"] -position = Vector2( 43, 64 ) +[node name="HeadShape" type="CollisionShape2D" parent="Hitbox"] +position = Vector2( 47, 64 ) shape = SubResource( 2 ) -[node name="CollisionShape2D2" type="CollisionShape2D" parent="Hitbox"] -position = Vector2( 48, 155 ) +[node name="FootShapeFront" type="CollisionShape2D" parent="Hitbox"] +position = Vector2( 62, 155 ) +shape = SubResource( 3 ) + +[node name="FootShapeBack" type="CollisionShape2D" parent="Hitbox"] +position = Vector2( 41, 155 ) shape = SubResource( 3 ) [node name="AnimationPlayer" type="AnimationPlayer" parent="."] anims/Beam = SubResource( 4 ) anims/RESET = SubResource( 5 ) -[connection signal="area_entered" from="Body/Head/Beam/Hitbox" to="." method="_on_Hitbox_area_entered"] +[connection signal="area_entered" from="Axle/Head/Beam/Hitbox" to="." method="_on_Hitbox_area_entered"] [connection signal="timeout" from="ShootTimer" to="." method="_on_ShootTimer_timeout"] [connection signal="area_entered" from="WeakSpot" to="." method="_on_WeakSpot_area_entered"] [connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"] diff --git a/scripts/sprite_ext.gd b/scripts/sprite_ext.gd new file mode 100644 index 0000000..7b31681 --- /dev/null +++ b/scripts/sprite_ext.gd @@ -0,0 +1,41 @@ +extends Sprite + + +## emitted when the stop frame is reached +signal stopped() + + +## speed at which to animate +export var fps: float = 0.0 +## frame to stop on when reached +export var stop_at_frame: int = -1 +## whether to animate back and forth instead of loop +export var ping_pong: bool = false +## whether to maintain fixed global rotation +export var rotation_lock: float = NAN + + +## whether the animation is paused +var stopped: bool = false + + +var _time: float = 0.0 + + +func _process(delta): + # rotation lock + if not is_nan(rotation_lock): + global_rotation_degrees = rotation_lock + # do not animate if paused + if stopped: + return + # accumulate time and animate + _time += abs(fps) * delta + if _time >= 1.0: + _time -= 1.0 + # posmod to loop around + frame = posmod(frame + int(sign(fps)), hframes * vframes) + if frame == stop_at_frame: + stopped = true + if ping_pong and frame == 0: + fps = -fps diff --git a/shaders/beam_cycle.gdshader b/shaders/beam_cycle.gdshader new file mode 100644 index 0000000..e05f3ef --- /dev/null +++ b/shaders/beam_cycle.gdshader @@ -0,0 +1,10 @@ +shader_type canvas_item; +render_mode blend_add; + +uniform float cycle_speed = 1.0; +uniform sampler2D gradient; + +void fragment() { + COLOR = texture(TEXTURE, UV); + COLOR *= texture(gradient, vec2(TIME * cycle_speed, 0.0)); +} \ No newline at end of file