Compare commits

88 Commits

Author SHA1 Message Date
7599d3a665 Boss orbs 2023-09-12 11:58:58 -07:00
37180e2def Fix various issues 2023-09-12 09:35:00 -07:00
a5d36734ef Add attack patterns for boss 2023-09-11 20:01:18 -07:00
4d8fbda71b idk dude 2023-09-11 17:42:11 -07:00
ba9c1e320e Scene transitions 2023-09-11 11:17:52 -07:00
28a29a88fe Fix game over bug 2023-09-11 00:57:50 -07:00
5788c41731 Fix hitbox 2023-09-11 00:46:37 -07:00
cb1cad1271 Fix collision with player 2023-09-11 00:43:22 -07:00
51307c0d40 Scene transitions initial implementation 2023-09-11 00:07:40 -07:00
Steven Long
81a56986ac Title transition 2023-09-10 22:16:09 -07:00
ebf9f6c117 Progress check-in to laptop 2023-09-10 19:49:59 -07:00
ed28a4bb70 Bug fix 2023-09-10 15:07:13 -07:00
f0f02bbd17 Update stuff 2023-09-10 12:18:02 -07:00
f67963b129 Buggy but playable, auto-complete on stage 6 still a bug 2023-09-08 20:13:58 -07:00
29140712f6 Elevation shot 2023-09-08 14:09:18 -07:00
f7008b40ff Fix capricorn projectile bug 2023-09-08 12:46:23 -07:00
9256c0a09e Re-import bgm as ogg, fix teleport bug (hopefully) 2023-09-08 08:56:44 -07:00
4309111382 Update boss fight 2023-09-08 01:40:32 -07:00
929629a826 Boss hit animation 2023-09-08 01:34:37 -07:00
Steven Long
5362240120 Re-enable collisions 2023-09-07 23:28:00 -07:00
Steven Long
8e363587b9 Enable stage collisions 2023-09-07 22:06:54 -07:00
833ad3209e goodbye collisions 2023-09-07 20:03:22 -07:00
4b840bbe7f Door hit 2023-09-07 01:21:05 -07:00
379ef0189c Add wall boundaries 2023-09-06 20:53:38 -07:00
8a923f04c4 ????????? 2023-09-06 20:32:16 -07:00
5405c33192 Fix music loop 2023-09-06 19:55:00 -07:00
7733032397 Fix megami box 2023-09-06 19:51:25 -07:00
41adf908a5 Actual fix 2023-09-06 18:28:14 -07:00
f4c0944afa Fix range enemy rotation 2023-09-06 17:59:16 -07:00
aac5fbd297 Fix game over 2023-09-06 17:41:53 -07:00
5acfb9300c Make enemy shots smaller 2023-09-06 15:38:27 -07:00
d7dd58b5df Refactor projectiles 2023-09-06 15:20:34 -07:00
d536aa2014 Refactor 2023-09-06 14:43:12 -07:00
f8cca640a6 Beeg checkin 2023-09-06 03:49:16 -07:00
f180d4cacd Oops big commit 2023-09-06 01:32:54 -07:00
ed4ebfafac Fix Capricorn sprite placement 2023-09-05 02:11:58 -07:00
b9e66d9f93 Oops 2023-09-05 01:52:10 -07:00
c645c56fb8 Capricorn laser done 2023-09-05 00:30:05 -07:00
5eaa5fc91e Cleanup 2023-09-04 23:57:22 -07:00
69fed8d403 UI Changes 2023-09-04 23:56:16 -07:00
83b4d90ccb Update projectile textures 2023-09-04 22:17:37 -07:00
64f5ec8a5d SFX 2023-09-04 22:09:56 -07:00
d0ea3eeec1 Replace background of sidebar 2023-09-04 21:12:34 -07:00
4e3b200a8d Import Stage 7 2023-09-04 20:59:01 -07:00
ef3045b3d2 ???? 2023-09-04 20:50:50 -07:00
2d2dea616c Animate Capricorn 2023-09-04 19:26:28 -07:00
75bbe25929 Basic game over imp 2023-09-04 18:14:41 -07:00
59a77d084c Fix hitboxes, add collision detection to maps 2023-09-04 18:07:58 -07:00
316651f409 Trying to fix spawn issues 2023-09-04 17:22:02 -07:00
ad48e723d5 End to end kind of works 2023-09-04 16:40:14 -07:00
b315a90720 I am doing a CHAOS check in. showing support for one another. I need SIX jacks to post, not share, this message to show you are always there to kill chaos if someone needs it. let's go gentlemen... 2023-09-04 16:11:05 -07:00
4d0b0196e6 sum fixes 2023-09-04 15:02:17 -07:00
0be97870dc Characters exit 2023-09-04 13:39:18 -07:00
5aff65d384 Fix exit 2023-09-04 13:02:01 -07:00
a6a8f5e893 Select fix 2023-09-04 11:43:54 -07:00
e27fe40420 Fix spawn location and on hit 2023-09-04 11:36:31 -07:00
c2239d240e Fix multiplayer 2023-09-04 07:20:33 -07:00
c32bbfe45a Refactor Player and Character 2023-09-04 06:42:02 -07:00
a8ea40dee8 Fix small selection bug 2023-09-04 04:53:50 -07:00
70bf65887c Import megami 2023-09-04 04:52:41 -07:00
b29f7ce75b Stage 6 import 2023-09-04 04:28:24 -07:00
8523d6b64f Madness check-in 2023-09-04 04:19:27 -07:00
bf60e2dd9e Fix hit detection 2023-09-04 01:43:20 -07:00
0bd39bfd51 Minor fixes 2023-09-04 01:36:18 -07:00
3738f24705 Fix issues 2023-09-04 01:33:30 -07:00
8eeca13607 Fix shader 2023-09-04 00:06:22 -07:00
6ff28bce60 CUTTTTTAAAAA 2023-09-03 23:10:58 -07:00
1ae76971f7 Add final level, start on cutter weapon 2023-09-03 22:05:39 -07:00
43f2da2f4b Add scorpio 2023-09-03 21:03:42 -07:00
53d8129cbb Fix hit detection 2023-09-03 19:40:34 -07:00
aa9b5a1793 Enemy follow 2023-09-03 18:23:51 -07:00
c8d0eefd7e Improve game over conditions 2023-09-03 15:57:21 -07:00
23f20f08e0 Set game over for character condition 2023-09-03 15:41:39 -07:00
f7417d0afd Initial character select implementation 2023-09-03 15:06:39 -07:00
a15973a621 Add stuff 2023-09-03 00:43:27 -07:00
23443546b2 Add game manager 2023-09-03 00:30:18 -07:00
cf2642be2c Boss healthbar 2023-09-03 00:16:40 -07:00
7764644b90 nobody is reading this 2023-09-02 21:43:53 -07:00
071010f652 Add controller support 2023-09-02 21:05:56 -07:00
9b5a94bfab Set spawn points 2023-09-02 20:59:00 -07:00
736060d6ca Load level 2023-09-02 20:03:20 -07:00
cff32e0fb9 Placeholder music 2023-09-02 18:33:44 -07:00
271b0ede0d Add stages 2023-09-02 18:17:24 -07:00
334378932c Basic enemy pathing implementation 2023-09-02 17:42:07 -07:00
549cb7a325 Bullet hit rock detection 2023-09-02 15:58:13 -07:00
11a2554697 A lot of UI work....
opening slash animation
main menu
load first level
2023-09-02 15:50:21 -07:00
c3d19b8e0d Fix project 2023-09-02 13:42:29 -07:00
f9c9bf0990 Fix project layout 2023-09-02 13:28:16 -07:00
520 changed files with 55019 additions and 4594 deletions

View File

@@ -0,0 +1,14 @@
[gd_scene load_steps=3 format=3 uid="uid://dykvpgrjto227"]
[sub_resource type="Animation" id="Animation_7sp5o"]
resource_name = "ProjectileAnimation"
[sub_resource type="AnimationLibrary" id="AnimationLibrary_1g8r3"]
_data = {
"ProjectileAnimation": SubResource("Animation_7sp5o")
}
[node name="AnimationPlayer" type="AnimationPlayer"]
libraries = {
"": SubResource("AnimationLibrary_1g8r3")
}

View File

@@ -0,0 +1,220 @@
[gd_scene load_steps=8 format=3 uid="uid://cjl20bs56430j"]
[ext_resource type="Texture2D" uid="uid://b1ucutlpx3fnp" path="res://Textures/GUI/INTRO LORE.png" id="1_f4dp3"]
[ext_resource type="Texture2D" uid="uid://haxbuoepqn2b" path="res://Textures/GUI/LEVEL DROP 1.png" id="2_r3e0d"]
[sub_resource type="Animation" id="Animation_3u8q8"]
resource_name = "FirstLevel"
length = 5.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("DissolveRect:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("FirstLevelSplash:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 5),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("LoreSplash:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 5),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, false]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("DissolveRect:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 5),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
[sub_resource type="Animation" id="Animation_qsjit"]
resource_name = "IntroLore"
length = 10.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("DissolveRect:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 3, 7.5, 10),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("DissolveRect:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 10),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("LoreSplash:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 10),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("FirstLevelSplash:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_fm0re"]
resource_name = "RESET"
length = 0.1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("DissolveRect: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("FirstLevelSplash:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("DissolveRect:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("LoreSplash:visible")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_ghusn"]
resource_name = "fade_out"
length = 3.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("DissolveRect:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 3),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_iabf8"]
_data = {
"FirstLevel": SubResource("Animation_3u8q8"),
"IntroLore": SubResource("Animation_qsjit"),
"RESET": SubResource("Animation_fm0re"),
"fade_out": SubResource("Animation_ghusn")
}
[node name="UIAnimations" type="CanvasLayer"]
[node name="DissolveRect" type="ColorRect" parent="."]
visible = false
modulate = Color(1, 1, 1, 0)
z_index = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
color = Color(0, 0, 0, 1)
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
speed_scale = 64.0
libraries = {
"": SubResource("AnimationLibrary_iabf8")
}
[node name="LoreSplash" type="TextureRect" parent="."]
visible = false
show_behind_parent = true
offset_right = 1920.0
offset_bottom = 1080.0
texture = ExtResource("1_f4dp3")
[node name="FirstLevelSplash" type="TextureRect" parent="."]
z_index = -2
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("2_r3e0d")

BIN
Audio/BGM/BossTheme.ogg Normal file

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://cb3wcnvvmogkh"
path="res://.godot/imported/BossTheme.ogg-459b51256339e59464889a4669185554.oggvorbisstr"
[deps]
source_file="res://Audio/BGM/BossTheme.ogg"
dest_files=["res://.godot/imported/BossTheme.ogg-459b51256339e59464889a4669185554.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

BIN
Audio/BGM/GameOverTheme.ogg Normal file

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://bjiskpj5g86sr"
path="res://.godot/imported/GameOverTheme.ogg-4305545c9f4c8e8c96ca0f12024e0581.oggvorbisstr"
[deps]
source_file="res://Audio/BGM/GameOverTheme.ogg"
dest_files=["res://.godot/imported/GameOverTheme.ogg-4305545c9f4c8e8c96ca0f12024e0581.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

BIN
Audio/BGM/LevelTheme.ogg Normal file

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://bti387lu4dnfp"
path="res://.godot/imported/LevelTheme.ogg-59eab2762fa29514e6a1603812a098df.oggvorbisstr"
[deps]
source_file="res://Audio/BGM/LevelTheme.ogg"
dest_files=["res://.godot/imported/LevelTheme.ogg-59eab2762fa29514e6a1603812a098df.oggvorbisstr"]
[params]
loop=true
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

BIN
Audio/BGM/OpeningTheme.ogg Normal file

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://c1cot3ppc44rn"
path="res://.godot/imported/OpeningTheme.ogg-3e12ca3ad85ca7dd71d6f3b774212a5d.oggvorbisstr"
[deps]
source_file="res://Audio/BGM/OpeningTheme.ogg"
dest_files=["res://.godot/imported/OpeningTheme.ogg-3e12ca3ad85ca7dd71d6f3b774212a5d.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

BIN
Audio/BGM/TitleTheme.ogg Normal file

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dgskdjt8opeep"
path="res://.godot/imported/TitleTheme.ogg-955f1f76f6a13fdf046575d6a1db7cdb.oggvorbisstr"
[deps]
source_file="res://Audio/BGM/TitleTheme.ogg"
dest_files=["res://.godot/imported/TitleTheme.ogg-955f1f76f6a13fdf046575d6a1db7cdb.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

BIN
Audio/SFX/Green Wave.wav Normal file

Binary file not shown.

View File

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

BIN
Audio/SFX/blue laser.wav Normal file

Binary file not shown.

View File

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

Binary file not shown.

View File

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

Binary file not shown.

View File

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

BIN
Audio/SFX/grass cutter.wav Normal file

Binary file not shown.

View File

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

BIN
Audio/SFX/midboss hurt.wav Normal file

Binary file not shown.

View File

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

BIN
Audio/SFX/misc1.wav Normal file

Binary file not shown.

View File

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

BIN
Audio/SFX/ominous.wav Normal file

Binary file not shown.

View File

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

BIN
Audio/SFX/select.wav Normal file

Binary file not shown.

View File

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

BIN
Audio/SFX/shooting.wav Normal file

Binary file not shown.

View File

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

View File

@@ -0,0 +1,17 @@
using Godot;
public partial class BGMPlayer : AudioStreamPlayer
{
public void SetBGMFromFilepath(string path)
{
var audioStream = ResourceLoader.Load<AudioStream>(path);
if (Stream != audioStream)
Stream = audioStream;
}
public void PlayBGM()
{
if (!Playing)
Play();
}
}

View File

@@ -0,0 +1,54 @@
[gd_scene load_steps=5 format=3 uid="uid://rlxnnw4yay7e"]
[ext_resource type="Script" path="res://Player/Base/Projectile.cs" id="1_ex3g8"]
[ext_resource type="Texture2D" uid="uid://dd71tdgrgic46" path="res://Textures/Projectiles/LB ORB.png" id="2_6l2aj"]
[sub_resource type="Curve3D" id="Curve3D_eve6n"]
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, -3),
"tilts": PackedFloat32Array(0, 0)
}
point_count = 2
[sub_resource type="CylinderShape3D" id="CylinderShape3D_e4v7f"]
height = 7.0
radius = 0.154574
[node name="EnemyBullet" type="Path3D"]
curve = SubResource("Curve3D_eve6n")
script = ExtResource("1_ex3g8")
[node name="PathFollow3D" type="PathFollow3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
loop = false
tilt_enabled = false
[node name="RigidBody3D" type="RigidBody3D" parent="PathFollow3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
collision_layer = 0
collision_mask = 2
gravity_scale = 0.0
continuous_cd = true
max_contacts_reported = 10
contact_monitor = true
can_sleep = false
lock_rotation = true
freeze = true
freeze_mode = 1
[node name="CollisionShape3D" type="CollisionShape3D" parent="PathFollow3D/RigidBody3D"]
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, 0.0111055, 1.02602, 0)
shape = SubResource("CylinderShape3D_e4v7f")
[node name="Sprite3D" type="Sprite3D" parent="PathFollow3D/RigidBody3D/CollisionShape3D"]
transform = Transform3D(0.08, 0, 0, 0, 0.08, 0, 0, 0, 0.08, -0.390424, 0, 0.436329)
centered = false
axis = 1
texture = ExtResource("2_6l2aj")
[node name="TTL" type="Timer" parent="PathFollow3D"]
process_callback = 0
wait_time = 0.8
autostart = true
[connection signal="body_entered" from="PathFollow3D/RigidBody3D" to="." method="OnPlayerHit"]

View File

@@ -0,0 +1,29 @@
using System.Linq;
using Godot;
public partial class FireAtPlayer : Timer
{
[Export]
private BasicEnemy _enemy;
[Export]
private PackedScene _fireProjectile;
[Export]
private double _distanceToPlayer = 3;
public void OnFireAtPlayer()
{
var players = GetTree().GetNodesInGroup("Player");
if (players.Any())
{
var convertedPlayers = players.Select(x => (Node3D)x);
var target = convertedPlayers.OrderBy(x => _enemy.Position.DistanceTo(x.Position)).FirstOrDefault();
if (_enemy.Position.DistanceTo(target.Position) < _distanceToPlayer)
{
var projectile = _fireProjectile.Instantiate<Projectile>();
projectile.Rotation = new Vector3(0, _enemy.Rotation.Y, 0);
projectile.Position = _enemy.Position;
AddChild(projectile);
}
}
}
}

View File

@@ -0,0 +1,26 @@
using Godot;
using Godot.Collections;
using System.Linq;
public partial class GodCircuitAttacks : Timer
{
[Export]
public Array<PackedScene> _attacks;
private int _currentAttack = 0;
public override void _Process(double delta)
{
if (GetTree().GetFirstNodeInGroup("Player") != null)
Paused = false;
else
Paused = true;
}
public void OnTimeout()
{
_currentAttack = GD.RandRange(0, _attacks.Count - 1);
var attack = _attacks.ElementAt(_currentAttack).Instantiate();
AddChild(attack);
}
}

View File

@@ -0,0 +1,47 @@
[gd_scene load_steps=5 format=3 uid="uid://uwia12i7yykb"]
[ext_resource type="Script" path="res://Player/Base/Projectile.cs" id="1_4wsx3"]
[ext_resource type="Texture2D" uid="uid://blhihtd4vmbrg" path="res://Textures/Projectiles/Layer 7.png" id="1_odish"]
[sub_resource type="Curve3D" id="Curve3D_5bny4"]
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, -8),
"tilts": PackedFloat32Array(0, 0)
}
point_count = 2
[sub_resource type="BoxShape3D" id="BoxShape3D_54g6d"]
size = Vector3(1, 4.3194, 1.42031)
[node name="Laser 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_5bny4")
script = ExtResource("1_4wsx3")
_projectileSpeed = 3.0
[node name="PathFollow3D" type="PathFollow3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
rotation_mode = 0
loop = false
[node name="RigidBody3D" type="RigidBody3D" parent="PathFollow3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.944978)
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, 0, 0, 1, 0, 0, 0, 1, -2.38419e-07, 0, 1.78244)
shape = SubResource("BoxShape3D_54g6d")
[node name="Sprite3D" type="Sprite3D" parent="PathFollow3D/RigidBody3D/CollisionShape3D"]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
axis = 1
texture = ExtResource("1_odish")
[connection signal="body_entered" from="PathFollow3D/RigidBody3D" to="." method="OnPlayerHit"]

View File

@@ -0,0 +1,46 @@
[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"]

189
Enemies/GodCircuit.tscn Normal file
View File

@@ -0,0 +1,189 @@
[gd_scene load_steps=16 format=3 uid="uid://brbshysbgd47q"]
[ext_resource type="Script" path="res://Enemies/Scripts/GodCircuit.cs" id="1_gyfww"]
[ext_resource type="Texture2D" uid="uid://b41ur7kyd8vdl" path="res://Levels/Models/Stage10/god circuit stage 1_image.png" id="2_2fhjk"]
[ext_resource type="Shader" path="res://Levels/Scenes/Door.gdshader" id="3_05w5o"]
[ext_resource type="AudioStream" uid="uid://crto2nljfvqnm" path="res://Audio/SFX/midboss hurt.wav" id="4_kc3iq"]
[ext_resource type="Script" path="res://Enemies/Attacks/GodCircuitAttacks/GodCircuitAttacks.cs" id="5_hp00m"]
[ext_resource type="PackedScene" uid="uid://uwia12i7yykb" path="res://Enemies/Attacks/GodCircuitAttacks/LaserAttack.tscn" id="6_frlsw"]
[ext_resource type="PackedScene" uid="uid://cerac64r5jewa" path="res://Enemies/Attacks/GodCircuitAttacks/OrbAttack.tscn" id="7_1t6n0"]
[sub_resource type="Animation" id="Animation_n85p2"]
resource_name = "OnHit"
length = 0.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("StaticBody3D/god circuit stage 1/Cube:layers")
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": 1,
"values": [1, 0, 1]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("StaticBody3D/god circuit stage 1/Cube2:layers")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.1, 0.3),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [0, 1, 0]
}
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="Animation" id="Animation_47f75"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("StaticBody3D/god circuit stage 1/Cube:layers")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [1]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("StaticBody3D/god circuit stage 1/Cube2:layers")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
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_qiwcq"]
_data = {
"OnHit": SubResource("Animation_n85p2"),
"RESET": SubResource("Animation_47f75")
}
[sub_resource type="BoxShape3D" id="BoxShape3D_n2erm"]
size = Vector3(2.89997, 1, 5.5749)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7b0kx"]
resource_name = "Material.001"
cull_mode = 2
vertex_color_use_as_albedo = true
albedo_texture = ExtResource("2_2fhjk")
[sub_resource type="ArrayMesh" id="ArrayMesh_f3cka"]
_surfaces = [{
"aabb": AABB(-1, -1, -1, 2.66138, 0.649563, 5.00824),
"format": 4097,
"index_count": 36,
"index_data": PackedByteArray(0, 0, 3, 0, 1, 0, 0, 0, 2, 0, 3, 0, 2, 0, 7, 0, 3, 0, 2, 0, 6, 0, 7, 0, 6, 0, 5, 0, 7, 0, 6, 0, 4, 0, 5, 0, 4, 0, 1, 0, 5, 0, 4, 0, 0, 0, 1, 0, 2, 0, 4, 0, 6, 0, 2, 0, 0, 0, 4, 0, 7, 0, 1, 0, 3, 0, 7, 0, 5, 0, 1, 0),
"name": "Material.001",
"primitive": 3,
"vertex_count": 8,
"vertex_data": PackedByteArray(0, 0, 128, 191, 0, 0, 128, 191, 108, 67, 128, 64, 0, 0, 128, 191, 108, 108, 179, 190, 108, 67, 128, 64, 0, 0, 128, 191, 0, 0, 128, 191, 0, 0, 128, 191, 0, 0, 128, 191, 108, 108, 179, 190, 0, 0, 128, 191, 59, 168, 212, 63, 0, 0, 128, 191, 108, 67, 128, 64, 59, 168, 212, 63, 108, 108, 179, 190, 108, 67, 128, 64, 59, 168, 212, 63, 0, 0, 128, 191, 0, 0, 128, 191, 59, 168, 212, 63, 108, 108, 179, 190, 0, 0, 128, 191)
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_vv6dc"]
resource_name = "god circuit stage 1_Cube_001"
_surfaces = [{
"aabb": AABB(-1, -1, -1, 2.66138, 0.649563, 5.00824),
"attribute_data": PackedByteArray(0, 124, 90, 63, 49, 24, 1, 63, 0, 0, 0, 62, 0, 0, 128, 62, 72, 98, 91, 63, 194, 196, 208, 62, 207, 12, 103, 63, 49, 24, 1, 63, 170, 9, 117, 63, 194, 196, 208, 62, 63, 130, 124, 63, 128, 33, 235, 59, 0, 124, 90, 63, 196, 14, 233, 62, 0, 0, 0, 62, 0, 0, 0, 63, 86, 189, 87, 63, 192, 129, 255, 62, 207, 12, 103, 63, 196, 14, 233, 62, 120, 203, 105, 63, 192, 129, 255, 62, 52, 130, 124, 63, 189, 41, 126, 63, 0, 0, 192, 62, 0, 0, 128, 62, 72, 98, 91, 63, 196, 9, 2, 63, 152, 41, 82, 63, 206, 91, 210, 62, 170, 9, 117, 63, 196, 9, 2, 63, 32, 56, 40, 60, 128, 33, 235, 59, 212, 104, 106, 63, 206, 91, 210, 62, 0, 0, 192, 62, 0, 0, 0, 63, 86, 189, 87, 63, 122, 101, 219, 62, 152, 41, 82, 63, 34, 109, 1, 63, 120, 203, 105, 63, 122, 101, 219, 62, 64, 54, 40, 60, 189, 41, 126, 63, 212, 104, 106, 63, 34, 109, 1, 63),
"format": 4119,
"index_count": 36,
"index_data": PackedByteArray(0, 0, 9, 0, 3, 0, 0, 0, 6, 0, 9, 0, 8, 0, 21, 0, 10, 0, 8, 0, 19, 0, 21, 0, 20, 0, 17, 0, 23, 0, 20, 0, 14, 0, 17, 0, 13, 0, 4, 0, 15, 0, 13, 0, 2, 0, 4, 0, 7, 0, 12, 0, 18, 0, 7, 0, 1, 0, 12, 0, 22, 0, 5, 0, 11, 0, 22, 0, 16, 0, 5, 0),
"material": SubResource("StandardMaterial3D_7b0kx"),
"name": "Material.001",
"primitive": 3,
"vertex_count": 24,
"vertex_data": PackedByteArray(0, 0, 128, 191, 0, 0, 128, 191, 108, 67, 128, 64, 0, 0, 255, 127, 255, 127, 255, 255, 0, 0, 128, 191, 0, 0, 128, 191, 108, 67, 128, 64, 255, 127, 0, 0, 255, 255, 255, 191, 0, 0, 128, 191, 0, 0, 128, 191, 108, 67, 128, 64, 255, 127, 255, 127, 255, 127, 255, 255, 0, 0, 128, 191, 108, 108, 179, 190, 108, 67, 128, 64, 0, 0, 255, 127, 255, 127, 255, 255, 0, 0, 128, 191, 108, 108, 179, 190, 108, 67, 128, 64, 255, 127, 255, 127, 255, 127, 255, 255, 0, 0, 128, 191, 108, 108, 179, 190, 108, 67, 128, 64, 255, 127, 255, 255, 0, 0, 255, 191, 0, 0, 128, 191, 0, 0, 128, 191, 0, 0, 128, 191, 0, 0, 255, 127, 255, 127, 255, 255, 0, 0, 128, 191, 0, 0, 128, 191, 0, 0, 128, 191, 255, 127, 0, 0, 255, 255, 255, 191, 0, 0, 128, 191, 0, 0, 128, 191, 0, 0, 128, 191, 255, 255, 255, 255, 255, 127, 255, 255, 0, 0, 128, 191, 108, 108, 179, 190, 0, 0, 128, 191, 0, 0, 255, 127, 255, 127, 255, 255, 0, 0, 128, 191, 108, 108, 179, 190, 0, 0, 128, 191, 255, 255, 255, 255, 255, 127, 255, 255, 0, 0, 128, 191, 108, 108, 179, 190, 0, 0, 128, 191, 255, 127, 255, 255, 0, 0, 255, 191, 59, 168, 212, 63, 0, 0, 128, 191, 108, 67, 128, 64, 255, 127, 0, 0, 255, 255, 255, 191, 59, 168, 212, 63, 0, 0, 128, 191, 108, 67, 128, 64, 255, 127, 255, 127, 255, 127, 255, 255, 59, 168, 212, 63, 0, 0, 128, 191, 108, 67, 128, 64, 255, 255, 255, 127, 255, 127, 255, 255, 59, 168, 212, 63, 108, 108, 179, 190, 108, 67, 128, 64, 255, 127, 255, 127, 255, 127, 255, 255, 59, 168, 212, 63, 108, 108, 179, 190, 108, 67, 128, 64, 255, 127, 255, 255, 0, 0, 255, 191, 59, 168, 212, 63, 108, 108, 179, 190, 108, 67, 128, 64, 255, 255, 255, 127, 255, 127, 255, 255, 59, 168, 212, 63, 0, 0, 128, 191, 0, 0, 128, 191, 255, 127, 0, 0, 255, 255, 255, 191, 59, 168, 212, 63, 0, 0, 128, 191, 0, 0, 128, 191, 255, 255, 255, 255, 255, 127, 255, 255, 59, 168, 212, 63, 0, 0, 128, 191, 0, 0, 128, 191, 255, 255, 255, 127, 255, 127, 255, 255, 59, 168, 212, 63, 108, 108, 179, 190, 0, 0, 128, 191, 255, 255, 255, 255, 255, 127, 255, 255, 59, 168, 212, 63, 108, 108, 179, 190, 0, 0, 128, 191, 255, 127, 255, 255, 0, 0, 255, 191, 59, 168, 212, 63, 108, 108, 179, 190, 0, 0, 128, 191, 255, 255, 255, 127, 255, 127, 255, 255)
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_f3cka")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_aqrc7"]
render_priority = 0
shader = ExtResource("3_05w5o")
[node name="God Circuit" type="Node3D" node_paths=PackedStringArray("_animationPlayer")]
transform = Transform3D(1, 0, 0, 0, 0.877012, 0.480468, 0, -0.480468, 0.877012, 0, 1.29734, 0)
script = ExtResource("1_gyfww")
_animationPlayer = NodePath("AnimationPlayer")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_qiwcq")
}
[node name="StaticBody3D" type="RigidBody3D" parent="."]
transform = Transform3D(-1, 7.54979e-08, -7.54979e-08, -7.54979e-08, 0, 1, 7.54979e-08, 1, 0, 0, 0, 0)
collision_layer = 0
collision_mask = 72
continuous_cd = true
max_contacts_reported = 1
contact_monitor = true
can_sleep = false
freeze = true
freeze_mode = 1
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 4.30333e-22, 0, 1, 0.317906, -0.678684, 1.59406)
shape = SubResource("BoxShape3D_n2erm")
[node name="Timer" type="Timer" parent="StaticBody3D"]
wait_time = 5.0
autostart = true
script = ExtResource("5_hp00m")
_attacks = Array[PackedScene]([ExtResource("7_1t6n0"), ExtResource("6_frlsw")])
[node name="god circuit stage 1" type="Node3D" parent="StaticBody3D"]
transform = Transform3D(-1, -7.54979e-08, 7.54979e-08, 7.54979e-08, 0, 1, -7.54979e-08, 1, 0, 0, 0, 0)
[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)
mesh = SubResource("ArrayMesh_vv6dc")
skeleton = NodePath("")
[node name="Cube2" 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)
layers = 0
material_override = SubResource("ShaderMaterial_aqrc7")
mesh = SubResource("ArrayMesh_vv6dc")
skeleton = NodePath("")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("4_kc3iq")
[connection signal="body_entered" from="StaticBody3D" to="." method="OnHit"]
[connection signal="timeout" from="StaticBody3D/Timer" to="StaticBody3D/Timer" method="OnTimeout"]

View File

@@ -0,0 +1,3 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://d2081rstlyl4w"]
[resource]

6
Enemies/HPComponent.tscn Normal file
View File

@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://b1j0g6ikmnibm"]
[ext_resource type="Script" path="res://Enemies/HealthPoints.cs" id="1_rrase"]
[node name="HP Component" type="Node2D"]
script = ExtResource("1_rrase")

20
Enemies/HealthPoints.cs Normal file
View File

@@ -0,0 +1,20 @@
using Godot;
public partial class HealthPoints : Node
{
[Export]
public long MaximumHP { get; protected set; }
public long CurrentHP { get; set; }
public override void _Ready()
{
CurrentHP = MaximumHP;
}
public void TakeDamage(long damage)
{
CurrentHP -= damage;
GD.Print(CurrentHP);
}
}

View File

@@ -0,0 +1,9 @@
using Godot;
public partial class HealthbarProgress : TextureProgressBar
{
public void UpdateBar(long amount)
{
Value = amount;
}
}

1265
Enemies/MeleeEnemy.tscn Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,32 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dr6vgrhs3joil"
path="res://.godot/imported/DISSAPPEARING ENEMY.gltf-b34d11058e00cbb005301d0c8ab6a98b.scn"
[deps]
source_file="res://Enemies/Models/DISSAPPEARING ENEMY.gltf"
dest_files=["res://.godot/imported/DISSAPPEARING ENEMY.gltf-b34d11058e00cbb005301d0c8ab6a98b.scn"]
[params]
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
import_script/path=""
_subresources={}
gltf/embedded_image_handling=1

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,32 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dotxb4dc15l4k"
path="res://.godot/imported/RangedEnemy.glb-b55597650bade0297f264b6e0420a5b0.scn"
[deps]
source_file="res://Enemies/Models/RangedEnemy.glb"
dest_files=["res://.godot/imported/RangedEnemy.glb-b55597650bade0297f264b6e0420a5b0.scn"]
[params]
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
import_script/path=""
_subresources={}
gltf/embedded_image_handling=1

1070
Enemies/RangedEnemy.tscn Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,39 @@
using Godot;
public partial class BasicEnemy : Node3D
{
[Export]
private HealthPoints _hp;
protected GameManager _gameManager;
public override void _Ready()
{
_gameManager = GetTree().Root.GetNode<GameManager>("Main/GameManager");
}
public void OnEnemyHit(Node3D node)
{
if (node is Character)
return;
_hp.TakeDamage(1);
if (_hp.CurrentHP <= 0)
{
var currentLevel = (Level)GetTree().GetFirstNodeInGroup("Level");
currentLevel.OnEnemyDefeated(this);
QueueFree();
}
}
public void OnPlayerHit(Node3D node)
{
if (node is Character character && character.HasMethod(Character.MethodName.OnHit))
{
GD.Print("Collision with player at " + node.GlobalPosition + "by " + Name);
GD.Print("Player hit: " + character.Name);
character.Call(Character.MethodName.OnHit, this);
}
}
}

View File

@@ -0,0 +1,41 @@
using Godot;
public partial class GodCircuit : Node3D
{
[Export]
private AnimationPlayer _animationPlayer;
[Signal]
public delegate void OnEnemyBossHitEventHandler(long damage);
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
{
GD.Print("Hit");
_animationPlayer.Play("OnHit");
var hpComponent = GetNode<HealthPoints>("HP Component");
hpComponent.TakeDamage(800000);
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
if (hpComponent.CurrentHP <= 0)
QueueFree();
}
}
private void OnBossOrbDestroyed()
{
var hpComponent = GetNode<HealthPoints>("HP Component");
_animationPlayer.Play("OnHit");
hpComponent.TakeDamage(30000000);
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
if (hpComponent.CurrentHP <= 0)
hpComponent.CurrentHP = 1;
}
}

View File

@@ -0,0 +1,27 @@
using Godot;
using System.Linq;
public partial class MeleeEnemy : BasicEnemy
{
[Export]
private float _speed = 0.4f;
private bool _targetingPlayer = false;
[Export]
private double _distanceToPlayer = 3;
public override void _PhysicsProcess(double delta)
{
var players = GetTree().GetNodesInGroup("Player");
if (players.Any())
{
var convertedPlayers = players.Select(x => (Node3D)x);
var target = convertedPlayers.OrderBy(x => Position.DistanceTo(x.Position)).FirstOrDefault();
if (_targetingPlayer || Position.DistanceTo(target.Position) < _distanceToPlayer)
{
Position = Position.MoveToward(target.Position, _speed * (float)delta);
LookAt(-target.Position, Vector3.Up);
_targetingPlayer = true;
}
}
}
}

View File

@@ -0,0 +1,17 @@
using Godot;
using System.Linq;
public partial class RangedEnemy : BasicEnemy
{
public override void _Process(double delta)
{
var players = GetTree().GetNodesInGroup("Player");
if (players.Any())
{
var convertedPlayers = players.Select(x => (Node3D)x);
var target = convertedPlayers.OrderBy(x => Position.DistanceTo(x.Position)).FirstOrDefault();
LookAt(target.Position, Vector3.Up);
Rotation = new Vector3(0, Rotation.Y, Rotation.Z);
}
}
}

View File

@@ -4,6 +4,11 @@
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<Folder Include="Scenes\" />
<Compile Remove="Scenes\**" />
<EmbeddedResource Remove="Scenes\**" />
</ItemGroup>
<ItemGroup>
<Folder Include="Player\Sagittarius\Attacks\" />
<Folder Include="Textures\Models\" />
</ItemGroup>
</Project>

10
GameJam2023.csproj.old Normal file
View File

@@ -0,0 +1,10 @@
<Project Sdk="Godot.NET.Sdk/4.1.1">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<Folder Include="Scenes\" />
<Folder Include="Textures\Models\" />
</ItemGroup>
</Project>

10
GameJam2023.csproj.old.1 Normal file
View File

@@ -0,0 +1,10 @@
<Project Sdk="Godot.NET.Sdk/4.0.4">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<Folder Include="Scenes\" />
<Folder Include="Textures\Models\" />
</ItemGroup>
</Project>

10
GameJam2023.csproj.old.2 Normal file
View File

@@ -0,0 +1,10 @@
<Project Sdk="Godot.NET.Sdk/4.1.1">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<Folder Include="Scenes\" />
<Folder Include="Textures\Models\" />
</ItemGroup>
</Project>

10
GameJam2023.csproj.old.3 Normal file
View File

@@ -0,0 +1,10 @@
<Project Sdk="Godot.NET.Sdk/4.0.4">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<Folder Include="Scenes\" />
<Folder Include="Textures\Models\" />
</ItemGroup>
</Project>

10
GameJam2023.csproj.old.4 Normal file
View File

@@ -0,0 +1,10 @@
<Project Sdk="Godot.NET.Sdk/4.1.1">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<Folder Include="Scenes\" />
<Folder Include="Textures\Models\" />
</ItemGroup>
</Project>

14
GameJam2023.csproj.old.5 Normal file
View File

@@ -0,0 +1,14 @@
<Project Sdk="Godot.NET.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Scenes\**" />
<EmbeddedResource Remove="Scenes\**" />
</ItemGroup>
<ItemGroup>
<Folder Include="Player\Sagittarius\Attacks\" />
<Folder Include="Textures\Models\" />
</ItemGroup>
</Project>

155
GameLogic/GameManager.cs Normal file
View File

@@ -0,0 +1,155 @@
using Godot;
using Godot.Collections;
using System.Collections.Generic;
using System.Linq;
public partial class GameManager : Node
{
[Signal]
public delegate void OnPlayerGameOverEventHandler();
[Signal]
public delegate void ReselectCharacterEventHandler(Player player);
[Signal]
public delegate void ClearPlayerBGEventHandler(Array<Player> players);
[Export]
private Array<PackedScene> PlayerScenes;
public IEnumerable<Player> Players = new List<Player>();
private int _levelIndex;
public bool IsGameOverScreenOn = false;
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);
}
}
public void OnAllEnemiesDefeated()
{
OnLevelClear();
}
public void OnHandleCharacterSelectUI(Player player)
{
EmitSignal(SignalName.ReselectCharacter, player);
}
public void SetToNextCharacter(Player player)
{
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;
}
public void ResetPlayerPosition(Player player)
{
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);
}
}
public void RemoveCharacter(Player player)
{
ResetPlayerPosition(player);
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);
if (!player.CharactersExited.Any() && !player.CharactersLeftOnStage.Any())
SetGameOver(player, true);
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);
}
public void SetGameOver(Player player, bool isGameOver)
{
player.GameOver = isGameOver;
if (isGameOver)
EmitSignal(SignalName.OnPlayerGameOver);
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();
}
public void OnLevelClear()
{
var enemies = GetTree().GetNodesInGroup("Enemy").Where(x => !x.IsQueuedForDeletion());
foreach (var enemy in enemies)
enemy.QueueFree();
var playerCharacters = GetTree().GetNodesInGroup("Player");
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 character in playerCharacters)
character.GetParent().RemoveChild(character);
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);
}
}

241
GameLogic/GameManager.tscn Normal file
View File

@@ -0,0 +1,241 @@
[gd_scene load_steps=13 format=3 uid="uid://cxj6yeddshy16"]
[ext_resource type="Script" path="res://GameLogic/GameManager.cs" id="1_ya2kt"]
[ext_resource type="PackedScene" uid="uid://b57xus5rqasy8" path="res://Player/Base/Player2.tscn" id="3_y1wkr"]
[ext_resource type="PackedScene" uid="uid://xcmspevaqcrc" path="res://Player/Base/Player1.tscn" id="4_3fl70"]
[ext_resource type="Script" path="res://UI/StageGUI.cs" id="4_8bo7m"]
[ext_resource type="Script" path="res://UI/GameOverService.cs" id="5_3te1o"]
[ext_resource type="Texture2D" uid="uid://d18xmfbg47qpi" path="res://Textures/Portraits/blank-background.png" id="5_ecqoa"]
[ext_resource type="Script" path="res://UI/CharacterSelectUpdateService.cs" id="6_8tbm6"]
[ext_resource type="Texture2D" uid="uid://dveeywi80ux2l" path="res://UI/Game_Over.jpg" id="6_hq16y"]
[ext_resource type="Texture2D" uid="uid://c3eubpygfvc3l" path="res://Textures/Portraits/cap-bg-char.png" id="7_jroqd"]
[ext_resource type="Texture2D" uid="uid://1pgw8he4k5va" path="res://Textures/Portraits/pisces-bg-char.png" id="8_pvs36"]
[ext_resource type="Texture2D" uid="uid://bacwvejc4hcou" path="res://Textures/Portraits/sag-bg-char.png" id="9_1jise"]
[ext_resource type="Texture2D" uid="uid://o7uu4efxf36e" path="res://Textures/Portraits/scorpio-bg-char.png" id="10_mqkvb"]
[node name="GameManager" type="Node3D"]
script = ExtResource("1_ya2kt")
PlayerScenes = Array[PackedScene]([ExtResource("4_3fl70"), ExtResource("3_y1wkr")])
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -0.504317, 0.863519, 0, -0.863519, -0.504317, 0, 19.9508, 0)
visible = false
shadow_enabled = true
shadow_bias = 0.0
shadow_normal_bias = 0.0
directional_shadow_mode = 0
sky_mode = 1
[node name="DirectionalLight3D2" type="DirectionalLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.993572, 0.113203, 0, -0.113203, 0.993572, 0, 6.22805, 0)
shadow_enabled = true
shadow_bias = 0.0
shadow_normal_bias = 0.0
directional_shadow_mode = 0
sky_mode = 1
[node name="StageGUI" type="Control" parent="."]
process_mode = 3
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("4_8bo7m")
metadata/_edit_horizontal_guides_ = [-342.0]
[node name="SidebarLeft" type="TextureRect" parent="StageGUI"]
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -540.0
offset_right = 420.0
offset_bottom = 540.0
grow_vertical = 2
texture = ExtResource("5_ecqoa")
[node name="SidebarRight" type="TextureRect" parent="StageGUI"]
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -420.0
offset_top = -540.0
offset_bottom = 540.0
grow_horizontal = 0
grow_vertical = 2
texture = ExtResource("5_ecqoa")
[node name="CharacterSelect" type="Control" parent="StageGUI"]
process_mode = 3
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("6_8tbm6")
[node name="P1" type="Control" parent="StageGUI/CharacterSelect"]
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -20.0
offset_right = 40.0
offset_bottom = 20.0
grow_vertical = 2
[node name="CapBG" type="TextureRect" parent="StageGUI/CharacterSelect/P1"]
visible = false
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -540.0
offset_right = 420.0
offset_bottom = 540.0
grow_vertical = 2
texture = ExtResource("7_jroqd")
stretch_mode = 2
[node name="PiscesBG" type="TextureRect" parent="StageGUI/CharacterSelect/P1"]
visible = false
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -540.0
offset_right = 420.0
offset_bottom = 540.0
grow_vertical = 2
texture = ExtResource("8_pvs36")
stretch_mode = 2
[node name="SagBG" type="TextureRect" parent="StageGUI/CharacterSelect/P1"]
visible = false
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -540.0
offset_right = 420.0
offset_bottom = 540.0
grow_vertical = 2
texture = ExtResource("9_1jise")
stretch_mode = 2
[node name="ScorpioBG" type="TextureRect" parent="StageGUI/CharacterSelect/P1"]
visible = false
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -540.0
offset_right = 420.0
offset_bottom = 540.0
grow_vertical = 2
texture = ExtResource("10_mqkvb")
stretch_mode = 2
[node name="P2" type="Control" parent="StageGUI/CharacterSelect"]
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -20.0
offset_bottom = 20.0
grow_horizontal = 0
grow_vertical = 2
[node name="CapBG" type="TextureRect" parent="StageGUI/CharacterSelect/P2"]
visible = false
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -420.0
offset_top = -540.0
offset_bottom = 540.0
grow_horizontal = 0
grow_vertical = 2
texture = ExtResource("7_jroqd")
[node name="PiscesBG" type="TextureRect" parent="StageGUI/CharacterSelect/P2"]
visible = false
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -420.0
offset_top = -540.0
offset_bottom = 540.0
grow_horizontal = 0
grow_vertical = 2
texture = ExtResource("8_pvs36")
[node name="SagBG" type="TextureRect" parent="StageGUI/CharacterSelect/P2"]
visible = false
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -420.0
offset_top = -540.0
offset_bottom = 540.0
grow_horizontal = 0
grow_vertical = 2
texture = ExtResource("9_1jise")
[node name="ScorpioBG" type="TextureRect" parent="StageGUI/CharacterSelect/P2"]
visible = false
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -420.0
offset_top = -540.0
offset_bottom = 540.0
grow_horizontal = 0
grow_vertical = 2
texture = ExtResource("10_mqkvb")
[node name="GameOver" type="Control" parent="."]
visible = false
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
script = ExtResource("5_3te1o")
[node name="GameOverScreen" type="TextureRect" parent="GameOver"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
texture = ExtResource("6_hq16y")
[connection signal="ClearPlayerBG" from="." to="StageGUI/CharacterSelect" method="ClearPlayerBGs"]
[connection signal="ReselectCharacter" from="." to="StageGUI" method="OnCharacterSelect"]
[connection signal="CapricornSelected" from="StageGUI" to="StageGUI/CharacterSelect" method="OnCapricornSelected"]
[connection signal="OnCharacterSelectionMade" from="StageGUI" to="." method="OnCharacterSelected"]
[connection signal="OnGameOver" from="StageGUI" to="GameOver" method="OnGameOver"]
[connection signal="OnPlayerGameOver" from="StageGUI" to="StageGUI/CharacterSelect" method="ClearPlayerBGs"]
[connection signal="PiscesSelected" from="StageGUI" to="StageGUI/CharacterSelect" method="OnPiscesSelected"]
[connection signal="SagittariusSelected" from="StageGUI" to="StageGUI/CharacterSelect" method="OnSagittariusSelected"]
[connection signal="ScorpioSelected" from="StageGUI" to="StageGUI/CharacterSelect" method="OnScorpioSelected"]
[connection signal="ReloadGame" from="GameOver" to="." method="ReloadGameScene"]

73
GameLogic/Main.cs Normal file
View File

@@ -0,0 +1,73 @@
using Godot;
using Godot.Collections;
using System.Linq;
public partial class Main : Node
{
[Export]
public Array<PackedScene> Levels;
[Export]
public PackedScene GameManager;
[Export]
private Label _fpsCounter;
public int NumberOfPlayers = 0;
public override void _Process(double delta)
{
_fpsCounter.Text = $"FPS: {Engine.GetFramesPerSecond()}";
}
public void LoadLevel(int indexToLoad, int numberOfPlayers)
{
var sceneToLoad = Levels.ElementAt(indexToLoad);
CallDeferred(nameof(DeferredGoToScene), sceneToLoad);
NumberOfPlayers = numberOfPlayers;
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/LevelTheme.ogg");
bgmPlayer.PlayBGM();
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;
}
}
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);
}
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;
}
}

56
GameLogic/Main.tscn Normal file
View File

@@ -0,0 +1,56 @@
[gd_scene load_steps=17 format=3 uid="uid://vwrw05ob2caq"]
[ext_resource type="Script" path="res://GameLogic/Main.cs" id="1_g4hua"]
[ext_resource type="PackedScene" uid="uid://btl5fdyjewnwc" path="res://Levels/Scenes/Level3.tscn" id="2_0yhby"]
[ext_resource type="PackedScene" uid="uid://dqv03pua4j8ga" path="res://Levels/Scenes/Level1.tscn" id="2_jq3qe"]
[ext_resource type="PackedScene" uid="uid://b12gq4yqc3d8i" path="res://UI/MainMenu.tscn" id="2_kvovw"]
[ext_resource type="PackedScene" uid="uid://basequfmpg04f" path="res://Levels/Scenes/Level2.tscn" id="3_nhrqr"]
[ext_resource type="PackedScene" uid="uid://ctvkevnc0wxka" path="res://Levels/Scenes/Level4.tscn" id="5_xj47l"]
[ext_resource type="PackedScene" uid="uid://col60npvg7wr1" path="res://Levels/Scenes/Level5.tscn" id="6_xmedq"]
[ext_resource type="PackedScene" uid="uid://8ukphol1isp2" path="res://Levels/Scenes/Level6.tscn" id="7_58n7x"]
[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://cxj6yeddshy16" path="res://GameLogic/GameManager.tscn" id="11_wiyvp"]
[ext_resource type="PackedScene" uid="uid://cvvjbka5nf52j" path="res://UI/SceneTransition.tscn" id="14_ai16y"]
[sub_resource type="SystemFont" id="SystemFont_o1buo"]
[sub_resource type="LabelSettings" id="LabelSettings_ucjnc"]
font = SubResource("SystemFont_o1buo")
font_color = Color(0, 1, 0, 1)
[node name="Main" type="Node3D" node_paths=PackedStringArray("_fpsCounter")]
script = ExtResource("1_g4hua")
Levels = Array[PackedScene]([ExtResource("11_o275c"), ExtResource("6_xmedq"), ExtResource("2_jq3qe"), ExtResource("3_nhrqr"), ExtResource("5_xj47l"), ExtResource("2_0yhby"), ExtResource("7_58n7x"), ExtResource("8_pcp3p"), ExtResource("9_n1hja"), ExtResource("10_rs7ve")])
GameManager = ExtResource("11_wiyvp")
_fpsCounter = NodePath("FPS Counter")
[node name="SceneTransition" parent="." instance=ExtResource("14_ai16y")]
[node name="SFXPlayer" type="AudioStreamPlayer" parent="."]
max_polyphony = 10
[node name="Debug Camera" type="Camera3D" parent="."]
transform = Transform3D(-1, 0, -8.74228e-08, -5.69087e-08, 0.759112, 0.65096, 6.63637e-08, 0.65096, -0.759112, 1.40462, 6.10678, -6.91273)
visible = false
[node name="MainMenu" parent="." instance=ExtResource("2_kvovw")]
z_as_relative = false
[node name="FPS Counter" type="Label" parent="."]
z_index = 100
offset_left = 18.0
offset_top = 16.0
offset_right = 199.0
offset_bottom = 42.0
text = "FPS
"
label_settings = SubResource("LabelSettings_ucjnc")
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, -0.527878, 10.966, 6.61121)
projection = 1
current = true
size = 10.8546

106
Levels/ExitPortal.tscn Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bv3hiodt08q7o"
path.s3tc="res://.godot/imported/STAGE MINIBOSS_bsod.png-b691a3faea1cd4167b195250f0582ff5.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage Miniboss/STAGE MINIBOSS_bsod.png"
dest_files=["res://.godot/imported/STAGE MINIBOSS_bsod.png-b691a3faea1cd4167b195250f0582ff5.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://do2yyrriay6sa"
path.s3tc="res://.godot/imported/Stage 1 update_CLOUD TRAN 1.png-2f0e77df8be2676479afbba42fb6589d.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage1/Stage 1 update_CLOUD TRAN 1.png"
dest_files=["res://.godot/imported/Stage 1 update_CLOUD TRAN 1.png-2f0e77df8be2676479afbba42fb6589d.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://e3sn0ipxrlea"
path.s3tc="res://.godot/imported/Stage 1 update_CLOUD TRAN 2.png-1ad353e5cd7c92792e955aa616994348.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage1/Stage 1 update_CLOUD TRAN 2.png"
dest_files=["res://.godot/imported/Stage 1 update_CLOUD TRAN 2.png-1ad353e5cd7c92792e955aa616994348.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cbxslfugsxyg7"
path.s3tc="res://.godot/imported/Stage 1 update_Screenshot 2023-09-03 at 13.png-086ee390d35d40d4a482bab656e77b2c.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage1/Stage 1 update_Screenshot 2023-09-03 at 13.png"
dest_files=["res://.godot/imported/Stage 1 update_Screenshot 2023-09-03 at 13.png-086ee390d35d40d4a482bab656e77b2c.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bmsgwrvka6kax"
path.s3tc="res://.godot/imported/Stage 1 update_trancodou4.png-0bf83adf4dcba02dfc77d956e8b0f704.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage1/Stage 1 update_trancodou4.png"
dest_files=["res://.godot/imported/Stage 1 update_trancodou4.png-0bf83adf4dcba02dfc77d956e8b0f704.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://eb2ecrpum5i0"
path.s3tc="res://.godot/imported/Stage 1 update_trans cloud 3.png-d7c573986768572290f0b0a6b51557db.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage1/Stage 1 update_trans cloud 3.png"
dest_files=["res://.godot/imported/Stage 1 update_trans cloud 3.png-d7c573986768572290f0b0a6b51557db.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,32 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dpuyhoh47urss"
path="res://.godot/imported/FINAL STAGE.gltf-99efbd72c9b5c55e5201e58d3b54d91f.scn"
[deps]
source_file="res://Levels/Models/Stage10/FINAL STAGE.gltf"
dest_files=["res://.godot/imported/FINAL STAGE.gltf-99efbd72c9b5c55e5201e58d3b54d91f.scn"]
[params]
nodes/root_type="Node3D"
nodes/root_name="Scene Root"
nodes/apply_root_scale=true
nodes/root_scale=1.0
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
import_script/path=""
_subresources={}
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b0waffuexnnrn"
path.s3tc="res://.godot/imported/FINAL STAGE_BRAIN.png-3eacccd7f0acef8082a7d282da4b308a.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage10/FINAL STAGE_BRAIN.png"
dest_files=["res://.godot/imported/FINAL STAGE_BRAIN.png-3eacccd7f0acef8082a7d282da4b308a.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cuhp6ndq6h84u"
path.s3tc="res://.godot/imported/FINAL STAGE_BUSINESS.png-d4e6b25cf555d988cb1fd1414df16613.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage10/FINAL STAGE_BUSINESS.png"
dest_files=["res://.godot/imported/FINAL STAGE_BUSINESS.png-d4e6b25cf555d988cb1fd1414df16613.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b62j30essojgi"
path.s3tc="res://.godot/imported/FINAL STAGE_CASTLE.png-f719412a3bbcbe48214c4d9886626fe3.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage10/FINAL STAGE_CASTLE.png"
dest_files=["res://.godot/imported/FINAL STAGE_CASTLE.png-f719412a3bbcbe48214c4d9886626fe3.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -2,8 +2,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cp8bxedhoqdqa"
path.s3tc="res://.godot/imported/link_MI_body_alb.png-57b8628ae8b879ccf189bbad5b09653d.s3tc.ctex"
uid="uid://shd4e84lmhmq"
path.s3tc="res://.godot/imported/FINAL STAGE_DNA.png-4b672364bd1ad4addd7f3886c99e0c16.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
@@ -12,8 +12,8 @@ generator_parameters={}
[deps]
source_file="res://Models/TestModels/link_MI_body_alb.png"
dest_files=["res://.godot/imported/link_MI_body_alb.png-57b8628ae8b879ccf189bbad5b09653d.s3tc.ctex"]
source_file="res://Levels/Models/Stage10/FINAL STAGE_DNA.png"
dest_files=["res://.godot/imported/FINAL STAGE_DNA.png-4b672364bd1ad4addd7f3886c99e0c16.s3tc.ctex"]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://diqvm221wx5g1"
path.s3tc="res://.godot/imported/FINAL STAGE_DOMINI.png-d14fc4b4e7e3e2d3843081554015b939.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage10/FINAL STAGE_DOMINI.png"
dest_files=["res://.godot/imported/FINAL STAGE_DOMINI.png-d14fc4b4e7e3e2d3843081554015b939.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c0nupi8u85qpa"
path.s3tc="res://.godot/imported/FINAL STAGE_DOOR (1).png-a48dd294c37c79c892287941ffad7b19.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={}
[deps]
source_file="res://Levels/Models/Stage10/FINAL STAGE_DOOR (1).png"
dest_files=["res://.godot/imported/FINAL STAGE_DOOR (1).png-a48dd294c37c79c892287941ffad7b19.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 KiB

Some files were not shown because too many files have changed in this diff Show More