Compare commits
2 commits
a42d798490
...
bd42aa7963
| Author | SHA1 | Date | |
|---|---|---|---|
| bd42aa7963 | |||
| 408fbb40e3 |
19 changed files with 254 additions and 73 deletions
|
|
@ -34,6 +34,7 @@ collision_layer = 16
|
|||
collision_mask = 32
|
||||
max_hp = 800
|
||||
canvasItem = NodePath("..")
|
||||
id_block_time = 5.0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="EnemyHurtbox"]
|
||||
rotation = 1.5708
|
||||
|
|
|
|||
|
|
@ -41,6 +41,6 @@ func _on_death():
|
|||
await $AudioStreamPlayer2D.finished
|
||||
self.queue_free()
|
||||
|
||||
func _on_damage_taken(_damage : int, dir: Vector2):
|
||||
func _on_damage_taken(_damage : int, dir: Vector2, _id):
|
||||
current_knockback = - dir * knockback_weight
|
||||
$AudioStreamPlayer2D.play()
|
||||
|
|
|
|||
|
|
@ -9,11 +9,11 @@
|
|||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_cq6dk"]
|
||||
size = Vector2(2, 15)
|
||||
|
||||
[node name="Giant_Leech" type="Node2D"]
|
||||
[node name="Giant_Leech" type="Area2D"]
|
||||
scale = Vector2(1, 1.2)
|
||||
script = ExtResource("1_wfsrb")
|
||||
broadth = 400
|
||||
hp = 180
|
||||
max_hp = 180
|
||||
|
||||
[node name="Segments" type="Node2D" parent="."]
|
||||
|
||||
|
|
@ -68,3 +68,6 @@ shape = SubResource("RectangleShape2D_cq6dk")
|
|||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||
stream = ExtResource("4_ps8gx")
|
||||
|
||||
[connection signal="damage_taken" from="." to="." method="_on_damage_taken"]
|
||||
[connection signal="died" from="." to="." method="_on_death"]
|
||||
|
|
|
|||
|
|
@ -1,20 +1,13 @@
|
|||
extends Node2D
|
||||
extends EnemyHurtbox
|
||||
@export var broadth = 250
|
||||
@export var move_dir = -1
|
||||
@export var angular_speed = 0.25
|
||||
@export var hp = 400
|
||||
var angle = 0.0 if move_dir == 1 else PI
|
||||
|
||||
@onready var segments : Array[Node] = $Segments.get_children()
|
||||
@onready var segment_count = segments.size()
|
||||
var iframes = 0.2
|
||||
var iframe_time = 0
|
||||
var dead = false
|
||||
|
||||
func _ready() -> void:
|
||||
for segment in segments:
|
||||
segment.segment_damaged.connect(hurt)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if dead: return
|
||||
if not $RayCast2D2.has_overlapping_bodies():
|
||||
|
|
@ -22,7 +15,6 @@ func _process(delta: float) -> void:
|
|||
var y = position.length()
|
||||
var ratio = - move_dir * broadth / (2 * y)
|
||||
var rot_angle = - 2 * asin(ratio)
|
||||
iframe_time = max(0, iframe_time - delta)
|
||||
angle -= TAU * delta * angular_speed * move_dir
|
||||
if(angle > PI + abs(rot_angle) / 2 or angle < - abs(rot_angle) / 2):
|
||||
angle = fmod(angle + PI, PI)
|
||||
|
|
@ -77,16 +69,14 @@ func calculate_segment_location_and_rotation (i) -> Dictionary:
|
|||
return {"position" : Vector2.UP * broadth * i / (segment_count - 1),
|
||||
"rotation" : 3 * PI / 2}
|
||||
|
||||
func hurt(damage : int, _dir):
|
||||
if iframe_time <= 0:
|
||||
hp -= damage
|
||||
$AudioStreamPlayer2D.play()
|
||||
if(hp<=0):
|
||||
dead = true
|
||||
for child in get_children():
|
||||
if not child is AudioStreamPlayer2D:
|
||||
child.queue_free()
|
||||
await $AudioStreamPlayer2D.finished
|
||||
queue_free()
|
||||
else:
|
||||
iframe_time = iframes
|
||||
func _on_damage_taken(_damage, _dir, _id):
|
||||
$AudioStreamPlayer2D.play()
|
||||
|
||||
func _on_death():
|
||||
dead = true
|
||||
for child in get_children():
|
||||
if not child is AudioStreamPlayer2D:
|
||||
child.queue_free()
|
||||
$AudioStreamPlayer2D.play()
|
||||
await $AudioStreamPlayer2D.finished
|
||||
queue_free()
|
||||
|
|
|
|||
|
|
@ -9,11 +9,11 @@
|
|||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_cq6dk"]
|
||||
size = Vector2(2, 12)
|
||||
|
||||
[node name="Leech" type="Node2D"]
|
||||
[node name="Leech" type="Area2D"]
|
||||
scale = Vector2(1, 1.2)
|
||||
script = ExtResource("1_6u582")
|
||||
broadth = 200
|
||||
hp = 80
|
||||
max_hp = 80
|
||||
|
||||
[node name="Segments" type="Node2D" parent="."]
|
||||
|
||||
|
|
@ -59,3 +59,6 @@ shape = SubResource("RectangleShape2D_cq6dk")
|
|||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||
stream = ExtResource("4_b1m5t")
|
||||
volume_db = 15.0
|
||||
|
||||
[connection signal="damage_taken" from="." to="." method="_on_damage_taken"]
|
||||
[connection signal="died" from="." to="." method="_on_death"]
|
||||
|
|
|
|||
61
enemies/leech/leech.tscn12453991835.tmp
Normal file
61
enemies/leech/leech.tscn12453991835.tmp
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://b62xcg0dd3vct"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b70f2ylbb3btt" path="res://enemies/leech/leech.gd" id="1_6u582"]
|
||||
[ext_resource type="PackedScene" uid="uid://dn8qucrpq6k72" path="res://enemies/leech/segment_end.tscn" id="2_i1r8c"]
|
||||
[ext_resource type="PackedScene" uid="uid://cvoicwo2xnf7e" path="res://enemies/leech/segment.tscn" id="2_oqch2"]
|
||||
[ext_resource type="PackedScene" uid="uid://chs0u61f45nau" path="res://utils/earth_aligner.tscn" id="3_0r7dp"]
|
||||
[ext_resource type="AudioStream" uid="uid://co07360hqn6fk" path="res://sounds/686321__cjspellsfish__punch-land-soft.wav" id="4_b1m5t"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_cq6dk"]
|
||||
size = Vector2(2, 12)
|
||||
|
||||
[node name="Leech" type="Node2D"]
|
||||
scale = Vector2(1, 1.2)
|
||||
script = ExtResource("1_6u582")
|
||||
broadth = 200
|
||||
max_hp = 80
|
||||
|
||||
[node name="Segments" type="Node2D" parent="."]
|
||||
|
||||
[node name="SegmentEnd1" parent="Segments" instance=ExtResource("2_i1r8c")]
|
||||
rotation = 3.1415927
|
||||
scale = Vector2(-1, -1)
|
||||
|
||||
[node name="Segment2" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment3" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment4" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment5" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment6" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment7" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment8" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="SegmentEnd2" parent="Segments" instance=ExtResource("2_i1r8c")]
|
||||
|
||||
[node name="EarthAligner" parent="." instance=ExtResource("3_0r7dp")]
|
||||
|
||||
[node name="RayCast2D" type="Area2D" parent="."]
|
||||
position = Vector2(248, 31.2)
|
||||
collision_layer = 0
|
||||
collision_mask = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RayCast2D"]
|
||||
position = Vector2(0, 14.8)
|
||||
shape = SubResource("RectangleShape2D_cq6dk")
|
||||
|
||||
[node name="RayCast2D2" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RayCast2D2"]
|
||||
position = Vector2(0, 8.8)
|
||||
shape = SubResource("RectangleShape2D_cq6dk")
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||
stream = ExtResource("4_b1m5t")
|
||||
volume_db = 15.0
|
||||
61
enemies/leech/leech.tscn12459859161.tmp
Normal file
61
enemies/leech/leech.tscn12459859161.tmp
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://b62xcg0dd3vct"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b70f2ylbb3btt" path="res://enemies/leech/leech.gd" id="1_6u582"]
|
||||
[ext_resource type="PackedScene" uid="uid://dn8qucrpq6k72" path="res://enemies/leech/segment_end.tscn" id="2_i1r8c"]
|
||||
[ext_resource type="PackedScene" uid="uid://cvoicwo2xnf7e" path="res://enemies/leech/segment.tscn" id="2_oqch2"]
|
||||
[ext_resource type="PackedScene" uid="uid://chs0u61f45nau" path="res://utils/earth_aligner.tscn" id="3_0r7dp"]
|
||||
[ext_resource type="AudioStream" uid="uid://co07360hqn6fk" path="res://sounds/686321__cjspellsfish__punch-land-soft.wav" id="4_b1m5t"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_cq6dk"]
|
||||
size = Vector2(2, 12)
|
||||
|
||||
[node name="Leech" type="Node2D"]
|
||||
scale = Vector2(1, 1.2)
|
||||
script = ExtResource("1_6u582")
|
||||
broadth = 200
|
||||
max_hp = 80
|
||||
|
||||
[node name="Segments" type="Node2D" parent="."]
|
||||
|
||||
[node name="SegmentEnd1" parent="Segments" instance=ExtResource("2_i1r8c")]
|
||||
rotation = 3.1415927
|
||||
scale = Vector2(-1, -1)
|
||||
|
||||
[node name="Segment2" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment3" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment4" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment5" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment6" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment7" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment8" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="SegmentEnd2" parent="Segments" instance=ExtResource("2_i1r8c")]
|
||||
|
||||
[node name="EarthAligner" parent="." instance=ExtResource("3_0r7dp")]
|
||||
|
||||
[node name="RayCast2D" type="Area2D" parent="."]
|
||||
position = Vector2(248, 31.2)
|
||||
collision_layer = 0
|
||||
collision_mask = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RayCast2D"]
|
||||
position = Vector2(0, 14.8)
|
||||
shape = SubResource("RectangleShape2D_cq6dk")
|
||||
|
||||
[node name="RayCast2D2" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RayCast2D2"]
|
||||
position = Vector2(0, 8.8)
|
||||
shape = SubResource("RectangleShape2D_cq6dk")
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||
stream = ExtResource("4_b1m5t")
|
||||
volume_db = 15.0
|
||||
61
enemies/leech/leech.tscn12471665304.tmp
Normal file
61
enemies/leech/leech.tscn12471665304.tmp
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://b62xcg0dd3vct"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b70f2ylbb3btt" path="res://enemies/leech/leech.gd" id="1_6u582"]
|
||||
[ext_resource type="PackedScene" uid="uid://dn8qucrpq6k72" path="res://enemies/leech/segment_end.tscn" id="2_i1r8c"]
|
||||
[ext_resource type="PackedScene" uid="uid://cvoicwo2xnf7e" path="res://enemies/leech/segment.tscn" id="2_oqch2"]
|
||||
[ext_resource type="PackedScene" uid="uid://chs0u61f45nau" path="res://utils/earth_aligner.tscn" id="3_0r7dp"]
|
||||
[ext_resource type="AudioStream" uid="uid://co07360hqn6fk" path="res://sounds/686321__cjspellsfish__punch-land-soft.wav" id="4_b1m5t"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_cq6dk"]
|
||||
size = Vector2(2, 12)
|
||||
|
||||
[node name="Leech" type="Node2D"]
|
||||
scale = Vector2(1, 1.2)
|
||||
script = ExtResource("1_6u582")
|
||||
broadth = 200
|
||||
max_hp = 80
|
||||
|
||||
[node name="Segments" type="Node2D" parent="."]
|
||||
|
||||
[node name="SegmentEnd1" parent="Segments" instance=ExtResource("2_i1r8c")]
|
||||
rotation = 3.1415927
|
||||
scale = Vector2(-1, -1)
|
||||
|
||||
[node name="Segment2" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment3" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment4" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment5" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment6" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment7" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="Segment8" parent="Segments" instance=ExtResource("2_oqch2")]
|
||||
|
||||
[node name="SegmentEnd2" parent="Segments" instance=ExtResource("2_i1r8c")]
|
||||
|
||||
[node name="EarthAligner" parent="." instance=ExtResource("3_0r7dp")]
|
||||
|
||||
[node name="RayCast2D" type="Area2D" parent="."]
|
||||
position = Vector2(248, 31.2)
|
||||
collision_layer = 0
|
||||
collision_mask = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RayCast2D"]
|
||||
position = Vector2(0, 14.8)
|
||||
shape = SubResource("RectangleShape2D_cq6dk")
|
||||
|
||||
[node name="RayCast2D2" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="RayCast2D2"]
|
||||
position = Vector2(0, 8.8)
|
||||
shape = SubResource("RectangleShape2D_cq6dk")
|
||||
|
||||
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
|
||||
stream = ExtResource("4_b1m5t")
|
||||
volume_db = 15.0
|
||||
|
|
@ -2,11 +2,12 @@ extends Area2D
|
|||
@onready var player = get_tree().get_root().get_node_or_null("main/Player")
|
||||
var damage = 1
|
||||
|
||||
signal segment_damaged
|
||||
#signal segment_damaged
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if (player != null and overlaps_body(player)):
|
||||
player.hurt(damage, self.global_position-player.global_position)
|
||||
|
||||
func _on_hurtbox_damaged(dmg : int, dir : Vector2):
|
||||
segment_damaged.emit(dmg, dir)
|
||||
func _on_hurtbox_damaged(dmg : int, dir : Vector2, id):
|
||||
#segment_damaged.emit(dmg, dir)
|
||||
get_parent().get_parent().hurt(dmg, dir, id)
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ shape = SubResource("RectangleShape2D_fgt1l")
|
|||
collision_layer = 16
|
||||
canvasItem = NodePath("..")
|
||||
flashColor = Color(2.00392, 2.00392, 2.00392, 1)
|
||||
id_block_time = 0
|
||||
id_block_time = 0.0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="EnemyHurtbox"]
|
||||
visible = false
|
||||
|
|
|
|||
4
items/generic/item_pool.gd
Normal file
4
items/generic/item_pool.gd
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
class_name ItemPool extends Resource
|
||||
@export var common : Array[PackedScene]
|
||||
@export var rare : Array[PackedScene]
|
||||
@export var unique : Array[PackedScene]
|
||||
1
items/generic/item_pool.gd.uid
Normal file
1
items/generic/item_pool.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://bgbqefa6h7ckv
|
||||
18
items/generic/item_pool.tres
Normal file
18
items/generic/item_pool.tres
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
[gd_resource type="Resource" load_steps=11 format=3 uid="uid://m6yj45qvoecs"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://b00185vygcka1" path="res://items/immediate_items/heal_item/heal_item.tscn" id="1_2l6sh"]
|
||||
[ext_resource type="PackedScene" uid="uid://wc7kgtomy6xm" path="res://items/permanent_items/extrajump/extrajump.tscn" id="2_rli0f"]
|
||||
[ext_resource type="PackedScene" uid="uid://gwctb2xqsbj" path="res://items/immediate_items/healthup/healthup.tscn" id="3_g002j"]
|
||||
[ext_resource type="PackedScene" uid="uid://ewe36lqcjojk" path="res://items/active_items/updash/updash.tscn" id="4_vpswe"]
|
||||
[ext_resource type="PackedScene" uid="uid://ddn025xnjngko" path="res://items/active_items/bow/bow.tscn" id="5_jwi73"]
|
||||
[ext_resource type="PackedScene" uid="uid://bbpf28ohayd8n" path="res://items/permanent_items/backslash/backslash.tscn" id="6_73uum"]
|
||||
[ext_resource type="Script" uid="uid://bgbqefa6h7ckv" path="res://items/generic/item_pool.gd" id="6_rli0f"]
|
||||
[ext_resource type="PackedScene" uid="uid://bpgo1djj8f1rg" path="res://items/permanent_items/high_jump/high_jump.tscn" id="7_k6eth"]
|
||||
[ext_resource type="PackedScene" uid="uid://bwtdls58ajair" path="res://items/permanent_items/upslash/upslash.tscn" id="8_8cxou"]
|
||||
[ext_resource type="PackedScene" uid="uid://dy17xhg1yrl0o" path="res://items/active_items/horizontal_dash/horizontal_dash.tscn" id="9_esvgx"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("6_rli0f")
|
||||
common = Array[PackedScene]([ExtResource("1_2l6sh")])
|
||||
rare = Array[PackedScene]([ExtResource("2_rli0f"), ExtResource("3_g002j"), ExtResource("4_vpswe"), ExtResource("5_jwi73")])
|
||||
unique = Array[PackedScene]([ExtResource("6_73uum"), ExtResource("7_k6eth"), ExtResource("8_8cxou"), ExtResource("9_esvgx")])
|
||||
|
|
@ -1,14 +1,12 @@
|
|||
class_name ItemSpawn extends Node2D
|
||||
|
||||
@export var common_items : Array[PackedScene]
|
||||
@export var rare_items : Array[PackedScene]
|
||||
static var unique_items : Array[PackedScene] = []
|
||||
static var item_pool : ItemPool = ResourceLoader.load("res://items/generic/item_pool.tres","ItemPool",ResourceLoader.CACHE_MODE_IGNORE)
|
||||
|
||||
@export var rarity_bonus : float = 0
|
||||
@export var guarantee_rare : bool = false
|
||||
|
||||
@export var unique_base_chance = .02
|
||||
@export var rare_base_chance = .04
|
||||
@export var unique_base_chance = 0.08
|
||||
@export var rare_base_chance = .16
|
||||
@export var unique_bonus_multiplier = .025
|
||||
@export var rare_bonus_multiplier = .1
|
||||
|
||||
|
|
@ -19,27 +17,19 @@ func choose_pool() -> Array[PackedScene]:
|
|||
var rare_chance = rare_base_chance + rare_bonus_multiplier * rarity_bonus
|
||||
|
||||
var random = randf()
|
||||
if random < unique_chance && unique_items.size() > 0:
|
||||
if random < unique_chance && item_pool.unique.size() > 0:
|
||||
remove_after_spawn = true
|
||||
return unique_items
|
||||
return item_pool.unique
|
||||
elif random < unique_chance + rare_chance || guarantee_rare:
|
||||
return rare_items
|
||||
return common_items
|
||||
return item_pool.rare
|
||||
return item_pool.common
|
||||
|
||||
func _ready():
|
||||
var pool = choose_pool()
|
||||
var index = randi_range(0, pool.size() - 1)
|
||||
var packed_scene : PackedScene = pool[index]
|
||||
if remove_after_spawn:
|
||||
unique_items.remove_at(index)
|
||||
item_pool.unique.remove_at(index)
|
||||
var object = packed_scene.instantiate()
|
||||
add_child.call_deferred(object)
|
||||
object.reparent.call_deferred(get_parent())
|
||||
|
||||
static func refill_unique_item_pool():
|
||||
unique_items = [
|
||||
load("res://items/permanent_items/backslash/backslash.tscn"),
|
||||
load("res://items/permanent_items/high_jump/high_jump.tscn"),
|
||||
load("res://items/permanent_items/upslash/upslash.tscn"),
|
||||
load("res://items/active_items/horizontal_dash/horizontal_dash.tscn")
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,19 +1,10 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://xj0of571aur1"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://xj0of571aur1"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b8em61mqgdi58" path="res://items/generic/item_spawn.gd" id="1_ms6tn"]
|
||||
[ext_resource type="PackedScene" uid="uid://b00185vygcka1" path="res://items/immediate_items/heal_item/heal_item.tscn" id="2_w6i8k"]
|
||||
[ext_resource type="PackedScene" uid="uid://chs0u61f45nau" path="res://utils/earth_aligner.tscn" id="3_5pwuf"]
|
||||
[ext_resource type="PackedScene" uid="uid://gwctb2xqsbj" path="res://items/immediate_items/healthup/healthup.tscn" id="3_yi7ag"]
|
||||
[ext_resource type="PackedScene" uid="uid://ddn025xnjngko" path="res://items/active_items/bow/bow.tscn" id="4_v0ua0"]
|
||||
[ext_resource type="PackedScene" uid="uid://ewe36lqcjojk" path="res://items/active_items/updash/updash.tscn" id="5_uitgx"]
|
||||
[ext_resource type="PackedScene" uid="uid://wc7kgtomy6xm" path="res://items/permanent_items/extrajump/extrajump.tscn" id="6_xqgya"]
|
||||
|
||||
[node name="ItemSpawn" type="Node2D"]
|
||||
script = ExtResource("1_ms6tn")
|
||||
common_items = Array[PackedScene]([ExtResource("2_w6i8k")])
|
||||
rare_items = Array[PackedScene]([ExtResource("4_v0ua0"), ExtResource("5_uitgx"), ExtResource("3_yi7ag"), ExtResource("6_xqgya")])
|
||||
unique_base_chance = 0.1
|
||||
rare_base_chance = 0.3
|
||||
metadata/_custom_type_script = "uid://b8em61mqgdi58"
|
||||
|
||||
[node name="EarthAligner" parent="." instance=ExtResource("3_5pwuf")]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=15 format=3 uid="uid://cxo6bq26huau7"]
|
||||
[gd_scene load_steps=14 format=3 uid="uid://cxo6bq26huau7"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cmaovvr15b3qk" path="res://player/player.tscn" id="2_1bvp3"]
|
||||
[ext_resource type="Texture2D" uid="uid://d3fpq76anm4t7" path="res://world/Background Prototype/Background prototype.png" id="3_kek77"]
|
||||
|
|
@ -13,7 +13,6 @@
|
|||
[ext_resource type="PackedScene" uid="uid://ca5ndobertnp4" path="res://water/water.tscn" id="10_4c57u"]
|
||||
[ext_resource type="Script" uid="uid://cpaskpj67pnaj" path="res://enemies/boss/boss_spawner.gd" id="10_efxa6"]
|
||||
[ext_resource type="PackedScene" uid="uid://cpe4s6vsn0ujd" path="res://enemies/boss/boss.tscn" id="11_efxa6"]
|
||||
[ext_resource type="PackedScene" uid="uid://ddn025xnjngko" path="res://items/active_items/bow/bow.tscn" id="14_w48qg"]
|
||||
|
||||
[node name="main" type="Node2D"]
|
||||
|
||||
|
|
@ -89,9 +88,6 @@ texture = ExtResource("3_kek77")
|
|||
script = ExtResource("10_efxa6")
|
||||
boss = ExtResource("11_efxa6")
|
||||
|
||||
[node name="Bow" parent="." instance=ExtResource("14_w48qg")]
|
||||
position = Vector2(128, -3178)
|
||||
|
||||
[connection signal="active_item_changed" from="Player" to="UIOverlay/ItemUI" method="_on_player_active_item_changed"]
|
||||
[connection signal="health_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_health_changed"]
|
||||
[connection signal="max_hp_changed" from="Player" to="UIOverlay/Healthbar" method="_on_player_max_hp_changed"]
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
[ext_resource type="Texture2D" uid="uid://b8aih0qr3hssc" path="res://player/sword.png" id="2_hv1tj"]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_e4ynd"]
|
||||
radius = 18.048504
|
||||
height = 36.097008
|
||||
radius = 18.288715
|
||||
height = 36.57743
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_fahsa"]
|
||||
animations = [{
|
||||
|
|
@ -23,9 +23,9 @@ collision_mask = 18
|
|||
script = ExtResource("1_hv1tj")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(-18.97778, 0.61333394)
|
||||
position = Vector2(-27, 0.613)
|
||||
rotation = 1.5708
|
||||
scale = Vector2(-0.635, -1.5)
|
||||
scale = Vector2(-0.635, -1.1)
|
||||
shape = SubResource("CapsuleShape2D_e4ynd")
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
extends Area2D
|
||||
class_name EnemyHurtbox extends Area2D
|
||||
|
||||
@export var max_hp : int
|
||||
@onready var hp = max_hp
|
||||
@export var flash_duration = 0.2
|
||||
@export var canvasItem : CanvasItem
|
||||
@export var flashColor : Color = Color(1.5, 1.5, 1.5)
|
||||
@export var id_block_time = 10
|
||||
@export var id_block_time = 0.12
|
||||
var flash_time = 0
|
||||
var blocked_damage_ids : Array[int] = []
|
||||
|
||||
signal damage_taken(damage, dir)
|
||||
signal damage_taken(damage, dir, id)
|
||||
signal died
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
|
|
@ -23,7 +23,7 @@ func hurt(damage : int, dir : Vector2 = Vector2.ZERO, id : int = -1):
|
|||
if canvasItem != null: canvasItem.modulate = flashColor
|
||||
flash_time = flash_duration
|
||||
hp = max(hp-damage, 0)
|
||||
damage_taken.emit(damage, dir)
|
||||
damage_taken.emit(damage, dir, id)
|
||||
if(hp <= 0):
|
||||
die()
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
extends Node2D
|
||||
|
||||
func _ready() -> void:
|
||||
ItemSpawn.refill_unique_item_pool()
|
||||
ItemSpawn.item_pool = ResourceLoader.load("res://items/generic/item_pool.tres","ItemPool",ResourceLoader.CACHE_MODE_IGNORE)
|
||||
|
||||
func get_grid() -> Grid:
|
||||
return $Grid
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue