From ad7cb69355c83a49abbda982ff585d553c4c66d2 Mon Sep 17 00:00:00 2001 From: Felipe M Date: Sat, 22 May 2021 17:26:11 +0200 Subject: [PATCH] Boss encounter door lock --- metroidvania/Levels/Level_99.gd | 17 +++++++++++++ metroidvania/Levels/Level_99.tscn | 29 ++++++++++++++++++++-- metroidvania/Scenes/Enemies/BossEnemy.tscn | 6 +++-- metroidvania/Scenes/Enemies/Enemy.gd | 1 + metroidvania/Scenes/World/Trigger.gd | 11 ++++++++ metroidvania/Scenes/World/Trigger.tscn | 15 +++++++++++ 6 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 metroidvania/Levels/Level_99.gd create mode 100644 metroidvania/Scenes/World/Trigger.gd create mode 100644 metroidvania/Scenes/World/Trigger.tscn diff --git a/metroidvania/Levels/Level_99.gd b/metroidvania/Levels/Level_99.gd new file mode 100644 index 0000000..084073b --- /dev/null +++ b/metroidvania/Levels/Level_99.gd @@ -0,0 +1,17 @@ +extends "res://Levels/Level.gd" + +onready var Boss = $BossEnemy +onready var DoorLock = $DoorLock +onready var Trigger = $Trigger + +const PLAYER_BIT = 0 + +func set_door_lock(value): + DoorLock.visible = value + DoorLock.set_collision_mask_bit(PLAYER_BIT, value) + +func _on_Trigger_triggered(): + set_door_lock(true) + +func _on_BossEnemy_died(): + set_door_lock(false) diff --git a/metroidvania/Levels/Level_99.tscn b/metroidvania/Levels/Level_99.tscn index 0bc790b..9569f62 100644 --- a/metroidvania/Levels/Level_99.tscn +++ b/metroidvania/Levels/Level_99.tscn @@ -1,12 +1,16 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://Levels/Level.tscn" type="PackedScene" id=1] [ext_resource path="res://Scenes/Enemies/BossEnemy.tscn" type="PackedScene" id=2] [ext_resource path="res://Levels/Door.tscn" type="PackedScene" id=3] [ext_resource path="res://Levels/DoorConnections/01_99.tres" type="Resource" id=4] [ext_resource path="res://Scenes/Objects/Spikes.tscn" type="PackedScene" id=5] +[ext_resource path="res://Levels/Level_99.gd" type="Script" id=6] +[ext_resource path="res://Scenes/World/Trigger.tscn" type="PackedScene" id=7] +[ext_resource path="res://Scenes/TileMap.tscn" type="PackedScene" id=8] [node name="Level_99" instance=ExtResource( 1 )] +script = ExtResource( 6 ) [node name="Door" parent="." index="0" instance=ExtResource( 3 )] position = Vector2( -8, 16 ) @@ -15,7 +19,10 @@ connection = ExtResource( 4 ) new_level_path = "res://Levels/Level_01.tscn" [node name="BossEnemy" parent="." index="1" instance=ExtResource( 2 )] -position = Vector2( 167, -25 ) +position = Vector2( 242, -25 ) + +[node name="EnemyStats" parent="BossEnemy" index="6"] +max_health = 5 [node name="TileMap" parent="." index="2"] tile_data = PoolIntArray( -589821, 0, 4, -589820, 0, 196609, -589819, 0, 196609, -589818, 0, 196609, -589817, 0, 196609, -589816, 0, 196609, -589815, 0, 196609, -589814, 0, 196609, -589813, 0, 196609, -589812, 0, 196609, -589811, 0, 196609, -589810, 0, 196609, -589809, 0, 196609, -589808, 0, 196609, -589807, 0, 7, -524286, 0, 4, -524285, 0, 196615, -524271, 0, 196612, -524270, 0, 7, -458750, 0, 65539, -458734, 0, 65539, -393215, 0, 4, -393214, 0, 196615, -393198, 0, 196612, -393197, 0, 7, -327679, 0, 65539, -327661, 0, 65539, -262144, 0, 4, -262143, 0, 196615, -262125, 0, 196612, -262124, 0, 7, -196608, 0, 65539, -196588, 0, 65539, -131072, 0, 65539, -131052, 0, 65539, -1, 0, 196608, -65536, 0, 196615, -65516, 0, 65539, 20, 0, 65539, 65556, 0, 65539, 196607, 0, 196608, 131072, 0, 7, 131091, 0, 4, 131092, 0, 196615, 196608, 0, 196612, 196609, 0, 7, 196612, 0, 0, 196613, 0, 1, 196614, 0, 2, 196616, 0, 0, 196617, 0, 2, 196621, 0, 3, 196623, 0, 3, 196626, 0, 4, 196627, 0, 196615, 262145, 0, 196612, 262146, 0, 196609, 262147, 0, 196609, 262148, 0, 196614, 262149, 0, 131073, 262150, 0, 196613, 262151, 0, 196609, 262152, 0, 196614, 262153, 0, 196613, 262154, 0, 196609, 262155, 0, 196609, 262156, 0, 196609, 262157, 0, 196616, 262158, 0, 196609, 262159, 0, 196616, 262160, 0, 196609, 262161, 0, 196609, 262162, 0, 196615 ) @@ -45,3 +52,21 @@ rotation = -1.5708 [node name="Spikes6" parent="Spikes" index="5" instance=ExtResource( 5 )] position = Vector2( 304, -6 ) rotation = -1.5708 + +[node name="DoorLock" parent="." index="4" instance=ExtResource( 8 )] +visible = false +collision_layer = 0 +tile_data = PoolIntArray( 65535, 0, 3, 42, 0, 196611, 131071, 0, 131075 ) + +[node name="Trigger" parent="." index="5" instance=ExtResource( 7 )] + +[node name="Collision" parent="Trigger" index="0"] +position = Vector2( 12, 16 ) + +[connection signal="died" from="BossEnemy" to="." method="_on_BossEnemy_died"] +[connection signal="triggered" from="Trigger" to="." method="_on_Trigger_triggered"] + +[editable path="BossEnemy"] +[editable path="BossEnemy/Hurtbox"] +[editable path="BossEnemy/Hitbox"] +[editable path="Trigger"] diff --git a/metroidvania/Scenes/Enemies/BossEnemy.tscn b/metroidvania/Scenes/Enemies/BossEnemy.tscn index 78a3e88..3766367 100644 --- a/metroidvania/Scenes/Enemies/BossEnemy.tscn +++ b/metroidvania/Scenes/Enemies/BossEnemy.tscn @@ -1010,11 +1010,13 @@ shape = SubResource( 4 ) max_health = 100 [node name="RightWallCheck" type="RayCast2D" parent="." index="7"] -cast_to = Vector2( 0, 16 ) +enabled = true +cast_to = Vector2( 16, 0 ) collision_mask = 2 [node name="LeftWallCheck" type="RayCast2D" parent="." index="8"] -cast_to = Vector2( 0, -16 ) +enabled = true +cast_to = Vector2( -16, 0 ) collision_mask = 2 [node name="Timer" type="Timer" parent="." index="9"] diff --git a/metroidvania/Scenes/Enemies/Enemy.gd b/metroidvania/Scenes/Enemies/Enemy.gd index 9fbd783..8e177da 100644 --- a/metroidvania/Scenes/Enemies/Enemy.gd +++ b/metroidvania/Scenes/Enemies/Enemy.gd @@ -16,3 +16,4 @@ func _on_Hurtbox_hit(damage): func _on_EnemyStats_enemy_died(): Utils.instance_scene_on_main(EnemyDeathEffect, global_position) queue_free() + emit_signal("died") diff --git a/metroidvania/Scenes/World/Trigger.gd b/metroidvania/Scenes/World/Trigger.gd new file mode 100644 index 0000000..f1b0e82 --- /dev/null +++ b/metroidvania/Scenes/World/Trigger.gd @@ -0,0 +1,11 @@ +extends Area2D + +signal triggered + +var enabled = true + + +func _on_Trigger_body_entered(body): + if enabled: + emit_signal("triggered") + enabled = false diff --git a/metroidvania/Scenes/World/Trigger.tscn b/metroidvania/Scenes/World/Trigger.tscn new file mode 100644 index 0000000..006c4ad --- /dev/null +++ b/metroidvania/Scenes/World/Trigger.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://Scenes/World/Trigger.gd" type="Script" id=1] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 8, 16 ) + +[node name="Trigger" type="Area2D"] +script = ExtResource( 1 ) + +[node name="Collision" type="CollisionShape2D" parent="."] +position = Vector2( 23, 16 ) +shape = SubResource( 1 ) + +[connection signal="body_entered" from="." to="." method="_on_Trigger_body_entered"]