First builds and stuff done yipewaho

This commit is contained in:
2026-02-01 05:32:22 +02:00
parent 12c1360ae7
commit d910018b7b
62 changed files with 1886 additions and 37 deletions
+1
View File
@@ -1,3 +1,4 @@
# Godot 4+ specific ignores
.godot/
/android/
/[Bb]uilds/
Binary file not shown.
@@ -0,0 +1,36 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://b8lsp07ucxq6p"
path="res://.godot/imported/MintsodaLimeGreen13X16Regular-KVvzA.ttf-b52548e3b00b42a0e0269a48cb6fa33e.fontdata"
[deps]
source_file="res://Assets/Fonts/MintsodaLimeGreen13X16Regular-KVvzA.ttf"
dest_files=["res://.godot/imported/MintsodaLimeGreen13X16Regular-KVvzA.ttf-b52548e3b00b42a0e0269a48cb6fa33e.fontdata"]
[params]
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
modulate_color_glyphs=false
hinting=1
subpixel_positioning=4
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[]
language_support={}
script_support={}
opentype_features={}
@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dbsuw8omrcx1d"
path="res://.godot/imported/8bit-mysterious-kyouto_reverb_Loop.ogg-b44e9dc45b48b3a04f14348acaf5ca70.oggvorbisstr"
[deps]
source_file="res://Assets/Sounds/Music/8bit-mysterious-kyouto_reverb_Loop.ogg"
dest_files=["res://.godot/imported/8bit-mysterious-kyouto_reverb_Loop.ogg-b44e9dc45b48b3a04f14348acaf5ca70.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dyeb6onb7ojhj"
path="res://.godot/imported/TraditionalJapanese_2.mp3-cb2c1a9e0e18dd40278b141cf24277e5.mp3str"
[deps]
source_file="res://Assets/Sounds/Music/TraditionalJapanese_2.mp3"
dest_files=["res://.godot/imported/TraditionalJapanese_2.mp3-cb2c1a9e0e18dd40278b141cf24277e5.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dt18fd3icyuxu"
path="res://.godot/imported/kitsune.wav-b4682e28f2d41e862863349ec5141309.sample"
[deps]
source_file="res://Assets/Sounds/Sfx/kitsune.wav"
dest_files=["res://.godot/imported/kitsune.wav-b4682e28f2d41e862863349ec5141309.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=2
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://d3x711iom306x"
path="res://.godot/imported/liquidhit.wav-cc00bf09333d553e9fb953703be61f48.sample"
[deps]
source_file="res://Assets/Sounds/Sfx/liquidhit.wav"
dest_files=["res://.godot/imported/liquidhit.wav-cc00bf09333d553e9fb953703be61f48.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=2
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://ce5vqm3tts58o"
path="res://.godot/imported/oni.wav-d0d8f752f5e5258e3e2ab1f1997533a8.sample"
[deps]
source_file="res://Assets/Sounds/Sfx/oni.wav"
dest_files=["res://.godot/imported/oni.wav-d0d8f752f5e5258e3e2ab1f1997533a8.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=2
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cjc3oi8xonu6q"
path="res://.godot/imported/stonehit.wav-c1aa23719415b9c4e29d5c5a35f950d6.sample"
[deps]
source_file="res://Assets/Sounds/Sfx/stonehit.wav"
dest_files=["res://.godot/imported/stonehit.wav-c1aa23719415b9c4e29d5c5a35f950d6.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=2
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://qx5kenslqkk6"
path="res://.godot/imported/stumphit.wav-07143d2bfb72abcee6c0c39949a7b7a7.sample"
[deps]
source_file="res://Assets/Sounds/Sfx/stumphit.wav"
dest_files=["res://.godot/imported/stumphit.wav-07143d2bfb72abcee6c0c39949a7b7a7.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=2
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://wvrhsssfi7w3"
path="res://.godot/imported/tengu.wav-1c2a7c5257677455893fa37186969079.sample"
[deps]
source_file="res://Assets/Sounds/Sfx/tengu.wav"
dest_files=["res://.godot/imported/tengu.wav-1c2a7c5257677455893fa37186969079.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=2
Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bfclgdy7dusmg"
path="res://.godot/imported/projectile_green-Sheet.png-c5093c09470fe51ed60583ba4e846711.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/Sprites/Projectiles/projectile_green-Sheet.png"
dest_files=["res://.godot/imported/projectile_green-Sheet.png-c5093c09470fe51ed60583ba4e846711.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 951 B

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cnoy4do2talkr"
path="res://.godot/imported/MASKS.png-5f7d41e449a8733ec1bd79efe0e1623d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/Sprites/UI/MASKS.png"
dest_files=["res://.godot/imported/MASKS.png-5f7d41e449a8733ec1bd79efe0e1623d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2wa0rqssefiy"
path="res://.godot/imported/soul.png-bfa45a24db5871c67a944fb79e1a8619.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/Sprites/UI/soul.png"
dest_files=["res://.godot/imported/soul.png-bfa45a24db5871c67a944fb79e1a8619.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 141 B

+40
View File
@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://2x62ipg12256"
path="res://.godot/imported/particle.png-8182658a2fdd9b1eb91f1f1871e284d9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/Sprites/Vfx/particle.png"
dest_files=["res://.godot/imported/particle.png-8182658a2fdd9b1eb91f1f1871e284d9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1
+2
View File
@@ -0,0 +1,2 @@
BG Music - https://www.youtube.com/watch?v=r-PYsYKhn54
https://music.storyinvention.com/en/8bit-mysterious-kyouto-en/#comments
+16 -4
View File
@@ -1,9 +1,11 @@
[gd_scene load_steps=11 format=3 uid="uid://c37hbbbx8wje"]
[gd_scene load_steps=13 format=3 uid="uid://c37hbbbx8wje"]
[ext_resource type="Script" uid="uid://bj52mq7uip7di" path="res://Scripts/Enemies/Enemy.cs" id="1_rmkli"]
[ext_resource type="Texture2D" uid="uid://dab3cq4y0d2pm" path="res://Assets/Sprites/Characters/Enemies/water-Sheet.png" id="2_rmkli"]
[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="3_t8by4"]
[ext_resource type="Script" uid="uid://dvkd1keu854so" path="res://Scripts/Components/Health.cs" id="4_cyy2q"]
[ext_resource type="Script" uid="uid://c247m8m3qmlk0" path="res://Scripts/Enemies/EnemyArea.cs" id="5_frtie"]
[ext_resource type="AudioStream" uid="uid://d3x711iom306x" path="res://Assets/Sounds/Sfx/liquidhit.wav" id="6_t8by4"]
[sub_resource type="AtlasTexture" id="AtlasTexture_frtie"]
atlas = ExtResource("2_rmkli")
@@ -44,21 +46,25 @@ animations = [{
[sub_resource type="CircleShape2D" id="CircleShape2D_7puah"]
radius = 12.0
[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health")]
[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health", "_audio")]
rotates = false
loop = false
script = ExtResource("1_rmkli")
Type = 2
Health = NodePath("Scripts/Health")
_audio = NodePath("AudioStreamPlayer2D")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
texture_filter = 1
sprite_frames = SubResource("SpriteFrames_ewbju")
autoplay = "default"
offset = Vector2(0, -16)
[node name="Scripts" type="Node" parent="."]
[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_pathFollow2D")]
[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_enemy", "_pathFollow2D")]
script = ExtResource("3_t8by4")
_enemy = NodePath("../..")
_pathFollow2D = NodePath("../..")
_speed = 25.0
@@ -66,10 +72,16 @@ _speed = 25.0
script = ExtResource("4_cyy2q")
_baseMaxHp = 50.0
[node name="HitBox" type="Area2D" parent="."]
[node name="HitBox" type="Area2D" parent="." node_paths=PackedStringArray("Enemy")]
collision_layer = 4
collision_mask = 0
script = ExtResource("5_frtie")
Enemy = NodePath("..")
[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBox"]
position = Vector2(-1, -9)
shape = SubResource("CircleShape2D_7puah")
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("6_t8by4")
volume_db = -20.0
+61 -3
View File
@@ -1,10 +1,12 @@
[gd_scene load_steps=15 format=3 uid="uid://y54cvugsx75b"]
[gd_scene load_steps=23 format=3 uid="uid://y54cvugsx75b"]
[ext_resource type="Script" uid="uid://bj52mq7uip7di" path="res://Scripts/Enemies/Enemy.cs" id="1_qqq3s"]
[ext_resource type="Texture2D" uid="uid://cm8gnfvfysyyl" path="res://Assets/Sprites/Characters/Enemies/stone-Sheet.png" id="2_ymaxx"]
[ext_resource type="Texture2D" uid="uid://cpyntpwy5riy8" path="res://Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png" id="3_njiku"]
[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="3_pbvk1"]
[ext_resource type="Script" uid="uid://dvkd1keu854so" path="res://Scripts/Components/Health.cs" id="4_njiku"]
[ext_resource type="Script" uid="uid://c247m8m3qmlk0" path="res://Scripts/Enemies/EnemyArea.cs" id="5_ymaxx"]
[ext_resource type="AudioStream" uid="uid://cjc3oi8xonu6q" path="res://Assets/Sounds/Sfx/stonehit.wav" id="6_pbvk1"]
[sub_resource type="AtlasTexture" id="AtlasTexture_ldgsr"]
atlas = ExtResource("2_ymaxx")
@@ -34,6 +36,30 @@ region = Rect2(160, 0, 32, 32)
atlas = ExtResource("2_ymaxx")
region = Rect2(192, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_gkxry"]
atlas = ExtResource("3_njiku")
region = Rect2(0, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_0k7sk"]
atlas = ExtResource("3_njiku")
region = Rect2(32, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_g3mu5"]
atlas = ExtResource("3_njiku")
region = Rect2(64, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_nlfdx"]
atlas = ExtResource("3_njiku")
region = Rect2(96, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_km1he"]
atlas = ExtResource("3_njiku")
region = Rect2(128, 0, 32, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_xa2pf"]
atlas = ExtResource("3_njiku")
region = Rect2(160, 0, 32, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_ewbju"]
animations = [{
"frames": [{
@@ -61,27 +87,55 @@ animations = [{
"loop": true,
"name": &"default",
"speed": 5.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_gkxry")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_0k7sk")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_g3mu5")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_nlfdx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_km1he")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_xa2pf")
}],
"loop": true,
"name": &"walk",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_7puah"]
radius = 12.0
[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health")]
[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health", "_audio")]
rotates = false
loop = false
script = ExtResource("1_qqq3s")
Health = NodePath("Scripts/Health")
_audio = NodePath("AudioStreamPlayer2D")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1)
texture_filter = 1
sprite_frames = SubResource("SpriteFrames_ewbju")
animation = &"walk"
autoplay = "walk"
frame_progress = 0.2934902
offset = Vector2(0, -16)
[node name="Scripts" type="Node" parent="."]
[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_pathFollow2D")]
[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_enemy", "_pathFollow2D")]
script = ExtResource("3_pbvk1")
_enemy = NodePath("../..")
_pathFollow2D = NodePath("../..")
_speed = 25.0
@@ -98,3 +152,7 @@ Enemy = NodePath("..")
[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBox"]
position = Vector2(0, -14)
shape = SubResource("CircleShape2D_7puah")
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("6_pbvk1")
volume_db = -20.0
+15 -4
View File
@@ -1,9 +1,11 @@
[gd_scene load_steps=15 format=3 uid="uid://bawoevqlooah0"]
[gd_scene load_steps=17 format=3 uid="uid://bawoevqlooah0"]
[ext_resource type="Script" uid="uid://bj52mq7uip7di" path="res://Scripts/Enemies/Enemy.cs" id="1_0paat"]
[ext_resource type="Texture2D" uid="uid://blkxqlgahm4al" path="res://Assets/Sprites/Characters/Enemies/stump-Sheet.png" id="2_0paat"]
[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="3_8v58s"]
[ext_resource type="Script" uid="uid://dvkd1keu854so" path="res://Scripts/Components/Health.cs" id="4_04dlg"]
[ext_resource type="Script" uid="uid://c247m8m3qmlk0" path="res://Scripts/Enemies/EnemyArea.cs" id="5_pitds"]
[ext_resource type="AudioStream" uid="uid://qx5kenslqkk6" path="res://Assets/Sounds/Sfx/stumphit.wav" id="6_8v58s"]
[sub_resource type="AtlasTexture" id="AtlasTexture_pitds"]
atlas = ExtResource("2_0paat")
@@ -72,24 +74,27 @@ animations = [{
[sub_resource type="CircleShape2D" id="CircleShape2D_7puah"]
radius = 12.0
[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health")]
[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health", "_audio")]
rotates = false
loop = false
script = ExtResource("1_0paat")
Type = 1
Health = NodePath("Scripts/Health")
_audio = NodePath("AudioStreamPlayer2D")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
texture_filter = 1
sprite_frames = SubResource("SpriteFrames_ewbju")
autoplay = "default"
frame = 1
frame_progress = 0.31093782
offset = Vector2(0, -16)
[node name="Scripts" type="Node" parent="."]
[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_pathFollow2D")]
[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_enemy", "_pathFollow2D")]
script = ExtResource("3_8v58s")
_enemy = NodePath("../..")
_pathFollow2D = NodePath("../..")
_speed = 25.0
@@ -97,10 +102,16 @@ _speed = 25.0
script = ExtResource("4_04dlg")
_baseMaxHp = 50.0
[node name="HitBox" type="Area2D" parent="."]
[node name="HitBox" type="Area2D" parent="." node_paths=PackedStringArray("Enemy")]
collision_layer = 4
collision_mask = 0
script = ExtResource("5_pitds")
Enemy = NodePath("..")
[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBox"]
position = Vector2(0, -14)
shape = SubResource("CircleShape2D_7puah")
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("6_8v58s")
volume_db = -20.0
+66
View File
@@ -0,0 +1,66 @@
[gd_scene load_steps=9 format=3 uid="uid://wucwxtp1w12q"]
[ext_resource type="Script" uid="uid://ln2lt16fi47q" path="res://Scripts/Projectiles/Projectile.cs" id="1_yxym4"]
[ext_resource type="Texture2D" uid="uid://dxon2g2sn48jq" path="res://Assets/Sprites/Projectiles/blueflame.png" id="2_yxym4"]
[sub_resource type="CircleShape2D" id="CircleShape2D_llqe1"]
radius = 8.062258
[sub_resource type="AtlasTexture" id="AtlasTexture_opdl0"]
atlas = ExtResource("2_yxym4")
region = Rect2(0, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_baewk"]
atlas = ExtResource("2_yxym4")
region = Rect2(16, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_laj71"]
atlas = ExtResource("2_yxym4")
region = Rect2(32, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_e8kgl"]
atlas = ExtResource("2_yxym4")
region = Rect2(48, 0, 16, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_0qapt"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_opdl0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_baewk")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_laj71")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_e8kgl")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[node name="Fireball" type="Node2D" node_paths=PackedStringArray("_hurtBox")]
texture_filter = 1
scale = Vector2(0.75, 0.75)
script = ExtResource("1_yxym4")
_superEffective = Array[int]([2])
_baseDamage = 25.0
_speed = 250.0
_hurtBox = NodePath("Hurtbox")
[node name="Hurtbox" type="Area2D" parent="."]
collision_layer = 0
collision_mask = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hurtbox"]
shape = SubResource("CircleShape2D_llqe1")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1)
rotation = -1.5707964
sprite_frames = SubResource("SpriteFrames_0qapt")
autoplay = "default"
offset = Vector2(0, -8)
+2
View File
@@ -44,6 +44,7 @@ animations = [{
[node name="Fireball" type="Node2D" node_paths=PackedStringArray("_hurtBox")]
texture_filter = 1
scale = Vector2(0.75, 0.75)
script = ExtResource("1_llqe1")
_superEffective = Array[int]([1])
_baseDamage = 25.0
@@ -61,4 +62,5 @@ shape = SubResource("CircleShape2D_llqe1")
self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1)
rotation = -1.5707964
sprite_frames = SubResource("SpriteFrames_0qapt")
autoplay = "default"
offset = Vector2(0, -8)
+59
View File
@@ -0,0 +1,59 @@
[gd_scene load_steps=8 format=3 uid="uid://deud430j2w18n"]
[ext_resource type="Script" uid="uid://ln2lt16fi47q" path="res://Scripts/Projectiles/Projectile.cs" id="1_g5vj3"]
[ext_resource type="Texture2D" uid="uid://bfclgdy7dusmg" path="res://Assets/Sprites/Projectiles/projectile_green-Sheet.png" id="2_g5vj3"]
[sub_resource type="CircleShape2D" id="CircleShape2D_llqe1"]
radius = 8.062258
[sub_resource type="AtlasTexture" id="AtlasTexture_pj5bm"]
atlas = ExtResource("2_g5vj3")
region = Rect2(0, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_8cpk0"]
atlas = ExtResource("2_g5vj3")
region = Rect2(16, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_nbvp2"]
atlas = ExtResource("2_g5vj3")
region = Rect2(32, 0, 16, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_0qapt"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_pj5bm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8cpk0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_nbvp2")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[node name="Fireball" type="Node2D" node_paths=PackedStringArray("_hurtBox")]
texture_filter = 1
scale = Vector2(0.75, 0.75)
script = ExtResource("1_g5vj3")
_superEffective = Array[int]([0])
_baseDamage = 25.0
_speed = 250.0
_hurtBox = NodePath("Hurtbox")
[node name="Hurtbox" type="Area2D" parent="."]
collision_layer = 0
collision_mask = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hurtbox"]
shape = SubResource("CircleShape2D_llqe1")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1)
rotation = -1.5707964
sprite_frames = SubResource("SpriteFrames_0qapt")
autoplay = "default"
offset = Vector2(0, -8)
@@ -0,0 +1,85 @@
[gd_scene load_steps=12 format=3 uid="uid://8230dpmp7mic"]
[ext_resource type="Texture2D" uid="uid://be7hl01iuo5af" path="res://Assets/Sprites/Characters/Player/kitsune-Sheet.png" id="1_8pa4j"]
[ext_resource type="Script" uid="uid://c4764ubjc3tan" path="res://Scripts/Turrets/TurretPlaceholder.cs" id="1_m8yif"]
[sub_resource type="AtlasTexture" id="AtlasTexture_m8yif"]
atlas = ExtResource("1_8pa4j")
region = Rect2(0, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_mxl7p"]
atlas = ExtResource("1_8pa4j")
region = Rect2(16, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_5c7uc"]
atlas = ExtResource("1_8pa4j")
region = Rect2(32, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_27ihx"]
atlas = ExtResource("1_8pa4j")
region = Rect2(48, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_rkws8"]
atlas = ExtResource("1_8pa4j")
region = Rect2(64, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_ppr0o"]
atlas = ExtResource("1_8pa4j")
region = Rect2(80, 0, 16, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_ebmjs"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_m8yif")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mxl7p")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5c7uc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_27ihx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_rkws8")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ppr0o")
}],
"loop": true,
"name": &"idle",
"speed": 8.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_y5hcb"]
radius = 7.0
[sub_resource type="QuadMesh" id="QuadMesh_5wxv7"]
size = Vector2(100, 100)
[node name="Turret" type="Node2D" node_paths=PackedStringArray("_placementChecker")]
y_sort_enabled = true
texture_filter = 1
script = ExtResource("1_m8yif")
_placementChecker = NodePath("PlacementCollider")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
self_modulate = Color(1, 1, 1, 0.49803922)
sprite_frames = SubResource("SpriteFrames_ebmjs")
animation = &"idle"
autoplay = "idle"
frame_progress = 0.66817015
offset = Vector2(0, -16)
[node name="PlacementCollider" type="Area2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlacementCollider"]
position = Vector2(0, -5)
rotation = 1.5707964
shape = SubResource("CircleShape2D_y5hcb")
[node name="MeshInstance2D" type="MeshInstance2D" parent="."]
visible = false
mesh = SubResource("QuadMesh_5wxv7")
+85
View File
@@ -0,0 +1,85 @@
[gd_scene load_steps=12 format=3 uid="uid://dmyv5hki78wf7"]
[ext_resource type="Script" uid="uid://c4764ubjc3tan" path="res://Scripts/Turrets/TurretPlaceholder.cs" id="1_eybvl"]
[ext_resource type="Texture2D" uid="uid://c6dl0tlkdtis1" path="res://Assets/Sprites/Characters/Player/oniSheet.png" id="2_eybvl"]
[sub_resource type="AtlasTexture" id="AtlasTexture_o7til"]
atlas = ExtResource("2_eybvl")
region = Rect2(0, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_d2vfx"]
atlas = ExtResource("2_eybvl")
region = Rect2(16, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_oap50"]
atlas = ExtResource("2_eybvl")
region = Rect2(32, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_8du7j"]
atlas = ExtResource("2_eybvl")
region = Rect2(48, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_q65kb"]
atlas = ExtResource("2_eybvl")
region = Rect2(64, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_tw2se"]
atlas = ExtResource("2_eybvl")
region = Rect2(80, 0, 16, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_ebmjs"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_o7til")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_d2vfx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_oap50")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8du7j")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_q65kb")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tw2se")
}],
"loop": true,
"name": &"idle",
"speed": 8.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_y5hcb"]
radius = 7.0
[sub_resource type="QuadMesh" id="QuadMesh_5wxv7"]
size = Vector2(100, 100)
[node name="Turret" type="Node2D" node_paths=PackedStringArray("_placementChecker")]
y_sort_enabled = true
texture_filter = 1
script = ExtResource("1_eybvl")
_placementChecker = NodePath("PlacementCollider")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
self_modulate = Color(1, 1, 1, 0.49803922)
sprite_frames = SubResource("SpriteFrames_ebmjs")
animation = &"idle"
autoplay = "idle"
frame_progress = 0.66817015
offset = Vector2(0, -16)
[node name="PlacementCollider" type="Area2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlacementCollider"]
position = Vector2(0, -5)
rotation = 1.5707964
shape = SubResource("CircleShape2D_y5hcb")
[node name="MeshInstance2D" type="MeshInstance2D" parent="."]
visible = false
mesh = SubResource("QuadMesh_5wxv7")
@@ -0,0 +1,85 @@
[gd_scene load_steps=12 format=3 uid="uid://dqyr3m6o0e3i"]
[ext_resource type="Script" uid="uid://c4764ubjc3tan" path="res://Scripts/Turrets/TurretPlaceholder.cs" id="1_1ptjx"]
[ext_resource type="Texture2D" uid="uid://codbtra5i6ara" path="res://Assets/Sprites/Characters/Player/tengu-Sheet.png" id="2_1ptjx"]
[sub_resource type="AtlasTexture" id="AtlasTexture_a6rco"]
atlas = ExtResource("2_1ptjx")
region = Rect2(0, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_42avh"]
atlas = ExtResource("2_1ptjx")
region = Rect2(16, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_e075m"]
atlas = ExtResource("2_1ptjx")
region = Rect2(32, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_tmypy"]
atlas = ExtResource("2_1ptjx")
region = Rect2(48, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_lgt5p"]
atlas = ExtResource("2_1ptjx")
region = Rect2(64, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_66d3b"]
atlas = ExtResource("2_1ptjx")
region = Rect2(80, 0, 16, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_ebmjs"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_a6rco")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_42avh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_e075m")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tmypy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_lgt5p")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_66d3b")
}],
"loop": true,
"name": &"idle",
"speed": 8.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_y5hcb"]
radius = 7.0
[sub_resource type="QuadMesh" id="QuadMesh_5wxv7"]
size = Vector2(100, 100)
[node name="Turret" type="Node2D" node_paths=PackedStringArray("_placementChecker")]
y_sort_enabled = true
texture_filter = 1
script = ExtResource("1_1ptjx")
_placementChecker = NodePath("PlacementCollider")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
self_modulate = Color(1, 1, 1, 0.49803922)
sprite_frames = SubResource("SpriteFrames_ebmjs")
animation = &"idle"
autoplay = "idle"
frame_progress = 0.8244228
offset = Vector2(0, -16)
[node name="PlacementCollider" type="Area2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlacementCollider"]
position = Vector2(0, -5)
rotation = 1.5707964
shape = SubResource("CircleShape2D_y5hcb")
[node name="MeshInstance2D" type="MeshInstance2D" parent="."]
visible = false
mesh = SubResource("QuadMesh_5wxv7")
+31 -3
View File
@@ -1,9 +1,11 @@
[gd_scene load_steps=15 format=3 uid="uid://cx7gr555b1gov"]
[gd_scene load_steps=18 format=3 uid="uid://cx7gr555b1gov"]
[ext_resource type="Texture2D" uid="uid://be7hl01iuo5af" path="res://Assets/Sprites/Characters/Player/kitsune-Sheet.png" id="1_0bpay"]
[ext_resource type="Script" uid="uid://cxrhl65cjw4yr" path="res://Scripts/Turrets/Turret.cs" id="2_jjtgc"]
[ext_resource type="Script" uid="uid://cy00plvsi6vkn" path="res://Scripts/Projectiles/ProjectilePool.cs" id="3_d0rgn"]
[ext_resource type="PackedScene" uid="uid://cr6shokga0dy6" path="res://Prefabs/Projectiles/Fireball.tscn" id="4_jjtgc"]
[ext_resource type="PackedScene" uid="uid://wucwxtp1w12q" path="res://Prefabs/Projectiles/Blueflame.tscn" id="4_jjtgc"]
[ext_resource type="Script" uid="uid://bpqof3jshxnug" path="res://Scripts/Turrets/DragMover.cs" id="5_d0rgn"]
[ext_resource type="AudioStream" uid="uid://dt18fd3icyuxu" path="res://Assets/Sounds/Sfx/kitsune.wav" id="6_cnydl"]
[sub_resource type="AtlasTexture" id="AtlasTexture_3dryh"]
atlas = ExtResource("1_0bpay")
@@ -61,6 +63,9 @@ radius = 50.0
[sub_resource type="CircleShape2D" id="CircleShape2D_y5hcb"]
radius = 7.0
[sub_resource type="RectangleShape2D" id="RectangleShape2D_jjtgc"]
size = Vector2(32, 16)
[sub_resource type="QuadMesh" id="QuadMesh_5wxv7"]
size = Vector2(100, 100)
@@ -78,33 +83,56 @@ offset = Vector2(0, -16)
[node name="Scripts" type="Node" parent="."]
[node name="Turret" type="Node" parent="Scripts" node_paths=PackedStringArray("_Attackrange", "_parent", "_projectilePool")]
[node name="Turret" type="Node" parent="Scripts" node_paths=PackedStringArray("_Attackrange", "_parent", "_projectilePool", "_audio")]
script = ExtResource("2_jjtgc")
_Attackrange = NodePath("../../ShootArea")
_fireRate = 1.0
_parent = NodePath("../..")
_projectilePool = NodePath("../ProjectilePool")
_audio = NodePath("../../AudioStreamPlayer2D")
[node name="ProjectilePool" type="Node" parent="Scripts"]
script = ExtResource("3_d0rgn")
_scene = ExtResource("4_jjtgc")
_poolSize = 10
[node name="DragMover" type="Node" parent="Scripts" node_paths=PackedStringArray("Parent", "DragArea", "CheckArea", "ShootArea")]
script = ExtResource("5_d0rgn")
Parent = NodePath("../..")
DragArea = NodePath("../../DragCollider")
CheckArea = NodePath("../../PlacementCollider")
ShootArea = NodePath("../../ShootArea")
[node name="ShootArea" type="Area2D" parent="."]
collision_layer = 0
collision_mask = 4
input_pickable = false
[node name="CollisionShape2D" type="CollisionShape2D" parent="ShootArea"]
rotation = 1.5707964
shape = SubResource("CircleShape2D_5wxv7")
[node name="PlacementCollider" type="Area2D" parent="."]
input_pickable = false
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlacementCollider"]
position = Vector2(0, -5)
rotation = 1.5707964
shape = SubResource("CircleShape2D_y5hcb")
[node name="DragCollider" type="Area2D" parent="."]
collision_layer = 2147483648
collision_mask = 2147483648
[node name="CollisionShape2D" type="CollisionShape2D" parent="DragCollider"]
position = Vector2(0, -16)
rotation = 1.5707964
shape = SubResource("RectangleShape2D_jjtgc")
[node name="MeshInstance2D" type="MeshInstance2D" parent="."]
visible = false
mesh = SubResource("QuadMesh_5wxv7")
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("6_cnydl")
volume_db = -20.0
+136
View File
@@ -0,0 +1,136 @@
[gd_scene load_steps=18 format=3 uid="uid://8fsvnmto0ckj"]
[ext_resource type="Texture2D" uid="uid://c6dl0tlkdtis1" path="res://Assets/Sprites/Characters/Player/oniSheet.png" id="1_rg6xk"]
[ext_resource type="Script" uid="uid://cxrhl65cjw4yr" path="res://Scripts/Turrets/Turret.cs" id="2_hi1ge"]
[ext_resource type="Script" uid="uid://cy00plvsi6vkn" path="res://Scripts/Projectiles/ProjectilePool.cs" id="3_if52b"]
[ext_resource type="PackedScene" uid="uid://deud430j2w18n" path="res://Prefabs/Projectiles/GreenFist.tscn" id="4_rg6xk"]
[ext_resource type="Script" uid="uid://bpqof3jshxnug" path="res://Scripts/Turrets/DragMover.cs" id="5_hi1ge"]
[ext_resource type="AudioStream" uid="uid://ce5vqm3tts58o" path="res://Assets/Sounds/Sfx/oni.wav" id="6_if52b"]
[sub_resource type="AtlasTexture" id="AtlasTexture_hi1ge"]
atlas = ExtResource("1_rg6xk")
region = Rect2(0, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_if52b"]
atlas = ExtResource("1_rg6xk")
region = Rect2(16, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_aqbic"]
atlas = ExtResource("1_rg6xk")
region = Rect2(32, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_nxpwl"]
atlas = ExtResource("1_rg6xk")
region = Rect2(48, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_tmcq1"]
atlas = ExtResource("1_rg6xk")
region = Rect2(64, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_ahiq0"]
atlas = ExtResource("1_rg6xk")
region = Rect2(80, 0, 16, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_ebmjs"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_hi1ge")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_if52b")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_aqbic")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_nxpwl")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tmcq1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ahiq0")
}],
"loop": true,
"name": &"idle",
"speed": 8.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_5wxv7"]
radius = 50.0
[sub_resource type="CircleShape2D" id="CircleShape2D_y5hcb"]
radius = 7.0
[sub_resource type="QuadMesh" id="QuadMesh_5wxv7"]
size = Vector2(100, 100)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_rg6xk"]
size = Vector2(32, 16)
[node name="Turret" type="Node2D"]
y_sort_enabled = true
texture_filter = 1
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1)
sprite_frames = SubResource("SpriteFrames_ebmjs")
animation = &"idle"
autoplay = "idle"
frame_progress = 0.8244228
offset = Vector2(0, -16)
[node name="Scripts" type="Node" parent="."]
[node name="Turret" type="Node" parent="Scripts" node_paths=PackedStringArray("_Attackrange", "_parent", "_projectilePool", "_audio")]
script = ExtResource("2_hi1ge")
_Attackrange = NodePath("../../ShootArea")
_fireRate = 1.0
_parent = NodePath("../..")
_projectilePool = NodePath("../ProjectilePool")
_audio = NodePath("../../AudioStreamPlayer2D")
[node name="ProjectilePool" type="Node" parent="Scripts"]
script = ExtResource("3_if52b")
_scene = ExtResource("4_rg6xk")
_poolSize = 10
[node name="DragMover" type="Node" parent="Scripts" node_paths=PackedStringArray("Parent", "DragArea", "CheckArea", "ShootArea")]
script = ExtResource("5_hi1ge")
Parent = NodePath("../..")
DragArea = NodePath("../../DragCollider")
CheckArea = NodePath("../../PlacementCollider")
ShootArea = NodePath("../../ShootArea")
[node name="ShootArea" type="Area2D" parent="."]
collision_layer = 0
collision_mask = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="ShootArea"]
rotation = 1.5707964
shape = SubResource("CircleShape2D_5wxv7")
[node name="PlacementCollider" type="Area2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlacementCollider"]
position = Vector2(0, -5)
rotation = 1.5707964
shape = SubResource("CircleShape2D_y5hcb")
[node name="MeshInstance2D" type="MeshInstance2D" parent="."]
visible = false
mesh = SubResource("QuadMesh_5wxv7")
[node name="DragCollider" type="Area2D" parent="."]
collision_layer = 2147483648
collision_mask = 2147483648
[node name="CollisionShape2D" type="CollisionShape2D" parent="DragCollider"]
position = Vector2(0, -16)
rotation = 1.5707964
shape = SubResource("RectangleShape2D_rg6xk")
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("6_if52b")
volume_db = -20.0
+136
View File
@@ -0,0 +1,136 @@
[gd_scene load_steps=18 format=3 uid="uid://cthdcnxhbyad2"]
[ext_resource type="Texture2D" uid="uid://codbtra5i6ara" path="res://Assets/Sprites/Characters/Player/tengu-Sheet.png" id="1_3e4v5"]
[ext_resource type="Script" uid="uid://cxrhl65cjw4yr" path="res://Scripts/Turrets/Turret.cs" id="2_ahbvo"]
[ext_resource type="Script" uid="uid://cy00plvsi6vkn" path="res://Scripts/Projectiles/ProjectilePool.cs" id="3_466qr"]
[ext_resource type="PackedScene" uid="uid://cr6shokga0dy6" path="res://Prefabs/Projectiles/Fireball.tscn" id="4_mtyrr"]
[ext_resource type="Script" uid="uid://bpqof3jshxnug" path="res://Scripts/Turrets/DragMover.cs" id="5_ahbvo"]
[ext_resource type="AudioStream" uid="uid://wvrhsssfi7w3" path="res://Assets/Sounds/Sfx/tengu.wav" id="6_466qr"]
[sub_resource type="AtlasTexture" id="AtlasTexture_ahbvo"]
atlas = ExtResource("1_3e4v5")
region = Rect2(0, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_466qr"]
atlas = ExtResource("1_3e4v5")
region = Rect2(16, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_mtyrr"]
atlas = ExtResource("1_3e4v5")
region = Rect2(32, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_wfhqm"]
atlas = ExtResource("1_3e4v5")
region = Rect2(48, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_1ekx4"]
atlas = ExtResource("1_3e4v5")
region = Rect2(64, 0, 16, 32)
[sub_resource type="AtlasTexture" id="AtlasTexture_u8dw0"]
atlas = ExtResource("1_3e4v5")
region = Rect2(80, 0, 16, 32)
[sub_resource type="SpriteFrames" id="SpriteFrames_ebmjs"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ahbvo")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_466qr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_mtyrr")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wfhqm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_1ekx4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_u8dw0")
}],
"loop": true,
"name": &"idle",
"speed": 8.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_5wxv7"]
radius = 50.0
[sub_resource type="CircleShape2D" id="CircleShape2D_y5hcb"]
radius = 7.0
[sub_resource type="QuadMesh" id="QuadMesh_5wxv7"]
size = Vector2(100, 100)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_3e4v5"]
size = Vector2(32, 16)
[node name="Turret" type="Node2D"]
y_sort_enabled = true
texture_filter = 1
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1)
sprite_frames = SubResource("SpriteFrames_ebmjs")
animation = &"idle"
autoplay = "idle"
frame_progress = 0.8244228
offset = Vector2(0, -16)
[node name="Scripts" type="Node" parent="."]
[node name="Turret" type="Node" parent="Scripts" node_paths=PackedStringArray("_Attackrange", "_parent", "_projectilePool", "_audio")]
script = ExtResource("2_ahbvo")
_Attackrange = NodePath("../../ShootArea")
_fireRate = 1.0
_parent = NodePath("../..")
_projectilePool = NodePath("../ProjectilePool")
_audio = NodePath("../../AudioStreamPlayer2D")
[node name="ProjectilePool" type="Node" parent="Scripts"]
script = ExtResource("3_466qr")
_scene = ExtResource("4_mtyrr")
_poolSize = 10
[node name="DragMover" type="Node" parent="Scripts" node_paths=PackedStringArray("Parent", "DragArea", "CheckArea", "ShootArea")]
script = ExtResource("5_ahbvo")
Parent = NodePath("../..")
DragArea = NodePath("../../DragCollider")
CheckArea = NodePath("../../PlacementCollider")
ShootArea = NodePath("../../ShootArea")
[node name="ShootArea" type="Area2D" parent="."]
collision_layer = 0
collision_mask = 4
[node name="CollisionShape2D" type="CollisionShape2D" parent="ShootArea"]
rotation = 1.5707964
shape = SubResource("CircleShape2D_5wxv7")
[node name="PlacementCollider" type="Area2D" parent="."]
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlacementCollider"]
position = Vector2(0, -5)
rotation = 1.5707964
shape = SubResource("CircleShape2D_y5hcb")
[node name="MeshInstance2D" type="MeshInstance2D" parent="."]
visible = false
mesh = SubResource("QuadMesh_5wxv7")
[node name="DragCollider" type="Area2D" parent="."]
collision_layer = 2147483648
collision_mask = 2147483648
[node name="CollisionShape2D" type="CollisionShape2D" parent="DragCollider"]
position = Vector2(0, -16)
rotation = 1.5707964
shape = SubResource("RectangleShape2D_3e4v5")
[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("6_466qr")
volume_db = -20.0
+25
View File
@@ -0,0 +1,25 @@
[gd_resource type="VisualShader" load_steps=3 format=3 uid="uid://8dk8mi2w1xl6"]
[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_nmayw"]
input_name = "texture"
[sub_resource type="VisualShaderNodeTexture" id="VisualShaderNodeTexture_v3wud"]
output_port_for_preview = 0
expanded_output_ports = [0]
source = 5
[resource]
code = "shader_type canvas_item;
render_mode blend_mix;
"
mode = 1
flags/light_only = false
nodes/fragment/0/position = Vector2(660, 140)
nodes/fragment/2/node = SubResource("VisualShaderNodeInput_nmayw")
nodes/fragment/2/position = Vector2(-420, 100)
nodes/fragment/3/node = SubResource("VisualShaderNodeTexture_v3wud")
nodes/fragment/3/position = Vector2(-40, 80)
nodes/fragment/connections = PackedInt32Array(2, 0, 3, 2)
+235 -4
View File
@@ -1,19 +1,39 @@
[gd_scene load_steps=23 format=4 uid="uid://csyk43kt3xbyx"]
[gd_scene load_steps=45 format=4 uid="uid://csyk43kt3xbyx"]
[ext_resource type="TileSet" uid="uid://b15j7vhkfu415" path="res://Resources/environmentTileMap.tres" id="1_ebmjs"]
[ext_resource type="Script" uid="uid://djp8dmixf6sq2" path="res://Scripts/Common/GameController.cs" id="1_i6g32"]
[ext_resource type="Script" uid="uid://b0uosq6r5dbqa" path="res://Scripts/Turrets/TurretController.cs" id="1_nb51f"]
[ext_resource type="Script" uid="uid://bhxyvnirfeipr" path="res://Scripts/Enemies/EnemyPool.cs" id="2_i6g32"]
[ext_resource type="Script" uid="uid://cds2rrl4yjexf" path="res://Scripts/Enemies/EnemySpawner.cs" id="3_1l0tm"]
[ext_resource type="PackedScene" uid="uid://8230dpmp7mic" path="res://Prefabs/Turrets/Placeholders/kitsune_ph.tscn" id="3_ewbju"]
[ext_resource type="PackedScene" uid="uid://8fsvnmto0ckj" path="res://Prefabs/Turrets/oni.tscn" id="3_exi56"]
[ext_resource type="PackedScene" uid="uid://cthdcnxhbyad2" path="res://Prefabs/Turrets/tengu.tscn" id="4_7t8sx"]
[ext_resource type="PackedScene" uid="uid://dmyv5hki78wf7" path="res://Prefabs/Turrets/Placeholders/oni_ph.tscn" id="4_iivbl"]
[ext_resource type="PackedScene" uid="uid://dqyr3m6o0e3i" path="res://Prefabs/Turrets/Placeholders/tengu_ph.tscn" id="5_7nbq1"]
[ext_resource type="Texture2D" uid="uid://bnq8qxou2sgvw" path="res://Assets/Sprites/Environments/sakura.png" id="5_i6g32"]
[ext_resource type="PackedScene" uid="uid://y54cvugsx75b" path="res://Prefabs/Enemies/stone.tscn" id="5_wowpa"]
[ext_resource type="Texture2D" uid="uid://cs7vjtoap8v26" path="res://Assets/Sprites/Environments/environment.png" id="6_i6g32"]
[ext_resource type="PackedScene" uid="uid://cx7gr555b1gov" path="res://Prefabs/Turrets/kitsune.tscn" id="8_h4fw4"]
[ext_resource type="Texture2D" uid="uid://dxon2g2sn48jq" path="res://Assets/Sprites/Projectiles/blueflame.png" id="8_ldgsr"]
[ext_resource type="Script" uid="uid://dxx6nyrs12mr6" path="res://Scripts/Common/ProjectileParent.cs" id="8_v158k"]
[ext_resource type="Script" uid="uid://df0osorq00h7v" path="res://Scripts/CameraController.cs" id="10_ldgsr"]
[ext_resource type="Texture2D" uid="uid://cnoy4do2talkr" path="res://Assets/Sprites/UI/MASKS.png" id="11_o5yvi"]
[ext_resource type="PackedScene" uid="uid://bawoevqlooah0" path="res://Prefabs/Enemies/stump.tscn" id="11_vm72l"]
[ext_resource type="PackedScene" uid="uid://c37hbbbx8wje" path="res://Prefabs/Enemies/liquid.tscn" id="12_22asu"]
[ext_resource type="FontFile" uid="uid://b8lsp07ucxq6p" path="res://Assets/Fonts/MintsodaLimeGreen13X16Regular-KVvzA.ttf" id="12_rfjv2"]
[ext_resource type="Texture2D" uid="uid://b2wa0rqssefiy" path="res://Assets/Sprites/UI/soul.png" id="13_1phco"]
[ext_resource type="Shader" uid="uid://8dk8mi2w1xl6" path="res://Scenes/game.tres" id="14_1phco"]
[ext_resource type="Texture2D" uid="uid://2x62ipg12256" path="res://Assets/Sprites/Vfx/particle.png" id="16_22asu"]
[ext_resource type="Script" uid="uid://dxcke7geb20dm" path="res://Scripts/Misc/Floating.gd" id="19_fkdbe"]
[ext_resource type="AudioStream" uid="uid://dbsuw8omrcx1d" path="res://Assets/Sounds/Music/8bit-mysterious-kyouto_reverb_Loop.ogg" id="26_fkdbe"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_1l0tm"]
size = Vector2(19, 11)
[sub_resource type="Gradient" id="Gradient_fkdbe"]
offsets = PackedFloat32Array(0, 0.6683673, 1)
colors = PackedColorArray(0, 0, 0, 0, 4.416, 2.127, 3.729, 1, 1, 1, 1, 0)
[sub_resource type="AtlasTexture" id="AtlasTexture_1l0tm"]
atlas = ExtResource("6_i6g32")
region = Rect2(176, 107, 32, 37)
@@ -95,21 +115,61 @@ adjustment_enabled = true
adjustment_brightness = 0.75
adjustment_contrast = 1.1
[sub_resource type="AtlasTexture" id="AtlasTexture_nb51f"]
atlas = ExtResource("11_o5yvi")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_nnt18"]
atlas = ExtResource("11_o5yvi")
region = Rect2(0, 16, 16, 15)
[sub_resource type="AtlasTexture" id="AtlasTexture_ewbju"]
atlas = ExtResource("11_o5yvi")
region = Rect2(0, 32, 16, 16)
[sub_resource type="LabelSettings" id="LabelSettings_o5yvi"]
font = ExtResource("12_rfjv2")
font_size = 24
outline_size = 6
outline_color = Color(0, 0, 0, 1)
shadow_size = 0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_nb51f"]
shader = ExtResource("14_1phco")
[node name="Root" type="Node2D"]
texture_filter = 1
[node name="TurretController" type="Node" parent="."]
[node name="TurretController" type="Node2D" parent="." node_paths=PackedStringArray("_turretParent")]
script = ExtResource("1_nb51f")
_typeToPrefab = Dictionary[int, PackedScene]({
0: ExtResource("8_h4fw4"),
1: ExtResource("3_exi56"),
2: ExtResource("4_7t8sx")
})
_typeToPlaceholder = Dictionary[int, PackedScene]({
0: ExtResource("3_ewbju"),
1: ExtResource("4_iivbl"),
2: ExtResource("5_7nbq1")
})
_turretParent = NodePath("../Level/YSorted/Turrets")
[node name="GameController" type="Node" parent="."]
[node name="GameController" type="Node" parent="." node_paths=PackedStringArray("_CurrencyLabel", "_ShrineHealthLabel")]
script = ExtResource("1_i6g32")
_ShrineStartHP = 100.0
_CurrencyLabel = NodePath("../CanvasLayer/UIRoot/CurrencyImg/CurrencyLabel")
_ShrineHealthLabel = NodePath("../CanvasLayer/UIRoot/ShrineHealthImg/ShrineHealthLabel")
[node name="EnemyController" type="Node" parent="."]
[node name="EnemyPool" type="Node" parent="EnemyController"]
script = ExtResource("2_i6g32")
_scenes = Dictionary[int, PackedScene]({
0: ExtResource("5_wowpa")
0: ExtResource("5_wowpa"),
1: ExtResource("11_vm72l"),
2: ExtResource("12_22asu")
})
_poolSize = 50
[node name="EnemySpawner" type="Node" parent="EnemyController" node_paths=PackedStringArray("_pathParent", "_pool")]
script = ExtResource("3_1l0tm")
@@ -155,12 +215,64 @@ flip_h = true
position = Vector2(33.5, -8.5)
shape = SubResource("RectangleShape2D_1l0tm")
[node name="CPUParticles2D" type="CPUParticles2D" parent="Level/YSorted/StaticBody2D"]
position = Vector2(16, -72)
rotation = 0.7532681
amount = 6
texture = ExtResource("16_22asu")
lifetime = 3.0
randomness = 1.0
lifetime_randomness = 0.31
emission_shape = 1
emission_sphere_radius = 20.55
spread = 0.0
gravity = Vector2(7, 15)
angular_velocity_min = -50.0
angular_velocity_max = 50.0
radial_accel_min = -10.0
radial_accel_max = 10.0
scale_amount_min = 0.2
scale_amount_max = 0.3
color = Color(4.415934, 2.1274936, 3.7294016, 1)
color_ramp = SubResource("Gradient_fkdbe")
[node name="CPUParticles2D2" type="CPUParticles2D" parent="Level/YSorted/StaticBody2D"]
position = Vector2(56, -56)
rotation = 0.7532681
amount = 6
texture = ExtResource("16_22asu")
lifetime = 3.0
randomness = 1.0
lifetime_randomness = 0.31
emission_shape = 1
emission_sphere_radius = 20.55
spread = 0.0
gravity = Vector2(7, 15)
angular_velocity_min = -50.0
angular_velocity_max = 50.0
radial_accel_min = -10.0
radial_accel_max = 10.0
scale_amount_min = 0.2
scale_amount_max = 0.3
color = Color(4.416, 2.127, 3.729, 1)
color_ramp = SubResource("Gradient_fkdbe")
[node name="Shrine" type="Sprite2D" parent="Level/YSorted"]
position = Vector2(0, 44)
texture = SubResource("AtlasTexture_1l0tm")
offset = Vector2(8, -54)
flip_h = true
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Level/YSorted/Shrine"]
self_modulate = Color(3.6229699, 1.2174728, 1.8589382, 1)
position = Vector2(8, -60)
scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_nb51f")
autoplay = "default"
frame = 2
frame_progress = 0.84720045
script = ExtResource("19_fkdbe")
[node name="FairyLights" type="Node2D" parent="Level/YSorted"]
modulate = Color(1.8247963, 1.8247963, 1.8247963, 1)
@@ -170,6 +282,7 @@ scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_nb51f")
autoplay = "default"
frame_progress = 0.41686898
script = ExtResource("19_fkdbe")
[node name="AnimatedSprite2D2" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"]
position = Vector2(-129, -28)
@@ -177,6 +290,7 @@ scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_nb51f")
autoplay = "default"
frame_progress = 0.7475089
script = ExtResource("19_fkdbe")
[node name="AnimatedSprite2D3" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"]
position = Vector2(104, 139)
@@ -184,6 +298,7 @@ scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_nb51f")
autoplay = "default"
frame_progress = 0.7475089
script = ExtResource("19_fkdbe")
[node name="AnimatedSprite2D5" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"]
position = Vector2(278, 54)
@@ -191,6 +306,7 @@ scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_nb51f")
autoplay = "default"
frame_progress = 0.7475089
script = ExtResource("19_fkdbe")
[node name="AnimatedSprite2D6" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"]
position = Vector2(-91, 247)
@@ -198,6 +314,7 @@ scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_nb51f")
autoplay = "default"
frame_progress = 0.7475089
script = ExtResource("19_fkdbe")
[node name="AnimatedSprite2D7" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"]
position = Vector2(-250, 92)
@@ -205,6 +322,7 @@ scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_nb51f")
autoplay = "default"
frame_progress = 0.7475089
script = ExtResource("19_fkdbe")
[node name="AnimatedSprite2D8" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"]
position = Vector2(40, -200)
@@ -212,6 +330,7 @@ scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_nb51f")
autoplay = "default"
frame_progress = 0.7475089
script = ExtResource("19_fkdbe")
[node name="AnimatedSprite2D4" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"]
position = Vector2(140, -98)
@@ -219,6 +338,7 @@ scale = Vector2(0.5, 0.5)
sprite_frames = SubResource("SpriteFrames_nb51f")
autoplay = "default"
frame_progress = 0.7475089
script = ExtResource("19_fkdbe")
[node name="Enemies" type="Node2D" parent="Level/YSorted"]
y_sort_enabled = true
@@ -269,5 +389,116 @@ maxX = 300.0
minY = -300.0
maxY = 300.0
[node name="AudioListener2D" type="AudioListener2D" parent="Camera2D"]
current = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_h4fw4")
[node name="CanvasLayer" type="CanvasLayer" parent="."]
[node name="UIRoot" type="Control" parent="CanvasLayer"]
texture_filter = 1
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 1
[node name="GridContainer" type="GridContainer" parent="CanvasLayer/UIRoot"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -568.0
offset_top = -96.0
offset_right = -434.0
offset_bottom = -54.0
grow_horizontal = 2
grow_vertical = 0
scale = Vector2(2, 2)
columns = 3
[node name="Oni" type="Button" parent="CanvasLayer/UIRoot/GridContainer"]
custom_minimum_size = Vector2(42, 42)
layout_mode = 2
icon = SubResource("AtlasTexture_nb51f")
icon_alignment = 1
expand_icon = true
[node name="Kitsune" type="Button" parent="CanvasLayer/UIRoot/GridContainer"]
custom_minimum_size = Vector2(42, 42)
layout_mode = 2
icon = SubResource("AtlasTexture_nnt18")
icon_alignment = 1
expand_icon = true
[node name="Tengu" type="Button" parent="CanvasLayer/UIRoot/GridContainer"]
custom_minimum_size = Vector2(42, 42)
layout_mode = 2
icon = SubResource("AtlasTexture_ewbju")
icon_alignment = 1
expand_icon = true
[node name="CurrencyImg" type="TextureRect" parent="CanvasLayer/UIRoot"]
layout_mode = 1
offset_left = 8.0
offset_top = 8.0
offset_right = 48.0
offset_bottom = 48.0
scale = Vector2(2, 2)
texture = ExtResource("13_1phco")
[node name="CurrencyLabel" type="Label" parent="CanvasLayer/UIRoot/CurrencyImg"]
layout_mode = 1
offset_left = 40.0
offset_top = 8.0
offset_right = 158.0
offset_bottom = 36.0
text = "99999999"
label_settings = SubResource("LabelSettings_o5yvi")
[node name="ShrineHealthImg" type="TextureRect" parent="CanvasLayer/UIRoot"]
self_modulate = Color(1, 0, 0, 1)
material = SubResource("ShaderMaterial_nb51f")
layout_mode = 1
offset_left = 8.0
offset_top = 104.0
offset_right = 48.0
offset_bottom = 144.0
scale = Vector2(2, 2)
texture = ExtResource("13_1phco")
[node name="ShrineHealthLabel" type="Label" parent="CanvasLayer/UIRoot/ShrineHealthImg"]
layout_mode = 1
offset_left = 40.0
offset_top = 8.0
offset_right = 158.0
offset_bottom = 36.0
text = "100%"
label_settings = SubResource("LabelSettings_o5yvi")
[node name="StartWaveBtn" type="Button" parent="CanvasLayer/UIRoot"]
visible = false
layout_mode = 0
offset_left = 872.0
offset_top = 568.0
offset_right = 1005.0
offset_bottom = 599.0
scale = Vector2(2, 2)
text = "Start Next Wave"
[node name="MusicPLayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("26_fkdbe")
volume_db = -30.0
autoplay = true
parameters/looping = true
[connection signal="pressed" from="CanvasLayer/UIRoot/GridContainer/Oni" to="TurretController" method="StartPlaceingTurret" binds= [2]]
[connection signal="pressed" from="CanvasLayer/UIRoot/GridContainer/Kitsune" to="TurretController" method="StartPlaceingTurret" binds= [0]]
[connection signal="pressed" from="CanvasLayer/UIRoot/GridContainer/Tengu" to="TurretController" method="StartPlaceingTurret" binds= [1]]
[connection signal="pressed" from="CanvasLayer/UIRoot/StartWaveBtn" to="GameController" method="StartWave"]
+77
View File
@@ -6,13 +6,90 @@ public partial class GameController : Node
public static GameController Instance;
[Export] private float _ShrineStartHP;
[Export] private Label _CurrencyLabel;
[Export] private Label _ShrineHealthLabel;
public int Wave { get; private set; }
public int Currency { get; private set; }
public float ShrineHealth { get; private set; }
private bool _waveOnGoing = false;
public override void _Ready()
{
GameController.Instance = this;
Wave = 0;
Currency = 300;
ShrineHealth = 100;
_CurrencyLabel.Text = Currency.ToString();
_ShrineHealthLabel.Text = $"{(100f * (ShrineHealth /_ShrineStartHP)):F1}%";
CallDeferred(nameof(DelayNextWave));
}
private void StartWave()
{
if (_waveOnGoing) return;
Wave++;
_waveOnGoing = true;
int amountToSpawn = (int)Math.Round(5 * Math.Pow(Wave, 1.05));
for (int i = 0; i < 100; i++)
{
// GD.Print((int)Math.Round(5 * Math.Pow(i + 1, 1.05)));
}
EnemySpawner.Instance.EnemiesSpawned = amountToSpawn;
float baseDelay = 0.67f;
float minDelay = 0.12f; // never go below this
float delay = Math.Max(minDelay, baseDelay * (float)Math.Pow(0.96f, Wave));
for (int i = 0; i < amountToSpawn; i++)
{
EnemySpawner.Instance.SpawnWithDelay(i * delay);
}
}
private async void DelayNextWave()
{
await ToSignal(GetTree().CreateTimer(7.5f), SceneTreeTimer.SignalName.Timeout);
CallDeferred(nameof(StartWave));
}
public void WaveComplete()
{
_waveOnGoing = false;
CallDeferred(nameof(DelayNextWave));
}
public void DamageShrine(float v)
{
v = Math.Abs(v);
ShrineHealth -= v;
_ShrineHealthLabel.Text = $"{(100f * (ShrineHealth /_ShrineStartHP)):F1}%";
if (ShrineHealth <= 0)
{
// TODO LOSE SCENARIO
}
}
public void AddCurrency(int v)
{
v = Math.Abs(v);
Currency += v;
_CurrencyLabel.Text = Currency.ToString();
}
public bool TryRemoveCurrency(int v)
{
v = Math.Abs(v);
if (Currency < v) return false;
Currency -= v;
_CurrencyLabel.Text = Currency.ToString();
return true;
}
}
+9 -2
View File
@@ -11,15 +11,20 @@ public partial class Health : Node
[Signal]
public delegate void DeathEventHandler(Node2D node);
[Signal]
public delegate void DamagedEventHandler();
public override void _EnterTree()
{
CurHP = MaxHP = _baseMaxHp * Mathf.Pow(GameController.Instance.Wave, 1.067f);
// CurHP = MaxHP = _baseMaxHp * Mathf.Pow(GameController.Instance.Wave, 1.067f);
Reset();
}
public void Substract(float v)
{
v = Mathf.Abs(v);
CurHP -= v;
EmitSignalDamaged();
if (CurHP <= 0)
{
EmitSignalDeath(_parent);
@@ -34,6 +39,8 @@ public partial class Health : Node
public void Reset()
{
CurHP = MaxHP = _baseMaxHp * Mathf.Pow(GameController.Instance.Wave, 1.067f);
CurHP = MaxHP = _baseMaxHp * Mathf.Pow(1.075f, GameController.Instance.Wave);
GD.Print("Curhp");
GD.Print(CurHP);
}
}
+12
View File
@@ -5,12 +5,19 @@ public partial class Enemy : PathFollow2D
{
[Export] public EnemyType Type;
[Export] public Health Health;
[Export] private AudioStreamPlayer2D _audio;
public event Action<Enemy> Died;
public event Action<Enemy> ReachedShrine;
public override void _Ready()
{
Health.Death += _ => Died?.Invoke(this);
Health.Damaged += () =>
{
_audio?.SetPitchScale(RandomHelper.Float(0.8f, 1.2f));
_audio?.Play();
};
}
public void ResetEnemy()
@@ -23,4 +30,9 @@ public partial class Enemy : PathFollow2D
Health.Reset();
// reset velocity, animation, AI, etc here
}
public void Despawn()
{
ReachedShrine?.Invoke(this);
}
}
+9 -1
View File
@@ -3,9 +3,12 @@ using System;
public partial class EnemyMovement : Node
{
[Export] private Enemy _enemy;
[Export] private PathFollow2D _pathFollow2D;
[Export] private float _speed;
private float _finalSpeed => _speed + 0.15f * (float)Math.Log(GameController.Instance.Wave + 1);
private double _time = 0;
public override void _EnterTree()
@@ -15,6 +18,11 @@ public partial class EnemyMovement : Node
public override void _Process(double delta)
{
_pathFollow2D.ProgressRatio += (float)delta * (_speed / 1000f);
_pathFollow2D.ProgressRatio += (float)delta * (_finalSpeed / 1000f);
if (_pathFollow2D.ProgressRatio >= 1.0)
{
_enemy.Despawn();
}
}
}
+19 -1
View File
@@ -30,7 +30,8 @@ public partial class EnemyPool : Node
private Enemy CreateEnemy(EnemyType type)
{
var e = _scenes[type].Instantiate<Enemy>();
e.Died += ReturnToPool;
e.Died += Died;
e.ReachedShrine += DamageShrine;
return e;
}
@@ -44,8 +45,25 @@ public partial class EnemyPool : Node
return e;
}
private void DamageShrine(Enemy e)
{
GameController.Instance.DamageShrine(5);
ReturnToPool(e);
}
private void Died(Enemy e)
{
GameController.Instance.AddCurrency(25);
ReturnToPool(e);
}
private void ReturnToPool(Enemy e)
{
EnemySpawner.Instance.EnemiesSpawned--;
if (EnemySpawner.Instance.EnemiesSpawned <= 0)
{
GameController.Instance.WaveComplete();
}
e.GetParent()?.RemoveChild(e);
e.ProcessMode = ProcessModeEnum.Disabled;
_pool[e.Type].Enqueue(e);
+9 -3
View File
@@ -3,22 +3,28 @@ using System.Collections.Generic;
public partial class EnemySpawner : Node
{
public static EnemySpawner Instance;
[Export] private Node _pathParent;
[Export] private EnemyPool _pool;
private readonly List<Path2D> _paths = new();
public int EnemiesSpawned = 0;
public override void _Ready()
{
Instance = this;
foreach (var c in _pathParent.GetChildren())
if (c is Path2D p)
_paths.Add(p);
for (int i = 0; i < 10; i++)
SpawnWithDelay(i * 0.33f);
// for (int i = 0; i < 10; i++)
// SpawnWithDelay(i * 0.33f);
}
private async void SpawnWithDelay(float t)
public async void SpawnWithDelay(float t)
{
await ToSignal(GetTree().CreateTimer(t), SceneTreeTimer.SignalName.Timeout);
Spawn();
+16
View File
@@ -0,0 +1,16 @@
extends Node2D
@export var float_height := 2.0
@export var float_speed := 1.25
var start_y := 0.0
var time := 0.0
var phase := 0.0
func _ready():
start_y = position.y
phase = randf() * TAU # Random value between 0
func _process(delta):
time += delta * float_speed
position.y = start_y + sin(time + phase) * float_height
+1
View File
@@ -0,0 +1 @@
uid://dxcke7geb20dm
+6 -4
View File
@@ -26,14 +26,16 @@ public partial class ProjectilePool : Node
public Projectile Get()
{
var p = _pool.Count > 0 ? _pool.Dequeue() : CreateProjectile();
return p;
// var p = _pool.Count > 0 ? _pool.Dequeue() : CreateProjectile();
// return p;
return CreateProjectile();
}
private void ReturnToPool(Projectile p)
{
p.GetParent()?.RemoveChild(p);
p.ProcessMode = ProcessModeEnum.Disabled;
_pool.Enqueue(p);
p.QueueFree();
// p.ProcessMode = ProcessModeEnum.Disabled;
// _pool.Enqueue(p);
}
}
+12
View File
@@ -0,0 +1,12 @@
using Godot;
public partial class DragArea : Area2D
{
public override void _InputEvent(Viewport viewport, InputEvent @event, int shapeIdx)
{
if (@event is InputEventMouseButton mb && mb.Pressed)
{
GD.Print("Area clicked");
}
}
}
+1
View File
@@ -0,0 +1 @@
uid://bwgxw6ox8b1tq
+76
View File
@@ -0,0 +1,76 @@
using Godot;
public partial class DragMover : Node
{
[Export] public Node2D Parent; // The node that will move
[Export] public Area2D DragArea; // Click detection
[Export] public Area2D CheckArea; // Overlap validation
[Export] public Area2D ShootArea; // This gets disabled while dragging
private bool _dragging;
private Vector2 _dragOffset;
private Vector2 _originalPosition;
private bool _canMove = true;
public override void _Ready()
{
if (Parent == null || DragArea == null || CheckArea == null)
{
GD.PushError("DragMover exports are not assigned.");
return;
}
DragArea.InputEvent += OnDragAreaInputEvent;
_originalPosition = Parent.GlobalPosition;
}
private void OnDragAreaInputEvent(Node viewport, InputEvent @event, long shapeIdx)
{
if (!_canMove) return;
if (@event is not InputEventMouseButton mb) return;
if (mb.ButtonIndex != MouseButton.Left) return;
if (mb.Pressed)
{
_dragging = true;
ShootArea.Monitoring = false;
_originalPosition = Parent.GlobalPosition;
_dragOffset = Parent.GlobalPosition - Parent.GetGlobalMousePosition();
}
else
{
_dragging = false;
ShootArea.Monitoring = true;
// Check overlaps when released
if (CheckArea.HasOverlappingAreas() || CheckArea.HasOverlappingBodies())
{
Parent.GlobalPosition = _originalPosition;
}
else
{
MovementDelay();
}
}
}
public override void _Process(double delta)
{
if (!_dragging) return;
Parent.GlobalPosition = Parent.GetGlobalMousePosition() + _dragOffset;
}
private async void MovementDelay()
{
ShootArea.Monitoring = false;
_canMove = false;
Parent.SetModulate(Color.FromHtml("ffffff20"));
await ToSignal(GetTree().CreateTimer(4), SceneTreeTimer.SignalName.Timeout);
Parent.SetModulate(Color.FromHtml("ffffffff"));
ShootArea.Monitoring = true;
_canMove = true;
}
}
+1
View File
@@ -0,0 +1 @@
uid://bpqof3jshxnug
+3 -2
View File
@@ -11,6 +11,7 @@ public partial class Turret : Node
[Export] private float _fireRate;
[Export] private Node2D _parent;
[Export] private ProjectilePool _projectilePool;
[Export] private AudioStreamPlayer2D _audio;
private float _fireTimer = 0f;
private HashSet<Enemy> _enemiesInRange = new HashSet<Enemy>();
@@ -26,7 +27,6 @@ public partial class Turret : Node
if (enemyHitBox is EnemyArea earea)
{
_enemiesInRange.Add(earea.Enemy);
GD.Print(earea.Name);
}
}
@@ -35,7 +35,6 @@ public partial class Turret : Node
if (enemyHitBox is EnemyArea earea)
{
_enemiesInRange.Remove(earea.Enemy);
GD.Print(earea.Name);
}
}
@@ -45,6 +44,8 @@ public partial class Turret : Node
_fireTimer += (float)delta;
if (!(_fireTimer >= 1f / _fireRate)) return;
_fireTimer = 0;
_audio?.SetPitchScale(RandomHelper.Float(0.8f, 1.2f));
_audio?.Play();
var t = Helpers.GetClosest(_parent,_enemiesInRange.ToArray());
var dir = (t.GlobalPosition - _parent.GlobalPosition).Normalized();
var proj = _projectilePool.Get();
+71 -1
View File
@@ -1,8 +1,78 @@
using System;
using Godot;
using Godot.Collections;
namespace fgj26.Scripts.Turrets;
public enum TurretType
{
Kitsune,
Oni,
Tengu
}
public partial class TurretController : Node2D
{
[Export] private Dictionary<TurretType, PackedScene> _typeToPrefab;
[Export] private Dictionary<TurretType, PackedScene> _typeToPlaceholder;
[Export] private Node2D _turretParent;
[Signal]
public delegate void PlaceTurretEventHandler(TurretType t);
private bool _placingTurret = false;
private TurretPlaceholder _turretPlaceholder;
private TurretType _currentlyPlacingType;
public override void _Ready()
{
PlaceTurret += StartPlaceingTurret;
}
public override void _Input(InputEvent @event)
{
if (_turretPlaceholder == null) return;
if (!_placingTurret) return;
var mpos = GetGlobalMousePosition();
_turretPlaceholder.GlobalPosition = mpos;
if (@event is InputEventMouseButton mb)
{
switch (mb.ButtonIndex)
{
case MouseButton.Left:
if (!_turretPlaceholder.CanPlace) return;
if (!GameController.Instance.TryRemoveCurrency(_turretPlaceholder.Cost)) return;
var newT = _typeToPrefab[_currentlyPlacingType].Instantiate() as Node2D;
_turretParent.AddChild(newT);
newT.GlobalPosition = mpos;
break;
case MouseButton.Right:
break;
default:
return;
}
StopPlacingTurret();
}
}
private void StartPlaceingTurret(TurretType t)
{
if (_turretPlaceholder != null)
{
_turretPlaceholder.GetParent()?.RemoveChild(_turretPlaceholder);
_turretPlaceholder.QueueFree();
}
_turretPlaceholder = _typeToPlaceholder[t].Instantiate() as TurretPlaceholder;
_turretParent.AddChild(_turretPlaceholder);
_currentlyPlacingType = t;
_placingTurret = true;
}
private void StopPlacingTurret()
{
_turretPlaceholder.GetParent()?.RemoveChild(_turretPlaceholder);
_turretPlaceholder.QueueFree();
_turretPlaceholder = null;
_placingTurret = false;
}
}
+15
View File
@@ -0,0 +1,15 @@
using Godot;
public partial class TurretPlaceholder : Node2D
{
[Export] private Area2D _placementChecker;
[Export] public int Cost = 75;
public bool CanPlace { get; private set; }
public override void _Process(double delta)
{
CanPlace = !_placementChecker.HasOverlappingAreas() && !_placementChecker.HasOverlappingBodies();
SetModulate(CanPlace ? Color.FromHtml("ffffff80") : Color.FromHtml("ff000080"));
}
}
+1
View File
@@ -0,0 +1 @@
uid://c4764ubjc3tan
+116
View File
@@ -0,0 +1,116 @@
[preset.0]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="Builds/Windows/kamenguardians.exe"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
shader_baker/enabled=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
application/export_d3d12=0
application/d3d12_agility_sdk_multiarch=true
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=true
dotnet/embed_build_outputs=false
[preset.1]
name="Linux"
platform="Linux"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="Builds/Linux/kamenguardians.x86_64"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
shader_baker/enabled=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=true
dotnet/embed_build_outputs=false
+10 -1
View File
@@ -10,11 +10,20 @@ config_version=5
[application]
config/name="fgj26"
config/name="Kamen Guardians"
config/name_localized={
"ja": "仮面の保護者"
}
config/version="0.0.1"
run/main_scene="uid://csyk43kt3xbyx"
config/features=PackedStringArray("4.5", "C#", "Forward Plus")
boot_splash/show_image=false
config/icon="res://icon.svg"
[display]
window/stretch/mode="viewport"
[dotnet]
project/assembly_name="fgj26"