Release Candidate v0.1

This commit is contained in:
2023-09-14 19:13:54 -07:00
parent 54b044142d
commit 7bf559a800
44 changed files with 1257 additions and 476 deletions

Binary file not shown.

BIN
Animations/OnHitHedron.res Normal file

Binary file not shown.

BIN
Animations/OnHitOrb.res Normal file

Binary file not shown.

BIN
Animations/OnHitPyramid.res Normal file

Binary file not shown.

View File

@@ -12,7 +12,7 @@ dest_files=["res://.godot/imported/BossTheme.ogg-459b51256339e59464889a466918555
[params]
loop=false
loop=true
loop_offset=0
bpm=0
beat_count=0

BIN
Audio/SFX/HitObstacle.wav Normal file

Binary file not shown.

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://6yf38ykqn31u"
path="res://.godot/imported/HitObstacle.wav-1156edf3c0f09f2940143fa0f6a748cd.sample"
[deps]
source_file="res://Audio/SFX/HitObstacle.wav"
dest_files=["res://.godot/imported/HitObstacle.wav-1156edf3c0f09f2940143fa0f6a748cd.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

BIN
Audio/SFX/hit.ogg Normal file

Binary file not shown.

19
Audio/SFX/hit.ogg.import Normal file
View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://fjla2rrw6ilt"
path="res://.godot/imported/hit.ogg-2e022f04d34e894511a1026c55efba44.oggvorbisstr"
[deps]
source_file="res://Audio/SFX/hit.ogg"
dest_files=["res://.godot/imported/hit.ogg-2e022f04d34e894511a1026c55efba44.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -9,6 +9,8 @@ public partial class FireAtPlayer : Timer
private PackedScene _fireProjectile;
[Export]
private double _distanceToPlayer = 3;
[Export]
private AudioStreamPlayer _audioPlayer;
public void OnFireAtPlayer()
{
@@ -23,6 +25,8 @@ public partial class FireAtPlayer : Timer
projectile.Rotation = new Vector3(0, _enemy.Rotation.Y, 0);
projectile.Position = _enemy.Position;
AddChild(projectile);
_audioPlayer.Play();
}
}
}

View File

@@ -0,0 +1,19 @@
using Godot;
public partial class BossAttack : Node3D
{
public void OnOrbHit(Node node)
{
if (node is Character character && character.HasMethod(Character.MethodName.OnHit))
{
GD.Print("Player hit: " + character.Name);
character.Call(Character.MethodName.OnHit, node);
Delete();
}
}
public void Delete()
{
QueueFree();
}
}

View File

@@ -0,0 +1,574 @@
[gd_scene load_steps=9 format=3 uid="uid://b75khmojjbq4f"]
[ext_resource type="Script" path="res://Enemies/Attacks/GodCircuitAttacks/BossAttack.cs" id="1_xty5l"]
[ext_resource type="Texture2D" uid="uid://cpvq0rru8k7l5" path="res://Textures/Projectiles/Layer 3.png" id="2_kceeh"]
[ext_resource type="Texture2D" uid="uid://x8f4g1rccvud" path="res://Textures/Projectiles/Layer 4.png" id="3_1s7oj"]
[ext_resource type="AudioStream" uid="uid://cfj82os5p8i4p" path="res://Audio/SFX/shooting.wav" id="4_h0ftg"]
[sub_resource type="Animation" id="Animation_8rgmo"]
resource_name = "PyramidAttack"
length = 8.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MainOrb/CollisionShape3D:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 3),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 1, 0), Vector3(0, 1, 3)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MainOrb/CollisionShape3D/Sprite3D:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 3),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(0, 6.26573, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Triangle1/CollisionShape3D:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 3, 8),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, -2.01695), Vector3(0, 0, -2.01695), Vector3(15, 0, -2.017)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Triangle1:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Triangle2:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Triangle2/CollisionShape3D:position")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(3, 8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0.0265542, 0, -2.01695), Vector3(0.027, 0, -15)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Triangle3:visible")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0, 3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("Triangle3/CollisionShape3D:position")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(3, 8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 0, -2.01695), Vector3(-15, 0, -2.017)]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("Triangle4:visible")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0, 3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("Triangle4/CollisionShape3D:position")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(3, 8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 0, -2.01695), Vector3(0, 0, 13)]
}
tracks/10/type = "method"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("MainOrb")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(2.9),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"Delete"
}]
}
tracks/11/type = "value"
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/path = NodePath("Triangle1:monitoring")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(0, 3.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/12/type = "value"
tracks/12/imported = false
tracks/12/enabled = true
tracks/12/path = NodePath("Triangle1:monitorable")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = {
"times": PackedFloat32Array(0, 3.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/13/type = "value"
tracks/13/imported = false
tracks/13/enabled = true
tracks/13/path = NodePath("Triangle2:monitoring")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = {
"times": PackedFloat32Array(0, 3.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/14/type = "value"
tracks/14/imported = false
tracks/14/enabled = true
tracks/14/path = NodePath("Triangle2:monitorable")
tracks/14/interp = 1
tracks/14/loop_wrap = true
tracks/14/keys = {
"times": PackedFloat32Array(0, 3.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/15/type = "value"
tracks/15/imported = false
tracks/15/enabled = true
tracks/15/path = NodePath("Triangle3:monitoring")
tracks/15/interp = 1
tracks/15/loop_wrap = true
tracks/15/keys = {
"times": PackedFloat32Array(0, 3.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/16/type = "value"
tracks/16/imported = false
tracks/16/enabled = true
tracks/16/path = NodePath("Triangle3:monitorable")
tracks/16/interp = 1
tracks/16/loop_wrap = true
tracks/16/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/17/type = "value"
tracks/17/imported = false
tracks/17/enabled = true
tracks/17/path = NodePath("Triangle4:monitoring")
tracks/17/interp = 1
tracks/17/loop_wrap = true
tracks/17/keys = {
"times": PackedFloat32Array(0, 3.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/18/type = "value"
tracks/18/imported = false
tracks/18/enabled = true
tracks/18/path = NodePath("Triangle4:monitorable")
tracks/18/interp = 1
tracks/18/loop_wrap = true
tracks/18/keys = {
"times": PackedFloat32Array(0, 3.2),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
[sub_resource type="Animation" id="Animation_js2kt"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MainOrb/CollisionShape3D:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("MainOrb/CollisionShape3D/Sprite3D:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 6.26573, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Triangle1/CollisionShape3D:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 0, -2.01695)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Triangle1:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Triangle2:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Triangle2/CollisionShape3D:position")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0.0265542, 0, -2.01695)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Triangle3:visible")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("Triangle3/CollisionShape3D:position")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 0, -2.01695)]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("Triangle4:visible")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("Triangle4/CollisionShape3D:position")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 0, -2.01695)]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("Triangle1:monitoring")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/11/type = "value"
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/path = NodePath("Triangle1:monitorable")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/12/type = "value"
tracks/12/imported = false
tracks/12/enabled = true
tracks/12/path = NodePath("Triangle2:monitoring")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/13/type = "value"
tracks/13/imported = false
tracks/13/enabled = true
tracks/13/path = NodePath("Triangle2:monitorable")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/14/type = "value"
tracks/14/imported = false
tracks/14/enabled = true
tracks/14/path = NodePath("Triangle3:monitoring")
tracks/14/interp = 1
tracks/14/loop_wrap = true
tracks/14/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/15/type = "value"
tracks/15/imported = false
tracks/15/enabled = true
tracks/15/path = NodePath("Triangle3:monitorable")
tracks/15/interp = 1
tracks/15/loop_wrap = true
tracks/15/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/16/type = "value"
tracks/16/imported = false
tracks/16/enabled = true
tracks/16/path = NodePath("Triangle4:monitoring")
tracks/16/interp = 1
tracks/16/loop_wrap = true
tracks/16/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/17/type = "value"
tracks/17/imported = false
tracks/17/enabled = true
tracks/17/path = NodePath("Triangle4:monitorable")
tracks/17/interp = 1
tracks/17/loop_wrap = true
tracks/17/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ht5d6"]
_data = {
"PyramidAttack": SubResource("Animation_8rgmo"),
"RESET": SubResource("Animation_js2kt")
}
[sub_resource type="CylinderShape3D" id="CylinderShape3D_uh2on"]
radius = 0.266805
[node name="HedronAttack" type="Node3D"]
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
autoplay = "PyramidAttack"
libraries = {
"": SubResource("AnimationLibrary_ht5d6")
}
[node name="MainOrb" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.710665)
collision_layer = 0
collision_mask = 2
script = ExtResource("1_xty5l")
[node name="CollisionShape3D" type="CollisionShape3D" parent="MainOrb"]
transform = Transform3D(0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, 0, 1, 0)
shape = SubResource("CylinderShape3D_uh2on")
[node name="Sprite3D" type="Sprite3D" parent="MainOrb/CollisionShape3D"]
transform = Transform3D(0.499924, 0, -0.00872726, 0, 0.5, 0, 0.00872726, 0, 0.499924, 0, 0, 0)
axis = 1
texture = ExtResource("2_kceeh")
[node name="Triangle1" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.234726, 1, 5.74115)
visible = false
collision_layer = 0
collision_mask = 2
monitoring = false
monitorable = false
script = ExtResource("1_xty5l")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Triangle1"]
transform = Transform3D(-0.107302, 0, -0.590327, 0, 0.6, 0, 0.590327, 0, -0.107302, 0, 0, -2.01695)
shape = SubResource("CylinderShape3D_uh2on")
[node name="Sprite3D" type="Sprite3D" parent="Triangle1/CollisionShape3D"]
transform = Transform3D(0.499924, 0, -0.00872631, 0, 0.5, 0, 0.00872631, 0, 0.499924, 0, 0, 0)
axis = 1
texture = ExtResource("3_1s7oj")
[node name="Triangle2" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 5.48792)
visible = false
collision_layer = 0
collision_mask = 2
monitoring = false
monitorable = false
script = ExtResource("1_xty5l")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Triangle2"]
transform = Transform3D(0.592349, 0, -0.0955152, 0, 0.6, 0, 0.0955152, 0, 0.592349, 0.0265542, 0, -2.01695)
shape = SubResource("CylinderShape3D_uh2on")
[node name="Sprite3D" type="Sprite3D" parent="Triangle2/CollisionShape3D"]
transform = Transform3D(0.499924, 0, -0.0087263, 0, 0.5, 0, 0.0087263, 0, 0.499924, 0, 0, 0)
axis = 1
texture = ExtResource("3_1s7oj")
[node name="Triangle3" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.230226, 1, 5.64647)
visible = false
collision_layer = 0
collision_mask = 2
monitoring = false
monitorable = false
script = ExtResource("1_xty5l")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Triangle3"]
transform = Transform3D(0.119939, 0, 0.58789, 0, 0.6, 0, -0.58789, 0, 0.119939, 0, 0, -2.01695)
shape = SubResource("CylinderShape3D_uh2on")
[node name="Sprite3D" type="Sprite3D" parent="Triangle3/CollisionShape3D"]
transform = Transform3D(0.499924, 0, -0.0087263, 0, 0.5, 0, 0.0087263, 0, 0.499924, 0, 0, 0)
axis = 1
texture = ExtResource("3_1s7oj")
[node name="Triangle4" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 5.94482)
visible = false
collision_layer = 0
collision_mask = 2
monitoring = false
monitorable = false
script = ExtResource("1_xty5l")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Triangle4"]
transform = Transform3D(-0.599587, 0, 0.0222583, 0, 0.6, 0, -0.0222583, 0, -0.599587, 0, 0, -2.01695)
shape = SubResource("CylinderShape3D_uh2on")
[node name="Sprite3D" type="Sprite3D" parent="Triangle4/CollisionShape3D"]
transform = Transform3D(0.499924, 0, -0.0087263, 0, 0.5, 0, 0.0087263, 0, 0.499924, 0, 0, 0)
axis = 1
texture = ExtResource("3_1s7oj")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("4_h0ftg")
volume_db = 10.0
autoplay = true
[connection signal="body_entered" from="MainOrb" to="MainOrb" method="OnOrbHit"]
[connection signal="body_entered" from="Triangle1" to="Triangle1" method="OnOrbHit"]
[connection signal="body_entered" from="Triangle2" to="Triangle2" method="OnOrbHit"]
[connection signal="body_entered" from="Triangle3" to="Triangle3" method="OnOrbHit"]
[connection signal="body_entered" from="Triangle4" to="Triangle4" method="OnOrbHit"]

View File

@@ -1,22 +1,27 @@
[gd_scene load_steps=4 format=3 uid="uid://uwia12i7yykb"]
[gd_scene load_steps=6 format=3 uid="uid://uwia12i7yykb"]
[ext_resource type="Script" path="res://Player/Base/Projectile.cs" id="1_4uor3"]
[ext_resource type="Texture2D" uid="uid://bunon01jmxhbx" path="res://Textures/Projectiles/Layer 2.png" id="1_a70u8"]
[ext_resource type="AudioStream" uid="uid://cgun34h06gvpv" path="res://Audio/SFX/misc1.wav" id="3_vxciy"]
[sub_resource type="Curve3D" id="Curve3D_n05rs"]
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, -2, 1, 2, 0, 0, 0, 0, 0, 0, -2, 1, 4, 0, 0, 0, 0, 0, 0, 2, 1, 4, 0, 0, 0, 0, 0, 0, 2, 1, 6),
"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0)
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, -2, 1, 2, 0, 0, 0, 0, 0, 0, -2, 1, 3, 0, 0, 0, 0, 0, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 2, 1, 4, 0, 0, 0, 0, 0, 0, -4, 1, 4, 0, 0, 0, 0, 0, 0, -4, 1, 5, 0, 0, 0, 0, 0, 0, 1, 1, 5, 0, 0, 0, 0, 0, 0, 1, 1, 10),
"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
}
point_count = 6
point_count = 10
[sub_resource type="BoxShape3D" id="BoxShape3D_g5fdd"]
size = Vector3(0.553759, 1.22067, 1.58866)
[node name="Path3D" type="Path3D"]
curve = SubResource("Curve3D_n05rs")
script = ExtResource("1_4uor3")
_projectileSpeed = 5.0
[node name="PathFollow3D" type="PathFollow3D" parent="."]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1, 0)
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 1, 1, 10)
progress = 27.0
[node name="RigidBody3D" type="RigidBody3D" parent="PathFollow3D"]
collision_layer = 0
@@ -29,9 +34,16 @@ can_sleep = false
freeze_mode = 1
[node name="CollisionShape3D" type="CollisionShape3D" parent="PathFollow3D/RigidBody3D"]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
shape = SubResource("BoxShape3D_g5fdd")
[node name="Sprite3D" type="Sprite3D" parent="PathFollow3D/RigidBody3D/CollisionShape3D"]
transform = Transform3D(-2.18557e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.18557e-08, 0, 0, 0)
axis = 1
texture = ExtResource("1_a70u8")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_vxciy")
autoplay = true
[connection signal="body_entered" from="PathFollow3D/RigidBody3D" to="." method="OnPlayerHit"]

View File

@@ -1,46 +0,0 @@
[gd_scene load_steps=5 format=3 uid="uid://cerac64r5jewa"]
[ext_resource type="Script" path="res://Player/Base/Projectile.cs" id="1_cveok"]
[ext_resource type="Texture2D" uid="uid://cpvq0rru8k7l5" path="res://Textures/Projectiles/Layer 3.png" id="1_p5wrg"]
[sub_resource type="Curve3D" id="Curve3D_h1xf0"]
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 1, -1, 0, 0, 0, 0, 0, 0, 0, 1, -5, 0, 0, 0, 0, 0, 0, -2, 1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0),
"tilts": PackedFloat32Array(0, 0, 0, 0, 0)
}
point_count = 5
[sub_resource type="CylinderShape3D" id="CylinderShape3D_o3ugd"]
radius = 0.25
[node name="Orb Attack" type="Path3D"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -3, 0, 1.5)
curve = SubResource("Curve3D_h1xf0")
script = ExtResource("1_cveok")
_projectileSpeed = 1.5
[node name="PathFollow3D" type="PathFollow3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
rotation_mode = 0
[node name="RigidBody3D" type="RigidBody3D" parent="PathFollow3D"]
transform = Transform3D(1, 0, 7.10543e-15, 0, 1, 0, -7.10543e-15, 0, 1, 0, 0, 0)
collision_layer = 0
collision_mask = 2
continuous_cd = true
max_contacts_reported = 5
contact_monitor = true
can_sleep = false
freeze = true
freeze_mode = 1
[node name="CollisionShape3D" type="CollisionShape3D" parent="PathFollow3D/RigidBody3D"]
transform = Transform3D(1, 0, 7.10543e-15, 0, 1, 0, -7.10543e-15, 0, 1, 0, 0, 0)
shape = SubResource("CylinderShape3D_o3ugd")
[node name="Sprite3D" type="Sprite3D" parent="PathFollow3D/RigidBody3D/CollisionShape3D"]
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0)
axis = 1
texture = ExtResource("1_p5wrg")
[connection signal="body_entered" from="PathFollow3D/RigidBody3D" to="." method="OnPlayerHit"]

View File

@@ -5,7 +5,9 @@ public partial class PyramidAttack : Node3D
[Export]
private AnimationPlayer _animationPlayer;
public override void _Ready()
private bool isDeleted = false;
public override void _EnterTree()
{
_animationPlayer.AnimationFinished += Delete;
}
@@ -20,10 +22,13 @@ public partial class PyramidAttack : Node3D
}
QueueFree();
isDeleted = true;
}
public void Delete(StringName name)
{
QueueFree();
if (!isDeleted)
QueueFree();
isDeleted = true;
}
}

View File

@@ -1,11 +1,12 @@
[gd_scene load_steps=7 format=3 uid="uid://cql4evq5281n4"]
[gd_scene load_steps=8 format=3 uid="uid://cql4evq5281n4"]
[ext_resource type="Script" path="res://Enemies/Attacks/GodCircuitAttacks/PyramidAttack.cs" id="1_yfldc"]
[ext_resource type="Texture2D" uid="uid://531b68bg4tn6" path="res://Textures/Projectiles/Layer 1.png" id="2_lufet"]
[ext_resource type="AudioStream" uid="uid://cgun34h06gvpv" path="res://Audio/SFX/misc1.wav" id="3_6crjs"]
[sub_resource type="Animation" id="Animation_8rgmo"]
resource_name = "PyramidAttack"
length = 3.0
length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
@@ -13,10 +14,10 @@ tracks/0/path = NodePath("Center/CollisionShape3D:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 3),
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 1, 0), Vector3(0, 1, 5)]
"values": [Vector3(0, 1, 0), Vector3(0, 1, 3)]
}
tracks/1/type = "value"
tracks/1/imported = false
@@ -25,10 +26,10 @@ tracks/1/path = NodePath("Center/CollisionShape3D:scale")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 3),
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(1, 1, 1), Vector3(3, 3, 3)]
"values": [Vector3(0.3, 0.3, 0.3), Vector3(1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
@@ -37,10 +38,10 @@ tracks/2/path = NodePath("Left/CollisionShape3D:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 3),
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 1, 0), Vector3(0, 1, 5)]
"values": [Vector3(0, 1, 0), Vector3(0, 1, 3)]
}
tracks/3/type = "value"
tracks/3/imported = false
@@ -49,10 +50,10 @@ tracks/3/path = NodePath("Left/CollisionShape3D:scale")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 3),
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(1, 1, 1), Vector3(3, 3, 3)]
"values": [Vector3(0.3, 0.3, 0.3), Vector3(1, 1, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
@@ -61,10 +62,10 @@ tracks/4/path = NodePath("Right/CollisionShape3D:position")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 3),
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 1, 0), Vector3(0, 1, 5)]
"values": [Vector3(0, 1, 0), Vector3(0, 1, 3)]
}
tracks/5/type = "value"
tracks/5/imported = false
@@ -73,10 +74,33 @@ tracks/5/path = NodePath("Right/CollisionShape3D:scale")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 3),
"times": PackedFloat32Array(0, 2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(1, 1, 1), Vector3(3, 3, 3)]
"values": [Vector3(0.3, 0, 0), Vector3(1, 1, 1)]
}
tracks/6/type = "audio"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("AudioStreamPlayer")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"clips": [],
"times": PackedFloat32Array()
}
tracks/6/use_blend = true
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("AudioStreamPlayer:playing")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0, 1.9),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
[sub_resource type="Animation" id="Animation_js2kt"]
@@ -153,6 +177,18 @@ tracks/5/keys = {
"update": 0,
"values": [Vector3(1, 1, 1)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("AudioStreamPlayer:playing")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ht5d6"]
_data = {
@@ -163,7 +199,9 @@ _data = {
[sub_resource type="CylinderShape3D" id="CylinderShape3D_uh2on"]
radius = 0.266805
[node name="PyramidAttack" type="Node3D"]
[node name="PyramidAttack" type="Node3D" node_paths=PackedStringArray("_animationPlayer")]
script = ExtResource("1_yfldc")
_animationPlayer = NodePath("AnimationPlayer")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
autoplay = "PyramidAttack"
@@ -171,7 +209,7 @@ libraries = {
"": SubResource("AnimationLibrary_ht5d6")
}
[node name="Center" type="RigidBody3D" parent="." node_paths=PackedStringArray("_animationPlayer")]
[node name="Center" type="RigidBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.710665)
collision_layer = 0
collision_mask = 2
@@ -181,8 +219,6 @@ max_contacts_reported = 5
contact_monitor = true
can_sleep = false
freeze_mode = 1
script = ExtResource("1_yfldc")
_animationPlayer = NodePath("../AnimationPlayer")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Center"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
@@ -193,8 +229,8 @@ transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
axis = 1
texture = ExtResource("2_lufet")
[node name="Left" type="RigidBody3D" parent="." node_paths=PackedStringArray("_animationPlayer")]
transform = Transform3D(0.819152, 0, 0.573576, 0, 1, 0, -0.573576, 0, 0.819152, 0, 0, 0.710665)
[node name="Left" type="RigidBody3D" parent="."]
transform = Transform3D(0.939692, 0, 0.34202, 0, 1, 0, -0.34202, 0, 0.939692, 0, 0, 0.710665)
collision_layer = 0
collision_mask = 2
gravity_scale = 0.0
@@ -202,8 +238,6 @@ continuous_cd = true
max_contacts_reported = 5
contact_monitor = true
can_sleep = false
script = ExtResource("1_yfldc")
_animationPlayer = NodePath("../AnimationPlayer")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Left"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
@@ -214,8 +248,8 @@ transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
axis = 1
texture = ExtResource("2_lufet")
[node name="Right" type="RigidBody3D" parent="." node_paths=PackedStringArray("_animationPlayer")]
transform = Transform3D(0.819152, 0, -0.573576, 0, 1, 0, 0.573576, 0, 0.819152, 0, 0, 0.710665)
[node name="Right" type="RigidBody3D" parent="."]
transform = Transform3D(0.939692, 0, -0.34202, 0, 1, 0, 0.34202, 0, 0.939692, 0, 0, 0.710665)
collision_layer = 0
collision_mask = 2
gravity_scale = 0.0
@@ -224,8 +258,6 @@ max_contacts_reported = 5
contact_monitor = true
can_sleep = false
freeze_mode = 1
script = ExtResource("1_yfldc")
_animationPlayer = NodePath("../AnimationPlayer")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Right"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
@@ -236,6 +268,9 @@ transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
axis = 1
texture = ExtResource("2_lufet")
[connection signal="body_entered" from="Center" to="Center" method="OnPlayerHit"]
[connection signal="body_entered" from="Left" to="Left" method="OnPlayerHit"]
[connection signal="body_entered" from="Right" to="Right" method="OnPlayerHit"]
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_6crjs")
[connection signal="body_entered" from="Center" to="." method="OnPlayerHit"]
[connection signal="body_entered" from="Left" to="." method="OnPlayerHit"]
[connection signal="body_entered" from="Right" to="." method="OnPlayerHit"]

View File

@@ -36,38 +36,26 @@ tracks/1/keys = {
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("AudioStreamPlayer:playing")
tracks/2/path = NodePath("StaticBody3D/god circuit stage 1/Cube2:transparency")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
"times": PackedFloat32Array(0.1, 3.2),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 0.5]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("AudioStreamPlayer:stream")
tracks/3/path = NodePath("AudioStreamPlayer:playing")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [ExtResource("3_yengs")]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("StaticBody3D/god circuit stage 1/Cube2:transparency")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.1, 6.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 1.0]
"values": [true]
}
[sub_resource type="Animation" id="Animation_n85p2"]
@@ -266,6 +254,7 @@ transform = Transform3D(-1, -7.54979e-08, 7.54979e-08, 7.54979e-08, 0, 1, -7.549
[node name="Cube" type="MeshInstance3D" parent="StaticBody3D/god circuit stage 1"]
transform = Transform3D(-1, 7.54979e-08, -7.54979e-08, -7.54979e-08, 0, 1, 7.54979e-08, 1, 0, 0, 0, 0)
cast_shadow = 0
mesh = SubResource("ArrayMesh_vv6dc")
skeleton = NodePath("")
@@ -273,10 +262,12 @@ skeleton = NodePath("")
transform = Transform3D(-1, 7.54979e-08, -7.54979e-08, -7.54979e-08, 0, 1, 7.54979e-08, 1, 0, 0, 0, 0)
layers = 0
material_override = SubResource("ShaderMaterial_aqrc7")
cast_shadow = 0
mesh = SubResource("ArrayMesh_vv6dc")
skeleton = NodePath("")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_yengs")
volume_db = 7.786
[connection signal="body_entered" from="StaticBody3D" to="." method="OnHit"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=49 format=3 uid="uid://bt5rolsyjmx55"]
[gd_scene load_steps=52 format=3 uid="uid://bt5rolsyjmx55"]
[ext_resource type="Script" path="res://Enemies/Scripts/MeleeEnemy.cs" id="1_50och"]
[ext_resource type="PackedScene" uid="uid://b1j0g6ikmnibm" path="res://Enemies/HPComponent.tscn" id="2_1leby"]
@@ -149,7 +149,7 @@ albedo_color = Color(0.906332, 0.0657254, 0, 1)
resource_name = "Material.001"
cull_mode = 2
vertex_color_use_as_albedo = true
albedo_color = Color(0.906332, 0.577975, 0.0845021, 1)
albedo_color = Color(0.905882, 0.576471, 0.0862745, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ucce2"]
resource_name = "Material.005"
@@ -1177,6 +1177,43 @@ size = Vector3(0.641537, 0.560677, 0.708051)
[sub_resource type="BoxShape3D" id="BoxShape3D_lqe1n"]
size = Vector3(0.572433, 1.81406, 0.604365)
[sub_resource type="Animation" id="Animation_5doi8"]
resource_name = "OnHit"
length = 2.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MeleeEnemy/Circle001:transparency")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.1, 0.3),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [0.0, 0.5, 0.0]
}
[sub_resource type="Animation" id="Animation_rx3cp"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("MeleeEnemy/Circle001:transparency")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.5]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mudtn"]
_data = {
"OnHit": SubResource("Animation_5doi8"),
"RESET": SubResource("Animation_rx3cp")
}
[node name="Melee Enemy" type="RigidBody3D" node_paths=PackedStringArray("_hp") groups=["Enemy"]]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, -0.0175109, 0)
disable_mode = 2
@@ -1188,6 +1225,7 @@ max_contacts_reported = 20
contact_monitor = true
can_sleep = false
script = ExtResource("1_50och")
_distanceToPlayer = 3.5
_hp = NodePath("HP Component")
[node name="MeleeEnemy" type="Node3D" parent="."]
@@ -1201,6 +1239,7 @@ skeleton = NodePath("")
[node name="Circle001" type="MeshInstance3D" parent="MeleeEnemy"]
transform = Transform3D(0.681135, 0, -0.799096, 0, 1.05, 0, 0.799096, 0, 0.681135, 0.0457887, 0.476383, 0.128917)
transparency = 0.5
cast_shadow = 0
mesh = SubResource("ArrayMesh_ngagc")
skeleton = NodePath("")
@@ -1255,7 +1294,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00804788, 1.02138, -0.02382
shape = SubResource("BoxShape3D_1nq5h")
[node name="HP Component" parent="." instance=ExtResource("2_1leby")]
MaximumHP = 2
MaximumHP = 1
[node name="Area3D" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00804788, 1.01495, 0.00193942)
@@ -1265,5 +1304,10 @@ collision_mask = 68
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
shape = SubResource("BoxShape3D_lqe1n")
[node name="HitAnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_mudtn")
}
[connection signal="body_entered" from="Area3D" to="." method="OnPlayerHit"]
[connection signal="body_entered" from="Area3D" to="." method="OnEnemyHit"]

View File

@@ -1,9 +1,10 @@
[gd_scene load_steps=59 format=3 uid="uid://dahp73fwld24h"]
[gd_scene load_steps=60 format=3 uid="uid://dahp73fwld24h"]
[ext_resource type="Script" path="res://Enemies/Scripts/RangedEnemy.cs" id="1_01lvj"]
[ext_resource type="PackedScene" uid="uid://rlxnnw4yay7e" path="res://Enemies/Attacks/EnemyBullet.tscn" id="3_qenx3"]
[ext_resource type="Script" path="res://Enemies/Attacks/FireAtPlayer.cs" id="3_qt2md"]
[ext_resource type="PackedScene" uid="uid://b1j0g6ikmnibm" path="res://Enemies/HPComponent.tscn" id="4_1vt55"]
[ext_resource type="AudioStream" uid="uid://cfj82os5p8i4p" path="res://Audio/SFX/shooting.wav" id="5_m0x8e"]
[sub_resource type="BoxShape3D" id="BoxShape3D_dm3u7"]
size = Vector3(0.722, 1, 0.565)
@@ -904,13 +905,14 @@ freeze_mode = 1
script = ExtResource("1_01lvj")
_hp = NodePath("HP Component")
[node name="Timer" type="Timer" parent="." node_paths=PackedStringArray("_enemy")]
[node name="Timer" type="Timer" parent="." node_paths=PackedStringArray("_enemy", "_audioPlayer")]
wait_time = 0.75
autostart = true
script = ExtResource("3_qt2md")
_enemy = NodePath("..")
_fireProjectile = ExtResource("3_qenx3")
_distanceToPlayer = 5.0
_audioPlayer = NodePath("../AudioStreamPlayer")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0714533, 0.929308, 0.0138905)
@@ -1064,7 +1066,12 @@ mesh = SubResource("ArrayMesh_lu7e3")
skeleton = NodePath("")
[node name="HP Component" parent="." instance=ExtResource("4_1vt55")]
MaximumHP = 2
MaximumHP = 1
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("5_m0x8e")
volume_db = -1.0
max_polyphony = 10
[connection signal="body_entered" from="." to="." method="OnPlayerHit"]
[connection signal="timeout" from="Timer" to="Timer" method="OnFireAtPlayer"]

View File

@@ -4,8 +4,6 @@ public partial class GodCircuit : Node3D
{
[Export]
private AnimationPlayer _animationPlayer;
[Export]
private Timer _attackTimer;
[Signal]
public delegate void OnEnemyBossHitEventHandler(long damage);
@@ -18,45 +16,46 @@ public partial class GodCircuit : Node3D
private void OnHit(Node3D node)
{
if (node is Character character && character.HasMethod(Character.MethodName.OnHit))
{
GD.Print("Player hit: " + character.Name);
character.Call(Character.MethodName.OnHit, node);
}
else
{
var hpComponent = GetNode<HealthPoints>("HP Component");
if (hpComponent.CurrentHP > 0)
{
GD.Print("Hit");
_animationPlayer.Play("OnHit");
hpComponent.TakeDamage(800000);
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
if (node is Character character && character.HasMethod(Character.MethodName.OnHit))
{
GD.Print("Player hit: " + character.Name);
character.Call(Character.MethodName.OnHit, node);
}
else
{
var hpComponent = GetNode<HealthPoints>("HP Component");
if (hpComponent.CurrentHP > 0)
{
GD.Print("Hit");
_animationPlayer.Play("OnHit");
hpComponent.TakeDamage(1);
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
if (hpComponent.CurrentHP <= 0)
{
EmitSignal(SignalName.DestroyRemainingOrbs);
_animationPlayer.Play("OnDeath");
_animationPlayer.AnimationFinished += OnGameFinished;
}
}
}
if (hpComponent.CurrentHP <= 0)
{
EmitSignal(SignalName.DestroyRemainingOrbs);
_animationPlayer.Play("OnDeath");
_animationPlayer.AnimationFinished += OnGameFinished;
}
}
}
}
private void OnBossOrbDestroyed()
{
var hpComponent = GetNode<HealthPoints>("HP Component");
_animationPlayer.Play("OnHit");
hpComponent.TakeDamage(30000000);
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
var hpComponent = GetNode<HealthPoints>("HP Component");
_animationPlayer.Play("OnHit");
hpComponent.TakeDamage(60);
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
if (hpComponent.CurrentHP <= 0)
hpComponent.CurrentHP = 1;
if (hpComponent.CurrentHP <= 0)
hpComponent.CurrentHP = 1;
}
private void OnGameFinished(StringName animationName)
{
QueueFree();
EmitSignal(SignalName.OnGameEnding);
GD.Print("On game ending");
EmitSignal(SignalName.OnGameEnding);
QueueFree();
}
}

View File

@@ -11,11 +11,10 @@ public partial class MeleeEnemy : BasicEnemy
public override void _PhysicsProcess(double delta)
{
var players = GetTree().GetNodesInGroup("Player");
var players = GetTree().GetNodesInGroup("Player").Cast<Character>();
if (players.Any())
{
var convertedPlayers = players.Select(x => (Node3D)x);
var target = convertedPlayers.OrderBy(x => Position.DistanceTo(x.Position)).FirstOrDefault();
var target = players.OrderBy(x => Position.DistanceTo(x.Position)).FirstOrDefault();
if (_targetingPlayer || Position.DistanceTo(target.Position) < _distanceToPlayer)
{
Position = Position.MoveToward(target.Position, _speed * (float)delta);

View File

@@ -6,7 +6,7 @@ using System.Linq;
public partial class GameManager : Node
{
[Signal]
public delegate void OnPlayerGameOverEventHandler();
public delegate void OnPlayerGameOverEventHandler(Player player);
[Signal]
public delegate void ReselectCharacterEventHandler(Player player);
[Signal]
@@ -23,133 +23,138 @@ public partial class GameManager : Node
public override void _Ready()
{
var main = GetTree().Root.GetNode<Main>("/root/Main");
for (var i = 0; i < main.NumberOfPlayers; i++)
{
var player = PlayerScenes[i].Instantiate();
Players = Players.Append((Player)player);
GetTree().Root.AddChild(player);
}
var main = GetTree().Root.GetNode<Main>("/root/Main");
for (var i = 0; i < main.NumberOfPlayers; i++)
{
var player = PlayerScenes[i].Instantiate();
var castedPlayer = (Player)player;
castedPlayer.PlayerNumber = i + 1;
Players = Players.Append(castedPlayer);
GetTree().Root.AddChild(player);
}
}
public void OnAllEnemiesDefeated()
{
OnLevelClear();
OnLevelClear();
}
public void OnHandleCharacterSelectUI(Player player)
{
EmitSignal(SignalName.ReselectCharacter, player);
EmitSignal(SignalName.ReselectCharacter, player);
}
public void SetToNextCharacter(Player player)
{
player.CharacterIndex = (++player.CharacterIndex) % player.CharactersLeftOnStage.Count();
GD.Print(player.CharactersLeftOnStage.ElementAt(player.CharacterIndex));
player.CharacterIndex = (++player.CharacterIndex) % player.CharactersLeftOnStage.Count();
GD.Print(player.CharactersLeftOnStage.ElementAt(player.CharacterIndex));
}
public void SetToPreviousCharacter(Player player)
{
player.CharacterIndex = player.CharacterIndex == 0 ? player.CharactersLeftOnStage.Count() - 1 : --player.CharacterIndex;
player.CharacterIndex = player.CharacterIndex == 0 ? player.CharactersLeftOnStage.Count() - 1 : --player.CharacterIndex;
}
public void ResetPlayerPosition(Player player)
{
player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter);
GD.Print(player.CharactersLeftOnStage.ElementAt(player.CharacterIndex));
player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter);
GD.Print(player.CharactersLeftOnStage.ElementAt(player.CharacterIndex));
}
public void OnCharacterSelected(Player player)
{
var sfxPlayer = GetTree().Root.GetNode<AudioStreamPlayer>("Main/SFXPlayer");
var audioStream = ResourceLoader.Load<AudioStream>("Audio/SFX/Select.wav");
sfxPlayer.Stream = audioStream;
sfxPlayer.Play();
if (player.CharactersLeftOnStage.Any())
{
var character = player.CharactersLeftOnStage[player.CharacterIndex];
var instance = (Character)character.Instantiate();
instance.Initialize(player);
player.SelectedCharacter = instance;
player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter);
GetTree().Root.AddChild(player.SelectedCharacter);
}
var sfxPlayer = GetTree().Root.GetNode<AudioStreamPlayer>("Main/SFXPlayer");
var audioStream = ResourceLoader.Load<AudioStream>("Audio/SFX/Select.wav");
sfxPlayer.Stream = audioStream;
sfxPlayer.Play();
if (player.CharactersLeftOnStage.Any())
{
var character = player.CharactersLeftOnStage[player.CharacterIndex];
var instance = (Character)character.Instantiate();
instance.Initialize(player);
player.SelectedCharacter = instance;
player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter);
GetTree().Root.AddChild(player.SelectedCharacter);
}
}
public void RemoveCharacter(Player player)
{
ResetPlayerPosition(player);
ResetPlayerPosition(player);
player.CharactersLeftOnStage.RemoveAt(player.CharacterIndex);
if (player.SelectedCharacter is not null)
GetTree().Root.RemoveChild(player.SelectedCharacter);
player.CharactersLeftOnStage.RemoveAt(player.CharacterIndex);
if (player.SelectedCharacter is not null)
GetTree().Root.RemoveChild(player.SelectedCharacter);
player.CharacterIndex = 0;
if (player.CharactersLeftOnStage.Any())
EmitSignal(SignalName.ReselectCharacter, player);
player.CharacterIndex = 0;
if (player.CharactersLeftOnStage.Any())
EmitSignal(SignalName.ReselectCharacter, player);
if (!player.CharactersExited.Any() && !player.CharactersLeftOnStage.Any())
SetGameOver(player, true);
if (!player.CharactersExited.Any() && !player.CharactersLeftOnStage.Any())
SetGameOver(player, true);
if (Players.All(x => !x.CharactersLeftOnStage.Any()) && Players.Any(x => x.CharactersExited.Any()))
OnLevelClear();
if (Players.All(x => !x.CharactersLeftOnStage.Any()) && Players.Any(x => x.CharactersExited.Any()))
OnLevelClear();
}
public void RemoveCharacterAndAddToExit(Player player)
{
ResetPlayerPosition(player);
player.CharactersExited.Add(player.CharactersLeftOnStage.ElementAt(player.CharacterIndex));
RemoveCharacter(player);
ResetPlayerPosition(player);
player.CharactersExited.Add(player.CharactersLeftOnStage.ElementAt(player.CharacterIndex));
RemoveCharacter(player);
}
public void SetGameOver(Player player, bool isGameOver)
{
player.GameOver = isGameOver;
if (isGameOver)
EmitSignal(SignalName.OnPlayerGameOver);
GD.Print($"Game over for {player.Name}");
player.GameOver = isGameOver;
if (isGameOver)
EmitSignal(SignalName.OnPlayerGameOver, player);
GD.Print($"Game over for {player.Name}");
}
public void ReloadGameScene()
{
GD.Print("Reloading scene");
var players = GetTree().Root.GetChildren().OfType<Player>();
foreach (var player in players)
player.QueueFree();
var levels = GetTree().Root.GetChildren().OfType<Level>();
foreach (var level in levels)
level.QueueFree();
GetTree().ReloadCurrentScene();
GD.Print("Reloading scene");
var players = GetTree().Root.GetChildren().OfType<Player>();
foreach (var player in players)
player.QueueFree();
var levels = GetTree().Root.GetChildren().OfType<Level>();
foreach (var level in levels)
level.QueueFree();
GetTree().ReloadCurrentScene();
}
public void OnLevelClear()
{
var enemies = GetTree().GetNodesInGroup("Enemy").Where(x => !x.IsQueuedForDeletion());
foreach (var enemy in enemies)
enemy.QueueFree();
var enemies = GetTree().GetNodesInGroup("Enemy").Where(x => !x.IsQueuedForDeletion());
foreach (var enemy in enemies)
enemy.QueueFree();
var playerCharacters = GetTree().GetNodesInGroup("Player");
var playerCharacters = GetTree().GetNodesInGroup("Player");
EmitSignal(SignalName.ClearPlayerBG, 0);
EmitSignal(SignalName.ClearPlayerBG, 1);
EmitSignal(SignalName.ClearPlayerBG, 0);
EmitSignal(SignalName.ClearPlayerBG, 1);
foreach (var player in Players)
{
player.CharactersLeftOnStage.AddRange(player.CharactersExited);
player.CharactersExited.Clear();
player.CharacterIndex = 0;
}
foreach (var player in Players)
{
player.CharactersLeftOnStage.AddRange(player.CharactersExited);
player.CharactersExited.Clear();
player.CharacterIndex = 0;
}
foreach (var character in playerCharacters)
character.GetParent().RemoveChild(character);
foreach (var character in playerCharacters)
character.GetParent().RemoveChild(character);
var projectiles = GetTree().GetNodesInGroup("Projectile").Where(x => !x.IsQueuedForDeletion());
foreach (var projectile in projectiles)
projectile.QueueFree();
var projectiles = GetTree().GetNodesInGroup("Projectile").Where(x => !x.IsQueuedForDeletion());
foreach (var projectile in projectiles)
projectile.QueueFree();
var main = GetTree().Root.GetNode<Main>("/root/Main");
_levelIndex++;
main.LoadNextLevel(_levelIndex);
var main = GetTree().Root.GetNode<Main>("/root/Main");
if (_levelIndex < main.Levels.Count)
{
_levelIndex++;
main.LoadNextLevel(_levelIndex);
}
}
}

View File

@@ -13,61 +13,66 @@ public partial class Main : Node
public int NumberOfPlayers = 0;
public override void _Ready()
{
Input.MouseMode = Input.MouseModeEnum.Captured;
}
public override void _Process(double delta)
{
_fpsCounter.Text = $"FPS: {Engine.GetFramesPerSecond()}";
_fpsCounter.Text = $"FPS: {Engine.GetFramesPerSecond()}";
}
public void LoadLevel(int indexToLoad, int numberOfPlayers)
{
var sceneToLoad = Levels.ElementAt(indexToLoad);
CallDeferred(nameof(DeferredGoToScene), sceneToLoad);
var sceneToLoad = Levels.ElementAt(indexToLoad);
CallDeferred(nameof(DeferredGoToScene), sceneToLoad);
NumberOfPlayers = numberOfPlayers;
NumberOfPlayers = numberOfPlayers;
var gameManager = GameManager.Instantiate();
AddChild(gameManager);
var gameManagerInstance = (GameManager)gameManager;
var gameManager = GameManager.Instantiate();
AddChild(gameManager);
var gameManagerInstance = (GameManager)gameManager;
var bgmPlayer = GetTree().Root.GetNode<BGMPlayer>("BgmPlayer");
bgmPlayer.ProcessMode = ProcessModeEnum.Always;
bgmPlayer.SetBGMFromFilepath("Audio/BGM/An-Imitation-of-Heaven.ogg");
bgmPlayer.PlayBGM();
var bgmPlayer = GetTree().Root.GetNode<BGMPlayer>("BgmPlayer");
bgmPlayer.ProcessMode = ProcessModeEnum.Always;
bgmPlayer.SetBGMFromFilepath("Audio/BGM/An-Imitation-of-Heaven.ogg");
bgmPlayer.PlayBGM();
var animationNode = GetNode<AnimationPlayer>("SceneTransition/AnimationPlayer");
animationNode.Play($"Level{indexToLoad + 1}");
animationNode.AnimationFinished += EnableCharacterSelect;
var animationNode = GetNode<AnimationPlayer>("SceneTransition/AnimationPlayer");
animationNode.Play($"Level{indexToLoad + 1}");
animationNode.AnimationFinished += EnableCharacterSelect;
}
public void LoadNextLevel(int currentSceneIndex)
{
if (currentSceneIndex < Levels.Count())
{
var currentScene = Levels.ToList().ElementAt(currentSceneIndex);
CallDeferred(nameof(DeferredGoToScene), Levels.ElementAt(currentSceneIndex));
var animationNode = GetNode<AnimationPlayer>("SceneTransition/AnimationPlayer");
animationNode.Play($"Level{currentSceneIndex + 1}");
animationNode.AnimationFinished += EnableCharacterSelect;
}
if (currentSceneIndex < Levels.Count())
{
var currentScene = Levels.ToList().ElementAt(currentSceneIndex);
CallDeferred(nameof(DeferredGoToScene), Levels.ElementAt(currentSceneIndex));
var animationNode = GetNode<AnimationPlayer>("SceneTransition/AnimationPlayer");
animationNode.Play($"Level{currentSceneIndex + 1}");
animationNode.AnimationFinished += EnableCharacterSelect;
}
}
private void DeferredGoToScene(PackedScene sceneToAdd)
{
if (GetTree().GetFirstNodeInGroup("Level") != null)
GetTree().GetFirstNodeInGroup("Level").QueueFree();
var nextScene = GD.Load<PackedScene>(sceneToAdd.ResourcePath);
var newScene = nextScene.Instantiate();
GetTree().Root.AddChild(newScene);
if (GetTree().GetFirstNodeInGroup("Level") != null)
GetTree().GetFirstNodeInGroup("Level").QueueFree();
var nextScene = GD.Load<PackedScene>(sceneToAdd.ResourcePath);
var newScene = nextScene.Instantiate();
GetTree().Root.AddChild(newScene);
}
private void EnableCharacterSelect(StringName animationName)
{
GD.Print("On animation finished: Enable characters");
var gameManagerInstance = GetNode<GameManager>("GameManager");
foreach (var player in gameManagerInstance.Players)
gameManagerInstance.OnHandleCharacterSelectUI(player);
GetTree().Paused = true;
var animationNode = GetNode<AnimationPlayer>("SceneTransition/AnimationPlayer");
animationNode.AnimationFinished -= EnableCharacterSelect;
GD.Print("On animation finished: Enable characters");
var gameManagerInstance = GetNode<GameManager>("GameManager");
foreach (var player in gameManagerInstance.Players)
gameManagerInstance.OnHandleCharacterSelectUI(player);
GetTree().Paused = true;
var animationNode = GetNode<AnimationPlayer>("SceneTransition/AnimationPlayer");
animationNode.AnimationFinished -= EnableCharacterSelect;
}
}

View File

@@ -11,7 +11,7 @@
[ext_resource type="PackedScene" uid="uid://bsq7edeueqyjg" path="res://Levels/Scenes/Level7.tscn" id="8_pcp3p"]
[ext_resource type="PackedScene" uid="uid://c4xcka4ekuur8" path="res://Levels/Scenes/Level8.tscn" id="9_n1hja"]
[ext_resource type="PackedScene" uid="uid://djwln4at4ho44" path="res://Levels/Scenes/Level9.tscn" id="10_rs7ve"]
[ext_resource type="PackedScene" uid="uid://0hdnmilwrsq6" path="res://Levels/Scenes/Level10.tscn" id="11_o275c"]
[ext_resource type="PackedScene" uid="uid://tt886mv7pffe" path="res://Levels/Scenes/Level10.tscn" id="11_o275c"]
[ext_resource type="PackedScene" uid="uid://cxj6yeddshy16" path="res://GameLogic/GameManager.tscn" id="11_wiyvp"]
[ext_resource type="PackedScene" uid="uid://cvvjbka5nf52j" path="res://UI/SceneTransition.tscn" id="14_ai16y"]
@@ -39,7 +39,7 @@ reflected_light_source = 1
[node name="Main" type="Node3D" node_paths=PackedStringArray("_fpsCounter")]
script = ExtResource("1_g4hua")
Levels = Array[PackedScene]([ExtResource("11_o275c"), ExtResource("5_xj47l"), ExtResource("10_rs7ve"), ExtResource("2_jq3qe"), ExtResource("3_nhrqr"), ExtResource("2_0yhby"), ExtResource("7_58n7x"), ExtResource("6_xmedq"), ExtResource("8_pcp3p"), ExtResource("9_n1hja")])
Levels = Array[PackedScene]([ExtResource("2_jq3qe"), ExtResource("3_nhrqr"), ExtResource("2_0yhby"), ExtResource("5_xj47l"), ExtResource("7_58n7x"), ExtResource("6_xmedq"), ExtResource("8_pcp3p"), ExtResource("9_n1hja"), ExtResource("10_rs7ve"), ExtResource("11_o275c")])
GameManager = ExtResource("11_wiyvp")
_fpsCounter = NodePath("FPS Counter")
@@ -54,6 +54,7 @@ visible = false
z_as_relative = false
[node name="FPS Counter" type="Label" parent="."]
visible = false
z_index = 100
offset_left = 18.0
offset_top = 16.0

View File

@@ -11,29 +11,37 @@ public partial class BossOrb : RigidBody3D
[Export]
private PackedScene _attack;
private bool _shouldAttack = false;
[Export]
private AnimationPlayer _animationPlayer;
public void OnOrbHit(Node3D node)
public bool CanAttack = false;
public void OnOrbHit(Node node)
{
_hp.TakeDamage(50000);
GD.Print(_hp.CurrentHP);
if (_hp.CurrentHP <= 0)
if (node is Character character && character.HasMethod(Character.MethodName.OnHit))
{
EmitSignal(SignalName.OnBossOrbExploded);
QueueFree();
GD.Print("Player hit: " + character.Name);
character.Call(Character.MethodName.OnHit, node);
}
else
{
_hp.TakeDamage(1);
if (_animationPlayer != null)
_animationPlayer.Play("OnHit");
GD.Print(_hp.CurrentHP);
if (_hp.CurrentHP <= 0)
{
EmitSignal(SignalName.OnBossOrbExploded);
QueueFree();
}
}
}
public void OnFire(Node3D node)
public void OnFire()
{
if (_shouldAttack)
{
var attackZone = GetNode<Area3D>("/root/Level10/AttackZone");
var attack = _attack.Instantiate<Node3D>();
attackZone.AddChild(attack);
}
_shouldAttack = !_shouldAttack;
var attack = _attack.Instantiate<Node3D>();
attack.GlobalPosition = GlobalPosition;
GetTree().Root.AddChild(attack);
}
public void DestroySelf()

View File

@@ -3,6 +3,19 @@ using Godot;
public partial class GameEnding : Node3D
{
public void OnGameEnding()
{
var bgmPlayer = GetTree().Root.GetNode<BGMPlayer>("BgmPlayer");
bgmPlayer.Stop();
var videoPlayer = GetNode<VideoStreamPlayer>("VideoStreamPlayer");
videoPlayer.Play();
videoPlayer.Finished += CutsceneOver;
var gameManager = GetTree().Root.GetNode<GameManager>("Main/GameManager");
gameManager.OnLevelClear();
}
public void CutsceneOver()
{
var bgmPlayer = GetTree().Root.GetNode<BGMPlayer>("BgmPlayer");
bgmPlayer.ProcessMode = ProcessModeEnum.Always;
@@ -11,5 +24,12 @@ public partial class GameEnding : Node3D
var animationPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
animationPlayer.Play("GameEnding");
animationPlayer.AnimationFinished += AfterCredits;
}
public void AfterCredits(StringName animationName)
{
var gameManager = GetTree().Root.GetNode<GameManager>("Main/GameManager");
gameManager.ReloadGameScene();
}
}

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=152 format=3 uid="uid://0hdnmilwrsq6"]
[gd_scene load_steps=158 format=3 uid="uid://tt886mv7pffe"]
[ext_resource type="Script" path="res://Levels/Scripts/FinalLevel.cs" id="1_sy7dk"]
[ext_resource type="Material" uid="uid://04v0ve8qhqkv" path="res://Video/CloudScrollMaterial.tres" id="2_2sumr"]
@@ -38,7 +38,14 @@
[ext_resource type="Texture2D" uid="uid://dsqvracnne1pi" path="res://Levels/Models/Stage10/FINAL STAGE_relativity.png" id="23_qjhvx"]
[ext_resource type="Texture2D" uid="uid://5mlk2fw47ib5" path="res://Levels/Models/Stage10/FINAL STAGE_SPHERES.png" id="24_no4m6"]
[ext_resource type="Script" path="res://Levels/Scenes/BossOrb.cs" id="34_ditjx"]
[ext_resource type="PackedScene" uid="uid://cql4evq5281n4" path="res://Levels/Scripts/PyramidAttack.tscn" id="34_kwn8s"]
[ext_resource type="PackedScene" uid="uid://cql4evq5281n4" path="res://Enemies/Attacks/GodCircuitAttacks/PyramidAttack.tscn" id="34_isrj4"]
[ext_resource type="PackedScene" uid="uid://uwia12i7yykb" path="res://Enemies/Attacks/GodCircuitAttacks/LaserAttack.tscn" id="37_jd5dy"]
[ext_resource type="Animation" uid="uid://cvpg4y8gcowbb" path="res://Animations/OnHitPyramid.res" id="38_cg4tc"]
[ext_resource type="Animation" uid="uid://v2hbm2nsfddk" path="res://Animations/OnHitOrb.res" id="39_4f5hv"]
[ext_resource type="AudioStream" uid="uid://6yf38ykqn31u" path="res://Audio/SFX/HitObstacle.wav" id="40_ku5el"]
[ext_resource type="PackedScene" uid="uid://b75khmojjbq4f" path="res://Enemies/Attacks/GodCircuitAttacks/HedronAttack.tscn" id="40_sb1e4"]
[ext_resource type="Animation" uid="uid://bhbo613dr52fg" path="res://Animations/OnHitHedron.res" id="42_8q562"]
[ext_resource type="PackedScene" uid="uid://b1tm30iteu5rh" path="res://Video/VideoPlayer.tscn" id="44_imo6u"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_hdhsy"]
sky_top_color = Color(1, 1, 1, 1)
@@ -1461,41 +1468,6 @@ size = Vector3(5, 20, 27.822)
[sub_resource type="BoxShape3D" id="BoxShape3D_myhef"]
size = Vector3(5, 20, 27.822)
[sub_resource type="Animation" id="Animation_iincs"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("ColorRect:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Label:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_l1ojm"]
_data = {
"GameEnding": ExtResource("13_plu01"),
"RESET": SubResource("Animation_iincs")
}
[sub_resource type="LabelSettings" id="LabelSettings_gphy5"]
[sub_resource type="LabelSettings" id="LabelSettings_cs88m"]
font = ExtResource("14_fcfkf")
font_size = 24
@@ -1549,50 +1521,62 @@ _data = {
"RESET": SubResource("Animation_wy7s8")
}
[sub_resource type="BoxShape3D" id="BoxShape3D_eianc"]
size = Vector3(2.65825, 1.099, 1.20222)
[sub_resource type="CylinderShape3D" id="CylinderShape3D_los3u"]
height = 3.85738
radius = 0.412024
[sub_resource type="Animation" id="Animation_qiaxl"]
resource_name = "OnHit"
length = 0.25
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("PyramidSprite:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.2, 0.25),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 0.054902, 0, 0.384314), Color(1, 1, 1, 1)]
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ua8sg"]
_data = {
"OnHit": ExtResource("38_cg4tc")
}
[sub_resource type="Animation" id="Animation_kp4ef"]
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xjg08"]
_data = {
"OnHit": ExtResource("39_4f5hv")
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_dwac1"]
_data = {
"OnHit": ExtResource("42_8q562")
}
[sub_resource type="Animation" id="Animation_iincs"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("PyramidSprite:modulate")
tracks/0/path = NodePath("ColorRect:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 0.054902, 0, 0.384314)]
"values": [Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Label:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_hkeo4"]
[sub_resource type="AnimationLibrary" id="AnimationLibrary_l1ojm"]
_data = {
"OnHit": SubResource("Animation_qiaxl"),
"RESET": SubResource("Animation_kp4ef")
"GameEnding": ExtResource("13_plu01"),
"RESET": SubResource("Animation_iincs")
}
[sub_resource type="LabelSettings" id="LabelSettings_gphy5"]
font = ExtResource("14_fcfkf")
font_size = 48
[node name="Level10" type="Node3D" groups=["Level"]]
process_mode = 3
script = ExtResource("1_sy7dk")
@@ -1773,7 +1757,7 @@ libraries = {
transform = Transform3D(0.75, 0, 0, 0, 0.657759, 0.360351, 0, -0.360351, 0.657759, 0, 1.29734, -1.26966)
[node name="HP Component" parent="God Circuit" instance=ExtResource("7_nvq88")]
MaximumHP = 100000000
MaximumHP = 200
[node name="StaticBody3D" type="StaticBody3D" parent="."]
collision_mask = 0
@@ -1794,39 +1778,6 @@ shape = SubResource("BoxShape3D_hf7lb")
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 9.03101)
shape = SubResource("BoxShape3D_myhef")
[node name="GameEnding" type="Node3D" parent="."]
script = ExtResource("12_kefc8")
[node name="AnimationPlayer" type="AnimationPlayer" parent="GameEnding"]
libraries = {
"": SubResource("AnimationLibrary_l1ojm")
}
[node name="ColorRect" type="ColorRect" parent="GameEnding"]
modulate = Color(1, 1, 1, 0)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = -1.0
offset_bottom = 2.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 1)
[node name="Label" type="Label" parent="GameEnding"]
modulate = Color(1, 1, 1, 0)
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -959.0
offset_right = 959.0
offset_bottom = 1077.0
grow_horizontal = 2
size_flags_horizontal = 4
label_settings = SubResource("LabelSettings_gphy5")
horizontal_alignment = 1
vertical_alignment = 1
[node name="Boss GUI" type="Control" parent="."]
layout_mode = 3
anchors_preset = 0
@@ -1843,12 +1794,13 @@ offset_top = 1004.0
offset_right = -449.0
offset_bottom = 1024.0
grow_horizontal = 2
max_value = 1e+08
max_value = 300.0
nine_patch_stretch = true
texture_progress = ExtResource("5_jjg8p")
script = ExtResource("2_53ar2")
[node name="Label" type="Label" parent="Boss GUI"]
z_index = -1
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -1871,24 +1823,16 @@ libraries = {
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="Boss GUI"]
stream = ExtResource("7_gnuti")
[node name="AttackZone" type="Area3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.23141, 0, -0.954215)
collision_layer = 128
collision_mask = 128
[node name="CollisionShape3D" type="CollisionShape3D" parent="AttackZone"]
shape = SubResource("BoxShape3D_eianc")
max_polyphony = 15
[node name="BossOrbs" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.260435, 0, -1.52945)
script = ExtResource("8_7itwt")
[node name="Pyramid" type="RigidBody3D" parent="BossOrbs" node_paths=PackedStringArray("_hp")]
[node name="Pyramid" type="RigidBody3D" parent="BossOrbs" node_paths=PackedStringArray("_hp", "_animationPlayer")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.064761, 0.75105, -2.67492)
collision_layer = 128
collision_mask = 68
collision_mask = 196
gravity_scale = 0.0
continuous_cd = true
max_contacts_reported = 10
@@ -1897,11 +1841,11 @@ can_sleep = false
freeze_mode = 1
script = ExtResource("34_ditjx")
_hp = NodePath("HP Component")
_attack = ExtResource("34_kwn8s")
_attack = ExtResource("34_isrj4")
_animationPlayer = NodePath("AnimationPlayer")
[node name="PyramidSprite" type="Sprite3D" parent="BossOrbs/Pyramid"]
transform = Transform3D(0.08, 0, 0, 0, 0.08, 0, 0, 0, 0.08, 0, 0, 0)
modulate = Color(1, 0.054902, 0, 0.384314)
axis = 1
texture = ExtResource("10_dusre")
@@ -1910,16 +1854,20 @@ transform = Transform3D(1, 0, -2.98023e-08, 0, 1, 0, 2.98023e-08, 0, 1, 0.051398
shape = SubResource("CylinderShape3D_los3u")
[node name="HP Component" parent="BossOrbs/Pyramid" instance=ExtResource("7_nvq88")]
MaximumHP = 2000000
MaximumHP = 15
[node name="AnimationPlayer" type="AnimationPlayer" parent="BossOrbs/Pyramid"]
libraries = {
"": SubResource("AnimationLibrary_hkeo4")
"": SubResource("AnimationLibrary_ua8sg")
}
[node name="Orb" type="RigidBody3D" parent="BossOrbs" node_paths=PackedStringArray("_hp")]
[node name="Timer" type="Timer" parent="BossOrbs/Pyramid"]
wait_time = 15.0
autostart = true
[node name="Orb" type="RigidBody3D" parent="BossOrbs" node_paths=PackedStringArray("_hp", "_animationPlayer")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.75045, 0.241416, 1.28096)
collision_layer = 128
collision_layer = 0
collision_mask = 68
gravity_scale = 0.0
continuous_cd = true
@@ -1929,7 +1877,8 @@ can_sleep = false
freeze_mode = 1
script = ExtResource("34_ditjx")
_hp = NodePath("HP Component")
_attack = ExtResource("34_kwn8s")
_attack = ExtResource("37_jd5dy")
_animationPlayer = NodePath("AnimationPlayer")
[node name="CollisionShape3D" type="CollisionShape3D" parent="BossOrbs/Orb"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.473554, 0, 0.565499)
@@ -1941,11 +1890,20 @@ axis = 1
texture = ExtResource("8_2yfol")
[node name="HP Component" parent="BossOrbs/Orb" instance=ExtResource("7_nvq88")]
MaximumHP = 2000000
MaximumHP = 15
[node name="Hedron" type="RigidBody3D" parent="BossOrbs" node_paths=PackedStringArray("_hp")]
[node name="AnimationPlayer" type="AnimationPlayer" parent="BossOrbs/Orb"]
libraries = {
"": SubResource("AnimationLibrary_xjg08")
}
[node name="Timer" type="Timer" parent="BossOrbs/Orb"]
wait_time = 13.0
autostart = true
[node name="Hedron" type="RigidBody3D" parent="BossOrbs" node_paths=PackedStringArray("_hp", "_animationPlayer")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.88775, 0.704458, 1.45723)
collision_layer = 128
collision_layer = 0
collision_mask = 68
gravity_scale = 0.0
continuous_cd = true
@@ -1955,7 +1913,8 @@ can_sleep = false
freeze_mode = 1
script = ExtResource("34_ditjx")
_hp = NodePath("HP Component")
_attack = ExtResource("34_kwn8s")
_attack = ExtResource("40_sb1e4")
_animationPlayer = NodePath("AnimationPlayer")
[node name="HedronSprite" type="Sprite3D" parent="BossOrbs/Hedron"]
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
@@ -1967,13 +1926,75 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0136576, 0, 0)
shape = SubResource("CylinderShape3D_los3u")
[node name="HP Component" parent="BossOrbs/Hedron" instance=ExtResource("7_nvq88")]
MaximumHP = 2000000
MaximumHP = 15
[node name="AnimationPlayer" type="AnimationPlayer" parent="BossOrbs/Hedron"]
libraries = {
"": SubResource("AnimationLibrary_dwac1")
}
[node name="Timer" type="Timer" parent="BossOrbs/Hedron"]
wait_time = 28.0
autostart = true
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="BossOrbs"]
stream = ExtResource("40_ku5el")
volume_db = 1.0
pitch_scale = 1.1
max_polyphony = 15
[node name="GameEnding" type="Node3D" parent="."]
script = ExtResource("12_kefc8")
[node name="AnimationPlayer" type="AnimationPlayer" parent="GameEnding"]
libraries = {
"": SubResource("AnimationLibrary_l1ojm")
}
[node name="ColorRect" type="ColorRect" parent="GameEnding"]
modulate = Color(1, 1, 1, 0)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = -1.0
offset_bottom = 2.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 1)
[node name="Label" type="Label" parent="GameEnding"]
modulate = Color(1, 1, 1, 0)
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -98.5
offset_top = -34.5
offset_right = 98.5
offset_bottom = 34.5
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
text = "THE END"
label_settings = SubResource("LabelSettings_gphy5")
horizontal_alignment = 1
vertical_alignment = 1
[node name="VideoStreamPlayer" parent="GameEnding" instance=ExtResource("44_imo6u")]
autoplay = false
[connection signal="DestroyRemainingOrbs" from="God Circuit" to="BossOrbs/Pyramid" method="DestroySelf"]
[connection signal="DestroyRemainingOrbs" from="God Circuit" to="BossOrbs/Orb" method="DestroySelf"]
[connection signal="DestroyRemainingOrbs" from="God Circuit" to="BossOrbs/Hedron" method="DestroySelf"]
[connection signal="OnEnemyBossHit" from="God Circuit" to="Boss GUI/TextureProgressBar" method="UpdateBar"]
[connection signal="body_entered" from="AttackZone" to="BossOrbs/Pyramid" method="OnFire"]
[connection signal="OnGameEnding" from="God Circuit" to="GameEnding" method="OnGameEnding"]
[connection signal="OnBossOrbExploded" from="BossOrbs/Pyramid" to="God Circuit" method="OnBossOrbDestroyed"]
[connection signal="body_entered" from="BossOrbs/Pyramid" to="BossOrbs/Pyramid" method="OnOrbHit"]
[connection signal="timeout" from="BossOrbs/Pyramid/Timer" to="BossOrbs/Pyramid" method="OnFire"]
[connection signal="OnBossOrbExploded" from="BossOrbs/Orb" to="God Circuit" method="OnBossOrbDestroyed"]
[connection signal="body_entered" from="BossOrbs/Orb" to="BossOrbs/Orb" method="OnOrbHit"]
[connection signal="timeout" from="BossOrbs/Orb/Timer" to="BossOrbs/Orb" method="OnFire"]
[connection signal="OnBossOrbExploded" from="BossOrbs/Hedron" to="God Circuit" method="OnBossOrbDestroyed"]
[connection signal="body_entered" from="BossOrbs/Hedron" to="BossOrbs/Hedron" method="OnOrbHit"]
[connection signal="timeout" from="BossOrbs/Hedron/Timer" to="BossOrbs/Hedron" method="OnFire"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=39 format=3 uid="uid://btl5fdyjewnwc"]
[gd_scene load_steps=40 format=3 uid="uid://btl5fdyjewnwc"]
[ext_resource type="Script" path="res://Levels/Scripts/Level.cs" id="1_1xwm7"]
[ext_resource type="PackedScene" uid="uid://jgf7k1r35km1" path="res://Levels/ExitPortal.tscn" id="3_2t766"]
@@ -8,6 +8,7 @@
[ext_resource type="PackedScene" uid="uid://dahp73fwld24h" path="res://Enemies/RangedEnemy.tscn" id="5_8b1ug"]
[ext_resource type="Texture2D" uid="uid://33cgwfy7mqcg" path="res://Levels/Models/Stage3/STAGE 3_LIon Marquee_2320x920_2.png" id="5_kwy6o"]
[ext_resource type="PackedScene" uid="uid://bt5rolsyjmx55" path="res://Enemies/MeleeEnemy.tscn" id="6_b7xn3"]
[ext_resource type="AudioStream" uid="uid://6yf38ykqn31u" path="res://Audio/SFX/HitObstacle.wav" id="7_j16pm"]
[ext_resource type="Script" path="res://Levels/Scripts/Door.cs" id="8_ow05j"]
[ext_resource type="Shader" path="res://Levels/Scenes/Door.gdshader" id="9_05wf0"]
[ext_resource type="Texture2D" uid="uid://cep6lm4mg58ua" path="res://Levels/Models/Stage3/STAGE 3_2317.png" id="11_eto36"]
@@ -72,7 +73,7 @@ shader = ExtResource("9_05wf0")
[sub_resource type="Animation" id="Animation_uk6to"]
resource_name = "HitFlash"
length = 0.2
length = 0.7
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = false
@@ -97,6 +98,29 @@ tracks/1/keys = {
"update": 0,
"values": [Color(1, 1, 1, 1), Color(0.752941, 0, 0, 1), Color(1, 1, 1, 1)]
}
tracks/2/type = "audio"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("AudioStreamPlayer")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"clips": [],
"times": PackedFloat32Array()
}
tracks/2/use_blend = true
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("AudioStreamPlayer:playing")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_27wc0"]
length = 0.001
@@ -124,6 +148,18 @@ tracks/1/keys = {
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("AudioStreamPlayer:playing")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_lfq7u"]
_data = {
@@ -507,6 +543,9 @@ collision_mask = 32
transform = Transform3D(-4.37114e-08, 2.5411e-21, 1, 1.42109e-14, 1, -2.5411e-21, -1, -2.84217e-14, -4.37114e-08, -0.571146, 0.810928, 0.294388)
shape = SubResource("BoxShape3D_yew2s")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="Door"]
stream = ExtResource("7_j16pm")
[node name="Exit Portal" parent="." instance=ExtResource("3_2t766")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.42152, -0.073884, -5.35807)

View File

@@ -429,17 +429,14 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.102972, 0)
mesh = SubResource("ArrayMesh_aecmk")
skeleton = NodePath("")
[node name="Melee Enemy2" parent="STAGE 9/Plane" node_paths=PackedStringArray("_hp") instance=ExtResource("6_he4fx")]
[node name="Melee Enemy2" parent="STAGE 9/Plane" instance=ExtResource("6_he4fx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.50991, 0, 1.92293)
_hp = NodePath("../../../Melee Enemy2/HP Component")
[node name="Melee Enemy2" parent="STAGE 9/Plane/Melee Enemy2" node_paths=PackedStringArray("_hp") instance=ExtResource("6_he4fx")]
[node name="Melee Enemy2" parent="STAGE 9/Plane/Melee Enemy2" instance=ExtResource("6_he4fx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.932325, -0.367979, -6.01649)
_hp = NodePath("../../../../Melee Enemy2/HP Component")
[node name="Melee Enemy2" parent="STAGE 9/Plane/Melee Enemy2/Melee Enemy2" node_paths=PackedStringArray("_hp") instance=ExtResource("6_he4fx")]
[node name="Melee Enemy2" parent="STAGE 9/Plane/Melee Enemy2/Melee Enemy2" instance=ExtResource("6_he4fx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.05054, -0.367979, -0.683629)
_hp = NodePath("../../../../../Melee Enemy2/HP Component")
[node name="Cube" type="MeshInstance3D" parent="STAGE 9"]
transform = Transform3D(-1.88868, 0, -9.70661e-08, 0, 1, 0, 6.1541e-07, 0, -0.297894, 2.97173, 0.129772, -3.56831)
@@ -581,30 +578,30 @@ libraries = {
[node name="Enemies" type="Node3D" parent="."]
[node name="Melee Enemy" parent="." instance=ExtResource("6_he4fx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.07774, 0.251952, 1.13652)
[node name="Melee Enemy2" parent="." instance=ExtResource("6_he4fx")]
[node name="Melee Enemy2" parent="Enemies" instance=ExtResource("6_he4fx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.59927, 0, 2.47846)
[node name="RangedEnemy4" parent="." instance=ExtResource("5_g2lk8")]
[node name="Melee Enemy" parent="Enemies" instance=ExtResource("6_he4fx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.07774, 0.251952, 1.13652)
[node name="RangedEnemy4" parent="Enemies" instance=ExtResource("5_g2lk8")]
transform = Transform3D(-0.999999, 0, -0.00116936, 0, 1, 0, 0.00116936, 0, -0.999999, -1.48224, -0.0960431, -2.952)
[node name="RangedEnemy" parent="." instance=ExtResource("5_g2lk8")]
[node name="RangedEnemy" parent="Enemies" instance=ExtResource("5_g2lk8")]
transform = Transform3D(-0.999999, 0, -0.00116936, 0, 1, 0, 0.00116936, 0, -0.999999, 1.88274, 0, -1.93627)
[node name="RangedEnemy6" parent="." node_paths=PackedStringArray("_hp") instance=ExtResource("5_g2lk8")]
[node name="RangedEnemy6" parent="Enemies" node_paths=PackedStringArray("_hp") instance=ExtResource("5_g2lk8")]
transform = Transform3D(-0.999999, 0, -0.00116936, 0, 1, 0, 0.00116936, 0, -0.999999, -4.88238, -0.396447, -4.21396)
_hp = NodePath("../RangedEnemy2/HP Component")
[node name="RangedEnemy5" parent="." node_paths=PackedStringArray("_hp") instance=ExtResource("5_g2lk8")]
[node name="RangedEnemy5" parent="Enemies" node_paths=PackedStringArray("_hp") instance=ExtResource("5_g2lk8")]
transform = Transform3D(-0.999999, 0, -0.00116936, 0, 1, 0, 0.00116936, 0, -0.999999, -4.78224, -0.264298, 0.6371)
_hp = NodePath("../RangedEnemy2/HP Component")
[node name="RangedEnemy2" parent="." instance=ExtResource("5_g2lk8")]
[node name="RangedEnemy2" parent="Enemies" instance=ExtResource("5_g2lk8")]
transform = Transform3D(-0.999999, 0, -0.00116936, 0, 1, 0, 0.00116936, 0, -0.999999, 0.526673, -0.132149, -3.13367)
[node name="RangedEnemy3" parent="." instance=ExtResource("5_g2lk8")]
[node name="RangedEnemy3" parent="Enemies" instance=ExtResource("5_g2lk8")]
transform = Transform3D(-0.999999, 0, -0.00116936, 0, 1, 0, 0.00116936, 0, -0.999999, -0.307606, -0.298673, -3.61058)
[node name="Exit Portal" parent="." instance=ExtResource("7_h6fqi")]

View File

@@ -9,18 +9,23 @@ public partial class Level : Node3D
public override void _EnterTree()
{
_gameManager = GetTree().Root.GetNode<GameManager>("Main/GameManager");
_enemies = GetNode("Enemies").GetChildren().OfType<BasicEnemy>().ToList();
_gameManager = GetTree().Root.GetNode<GameManager>("Main/GameManager");
_enemies = GetNode("Enemies").GetChildren().OfType<BasicEnemy>().ToList();
}
public void OnEnemyDefeated(BasicEnemy enemy)
{
if (_enemies.Contains(enemy))
{
GD.Print("On enemy defeated " + enemy.Name);
_enemies.Remove(enemy);
if (!_enemies.Any())
_gameManager.OnAllEnemiesDefeated();
}
if (_enemies.Contains(enemy))
{
GD.Print("On enemy defeated " + enemy.Name);
_enemies.Remove(enemy);
if (!_enemies.Any())
_gameManager.OnAllEnemiesDefeated();
}
}
public void GameEnding()
{
QueueFree();
}
}

View File

@@ -29,9 +29,9 @@ public partial class Player : Node3D
public override void _Ready()
{
foreach (var character in PlayableCharacterScenes)
{
CharactersLeftOnStage.Add(character);
}
foreach (var character in PlayableCharacterScenes)
{
CharactersLeftOnStage.Add(character);
}
}
}

View File

@@ -47,10 +47,9 @@ public partial class CharacterSelectUpdateService : Control
node.Show();
}
public void ClearPlayerBGs(int playerIndex)
public void ClearPlayerBGs(Player player)
{
GD.Print($"Hiding player");
var allPortraits = GetNode<Control>($"P{playerIndex + 1}").GetChildren().OfType<TextureRect>();
var allPortraits = GetNode<Control>($"P{player.PlayerNumber}").GetChildren().OfType<TextureRect>();
foreach (var bg in allPortraits)
bg.Hide();
}

View File

@@ -12,48 +12,48 @@ public partial class MainMenu : Node2D
public override void _Ready()
{
GetParent().GetNode<TextureRect>("MainMenu/UIAnimations/LoreSplash").Show();
_animationPlayer = GetTree().Root.GetNode<AnimationPlayer>("/root/Main/MainMenu/UIAnimations/AnimationPlayer");
_animationPlayer.Play("IntroLore");
var bgmPlayer = GetTree().Root.GetNode<BGMPlayer>("BgmPlayer");
bgmPlayer.SetBGMFromFilepath("Audio/BGM/TitleTheme.ogg");
bgmPlayer.PlayBGM();
_player1Input = new Player1Input();
_player2Input = new Player2Input();
_animationPlayer.AnimationFinished += OnIntroAnimationFinished;
GetParent().GetNode<TextureRect>("MainMenu/UIAnimations/LoreSplash").Show();
_animationPlayer = GetTree().Root.GetNode<AnimationPlayer>("/root/Main/MainMenu/UIAnimations/AnimationPlayer");
_animationPlayer.Play("IntroLore");
var bgmPlayer = GetTree().Root.GetNode<BGMPlayer>("BgmPlayer");
bgmPlayer.SetBGMFromFilepath("Audio/BGM/TitleTheme.ogg");
bgmPlayer.PlayBGM();
_player1Input = new Player1Input();
_player2Input = new Player2Input();
_animationPlayer.AnimationFinished += OnIntroAnimationFinished;
}
public override void _UnhandledInput(InputEvent @event)
{
if (_animationPlayer.IsPlaying() && (Input.IsActionJustPressed(_player1Input.Fire()) || Input.IsActionJustPressed(_player2Input.Fire())))
{
_animationPlayer.Seek(10);
GetNode<TextureButton>("NewGame/1Player").GrabFocus();
}
if (_animationPlayer.IsPlaying() && (Input.IsActionJustReleased(_player1Input.Fire()) || Input.IsActionJustReleased(_player2Input.Fire())))
{
_animationPlayer.Seek(10);
GetNode<TextureButton>("NewGame/1Player").GrabFocus();
}
}
public void OnIntroAnimationFinished(StringName animationName)
{
GetNode<TextureButton>("NewGame/1Player").GrabFocus();
GetNode<TextureButton>("NewGame/1Player").GrabFocus();
}
private void OneSinglePlayerPressed()
{
Hide();
var main = GetTree().Root.GetNode<Main>("/root/Main");
main.LoadLevel(0, 1);
Hide();
var main = GetTree().Root.GetNode<Main>("/root/Main");
main.LoadLevel(0, 1);
}
private void OnTwoPlayerPressed()
{
Hide();
var main = GetTree().Root.GetNode<Main>("/root/Main");
main.LoadLevel(0, 2);
Hide();
var main = GetTree().Root.GetNode<Main>("/root/Main");
main.LoadLevel(0, 2);
}
private void OnQuitButtonPressed()
{
GetTree().Quit();
GetTree().Quit();
}
}

View File

@@ -19,9 +19,12 @@ public partial class StageGUI : Control
[Signal]
public delegate void OnGameOverEventHandler(Array<Player> players);
[Export]
private AudioStreamPlayer _audioStreamPlayer;
private GameManager _gameManager;
public override void _EnterTree()
public override void _Ready()
{
_gameManager = GetTree().Root.GetNode<GameManager>("Main/GameManager");
}
@@ -57,6 +60,8 @@ public partial class StageGUI : Control
player.IsSelectingCharacter = false;
EmitSignal(SignalName.OnCharacterSelectionMade, player);
GetTree().Paused = false;
if (_audioStreamPlayer != null)
_audioStreamPlayer.Play();
}
}

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=8 format=3 uid="uid://dq1gtd55p04do"]
[gd_scene load_steps=9 format=3 uid="uid://dq1gtd55p04do"]
[ext_resource type="Script" path="res://UI/StageGUI.cs" id="1_wr2m0"]
[ext_resource type="Texture2D" uid="uid://d18xmfbg47qpi" path="res://Textures/Portraits/blank-background.png" id="2_rh3al"]
@@ -7,8 +7,9 @@
[ext_resource type="Texture2D" uid="uid://1pgw8he4k5va" path="res://Textures/Portraits/pisces-bg-char.png" id="5_y2ln6"]
[ext_resource type="Texture2D" uid="uid://bacwvejc4hcou" path="res://Textures/Portraits/sag-bg-char.png" id="6_iltal"]
[ext_resource type="Texture2D" uid="uid://o7uu4efxf36e" path="res://Textures/Portraits/scorpio-bg-char.png" id="7_tgrf5"]
[ext_resource type="AudioStream" uid="uid://cdps3mfvdxdud" path="res://Audio/SFX/select.wav" id="8_3x5jr"]
[node name="StageGUI" type="Control"]
[node name="StageGUI" type="Control" node_paths=PackedStringArray("_audioStreamPlayer")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@@ -16,6 +17,7 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_wr2m0")
_audioStreamPlayer = NodePath("AudioStreamPlayer")
metadata/_edit_horizontal_guides_ = [-342.0]
[node name="SidebarLeft" type="TextureRect" parent="."]
@@ -186,3 +188,6 @@ offset_bottom = 540.0
grow_horizontal = 0
grow_vertical = 2
texture = ExtResource("7_tgrf5")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("8_3x5jr")

BIN
Video/ENDINGN CUTSCENE.ogv Normal file

Binary file not shown.

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://b1tm30iteu5rh"]
[ext_resource type="VideoStream" path="res://Video/ending mp4 version.ogv" id="1_nrrxq"]
[ext_resource type="VideoStream" path="res://Video/ENDINGN CUTSCENE.ogv" id="1_hs1w4"]
[node name="VideoStreamPlayer" type="VideoStreamPlayer"]
anchors_preset = 15
@@ -10,6 +10,6 @@ grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
stream = ExtResource("1_nrrxq")
stream = ExtResource("1_hs1w4")
autoplay = true
expand = true

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,19 +0,0 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dkm05w517x2kd"
path="res://.godot/imported/ending.ogg-67a94d6ff101ec40851be5976a626a27.oggvorbisstr"
[deps]
source_file="res://Video/ending.ogg"
dest_files=["res://.godot/imported/ending.ogg-67a94d6ff101ec40851be5976a626a27.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -35,10 +35,10 @@ project/assembly_name="GameJam2023"
ui_accept={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":71,"key_label":0,"unicode":103,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194436,"key_label":0,"unicode":46,"echo":false,"script":null)
]
}
ui_select={
@@ -98,16 +98,18 @@ p1_down={
}
p1_fire={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":71,"key_label":0,"unicode":103,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":75,"key_label":0,"unicode":107,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":9,"pressure":0.0,"pressed":true,"script":null)
]
}
p1_altfire={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":76,"key_label":0,"unicode":108,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":72,"key_label":0,"unicode":104,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":10,"pressure":0.0,"pressed":true,"script":null)
]
}
exit={
@@ -148,12 +150,14 @@ p2_fire={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194436,"key_label":0,"unicode":46,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":9,"pressure":0.0,"pressed":true,"script":null)
]
}
p2_altfire={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194310,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":10,"pressure":0.0,"pressed":true,"script":null)
]
}