From 7df261b58e4f7d98c74e399a0c7acbb45f2da450 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sat, 27 May 2023 22:01:03 -0400 Subject: [PATCH] EEEEELLLLLLSSSSS uuuuuuuuuuuuuuuuuuuuuu --- graphics/enemy/eel_body.png | Bin 0 -> 610 bytes graphics/enemy/eel_body.png.import | 35 ++++++++++ graphics/enemy/eel_head.png | Bin 0 -> 718 bytes graphics/enemy/eel_head.png.import | 35 ++++++++++ graphics/enemy/eel_inner_border.png | Bin 0 -> 4281 bytes graphics/enemy/eel_inner_border.png.import | 35 ++++++++++ graphics/enemy/eel_tail.png | Bin 0 -> 624 bytes graphics/enemy/eel_tail.png.import | 35 ++++++++++ maps/abyss.tscn | 6 +- objects/enemy/eel.gd | 55 +++++++++++++++ objects/enemy/eel.tscn | 77 +++++++++++++++++++++ 11 files changed, 277 insertions(+), 1 deletion(-) create mode 100644 graphics/enemy/eel_body.png create mode 100644 graphics/enemy/eel_body.png.import create mode 100644 graphics/enemy/eel_head.png create mode 100644 graphics/enemy/eel_head.png.import create mode 100644 graphics/enemy/eel_inner_border.png create mode 100644 graphics/enemy/eel_inner_border.png.import create mode 100644 graphics/enemy/eel_tail.png create mode 100644 graphics/enemy/eel_tail.png.import create mode 100644 objects/enemy/eel.gd create mode 100644 objects/enemy/eel.tscn diff --git a/graphics/enemy/eel_body.png b/graphics/enemy/eel_body.png new file mode 100644 index 0000000000000000000000000000000000000000..087b22992a23926ea132d6a35f28f8d9550a9ee9 GIT binary patch literal 610 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|!3HE<7s&`SFfg`cIy(n=Iy);A6y>L7=A<$( zXiTh~XzOv>Guniq55*y1P1p*E$JmwL~opWuNT5e}Sj>q(_f5c8JOR ziCAN`!{YU;2U;9W@(Szp{JQjl9{r!>)Gfi^_xt0!dyn7ADr{NhWBgmFVOg}B+EkI^ zpP`07x)>I5B#YI}ocYz#)9Y|?&E3PtukW@v|H$LUu7wTE+d^poF@$4C4_l~1M{Mxo>PPMt&xXJ{Z&i&Ln z=d{*y-E&b}4_bYHqR%7xWoqiW%QB8!-4RVJf?QH77I1MFMwJHnq-5B?eAsVQ*BQgL zQ!C*~gafZs%5naG?E80{c25@03)0|ZiOcz&EW+`Q>Fu)IdimRBzga%mGly4QkI!Z_ zp1;I=chnmWj(leE>#@E!nf1yW9xmUNbE5Cba!rx$1HUC}gXJW4v9evebIao zE1|#GEG$@#c}>~-?&G_E_wN0(z5Mb$`?BjryS?*7I)Tx`mgMd30;GZ9r}OT5AjMhW z5n0T@z_%ZS87)|YRe*x*C7!;n?9W-H1l8rMew;rB6p}1)jVN)>&&^HED`9XhN=+EX>4Tx04R}tkv&MmKpe$iQ%glE9qb^*AwzYti;9R-twIqhgj%6h2a`*`ph-)T z;^HW{799LotU9+0Yt2!bCVt}afBE>hzEl0u6Z503ls?%w0>9U!!-Of&lufTmkU zCY2O(`BgFaiU6VrV-|jyne{nIO2cz}-NVP%yExDCKKJJsR0}2pd?Imz)eVbygLrz= zs&n2ajTkI``x+3>Ea1Wvu?8mOQO3vpU?QcPrMKk4C*I(~^<3b`s^ z0{s+IiHH(uIZc-=-1YT_WV-yJP0_~=4e;?a+`vmYm16O+2Uuyv~pQJat zTI>i2Zvz+CT}{~oE_Z<8r@Cy&j^w8)6pO(78GTb87`g=p*4*AY`#607veZ@j1~@nb z#!8gE?(y#a-roK_)9LRArq^=2OKud200006VoOIv00000008+zyMF)x010qNS#tmY z4!-~Z4!;371ydvd000McNliru=LH%OCOco?8dd-R02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{005>*L_t(2&tqgj1^r(?GYCfeGDYWHu82KMb>AbEjnl#1+R^{D*6TiNW0W|NsC042+D74Cpk> zMwkXBxX&0FF=%w>F)%PNu;4QN$8`;c2WNi46<)Y>AMT|8*B2==D44LJSiQXDCxd3( zeVp;||N0_DxL{-tJHv%bH?T$?BaT?c8Pg;K0Ai&`7_-NP&j0`b07*qoM6N<$f;g@z A&Hw-a literal 0 HcmV?d00001 diff --git a/graphics/enemy/eel_head.png.import b/graphics/enemy/eel_head.png.import new file mode 100644 index 0000000..f48ab5d --- /dev/null +++ b/graphics/enemy/eel_head.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/eel_head.png-29e1a9b9dd541b3771a77751dd32cb42.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/enemy/eel_head.png" +dest_files=[ "res://.import/eel_head.png-29e1a9b9dd541b3771a77751dd32cb42.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/eel_inner_border.png b/graphics/enemy/eel_inner_border.png new file mode 100644 index 0000000000000000000000000000000000000000..3e33ee3846b16fc902366532b1bcb071c531a834 GIT binary patch literal 4281 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 KMNUMnLSTY=&G{ez literal 0 HcmV?d00001 diff --git a/graphics/enemy/eel_tail.png.import b/graphics/enemy/eel_tail.png.import new file mode 100644 index 0000000..401b397 --- /dev/null +++ b/graphics/enemy/eel_tail.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/eel_tail.png-359163ddc00e2ac41549552381ce8558.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/enemy/eel_tail.png" +dest_files=[ "res://.import/eel_tail.png-359163ddc00e2ac41549552381ce8558.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/maps/abyss.tscn b/maps/abyss.tscn index 016ce09..d5a153a 100644 --- a/maps/abyss.tscn +++ b/maps/abyss.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=20 format=2] +[gd_scene load_steps=21 format=2] [ext_resource path="res://maps/map.gd" type="Script" id=1] [ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=2] @@ -15,6 +15,7 @@ [ext_resource path="res://objects/environment/bubble/bubble.tscn" type="PackedScene" id=13] [ext_resource path="res://objects/enemy/squig.tscn" type="PackedScene" id=14] [ext_resource path="res://objects/enemy/antlion.tscn" type="PackedScene" id=15] +[ext_resource path="res://objects/enemy/eel.tscn" type="PackedScene" id=16] [sub_resource type="CanvasItemMaterial" id=12] blend_mode = 3 @@ -148,6 +149,9 @@ scale = Vector2( 1, 7 ) [node name="Antlion" parent="Enemies" instance=ExtResource( 15 )] position = Vector2( 80, 256 ) +[node name="Eel" parent="Enemies" instance=ExtResource( 16 )] +position = Vector2( 200, 80 ) + [node name="Mines" type="Node2D" parent="Enemies"] [node name="Mine" parent="Enemies/Mines" instance=ExtResource( 11 )] diff --git a/objects/enemy/eel.gd b/objects/enemy/eel.gd new file mode 100644 index 0000000..296c505 --- /dev/null +++ b/objects/enemy/eel.gd @@ -0,0 +1,55 @@ +extends "res://objects/enemy/enemy.gd" + + +const SEGMENT_LENGTH: float = 4.0 +const BASE_LENGTH: float = 20.0 # combined length of head and tail + + +export var segments: int = 8 +export var speed: float = 32.0 +export var wave_length: float = 8.0 +export var wave_amplitude: float = 4.0 + + +onready var sector: Vector2 = Game.get_sector(global_position) + + +onready var hitbox: Area2D = $Hitbox +onready var first_segment: CollisionShape2D = $"%Segment" +onready var segment_start: Position2D = $"%SegmentStart" + + +func _ready() -> void: + hitbox.remove_child(first_segment) + for i in segments: + var new_segment = first_segment.duplicate() + new_segment.position.x = segment_start.position.x + SEGMENT_LENGTH * float(i) + hitbox.add_child(new_segment) + $Hitbox/TailShape.position.x = segment_start.position.x + SEGMENT_LENGTH * segments + _wave_segments() + +func _physics_process(delta: float) -> void: + # move + global_position.x -= speed * delta * sign(scale.x) + # make segments wibble + _wave_segments() + # check for wrapping + var sector_rect = Rect2(sector * Game.resolution, Game.resolution) + var total_length = BASE_LENGTH + (SEGMENT_LENGTH * float(segments)) + var eel_rect = Rect2(global_position + Vector2(-2.0, 4.0), Vector2(total_length, 0.0)) + if not sector_rect.intersects(eel_rect): + global_position.x += (Game.resolution.x + total_length) * sign(scale.x) + +func _wave_segments() -> void: + for segment in hitbox.get_children(): + if segment is Node2D: + segment.position.y = sin(segment.global_position.x / wave_length) * wave_amplitude + +func die() -> void: + for segment in hitbox.get_children(): + if segment is Node2D: + var death_particles = DeathParticles.instance() + death_particles.global_position = segment.global_position + death_particles.emitting = true + get_parent().add_child(death_particles) + .die() diff --git a/objects/enemy/eel.tscn b/objects/enemy/eel.tscn new file mode 100644 index 0000000..79cf82a --- /dev/null +++ b/objects/enemy/eel.tscn @@ -0,0 +1,77 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://objects/enemy/eel.gd" type="Script" id=1] +[ext_resource path="res://graphics/enemy/eel_head.png" type="Texture" id=2] +[ext_resource path="res://graphics/enemy/eel_body.png" type="Texture" id=3] +[ext_resource path="res://graphics/enemy/eel_tail.png" type="Texture" id=4] +[ext_resource path="res://graphics/enemy/eel_inner_border.png" type="Texture" id=5] + +[sub_resource type="RectangleShape2D" id=3] +extents = Vector2( 2, 2 ) + +[sub_resource type="RectangleShape2D" id=2] +extents = Vector2( 2, 2 ) + +[node name="Eel" type="Node2D" groups=["enemy"]] +script = ExtResource( 1 ) +blood = false +wave_amplitude = 6.0 + +[node name="Hitbox" type="Area2D" parent="." groups=["enemy_hitbox"]] +position = Vector2( 0, 4 ) + +[node name="SegmentStart" type="Position2D" parent="Hitbox"] +unique_name_in_owner = true +position = Vector2( 12, 0 ) +__meta__ = { +"_gizmo_extents_": 5.0 +} + +[node name="HeadShape" type="CollisionPolygon2D" parent="Hitbox"] +position = Vector2( 8, 0 ) +polygon = PoolVector2Array( -7, -2, 2, -2, 2, 2, -7, 2 ) + +[node name="HeadSprite" type="Sprite" parent="Hitbox/HeadShape"] +show_behind_parent = true +position = Vector2( -4, 0 ) +texture = ExtResource( 2 ) + +[node name="InnerBorder" type="Sprite" parent="Hitbox/HeadShape"] +position = Vector2( 3, 0 ) +z_index = -1 +texture = ExtResource( 5 ) + +[node name="TailShape" type="CollisionShape2D" parent="Hitbox"] +position = Vector2( 16, 0 ) +shape = SubResource( 3 ) + +[node name="TailSprite" type="Sprite" parent="Hitbox/TailShape"] +show_behind_parent = true +position = Vector2( 2, 0 ) +texture = ExtResource( 4 ) + +[node name="InnerBorder" type="Sprite" parent="Hitbox/TailShape"] +position = Vector2( -2, 0 ) +z_index = -1 +texture = ExtResource( 5 ) + +[node name="Segment" type="CollisionShape2D" parent="Hitbox"] +unique_name_in_owner = true +position = Vector2( 12, 0 ) +shape = SubResource( 2 ) + +[node name="SegmentSprite" type="Sprite" parent="Hitbox/Segment"] +show_behind_parent = true +texture = ExtResource( 3 ) + +[node name="InnerBorder" type="Sprite" parent="Hitbox/Segment"] +position = Vector2( -2, 0 ) +z_index = -1 +texture = ExtResource( 5 ) + +[node name="InnerBorder2" type="Sprite" parent="Hitbox/Segment"] +position = Vector2( 3, 0 ) +z_index = -1 +texture = ExtResource( 5 ) + +[connection signal="area_entered" from="Hitbox" to="." method="_on_Hitbox_area_entered"]