diff --git a/maps/boss/boss1_arena.gd b/maps/boss/boss1_arena.gd new file mode 100644 index 0000000..cf7dd9f --- /dev/null +++ b/maps/boss/boss1_arena.gd @@ -0,0 +1,14 @@ +extends "res://maps/map.gd" + + + +func _on_Boss1_died(): + Game.change_map(load("res://maps/level_select.tscn")) + + +func _on_Boss1_entered_phase(phase): + match phase: + 2: + $DelayedArrow2.start() + 3: + $DelayedArrow3.start() diff --git a/maps/boss/boss1_arena.tscn b/maps/boss/boss1_arena.tscn index 9887a47..545a26e 100644 --- a/maps/boss/boss1_arena.tscn +++ b/maps/boss/boss1_arena.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=11 format=2] +[gd_scene load_steps=13 format=2] [ext_resource path="res://objects/enemy/boss/boss1.tscn" type="PackedScene" id=1] [ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=2] @@ -6,10 +6,12 @@ [ext_resource path="res://graphics/backgrounds/mountain_sunset.png" type="Texture" id=4] [ext_resource path="res://tilesets/t_mountain.tres" type="TileSet" id=5] [ext_resource path="res://objects/hud/hud.tscn" type="PackedScene" id=6] -[ext_resource path="res://maps/map.gd" type="Script" id=7] +[ext_resource path="res://maps/boss/boss1_arena.gd" type="Script" id=7] +[ext_resource path="res://objects/collectibles/arrow.tscn" type="PackedScene" id=8] [ext_resource path="res://objects/environment/turniwood/turning_platform.tscn" type="PackedScene" id=9] [ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=10] [ext_resource path="res://audio/music/klystron.mp3" type="AudioStream" id=11] +[ext_resource path="res://objects/delayed_instance.tscn" type="PackedScene" id=12] [node name="Map" type="Node2D" groups=["map"]] pause_mode = 1 @@ -73,3 +75,25 @@ position = Vector2( 112, 144 ) [node name="Ladder2" parent="." instance=ExtResource( 10 )] position = Vector2( 64, 104 ) scale = Vector2( 1, 3 ) + +[node name="DelayedArrow" parent="." instance=ExtResource( 12 )] +delay = 5.0 +autostart = true + +[node name="Arrow" parent="DelayedArrow" instance=ExtResource( 8 )] +position = Vector2( 96, 128 ) + +[node name="DelayedArrow2" parent="." instance=ExtResource( 12 )] +delay = 5.0 + +[node name="Arrow2" parent="DelayedArrow2" instance=ExtResource( 8 )] +position = Vector2( 40, 96 ) + +[node name="DelayedArrow3" parent="." instance=ExtResource( 12 )] +delay = 5.0 + +[node name="Arrow3" parent="DelayedArrow3" instance=ExtResource( 8 )] +position = Vector2( 96, 80 ) + +[connection signal="died" from="Boss1" to="." method="_on_Boss1_died"] +[connection signal="entered_phase" from="Boss1" to="." method="_on_Boss1_entered_phase"] diff --git a/objects/enemy/boss/boss1.gd b/objects/enemy/boss/boss1.gd index bb6b33d..9b97f9e 100644 --- a/objects/enemy/boss/boss1.gd +++ b/objects/enemy/boss/boss1.gd @@ -1,5 +1,7 @@ extends "res://objects/enemy/enemy_move_sidesideupdown.gd" +signal entered_phase(phase) + var hp = 3 var arrow_speed = 80 export var phase2_speed = 100 @@ -13,16 +15,6 @@ export var arrow_spawns = [Vector2(0,0),Vector2(0,0),Vector2(0,0)] func _ready(): seed(hash("HEROMARK2")) -func _physics_process(delta): - match hp: - 2: - speed = phase2_speed - shoot_time = Vector2(0.4,0.5) - 1: - speed = phase3_speed - shoot_time = Vector2(0.3,0.5) - 0: die() - func shoot(): var arrow = ArrowProjectile.instance() arrow.global_position = Vector2( @@ -38,3 +30,17 @@ func shoot(): func _on_ShootTimer_timeout(): shoot_timer.start(rand_range(shoot_time.x,shoot_time.y)) shoot() + +func die(): + hp -= 1 + match hp: + 2: + emit_signal("entered_phase", 2) + speed = phase2_speed + shoot_time = Vector2(0.4,0.5) + 1: + emit_signal("entered_phase", 3) + speed = phase3_speed + shoot_time = Vector2(0.3,0.5) + 0: + .die() diff --git a/objects/enemy/enemy.gd b/objects/enemy/enemy.gd index 58b5188..e6f1c1a 100644 --- a/objects/enemy/enemy.gd +++ b/objects/enemy/enemy.gd @@ -8,6 +8,8 @@ extends Node2D const DeathParticles = preload("res://objects/enemy/death_particles.tscn") +signal died() + ### these variables have been replaced with groups to put on the hitbox ### - "blocks_arrow" ### - "blocks_sword" @@ -36,4 +38,5 @@ func die(): Game.play_sound(death_sound, Game.ac_die) Game.score += score_for_killing + emit_signal("died") queue_free() diff --git a/objects/player/arrow_projectile.gd b/objects/player/arrow_projectile.gd index dd90fda..d197081 100644 --- a/objects/player/arrow_projectile.gd +++ b/objects/player/arrow_projectile.gd @@ -45,10 +45,7 @@ func _on_Hitbox_area_entered(area): _make_sparks() else: # kill targeted node - if !area.is_in_group("boss_weakspot"): - target.die() - else: - target.hp -=1 + target.die() #decrease arrows if enemy killed if target_group == "enemy_hitbox": Game.arrows = max(0, Game.arrows - 1) # clamp arrows above 0