Skip to content

Commit b7a401a

Browse files
committed
Add boss level
1 parent 19d9d0d commit b7a401a

File tree

8 files changed

+183
-18
lines changed

8 files changed

+183
-18
lines changed

2d/BossTrigger.gd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ func _ready():
88

99
func on_enter(body):
1010
if body.is_in_group("player"):
11-
print("enter")
1211
get_node(door).set_enabled(true)
12+
$"../Boss".start()

2d/Scene2D.tscn

Lines changed: 58 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[gd_scene load_steps=26 format=2]
1+
[gd_scene load_steps=29 format=2]
22

33
[ext_resource path="res://2d/Player.tscn" type="PackedScene" id=1]
44
[ext_resource path="res://assets/object.png" type="Texture" id=2]
@@ -17,6 +17,8 @@
1717
[ext_resource path="res://2d/box_emitter.tscn" type="PackedScene" id=15]
1818
[ext_resource path="res://2d/BossTrigger.gd" type="Script" id=16]
1919
[ext_resource path="res://assets/player.png" type="Texture" id=17]
20+
[ext_resource path="res://assets/health.png" type="Texture" id=18]
21+
[ext_resource path="res://script/Boss.gd" type="Script" id=19]
2022

2123
[sub_resource type="RectangleShape2D" id=1]
2224
extents = Vector2( 535.011, 43.5632 )
@@ -37,12 +39,15 @@ extents = Vector2( 538.375, 43.5917 )
3739
[sub_resource type="RectangleShape2D" id=6]
3840
extents = Vector2( 534.938, 43.9859 )
3941

40-
[sub_resource type="RectangleShape2D" id=7]
41-
extents = Vector2( 622.266, 128.901 )
42-
4342
[sub_resource type="CircleShape2D" id=8]
4443
radius = 65.399
4544

45+
[sub_resource type="CircleShape2D" id=9]
46+
radius = 70.4281
47+
48+
[sub_resource type="RectangleShape2D" id=7]
49+
extents = Vector2( 622.266, 128.901 )
50+
4651
[node name="scene" type="Node2D"]
4752

4853
[node name="Room" type="Node2D" parent="."]
@@ -1147,6 +1152,48 @@ dark = true
11471152

11481153
[node name="End" type="Node2D" parent="."]
11491154

1155+
[node name="Win" type="Label" parent="End"]
1156+
visible = false
1157+
margin_left = 15453.0
1158+
margin_top = -11911.1
1159+
margin_right = 16220.0
1160+
margin_bottom = -11696.1
1161+
custom_fonts/font = SubResource( 2 )
1162+
text = "You won"
1163+
autowrap = true
1164+
__meta__ = {
1165+
"_edit_use_anchors_": false
1166+
}
1167+
1168+
[node name="Boss" type="StaticBody2D" parent="End" groups=[
1169+
"boss",
1170+
]]
1171+
position = Vector2( 15624.8, -11855.6 )
1172+
script = ExtResource( 19 )
1173+
1174+
[node name="CollisionShape2D" type="CollisionShape2D" parent="End/Boss"]
1175+
shape = SubResource( 8 )
1176+
1177+
[node name="Sprite" type="Sprite" parent="End/Boss"]
1178+
scale = Vector2( 0.254362, 0.254362 )
1179+
texture = ExtResource( 17 )
1180+
1181+
[node name="Health" type="Sprite" parent="End/Boss"]
1182+
position = Vector2( 0, -81.5469 )
1183+
scale = Vector2( 0.264573, 0.0606119 )
1184+
texture = ExtResource( 18 )
1185+
1186+
[node name="hitbox" type="Area2D" parent="End/Boss"]
1187+
1188+
[node name="CollisionShape2D" type="CollisionShape2D" parent="End/Boss/hitbox"]
1189+
shape = SubResource( 9 )
1190+
1191+
[node name="Lava" type="Node2D" parent="End/Boss"]
1192+
1193+
[node name="Lava" parent="End/Boss/Lava" instance=ExtResource( 6 )]
1194+
position = Vector2( -1575.57, -1.49805 )
1195+
scale = Vector2( 4, 0.5 )
1196+
11501197
[node name="Label10" type="Label" parent="End"]
11511198
margin_left = 14373.2
11521199
margin_top = -11758.4
@@ -1317,22 +1364,13 @@ position = Vector2( -150.016, -305.553 )
13171364
scale = Vector2( 0.08, 5 )
13181365
shape = SubResource( 7 )
13191366

1320-
[node name="Boss" type="StaticBody2D" parent="End"]
1321-
position = Vector2( 15624.8, -11855.6 )
1322-
1323-
[node name="CollisionShape2D" type="CollisionShape2D" parent="End/Boss"]
1324-
shape = SubResource( 8 )
1325-
1326-
[node name="Sprite" type="Sprite" parent="End/Boss"]
1327-
scale = Vector2( 0.254362, 0.254362 )
1328-
texture = ExtResource( 17 )
1329-
13301367
[node name="startPoint" type="Node2D" parent="."]
13311368
position = Vector2( 176, 280 )
13321369

13331370
[node name="Player" parent="." instance=ExtResource( 1 )]
1334-
position = Vector2( 10160, -10629 )
1371+
position = Vector2( 12130.7, -11817.8 )
13351372
gravity_scale = 18.0
1373+
contact_monitor = true
13361374

13371375
[node name="Camera2D" type="Camera2D" parent="Player"]
13381376
current = true
@@ -1356,4 +1394,9 @@ position = Vector2( 1569.49, 129.453 )
13561394

13571395
[node name="checkpoint" parent="." instance=ExtResource( 12 )]
13581396
position = Vector2( 9920, -12200 )
1397+
1398+
[node name="checkpoint7" parent="." instance=ExtResource( 12 )]
1399+
position = Vector2( 14852.9, -11517.6 )
1400+
[connection signal="body_entered" from="End/Boss/hitbox" to="End/Boss" method="_on_hitbox_body_entered"]
13591401
[connection signal="body_entered" from="End/BossTrigger" to="End/BossTrigger" method="on_enter"]
1402+
[connection signal="body_entered" from="Player" to="Player" method="on_body_entered"]

2d/projectile.tscn

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[gd_scene load_steps=3 format=2]
22

3-
[ext_resource path="res://2d/projectile.gd" type="Script" id=1]
3+
[ext_resource path="res://script/projectile.gd" type="Script" id=1]
4+
45

56
[sub_resource type="RectangleShape2D" id=1]
67
extents = Vector2( 8, 8 )

assets/health.png

810 Bytes
Loading

assets/health.png.import

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[remap]
2+
3+
importer="texture"
4+
type="StreamTexture"
5+
path="res://.import/health.png-00457dc45e4c240f12819344f6504f87.stex"
6+
metadata={
7+
"vram_texture": false
8+
}
9+
10+
[deps]
11+
12+
source_file="res://assets/health.png"
13+
dest_files=[ "res://.import/health.png-00457dc45e4c240f12819344f6504f87.stex" ]
14+
15+
[params]
16+
17+
compress/mode=0
18+
compress/lossy_quality=0.7
19+
compress/hdr_mode=0
20+
compress/bptc_ldr=0
21+
compress/normal_map=0
22+
flags/repeat=0
23+
flags/filter=true
24+
flags/mipmaps=false
25+
flags/anisotropic=false
26+
flags/srgb=2
27+
process/fix_alpha_border=true
28+
process/premult_alpha=false
29+
process/HDR_as_SRGB=false
30+
process/invert_color=false
31+
stream=false
32+
size_limit=0
33+
detect_3d=true
34+
svg/scale=1.0

script/Boss.gd

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
extends StaticBody2D
2+
3+
export (float) var damage_multiplier = 0.0002
4+
export (float) var max_damage = 0.2
5+
6+
var health = 1
7+
var health_bar_full
8+
var start_time
9+
10+
var state_duration = 5000
11+
var states = 2
12+
13+
var started = false
14+
var running = false
15+
var prev_state = -1
16+
17+
func _ready():
18+
health_bar_full = $Health.scale.x
19+
$Lava/Lava.enable(false)
20+
21+
func _process(delta):
22+
if not running:
23+
return
24+
25+
var state = get_state()
26+
var percentage = get_state_percentage()
27+
var first = prev_state != state
28+
29+
if first:
30+
call_state(prev_state, percentage, false, true)
31+
prev_state = state
32+
33+
call_state(state, percentage, first, false)
34+
35+
func call_state(i, percentage, first, last):
36+
if i == 0:
37+
state_idle(percentage, first, last)
38+
if i == 1:
39+
state_lava(percentage, first, last)
40+
41+
func state_idle(percentage, first, last):
42+
pass
43+
44+
func state_lava(percentage, first, last):
45+
if first:
46+
$Lava/Lava.enable(true)
47+
if last:
48+
$Lava/Lava.enable(false)
49+
return
50+
$Lava.rotation_degrees = percentage * 180
51+
52+
func start():
53+
if not started:
54+
start_time = OS.get_ticks_msec()
55+
started = true
56+
running = true
57+
58+
func get_state():
59+
var time = OS.get_ticks_msec() - start_time
60+
return (time % (state_duration * states)) / state_duration
61+
62+
func get_state_percentage():
63+
var time = OS.get_ticks_msec() - start_time
64+
return (time % state_duration) / float(state_duration)
65+
66+
func set_health(health):
67+
if health <= 0:
68+
die()
69+
70+
health = max(0, health)
71+
self.health = health
72+
$Health.scale.x = lerp(0, health_bar_full, health)
73+
74+
func die():
75+
visible = false
76+
running = false
77+
$"../Win".visible = true
78+
79+
func _on_hitbox_body_entered(body):
80+
if body.is_in_group("player"):
81+
set_health(health - min(body.linear_velocity.length() * damage_multiplier, max_damage))

script/lava.gd

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
extends Node2D
22

3+
var enabled = true
4+
35
func on_entered(body: Node2D):
4-
if body.is_in_group("player"):
6+
if enabled and body.is_in_group("player"):
57
body.die()
8+
9+
func enable(b):
10+
enabled = b
11+
visible = b
File renamed without changes.

0 commit comments

Comments
 (0)